X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Module.cxx;h=c9aa1704b558d9240ed4175263256604bdb95820;hb=f34b90e9e4e02ba65419134d5d37a2e42aecfabf;hp=ea883c19cd8fece6b7c1e179426dfe52f26b81c3;hpb=e8c1369317da0dca7532281d3f131bc25875e1f4;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Module.cxx b/src/HYDROGUI/HYDROGUI_Module.cxx index ea883c19..c9aa1704 100644 --- a/src/HYDROGUI/HYDROGUI_Module.cxx +++ b/src/HYDROGUI/HYDROGUI_Module.cxx @@ -85,10 +85,6 @@ #include #include #include -#include -#include -#include -#include #include @@ -103,8 +99,7 @@ #include #include #include - -const double LOCAL_SELECTION_TOLERANCE = 0.0001; +#include static int ViewManagerId = 0; @@ -597,6 +592,11 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addAction( action( EditDigueId ) ); theMenu->addSeparator(); } + else if( anIsObstacle ) + { + theMenu->addAction( action( TranslateObstacleId ) ); + theMenu->addSeparator(); + } else if( anIsVisualState && anIsObjectBrowser ) { theMenu->addAction( action( SaveVisualStateId ) ); @@ -610,19 +610,22 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addAction( action( SetColorId ) ); theMenu->addSeparator(); } - - // Add copy action - if( aModel->canCopy() ) { - theMenu->addAction( action( CopyId ) ); - theMenu->addSeparator(); - } } else if ( anAllAreProfiles ) { theMenu->addAction( action( SelectedGeoreferencementId ) ); theMenu->addSeparator(); } + // Add copy action + QAction* aCopyAction = action( CopyId ); + if( aCopyAction && aCopyAction->isEnabled() ) { + theMenu->addAction( action( CopyId ) ); + theMenu->addSeparator(); + } + + // Add delete action if( !anIsDummyObject3D ) theMenu->addAction( action( DeleteId ) ); + theMenu->addSeparator(); if( anIsImage || anIsPolyline || anIsPolyline3D || @@ -654,7 +657,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 ) ); } @@ -1051,6 +1054,35 @@ void HYDROGUI_Module::setObjectVTKPrs( const int theViewId aViewShapes.append( theShape ); } +void HYDROGUI_Module::removeObjectVTKPrs( const int theViewId, + const QString& theEntry ) +{ + if ( !myVTKPrsMap.contains( theViewId ) ) + return; + + ListOfVTKPrs& aViewShapes = myVTKPrsMap[ theViewId ]; + Handle(HYDROData_Entity) anObject; + QString anEntryRef; + for ( int i = 0; i < aViewShapes.length(); ) + { + HYDROGUI_VTKPrs* aShape = aViewShapes.at( i ); + anObject = aShape->getObject(); + anEntryRef = HYDROGUI_DataObject::dataObjectEntry( anObject ); + if ( aShape && (!anObject.IsNull()) && ( anEntryRef == theEntry ) ) + { + delete aShape; + aViewShapes.removeAt( i ); + continue; + } + + ++i; + } + + // Invalidate global Z range + double anInvalidRange[2] = { HYDROGUI_VTKPrs::InvalidZValue(), HYDROGUI_VTKPrs::InvalidZValue() }; + getVTKDisplayer()->SetZRange( theViewId, anInvalidRange ); +} + void HYDROGUI_Module::removeObjectVTKPrs( const int theViewId, const Handle(HYDROData_Entity)& theObject ) { @@ -1452,81 +1484,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(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(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 ) ); } } } @@ -1544,4 +1518,4 @@ int HYDROGUI_Module::getObjectDisplayOrder( QStringList anObjectEntries = myObjectDisplayOrderMap.value( theViewId ); return anObjectEntries.indexOf( anEntry ); -} \ No newline at end of file +}