X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_ImmersibleZone.cxx;h=c31dac1161c812757e326e82a4bd5052674bcc0b;hb=deed826b2d6c39ba2ed410108cdf54d64cded321;hp=f113ba31b684b1512de9bd3e4470ed08935b0f8d;hpb=d5ab854432d2b0ec5a504b7f5bbf67d12bec472a;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_ImmersibleZone.cxx b/src/HYDROData/HYDROData_ImmersibleZone.cxx index f113ba31..c31dac11 100644 --- a/src/HYDROData/HYDROData_ImmersibleZone.cxx +++ b/src/HYDROData/HYDROData_ImmersibleZone.cxx @@ -10,6 +10,10 @@ #include #include #include +#include +#include +#include +#include #include #include @@ -71,19 +75,54 @@ QStringList HYDROData_ImmersibleZone::DumpToPython( MapOfTreatedObjects& theTrea TopoDS_Shape HYDROData_ImmersibleZone::GetTopShape() const { + TopoDS_Shape aResShape = TopoDS_Face(); + Handle(HYDROData_Polyline) aPolyline = GetPolyline(); if( !aPolyline.IsNull() ) { - 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 ); aMakeFace.Build(); - if( aMakeFace.IsDone() ) - return aMakeFace.Face(); + if( aMakeFace.IsDone() ) { + aBuilder.Add( aCompound, aMakeFace.Face() ); + } } + + aResShape = aCompound; } - return TopoDS_Face(); + + return aResShape; } TopoDS_Shape HYDROData_ImmersibleZone::GetShape3D() const