diff --git a/src/GEOMImpl/GEOMImpl_PipeDriver.cxx b/src/GEOMImpl/GEOMImpl_PipeDriver.cxx index 061f80edf..87a0e5e16 100644 --- a/src/GEOMImpl/GEOMImpl_PipeDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_PipeDriver.cxx @@ -1946,18 +1946,34 @@ Standard_Integer GEOMImpl_PipeDriver::Execute(TFunction_Logbook& log) const } // Get path contour - if (aShapePath.ShapeType() == TopAbs_WIRE) { + bool isOk = false; + if ( aShapePath.ShapeType() == TopAbs_COMPOUND ) { + TopTools_SequenceOfShape anEdges; + TopExp_Explorer anExp; + BRep_Builder B; + TopoDS_Wire W; + B.MakeWire(W); + for ( anExp.Init( aShapePath, TopAbs_EDGE ); anExp.More(); anExp.Next() ) { + B.Add( W, anExp.Current() ); + isOk = true; + } + if ( isOk ) + aWirePath = W; + } + else if (aShapePath.ShapeType() == TopAbs_WIRE) { aWirePath = TopoDS::Wire(aShapePath); + isOk = true; } else { if (aShapePath.ShapeType() == TopAbs_EDGE) { TopoDS_Edge anEdge = TopoDS::Edge(aShapePath); aWirePath = BRepBuilderAPI_MakeWire(anEdge); + isOk = true; } - else { - if(aCI) delete aCI; - Standard_TypeMismatch::Raise("MakePipe aborted : path shape is neither a wire nor an edge"); - } + } + if ( !isOk ) { + if(aCI) delete aCI; + Standard_TypeMismatch::Raise("MakePipe aborted : path shape is neither a wire nor an edge"); } } diff --git a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx index 5acbdd195..91ac4ab99 100644 --- a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx +++ b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx @@ -190,6 +190,7 @@ void GenerationGUI_PipeDlg::SelectionTypeButtonClicked() localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE ); } else { TColStd_MapOfInteger aMap; + aMap.Add(GEOM_COMPOUND); aMap.Add(GEOM_WIRE); aMap.Add(GEOM_LINE); globalSelection(aMap); @@ -370,6 +371,7 @@ void GenerationGUI_PipeDlg::SetEditCurrentArgument() localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE ); } else { TColStd_MapOfInteger aMap; + aMap.Add(GEOM_COMPOUND); aMap.Add(GEOM_WIRE); aMap.Add(GEOM_LINE); globalSelection(aMap);