]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
refs #665 - #669: remove, split and merge operations are added.
authormkr <mkr@opencascade.com>
Fri, 23 Oct 2015 13:07:39 +0000 (16:07 +0300)
committermkr <mkr@opencascade.com>
Fri, 23 Oct 2015 13:07:39 +0000 (16:07 +0300)
src/HYDROGUI/HYDROGUI_LandCoverMapDlg.cxx
src/HYDROGUI/HYDROGUI_LandCoverMapDlg.h
src/HYDROGUI/HYDROGUI_LandCoverMapOp.cxx
src/HYDROGUI/HYDROGUI_LandCoverMapOp.h
src/HYDROGUI/HYDROGUI_LandCoverMapPrs.h
src/HYDROGUI/HYDROGUI_ShapeLandCoverMap.cxx
src/HYDROGUI/HYDROGUI_ShapeLandCoverMap.h
src/HYDROGUI/resources/HYDROGUI_msg_en.ts

index 0c9646378ae81b2c8231eb181e9d47127b9e547a..9c57ed8665208e78446d17ce7de922ca63bacc23 100644 (file)
@@ -74,9 +74,12 @@ HYDROGUI_LandCoverMapDlg::HYDROGUI_LandCoverMapDlg( HYDROGUI_Module* theModule,
 
   addStretch();
 
+  // Connect signals and slots
+  connect( myObjectNameEdit, SIGNAL( currentIndexChanged( int ) ), this, SLOT( onLandCoverMapChanged() ) );
   connect( myPolylinesFaces, SIGNAL( objectSelected( const QString& ) ), this, SLOT( onPolylineFaceChanged( const QString& ) ) );
 
   updateState( true );
+
 }
 
 HYDROGUI_LandCoverMapDlg::~HYDROGUI_LandCoverMapDlg()
@@ -153,6 +156,16 @@ bool HYDROGUI_LandCoverMapDlg::isOk( const Handle(HYDROData_Entity)& theEntity )
                                         myOperationId == SplitLandCoverId ) ) );
 }
 
+void HYDROGUI_LandCoverMapDlg::onLandCoverMapChanged()
+{
+  if ( signalsBlocked() )
+    return;
+
+  reset();
+
+  emit landCoverMapChanged( getObjectName() );
+}
+
 void HYDROGUI_LandCoverMapDlg::onPolylineFaceChanged( const QString& )
 {
   updateState();
@@ -189,5 +202,9 @@ void HYDROGUI_LandCoverMapDlg::updateState( bool theInitialConfigure )
       anEmptyPolylineFaceName = getPolylineFaceName().isEmpty();
 
     setApplyEnabled( !anEmptyObjectName && !anEmptyPolylineFaceName );
+
+    // TODO:
+    //if ( myOperationId == RemoveLandCoverId || myOperationId == MergeLandCoverId ) => enable Apply,
+    //Apply and Close buttons only if at least one face (land cover) is selected in the 3d viewer
   }
 }
index 211740c87474dd45dcb5736b7d74ef7f3685085f..d611b1717daf61afc6fcf05d024f1759771c0b1d 100644 (file)
@@ -54,7 +54,12 @@ public:
 
   virtual bool             isOk( const Handle(HYDROData_Entity)& ) const;
 
+signals:
+  void                     landCoverMapChanged( const QString& theName );
+  void                     CreatePreview( const QStringList& thePolylineFaceNames );
+
 private slots:
+  void                     onLandCoverMapChanged();
   void                     onPolylineFaceChanged( const QString& );
 
 private:
index 96655be197d5f11dbf5b83091812536e003adea8..3de085b925c4607feb2767621f983b080d944fc0 100644 (file)
 #include <HYDROData_PolylineXY.h>
 #include <HYDROData_Object.h>
 
+#include <TopoDS_Face.hxx>
+#include <TopTools_ListOfShape.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
+
 HYDROGUI_LandCoverMapOp::HYDROGUI_LandCoverMapOp( HYDROGUI_Module* theModule, const int theOperationId )
 : HYDROGUI_Operation( theModule ),
   myOperationId( theOperationId ),
@@ -120,9 +124,11 @@ void HYDROGUI_LandCoverMapOp::commitOperation()
 HYDROGUI_InputPanel* HYDROGUI_LandCoverMapOp::createInputPanel() const
 {
   HYDROGUI_LandCoverMapDlg* aPanel = new HYDROGUI_LandCoverMapDlg( module(), getName(), myOperationId );
-  /*
+  connect( aPanel, SIGNAL( landCoverMapChanged( const QString& ) ),
+           this, SLOT( onLandCoverMapChanged( const QString& ) ) );
   connect( aPanel, SIGNAL( CreatePreview( const QStringList& ) ),
            this,   SLOT( onCreatePreview( const QStringList& ) ) );
+  /*
   connect( aPanel, SIGNAL( addPolylines() ), SLOT( onAddPolylines() ) );
   connect( aPanel, SIGNAL( removePolylines() ), SLOT( onRemovePolylines() ) );
   */
@@ -156,9 +162,12 @@ bool HYDROGUI_LandCoverMapOp::processApply( int& theUpdateFlags,
     }
   }
 
-  // Get selected polyline/face
   Handle(HYDROData_PolylineXY) aPolyline;
   Handle(HYDROData_Object) aFace;
+
+  TopTools_ListOfShape aFacesSelectedInViewer;
+
+  // Get polyline/face selected in combo-box
   if ( myOperationId == CreateLandCoverMapId || myOperationId == AddLandCoverId || myOperationId == SplitLandCoverId )
   {
     Handle(HYDROData_Entity) aPolylineFace = aPanel->getPolylineFace();
@@ -170,6 +179,12 @@ bool HYDROGUI_LandCoverMapOp::processApply( int& theUpdateFlags,
       return false;
     }
   }
+  // Get face(s) selected in the 3d viewer
+  else if ( myOperationId == RemoveLandCoverId || myOperationId == MergeLandCoverId )
+  {
+    // TODO:
+    //Fill in aFacesSelectedInViewer list
+  }
 
   // Get selected Strickler type
   QString aSelectedStricklerType;
@@ -190,6 +205,7 @@ bool HYDROGUI_LandCoverMapOp::processApply( int& theUpdateFlags,
   // Set land cover map name
   aLandCoverMapObj->SetName( anObjectName );
   
+  // Add land cover to new / edited land cover map
   if ( myOperationId == CreateLandCoverMapId || myOperationId == AddLandCoverId )
   {
     bool aLandCoverAdded = false;
@@ -203,30 +219,69 @@ bool HYDROGUI_LandCoverMapOp::processApply( int& theUpdateFlags,
       return false;
     }
   }
-    
-  /*TCollection_AsciiString anError;
-  if ( HYDROData_LandCover::buildShape( aZonePolylines, anError ).IsNull() )
+
+  // Remove land cover from edited land cover map
+  if ( myOperationId == RemoveLandCoverId )
+  {
+    bool aLandCoverRemoved = false;
+    if ( !aFacesSelectedInViewer.IsEmpty() )
+    {
+      aLandCoverRemoved = aLandCoverMapObj->Remove( aFacesSelectedInViewer );
+      if ( !aLandCoverRemoved )
+      {
+        theErrorMsg = tr( "LAND_COVER_NOT_REMOVED" );
+        return false;
+      }
+    }
+  }
+
+  // Split land cover(s) inside edited land cover map
+  if ( myOperationId == SplitLandCoverId )
   {
-    if ( !anError.IsEmpty() ) {
-      theErrorMsg = HYDROGUI_Tool::ToQString( anError );
-    } else {
-      theErrorMsg = tr( "LAND_COVER_OBJECT_CANNOT_BE_CREATED" );
+    bool aLandCoverSplitted = false;
+    if ( !aPolyline.IsNull() )
+      aLandCoverSplitted = aLandCoverMapObj->Split( aPolyline );
+    else if ( !aFace.IsNull() )
+    {
+      // TODO:
+      //Get the complete boundary of the object face as the splitting polyline
+      Handle(HYDROData_PolylineXY) aBoundaryPolyline;
+      aLandCoverSplitted = aLandCoverMapObj->Split( aBoundaryPolyline );
     }
-    return false;
-  }*/  
+    if ( !aLandCoverSplitted )
+    {
+      theErrorMsg = tr( "LAND_COVER_NOT_SPLITTED" );
+      return false;
+    }
+  }
 
+  // Merge land covers inside edited land cover map
+  if ( myOperationId == MergeLandCoverId )
+  {
+    bool aLandCoverMerged = false;
+    if ( !aFacesSelectedInViewer.IsEmpty() )
+    {
+      aLandCoverMerged = aLandCoverMapObj->Merge( aFacesSelectedInViewer, aSelectedStricklerType );
+      if ( !aLandCoverMerged )
+      {
+        theErrorMsg = tr( "LAND_COVER_NOT_MERGED" );
+        return false;
+      }
+    }
+  }
+    
   /*if ( myOperationId == CreateLandCoverMapId )
   {    
     aLandCoverMapObj->SetFillingColor( aLandCoverMapObj->DefaultFillingColor() );
     aLandCoverMapObj->SetBorderColor( aLandCoverMapObj->DefaultBorderColor() );
   }*/
 
-  //aLandCoverMapObj->SetPolylines( aZonePolylines );
-  //aLandCoverMapObj->SetStricklerType( aSelectedStricklerType );
+  // Update land cover map object and close preview
   aLandCoverMapObj->Update();
 
   closePreview();
 
+  // Publish the newly created land cover map in the Object Browser
   module()->setObjectVisible( HYDROGUI_Tool::GetActiveOCCViewId( module() ), aLandCoverMapObj, true );
   if ( myOperationId == CreateLandCoverMapId )
   {
@@ -234,6 +289,7 @@ bool HYDROGUI_LandCoverMapOp::processApply( int& theUpdateFlags,
     theBrowseObjectsEntries.append( anEntry );
   }
 
+  // Update presentation of land cover object in the 3d viewer
   module()->setIsToUpdate( aLandCoverMapObj );
   module()->getOCCDisplayer()->SetToUpdateColorScale();
 
@@ -242,7 +298,22 @@ bool HYDROGUI_LandCoverMapOp::processApply( int& theUpdateFlags,
   return true;
 }
 
-void HYDROGUI_LandCoverMapOp::onCreatePreview( const QStringList& thePolylineNames )
+void HYDROGUI_LandCoverMapOp::onLandCoverMapChanged( const QString& theName )
+{
+  // If the edited land cover map was changed in the combo-box, update myEditedObject
+  if ( myOperationId != CreateLandCoverMapId )
+  {
+    myEditedObject = Handle(HYDROData_LandCoverMap)::DownCast( HYDROGUI_Tool::FindObjectByName( module(), theName ) );
+    if ( !myEditedObject.IsNull() )
+    {
+      // Show preview of the newly selected land cover map
+      QStringList aPolylineFaceNames;
+      onCreatePreview( aPolylineFaceNames );
+    }
+  }
+}
+
+void HYDROGUI_LandCoverMapOp::onCreatePreview( const QStringList& thePolylineFaceNames )
 {
   /*
   HYDROGUI_LandCoverDlg* aPanel = ::qobject_cast<HYDROGUI_LandCoverDlg*>( inputPanel() );
index 092af90e8c9245514fbc2a9692ca06675e393daa..cdbed36e328d6e639f349bf2e7bd6a0a1bb09f78 100644 (file)
@@ -44,7 +44,8 @@ protected:
   virtual HYDROGUI_Shape*      getPreviewShape() const { return myPreviewPrs; };
 
 protected slots:
-  void                         onCreatePreview( const QStringList& thePolylineNames );
+  void                         onLandCoverMapChanged( const QString& theName );
+  void                         onCreatePreview( const QStringList& thePolylineFaceNames );
 
 private:
   void                         closePreview();
index e1acc832233537f8a33a1df5da74bd7c4492cc9e..dabe4526c0989af7cd63e034256eac0793e50f16 100644 (file)
@@ -52,8 +52,9 @@ public:
 
   Quantity_Color GetColor( const QString& theStricklerType ) const;
 
-protected:
   void UpdateColors();
+
+protected:
   void SetHilightAttributes( const Quantity_Color& theEdgesColor );
 
 private:
index fddf6e7002960b2da991481b2cfc64b85099781b..c365cfc49b6985c59d3c6ba32f365bd9503372ac 100644 (file)
@@ -51,16 +51,20 @@ void HYDROGUI_ShapeLandCoverMap::update( bool theIsUpdateViewer, bool isDeactiva
     setShape( aLandCoverMapShape, false, false );
   }
 
+  /* TODO
   if ( !myIsScalarMapMode ) {
-    // TODO
-    QColor aFillingColor = Qt::gray;//aLandCoverMapObj->GetFillingColor();
-    QColor aBorderColor = Qt::black;//aLandCoverMapObj->GetBorderColor();
+    QColor aFillingColor = aLandCoverMapObj->GetFillingColor();
+    QColor aBorderColor = aLandCoverMapObj->GetBorderColor();
 
     setFillingColor( aFillingColor, false, false );
     setBorderColor( aBorderColor, false, false );
   } else {
     updateShape( false, false );
-  }
+  }*/
+  
+  Handle(HYDROGUI_LandCoverMapPrs) aLandCoverMapPrs = Handle(HYDROGUI_LandCoverMapPrs)::DownCast( getAISObject() );
+  if ( !aLandCoverMapPrs.IsNull() )
+    aLandCoverMapPrs->UpdateColors();
 
   HYDROGUI_Shape::update( theIsUpdateViewer, isDeactivateSelection );
 }
index 025a0fcccaee9f2b08c643561173e275eb324f1d..9fdc6e831d81507aed66a7b26381d9d1d54e3ea5 100644 (file)
@@ -56,8 +56,8 @@ protected:
   virtual Handle_AIS_InteractiveObject createShape() const;
 
 private:
-  HYDROGUI_OCCDisplayer* myDisplayer;
-  bool                   myIsScalarMapMode;
+  HYDROGUI_OCCDisplayer*           myDisplayer;
+  bool                             myIsScalarMapMode;
 };
 
 #endif
index 7b62597c42e00923ac10713926179f8ec5942ddf..95c6c91ef5ba1a80521fe18bd1abc0f03bbee046 100644 (file)
@@ -2799,6 +2799,18 @@ Polyline should consist from one not closed curve.</translation>
       <source>LAND_COVER_NOT_ADDED</source>
       <translation>Land cover can not be added.</translation>
     </message>
+    <message>
+      <source>LAND_COVER_NOT_REMOVED</source>
+      <translation>Land cover can not be removed.</translation>
+    </message>
+    <message>
+      <source>LAND_COVER_NOT_SPLITTED</source>
+      <translation>Land cover can not be splitted.</translation>
+    </message>
+    <message>
+      <source>LAND_COVER_NOT_MERGED</source>
+      <translation>Land cover can not be merged.</translation>
+    </message>
     <message>
       <source>LAND_COVER_OBJECT_CANNOT_BE_CREATED</source>
       <translation>Land Cover object can not be created</translation>