X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROData%2FHYDROData_ImmersibleZone.cxx;h=c31dac1161c812757e326e82a4bd5052674bcc0b;hb=deed826b2d6c39ba2ed410108cdf54d64cded321;hp=b66b6460ce9ee9fc7770df0f19439af22ebabbe1;hpb=dadcea132a8b5df65f63168ecdc59b245c374b8b;p=modules%2Fhydro.git diff --git a/src/HYDROData/HYDROData_ImmersibleZone.cxx b/src/HYDROData/HYDROData_ImmersibleZone.cxx index b66b6460..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 @@ -97,31 +136,11 @@ QColor HYDROData_ImmersibleZone::DefaultFillingColor() return QColor( Qt::green ); } -void HYDROData_ImmersibleZone::SetFillingColor( const QColor& theColor ) -{ - return SetColor( theColor, DataTag_FillingColor ); -} - -QColor HYDROData_ImmersibleZone::GetFillingColor() const -{ - return GetColor( DefaultFillingColor(), DataTag_FillingColor ); -} - QColor HYDROData_ImmersibleZone::DefaultBorderColor() { return QColor( Qt::transparent ); } -void HYDROData_ImmersibleZone::SetBorderColor( const QColor& theColor ) -{ - return SetColor( theColor, DataTag_BorderColor ); -} - -QColor HYDROData_ImmersibleZone::GetBorderColor() const -{ - return GetColor( DefaultBorderColor(), DataTag_BorderColor ); -} - void HYDROData_ImmersibleZone::SetPolyline( const Handle(HYDROData_Polyline)& thePolyline ) { SetReferenceObject( thePolyline, DataTag_Polyline );