X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Tool.cxx;h=6fa0a831763a9d609337a80d3af710112010d522;hb=5cae7e874afd2fc1b6f61023e8ebd33a933db3c7;hp=3e11ed93c7fb9c6e41857d074af667362137a3ca;hpb=38afdfd781e77ef1d5135bed210c8ebd4b60f34f;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Tool.cxx b/src/HYDROGUI/HYDROGUI_Tool.cxx index 3e11ed93..6fa0a831 100644 --- a/src/HYDROGUI/HYDROGUI_Tool.cxx +++ b/src/HYDROGUI/HYDROGUI_Tool.cxx @@ -29,6 +29,8 @@ #include #include +#include +#include #include @@ -36,16 +38,21 @@ #include #include +#include + #include #include +#include #include #include #include -#include +#include +#include #include +#include // Definition of this id allows to use 'latin1' (Qt alias for 'ISO-8859-1') // encoding instead of default 'System' @@ -131,35 +138,52 @@ Handle(TCollection_HExtendedString) HYDROGUI_Tool::ToHExtString( const QString& return new TCollection_HExtendedString( ToExtString( src ) ); } -void HYDROGUI_Tool::LambertToDouble( const int theDegrees, - const int theMinutes, - const double theSeconds, - double& theCoord ) +int HYDROGUI_Tool::GetActiveStudyId() { - // ouv: check the case of negative degrees - theCoord = theDegrees * 3600 + theMinutes * 60 + theSeconds; + if( SUIT_Session* aSession = SUIT_Session::session() ) + if( SUIT_Application* anApp = aSession->activeApplication() ) + if( SUIT_Study* aStudy = anApp->activeStudy() ) + return aStudy->id(); + return 0; } -void HYDROGUI_Tool::DoubleToLambert( const double theCoord, - int& theDegrees, - int& theMinutes, - double& theSeconds ) +QString HYDROGUI_Tool::GetTempDir( const bool theToCreate ) { - // ouv: check the case of negative degrees - theDegrees = int( theCoord / 3600 ); - - double aRemainder = theCoord - theDegrees * 3600; - theMinutes = int( aRemainder / 60 ); + QString aRes; - theSeconds = aRemainder - theMinutes * 60; -} + char* tmpdir = getenv ( "HYDRO_TMP_DIR" ); + if ( tmpdir ) + { + // try to create folder if it does not exist + QFileInfo fi( tmpdir ); + if ( !fi.exists() && theToCreate ) + { + if ( QDir().mkdir( tmpdir ) ) + QFile::setPermissions( tmpdir, (QFile::Permissions)0x4FFFF ); + QFileInfo fi( tmpdir ); + if ( !fi.exists() || !fi.isWritable() ) + tmpdir = 0; + } + } + if ( !tmpdir ) + tmpdir = getenv ( "TEMP" ); + if ( !tmpdir ) + tmpdir = getenv ( "TMP" ); + if ( !tmpdir ) + { +#ifdef WNT + tmpdir = "C:\\"; +#else + tmpdir = "/tmp"; +#endif + } + aRes = tmpdir; + + QFileInfo fi( aRes ); + if ( !fi.exists() || !fi.isWritable() ) + aRes = QString::null; -bool HYDROGUI_Tool::IsEqual( const Handle(HYDROData_Object)& theObj1, - const Handle(HYDROData_Object)& theObj2 ) -{ - if( !theObj1.IsNull() && !theObj2.IsNull() ) - return theObj1->Label() == theObj2->Label(); //ouv: check that the names can be used here - return false; + return aRes; } void HYDROGUI_Tool::SetActiveViewManager( HYDROGUI_Module* theModule, @@ -182,7 +206,7 @@ void HYDROGUI_Tool::GetPrsSubObjects( HYDROGUI_Module* theModule, HYDROData_Iterator anIterator( aDocument, KIND_IMAGE ); for( ; anIterator.More(); anIterator.Next() ) { - Handle(HYDROData_Object) anObject = anIterator.Current(); + Handle(HYDROData_Entity) anObject = anIterator.Current(); if( !anObject.IsNull() ) theSeq.Append( anObject ); } @@ -190,21 +214,21 @@ void HYDROGUI_Tool::GetPrsSubObjects( HYDROGUI_Module* theModule, anIterator = HYDROData_Iterator( aDocument, KIND_POLYLINE ); for( ; anIterator.More(); anIterator.Next() ) { - Handle(HYDROData_Object) anObject = anIterator.Current(); + Handle(HYDROData_Entity) anObject = anIterator.Current(); if( !anObject.IsNull() ) theSeq.Append( anObject ); } - anIterator = HYDROData_Iterator( aDocument, KIND_ZONE ); + anIterator = HYDROData_Iterator( aDocument, KIND_IMMERSIBLE_ZONE ); for( ; anIterator.More(); anIterator.Next() ) { - Handle(HYDROData_Object) anObject = anIterator.Current(); + Handle(HYDROData_Entity) anObject = anIterator.Current(); if( !anObject.IsNull() ) theSeq.Append( anObject ); } } -HYDROGUI_Prs* HYDROGUI_Tool::GetPresentation( const Handle(HYDROData_Object)& theObj, +HYDROGUI_Prs* HYDROGUI_Tool::GetPresentation( const Handle(HYDROData_Entity)& theObj, const GraphicsView_ObjectList& theObjects ) { if( !theObj.IsNull() ) @@ -214,7 +238,7 @@ HYDROGUI_Prs* HYDROGUI_Tool::GetPresentation( const Handle(HYDROData_Object)& th { if( HYDROGUI_Prs* aPrs = dynamic_cast( anIter.next() ) ) { - Handle(HYDROData_Object) anObj = aPrs->getObject(); + Handle(HYDROData_Entity) anObj = aPrs->getObject(); if( IsEqual( anObj, theObj ) ) return aPrs; } @@ -251,7 +275,7 @@ HYDROData_SequenceOfObjects HYDROGUI_Tool::GetSelectedObjects( HYDROGUI_Module* { if( LightApp_DataOwner* anOwner = dynamic_cast( aSUITOwner ) ) { - Handle(HYDROData_Object) anObject = aModel->objectByEntry( anOwner->entry() ); + Handle(HYDROData_Entity) anObject = aModel->objectByEntry( anOwner->entry() ); if( !anObject.IsNull() ) { QString aName = anObject->GetName(); @@ -266,7 +290,7 @@ HYDROData_SequenceOfObjects HYDROGUI_Tool::GetSelectedObjects( HYDROGUI_Module* return aSeq; } -Handle(HYDROData_Object) HYDROGUI_Tool::GetSelectedObject( HYDROGUI_Module* theModule ) +Handle(HYDROData_Entity) HYDROGUI_Tool::GetSelectedObject( HYDROGUI_Module* theModule ) { HYDROData_SequenceOfObjects aSeq = GetSelectedObjects( theModule ); if( !aSeq.IsEmpty() ) @@ -300,51 +324,36 @@ ObjectKind HYDROGUI_Tool::GetSelectedPartition( HYDROGUI_Module* theModule ) return KIND_UNKNOWN; } -Handle(HYDROData_Object) HYDROGUI_Tool::FindObjectByName( HYDROGUI_Module* theModule, - const QString& theName, +Handle(HYDROData_Entity) HYDROGUI_Tool::FindObjectByName( HYDROGUI_Module* theModule, + const QString& theName, const ObjectKind theObjectKind ) { - Handle(HYDROData_Object) anObject; - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() ); - if( aDocument.IsNull() ) - return anObject; - - HYDROData_Iterator anIter( aDocument, theObjectKind ); - for( ; anIter.More(); anIter.Next() ) - { - Handle(HYDROData_Object) anObjectRef = anIter.Current(); - if( !anObjectRef.IsNull() && anObjectRef->GetName() == theName ) - { - anObject = anObjectRef; - break; - } - } - return anObject; + return HYDROData_Tool::FindObjectByName( aDocument, theName, theObjectKind ); } -QString HYDROGUI_Tool::GenerateObjectName( HYDROGUI_Module* theModule, - const QString& thePrefix ) +HYDROData_SequenceOfObjects HYDROGUI_Tool::FindObjectsByNames( HYDROGUI_Module* theModule, + const QStringList& theNames, + const ObjectKind theObjectKind ) { - QString aName; - int anId = 1; - while( anId < 100 ) - { - aName = QString( "%1_%2" ).arg( thePrefix ).arg( QString::number( anId++ ) ); + Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() ); + return HYDROData_Tool::FindObjectsByNames( aDocument, theNames, theObjectKind ); +} - // check that there are no other objects with the same name in the document - Handle(HYDROData_Object) anObject = FindObjectByName( theModule, aName, KIND_UNKNOWN ); - if( anObject.IsNull() ) - break; - } - return aName; +QString HYDROGUI_Tool::GenerateObjectName( HYDROGUI_Module* theModule, + const QString& thePrefix, + const QStringList& theUsedNames ) +{ + Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() ); + return HYDROData_Tool::GenerateObjectName( aDocument, thePrefix, theUsedNames ); } -size_t HYDROGUI_Tool::GetActiveGraphicsViewId( HYDROGUI_Module* theModule ) +size_t HYDROGUI_Tool::GetActiveViewId( HYDROGUI_Module* theModule, + const QString& theViewId ) { size_t aViewId = 0; SUIT_ViewManager* aViewMgr = theModule->getApp()->activeViewManager(); - if( !aViewMgr || aViewMgr->getType() != GraphicsView_Viewer::Type() ) + if( !aViewMgr || ( !theViewId.isEmpty() && aViewMgr->getType() != theViewId ) ) return aViewId; if( SUIT_ViewModel* aViewer = aViewMgr->getViewModel() ) @@ -352,11 +361,22 @@ size_t HYDROGUI_Tool::GetActiveGraphicsViewId( HYDROGUI_Module* theModule ) return aViewId; } -QList HYDROGUI_Tool::GetGraphicsViewIdList( HYDROGUI_Module* theModule ) +size_t HYDROGUI_Tool::GetActiveGraphicsViewId( HYDROGUI_Module* theModule ) +{ + return GetActiveViewId( theModule, GraphicsView_Viewer::Type() ); +} + +size_t HYDROGUI_Tool::GetActiveOCCViewId( HYDROGUI_Module* theModule ) +{ + return GetActiveViewId( theModule, OCCViewer_Viewer::Type() ); +} + +QList getViewIdList( HYDROGUI_Module* theModule, + const QString& theViewId ) { QList aList; ViewManagerList aViewMgrs; - theModule->getApp()->viewManagers( GraphicsView_Viewer::Type(), aViewMgrs ); + theModule->getApp()->viewManagers( theViewId, aViewMgrs ); QListIterator anIter( aViewMgrs ); while( anIter.hasNext() ) { @@ -369,6 +389,16 @@ QList HYDROGUI_Tool::GetGraphicsViewIdList( HYDROGUI_Module* theModule ) return aList; } +QList HYDROGUI_Tool::GetGraphicsViewIdList( HYDROGUI_Module* theModule ) +{ + return getViewIdList( theModule, GraphicsView_Viewer::Type() ); +} + +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 ) @@ -378,7 +408,7 @@ void HYDROGUI_Tool::GetObjectReferences( const Handle(HYDROData_Image)& theImage for( int anIndex = 0, aNbRef = theImage->NbReferences(); anIndex < aNbRef; anIndex++ ) { - Handle(HYDROData_Object) aRefObj = theImage->Reference( anIndex ); + Handle(HYDROData_Entity) aRefObj = theImage->Reference( anIndex ); if( !aRefObj.IsNull() && !aRefObj->IsRemoved() ) { QString aName = aRefObj->GetName(); @@ -398,7 +428,7 @@ void HYDROGUI_Tool::GetObjectReferences( const Handle(HYDROData_Image)& theImage } void HYDROGUI_Tool::GetObjectBackReferences( HYDROGUI_Module* theModule, - const Handle(HYDROData_Object)& theObj, + const Handle(HYDROData_Entity)& theObj, HYDROData_SequenceOfObjects& theBackRefObjects, QStringList& theBackRefNames ) { @@ -444,3 +474,43 @@ QDockWidget* HYDROGUI_Tool::WindowDock( QWidget* wid ) } return dock; } + +QColor HYDROGUI_Tool::GenerateFillingColor( HYDROGUI_Module* theModule, + const QStringList& theZoneNames ) +{ + Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() ); + return GenerateFillingColor( aDocument, theZoneNames ); +} + +QColor HYDROGUI_Tool::GenerateFillingColor( const Handle(HYDROData_Document)& theDoc, + const QStringList& theZoneNames ) +{ + QColor aFillingColor( HYDROData_ImmersibleZone::DefaultFillingColor() ); + + int aCounter = 0; + int aR = 0, aG = 0, aB = 0; + QStringListIterator aZoneNameIter( theZoneNames ); + while( aZoneNameIter.hasNext() ) + { + const QString& aZoneName = aZoneNameIter.next(); + Handle(HYDROData_ImmersibleZone) aRefZone = + Handle(HYDROData_ImmersibleZone)::DownCast( + HYDROData_Tool::FindObjectByName( theDoc, aZoneName, KIND_IMMERSIBLE_ZONE ) ); + if( !aRefZone.IsNull() ) + { + QColor aRefColor = aRefZone->GetFillingColor(); + aR += aRefColor.red(); + aG += aRefColor.green(); + aB += aRefColor.blue(); + aCounter++; + } + } + + if( aCounter > 0 ) + { + aFillingColor = QColor( aR / aCounter, aG / aCounter, aB / aCounter ); + } + + return aFillingColor; +} +