Salome HOME
The data model has been rolled back to previous version.
[modules/hydro.git] / src / HYDROData / HYDROData_ImmersibleZone.cxx
index b66b6460ce9ee9fc7770df0f19439af22ebabbe1..c31dac1161c812757e326e82a4bd5052674bcc0b 100644 (file)
 #include <TopoDS.hxx>
 #include <TopoDS_Face.hxx>
 #include <TopoDS_Wire.hxx>
+#include <TopoDS_Compound.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
+#include <BRep_Builder.hxx>
 
 #include <QColor>
 #include <QStringList>
@@ -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 );