X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Module.cxx;h=f861ac792105ff447509003d9ee25772dd21dba8;hb=80b3ef265c1b8564a52097094156256956017ae1;hp=0403a311edc6133b8154e264d6202a5c9a4e9da7;hpb=b1de05ae46af77d0b2692808e99af6404bd88a42;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Module.cxx b/src/HYDROGUI/HYDROGUI_Module.cxx index 0403a311..f861ac79 100644 --- a/src/HYDROGUI/HYDROGUI_Module.cxx +++ b/src/HYDROGUI/HYDROGUI_Module.cxx @@ -46,6 +46,7 @@ #include #include #include +#include #include @@ -337,6 +338,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, bool anIsZone = false; bool anIsObstacle = false; bool anIsStricklerTable = false; + bool anIsLandCoverMap = false; bool anIsStream = false; bool anIsChannel = false; bool anIsDigue = false; @@ -397,7 +399,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, anIsVisibleInSelection |= aVisibility; anIsHiddenInSelection |= !aVisibility; - if ( anObject->CanBeUpdated() && anObject->IsMustBeUpdated() ) + if ( anObject->CanBeUpdated() && anObject->IsMustBeUpdated( HYDROData_Entity::Geom_All ) ) { anIsMustObjectBeUpdated = true; } @@ -457,6 +459,8 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, anIsObstacle = true; else if( anObjectKind == KIND_STRICKLER_TABLE ) anIsStricklerTable = true; + else if( anObjectKind == KIND_LAND_COVER_MAP ) + anIsLandCoverMap = true; else if( anObjectKind == KIND_STREAM ) { anIsStream = true; @@ -476,7 +480,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, } if ( !anIsObjectCanBeColored ) - anIsObjectCanBeColored = HYDROGUI_SetColorOp::CanObjectBeColored( anObject ); + anIsObjectCanBeColored = HYDROGUI_SetColorOp::CanObjectBeColored( anObject, this ); } // Check if all selected objects are profiles @@ -513,10 +517,15 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, case KIND_STRICKLER_TABLE: theMenu->addAction( action( ImportStricklerTableFromFileId ) ); break; + case KIND_LAND_COVER_MAP: + theMenu->addAction( action( CreateLandCoverMapId ) ); + theMenu->addAction( action( ImportLandCoverMapId ) ); + break; case KIND_CALCULATION: theMenu->addAction( action( CreateCalculationId ) ); break; case KIND_POLYLINEXY: + theMenu->addAction( action( ImportPolylineId ) ); theMenu->addAction( action( CreatePolylineId ) ); break; case KIND_POLYLINE: @@ -579,6 +588,8 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addAction( action( CutImagesId ) ); theMenu->addAction( action( SplitImageId ) ); theMenu->addSeparator(); + theMenu->addAction( action( RecognizeContoursId ) ); + theMenu->addSeparator(); } else if( anIsBathymetry ) { @@ -590,6 +601,9 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, { theMenu->addAction( action( EditPolylineId ) ); theMenu->addSeparator(); + theMenu->addAction( action( SplitPolylinesId ) ); + theMenu->addAction( action( MergePolylinesId ) ); + theMenu->addSeparator(); } else if( anIsPolyline3D ) { @@ -645,7 +659,30 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addAction( action( ExportStricklerTableFromFileId ) ); theMenu->addAction( action( DuplicateStricklerTableId ) ); theMenu->addSeparator(); + + Handle(HYDROData_StricklerTable) aTable = + Handle(HYDROData_StricklerTable)::DownCast( aSeq.First() ); + QString aCurrentTable = + HYDROGUI_DataObject::dataObjectEntry( getLandCoverColoringTable( anActiveViewId ) ); + bool isUsed = aCurrentTable == HYDROGUI_DataObject::dataObjectEntry( aTable ); + + if ( !isUsed && !getObjectShapes( anActiveViewId, KIND_LAND_COVER_MAP ).isEmpty() ) { + theMenu->addAction( action( LandCoverScalarMapModeOnId ) ); + theMenu->addSeparator(); + } } + else if( anIsLandCoverMap ) + { + theMenu->addAction( action( AddLandCoverId ) ); + theMenu->addAction( action( RemoveLandCoverId ) ); + theMenu->addSeparator(); + theMenu->addAction( action( SplitLandCoverId ) ); + theMenu->addAction( action( MergeLandCoverId ) ); + theMenu->addAction( action( ChangeLandCoverTypeId ) ); + theMenu->addSeparator(); + // + theMenu->addAction( action( ExportToShapeFileID ) ); + } else if( anIsVisualState && anIsObjectBrowser ) { theMenu->addAction( action( SaveVisualStateId ) ); @@ -653,10 +690,18 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addSeparator(); } + if ( anIsStream || anIsChannel || anIsDigue || anIsObstacle ) + { + theMenu->addAction( action( PolylineExtractionId ) ); + theMenu->addSeparator(); + } + // Add set color action for geometrical objects if ( anIsObjectCanBeColored ) { theMenu->addAction( action( SetColorId ) ); + if ( anIsLandCoverMap ) + theMenu->addAction( action( SetTransparencyId ) ); theMenu->addSeparator(); } } else if ( anAllAreProfiles ) { @@ -664,6 +709,10 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addSeparator(); } + bool anIsPoly = anIsPolyline || anIsPolyline3D; + if (anIsPoly && !anIsLandCoverMap) + theMenu->addAction( action( ExportToShapeFileID ) ); + // Add copy action QAction* aCopyAction = action( CopyId ); if( aCopyAction && aCopyAction->isEnabled() ) { @@ -681,7 +730,7 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, anIsImmersibleZone || anIsZone || anIsRegion || anIsBathymetry || anIsObstacle || anIsStream || anIsChannel || anIsDigue || anIsDummyObject3D || - anIsValidProfile || anIsGroup ) + anIsValidProfile || anIsGroup || anIsLandCoverMap ) { if( anIsHiddenInSelection ) theMenu->addAction( action( ShowId ) ); @@ -702,6 +751,11 @@ void HYDROGUI_Module::contextMenuPopup( const QString& theClient, theMenu->addSeparator(); theMenu->addAction( action( SetZLevelId ) ); theMenu->addSeparator(); + + if ( isLandCoversScalarMapModeOn( anActiveViewId ) ) { + theMenu->addAction( action( LandCoverScalarMapModeOffId ) ); + theMenu->addSeparator(); + } } if( anIsObjectBrowser || anIsGraphicsView || anIsOCCView || anIsVTKView ) @@ -765,13 +819,26 @@ void HYDROGUI_Module::createPreferences() int StricklerTableGroup = addPreference( tr( "PREF_GROUP_STRICKLER_TABLE" ), genTab ); int defaultStricklerCoef = addPreference( tr( "PREF_DEFAULT_STRICKLER_COEFFICIENT" ), StricklerTableGroup, - LightApp_Preferences::DblSpin, "HYDRO", "default_strickler_coefficient" ); + LightApp_Preferences::DblSpin, "preferences", "default_strickler_coefficient" ); setPreferenceProperty( defaultStricklerCoef, "precision", 2 ); setPreferenceProperty( defaultStricklerCoef, "min", 0.00 ); setPreferenceProperty( defaultStricklerCoef, "max", 1000000.00 ); setPreferenceProperty( defaultStricklerCoef, "step", 0.01 ); } +void HYDROGUI_Module::preferencesChanged( const QString& theSection, const QString& thePref ) +{ + if ( theSection == "preferences" && thePref == "default_strickler_coefficient" ) + { + SUIT_ResourceMgr* resMgr = application()->resourceMgr(); + Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( application()->activeStudy()->id() ); + if ( resMgr && !aDoc.IsNull() ) + aDoc->SetDefaultStricklerCoefficient( resMgr->doubleValue( theSection, thePref, 0 ) ); + } + else + LightApp_Module::preferencesChanged( theSection, thePref ); +} + QCursor HYDROGUI_Module::getPrefEditCursor() const { int aCursorType = SUIT_Session::session()->resourceMgr()->integerValue("preferences", "type_of_cursor", (int)CT_CrossCursor ); @@ -1020,6 +1087,12 @@ void HYDROGUI_Module::setObjectVisible( const int theViewId, if ( visState != Qtx::UnpresentableState ) treeModel->setVisibilityState( id, theState ? Qtx::ShownState : Qtx::HiddenState ); } + + if ( theObject->GetKind() == KIND_BATHYMETRY && theState ) { + setLandCoversScalarMapModeOff( theViewId ); + } else if ( theObject->GetKind() == KIND_LAND_COVER_MAP && theState ) { + getOCCDisplayer()->SetToUpdateColorScale(); + } } } @@ -1302,6 +1375,11 @@ void HYDROGUI_Module::updateVTKZRange( const int theViewId, double theRange[] ) } /////////////////// END OF VTKPrs PROCESSING +void HYDROGUI_Module::clearCache() +{ + myObjectStateMap.clear(); +} + CAM_DataModel* HYDROGUI_Module::createDataModel() { return new HYDROGUI_DataModel( this ); @@ -1423,8 +1501,11 @@ void HYDROGUI_Module::onViewManagerRemoved( SUIT_ViewManager* theViewManager ) if ( anOCCViewManager ) { OCCViewer_Viewer* anOCCViewer = anOCCViewManager->getOCCViewer(); - if ( anOCCViewer ) - removeViewShapes( (size_t)anOCCViewer ); + if ( anOCCViewer ) { + int aViewerId = (size_t)anOCCViewer; + removeViewShapes( aViewerId ); + setLandCoversScalarMapModeOff( aViewerId ); + } } if ( getVTKDisplayer()->IsApplicable( theViewManager ) ) @@ -1732,3 +1813,52 @@ void HYDROGUI_Module::onObjectClicked( SUIT_DataObject* theObject, int theColumn update( UF_OCCViewer | ( visState == Qtx::ShownState ? UF_FitAll : 0 ) ); } + +Handle(HYDROData_StricklerTable) HYDROGUI_Module::getLandCoverColoringTable( const int theViewId ) const +{ + Handle(HYDROData_StricklerTable) aTable; + + if ( myLandCoverColoringMap.contains( theViewId ) ) { + aTable = myLandCoverColoringMap.value( theViewId ); + } + + return aTable; +} + +void HYDROGUI_Module::setLandCoverColoringTable( const int theViewId, + const Handle(HYDROData_StricklerTable)& theTable ) +{ + if ( !theTable.IsNull() ) { + myLandCoverColoringMap.insert( theViewId, theTable ); + } +} + +void HYDROGUI_Module::setLandCoversScalarMapModeOff( const int theViewId ) +{ + myLandCoverColoringMap.remove( theViewId ); +} + +bool HYDROGUI_Module::isLandCoversScalarMapModeOn( const int theViewId ) const +{ + return myLandCoverColoringMap.contains( theViewId ); +} + +void HYDROGUI_Module::setObjectRemoved( const Handle(HYDROData_Entity)& theObject ) +{ + if ( theObject.IsNull() || !theObject->IsRemoved() ) { + return; + } + + if ( theObject->GetKind() == KIND_STRICKLER_TABLE ) { + Handle(HYDROData_StricklerTable) aTable = + Handle(HYDROData_StricklerTable)::DownCast( theObject ); + QList aViewIds; + QMutableMapIterator anIter( myLandCoverColoringMap ); + while ( anIter.hasNext() ) { + if ( HYDROGUI_DataObject::dataObjectEntry( anIter.next().value() ) == + HYDROGUI_DataObject::dataObjectEntry( aTable ) ) { + anIter.remove(); + } + } + } +}