Salome HOME
21854: Add persistent dimensions
[modules/geom.git] / src / MeasureGUI / MeasureGUI.cxx
index 435a92a9fd3cf5412cab4a27d5aa49bb3dd963d0..dea5956287a4f1aec76ad535ab9f201e5f2188ba 100644 (file)
 
 #include <GeometryGUI.h>
 #include "GeometryGUI_Operations.h"
+
+#include <GEOMGUI_DimensionProperty.h>
+
+#include <LightApp_SelectionMgr.h>
+#include <SUIT_OverrideCursor.h>
 #include <SUIT_Desktop.h>
 #include <SalomeApp_Application.h>
+#include <SalomeApp_Study.h>
 
-#include "MeasureGUI_PropertiesDlg.h"    // Method PROPERTIES
-#include "MeasureGUI_CenterMassDlg.h"    // Method CENTER MASS
-#include "MeasureGUI_NormaleDlg.h"       // Method NORMALE
-#include "MeasureGUI_InertiaDlg.h"       // Method INERTIA
-#include "MeasureGUI_BndBoxDlg.h"        // Method BNDBOX
-#include "MeasureGUI_DistanceDlg.h"      // Method DISTANCE
-#include "MeasureGUI_AngleDlg.h"         // Method ANGLE
-#include "MeasureGUI_MaxToleranceDlg.h"  // Method MAXTOLERANCE
-#include "MeasureGUI_WhatisDlg.h"        // Method WHATIS
-#include "MeasureGUI_CheckShapeDlg.h"    // Method CHECKSHAPE
-#include "MeasureGUI_CheckCompoundOfBlocksDlg.h" // Method CHECKCOMPOUND
-#include "MeasureGUI_GetNonBlocksDlg.h"  // Method GET NON BLOCKS
+#include "MeasureGUI_PropertiesDlg.h"             // Method PROPERTIES
+#include "MeasureGUI_CenterMassDlg.h"             // Method CENTER MASS
+#include "MeasureGUI_NormaleDlg.h"                // Method NORMALE
+#include "MeasureGUI_InertiaDlg.h"                // Method INERTIA
+#include "MeasureGUI_BndBoxDlg.h"                 // Method BNDBOX
+#include "MeasureGUI_DistanceDlg.h"               // Method DISTANCE
+#include "MeasureGUI_AngleDlg.h"                  // Method ANGLE
+#include "MeasureGUI_MaxToleranceDlg.h"           // Method MAXTOLERANCE
+#include "MeasureGUI_WhatisDlg.h"                 // Method WHATIS
+#include "MeasureGUI_CheckShapeDlg.h"             // Method CHECKSHAPE
+#include "MeasureGUI_CheckCompoundOfBlocksDlg.h"  // Method CHECKCOMPOUND
+#include "MeasureGUI_GetNonBlocksDlg.h"           // Method GET NON BLOCKS
 #include "MeasureGUI_CheckSelfIntersectionsDlg.h" // Method CHECK SELF INTERSCTIONS
-#include "MeasureGUI_PointDlg.h"         // Method POINTCOORDINATES
+#include "MeasureGUI_PointDlg.h"                  // Method POINTCOORDINATES
+#include "MeasureGUI_ManageDimensionsDlg.h"       // Method MANAGEDIMENSIONS
 
 #include <QApplication>
 
@@ -120,6 +127,15 @@ bool MeasureGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent )
   case GEOMOp::OpPointCoordinates:
     dlg = new MeasureGUI_PointDlg( getGeometryGUI(), parent );
     break; // POINT COORDINATES
+  case GEOMOp::OpManageDimensions:
+    dlg = new MeasureGUI_ManageDimensionsDlg( getGeometryGUI(), parent );
+    break; // MANAGE DIMENSIONS
+  case GEOMOp::OpShowAllDimensions:
+    ChangeDimensionsVisibility( true );
+    break; // SHOW ALL DIMENSIONS
+  case GEOMOp::OpHideAllDimensions:
+    ChangeDimensionsVisibility( false );
+    break; // HIDE ALL DIMENSIONS
   default: 
     app->putInfo( tr( "GEOM_PRP_COMMAND" ).arg( theCommandID ) ); 
     break;
@@ -132,6 +148,56 @@ bool MeasureGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent )
   return true;
 }
 
+//=======================================================================
+// function : ChangeDimensionsVisibility
+// purpose  : 
+//=======================================================================
+void MeasureGUI::ChangeDimensionsVisibility( const bool theIsVisible )
+{
+  SalomeApp_Application* anApp = getGeometryGUI()->getApp();
+  if (!anApp)
+  {
+    return;
+  }
+
+  SalomeApp_Study* anActiveStudy = dynamic_cast<SalomeApp_Study*>( anApp->activeStudy() );
+  if ( !anActiveStudy )
+  {
+    return;
+  }
+
+  LightApp_SelectionMgr* aSelMgr = anApp->selectionMgr();
+  if ( !aSelMgr )
+  {
+    return;
+  }
+
+  SALOME_ListIO aListIO;
+  aSelMgr->selectedObjects( aListIO );
+  if ( aListIO.Extent() != 1 )
+  {
+    return;
+  }
+
+  Handle(SALOME_InteractiveObject) anIObject = aListIO.First();
+  if ( !anIObject->hasEntry() )
+  {
+    return;
+  }
+
+  SUIT_OverrideCursor();
+
+  GEOMGUI_DimensionProperty aDimensions( anActiveStudy, anIObject->getEntry() );
+
+  for ( int anIt = 0; anIt < aDimensions.GetNumber(); ++anIt )
+  {
+    aDimensions.SetVisible( anIt, theIsVisible );
+  }
+
+  aDimensions.SaveToAttribute( anActiveStudy, anIObject->getEntry() );
+
+  GEOM_Displayer( anActiveStudy ).Redisplay( anIObject, true );
+}
 
 //=====================================================================================
 // EXPORTED METHODS