Salome HOME
debug of DTM object
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_CalculationOp.cxx
index 1987887cfab9eb3b9a9a85fc21a90914ef18260a..0af2109beca5c87a95531b072d709da9c1e8a64f 100644 (file)
@@ -21,7 +21,7 @@
 #include "HYDROGUI_DataModel.h"
 #include "HYDROGUI_CalculationDlg.h"
 #include "HYDROGUI_Module.h"
-#include "HYDROGUI_Tool.h"
+#include "HYDROGUI_Tool2.h"
 #include "HYDROGUI_UpdateFlags.h"
 #include "HYDROGUI_Zone.h"
 #include "HYDROGUI_Region.h"
@@ -110,18 +110,18 @@ void HYDROGUI_CalculationOp::startOperation()
   {
     aPolylineObj = Handle(HYDROData_PolylineXY)::DownCast( anIter.Current() );
 
-    if ( !aPolylineObj.IsNull() && aPolylineObj->IsClosed() )
+    if ( !aPolylineObj.IsNull() && aPolylineObj->IsClosed(false) )
     { 
-      // Check the polyline shape
-      TopoDS_Shape aPolylineShape = aPolylineObj->GetShape();
-      if ( !aPolylineShape.IsNull() && aPolylineShape.ShapeType() == TopAbs_WIRE ) {
+//      // Check the polyline shape
+//      TopoDS_Shape aPolylineShape = aPolylineObj->GetShape();
+//      if ( !aPolylineShape.IsNull() && aPolylineShape.ShapeType() == TopAbs_WIRE ) {
         aPolylineName = aPolylineObj->GetName();
         if ( !aPolylineName.isEmpty() )
         {
           aList.append( aPolylineName );
           anEntryList.append( HYDROGUI_DataObject::dataObjectEntry( aPolylineObj ) );
         }
-      }
+//      }
     }
   }
   aPanel->setPolylineNames( aList, anEntryList );
@@ -166,6 +166,8 @@ void HYDROGUI_CalculationOp::startOperation()
   aPanel->setObjectName( anObjectName );
   aPanel->setEditedObject( myEditedObject );
 
+  setGeomObjectsVisible( true );
+
   createPreview( false );
 }
 
@@ -223,18 +225,16 @@ HYDROGUI_InputPanel* HYDROGUI_CalculationOp::createInputPanel() const
   connect( aPanel, SIGNAL( Back( const int ) ), SLOT( onHideZones( const int ) ) );
   //connect( aPanel, SIGNAL( clicked( SUIT_DataObject* ) ), SLOT( onSelected( SUIT_DataObject* ) ) );
   connect( aPanel, SIGNAL( setMergeType( int, QString& ) ), SLOT( onSetMergeType( int, QString& ) ) );
-  connect( aPanel, SIGNAL( moveZones( SUIT_DataObject*, const QList<SUIT_DataObject*>&, bool ) ),
-    SLOT( onMoveZones( SUIT_DataObject*, const QList<SUIT_DataObject*>&, bool ) ) );
+  connect( aPanel, SIGNAL( moveZones( SUIT_DataObject*, const QList<SUIT_DataObject*>& ) ),
+    SLOT( onMoveZones( SUIT_DataObject*, const QList<SUIT_DataObject*>& ) ) );
   connect( aPanel, SIGNAL( createRegion( const QList<SUIT_DataObject*>& ) ),
     SLOT( onCreateRegion( const QList<SUIT_DataObject*>& ) ) );
   connect( aPanel, SIGNAL( clickedInZonesBrowser( SUIT_DataObject* ) ),
     SLOT( onClickedInZonesBrowser( SUIT_DataObject* ) ) );
   connect( aPanel, SIGNAL( objectsSelected() ), 
            SLOT( onObjectsSelected() ) );
-  connect( aPanel, SIGNAL( landCoversSelected() ), 
-           SLOT( onLandCoversSelected() ) );
-  connect( aPanel, SIGNAL( createLandCoverRegion( const QList<SUIT_DataObject*>& ) ),
-    SLOT( onCreateLandCoverRegion( const QList<SUIT_DataObject*>& ) ) );
+  connect( aPanel, SIGNAL( landCoverMapSelected( const QString & ) ), 
+           SLOT( onLandCoverMapSelected( const QString & ) ) );
   connect( aPanel, SIGNAL( boundarySelected( const QString & ) ), 
     SLOT( onBoundarySelected( const QString & ) ) );
   connect( aPanel, SIGNAL( StricklerTableSelected( const QString & ) ), 
@@ -289,26 +289,12 @@ void HYDROGUI_CalculationOp::onStricklerTableSelected ( const QString & theObjNa
 {
   bool anIsToUpdateViewer = false;
 
-  /* TODO
-  // Remove old presentations of land covers from the operation viewer  
-  Handle(HYDROData_Entity) anEntity;
-  Handle(HYDROData_LandCover) aLandCover;
-  HYDROData_SequenceOfObjects aLandCovers;
-  HYDROData_SequenceOfObjects aSeq = myEditedObject->GetLandCovers();
-  HYDROData_SequenceOfObjects::Iterator anIter( aSeq );
-  for ( ; anIter.More(); anIter.Next() )
+  // Remove old presentation of land cover map from the operation viewer  
+  Handle(HYDROData_LandCoverMap) aLandCoverMap = myEditedObject->GetLandCoverMap();
+  if ( !aLandCoverMap.IsNull() )
   {
-    anEntity = anIter.Value();
-    if ( !anEntity.IsNull() )
-    {
-      aLandCover = Handle(HYDROData_LandCover)::DownCast( anEntity );
-      if ( !aLandCover.IsNull() )
-      {
-        aLandCovers.Append( aLandCover );
-        setObjectVisibility( aLandCover, false );
-        anIsToUpdateViewer = true;
-      }
-    }
+    setObjectVisibility( aLandCoverMap, false );
+    anIsToUpdateViewer = true;
   }
 
   // Set the selected Strickler table to the calculation case
@@ -326,19 +312,10 @@ void HYDROGUI_CalculationOp::onStricklerTableSelected ( const QString & theObjNa
         Handle(AIS_InteractiveContext) aCtx = aViewer->getAISContext();
         if ( !aCtx.IsNull() )
         {
-          HYDROData_SequenceOfObjects::Iterator anIter( aLandCovers );
-          for ( ; anIter.More(); anIter.Next() )
+          if ( !aLandCoverMap.IsNull() )
           {
-            anEntity = anIter.Value();
-            if ( !anEntity.IsNull() )
-            {
-              aLandCover = Handle(HYDROData_LandCover)::DownCast( anEntity );
-              if ( !aLandCover.IsNull() )
-              {
-                setObjectVisibility( aLandCover, true );
-                anIsToUpdateViewer = true;
-              }
-            }
+            setObjectVisibility( aLandCoverMap, true );
+            anIsToUpdateViewer = true;
           }          
         }
       }
@@ -347,7 +324,6 @@ void HYDROGUI_CalculationOp::onStricklerTableSelected ( const QString & theObjNa
         module()->update( UF_OCCViewer );
     }
   }
-  */
 }
 
 void HYDROGUI_CalculationOp::onObjectsSelected()
@@ -391,53 +367,27 @@ void HYDROGUI_CalculationOp::onObjectsSelected()
     aLastShape->update( true, false );
 }
 
-void HYDROGUI_CalculationOp::onLandCoverMapSelected()
+void HYDROGUI_CalculationOp::onLandCoverMapSelected( const QString & theObjName )
 {
-  HYDROGUI_CalculationDlg* aPanel = 
-    ::qobject_cast<HYDROGUI_CalculationDlg*>( inputPanel() );
-
-  /* TODO: highlight the selected land cover map in the 3d viewer (synchronize slection in the dialog with a preview in the viewer)
-  QStringList aSelectedObjs = aPanel->getSelectedLandCovers();
-  QMap<QString, bool> aSelectedObjsMap;
-  foreach( QString aName, aSelectedObjs )
-    aSelectedObjsMap[aName] = true;
-  */
-
-
-  // Select the appropriate land cover shape in the viewer
-  selectionMgr()->clearSelected();
-
-  // Unhighlight all land covers except selected
-  HYDROGUI_Shape* aShape = 0, *aLastShape = 0;
-  Handle(HYDROData_Entity) anEntity;
-  /* TODO: highlight the selected land cover map in the 3d viewer (synchronize slection in the dialog with a preview in the viewer)
-  HYDROData_SequenceOfObjects aSeq = myEditedObject->GetLandCovers();
-  HYDROData_SequenceOfObjects::Iterator anIter( aSeq );
-  bool isSelected;
-  QString aName;
-  for ( ; anIter.More(); anIter.Next() )
+  bool anIsToUpdateViewer = false;
+  
+  // Remove old presentation of land cover map from the operation viewer  
+  Handle(HYDROData_LandCoverMap) aPrevLandCoverMap = myEditedObject->GetLandCoverMap();
+  if ( !aPrevLandCoverMap.IsNull() )
   {
-    anEntity = anIter.Value();
-    if ( !anEntity.IsNull() )
-    {
-      aShape = module()->getObjectShape( HYDROGUI_Module::VMR_PreviewCaseZones, anEntity );
-      if ( aShape )
-      {
-        aName = anEntity->GetName();
-        isSelected = aSelectedObjsMap.contains( aName );
-        aShape->highlight( isSelected, false );
-        aShape->update( false, false );
-        aLastShape = aShape;
-      }
-    }
+    setObjectVisibility( aPrevLandCoverMap, false );
+    anIsToUpdateViewer = true;
   }
-  */
 
-  // TODO
-  //createPreview( true );
+  // Select the appropriate land cover map shape in the viewer
+  selectionMgr()->clearSelected();
 
-  if( aLastShape )
-    aLastShape->update( true, false );
+  // Set the selected land cover map to the calculation case
+  Handle(HYDROData_LandCoverMap) aNewLandCoverMap = Handle(HYDROData_LandCoverMap)::DownCast(
+    HYDROGUI_Tool::FindObjectByName( module(), theObjName, KIND_LAND_COVER_MAP ) );
+  myEditedObject->SetLandCoverMap( aNewLandCoverMap );
+
+  createPreview( true );
 }
 
 void HYDROGUI_CalculationOp::onClickedInZonesBrowser( SUIT_DataObject* theItem )
@@ -825,16 +775,47 @@ void HYDROGUI_CalculationOp::onNext( const int theIndex )
 
     QStringList aList;
     QStringList anEntryList;
-    HYDROData_SequenceOfObjects aSeq;
 
-    /* TODO: get all land cover map objects to fill in combo-box
+    // Get all land cover map objects to fill in combo-box
+    Handle(HYDROData_LandCoverMap) aLandCoverMapObj;
+    QString aLandCoverMapName;
+
+    aList.clear();
+    anEntryList.clear();
+    HYDROData_Iterator anIter( doc(), KIND_LAND_COVER_MAP );
+    for ( ; anIter.More(); anIter.Next() )
+    {
+      aLandCoverMapObj = Handle(HYDROData_LandCoverMap)::DownCast( anIter.Current() );
+
+      if ( !aLandCoverMapObj.IsNull() )
+      { 
+        aLandCoverMapName = aLandCoverMapObj->GetName();
+        if ( !aLandCoverMapName.isEmpty() )
+        {
+          aList.append( aLandCoverMapName );
+          anEntryList.append( HYDROGUI_DataObject::dataObjectEntry( aLandCoverMapObj ) );
+        }
+      }
+    }
+    aPanel->setLandCoverMapsNames( aList, anEntryList );
+    aLandCoverMapObj = myEditedObject->GetLandCoverMap();
+    if ( !aList.isEmpty() )
+    {
+      if ( aLandCoverMapObj.IsNull() )
+        aPanel->setLandCoverMap( aList.at( 0 ), false );
+      else if ( myIsEdit )
+        aPanel->setLandCoverMap( aList.at( 0 ), true );
+      else
+        aPanel->setLandCoverMap( aList.at( aList.indexOf( aLandCoverMapObj->GetName() ) ), true );
+    }
+
+    // Get all Strickler table objects to fill in combo-box
     Handle(HYDROData_StricklerTable) aStricklerTableObj;
     QString aStricklerTableName;
 
-    // Get all Strickler table objects to fill in combo-box
     aList.clear();
     anEntryList.clear();
-    HYDROData_Iterator anIter( doc(), KIND_STRICKLER_TABLE );      
+    anIter = HYDROData_Iterator( doc(), KIND_STRICKLER_TABLE );
     for ( ; anIter.More(); anIter.Next() )
     {
       aStricklerTableObj = Handle(HYDROData_StricklerTable)::DownCast( anIter.Current() );
@@ -870,9 +851,19 @@ void HYDROGUI_CalculationOp::onNext( const int theIndex )
           aStricklerTableName = aStricklerTableObj->GetName();
           aPanel->setStricklerTable( aStricklerTableName );
         }
+
+        // Select the certain land cover map object in combo-box
+        if ( aLandCoverMapObj.IsNull() )
+        {
+          aPanel->setLandCoverMap( QString() );
+        }
+        else
+        {
+          aLandCoverMapName = aLandCoverMapObj->GetName();
+          aPanel->setLandCoverMap( aLandCoverMapName );
+        }
       }
     }
-    */
 
     closePreview( false );
     createPreview( true );