X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Tool.cxx;h=51404eaed7eb174fdea98388e12def5033e3eca9;hb=81c9f5cdf82909d0aebd2c491c50fa7516cc80b7;hp=19d4e9c93b53c47aa71d1d76f5b54ae486fc1902;hpb=7e825ec456c9331ef0df1cb59865cc55f0d8516a;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Tool.cxx b/src/HYDROGUI/HYDROGUI_Tool.cxx index 19d4e9c9..51404eae 100644 --- a/src/HYDROGUI/HYDROGUI_Tool.cxx +++ b/src/HYDROGUI/HYDROGUI_Tool.cxx @@ -43,8 +43,10 @@ #include #include +#include #include +#include #include @@ -55,6 +57,8 @@ #include +#include + #include #include #include @@ -64,6 +68,8 @@ // encoding instead of default 'System' #define USE_LATIN1_ENCODING +// #define DEB_GROUPS 1 + QString HYDROGUI_Tool::ToQString( const TCollection_AsciiString& src ) { #ifdef USE_LATIN1_ENCODING @@ -202,6 +208,54 @@ void HYDROGUI_Tool::SetActiveViewManager( HYDROGUI_Module* theModule, aWorkstack->setActiveWindow( aViewWindow ); } +bool HYDROGUI_Tool::IsObjectHasPresentation( const Handle(HYDROData_Entity)& theObject, + const QString& theViewerType ) +{ + + if ( theObject.IsNull() ) + return false; + + ObjectKind anObjectKind = theObject->GetKind(); + if ( theViewerType.isEmpty() || theViewerType == OCCViewer_Viewer::Type() ) + { + if ( anObjectKind == KIND_IMAGE || + anObjectKind == KIND_POLYLINEXY || + anObjectKind == KIND_POLYLINE || + anObjectKind == KIND_IMMERSIBLE_ZONE || + anObjectKind == KIND_REGION || + anObjectKind == KIND_ZONE || + anObjectKind == KIND_OBSTACLE || + anObjectKind == KIND_PROFILE || + anObjectKind == KIND_STREAM || + anObjectKind == KIND_CHANNEL || + anObjectKind == KIND_DIGUE || + anObjectKind == KIND_DUMMY_3D +#ifdef DEB_GROUPS + || anObjectKind == KIND_SHAPES_GROUP || + anObjectKind == KIND_SPLITTED_GROUP +#endif + ) + { + return true; + } + } + + if ( theViewerType.isEmpty() || theViewerType == SVTK_Viewer::Type() ) + { + if ( anObjectKind == KIND_BATHYMETRY ) + return true; + } + + if ( theViewerType.isEmpty() || theViewerType == GraphicsView_Viewer::Type() ) + { + if ( anObjectKind == KIND_IMAGE || + anObjectKind == KIND_POLYLINEXY ) + return true; + } + + return false; +} + void HYDROGUI_Tool::GetPrsSubObjects( HYDROGUI_Module* theModule, HYDROData_SequenceOfObjects& theSeq ) { @@ -212,16 +266,10 @@ void HYDROGUI_Tool::GetPrsSubObjects( HYDROGUI_Module* theModule, for( ; anIterator.More(); anIterator.Next() ) { Handle(HYDROData_Entity) anObject = anIterator.Current(); - if( !anObject.IsNull() && ( - ( anObject->GetKind() == KIND_IMAGE ) || - ( anObject->GetKind() == KIND_POLYLINE ) || - ( anObject->GetKind() == KIND_IMMERSIBLE_ZONE ) || - ( anObject->GetKind() == KIND_REGION ) || - ( anObject->GetKind() == KIND_ZONE ) || - ( anObject->GetKind() == KIND_OBSTACLE ) ) ) - { - theSeq.Append( anObject ); - } + if ( !IsObjectHasPresentation( anObject ) ) + continue; + + theSeq.Append( anObject ); } } } @@ -342,7 +390,8 @@ ObjectKind HYDROGUI_Tool::GetSelectedPartition( HYDROGUI_Module* theModule ) return KIND_UNKNOWN; } -QStringList HYDROGUI_Tool::GetSelectedGeomObjects( HYDROGUI_Module* theModule ) +QStringList HYDROGUI_Tool::GetSelectedGeomObjects( HYDROGUI_Module* theModule, + QList theTypes ) { QStringList anEntryList; @@ -356,8 +405,6 @@ QStringList HYDROGUI_Tool::GetSelectedGeomObjects( HYDROGUI_Module* theModule ) } // Get selection - HYDROGUI_DataModel* aModel = theModule->getDataModel(); - SUIT_SelectionMgr* aSelectionMgr = theModule->getApp()->selectionMgr(); SUIT_DataOwnerPtrList anOwners; aSelectionMgr->selected( anOwners ); @@ -375,7 +422,8 @@ QStringList HYDROGUI_Tool::GetSelectedGeomObjects( HYDROGUI_Module* theModule ) GEOM::GEOM_Object_var aGeomObj = GEOMBase::GetObjectFromIOR( aSObject->GetIOR().c_str() ); - if ( !aGeomObj->_is_nil() && aGeomObj->IsShape() ) { + if ( !aGeomObj->_is_nil() && aGeomObj->IsShape() && + theTypes.contains( aGeomObj->GetShapeType() ) ) { anEntryList << anEntry; } } @@ -390,24 +438,35 @@ Handle(HYDROData_Entity) HYDROGUI_Tool::FindObjectByName( HYDROGUI_Module* theMo const QString& theName, const ObjectKind theObjectKind ) { + Handle(HYDROData_Entity) aResObj; + Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() ); - return HYDROData_Tool::FindObjectByName( aDocument, theName, theObjectKind ); + if ( !aDocument.IsNull() ) + aResObj = aDocument->FindObjectByName( theName, theObjectKind ); + + return aResObj; } HYDROData_SequenceOfObjects HYDROGUI_Tool::FindObjectsByNames( HYDROGUI_Module* theModule, const QStringList& theNames, const ObjectKind theObjectKind ) { + HYDROData_SequenceOfObjects aResSeq; + Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() ); - return HYDROData_Tool::FindObjectsByNames( aDocument, theNames, theObjectKind ); + if ( !aDocument.IsNull() ) + aResSeq = aDocument->FindObjectsByNames( theNames, theObjectKind ); + + return aResSeq; } QString HYDROGUI_Tool::GenerateObjectName( HYDROGUI_Module* theModule, const QString& thePrefix, - const QStringList& theUsedNames ) + const QStringList& theUsedNames, + const bool theIsTryToUsePurePrefix) { Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() ); - return HYDROData_Tool::GenerateObjectName( aDocument, thePrefix, theUsedNames ); + return HYDROData_Tool::GenerateObjectName( aDocument, thePrefix, theUsedNames, theIsTryToUsePurePrefix ); } size_t HYDROGUI_Tool::GetActiveViewId( HYDROGUI_Module* theModule, @@ -461,66 +520,123 @@ QList HYDROGUI_Tool::GetOCCViewIdList( HYDROGUI_Module* theModule ) return getViewIdList( theModule, OCCViewer_Viewer::Type() ); } -void HYDROGUI_Tool::GetObjectReferences( const Handle(HYDROData_Image)& theImage, - HYDROData_SequenceOfObjects& theRefObjects, - QStringList& theRefNames ) +void HYDROGUI_Tool::setOCCActionShown( OCCViewer_ViewFrame* theViewFrame, + const int theActionId, + const bool isShown ) { - if( theImage.IsNull() ) + if ( !theViewFrame ) return; - for( int anIndex = 0, aNbRef = theImage->NbReferences(); anIndex < aNbRef; anIndex++ ) + OCCViewer_ViewWindow* aView = theViewFrame->getView( OCCViewer_ViewFrame::MAIN_VIEW ); + if ( aView ) { + aView->toolMgr()->setShown( theActionId, isShown ); + if ( theActionId == OCCViewer_ViewWindow::MaximizedId ) + theViewFrame->onMaximizedView( aView, true ); + } +} + +void HYDROGUI_Tool::setOCCActionShown( HYDROGUI_Module* theModule, + const int theActionId, + const bool isShown ) +{ + QList aList; + ViewManagerList aViewMgrs; + theModule->getApp()->viewManagers( OCCViewer_Viewer::Type(), aViewMgrs ); + QListIterator anIter( aViewMgrs ); + while( anIter.hasNext() ) { - Handle(HYDROData_Entity) aRefObj = theImage->Reference( anIndex ); - if( !aRefObj.IsNull() && !aRefObj->IsRemoved() ) + if( SUIT_ViewManager* aViewMgr = anIter.next() ) { - QString aName = aRefObj->GetName(); - if( !theRefNames.contains( aName ) ) - { - theRefObjects.Append( aRefObj ); - theRefNames.append( aRefObj->GetName() ); - if( aRefObj->GetKind() == KIND_IMAGE ) - { - Handle(HYDROData_Image) aRefImage = Handle(HYDROData_Image)::DownCast( aRefObj ); - if( !aRefImage.IsNull() ) - GetObjectReferences( aRefImage, theRefObjects, theRefNames ); - } - } + OCCViewer_ViewFrame* aViewFrame = dynamic_cast + ( aViewMgr->getActiveView() ); + if ( aViewFrame ) + setOCCActionShown( aViewFrame, theActionId, isShown ); } } } -void HYDROGUI_Tool::GetObjectBackReferences( HYDROGUI_Module* theModule, - const Handle(HYDROData_Entity)& theObj, - HYDROData_SequenceOfObjects& theBackRefObjects, - QStringList& theBackRefNames ) +void HYDROGUI_Tool::GetObjectReferences( const Handle(HYDROData_Entity)& theObj, + HYDROData_SequenceOfObjects& theRefObjects, + QStringList& theRefNames ) { if( theObj.IsNull() ) return; + HYDROData_SequenceOfObjects anAllRefObjects = theObj->GetAllReferenceObjects(); + theRefObjects.Append( anAllRefObjects ); + + for( int i = 1, n = anAllRefObjects.Length(); i <= n; ++i ) + { + Handle(HYDROData_Entity) aRefObj = theRefObjects.Value( i ); + if( aRefObj.IsNull() || aRefObj->IsRemoved() ) + continue; + + QString aRefObjectName = aRefObj->GetName(); + if( theRefNames.contains( aRefObjectName ) ) + continue; + + theRefObjects.Append( aRefObj ); + theRefNames.append( aRefObjectName ); + + GetObjectReferences( aRefObj, theRefObjects, theRefNames ); + } +} + +HYDROData_SequenceOfObjects HYDROGUI_Tool::GetObjectBackReferences( + HYDROGUI_Module* theModule, + const Handle(HYDROData_Entity)& theObj ) +{ + if( theObj.IsNull() ) + return HYDROData_SequenceOfObjects(); + + QString anObjName = theObj->GetName(); + + QMap aMapOfBackRefs = + GetObjectsBackReferences( theModule, QStringList() << anObjName ); + + return aMapOfBackRefs[ anObjName ]; +} + +QMap HYDROGUI_Tool::GetObjectsBackReferences( + HYDROGUI_Module* theModule, const QStringList& theObjectNames ) +{ + QMap aResMap; + + if( theObjectNames.isEmpty() ) + return aResMap; + Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() ); if( aDocument.IsNull() ) - return; + return aResMap; - QString aName = theObj->GetName(); - - HYDROData_Iterator anIterator( aDocument, KIND_IMAGE ); + HYDROData_Iterator anIterator( aDocument ); for( ; anIterator.More(); anIterator.Next() ) { - Handle(HYDROData_Image) anImage = Handle(HYDROData_Image)::DownCast( anIterator.Current() ); - if( !anImage.IsNull() ) + Handle(HYDROData_Entity) anObject = anIterator.Current(); + if( anObject.IsNull() || anObject->IsRemoved() ) + continue; + + QString anObjectName = anObject->GetName(); + if ( theObjectNames.contains( anObjectName ) ) + continue; + + HYDROData_SequenceOfObjects aRefObjects = anObject->GetAllReferenceObjects(); + for ( int i = 1, n = aRefObjects.Length(); i <= n; ++i ) { - HYDROData_SequenceOfObjects aRefObjects; - QStringList aRefNames; - GetObjectReferences( anImage, aRefObjects, aRefNames ); - if( aRefNames.contains( aName ) ) - { - theBackRefObjects.Append( anImage ); - theBackRefNames.append( anImage->GetName() ); - } + Handle(HYDROData_Entity) aRefObject = aRefObjects.Value( i ); + if( aRefObject.IsNull() || aRefObject->IsRemoved() ) + continue; + + QString aRefObjectName = aRefObject->GetName(); + if ( !theObjectNames.contains( aRefObjectName ) ) + continue; + + aResMap[ aRefObjectName ].Append( anObject ); } } -} + return aResMap; +} QDockWidget* HYDROGUI_Tool::WindowDock( QWidget* wid ) { @@ -556,8 +672,7 @@ QColor HYDROGUI_Tool::GenerateFillingColor( const Handle(HYDROData_Document)& th { const QString& aZoneName = aZoneNameIter.next(); Handle(HYDROData_ImmersibleZone) aRefZone = - Handle(HYDROData_ImmersibleZone)::DownCast( - HYDROData_Tool::FindObjectByName( theDoc, aZoneName, KIND_IMMERSIBLE_ZONE ) ); + Handle(HYDROData_ImmersibleZone)::DownCast( theDoc->FindObjectByName( aZoneName, KIND_IMMERSIBLE_ZONE ) ); if( !aRefZone.IsNull() ) { QColor aRefColor = aRefZone->GetFillingColor(); @@ -591,3 +706,15 @@ QStringList HYDROGUI_Tool::FindExistingObjectsNames( const Handle(HYDROData_Docu return aNames; } + +QString HYDROGUI_Tool::GetCoordinateString( const double theNumber, bool isInLocale ) +{ + if( isInLocale ) + { + static QLocale aLocale( QLocale::English, QLocale::France ); + return aLocale.toString( theNumber, 'f', 2 ); + } + else + return QString::number( theNumber, 'f', 2 ); +} +