- 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 );
- }
- }
- }
- }