Salome HOME
split zones (draft)
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_CalculationOp.cxx
index 0af2109beca5c87a95531b072d709da9c1e8a64f..024b5487b5ca5f12000663da4f73477320b8f30c 100644 (file)
@@ -98,6 +98,13 @@ void HYDROGUI_CalculationOp::startOperation()
   QStringList anEntryList;
   HYDROData_SequenceOfObjects aSeq = HYDROGUI_Tool::GetGeometryObjects( module() );
   getNamesAndEntries( aSeq, aList, anEntryList );
+  
+  QStringList List1;
+  QStringList EList1;
+
+  //add intersection polylines
+  AddInterPolylinesToList(aList, anEntryList);
+  
   aPanel->setAllGeomObjects( aList, anEntryList );
 
   // Get all polylines
@@ -171,6 +178,26 @@ void HYDROGUI_CalculationOp::startOperation()
   createPreview( false );
 }
 
+void HYDROGUI_CalculationOp::AddInterPolylinesToList(QStringList& theList, QStringList& theEntryList)
+{
+  HYDROData_Iterator anIter( doc(), KIND_POLYLINEXY );
+  Handle(HYDROData_PolylineXY) aPolylineObj;
+  QString aPolylineName;
+  for ( ; anIter.More(); anIter.Next() )
+  {
+    aPolylineObj = Handle(HYDROData_PolylineXY)::DownCast( anIter.Current() );
+    if ( !aPolylineObj.IsNull())
+    { 
+      aPolylineName = aPolylineObj->GetName();
+      if ( !aPolylineName.isEmpty() && !theList.contains(aPolylineName) )
+      {
+        theList.append( aPolylineName );
+        theEntryList.append(HYDROGUI_DataObject::dataObjectEntry( aPolylineObj ));
+      }
+    }
+  }
+}
+
 void HYDROGUI_CalculationOp::getNamesAndEntries( const HYDROData_SequenceOfObjects& theSeq, 
                                                 QStringList& theNames, QStringList& theEntries ) const
 {
@@ -510,6 +537,17 @@ void HYDROGUI_CalculationOp::onAddObjects()
       anAddedList.append( anObject->GetName() );
   }
 
+  for (int i = 0; i < aSelectedList.length(); i++)
+  {
+    Handle(HYDROData_PolylineXY) aPoly = Handle(HYDROData_PolylineXY)::DownCast( 
+      HYDROGUI_Tool::FindObjectByName( module(), aSelectedList.at( i ) ) );
+    if ( aPoly.IsNull() )
+      continue;
+
+    if ( myEditedObject->AddInterPoly( aPoly ) )
+      anAddedList.append( aPoly->GetName() );
+  }
+
   if ( !anAddedList.isEmpty() )
   {
     aPanel->includeGeomObjects( anAddedList );
@@ -540,6 +578,17 @@ void HYDROGUI_CalculationOp::onRemoveObjects()
     myEditedObject->RemoveGeometryObject( anObject );
   }
 
+  for (int i = 0; i < aSelectedList.length(); i++)
+  {
+    Handle(HYDROData_PolylineXY) aPoly = Handle(HYDROData_PolylineXY)::DownCast( 
+      HYDROGUI_Tool::FindObjectByName( module(), aSelectedList.at(i) ) );
+    if ( aPoly.IsNull() )
+      continue;
+
+    setObjectVisibility( aPoly, false );
+    myEditedObject->RemoveInterPolyObject ( aPoly ); 
+  }
+
   module()->update( UF_OCCViewer );
   aPanel->excludeGeomObjects( aSelectedList );
 }
@@ -1156,7 +1205,9 @@ void HYDROGUI_CalculationOp::createPreview( const bool theLandCoverMap )
   else if ( !theLandCoverMap && myShowGeomObjects )
   {
     HYDROData_SequenceOfObjects aSeqGO = myEditedObject->GetGeometryObjects();
+    HYDROData_SequenceOfObjects aSeqP = myEditedObject->GetInterPolyObjects();
     aSeq.Append( aSeqGO );
+    aSeq.Append( aSeqP );
   }
 
   Handle(HYDROData_Entity) anEntity;