X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Module.cxx;h=c9aa1704b558d9240ed4175263256604bdb95820;hb=f34b90e9e4e02ba65419134d5d37a2e42aecfabf;hp=572fc6505bd9fbc342078197ef5ec63946e1c539;hpb=ccb8b011d512b2a5fb6dc87daa17cc3caaed5639;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Module.cxx b/src/HYDROGUI/HYDROGUI_Module.cxx index 572fc650..c9aa1704 100644 --- a/src/HYDROGUI/HYDROGUI_Module.cxx +++ b/src/HYDROGUI/HYDROGUI_Module.cxx @@ -24,6 +24,7 @@ #include "HYDROGUI.h" #include "HYDROGUI_DataModel.h" +#include "HYDROGUI_DataObject.h" #include "HYDROGUI_Displayer.h" #include "HYDROGUI_GVSelector.h" #include "HYDROGUI_InputPanel.h" @@ -84,7 +85,6 @@ #include #include #include -#include #include @@ -99,6 +99,7 @@ #include #include #include +#include static int ViewManagerId = 0; @@ -184,6 +185,7 @@ bool HYDROGUI_Module::activateModule( SUIT_Study* theStudy ) foreach ( const int anId, anObsoleteIds ) { myViewManagerMap.remove( anId ); myObjectStateMap.remove( anId ); + myObjectDisplayOrderMap.remove( anId ); myShapesMap.remove( anId ); myVTKPrsMap.remove( anId ); } @@ -590,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 ) ); @@ -603,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 || @@ -647,6 +657,10 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addAction( action( HideAllId ) ); theMenu->addSeparator(); } + if ( anIsOCCView || anIsVTKView ) { + theMenu->addSeparator(); + theMenu->addAction( action( CopyViewerPositionId ) ); + } } void HYDROGUI_Module::update( const int flags ) @@ -834,12 +848,14 @@ bool HYDROGUI_Module::isObjectVisible( const int theViewId, if( theObject.IsNull() ) return false; - ViewId2Name2ObjectStateMap::const_iterator anIter1 = myObjectStateMap.find( theViewId ); + ViewId2Entry2ObjectStateMap::const_iterator anIter1 = myObjectStateMap.find( theViewId ); if( anIter1 != myObjectStateMap.end() ) { - const Name2ObjectStateMap& aName2ObjectStateMap = anIter1.value(); - Name2ObjectStateMap::const_iterator anIter2 = aName2ObjectStateMap.find( theObject->GetName()); - if( anIter2 != aName2ObjectStateMap.end() ) + const Entry2ObjectStateMap& aEntry2ObjectStateMap = anIter1.value(); + QString anEntry = HYDROGUI_DataObject::dataObjectEntry( theObject ); + + Entry2ObjectStateMap::const_iterator anIter2 = aEntry2ObjectStateMap.find( anEntry ); + if( anIter2 != aEntry2ObjectStateMap.end() ) { const ObjectState& anObjectState = anIter2.value(); return anObjectState.Visibility; @@ -854,9 +870,18 @@ void HYDROGUI_Module::setObjectVisible( const int theViewId, { if( !theObject.IsNull() ) { - Name2ObjectStateMap& aName2ObjectStateMap = myObjectStateMap[ theViewId ]; - ObjectState& anObjectState = aName2ObjectStateMap[ theObject->GetName() ]; + Entry2ObjectStateMap& aEntry2ObjectStateMap = myObjectStateMap[ theViewId ]; + QString anEntry = HYDROGUI_DataObject::dataObjectEntry( theObject ); + + ObjectState& anObjectState = aEntry2ObjectStateMap[ anEntry ]; anObjectState.Visibility = theState; + + // Remember the display order ( needed for Z layers assignment only ) + QStringList& anObjectEntries = myObjectDisplayOrderMap[ theViewId ]; + anObjectEntries.removeAll( anEntry ); + if ( theState ) { + anObjectEntries.append( anEntry ); + } } } @@ -1029,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 ) { @@ -1430,49 +1484,38 @@ 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); - if ( anOCCViewWindow ) { - // Get the selected point coordinates - OCCViewer_ViewPort3d* aViewPort = anOCCViewWindow->getViewPort(); - if ( !aViewPort ) { - return; - } - - gp_Pnt aPnt = CurveCreator_Utils::ConvertClickToPoint( theEvent->x(), theEvent->y(), - aViewPort->getView() ); + double aX, aY, aZ; + bool doShow = false; + HYDROGUI_Displayer* aDisplayer = getDisplayer(); + if ( aDisplayer ) + aDisplayer->SaveCursorViewPosition( theViewWindow ); + doShow = aDisplayer->GetCursorViewCoordinates( theViewWindow, aX, aY, aZ ); + + 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 ) ); } - } - else - { - SVTK_ViewWindow* aViewWindow = - dynamic_cast(theViewWindow); - if ( aViewWindow ) { - // Get the selected point coordinates - double aCoords[3]; - SVTK_RenderWindowInteractor* anInteractor = aViewWindow->GetInteractor(); - if ( anInteractor ) - { - //TODO: Use a WorldPicker to get current coords - //anInteractorStyle->ComputeDisplayToWorld( theEvent->x(), theEvent->y(), 0, aCoords ); - aCoords[0] = theEvent->x(); - aCoords[1] = theEvent->y(); - // Show the coordinates in the status bar - SUIT_Desktop* aDesktop = getApp()->desktop(); - if ( aDesktop && aDesktop->statusBar() ) { - QString aX = HYDROGUI_Tool::GetCoordinateString( aCoords[0] ); - QString anY = HYDROGUI_Tool::GetCoordinateString( aCoords[1] ); - aDesktop->statusBar()->showMessage( tr("COORDINATES_INFO").arg( aX ).arg( anY ) ); - } - } - } } -} \ No newline at end of file +} + +/** + * Get the object display order. Needed for Z layers assignment only. + */ +int HYDROGUI_Module::getObjectDisplayOrder( + const int theViewId, const Handle(HYDROData_Entity)& theObject) const +{ + if( theObject.IsNull() ) + return -1; + + QString anEntry = HYDROGUI_DataObject::dataObjectEntry( theObject ); + QStringList anObjectEntries = myObjectDisplayOrderMap.value( theViewId ); + + return anObjectEntries.indexOf( anEntry ); +}