X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ImportBathymetryOp.cxx;h=ad2cc3dfea2b4b712c650f138b47dce8f0471a2d;hb=a1431f03eac1d1aed4203d0568d987c41ce939b3;hp=2654523a0c8b6a0f4ec1a566d6a6a5a01f293576;hpb=84f8b4a57d3cdad820bc1333a5066699cd1c8ae3;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ImportBathymetryOp.cxx b/src/HYDROGUI/HYDROGUI_ImportBathymetryOp.cxx index 2654523a..ad2cc3df 100644 --- a/src/HYDROGUI/HYDROGUI_ImportBathymetryOp.cxx +++ b/src/HYDROGUI/HYDROGUI_ImportBathymetryOp.cxx @@ -32,13 +32,17 @@ #include #include +#include +#include #include -HYDROGUI_ImportBathymetryOp::HYDROGUI_ImportBathymetryOp( HYDROGUI_Module* theModule ) -: HYDROGUI_Operation( theModule ) +HYDROGUI_ImportBathymetryOp::HYDROGUI_ImportBathymetryOp( HYDROGUI_Module* theModule, + const bool theIsEdit ) +: HYDROGUI_Operation( theModule ), + myIsEdit( theIsEdit ) { - setName( tr( "IMPORT_BATHYMETRY" ) ); + setName( theIsEdit ? tr( "EDIT_IMPORTED_BATHYMETRY" ) : tr( "IMPORT_BATHYMETRY" ) ); } HYDROGUI_ImportBathymetryOp::~HYDROGUI_ImportBathymetryOp() @@ -55,6 +59,21 @@ void HYDROGUI_ImportBathymetryOp::startOperation() return; aPanel->reset(); + + if( myIsEdit ) + { + myEditedObject = Handle(HYDROData_Bathymetry)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) ); + if( !myEditedObject.IsNull() ) + { + QString aName = myEditedObject->GetName(); + QString aFileName = myEditedObject->GetFilePath(); + bool anIsAltitudesInverted = myEditedObject->IsAltitudesInverted(); + + aPanel->setObjectName( aName ); + aPanel->setFileName( aFileName ); + aPanel->setInvertAltitudes( anIsAltitudesInverted ); + } + } } void HYDROGUI_ImportBathymetryOp::abortOperation() @@ -92,6 +111,8 @@ bool HYDROGUI_ImportBathymetryOp::processApply( int& theUpdateFlags, } QString aFileName = aPanel->getFileName().simplified(); + bool anIsInvertAltitudes = aPanel->isInvertAltitudes(); + if ( aFileName.isEmpty() ) { theErrorMsg = tr( "INCORRECT_FILE_NAME" ); @@ -105,28 +126,76 @@ bool HYDROGUI_ImportBathymetryOp::processApply( int& theUpdateFlags, return false; } - // check that there are no other objects with the same name in the document - Handle(HYDROData_Entity) anObject = HYDROGUI_Tool::FindObjectByName( module(), anObjectName ); - if ( !anObject.IsNull() ) + if( !myIsEdit || ( !myEditedObject.IsNull() && myEditedObject->GetName() != anObjectName ) ) { - theErrorMsg = tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( anObjectName ); - return false; + // check that there are no other objects with the same name in the document + Handle(HYDROData_Entity) anObject = HYDROGUI_Tool::FindObjectByName( module(), anObjectName ); + if( !anObject.IsNull() ) + { + theErrorMsg = tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( anObjectName ); + return false; + } } - Handle(HYDROData_Bathymetry) aBathymetryObj = - Handle(HYDROData_Bathymetry)::DownCast( doc()->CreateObject( KIND_BATHYMETRY ) ); + Handle(HYDROData_Bathymetry) aBathymetryObj; + if ( myIsEdit ) + { + aBathymetryObj = myEditedObject; + } + else + { + aBathymetryObj = + Handle(HYDROData_Bathymetry)::DownCast( doc()->CreateObject( KIND_BATHYMETRY ) ); + } if ( aBathymetryObj.IsNull() ) return false; - if ( !aBathymetryObj->ImportFromFile( aFileName ) ) + QString anOldFileName = aBathymetryObj->GetFilePath(); + if ( aFileName != anOldFileName ) { - theErrorMsg = tr( "BAD_IMPORTED_BATHYMETRY_FILE" ).arg( aFileName ); - return false; + aBathymetryObj->SetAltitudesInverted( anIsInvertAltitudes, false ); + if ( !aBathymetryObj->ImportFromFile( aFileName ) ) + { + theErrorMsg = tr( "BAD_IMPORTED_BATHYMETRY_FILE" ).arg( aFileName ); + return false; + } + } + else if ( anIsInvertAltitudes != aBathymetryObj->IsAltitudesInverted() ) + { + aBathymetryObj->SetAltitudesInverted( anIsInvertAltitudes ); } aBathymetryObj->SetName( anObjectName ); - theUpdateFlags = UF_Model; + aBathymetryObj->Update(); + + // Activate VTK viewer and show the bathymetry + SUIT_ViewManager* aVTKMgr = 0; + SUIT_ViewManager* aViewMgr = module()->getApp()->activeViewManager(); + // Try to get a VTK viewer as an active or existing one + if ( aViewMgr ) + { + if ( aViewMgr->getType() == SVTK_Viewer::Type() ) + { + aVTKMgr = aViewMgr; + } + else + { + aVTKMgr = module()->getApp()->viewManager( SVTK_Viewer::Type() ); + } + } + // If there is no VTK viewer yet then create a new one + if ( !aVTKMgr ) + { + aVTKMgr = module()->getApp()->createViewManager( SVTK_Viewer::Type() ); + } + // Set the bathymetry visible in the VTK viewer + if ( aVTKMgr ) + { + module()->setObjectVisible( (size_t)aVTKMgr->getViewModel(), aBathymetryObj, true ); + } + + theUpdateFlags = UF_Model | UF_VTKViewer | UF_VTK_Init | UF_VTK_Forced; return true; } @@ -138,9 +207,16 @@ void HYDROGUI_ImportBathymetryOp::onFileSelected() return; QString anObjectName = aPanel->getObjectName().simplified(); - if ( anObjectName.isEmpty() ) + //if ( anObjectName.isEmpty() ) { - anObjectName = HYDROGUI_Tool::GenerateObjectName( module(), "Bathymetry" ); + anObjectName = aPanel->getFileName(); + if ( !anObjectName.isEmpty() ) { + anObjectName = QFileInfo( anObjectName ).baseName(); + } + + if ( anObjectName.isEmpty() ) { + anObjectName = HYDROGUI_Tool::GenerateObjectName( module(), tr( "DEFAULT_BATHYMETRY_NAME" ) ); + } aPanel->setObjectName( anObjectName ); } }