X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROGUI%2FHYDROGUI_ImportBathymetryOp.cxx;h=ed80b1d248a6bf0b3c6bb6839f85f7947f7e32f2;hb=8a924d50eedeb5f1c70fb32925fc1afc4e9d196e;hp=c692196181d04bb6d454f25528e2364c78063e74;hpb=1abcf8de100d14016ab483553c2d3c0f2d706daf;p=modules%2Fhydro.git diff --git a/src/HYDROGUI/HYDROGUI_ImportBathymetryOp.cxx b/src/HYDROGUI/HYDROGUI_ImportBathymetryOp.cxx index c6921961..ed80b1d2 100644 --- a/src/HYDROGUI/HYDROGUI_ImportBathymetryOp.cxx +++ b/src/HYDROGUI/HYDROGUI_ImportBathymetryOp.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 @@ -23,11 +19,15 @@ #include "HYDROGUI_ImportBathymetryOp.h" #include "HYDROGUI_DataModel.h" +#include "HYDROGUI_DataObject.h" #include "HYDROGUI_ImportBathymetryDlg.h" #include "HYDROGUI_Module.h" #include "HYDROGUI_Tool.h" +#include "HYDROGUI_Tool2.h" #include "HYDROGUI_UpdateFlags.h" +#include + #include #include @@ -35,7 +35,13 @@ #include #include +#include #include +#include +#include +#include +#include + HYDROGUI_ImportBathymetryOp::HYDROGUI_ImportBathymetryOp( HYDROGUI_Module* theModule, const bool theIsEdit ) @@ -59,16 +65,24 @@ void HYDROGUI_ImportBathymetryOp::startOperation() return; aPanel->reset(); + aPanel->SetEditMode(myIsEdit); if( myIsEdit ) { - myEditedObject = Handle(HYDROData_Bathymetry)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) ); + if ( isApplyAndClose() ) + myEditedObject = Handle(HYDROData_Bathymetry)::DownCast( HYDROGUI_Tool::GetSelectedObject( module() ) ); if( !myEditedObject.IsNull() ) { QString aName = myEditedObject->GetName(); - QString aFileName = myEditedObject->GetFilePath(); + QStringList aFileNames = myEditedObject->GetFilePaths(); + bool anIsAltitudesInverted = myEditedObject->IsAltitudesInverted(); + + aPanel->setFuseIntoOneOptionChecked( true ); + aPanel->setObjectName( aName ); - aPanel->setFileName( aFileName ); + aPanel->addFileNames( aFileNames ); + aPanel->setInvertAltitudes( anIsAltitudesInverted ); + aPanel->setFuseIntoOneOptionEnabled( false ); } } } @@ -87,13 +101,14 @@ HYDROGUI_InputPanel* HYDROGUI_ImportBathymetryOp::createInputPanel() const { HYDROGUI_InputPanel* aPanel = new HYDROGUI_ImportBathymetryDlg( module(), getName() ); - connect ( aPanel, SIGNAL( FileSelected( const QString& ) ), SLOT( onFileSelected() ) ); + connect ( aPanel, SIGNAL( FileSelected( const QStringList& ) ), SLOT( onFileSelected() ) ); return aPanel; } bool HYDROGUI_ImportBathymetryOp::processApply( int& theUpdateFlags, - QString& theErrorMsg ) + QString& theErrorMsg, + QStringList& theBrowseObjectsEntries ) { HYDROGUI_ImportBathymetryDlg* aPanel = ::qobject_cast( inputPanel() ); @@ -107,48 +122,144 @@ bool HYDROGUI_ImportBathymetryOp::processApply( int& theUpdateFlags, return false; } - QString aFileName = aPanel->getFileName().simplified(); - if ( aFileName.isEmpty() ) - { - theErrorMsg = tr( "INCORRECT_FILE_NAME" ); - return false; - } + QStringList aFileNames = aPanel->getFileNames(); + + QStringList DummyFileList; + foreach (QString str, aFileNames) + DummyFileList << str.simplified(); - QFileInfo aFileInfo( aFileName ); - if ( !aFileInfo.exists() || !aFileInfo.isReadable() ) + aFileNames = DummyFileList; + DummyFileList.clear(); + + if ( aFileNames.isEmpty() ) { - theErrorMsg = tr( "FILE_NOT_EXISTS_OR_CANT_BE_READ" ).arg( aFileName ); + theErrorMsg = tr( "EMPTY_FILENAMES" ); 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 ( ( !myIsEdit ) && ( !anObject.IsNull() ) ) + QString inexistWarn; + + foreach (QString aFileName, aFileNames ) { - theErrorMsg = tr( "OBJECT_EXISTS_IN_DOCUMENT" ).arg( anObjectName ); - return false; + QFileInfo aFileInfo( aFileName ); + if ( !aFileInfo.exists() || !aFileInfo.isReadable() ) + { + inexistWarn += "\n" + aFileName; + continue; + } + DummyFileList << aFileName; } - Handle(HYDROData_Bathymetry) aBathymetryObj; + if (!inexistWarn.isNull()) + SUIT_MessageBox::warning( module()->getApp()->desktop(), + tr( "BATHYMETRY_IMPORT_WARNING" ), "Can't read the next files:" + inexistWarn ); + + aFileNames = DummyFileList; + + bool isFuseIntoOneOption = aPanel->isFuseIntoOneOptionChecked(); + bool anIsInvertAltitudes = aPanel->isInvertAltitudes(); + + QString replacemWarn; + QString UnreadFilesWarn; + if ( myIsEdit ) { - aBathymetryObj = myEditedObject; + //edit already existing bath + if (myEditedObject.IsNull()) + return false; + QStringList anOldFileNames = myEditedObject->GetFilePaths(); + //bool anIsInvertAltitudes = aPanel->isInvertAltitudes(); + //myEditedObject->SetAltitudesInverted( anIsInvertAltitudes, false ); + if ( aFileNames.toSet() != anOldFileNames.toSet() ) + { + myEditedObject->SetAltitudesInverted( anIsInvertAltitudes, true ); + if ( !myEditedObject->ImportFromFiles( aFileNames ) ) + { + theErrorMsg = tr( "BAD_IMPORTED_BATHYMETRY_FILE" ).arg( aFileNames.join("\n") ); + return false; + } + } + else if ( anIsInvertAltitudes != myEditedObject->IsAltitudesInverted() ) + myEditedObject->SetAltitudesInverted( anIsInvertAltitudes, true ); + + myEditedObject->SetName( anObjectName ); + myEditedObject->Update(); } else { - aBathymetryObj = - Handle(HYDROData_Bathymetry)::DownCast( doc()->CreateObject( KIND_BATHYMETRY ) ); - } - if ( aBathymetryObj.IsNull() ) - return false; + //create the new one + if (isFuseIntoOneOption) + { + Handle(HYDROData_Bathymetry) aBathymetryObj = Handle(HYDROData_Bathymetry)::DownCast( doc()->CreateObject( KIND_BATHYMETRY ) ); + if ( aBathymetryObj.IsNull() ) + return false; + aBathymetryObj->SetAltitudesInverted( anIsInvertAltitudes, false ); + if ( !aBathymetryObj->ImportFromFiles( aFileNames ) ) + { + theErrorMsg = tr( "BAD_IMPORTED_BATHYMETRY_FILE" ).arg( aFileNames.join("\n") ); + return false; + } - if ( !aBathymetryObj->ImportFromFile( aFileName ) ) - { - theErrorMsg = tr( "BAD_IMPORTED_BATHYMETRY_FILE" ).arg( aFileName ); - return false; + QString aNewObjName; + if (CheckNameExistingBathy(anObjectName, aNewObjName)) + { + aBathymetryObj->SetName( aNewObjName ); + replacemWarn += "\n'" + anObjectName + "' => '" + aNewObjName + "'"; + } + else + aBathymetryObj->SetName( anObjectName ); + + aBathymetryObj->SetName( anObjectName ); + aBathymetryObj->Update(); + QString anEntry = HYDROGUI_DataObject::dataObjectEntry( aBathymetryObj ); + theBrowseObjectsEntries.append( anEntry ); + } + else //myedit off + non-fuse => import separate files + { + bool AtLeastOneWasImported = false; + foreach (QString filename, aFileNames) + { + Handle(HYDROData_Bathymetry) aBathymetryObj = Handle(HYDROData_Bathymetry)::DownCast( doc()->CreateObject( KIND_BATHYMETRY ) ); + if ( aBathymetryObj.IsNull() ) + continue; + aBathymetryObj->SetAltitudesInverted( anIsInvertAltitudes, false ); + if ( !aBathymetryObj->ImportFromFiles( QStringList(filename) ) ) + { + UnreadFilesWarn += "\n" + filename; + continue; + } + + QString anObjectName = QFileInfo( filename ).baseName(); + QString aNewObjName; + if (CheckNameExistingBathy(anObjectName, aNewObjName)) + { + aBathymetryObj->SetName( aNewObjName ); + replacemWarn += "\n'" + anObjectName + "' => '" + aNewObjName + "'"; + } + else + aBathymetryObj->SetName( anObjectName ); + + AtLeastOneWasImported = true; + aBathymetryObj->Update(); + QString anEntry = HYDROGUI_DataObject::dataObjectEntry( aBathymetryObj ); + theBrowseObjectsEntries.append( anEntry ); + } + if (!AtLeastOneWasImported) + { + theErrorMsg = tr( "BAD_IMPORTED_BATHYMETRY_FILES" ).arg( aFileNames.join("\n") ); + return false; + } + } } - aBathymetryObj->SetName( anObjectName ); + if (!UnreadFilesWarn.isNull()) + SUIT_MessageBox::warning( module()->getApp()->desktop(), + tr( "BATHYMETRY_IMPORT_WARNING" ), "The next files cannot be imported:" + UnreadFilesWarn ); + + + if (!replacemWarn.isNull()) + SUIT_MessageBox::warning( module()->getApp()->desktop(), + tr( "BATHYMETRY_IMPORT_WARNING" ), "The next objects names are already exist in the document; so the new objects was renamed:" + replacemWarn ); // Activate VTK viewer and show the bathymetry SUIT_ViewManager* aVTKMgr = 0; @@ -165,21 +276,26 @@ bool HYDROGUI_ImportBathymetryOp::processApply( int& theUpdateFlags, 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 ) + + OCCViewer_ViewManager* mgr = dynamic_cast(aViewMgr); + OCCViewer_Viewer* occ_viewer = mgr->getOCCViewer(); + int aViewerId = (size_t)(occ_viewer); + + HYDROGUI_Shape* aObjSh = module()->getObjectShape( aViewerId, myEditedObject ); + HYDROGUI_ShapeBathymetry* aBathSh = dynamic_cast( aObjSh ); + if (aBathSh) { - module()->setObjectVisible( (size_t)aVTKMgr->getViewModel(), aBathymetryObj, true ); + aBathSh->update(false, false); + aBathSh->RescaleDefault(); + module()->getOCCDisplayer()->UpdateColorScale( occ_viewer ); } - theUpdateFlags = UF_Model | UF_VTKViewer | UF_VTK_Init | UF_VTK_Forced; + theUpdateFlags = UF_Model | UF_OCCViewer | UF_OCC_Forced | + UF_VTKViewer | UF_VTK_Forced; + return true; } - + void HYDROGUI_ImportBathymetryOp::onFileSelected() { HYDROGUI_ImportBathymetryDlg* aPanel = @@ -187,20 +303,19 @@ void HYDROGUI_ImportBathymetryOp::onFileSelected() if ( !aPanel ) return; - QString anObjectName = aPanel->getObjectName().simplified(); - if ( anObjectName.isEmpty() ) - { - anObjectName = aPanel->getFileName(); - if ( !anObjectName.isEmpty() ) { - anObjectName = QFileInfo( anObjectName ).baseName(); - } + aPanel->UpdateCheckBoxStates(); +} - if ( anObjectName.isEmpty() ) { - anObjectName = HYDROGUI_Tool::GenerateObjectName( module(), tr( "DEFAULT_BATHYMETRY_NAME" ) ); - } - aPanel->setObjectName( anObjectName ); +bool HYDROGUI_ImportBathymetryOp::CheckNameExistingBathy(const QString& InpName, QString& OutputName) +{ + Handle(HYDROData_Entity) anObject = HYDROGUI_Tool::FindObjectByName( module(), InpName ); + if (anObject.IsNull()) + return false; + else + { + OutputName = HYDROGUI_Tool::GenerateObjectName( module(), tr( "DEFAULT_BATHYMETRY_NAME" ) ); + return true; } } -