]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
GUITHARE external issue 0020696: 2D 3D surfaces
authorouv <ouv@opencascade.com>
Wed, 19 Mar 2014 13:10:13 +0000 (17:10 +0400)
committerouv <ouv@opencascade.com>
Wed, 19 Mar 2014 13:10:13 +0000 (17:10 +0400)
src/SVTK/SVTK_CubeAxesDlg.cxx
src/SVTK/SVTK_CubeAxesDlg.h
src/SVTK/SVTK_ViewWindow.cxx
src/SVTK/SVTK_ViewWindow.h

index c8f46c7b908d2b025f56c4b58dcb8f7dc895b59b..bf0eaf83fb551d444327cf1194c538a155706e28 100644 (file)
@@ -474,6 +474,22 @@ void SVTK_CubeAxesDlg::Update()
   myIsVisible->setChecked(myActor->GetVisibility() ? true : false);
 }
 
+/*!
+  Show/hide tab with X-dimension controls
+*/
+void SVTK_CubeAxesDlg::SetDimensionXEnabled( const bool theIsEnabled )
+{
+  myTabWg->setTabEnabled( 0, theIsEnabled );
+}
+
+/*!
+  Show/hide tab with Y-dimension controls
+*/
+void SVTK_CubeAxesDlg::SetDimensionYEnabled( const bool theIsEnabled )
+{
+  myTabWg->setTabEnabled( 1, theIsEnabled );
+}
+
 /*!
   Show/hide tab with Z-dimension controls
 */
index e43cb6d5cc67a0a67de9b8412736992c8d54047f..41be79735cc229ceb18cf842cbe71ef2aba1ad61 100644 (file)
@@ -59,6 +59,8 @@ public:
 
   void            Update();
 
+  void            SetDimensionXEnabled( const bool theIsEnabled );
+  void            SetDimensionYEnabled( const bool theIsEnabled );
   void            SetDimensionZEnabled( const bool theIsEnabled );
 
 private slots:
index 06c666c9c8fdf9c9aa45407a5c0d3b03c69ecd68..7cc026065ede5a9d25468c7d7e239e8283493737 100755 (executable)
@@ -117,7 +117,8 @@ SVTK_ViewWindow::SVTK_ViewWindow(SUIT_Desktop* theDesktop):
   myStandardInteractorStyle(SVTK_InteractorStyle::New()),
   myKeyFreeInteractorStyle(SVTK_KeyFreeInteractorStyle::New()),
   myViewsAction( NULL ),
-  myMode2D( false )
+  myMode2D( false ),
+  myMode2DNormalAxis( AxisZ )
 {
   setWindowFlags( windowFlags() & ~Qt::Window );
   // specific of vtkSmartPointer
@@ -730,6 +731,7 @@ void SVTK_ViewWindow::onSwitchInteractionStyle(bool theOn)
 */
 void SVTK_ViewWindow::onMode2D( bool theOn )
 {
+  bool anIsModeChanged = theOn != myMode2D;
   myMode2D = theOn;
 
   if( getAction( ViewTrihedronId ) )
@@ -749,24 +751,44 @@ void SVTK_ViewWindow::onMode2D( bool theOn )
 
   if( theOn )
   {
-    myCubeAxesDlg->SetDimensionZEnabled( false );
+    myCubeAxesDlg->SetDimensionXEnabled( myMode2DNormalAxis != AxisX );
+    myCubeAxesDlg->SetDimensionYEnabled( myMode2DNormalAxis != AxisY );
+    myCubeAxesDlg->SetDimensionZEnabled( myMode2DNormalAxis != AxisZ );
     if( SVTK_CubeAxesActor2D* aCubeAxes = GetRenderer()->GetCubeAxes() )
     {
       aCubeAxes->SetIsInvertedGrid( true );
+      if( vtkAxisActor2D* aXAxis = aCubeAxes->GetXAxisActor2D() )
+      {
+        aXAxis->SetTitleVisibility( myMode2DNormalAxis != AxisX );
+        aXAxis->SetLabelVisibility( myMode2DNormalAxis != AxisX );
+        aXAxis->SetTickVisibility( myMode2DNormalAxis != AxisX );
+      }
+      if( vtkAxisActor2D* aYAxis = aCubeAxes->GetYAxisActor2D() )
+      {
+        aYAxis->SetTitleVisibility( myMode2DNormalAxis != AxisY );
+        aYAxis->SetLabelVisibility( myMode2DNormalAxis != AxisY );
+        aYAxis->SetTickVisibility( myMode2DNormalAxis != AxisY );
+      }
       if( vtkAxisActor2D* aZAxis = aCubeAxes->GetZAxisActor2D() )
       {
-        aZAxis->SetTitleVisibility( 0 );
-        aZAxis->SetLabelVisibility( 0 );
-        aZAxis->SetTickVisibility( 0 );
+        aZAxis->SetTitleVisibility( myMode2DNormalAxis != AxisZ );
+        aZAxis->SetLabelVisibility( myMode2DNormalAxis != AxisZ );
+        aZAxis->SetTickVisibility( myMode2DNormalAxis != AxisZ );
       }
     }
 
-    storeViewState( myStored3DViewState );
+    if( anIsModeChanged )
+      storeViewState( myStored3DViewState );
     if( !restoreViewState( myStored2DViewState ) )
     {
       // first time the action is toggled
       GetRenderer()->SetTrihedronDisplayed( false );
-      onTopView();
+      switch( myMode2DNormalAxis )
+      {
+        case AxisX: onFrontView(); break;
+        case AxisY: onLeftView(); break;
+        case AxisZ: onTopView(); break;
+      }
       onFitAll();
     }
 
@@ -775,10 +797,24 @@ void SVTK_ViewWindow::onMode2D( bool theOn )
   }
   else
   {
+    myCubeAxesDlg->SetDimensionXEnabled( true );
+    myCubeAxesDlg->SetDimensionYEnabled( true );
     myCubeAxesDlg->SetDimensionZEnabled( true );
     if( SVTK_CubeAxesActor2D* aCubeAxes = GetRenderer()->GetCubeAxes() )
     {
       aCubeAxes->SetIsInvertedGrid( false );
+      if( vtkAxisActor2D* aXAxis = aCubeAxes->GetXAxisActor2D() )
+      {
+        aXAxis->SetTitleVisibility( 1 );
+        aXAxis->SetLabelVisibility( 1 );
+        aXAxis->SetTickVisibility( 1 );
+      }
+      if( vtkAxisActor2D* aYAxis = aCubeAxes->GetYAxisActor2D() )
+      {
+        aYAxis->SetTitleVisibility( 1 );
+        aYAxis->SetLabelVisibility( 1 );
+        aYAxis->SetTickVisibility( 1 );
+      }
       if( vtkAxisActor2D* aZAxis = aCubeAxes->GetZAxisActor2D() )
       {
         aZAxis->SetTitleVisibility( 1 );
@@ -795,6 +831,15 @@ void SVTK_ViewWindow::onMode2D( bool theOn )
   }
 }
 
+/*!
+  Check that 2D mode is active
+  \return true if 2D mode is active
+*/
+bool SVTK_ViewWindow::isMode2D() const
+{
+  return myMode2D;
+}
+
 /*!
   Store 2D/3D view state
   \param theViewState - view state to be stored
@@ -836,6 +881,18 @@ bool SVTK_ViewWindow::restoreViewState( ViewState theViewState )
   return false;
 }
 
+/*!
+  Clear 2D/3D view state
+  \param theIs2D flag used to indicate which state has to be cleared
+*/
+void SVTK_ViewWindow::clearViewState( const bool theIs2D )
+{
+  if( theIs2D )
+    myStored2DViewState.IsInitialized = false;
+  else
+    myStored3DViewState.IsInitialized = false;
+}
+
 /*!
   Sets incremental speed
   \param theValue - new incremental speed
@@ -2157,3 +2214,11 @@ void SVTK_ViewWindow::SetMode2DEnabled( const bool theIsEnabled )
 {
   getAction( Mode2DId )->setVisible( theIsEnabled );
 }
+
+/*!
+  Set the normal axis for the Mode2D
+*/
+void SVTK_ViewWindow::SetMode2DNormalAxis( const int theAxis )
+{
+  myMode2DNormalAxis = theAxis;
+}
index f3c86f98087753f46b6fbb9992f25d9fa1ded2b6..83553fddef352a89697a0c46e5f34c1d96fda0a0 100755 (executable)
@@ -75,6 +75,9 @@ class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow
 {
   Q_OBJECT;
 
+ public:
+  enum Axis { AxisX = 0, AxisY, AxisZ };
+
  public:
   //! To construct #SVTK_ViewWindow instance
   SVTK_ViewWindow(SUIT_Desktop* theDesktop);
@@ -251,6 +254,15 @@ class SVTK_EXPORT SVTK_ViewWindow : public SUIT_ViewWindow
   //! Show/hide the Mode2D action
   void SetMode2DEnabled( const bool theIsEnabled );
 
+  //! Set the normal axis for the 2D mode
+  void SetMode2DNormalAxis( const int theAxis );
+
+  //! Check that 2D mode is active
+  bool isMode2D() const;
+
+  //! Clear 2D/3D view state
+  void clearViewState( const bool theIs2D );
+
  signals:
   void Show( QShowEvent * );
   void Hide( QHideEvent * );
@@ -422,6 +434,7 @@ protected:
   int myRecordingToolBar;
 
   bool myMode2D;
+  int myMode2DNormalAxis;
   ViewState myStored2DViewState;
   ViewState myStored3DViewState;