Salome HOME
Create goups for stream.
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_ImmersibleZoneOp.cxx
index 276d51afcd1a229eac14016021f9e590caf7038c..1dc958e499809d98bb9530fb42c3dc2723d92310 100644 (file)
@@ -99,7 +99,7 @@ void HYDROGUI_ImmersibleZoneOp::startOperation()
   {
     Handle(HYDROData_PolylineXY) aPolylineObj = 
       Handle(HYDROData_PolylineXY)::DownCast( anIter.Current() );
-    if ( aPolylineObj.IsNull() || !aPolylineObj->IsClosed() )
+    if ( aPolylineObj.IsNull() )//TODO: || !aPolylineObj->IsClosed() )
       continue;
 
     QString aPolylineName = aPolylineObj->GetName();
@@ -185,11 +185,6 @@ bool HYDROGUI_ImmersibleZoneOp::processApply( int& theUpdateFlags,
     }
   }
 
-  Handle(HYDROData_ImmersibleZone) aZoneObj = myIsEdit ? myEditedObject :
-    Handle(HYDROData_ImmersibleZone)::DownCast( doc()->CreateObject( KIND_IMMERSIBLE_ZONE ) );
-  if ( aZoneObj.IsNull() )
-    return false;
-
   Handle(HYDROData_PolylineXY) aZonePolyline;
   Handle(HYDROData_Bathymetry) aZoneBathymetry;
 
@@ -207,6 +202,16 @@ bool HYDROGUI_ImmersibleZoneOp::processApply( int& theUpdateFlags,
       HYDROGUI_Tool::FindObjectByName( module(), aBathymetryName, KIND_BATHYMETRY ) );
   }
 
+
+  if ( HYDROData_ImmersibleZone::generateTopShape( aZonePolyline ).IsNull() )
+  {
+    theErrorMsg = tr( "ZONE_OBJECT_CANNOT_BE_CREATED" );
+    return false;
+  }
+
+  Handle(HYDROData_ImmersibleZone) aZoneObj = myIsEdit ? myEditedObject :
+    Handle(HYDROData_ImmersibleZone)::DownCast( doc()->CreateObject( KIND_IMMERSIBLE_ZONE ) );
+
   aZoneObj->SetName( anObjectName );
 
   if ( !myIsEdit )
@@ -235,17 +240,13 @@ void HYDROGUI_ImmersibleZoneOp::onCreatePreview( const QString& thePolylineName
   if ( !aPanel )
     return;
 
-  TopoDS_Wire aWire;
-  TopoDS_Shape aShape;
+  TopoDS_Shape aZoneShape;
 
   Handle(HYDROData_PolylineXY) aPolyline = Handle(HYDROData_PolylineXY)::DownCast(
     HYDROGUI_Tool::FindObjectByName( module(), thePolylineName, KIND_POLYLINEXY ) );
   if ( !aPolyline.IsNull() )
   {
-    aShape = aPolyline->GetShape();
-    if ( aShape.ShapeType() == TopAbs_WIRE ) {
-      aWire = TopoDS::Wire( aShape );
-    }
+    aZoneShape = HYDROData_ImmersibleZone::generateTopShape( aPolyline );
   }
 
   LightApp_Application* anApp = module()->getApp();
@@ -275,14 +276,10 @@ void HYDROGUI_ImmersibleZoneOp::onCreatePreview( const QString& thePolylineName
 
   myPreviewPrs->setFillingColor( aFillingColor, false, false );
   myPreviewPrs->setBorderColor( aBorderColor, false, false );
-  if ( !aWire.IsNull() ) {
-    myPreviewPrs->setFace( aWire );
-  } else if ( !aShape.IsNull() && aShape.ShapeType() == TopAbs_COMPOUND ) {
-    TopoDS_Compound aCompound = TopoDS::Compound( aShape );
-    if ( !aCompound.IsNull() ) {
-      myPreviewPrs->setFaces( aCompound );
-    }
-  }
+  TopoDS_Face aFace;
+  if( !aZoneShape.IsNull() )
+    aFace = TopoDS::Face( aZoneShape );
+  myPreviewPrs->setFace( aFace );
 }
 
 void HYDROGUI_ImmersibleZoneOp::closePreview()