]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Issue 0022171:
authorimn <imn@opencascade.com>
Fri, 1 Nov 2013 13:33:03 +0000 (13:33 +0000)
committerimn <imn@opencascade.com>
Fri, 1 Nov 2013 13:33:03 +0000 (13:33 +0000)
- Additinally: show "Return to 3D" button in 2D projection views to quickly switch to 3D mode

doc/salome/gui/input/occ_3d_viewer.doc
src/OCCViewer/CMakeLists.txt
src/OCCViewer/OCCViewer_ViewFrame.cxx
src/OCCViewer/OCCViewer_ViewFrame.h
src/OCCViewer/OCCViewer_ViewWindow.cxx
src/OCCViewer/OCCViewer_ViewWindow.h
src/OCCViewer/resources/OCCViewer_images.ts
src/OCCViewer/resources/OCCViewer_msg_en.ts
src/OCCViewer/resources/OCCViewer_msg_fr.ts
src/OCCViewer/resources/occ_view_return_3d_view.png [new file with mode: 0644]

index 6473189928e65abff99902b5d80da7e4b758b9c6..bb4818e148b981c0a36f003b608189ee28f10b99 100644 (file)
@@ -248,6 +248,11 @@ on/off.
 view area to the minimized / maximized state.
 <hr>
 
+\image html occ_view_return_3d_view.png
+
+<b>Return to 3D</b> - this button switches from 2D view projection back to the 3D view mode.
+<hr>
+
 \image html occ_view_sync.png
 
 <b>Synchronize view</b> - allows to synchronize 3d view
index 6e811c887643cf62a48b387ebe545f9fec6520ba..b0644ce2aa768256c996daa67ccbf47a86877d4b 100755 (executable)
@@ -116,6 +116,7 @@ SET(_other_RESOURCES
   resources/occ_view_preselection.png
   resources/occ_view_presets.png
   resources/occ_view_reset.png
+  resources/occ_view_return_3d_view.png
   resources/occ_view_right.png
   resources/occ_view_rotate.png
   resources/occ_view_rotation_point.png
index dae1db07ea0604bf3c5c37650d50b57807a5c0e8..9115688f1b8f0af3cf8ea006ca863eddfc83600e 100644 (file)
@@ -85,6 +85,24 @@ void OCCViewer_ViewFrame::setViewManager( SUIT_ViewManager* theMgr )
   }
 }
 
+//**************************************************************************************
+void OCCViewer_ViewFrame::returnTo3dView()
+{
+  OCCViewer_ViewWindow* view = 0;
+  for (int i = BOTTOM_RIGHT; i <= TOP_RIGHT; i++ ) {
+    view = myViews.at(i);
+    view->setVisible( view->get2dMode() == No2dMode );
+    view->setMaximized( true, false );
+    if (view->get2dMode() == No2dMode) myMaximizedView = view;
+  }
+  myLayout->setColumnStretch(0, 0);
+  myLayout->setColumnStretch(1, 0);
+  myLayout->addWidget( myMaximizedView, 0, 0 );
+  mySplitMode = -1;
+  myViewsMode.clear();
+  myLayout->invalidate();
+}
+
 //**************************************************************************************
 void OCCViewer_ViewFrame::onMaximizedView( OCCViewer_ViewWindow* theView, bool isMaximized)
 {
@@ -227,6 +245,7 @@ void OCCViewer_ViewFrame::splitSubViews()
   }
 
   OCCViewer_ViewWindow* view = 0;
+  bool isVisible3dView = false;
   for ( int i = 0; i< myViews.count(); i++ ) {
     view = myViews.at(i);
     bool isShowed = false;
@@ -239,6 +258,7 @@ void OCCViewer_ViewFrame::splitSubViews()
     if( isShowed ) {
       view->show();
       view->setMaximized( false, false );
+      if ( view->get2dMode() == No2dMode ) isVisible3dView = true;
       ///////////////QApplication::processEvents(); // VSR: hangs up ?
       if ( view != myMaximizedView )
         view->onViewFitAll();
@@ -246,6 +266,13 @@ void OCCViewer_ViewFrame::splitSubViews()
     else
       view->setVisible( false );
   }
+  if ( !isVisible3dView ) {
+    for ( int i = 0; i< myViews.count(); i++ ){
+      view = myViews.at(i);
+      if( view->isVisible() )
+        view->setReturnedTo3dView( false );
+    }
+  }
 }
 
 //**************************************************************************************
@@ -300,6 +327,8 @@ void OCCViewer_ViewFrame::setZoomingStyle( const int i )
 //**************************************************************************************
 void OCCViewer_ViewFrame::connectViewSignals(OCCViewer_ViewWindow* theView)
 {
+  connect( theView, SIGNAL( returnedTo3d( ) ), this, SLOT( returnTo3dView( ) ) );
+
   connect( theView, SIGNAL( maximized( OCCViewer_ViewWindow*, bool ) ), 
            this, SLOT( onMaximizedView( OCCViewer_ViewWindow*, bool ) ) );
 
index 35935b630b8541e44a5bd257086f4628125de2a0..26eacfd0f50ca6ed0af38aa7cc6032827ed2dad1 100644 (file)
@@ -122,6 +122,7 @@ public slots:
   virtual void updateGravityCoords() {}
    
   void onMaximizedView( OCCViewer_ViewWindow*, bool );
+  void returnTo3dView();
 
   virtual void onDumpView();
 
index 4697e6acbaf45eb231285c7a5a7ec30d8907c4e7..2c52f50c35cf0e037ac32479c2530b6a3ee030d8 100755 (executable)
@@ -1299,6 +1299,15 @@ void OCCViewer_ViewWindow::createActions()
   connect(aAction, SIGNAL(triggered()), this, SLOT(onMaximizedView()));
   toolMgr()->registerAction( aAction, MaximizedId );
 
+  // Return to 3d view
+  if (my2dMode!=No2dMode){
+    aAction = new QtxAction(tr("MNU_RETURN_3D_VIEW"), aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_RETURN_3D_VIEW" ) ),
+                            tr( "MNU_RETURN_3D_VIEW" ), 0, this );
+    aAction->setStatusTip(tr("DSC_RETURN_3D_VIEW"));
+    connect(aAction, SIGNAL(triggered()), this, SLOT(returnTo3dView()));
+    toolMgr()->registerAction( aAction, ReturnTo3dViewId );
+  }
+
   // Synchronize View 
   toolMgr()->registerAction( synchronizeAction(), SynchronizeId );
 }
@@ -1324,7 +1333,10 @@ void OCCViewer_ViewWindow::createToolBar()
   }
   
   int tid = toolMgr()->createToolBar( aToolbarName, false );
-
+  if ( my2dMode != No2dMode ){
+    toolMgr()->append( ReturnTo3dViewId, tid );
+    toolMgr()->append( toolMgr()->separator(), tid );
+  }
   toolMgr()->append( DumpId, tid );
   toolMgr()->append( SwitchInteractionStyleId, tid );
 #if OCC_VERSION_LARGE > 0x0603000A // available only with OCC-6.3-sp11 and higher version
@@ -2587,16 +2599,34 @@ void OCCViewer_ViewWindow::onMaximizedView()
   setMaximized(!isMaximized());
 }
 
+void OCCViewer_ViewWindow::returnTo3dView()
+{
+  setReturnedTo3dView( true );
+}
+
+void OCCViewer_ViewWindow::setReturnedTo3dView(bool isVisible3dView)
+{
+  if ( !toolMgr()->action( ReturnTo3dViewId ) ||
+    toolMgr()->isShown(ReturnTo3dViewId) != isVisible3dView ) return;
+  if ( !isVisible3dView )
+    toolMgr()->show( ReturnTo3dViewId );
+  else
+    toolMgr()->hide( ReturnTo3dViewId );
+  if ( isVisible3dView ) emit returnedTo3d( );
+}
+
 
 void OCCViewer_ViewWindow::setMaximized(bool toMaximize, bool toSendSignal)
 {
   QAction* anAction =  toolMgr()->action( MaximizedId );
+  QAction* anAction2 =  toolMgr()->action( ReturnTo3dViewId );
   SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
   if ( toMaximize ) {
     anAction->setText( tr( "MNU_MINIMIZE_VIEW" ) );  
     anAction->setToolTip( tr( "MNU_MINIMIZE_VIEW" ) );  
     anAction->setIcon( aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_MINIMIZE" ) ) );
     anAction->setStatusTip( tr( "DSC_MINIMIZE_VIEW" ) );
+    if ( anAction2 && my2dMode != No2dMode ) toolMgr()->show( ReturnTo3dViewId );
     if (toSendSignal) {
       emit maximized( this, true );
     }
@@ -2606,13 +2636,13 @@ void OCCViewer_ViewWindow::setMaximized(bool toMaximize, bool toSendSignal)
     anAction->setToolTip( tr( "MNU_MAXIMIZE_VIEW" ) );  
     anAction->setIcon( aResMgr->loadPixmap( "OCCViewer", tr( "ICON_OCCVIEWER_MAXIMIZE" ) ) );
     anAction->setStatusTip( tr( "DSC_MAXIMIZE_VIEW" ) );
+    if ( anAction2 && my2dMode != No2dMode ) toolMgr()->hide( ReturnTo3dViewId );
     if (toSendSignal) {
       emit maximized( this, false );
     }
   }
 }
 
-
 bool OCCViewer_ViewWindow::isMaximized() const
 {
   return !(toolMgr()->action( MaximizedId )->text() == tr( "MNU_MAXIMIZE_VIEW" ));
index a203a2bf2fd3e3d6e887ec80211026edf1dfc55f..afd98e550e62b6b685688460f735759b77013dac 100755 (executable)
@@ -123,7 +123,7 @@ public:
          TrihedronShowId, AxialScaleId, GraduatedAxesId, AmbientId,
         SwitchInteractionStyleId, SwitchZoomingStyleId, 
         SwitchPreselectionId, SwitchSelectionId,
-        MaximizedId, SynchronizeId,
+        MaximizedId, SynchronizeId, ReturnTo3dViewId,
         UserId };
 
   enum OperationType{ NOTHING, PANVIEW, ZOOMVIEW, ROTATE, 
@@ -188,6 +188,7 @@ public:
 
   void            setMaximized( bool, bool = true );
   bool            isMaximized() const;
+  void            setReturnedTo3dView( bool = true );
   
   void            setSketcherStyle( bool enable );
   bool            isSketcherStyle() const;
@@ -246,6 +247,7 @@ public slots:
   virtual void hideEvent( QHideEvent * );
 
   virtual void onMaximizedView();
+  virtual void returnTo3dView();
 
 signals:
   void vpTransformationStarted(OCCViewer_ViewWindow::OperationType type);
@@ -255,6 +257,7 @@ signals:
   void Show( QShowEvent * );
   void Hide( QHideEvent * );
   void maximized( OCCViewer_ViewWindow*, bool );
+  void returnedTo3d( );
 
 protected slots:
   void synchronize( SUIT_ViewWindow* );
index 98804e2c7fbc561108427ae59ac6ce2164aeebdc..94affa31e3b8f3b5bcb0fa3e29d5a0b7efd61186 100644 (file)
         <source>ICON_OCCVIEWER_MINIMIZE</source>
         <translation>occ_view_minimized.png</translation>
     </message>
+    <message>
+        <source>ICON_OCCVIEWER_RETURN_3D_VIEW</source>
+        <translation>occ_view_return_3d_view.png</translation>
+    </message>
     <message>
         <source>ICON_OCCVIEWER_PRESELECTION</source>
         <translation>occ_view_preselection.png</translation>
index 705f737b3a80274549e8a56174ce5861ccb48688..89ff97be4c77fa989914a3f0c40081160aad7a0c 100644 (file)
         <source>DSC_MINIMIZE_VIEW</source>
         <translation>Minimize view</translation>
     </message>
+    <message>
+        <source>DSC_RETURN_3D_VIEW</source>
+        <translation>Return to 3D view</translation>
+    </message>
     <message>
         <source>MNU_MAXIMIZE_VIEW</source>
         <translation>Maximize</translation>
         <source>MNU_MINIMIZE_VIEW</source>
         <translation>Minimize</translation>
     </message>
+    <message>
+        <source>MNU_RETURN_3D_VIEW</source>
+        <translation>Return to 3D</translation>
+    </message>
 </context>
 <context>
     <name>OCCViewer_CreateRestoreViewDlg</name>
index 250fda174ce514618a8716ba48d5d8975bdcef22..743ecc417d2ee9ac197df071b45eb411de168635 100755 (executable)
         <source>DSC_MINIMIZE_VIEW</source>
         <translation>Minimiser la vue</translation>
     </message>
+    <message>
+        <source>DSC_RETURN_3D_VIEW</source>
+        <translation type="unfinished">Return to 3D view</translation>
+    </message>
     <message>
         <source>MNU_MAXIMIZE_VIEW</source>
         <translation>Maximiser</translation>
         <source>MNU_MINIMIZE_VIEW</source>
         <translation>Minimiser</translation>
     </message>
+    <message>
+        <source>MNU_RETURN_3D_VIEW</source>
+        <translation type="unfinished">Return to 3D</translation>
+    </message>
 </context>
 <context>
     <name>OCCViewer_CreateRestoreViewDlg</name>
diff --git a/src/OCCViewer/resources/occ_view_return_3d_view.png b/src/OCCViewer/resources/occ_view_return_3d_view.png
new file mode 100644 (file)
index 0000000..01de30b
Binary files /dev/null and b/src/OCCViewer/resources/occ_view_return_3d_view.png differ