- TopoDS_Wire aPolylineWire = TopoDS::Wire( aPolyline->GetTopShape() );
- if( !aPolylineWire.IsNull() )
- {
- BRepBuilderAPI_MakeFace aMakeFace( aPolylineWire, Standard_True );
+ TopoDS_Shape aPolylineShape = aPolyline->GetTopShape();
+ TopTools_ListOfShape aWiresList;
+
+ if ( !aPolylineShape.IsNull() &&
+ aPolylineShape.ShapeType() == TopAbs_WIRE ) {
+ TopoDS_Wire aPolylineWire = TopoDS::Wire( aPolylineShape );
+ if ( !aPolylineWire.IsNull() ) {
+ BRepBuilderAPI_MakeFace aMakeFace( aPolylineWire, Standard_True );
+ aMakeFace.Build();
+ if( aMakeFace.IsDone() ) {
+ return aMakeFace.Face();
+ }
+ }
+ } else {
+ TopExp_Explorer anExp( aPolylineShape, TopAbs_WIRE );
+ for ( ; anExp.More(); anExp.Next() ) {
+ TopoDS_Wire aWire = TopoDS::Wire( anExp.Current() );
+ aWiresList.Append( aWire );
+ }
+ }
+
+ TopoDS_Compound aCompound;
+ BRep_Builder aBuilder;
+ aBuilder.MakeCompound( aCompound );
+
+ TopTools_ListIteratorOfListOfShape anIter( aWiresList );
+ for ( ; anIter.More(); anIter.Next() ) {
+ TopoDS_Wire aWire = TopoDS::Wire( anIter.Value() );
+ if ( aWire.IsNull() ) {
+ continue;
+ }
+
+ BRepBuilderAPI_MakeFace aMakeFace( aWire, Standard_True );