Salome HOME
patch for correct bathymetry visualization in HYDRO
[modules/hydro.git] / src / HYDROCurveCreator / OCCViewer_Utilities.cxx
1
2 #include "OCCViewer_Utilities.h"
3
4 #include <OCCViewer_ViewFrame.h>
5 #include <OCCViewer_ViewModel.h>
6 #include <OCCViewer_ViewPort3d.h>
7 #include <SUIT_ViewManager.h>
8
9 #include <QtxActionToolMgr.h>
10
11 #include <V3d_View.hxx>
12
13 #include <QAction>
14
15 void OCCViewer_Utilities::setViewer2DMode( OCCViewer_Viewer* theViewer,
16                                            const OCCViewer_ViewWindow::Mode2dType& theMode )
17 {
18   OCCViewer_ViewFrame* aFrame = dynamic_cast<OCCViewer_ViewFrame*>
19                                      ( theViewer->getViewManager()->getActiveView() );
20   OCCViewer_ViewWindow* aView = aFrame ? aFrame->getView( OCCViewer_ViewFrame::MAIN_VIEW ) : 0;
21   if ( !aView )
22     return;
23
24   // set a view mode
25   aView->set2dMode( theMode );
26   bool is2dMode = theMode != OCCViewer_ViewWindow::No2dMode;
27
28   // enable/disable view actions
29   QList<int> aNo2dActions;
30   aNo2dActions << OCCViewer_ViewWindow::ChangeRotationPointId
31                << OCCViewer_ViewWindow::RotationId
32                << OCCViewer_ViewWindow::FrontId
33                << OCCViewer_ViewWindow::BackId
34                << OCCViewer_ViewWindow::TopId
35                << OCCViewer_ViewWindow::BottomId
36                << OCCViewer_ViewWindow::LeftId
37                << OCCViewer_ViewWindow::RightId
38                << OCCViewer_ViewWindow::AntiClockWiseId
39                << OCCViewer_ViewWindow::ClockWiseId
40                << OCCViewer_ViewWindow::ResetId;
41
42   QtxActionToolMgr* aToolMgr = aView->toolMgr();
43   QAction* anAction;
44   for ( int i = 0, aNb = aNo2dActions.size(); i < aNb; i++ ) {
45     anAction = aToolMgr->action( aNo2dActions[i] );
46     if ( anAction )
47       anAction->setEnabled( !is2dMode );
48   }
49
50   // change view position
51   Handle(V3d_View) aView3d = aView->getViewPort()->getView();
52   if ( !aView3d.IsNull() ) {
53     switch ( theMode ) {
54       case OCCViewer_ViewWindow::XYPlane:
55         aView3d->SetProj (V3d_Zpos);
56         break;
57       case OCCViewer_ViewWindow::XZPlane:
58         aView3d->SetProj (V3d_Yneg);
59         break;
60       case OCCViewer_ViewWindow::YZPlane:
61         aView3d->SetProj (V3d_Xpos);
62         break;
63     }
64   }
65 }