X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Module.cxx;h=2e32038f9b523cd00cde71c8f52e68f213105d05;hb=a558c58ccc19713db2b13ada4d0f32dff61d0deb;hp=4c2a2cc5e2202f8120d62a027cc4b18585a1c240;hpb=0c405019de08dccfacd64f71f18211cbe912cc1d;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Module.cxx b/src/HYDROGUI/HYDROGUI_Module.cxx index 4c2a2cc5..2e32038f 100644 --- a/src/HYDROGUI/HYDROGUI_Module.cxx +++ b/src/HYDROGUI/HYDROGUI_Module.cxx @@ -29,15 +29,22 @@ #include "HYDROGUI_InputPanel.h" #include "HYDROGUI_ObjSelector.h" #include "HYDROGUI_OCCDisplayer.h" +#include "HYDROGUI_OCCSelector.h" #include "HYDROGUI_Operations.h" #include "HYDROGUI_PrsImage.h" #include "HYDROGUI_Tool.h" #include "HYDROGUI_UpdateFlags.h" #include "HYDROGUI_Shape.h" +#include "HYDROGUI_VTKPrs.h" +#include "HYDROGUI_VTKPrsDisplayer.h" +#include "HYDROGUI_AbstractDisplayer.h" +#include "HYDROGUI_PolylineOp.h" #include +#include +#include -#include +#include #include #include @@ -60,10 +67,15 @@ #include +#include #include #include #include +#include +#include +#include + #include #include #include @@ -114,6 +126,7 @@ void HYDROGUI_Module::initialize( CAM_Application* theApp ) myDisplayer = new HYDROGUI_Displayer( this ); myOCCDisplayer = new HYDROGUI_OCCDisplayer( this ); + myVTKDisplayer = new HYDROGUI_VTKPrsDisplayer( this ); } bool HYDROGUI_Module::activateModule( SUIT_Study* theStudy ) @@ -137,6 +150,9 @@ bool HYDROGUI_Module::activateModule( SUIT_Study* theStudy ) updateCommandsStatus(); + connect( anApp, SIGNAL( operationFinished( const QString&, const QString&, const QStringList& ) ), + this, SLOT( onExternalOperationFinished( const QString&, const QString&, const QStringList& ) ) ); + return aRes; } @@ -159,6 +175,9 @@ bool HYDROGUI_Module::deactivateModule( SUIT_Study* theStudy ) getApp()->setEditEnabled( true ); // show SalomeApp copy/paste actions + disconnect( getApp(), SIGNAL( operationFinished( const QString&, const QString&, const QStringList& ) ), + this, SLOT( onExternalOperationFinished( const QString&, const QString&, const QStringList& ) ) ); + return LightApp_Module::deactivateModule( theStudy ); } @@ -183,10 +202,11 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, { HYDROGUI_DataModel* aModel = getDataModel(); - bool anIsObjectBrowser = theClient == "ObjectBrowser"; + bool anIsObjectBrowser = theClient == getApp()->objectBrowser()->popupClientType(); bool anIsGraphicsView = theClient == GraphicsView_Viewer::Type(); bool anIsOCCView = theClient == OCCViewer_Viewer::Type(); - if( !anIsObjectBrowser && !anIsGraphicsView && !anIsOCCView ) + bool anIsVTKView = theClient == SVTK_Viewer::Type(); + if( !anIsObjectBrowser && !anIsGraphicsView && !anIsOCCView && !anIsVTKView ) return; size_t anActiveViewId = HYDROGUI_Tool::GetActiveViewId( this ); @@ -197,21 +217,32 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, bool anIsImage = false; bool anIsImportedImage = false; - bool anIsCompositeImage = false; + bool anIsImageHasRefs = false; bool anIsFusedImage = false; bool anIsCutImage = false; bool anIsSplittedImage = false; bool anIsMustBeUpdatedImage = false; bool anIsPolyline = false; + bool anIsBathymetry = false; bool anIsCalculation = false; - bool anIsZone = false; + bool anIsImmersibleZone = false; bool anIsVisualState = false; + bool anIsRegion = false; + bool anIsZone = false; + bool anIsObstacle = false; + bool anIsGeomObject = false; + + // check the selected GEOM objects + if ( !HYDROGUI_Tool::GetSelectedGeomObjects( this ).isEmpty() ) { + theMenu->addAction( action( ImportGeomObjectId ) ); + theMenu->addSeparator(); + } // check the selected data model objects HYDROData_SequenceOfObjects aSeq = HYDROGUI_Tool::GetSelectedObjects( this ); for( Standard_Integer anIndex = 1, aLength = aSeq.Length(); anIndex <= aLength; anIndex++ ) { - Handle(HYDROData_Object) anObject = aSeq.Value( anIndex ); + Handle(HYDROData_Entity) anObject = aSeq.Value( anIndex ); if( !anObject.IsNull() ) { anIsSelectedDataObjects = true; @@ -226,9 +257,9 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, Handle(HYDROData_Image) anImage = Handle(HYDROData_Image)::DownCast( anObject ); if( !anImage.IsNull() ) { - anIsImportedImage = anImage->HasTrsfPoints() && !anImage->IsSelfSplitted(); - anIsCompositeImage = anImage->NbReferences() > 0; - if( HYDROOperations_Factory* aFactory = HYDROOperations_Factory::Factory() ) + anIsImportedImage = anImage->HasLocalPoints() && !anImage->IsSelfSplitted(); + anIsImageHasRefs = anImage->HasReferences(); + if( HYDROData_OperationsFactory* aFactory = HYDROData_OperationsFactory::Factory() ) { if( ImageComposer_Operator* anOperator = aFactory->Operator( anImage ) ) { @@ -241,18 +272,31 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, anIsSplittedImage = true; } } - anIsMustBeUpdatedImage = anImage->MustBeUpdated(); + if ( anImage->IsMustBeUpdated() ) + { + anIsMustBeUpdatedImage = true; + } } } else if( anObject->GetKind() == KIND_POLYLINE ) anIsPolyline = true; else if( anObject->GetKind() == KIND_CALCULATION ) anIsCalculation = true; - else if( anObject->GetKind() == KIND_ZONE ) - anIsZone = true; + else if( anObject->GetKind() == KIND_IMMERSIBLE_ZONE ) + anIsImmersibleZone = true; else if( anObject->GetKind() == KIND_VISUAL_STATE ) anIsVisualState = true; + else if( anObject->GetKind() == KIND_REGION ) + anIsRegion = true; + else if( anObject->GetKind() == KIND_ZONE ) + anIsZone = true; + else if( anObject->GetKind() == KIND_BATHYMETRY ) + anIsBathymetry = true; + else if( anObject->GetKind() == KIND_OBSTACLE ) + anIsObstacle = true; } + + anIsGeomObject = HYDROData_Tool::IsGeometryObject( anObject ); } // check the selected partitions @@ -278,85 +322,112 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, case KIND_CALCULATION: theMenu->addAction( action( CreateCalculationId ) ); break; - case KIND_ZONE: - theMenu->addAction( action( CreateZoneId ) ); + case KIND_IMMERSIBLE_ZONE: + theMenu->addAction( action( CreateImmersibleZoneId ) ); + break; + case KIND_OBSTACLE: + theMenu->addAction( action( ImportObstacleFromFileId ) ); + theMenu->addAction( action( CreateBoxId ) ); + theMenu->addAction( action( CreateCylinderId ) ); break; } theMenu->addSeparator(); } } - if( anIsSelectedDataObjects && anIsMustBeUpdatedImage ) + if( anIsSelectedDataObjects ) { - theMenu->addAction( action( UpdateImageId ) ); - theMenu->addSeparator(); - } + if ( anIsMustBeUpdatedImage ) + { + theMenu->addAction( action( UpdateImageId ) ); + theMenu->addSeparator(); + } - if( anIsSelectedDataObjects && aSeq.Length() == 1 ) - { - if( anIsImage ) + if( aSeq.Length() == 1 ) { - if( anIsImportedImage ) - theMenu->addAction( action( EditImportedImageId ) ); - else if( anIsCompositeImage ) + if( anIsImage ) { - if( anIsFusedImage ) - theMenu->addAction( action( EditFusedImageId ) ); - else if( anIsCutImage ) - theMenu->addAction( action( EditCutImageId ) ); - else if( anIsSplittedImage ) - theMenu->addAction( action( EditSplittedImageId ) ); - } + if( anIsImportedImage ) + theMenu->addAction( action( EditImportedImageId ) ); + else if( anIsImageHasRefs ) + { + if( anIsFusedImage ) + theMenu->addAction( action( EditFusedImageId ) ); + else if( anIsCutImage ) + theMenu->addAction( action( EditCutImageId ) ); + else if( anIsSplittedImage ) + theMenu->addAction( action( EditSplittedImageId ) ); + } - theMenu->addAction( action( ObserveImageId ) ); - theMenu->addAction( action( ExportImageId ) ); - theMenu->addSeparator(); + theMenu->addAction( action( ObserveImageId ) ); + theMenu->addAction( action( ExportImageId ) ); + theMenu->addSeparator(); - theMenu->addAction( action( FuseImagesId ) ); - theMenu->addAction( action( CutImagesId ) ); - theMenu->addAction( action( SplitImageId ) ); - theMenu->addSeparator(); - } - else if( anIsPolyline ) - { - theMenu->addAction( action( EditPolylineId ) ); - theMenu->addSeparator(); - } - else if( anIsCalculation ) - { - theMenu->addAction( action( EditCalculationId ) ); - theMenu->addSeparator(); - } - else if( anIsZone ) - { - theMenu->addAction( action( EditZoneId ) ); - theMenu->addSeparator(); - } - else if( anIsVisualState && anIsObjectBrowser ) - { - theMenu->addAction( action( SaveVisualStateId ) ); - theMenu->addAction( action( LoadVisualStateId ) ); - theMenu->addSeparator(); + if( anIsImageHasRefs ) + { + theMenu->addAction( action( RemoveImageRefsId ) ); + theMenu->addSeparator(); + } + + theMenu->addAction( action( FuseImagesId ) ); + theMenu->addAction( action( CutImagesId ) ); + theMenu->addAction( action( SplitImageId ) ); + theMenu->addSeparator(); + } + else if( anIsPolyline ) + { + theMenu->addAction( action( EditPolylineId ) ); + theMenu->addSeparator(); + } + else if( anIsCalculation ) + { + theMenu->addAction( action( EditCalculationId ) ); + theMenu->addAction( action( ExportCalculationId ) ); + theMenu->addSeparator(); + } + else if( anIsImmersibleZone ) + { + theMenu->addAction( action( EditImmersibleZoneId ) ); + theMenu->addSeparator(); + } + else if( anIsVisualState && anIsObjectBrowser ) + { + theMenu->addAction( action( SaveVisualStateId ) ); + theMenu->addAction( action( LoadVisualStateId ) ); + theMenu->addSeparator(); + } + + // Add set color action for geometrical objects + if ( anIsGeomObject ) + { + theMenu->addAction( action( SetColorId ) ); + theMenu->addSeparator(); + } } - } - if( anIsSelectedDataObjects ) - { theMenu->addAction( action( DeleteId ) ); theMenu->addSeparator(); + + if( anIsImage || anIsPolyline || anIsImmersibleZone || anIsZone || anIsRegion || anIsBathymetry || anIsObstacle ) + { + if( anIsHiddenInSelection ) + theMenu->addAction( action( ShowId ) ); + theMenu->addAction( action( ShowOnlyId ) ); + if( anIsVisibleInSelection ) + theMenu->addAction( action( HideId ) ); + theMenu->addSeparator(); + } } - if( anIsSelectedDataObjects && ( anIsImage || anIsPolyline || anIsZone ) ) + if ( anIsOCCView ) { - if( anIsHiddenInSelection ) - theMenu->addAction( action( ShowId ) ); - theMenu->addAction( action( ShowOnlyId ) ); - if( anIsVisibleInSelection ) - theMenu->addAction( action( HideId ) ); - theMenu->addSeparator(); + SUIT_Operation* anOp = application()->activeStudy()->activeOperation(); + HYDROGUI_PolylineOp* aPolylineOp = dynamic_cast( anOp ); + if ( aPolylineOp && aPolylineOp->deleteEnabled() ) + theMenu->addAction( action( DeleteId ) ); } - if( anIsObjectBrowser || anIsGraphicsView || anIsOCCView ) + if( anIsObjectBrowser || anIsGraphicsView || anIsOCCView || anIsVTKView ) { theMenu->addAction( action( ShowAllId ) ); theMenu->addAction( action( HideAllId ) ); @@ -378,13 +449,15 @@ void HYDROGUI_Module::update( const int flags ) // store selected objects QStringList aSelectedEntries = storeSelection(); + bool aDoFitAll = flags & UF_FitAll; if( ( flags & UF_Viewer ) ) - updateGV( flags & UF_GV_Init, - flags & UF_GV_Forced ); + updateViewer( getDisplayer(), flags & UF_GV_Init, flags & UF_GV_Forced, aDoFitAll ); if( ( flags & UF_OCCViewer ) ) - updateOCCViewer( flags & UF_OCC_Init, - flags & UF_OCC_Forced ); + updateViewer( getOCCDisplayer(), flags & UF_OCC_Init, flags & UF_OCC_Forced, aDoFitAll ); + + if( ( flags & UF_VTKViewer ) ) + updateViewer( getVTKDisplayer(), flags & UF_VTK_Init, flags & UF_VTK_Forced, aDoFitAll ); if( ( flags & UF_Model ) && getDataModel() && getApp() ) { @@ -394,13 +467,13 @@ void HYDROGUI_Module::update( const int flags ) // the selection in the object browser. // Note: processEvents() should be called after updateGV(), // otherwise the application crashes from time to time. - qApp->processEvents(); + //RKV: qApp->processEvents(); getApp()->updateObjectBrowser( true ); } // Object browser is currently updated by using UF_Model flag - //if( ( flags & UF_ObjBrowser ) && getApp() ) - // getApp()->updateObjectBrowser( true ); + if( ( flags & UF_ObjBrowser ) && ((flags & UF_Model) == 0) && getApp() ) + getApp()->updateObjectBrowser( true ); if( ( flags & UF_Controls ) && getApp() ) getApp()->updateActions(); @@ -444,6 +517,20 @@ HYDROGUI_OCCDisplayer* HYDROGUI_Module::getOCCDisplayer() const return myOCCDisplayer; } +HYDROGUI_VTKPrsDisplayer* HYDROGUI_Module::getVTKDisplayer() const +{ + return myVTKDisplayer; +} + +SUIT_ViewManager* HYDROGUI_Module::getViewManager( const int theId ) const +{ + if( myViewManagerMap.contains( theId ) ) + { + return myViewManagerMap[ theId ].first; + } + return NULL; +} + GraphicsView_Viewer* HYDROGUI_Module::getViewer( const int theId ) const { if( myViewManagerMap.contains( theId ) ) @@ -470,6 +557,19 @@ OCCViewer_Viewer* HYDROGUI_Module::getOCCViewer( const int theId ) const return NULL; } +SVTK_Viewer* HYDROGUI_Module::getVTKViewer( const int theId ) const +{ + if( myViewManagerMap.contains( theId ) ) + { + ViewManagerInfo anInfo = myViewManagerMap[ theId ]; + SVTK_ViewManager* aViewManager = + ::qobject_cast( anInfo.first ); + if( aViewManager ) + return dynamic_cast( aViewManager->getViewModel() ); + } + return NULL; +} + int HYDROGUI_Module::getViewManagerId( SUIT_ViewManager* theViewManager ) { ViewManagerMapIterator anIter( myViewManagerMap ); @@ -506,7 +606,7 @@ void HYDROGUI_Module::setViewManagerRole( SUIT_ViewManager* theViewManager, } bool HYDROGUI_Module::isObjectVisible( const int theViewId, - const Handle(HYDROData_Object)& theObject ) const + const Handle(HYDROData_Entity)& theObject ) const { if( theObject.IsNull() ) return false; @@ -526,7 +626,7 @@ bool HYDROGUI_Module::isObjectVisible( const int theViewId, } void HYDROGUI_Module::setObjectVisible( const int theViewId, - const Handle(HYDROData_Object)& theObject, + const Handle(HYDROData_Entity)& theObject, const bool theState ) { if( !theObject.IsNull() ) @@ -537,8 +637,9 @@ void HYDROGUI_Module::setObjectVisible( const int theViewId, } } +/////////////////// OCC SHAPES PROCESSING HYDROGUI_Shape* HYDROGUI_Module::getObjectShape( const int theViewId, - const Handle(HYDROData_Object)& theObject ) const + const Handle(HYDROData_Entity)& theObject ) const { HYDROGUI_Shape* aResShape = NULL; if( theObject.IsNull() ) @@ -561,7 +662,7 @@ HYDROGUI_Shape* HYDROGUI_Module::getObjectShape( const int } void HYDROGUI_Module::setObjectShape( const int theViewId, - const Handle(HYDROData_Object)& theObject, + const Handle(HYDROData_Entity)& theObject, HYDROGUI_Shape* theShape ) { if( theObject.IsNull() ) @@ -572,16 +673,18 @@ void HYDROGUI_Module::setObjectShape( const int theViewId, } void HYDROGUI_Module::removeObjectShape( const int theViewId, - const Handle(HYDROData_Object)& theObject ) + const Handle(HYDROData_Entity)& theObject ) { if ( !myShapesMap.contains( theViewId ) ) return; ListOfShapes& aViewShapes = myShapesMap[ theViewId ]; + Handle(HYDROData_Entity) anObject; for ( int i = 0; i < aViewShapes.length(); ) { HYDROGUI_Shape* aShape = aViewShapes.at( i ); - if ( aShape && IsEqual( aShape->getObject(), theObject ) ) + anObject = aShape->getObject(); + if ( aShape && (!anObject.IsNull()) && IsEqual( anObject, theObject ) ) { delete aShape; aViewShapes.removeAt( i ); @@ -607,6 +710,126 @@ void HYDROGUI_Module::removeViewShapes( const int theViewId ) myShapesMap.remove( theViewId ); } +/////////////////// END OF OCC SHAPES PROCESSING + +/////////////////// VTKPrs PROCESSING +HYDROGUI_VTKPrs* HYDROGUI_Module::getObjectVTKPrs( const int theViewId, + const Handle(HYDROData_Entity)& theObject ) const +{ + HYDROGUI_VTKPrs* aResShape = NULL; + if( theObject.IsNull() ) + return aResShape; + + if ( myVTKPrsMap.contains( theViewId ) ) + { + const ListOfVTKPrs& aViewShapes = myVTKPrsMap.value( theViewId ); + foreach ( HYDROGUI_VTKPrs* aShape, aViewShapes ) + { + if ( !aShape || !IsEqual( aShape->getObject(), theObject ) ) + continue; + + aResShape = aShape; + break; + } + } + + return aResShape; +} + +void HYDROGUI_Module::setObjectVTKPrs( const int theViewId, + const Handle(HYDROData_Entity)& theObject, + HYDROGUI_VTKPrs* theShape ) +{ + if( theObject.IsNull() ) + return; + + // Compute the new global Z range from the added presentation and the old global Z range. + double* aGlobalRange = getVTKDisplayer()->GetZRange( theViewId ); + double* aRange = theShape->getInternalZRange(); + bool anIsUpdate = false; + if ( aRange[0] < aGlobalRange[0] ) + { + aGlobalRange[0] = aRange[0]; + anIsUpdate = true; + } + if ( aRange[1] > aGlobalRange[1] ) + { + aGlobalRange[1] = aRange[1]; + anIsUpdate = true; + } + + //if ( anIsUpdate ) + //{ + updateVTKZRange( theViewId, aGlobalRange ); + //} + + ListOfVTKPrs& aViewShapes = myVTKPrsMap[ theViewId ]; + aViewShapes.append( theShape ); +} + +void HYDROGUI_Module::removeObjectVTKPrs( const int theViewId, + const Handle(HYDROData_Entity)& theObject ) +{ + if ( !myVTKPrsMap.contains( theViewId ) ) + return; + + ListOfVTKPrs& aViewShapes = myVTKPrsMap[ theViewId ]; + Handle(HYDROData_Entity) anObject; + for ( int i = 0; i < aViewShapes.length(); ) + { + HYDROGUI_VTKPrs* aShape = aViewShapes.at( i ); + anObject = aShape->getObject(); + if ( aShape && (!anObject.IsNull()) && IsEqual( anObject, theObject ) ) + { + 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::removeViewVTKPrs( const int theViewId ) +{ + if ( !myVTKPrsMap.contains( theViewId ) ) + return; + + const ListOfVTKPrs& aViewShapes = myVTKPrsMap.value( theViewId ); + for ( int i = 0, n = aViewShapes.length(); i < n; ++i ) + { + HYDROGUI_VTKPrs* aShape = aViewShapes.at( i ); + if ( aShape ) + delete aShape; + } + + myVTKPrsMap.remove( theViewId ); +} + +void HYDROGUI_Module::updateVTKZRange( const int theViewId, double theRange[] ) +{ + if ( myVTKPrsMap.contains( theViewId ) ) + { + // For the given viewer id update all VTK presentations ... + const ListOfVTKPrs& aViewShapes = myVTKPrsMap.value( theViewId ); + HYDROGUI_VTKPrs* aShape; + for ( int i = 0, n = aViewShapes.length(); i < n; ++i ) + { + aShape = aViewShapes.at( i ); + if ( aShape ) + { + aShape->setZRange( theRange ); + } + } + } + // ... and update the global color legend scalar bar. + getVTKDisplayer()->SetZRange( theViewId, theRange ); +} +/////////////////// END OF VTKPrs PROCESSING CAM_DataModel* HYDROGUI_Module::createDataModel() { @@ -623,8 +846,14 @@ void HYDROGUI_Module::customEvent( QEvent* e ) { if( GraphicsView_Viewer* aViewer = dynamic_cast( aViewFrame->getViewer() ) ) { + SUIT_ViewManager* aViewManager = aViewer->getViewManager(); + ViewManagerRole aRole = getViewManagerRole( aViewManager ); + if( GraphicsView_ViewPort* aViewPort = aViewer->getActiveViewPort() ) { + if( aRole != VMR_TransformImage && aRole != VMR_ReferenceImage ) + aViewPort->scale( 1, -1 ); // invert the Y axis direction from down to up + aViewPort->setInteractionFlag( GraphicsView_ViewPort::TraceBoundingRect ); aViewPort->setInteractionFlag( GraphicsView_ViewPort::ImmediateContextMenu ); aViewPort->setInteractionFlag( GraphicsView_ViewPort::ImmediateSelection ); @@ -633,9 +862,7 @@ void HYDROGUI_Module::customEvent( QEvent* e ) //aViewPort->setViewLabelPosition( GraphicsView_ViewPort::VLP_BottomLeft, true ); } - SUIT_ViewManager* aViewManager = aViewer->getViewManager(); - ViewManagerRole aRole = getViewManagerRole( aViewManager ); - if( aRole != VMR_TransformImage ) + if( aRole != VMR_TransformImage && aRole != VMR_ReferenceImage ) update( UF_Viewer ); aViewer->activateTransform( GraphicsView_Viewer::FitAll ); @@ -666,8 +893,6 @@ void HYDROGUI_Module::onViewManagerAdded( SUIT_ViewManager* theViewManager ) if( theViewManager->getType() == GraphicsView_Viewer::Type() ) { - createSelector( theViewManager ); // replace the default selector - connect( theViewManager, SIGNAL( viewCreated( SUIT_ViewWindow* ) ), this, SLOT( onViewCreated( SUIT_ViewWindow* ) ) ); } @@ -677,6 +902,8 @@ void HYDROGUI_Module::onViewManagerAdded( SUIT_ViewManager* theViewManager ) this, SLOT( onViewCreated( SUIT_ViewWindow* ) ) ); } + createSelector( theViewManager ); // replace the default selector + ViewManagerInfo anInfo( theViewManager, VMR_General ); myViewManagerMap.insert( ViewManagerId++, anInfo ); } @@ -699,6 +926,16 @@ void HYDROGUI_Module::onViewManagerRemoved( SUIT_ViewManager* theViewManager ) removeViewShapes( (size_t)anOCCViewer ); } + if ( getVTKDisplayer()->IsApplicable( theViewManager ) ) + { + SVTK_Viewer* aVTKViewer = getVTKViewer( anId ); + if ( aVTKViewer ) + { + getVTKDisplayer()->DeleteScalarBar( anId ); + removeViewShapes( (size_t)aVTKViewer ); + } + } + myViewManagerMap.remove( anId ); } } @@ -728,6 +965,7 @@ void HYDROGUI_Module::onViewCreated( SUIT_ViewWindow* theViewWindow ) void HYDROGUI_Module::onViewPortMouseEvent( QGraphicsSceneMouseEvent* theEvent ) { + /* ouv: currently unused if( GraphicsView_ViewPort* aViewPort = qobject_cast( sender() ) ) { SUIT_ViewManager* aViewManager = 0; @@ -757,8 +995,8 @@ void HYDROGUI_Module::onViewPortMouseEvent( QGraphicsSceneMouseEvent* theEvent ) int aXDeg = 0, aYDeg = 0; int aXMin = 0, aYMin = 0; double aXSec = 0, aYSec = 0; - HYDROGUI_Tool::DoubleToLambert( aMouseX, aXDeg, aXMin, aXSec ); - HYDROGUI_Tool::DoubleToLambert( aMouseY, aYDeg, aYMin, aYSec ); + HYDROData_Lambert93::secToDMS( aMouseX, aXDeg, aXMin, aXSec ); + HYDROData_Lambert93::secToDMS( aMouseY, aYDeg, aYMin, aYSec ); QString aDegSymbol( QChar( 0x00B0 ) ); QString aXStr = QString( "%1%2 %3' %4\"" ).arg( aXDeg ).arg( aDegSymbol ).arg( aXMin ).arg( aXSec ); @@ -769,59 +1007,34 @@ void HYDROGUI_Module::onViewPortMouseEvent( QGraphicsSceneMouseEvent* theEvent ) else if( aRole == VMR_TransformImage ) aViewPort->setViewLabelText( QString( "X: %1\nY: %2" ).arg( (int)aMouseX ).arg( (int)aMouseY ) ); } + */ } -void HYDROGUI_Module::updateGV( const bool theIsInit, - const bool theIsForced ) +void HYDROGUI_Module::updateViewer( HYDROGUI_AbstractDisplayer* theDisplayer, + const bool theIsInit, + const bool theIsForced, + const bool theDoFitAll ) { - if( !getDisplayer() ) - return; - QList aViewManagerIdList; // currently, all views are updated ViewManagerMapIterator anIter( myViewManagerMap ); while( anIter.hasNext() ) { - GraphicsView_ViewManager* aViewManager = - dynamic_cast( anIter.next().value().first ); - if ( !aViewManager ) - continue; + SUIT_ViewManager* aViewManager = anIter.next().value().first; - int anId = anIter.key(); - aViewManagerIdList.append( anId ); + if ( theDisplayer->IsApplicable( aViewManager ) ) + { + int anId = anIter.key(); + aViewManagerIdList.append( anId ); + } } QListIterator anIdIter( aViewManagerIdList ); while( anIdIter.hasNext() ) - getDisplayer()->UpdateAll( anIdIter.next(), theIsInit, theIsForced ); -} - -void HYDROGUI_Module::updateOCCViewer( const bool theIsInit, - const bool theIsForced ) -{ - HYDROGUI_OCCDisplayer* anOCCDisplayer = getOCCDisplayer(); - if( !anOCCDisplayer ) - return; - - QList aViewManagerIdList; - - // currently, all views are updated - ViewManagerMapIterator anIter( myViewManagerMap ); - while( anIter.hasNext() ) - { - OCCViewer_ViewManager* aViewManager = - ::qobject_cast( anIter.next().value().first ); - if ( !aViewManager ) - continue; - - int anId = anIter.key(); - aViewManagerIdList.append( anId ); + { + theDisplayer->UpdateAll( anIdIter.next(), theIsInit, theIsForced, theDoFitAll ); } - - QListIterator anIdIter( aViewManagerIdList ); - while( anIdIter.hasNext() ) - anOCCDisplayer->UpdateAll( anIdIter.next(), theIsInit, theIsForced ); } void HYDROGUI_Module::createSelector( SUIT_ViewManager* theViewManager ) @@ -834,12 +1047,8 @@ void HYDROGUI_Module::createSelector( SUIT_ViewManager* theViewManager ) return; QString aViewType = theViewManager->getType(); - if( aViewType != GraphicsView_Viewer::Type() ) - return; - - GraphicsView_ViewManager* aViewManager = - dynamic_cast( theViewManager ); - if( !aViewManager ) + if( aViewType != GraphicsView_Viewer::Type() && + aViewType != OCCViewer_Viewer::Type()) return; QList aSelectorList; @@ -850,11 +1059,26 @@ void HYDROGUI_Module::createSelector( SUIT_ViewManager* theViewManager ) for( anIter = aSelectorList.begin(); anIter != anIterEnd; anIter++ ) { SUIT_Selector* aSelector = *anIter; - if( aSelector && !dynamic_cast( aSelector ) ) + if( aSelector && ( !dynamic_cast( aSelector ) && + !dynamic_cast( aSelector ) && + !dynamic_cast( aSelector ) ) ) aSelector->setEnabled( false ); } - new HYDROGUI_GVSelector( this, aViewManager->getViewer(), aSelectionMgr ); + if ( aViewType == GraphicsView_Viewer::Type() ) + { + GraphicsView_ViewManager* aViewManager = + ::qobject_cast( theViewManager ); + if( aViewManager ) + new HYDROGUI_GVSelector( this, aViewManager->getViewer(), aSelectionMgr ); + } + else if ( aViewType == OCCViewer_Viewer::Type() ) + { + OCCViewer_ViewManager* aViewManager = + ::qobject_cast( theViewManager ); + if( aViewManager ) + new HYDROGUI_OCCSelector( this, aViewManager->getOCCViewer(), aSelectionMgr ); + } } bool HYDROGUI_Module::setUpdateEnabled( const bool theState )