Salome HOME
Refs #137 - UZ plane should be used in profile
[modules/hydro.git] / src / HYDROGUI / HYDROGUI_Module.cxx
index fb192aff8069ee159101f1efe13eb39cc3b15918..ae7dad74097e96dc76ce2a207e81a399cdc7283a 100644 (file)
 #include <SVTK_ViewModel.h>
 #include <SVTK_ViewWindow.h>
 #include <SVTK_Selector.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkRenderer.h>
-#include <vtkWorldPointPicker.h>
-#include <vtkCamera.h>
 
 #include <OCCViewer_ViewPort3d.h>
 
 #include <QMenu>
 #include <QMouseEvent>
 #include <QStatusBar>
-
-const double LOCAL_SELECTION_TOLERANCE = 0.0001;
+#include <QCursor>
 
 static int ViewManagerId = 0;
 
@@ -657,7 +652,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient,
     theMenu->addAction( action( HideAllId ) );
     theMenu->addSeparator();
   }
-  if ( anIsOCCView ) {
+  if ( anIsOCCView || anIsVTKView ) {
     theMenu->addSeparator();
     theMenu->addAction( action( CopyViewerPositionId ) );
   }
@@ -1455,81 +1450,23 @@ void HYDROGUI_Module::restoreSelection( const QStringList& theEntryList )
   }
 }
 
-void HYDROGUI_Module::onMouseMove( SUIT_ViewWindow* theViewWindow, QMouseEvent* theEvent )
+void HYDROGUI_Module::onMouseMove( SUIT_ViewWindow* theViewWindow, QMouseEvent* )
 {
-  OCCViewer_ViewWindow* anOCCViewWindow = 
-    dynamic_cast<OCCViewer_ViewWindow*>(theViewWindow);
+  double aX, aY, aZ;
   bool doShow = false;
-  gp_Pnt aPnt;
-  if ( anOCCViewWindow ) {
-    // Get the selected point coordinates
-    OCCViewer_ViewPort3d* aViewPort = anOCCViewWindow->getViewPort();
-    if ( !aViewPort ) {
-      return;
-    }
+  HYDROGUI_Displayer* aDisplayer = getDisplayer();
+  if ( aDisplayer )
+    aDisplayer->SaveCursorViewPosition( theViewWindow );
+    doShow = aDisplayer->GetCursorViewCoordinates( theViewWindow, aX, aY, aZ );
 
-    aPnt = CurveCreator_Utils::ConvertClickToPoint( theEvent->x(), theEvent->y(), 
-                                                           aViewPort->getView() );
-    doShow = true;
-  } 
-  else
-  {
-    SVTK_ViewWindow* aViewWindow = 
-      dynamic_cast<SVTK_ViewWindow*>(theViewWindow);
-    if ( aViewWindow ) {
-      vtkRenderer* aRen = aViewWindow->getRenderer();
-      if ( aRen )
-      {
-        vtkCamera* aCamera = aRen->GetActiveCamera();
-        double* aNormal = aCamera->GetViewPlaneNormal();
-        int event_x, event_y;
-        vtkRenderWindowInteractor* anInteractor = aViewWindow->getInteractor();
-        if ( anInteractor )
-        {
-          anInteractor->GetLastEventPosition(event_x, event_y);
-          // Use a WorldPicker to get current coords
-          myPicker->Pick( event_x, event_y, 0, aRen );
-          double* aCoords = myPicker->GetPickPosition();
-          /////////////////////// Use the same algorithm as for OCC
-          double X, Y, Z;
-          double aXp, aYp, aZp;
-          double Vx, Vy, Vz;
-          X = aCoords[0];
-          Y = aCoords[1];
-          Z = aCoords[2];
-          Vx = aNormal[0];
-          Vy = aNormal[1];
-          Vz = aNormal[2];
-          Standard_Real aPrec = LOCAL_SELECTION_TOLERANCE;
-          if ( fabs( Vz ) > aPrec ) {
-            double aT = -Z/Vz;
-            aXp = X + aT*Vx;
-            aYp = Y + aT*Vy;
-            aZp = Z + aT*Vz;
-          }
-          else { // Vz = 0 - the eyed plane is orthogonal to Z plane - XOZ, or YOZ
-            aXp = aYp = aZp = 0;
-            if ( fabs( Vy ) < aPrec ) // Vy = 0 - the YOZ plane
-              aYp = Y;
-            else if ( fabs( Vx ) < aPrec ) // Vx = 0 - the XOZ plane
-              aXp = X;
-          }
-          /////////////////////////
-          doShow = true;
-          aPnt.SetX( aXp );
-          aPnt.SetY( aYp );
-        }
-      }
-    } 
-  }
   if ( doShow )
   {
     // Show the coordinates in the status bar
     SUIT_Desktop* aDesktop = getApp()->desktop();
     if ( aDesktop && aDesktop->statusBar() ) {
-      QString aX = HYDROGUI_Tool::GetCoordinateString( aPnt.X() );
-      QString anY = HYDROGUI_Tool::GetCoordinateString( aPnt.Y() );
-      aDesktop->statusBar()->showMessage( tr("COORDINATES_INFO").arg( aX ).arg( anY ) );
+      QString aXStr = HYDROGUI_Tool::GetCoordinateString( aX );
+      QString anYStr = HYDROGUI_Tool::GetCoordinateString( aY );
+      aDesktop->statusBar()->showMessage( tr("COORDINATES_INFO").arg( aXStr ).arg( anYStr ) );
     }
   }
 }
@@ -1547,4 +1484,4 @@ int HYDROGUI_Module::getObjectDisplayOrder(
   QStringList anObjectEntries = myObjectDisplayOrderMap.value( theViewId );
 
   return anObjectEntries.indexOf( anEntry );
-}
\ No newline at end of file
+}