X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_Operations.cxx;h=233cddba4fe986dcef15016fe8defc5bd674d7cd;hb=902f7fd2408dda7bec3b9cc407cf476319871b6b;hp=7bf1c89534d635a8440212c3db491ef8a603e935;hpb=c108642ea970168f40ed48e40d12893bd1fe9601;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_Operations.cxx b/src/HYDROGUI/HYDROGUI_Operations.cxx index 7bf1c895..233cddba 100644 --- a/src/HYDROGUI/HYDROGUI_Operations.cxx +++ b/src/HYDROGUI/HYDROGUI_Operations.cxx @@ -23,22 +23,43 @@ #include "HYDROGUI_Operations.h" #include "HYDROGUI_CopyPasteOp.h" +#include "HYDROGUI_CalculationOp.h" #include "HYDROGUI_DataModel.h" #include "HYDROGUI_DeleteOp.h" #include "HYDROGUI_ExportImageOp.h" #include "HYDROGUI_ImportImageOp.h" #include "HYDROGUI_ImportBathymetryOp.h" -#include "HYDROGUI_CalculationOp.h" +#include "HYDROGUI_ImmersibleZoneOp.h" #include "HYDROGUI_Module.h" #include "HYDROGUI_ObserveImageOp.h" #include "HYDROGUI_PolylineOp.h" +#include "HYDROGUI_Poly3DOp.h" +#include "HYDROGUI_ProfileOp.h" +#include "HYDROGUI_RemoveImageRefsOp.h" #include "HYDROGUI_ShowHideOp.h" -#include "HYDROGUI_SplitZonesTool.h" +#include "HYDROData_SplitToZonesTool.h" #include "HYDROGUI_TwoImagesOp.h" #include "HYDROGUI_UpdateFlags.h" #include "HYDROGUI_UpdateImageOp.h" #include "HYDROGUI_VisualStateOp.h" -#include "HYDROGUI_ZoneOp.h" +#include "HYDROGUI_ImmersibleZoneOp.h" +#include "HYDROGUI_ImportGeomObjectOp.h" +#include "HYDROGUI_ImportObstacleFromFileOp.h" +#include "HYDROGUI_ExportCalculationOp.h" +#include "HYDROGUI_ImportProfilesOp.h" +#include "HYDROGUI_GeoreferencementOp.h" +#include "HYDROGUI_SetColorOp.h" + +#include "HYDROData_Document.h" +#include "HYDROData_Obstacle.h" + +#include +#include +#include + +#include + +#include #include @@ -64,8 +85,8 @@ QAction* HYDROGUI_Module::createAction( const int theId, const QString& theSuffi std::string aDesktop = ( "DSK_" + theSuffix ).toStdString(); std::string aToolbar = ( "STB_" + theSuffix ).toStdString(); std::string aSlotStr = aSlot.toStdString(); - return LightApp_Module::createAction( theId, tr( aMenu.c_str() ), aPixmap, - tr( aDesktop.c_str() ), tr( aToolbar.c_str() ), + return LightApp_Module::createAction( theId, tr( aDesktop.c_str() ), aPixmap, + tr( aMenu.c_str() ), tr( aToolbar.c_str() ), theKey, application()->desktop(), isToggle, this, aSlotStr.c_str() ); } @@ -82,17 +103,33 @@ void HYDROGUI_Module::createActions() createAction( ObserveImageId, "OBSERVE_IMAGE" ); createAction( ExportImageId, "EXPORT_IMAGE" ); createAction( UpdateImageId, "UPDATE_IMAGE" ); + createAction( RemoveImageRefsId, "REMOVE_IMAGE_REFERENCE" ); createAction( CreatePolylineId, "CREATE_POLYLINE" ); createAction( EditPolylineId, "EDIT_POLYLINE" ); + createAction( CreatePolyline3DId, "CREATE_POLYLINE_3D" ); + createAction( EditPolyline3DId, "EDIT_POLYLINE_3D" ); + + createAction( CreateProfileId, "CREATE_PROFILE" ); + createAction( ImportProfilesId, "IMPORT_PROFILES" ); + createAction( EditProfileId, "EDIT_PROFILE" ); + createAction( AllGeoreferencementId, "GEOREFERENCEMENT" ); + createAction( SelectedGeoreferencementId, "GEOREFERENCEMENT" ); + createAction( ImportBathymetryId, "IMPORT_BATHYMETRY", "", Qt::CTRL + Qt::Key_B ); - createAction( CreateZoneId, "CREATE_ZONE" ); - createAction( EditZoneId, "EDIT_ZONE" ); + createAction( CreateImmersibleZoneId, "CREATE_IMMERSIBLE_ZONE" ); + createAction( EditImmersibleZoneId, "EDIT_IMMERSIBLE_ZONE" ); + + createAction( ImportObstacleFromFileId, "IMPORT_OBSTACLE_FROM_FILE" ); + createAction( ImportGeomObjectId, "IMPORT_GEOM_OBJECT" ); + createAction( CreateBoxId, "CREATE_BOX" ); + createAction( CreateCylinderId, "CREATE_CYLINDER" ); createAction( CreateCalculationId, "CREATE_CALCULATION" ); createAction( EditCalculationId, "EDIT_CALCULATION" ); + createAction( ExportCalculationId, "EXPORT_CALCULATION" ); createAction( FuseImagesId, "FUSE_IMAGES" ); createAction( EditFusedImageId, "EDIT_FUSED_IMAGE" ); @@ -103,7 +140,10 @@ void HYDROGUI_Module::createActions() createAction( SplitImageId, "SPLIT_IMAGE" ); createAction( EditSplittedImageId, "EDIT_SPLITTED_IMAGE" ); - createAction( DeleteId, "DELETE", "", Qt::Key_Delete ); + createAction( DeleteId, "DELETE", "", Qt::Key_Delete, false, + SLOT( onDelete() ) ); + + createAction( SetColorId, "COLOR" ); createAction( ShowId, "SHOW" ); createAction( ShowOnlyId, "SHOW_ONLY" ); @@ -131,16 +171,26 @@ void HYDROGUI_Module::createMenus() createMenu( ImportImageId, aHydroId, -1, -1 ); createMenu( ImportBathymetryId, aHydroId, -1, -1 ); createMenu( CreatePolylineId, aHydroId, -1, -1 ); - createMenu( CreateZoneId, aHydroId, -1, -1 ); + createMenu( CreatePolyline3DId, aHydroId, -1, -1 ); + + int aNewProfileId = createMenu( tr( "MEN_PROFILE" ), aHydroId, -1 ); + createMenu( CreateProfileId, aNewProfileId, -1, -1 ); + createMenu( ImportProfilesId, aNewProfileId, -1, -1 ); + createMenu( AllGeoreferencementId, aNewProfileId, -1, -1 ); + + createMenu( CreateImmersibleZoneId, aHydroId, -1, -1 ); + + int aNewObstacleId = createMenu( tr( "MEN_OBSTACLE" ), aHydroId, -1 ); + createMenu( ImportObstacleFromFileId, aNewObstacleId, -1, -1 ); + createMenu( CreateBoxId, aNewObstacleId, -1, -1 ); + createMenu( CreateCylinderId, aNewObstacleId, -1, -1 ); + createMenu( CreateCalculationId, aHydroId, -1, -1 ); createMenu( separator(), aHydroId ); createMenu( FuseImagesId, aHydroId, -1, -1 ); createMenu( CutImagesId, aHydroId, -1, -1 ); createMenu( SplitImageId, aHydroId, -1, -1 ); - - //ouv: debug - //createMenu( separator(), aHydroId ); - //createMenu( TestSplitId, aHydroId, -1, -1 ); + createMenu( separator(), aHydroId ); } void HYDROGUI_Module::createPopups() @@ -174,10 +224,6 @@ void HYDROGUI_Module::createUndoRedoActions() connect( anEditUndo, SIGNAL( triggered( int ) ), this, SLOT( onUndo( int ) ) ); connect( anEditRedo, SIGNAL( triggered( int ) ), this, SLOT( onRedo( int ) ) ); - - QAction* aTestSplit = new QAction( "Test split", application()->desktop() ); - registerAction( TestSplitId, aTestSplit ); - connect( aTestSplit, SIGNAL( triggered() ), this, SLOT( onTestSplit() ) ); } void HYDROGUI_Module::updateUndoRedoControls() @@ -207,6 +253,16 @@ void HYDROGUI_Module::onOperation() startOperation( anId ); } +void HYDROGUI_Module::onDelete() +{ + SUIT_Operation* anOp = application()->activeStudy()->activeOperation(); + HYDROGUI_PolylineOp* aPolylineOp = dynamic_cast( anOp ); + if ( aPolylineOp && aPolylineOp->deleteEnabled() ) + aPolylineOp->deleteSelected(); + else + startOperation( DeleteId ); +} + bool HYDROGUI_Module::onUndo( int theNumActions ) { QApplication::setOverrideCursor( Qt::WaitCursor ); @@ -278,21 +334,44 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const case UpdateImageId: anOp = new HYDROGUI_UpdateImageOp( aModule ); break; + case RemoveImageRefsId: + anOp = new HYDROGUI_RemoveImageRefsOp( aModule ); + break; + case CreatePolyline3DId: + case EditPolyline3DId: + anOp = new HYDROGUI_Poly3DOp( aModule, theId == EditPolyline3DId ); + break; case CreatePolylineId: case EditPolylineId: anOp = new HYDROGUI_PolylineOp( aModule, theId == EditPolylineId ); break; + case CreateProfileId: + case EditProfileId: + anOp = new HYDROGUI_ProfileOp( aModule, theId == EditProfileId ); + break; + case ImportProfilesId: + anOp = new HYDROGUI_ImportProfilesOp( aModule ) ; + break; + case AllGeoreferencementId: + anOp = new HYDROGUI_GeoreferencementOp( aModule, HYDROGUI_GeoreferencementOp::All ) ; + break; + case SelectedGeoreferencementId: + anOp = new HYDROGUI_GeoreferencementOp( aModule, HYDROGUI_GeoreferencementOp::Selected ) ; + break; case ImportBathymetryId: anOp = new HYDROGUI_ImportBathymetryOp( aModule ); break; - case CreateZoneId: - case EditZoneId: - anOp = new HYDROGUI_ZoneOp( aModule, theId == EditZoneId ); + case CreateImmersibleZoneId: + case EditImmersibleZoneId: + anOp = new HYDROGUI_ImmersibleZoneOp( aModule, theId == EditImmersibleZoneId ); break; case CreateCalculationId: case EditCalculationId: anOp = new HYDROGUI_CalculationOp( aModule, theId == EditCalculationId ); break; + case ExportCalculationId: + anOp = new HYDROGUI_ExportCalculationOp( aModule ); + break; case FuseImagesId: case EditFusedImageId: anOp = new HYDROGUI_TwoImagesOp( aModule, HYDROGUI_TwoImagesOp::Fuse, theId == EditFusedImageId ); @@ -305,9 +384,27 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const case EditSplittedImageId: anOp = new HYDROGUI_TwoImagesOp( aModule, HYDROGUI_TwoImagesOp::Split, theId == EditSplittedImageId ); break; + case ImportObstacleFromFileId: + anOp = new HYDROGUI_ImportObstacleFromFileOp( aModule ); + break; + case ImportCreatedPrimitiveId: + anOp = new HYDROGUI_ImportGeomObjectOp( aModule, HYDROGUI_ImportGeomObjectOp::ImportCreated ); + break; + case ImportGeomObjectId: + anOp = new HYDROGUI_ImportGeomObjectOp( aModule, HYDROGUI_ImportGeomObjectOp::ImportSelected ); + break; + case CreateBoxId: + application()->activateOperation( "Geometry", GEOMOp::OpBox ); + break; + case CreateCylinderId: + application()->activateOperation( "Geometry", GEOMOp::OpCylinder ); + break; case DeleteId: anOp = new HYDROGUI_DeleteOp( aModule ); break; + case SetColorId: + anOp = new HYDROGUI_SetColorOp( aModule ); + break; case ShowId: case ShowOnlyId: case ShowAllId: @@ -323,99 +420,40 @@ LightApp_Operation* HYDROGUI_Module::createOperation( const int theId ) const return anOp; } -//----------------------------------------------------------------------------- -// Test splitting -//----------------------------------------------------------------------------- -#include -#include -void HYDROGUI_Module::onTestSplit() +bool HYDROGUI_Module::reusableOperation( const int id ) { - Handle(HYDROData_Document) aDocument = HYDROData_Document::Document( getStudyId() ); - - aDocument->StartOperation(); - - HYDROData_SequenceOfObjects aZoneList; - HYDROData_Iterator anIterator( aDocument, KIND_ZONE ); - for( ; anIterator.More(); anIterator.Next() ) - aZoneList.Append( anIterator.Current() ); - - HYDROGUI_SplitZonesTool::SplitDataList aSplitDataList = - HYDROGUI_SplitZonesTool::SplitZones( aZoneList, NULL ); - - int anIndex = 0; - HYDROGUI_SplitZonesTool::SplitDataListIterator anIter( aSplitDataList ); - while( anIter.hasNext() ) - { - const HYDROGUI_SplitZonesTool::SplitData& aSplitData = anIter.next(); - const QPainterPath& aPath = aSplitData.Path; - const QStringList& aZoneNames = aSplitData.ZoneNames; - - Handle(HYDROData_Polyline) aPolyline = - Handle(HYDROData_Polyline)::DownCast( aDocument->CreateObject( KIND_POLYLINE ) ); - if( !aPolyline.IsNull() ) - { - aPolyline->SetName( QString( "SplitPolyline_%1" ).arg( ++anIndex ) ); - aPolyline->setDimension( 2 ); - - QList aPolylineData; - for( int i = 0, n = aPath.elementCount(); i < n; i++ ) - { - const QPainterPath::Element anElement = aPath.elementAt( i ); - switch( anElement.type ) - { - case QPainterPath::MoveToElement: - aPolylineData.append( PolylineSection() ); - break; - case QPainterPath::LineToElement: - if( !aPolylineData.isEmpty() ) - { - PolylineSection& aSection = aPolylineData.last(); - aSection.myCoords << anElement.x; - aSection.myCoords << anElement.y; - } - break; - case QPainterPath::CurveToElement: // currently not supported - default: - break; - } - } - aPolyline->setPolylineData( aPolylineData ); - } - - Handle(HYDROData_Zone) aZone = - Handle(HYDROData_Zone)::DownCast( aDocument->CreateObject( KIND_ZONE ) ); - if( !aZone.IsNull() ) - { - aZone->SetName( QString( "SplitZone_%1" ).arg( anIndex ) ); - aZone->SetPolyline( aPolyline ); + if ( id == ImportGeomObjectId ) { + return false; + } - aZone->SetBorderColor( Qt::black ); + return LightApp_Module::reusableOperation( id ); +} - int aCounter = 0; - int aR = 0, aG = 0, aB = 0; - QStringListIterator aZoneNameIter( aZoneNames ); - while( aZoneNameIter.hasNext() ) - { - const QString& aZoneName = aZoneNameIter.next(); - Handle(HYDROData_Zone) aRefZone = Handle(HYDROData_Zone)::DownCast( - HYDROGUI_Tool::FindObjectByName( this, aZoneName, KIND_ZONE ) ); - if( !aRefZone.IsNull() ) - { - QColor aRefColor = aRefZone->GetFillingColor(); - aR += aRefColor.red(); - aG += aRefColor.green(); - aB += aRefColor.blue(); - aCounter++; - } - } - if( aCounter > 0 ) - { - QColor aFillingColor( aR / aCounter, aG / aCounter, aB / aCounter ); - aZone->SetFillingColor( aFillingColor ); - } - } +/** + * Called when the operation perfomed by another module is finished. + * \param theModuleName the name of the module which perfomed the operation + * \param theOperationName the operation name + * \param theEntryList the list of the created objects entries + */ +void HYDROGUI_Module::onExternalOperationFinished( const QString& theModuleName, + const QString& theOperationName, + const QStringList& theEntryList ) +{ + // Process "Geometry" module operations with non-empty list of created objects only + if ( theModuleName != "Geometry" || theEntryList.isEmpty() ) { + return; } + + // Start import GEOM object operation + myGeomObjectsToImport = theEntryList; + startOperation( ImportCreatedPrimitiveId ); + myGeomObjectsToImport.clear(); +} - aDocument->CommitOperation(); - update( UF_Model ); +/** + * Returns the list of entries of GEOM objects to be imported. + */ +QStringList HYDROGUI_Module::GetGeomObjectsToImport() +{ + return myGeomObjectsToImport; }