X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Tool.cxx;h=af92511763d2b47ad114139193fead1db1e44637;hb=e3a588626a51ca8bde6decbf32d54409ae5b88ce;hp=5252cb2fb2b45d02ba8b53c3930604cbe5504c3e;hpb=95fae05fbf436c6efd6dcebe37dc8315e9f3147b;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Tool.cxx b/src/HYDROGUI/HYDROGUI_Tool.cxx index 5252cb2f..af925117 100644 --- a/src/HYDROGUI/HYDROGUI_Tool.cxx +++ b/src/HYDROGUI/HYDROGUI_Tool.cxx @@ -1,12 +1,8 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE -// -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS -// +// Copyright (C) 2014-2015 EDF-R&D // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -20,49 +16,22 @@ // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // -#include "HYDROGUI_Tool.h" - -#include "HYDROGUI_DataModel.h" -#include "HYDROGUI_DataObject.h" -#include "HYDROGUI_Module.h" -#include "HYDROGUI_Prs.h" - +#include #include #include -#include -#include - -#include - -#include - -#include - -#include -#include -#include - -#include -#include - -#include -#include - -#include - -#include -#include -#include -#include - -#include - -#include - +#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' @@ -150,15 +119,6 @@ Handle(TCollection_HExtendedString) HYDROGUI_Tool::ToHExtString( const QString& return new TCollection_HExtendedString( ToExtString( src ) ); } -int HYDROGUI_Tool::GetActiveStudyId() -{ - if( SUIT_Session* aSession = SUIT_Session::session() ) - if( SUIT_Application* anApp = aSession->activeApplication() ) - if( SUIT_Study* aStudy = anApp->activeStudy() ) - return aStudy->id(); - return 0; -} - QString HYDROGUI_Tool::GetTempDir( const bool theToCreate ) { QString aRes; @@ -186,7 +146,7 @@ QString HYDROGUI_Tool::GetTempDir( const bool theToCreate ) #ifdef WNT tmpdir = "C:\\"; #else - tmpdir = "/tmp"; + tmpdir = strdup( "/tmp" ); #endif } aRes = tmpdir; @@ -198,363 +158,6 @@ QString HYDROGUI_Tool::GetTempDir( const bool theToCreate ) return aRes; } -void HYDROGUI_Tool::SetActiveViewManager( HYDROGUI_Module* theModule, - SUIT_ViewManager* theViewManager ) -{ - if( theViewManager ) - if( SUIT_ViewWindow* aViewWindow = theViewManager->getActiveView() ) - if( STD_TabDesktop* aTabDesktop = dynamic_cast( theModule->getApp()->desktop() ) ) - if( QtxWorkstack* aWorkstack = aTabDesktop->workstack() ) - 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 ) -{ - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() ); - if( !aDocument.IsNull() ) - { - HYDROData_Iterator anIterator( aDocument ); - for( ; anIterator.More(); anIterator.Next() ) - { - Handle(HYDROData_Entity) anObject = anIterator.Current(); - if ( !IsObjectHasPresentation( anObject ) ) - continue; - - theSeq.Append( anObject ); - } - } -} - -HYDROGUI_Prs* HYDROGUI_Tool::GetPresentation( const Handle(HYDROData_Entity)& theObj, - const GraphicsView_ObjectList& theObjects ) -{ - if( !theObj.IsNull() ) - { - GraphicsView_ObjectListIterator anIter( theObjects ); - while( anIter.hasNext() ) - { - if( HYDROGUI_Prs* aPrs = dynamic_cast( anIter.next() ) ) - { - Handle(HYDROData_Entity) anObj = aPrs->getObject(); - if( IsEqual( anObj, theObj ) ) - return aPrs; - } - } - } - return NULL; -} - -GraphicsView_ObjectList HYDROGUI_Tool::GetPrsList( GraphicsView_ViewPort* theViewPort ) -{ - GraphicsView_ObjectList aList; - if( theViewPort ) - { - GraphicsView_ObjectListIterator anIter( theViewPort->getObjects() ); - while( anIter.hasNext() ) - if( HYDROGUI_Prs* aPrs = dynamic_cast( anIter.next() ) ) - aList.append( aPrs ); - } - return aList; -} - -HYDROData_SequenceOfObjects HYDROGUI_Tool::GetSelectedObjects( HYDROGUI_Module* theModule ) -{ - HYDROData_SequenceOfObjects aSeq; - - HYDROGUI_DataModel* aModel = theModule->getDataModel(); - - SUIT_SelectionMgr* aSelectionMgr = theModule->getApp()->selectionMgr(); - SUIT_DataOwnerPtrList anOwners; - aSelectionMgr->selected( anOwners ); - - QStringList aCollectedNameList; // to avoid duplication - foreach( SUIT_DataOwner* aSUITOwner, anOwners ) - { - if( LightApp_DataOwner* anOwner = dynamic_cast( aSUITOwner ) ) - { - Handle(HYDROData_Entity) anObject = aModel->objectByEntry( anOwner->entry() ); - if( !anObject.IsNull() ) - { - QString aName = anObject->GetName(); - if( !aCollectedNameList.contains( aName ) ) - { - aSeq.Append( anObject ); - aCollectedNameList.append( aName ); - } - } - } - } - return aSeq; -} - -Handle(HYDROData_Entity) HYDROGUI_Tool::GetSelectedObject( HYDROGUI_Module* theModule ) -{ - HYDROData_SequenceOfObjects aSeq = GetSelectedObjects( theModule ); - if( !aSeq.IsEmpty() ) - return aSeq.First(); - return NULL; -} - -HYDROData_SequenceOfObjects HYDROGUI_Tool::GetGeometryObjects( - HYDROGUI_Module* theModule ) -{ - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() ); - - HYDROData_SequenceOfObjects aResSeq; - - HYDROData_Iterator anIter( aDocument ); - for ( ; anIter.More(); anIter.Next() ) - { - Handle(HYDROData_Entity) anObj = anIter.Current(); - if ( !HYDROData_Tool::IsGeometryObject( anObj ) ) - continue; - - aResSeq.Append( anObj ); - } - - return aResSeq; -} - -ObjectKind HYDROGUI_Tool::GetSelectedPartition( HYDROGUI_Module* theModule ) -{ - HYDROGUI_DataModel* aModel = theModule->getDataModel(); - - SUIT_SelectionMgr* aSelectionMgr = theModule->getApp()->selectionMgr(); - SUIT_DataOwnerPtrList anOwners; - aSelectionMgr->selected( anOwners ); - - if( anOwners.size() != 1 ) - return KIND_UNKNOWN; - - if( LightApp_DataOwner* anOwner = dynamic_cast( anOwners.first().operator->() ) ) - { - QString anEntry = anOwner->entry(); - QString aPrefix = HYDROGUI_DataObject::entryPrefix(); - if( anEntry.left( aPrefix.length() ) == aPrefix ) - { - anEntry.remove( aPrefix ); - for( ObjectKind anObjectKind = KIND_UNKNOWN + 1; anObjectKind <= KIND_LAST; anObjectKind++ ) - if( HYDROGUI_DataModel::tr( HYDROGUI_DataModel::partitionName( anObjectKind ).toAscii() ) == anEntry ) - return anObjectKind; - } - } - return KIND_UNKNOWN; -} - -QStringList HYDROGUI_Tool::GetSelectedGeomObjects( HYDROGUI_Module* theModule, - QList theTypes ) -{ - QStringList anEntryList; - - // Get active SalomeApp_Study - SalomeApp_Study* aStudy = NULL; - if ( theModule && theModule->getApp() ) { - aStudy = dynamic_cast( theModule->getApp()->activeStudy() ); - } - if ( !aStudy ) { - return anEntryList; - } - - // Get selection - SUIT_SelectionMgr* aSelectionMgr = theModule->getApp()->selectionMgr(); - SUIT_DataOwnerPtrList anOwners; - aSelectionMgr->selected( anOwners ); - - // Check if the selected objects belong to GEOM and have a shape - foreach( SUIT_DataOwner* aSUITOwner, anOwners ) - { - if( LightApp_DataOwner* anOwner = dynamic_cast( aSUITOwner ) ) - { - QString anEntry = anOwner->entry(); - _PTR(SObject) aSObject( aStudy->studyDS()->FindObjectID(qPrintable(anEntry)) ); - if (aSObject) { - _PTR(SComponent) aSComponent = aSObject->GetFatherComponent(); - if ( aSComponent && aSComponent->ComponentDataType() == "GEOM" ) { - GEOM::GEOM_Object_var aGeomObj = - GEOMBase::GetObjectFromIOR( aSObject->GetIOR().c_str() ); - - if ( !aGeomObj->_is_nil() && aGeomObj->IsShape() && - theTypes.contains( aGeomObj->GetShapeType() ) ) { - anEntryList << anEntry; - } - } - } - } - } - - return anEntryList; -} - -Handle(HYDROData_Entity) HYDROGUI_Tool::FindObjectByName( HYDROGUI_Module* theModule, - const QString& theName, - const ObjectKind theObjectKind ) -{ - Handle(HYDROData_Entity) aResObj; - - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() ); - 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() ); - if ( !aDocument.IsNull() ) - aResSeq = aDocument->FindObjectsByNames( theNames, theObjectKind ); - - return aResSeq; -} - -QString HYDROGUI_Tool::GenerateObjectName( HYDROGUI_Module* theModule, - const QString& thePrefix, - const QStringList& theUsedNames, - const bool theIsTryToUsePurePrefix) -{ - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() ); - return HYDROData_Tool::GenerateObjectName( aDocument, thePrefix, theUsedNames, theIsTryToUsePurePrefix ); -} - -size_t HYDROGUI_Tool::GetActiveViewId( HYDROGUI_Module* theModule, - const QString& theViewId ) -{ - size_t aViewId = 0; - SUIT_ViewManager* aViewMgr = theModule->getApp()->activeViewManager(); - if( !aViewMgr || ( !theViewId.isEmpty() && aViewMgr->getType() != theViewId ) ) - return aViewId; - - if( SUIT_ViewModel* aViewer = aViewMgr->getViewModel() ) - aViewId = (size_t)aViewer; - return aViewId; -} - -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( theViewId, aViewMgrs ); - QListIterator anIter( aViewMgrs ); - while( anIter.hasNext() ) - { - if( SUIT_ViewManager* aViewMgr = anIter.next() ) - { - if( SUIT_ViewModel* aViewer = aViewMgr->getViewModel() ) - aList.append( (size_t)aViewer ); - } - } - 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::setOCCActionShown( OCCViewer_ViewFrame* theViewFrame, - const int theActionId, - const bool isShown ) -{ - if ( !theViewFrame ) - return; - - 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() ) - { - if( SUIT_ViewManager* aViewMgr = anIter.next() ) - { - OCCViewer_ViewFrame* aViewFrame = dynamic_cast - ( aViewMgr->getActiveView() ); - if ( aViewFrame ) - setOCCActionShown( aViewFrame, theActionId, isShown ); - } - } -} - void HYDROGUI_Tool::GetObjectReferences( const Handle(HYDROData_Entity)& theObj, HYDROData_SequenceOfObjects& theRefObjects, QStringList& theRefNames ) @@ -582,34 +185,32 @@ void HYDROGUI_Tool::GetObjectReferences( const Handle(HYDROData_Entity)& theObj, } } -HYDROData_SequenceOfObjects HYDROGUI_Tool::GetObjectBackReferences( - HYDROGUI_Module* theModule, - const Handle(HYDROData_Entity)& theObj ) +HYDROData_SequenceOfObjects HYDROGUI_Tool::GetObjectBackReferences( const Handle(HYDROData_Entity)& theObj ) { if( theObj.IsNull() ) return HYDROData_SequenceOfObjects(); QString anObjName = theObj->GetName(); + Handle(HYDROData_Document) aDoc = HYDROData_Document::Document( theObj->Label() ); QMap aMapOfBackRefs = - GetObjectsBackReferences( theModule, QStringList() << anObjName ); + GetObjectsBackReferences( aDoc, QStringList() << anObjName ); return aMapOfBackRefs[ anObjName ]; } QMap HYDROGUI_Tool::GetObjectsBackReferences( - HYDROGUI_Module* theModule, const QStringList& theObjectNames ) + const Handle(HYDROData_Document)& theDocument, const QStringList& theObjectNames ) { QMap aResMap; if( theObjectNames.isEmpty() ) return aResMap; - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() ); - if( aDocument.IsNull() ) + if( theDocument.IsNull() ) return aResMap; - HYDROData_Iterator anIterator( aDocument ); + HYDROData_Iterator anIterator( theDocument ); for( ; anIterator.More(); anIterator.Next() ) { Handle(HYDROData_Entity) anObject = anIterator.Current(); @@ -653,64 +254,88 @@ QDockWidget* HYDROGUI_Tool::WindowDock( QWidget* wid ) return dock; } -QColor HYDROGUI_Tool::GenerateFillingColor( HYDROGUI_Module* theModule, - const QStringList& theZoneNames ) +QStringList HYDROGUI_Tool::FindExistingObjectsNames( const Handle(HYDROData_Document)& theDoc, + const ObjectKind theObjectKind, + bool isCheckValidProfile ) { - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( theModule->getStudyId() ); - return GenerateFillingColor( aDocument, theZoneNames ); -} + QStringList aNames; -QColor HYDROGUI_Tool::GenerateFillingColor( const Handle(HYDROData_Document)& theDoc, - const QStringList& theZoneNames ) -{ - QColor aFillingColor( HYDROData_ImmersibleZone::DefaultFillingColor() ); + HYDROData_Iterator anIter( theDoc, theObjectKind ); + for ( ; anIter.More(); anIter.Next() ) { + Handle(HYDROData_Entity) anObject = anIter.Current(); - 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( theDoc->FindObjectByName( aZoneName, KIND_IMMERSIBLE_ZONE ) ); - if( !aRefZone.IsNull() ) + bool isOK = !anObject.IsNull(); + + if( isOK && isCheckValidProfile ) { - QColor aRefColor = aRefZone->GetFillingColor(); - aR += aRefColor.red(); - aG += aRefColor.green(); - aB += aRefColor.blue(); - aCounter++; + Handle(HYDROData_Profile) aProfile = Handle(HYDROData_Profile)::DownCast( anObject ); + if( !aProfile.IsNull() && !aProfile->IsValid() ) + isOK = false; } + + if( isOK ) + aNames.append( anObject->GetName() ); } - - if( aCounter > 0 ) + + return aNames; +} + +QString HYDROGUI_Tool::GetCoordinateString( const double theNumber, bool isInLocale ) +{ + if( isInLocale ) { - aFillingColor = QColor( aR / aCounter, aG / aCounter, aB / aCounter ); + static QLocale aLocale( QLocale::English, QLocale::France ); + return aLocale.toString( theNumber, 'f', 2 ); } - - return aFillingColor; + else + return QString::number( theNumber, 'f', 2 ); } -QStringList HYDROGUI_Tool::FindExistingObjectsNames( const Handle(HYDROData_Document)& theDoc, - const ObjectKind theObjectKind ) +Handle(Image_PixMap) HYDROGUI_Tool::Pixmap( const QImage& theImage ) { - QStringList aNames; + Handle(Image_PixMap) pix; + if ( theImage.isNull() || theImage.format() == QImage::Format_Invalid ) + return pix; - HYDROData_Iterator anIter( theDoc, theObjectKind ); - for ( ; anIter.More(); anIter.Next() ) { - Handle(HYDROData_Entity) anObject = anIter.Current(); - if( !anObject.IsNull() ) { - aNames.append( anObject->GetName() ); + Handle(Image_PixMap) tmpPix = new Image_PixMap(); + tmpPix->SetTopDown( false ); + QImage anImage = theImage.mirrored(); + if ( !anImage.hasAlphaChannel() && anImage.allGray() ) + { + tmpPix->InitTrash( Image_PixMap::ImgGray, anImage.width(), anImage.height(), anImage.width() ); + for ( int r = 0; r < anImage.height(); r++ ) + { + Standard_Byte* aRowData = tmpPix->ChangeRow( anImage.height() - r - 1 ); + for ( int p = 0; p < anImage.width(); p++ ) + aRowData[p] = qRed( anImage.pixel( p, r ) ); + } } - } + else + { + Image_PixMap::ImgFormat aFormat; + if ( anImage.hasAlphaChannel() ) + { + if ( anImage.format() != QImage::Format_ARGB32 ) + anImage = anImage.convertToFormat( QImage::Format_ARGB32 ); + aFormat = Image_PixMap::ImgRGBA; + } + else + { + if ( anImage.format() != QImage::Format_RGB888 ) + anImage = anImage.convertToFormat( QImage::Format_RGB888 ); + aFormat = Image_PixMap::ImgRGB; + } - return aNames; -} + tmpPix->InitWrapper( aFormat, (Standard_Byte*)anImage.bits(), anImage.width(), anImage.height(), anImage.bytesPerLine() ); + } -QString HYDROGUI_Tool::GetCoordinateString( const double theNumber ) -{ - //return QString::number( theNumber, 'f', 2 ); - static QLocale aLocale( QLocale::English, QLocale::France ); - return aLocale.toString( theNumber, 'f', 2 ); + if ( !tmpPix.IsNull() ) + { + pix = new Image_PixMap(); + pix->InitCopy( *tmpPix.operator->() ); + pix->SetTopDown( tmpPix->IsTopDown() ); + } + + return pix; }