From cbed3da64522b5be004aee4e771ca1f75d4af172 Mon Sep 17 00:00:00 2001 From: =?utf8?q?C=C3=A9dric=20Aguerre?= Date: Wed, 2 Mar 2016 16:16:38 +0100 Subject: [PATCH] [MEDCalc] Introduce ProcessingController --- src/MEDCalc/gui/CMakeLists.txt | 4 +- src/MEDCalc/gui/DatasourceController.cxx | 155 ------------- src/MEDCalc/gui/DatasourceController.hxx | 11 - src/MEDCalc/gui/MEDModule.cxx | 9 +- src/MEDCalc/gui/MEDModule.hxx | 2 + src/MEDCalc/gui/MED_images.ts | 8 +- src/MEDCalc/gui/MED_msg_en.ts | 25 ++- src/MEDCalc/gui/MED_msg_fr.ts | 25 ++- src/MEDCalc/gui/PresentationController.cxx | 2 +- src/MEDCalc/gui/PresentationController.hxx | 1 - src/MEDCalc/gui/ProcessingController.cxx | 208 ++++++++++++++++++ src/MEDCalc/gui/ProcessingController.hxx | 77 +++++++ src/MEDCalc/gui/WorkspaceController.cxx | 29 +++ src/MEDCalc/gui/WorkspaceController.hxx | 2 + src/MEDCalc/res/MEDCalc.png | Bin 6867 -> 6721 bytes src/MEDCalc/res/MEDCalc_small.png | Bin 2329 -> 2514 bytes .../res/datasource_changeUnderlyingMesh.png | Bin 798 -> 0 bytes .../res/datasource_interpolateField.png | Bin 836 -> 0 bytes .../res/processing_changeUnderlyingMesh.png | Bin 0 -> 750 bytes .../res/processing_interpolateField.png | Bin 0 -> 2280 bytes 20 files changed, 364 insertions(+), 194 deletions(-) create mode 100644 src/MEDCalc/gui/ProcessingController.cxx create mode 100644 src/MEDCalc/gui/ProcessingController.hxx delete mode 100644 src/MEDCalc/res/datasource_changeUnderlyingMesh.png delete mode 100644 src/MEDCalc/res/datasource_interpolateField.png create mode 100644 src/MEDCalc/res/processing_changeUnderlyingMesh.png create mode 100644 src/MEDCalc/res/processing_interpolateField.png diff --git a/src/MEDCalc/gui/CMakeLists.txt b/src/MEDCalc/gui/CMakeLists.txt index 62cb36a16..125b60995 100644 --- a/src/MEDCalc/gui/CMakeLists.txt +++ b/src/MEDCalc/gui/CMakeLists.txt @@ -31,7 +31,9 @@ SET(MEDCALCGUI_HEADERS MEDEventListener_i.hxx WorkspaceController.hxx DatasourceController.hxx - PresentationController.hxx) + PresentationController.hxx + ProcessingController.hxx + ) QT_WRAP_MOC(MEDCALCGUI_HEADERS_MOC ${MEDCALCGUI_HEADERS}) diff --git a/src/MEDCalc/gui/DatasourceController.cxx b/src/MEDCalc/gui/DatasourceController.cxx index 5a1444719..bd9395524 100644 --- a/src/MEDCalc/gui/DatasourceController.cxx +++ b/src/MEDCalc/gui/DatasourceController.cxx @@ -53,20 +53,11 @@ // Datasource controller // ============================================================== // -//DatasourceController::DatasourceController(StandardApp_Module* salomeModule) DatasourceController::DatasourceController(MEDModule* salomeModule) { STDLOG("Creating a DatasourceController"); _salomeModule = salomeModule; _studyEditor = _salomeModule->getStudyEditor(); - - _dlgChangeUnderlyingMesh = new DlgChangeUnderlyingMesh(_studyEditor); - connect(_dlgChangeUnderlyingMesh,SIGNAL(inputValidated()), - this, SLOT(OnChangeUnderlyingMeshInputValidated())); - - _dlgInterpolateField = new DlgInterpolateField(_studyEditor); - connect(_dlgInterpolateField,SIGNAL(inputValidated()), - this, SLOT(OnInterpolateFieldInputValidated())); } DatasourceController::~DatasourceController() { @@ -74,8 +65,6 @@ DatasourceController::~DatasourceController() { } void DatasourceController::createActions() { - //QWidget* dsk = _salomeModule->getApp()->desktop(); - //SUIT_ResourceMgr* resMgr = _salomeModule->getApp()->resourceMgr(); int toolbarId = _salomeModule->createTool("Datasource", "DatasourceToolbar"); // @@ -86,12 +75,10 @@ void DatasourceController::createActions() { QString icon = tr("ICO_DATASOURCE_ADD"); int actionId; actionId = _salomeModule->createStandardAction(label,this, SLOT(OnAddDatasource()),icon,tooltip); - //_salomeModule->addActionInToolbar(actionId); _salomeModule->createTool(actionId, toolbarId); // This action has to be placed in the general file menu with the label "Import MED file" int menuId = _salomeModule->createMenu( tr( "MEN_FILE" ), -1, 1 ); - //_salomeModule->addActionInMenubar(actionId, menuId); _salomeModule->action(actionId)->setIconVisibleInMenu(true); _salomeModule->createMenu(actionId, menuId, 10); @@ -99,7 +86,6 @@ void DatasourceController::createActions() { tooltip = tr("TIP_ADD_IMAGE_SOURCE"); icon = tr("ICO_IMAGE_ADD"); actionId = _salomeModule->createStandardAction(label,this, SLOT(OnAddImagesource()),icon,tooltip); - // _salomeModule->addActionInToolbar(actionId); _salomeModule->createTool(actionId, toolbarId); _salomeModule->action(actionId)->setIconVisibleInMenu(true); _salomeModule->createMenu(actionId, menuId, 20); @@ -118,19 +104,6 @@ void DatasourceController::createActions() { icon = tr("ICO_DATASOURCE_USE"); actionId = _salomeModule->createStandardAction(label,this,SLOT(OnUseInWorkspace()),icon); _salomeModule->addActionInPopupMenu(actionId); - - // Change underlying mesh (note that this action creates a new field in - // the workspace that corresponds to a copy of the selected field - // modified by the change of the underlying mesh. - label = tr("LAB_CHANGE_MESH"); - icon = tr("ICO_DATASOURCE_CHANGE_MESH"); - actionId = _salomeModule->createStandardAction(label,this,SLOT(OnChangeUnderlyingMesh()),icon); - _salomeModule->addActionInPopupMenu(actionId); - - label = tr("LAB_INTERPOLATE_FIELD"); - icon = tr("ICO_DATASOURCE_INTERPOLATE_FIELD"); - actionId = _salomeModule->createStandardAction(label,this,SLOT(OnInterpolateField()),icon); - _salomeModule->addActionInPopupMenu(actionId); } /** @@ -191,8 +164,6 @@ void DatasourceController::OnAddDatasource() } #include "DlgImageToMed.hxx" -//#include -//#include void DatasourceController::OnAddImagesource() { @@ -378,132 +349,6 @@ void DatasourceController::OnUseInWorkspace() { } } -void DatasourceController::OnChangeUnderlyingMesh() { - // We need a studyEditor updated on the active study - _studyEditor->updateActiveStudy(); - - // Get the selected objects in the study (SObject). In cas of a - // multiple selection, we consider only the first item. At least one - // item must be selected. - SALOME_StudyEditor::SObjectList* listOfSObject = _studyEditor->getSelectedObjects(); - if ( listOfSObject->size() > 0 ) { - SALOMEDS::SObject_var soField = listOfSObject->at(0); - int fieldId = _studyEditor->getParameterInt(soField,OBJECT_ID); - // _GBO_ : the dialog should not be modal, so that we can choose a - // mesh in the browser. Then we have to emit a signal from the - // dialog.accept, connected to a slot of the DatasourceControler - _dlgChangeUnderlyingMesh->setFieldId(fieldId); - Qt::WindowFlags flags = _dlgChangeUnderlyingMesh->windowFlags(); - _dlgChangeUnderlyingMesh->setWindowFlags(flags | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint); - _dlgChangeUnderlyingMesh->open(); - } -} - -void DatasourceController::OnChangeUnderlyingMeshInputValidated() { - int meshId = _dlgChangeUnderlyingMesh->getMeshId(); - STDLOG("meshId = " << ToString(meshId)); - int fieldId = _dlgChangeUnderlyingMesh->getFieldId(); - MEDCALC::FieldHandler* fieldHandler = - MEDFactoryClient::getDataManager()->getFieldHandler(fieldId); - - // We don't modify the original field but create first a duplicate - MEDCALC::FieldHandler* duplicate = MEDFactoryClient::getCalculator()->dup(*fieldHandler); - MEDFactoryClient::getDataManager()->changeUnderlyingMesh(duplicate->id, meshId); - - // Request once more the duplicate to update the meta-data on this - // client side - duplicate = MEDFactoryClient::getDataManager()->getFieldHandler(duplicate->id); - - // >>> - // WARN: the following is a temporary code for test purpose - // Automatically add in ws - DatasourceEvent* event = new DatasourceEvent(); - event->eventtype = DatasourceEvent::EVENT_IMPORT_OBJECT; - XmedDataObject* dataObject = new XmedDataObject(); - dataObject->setFieldHandler(*duplicate); - event->objectdata = dataObject; - emit datasourceSignal(event); - // Note that this signal is processed by the WorkspaceController - - // Tag the item to prevent double import - //_studyEditor->setParameterBool(soField,OBJECT_IS_IN_WORKSPACE,true); -} - -void DatasourceController::OnInterpolateField() { - // We need a studyEditor updated on the active study - _studyEditor->updateActiveStudy(); - - // Get the selected objects in the study (SObject). In case of a - // multiple selection, we consider only the first item. At least one - // item must be selected. - SALOME_StudyEditor::SObjectList* listOfSObject = _studyEditor->getSelectedObjects(); - if ( listOfSObject->size() > 0 ) { - SALOMEDS::SObject_var soField = listOfSObject->at(0); - int fieldId = _studyEditor->getParameterInt(soField,OBJECT_ID); - // _GBO_ : the dialog should not be modal, so that we can choose a - // mesh in the browser. Then we have to emit a signal from the - // dialog.accept, connected to a slot of the DatasourceControler - _dlgInterpolateField->setFieldId(fieldId); - Qt::WindowFlags flags = _dlgInterpolateField->windowFlags(); - _dlgInterpolateField->setWindowFlags(flags | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint); - _dlgInterpolateField->open(); - } -} - -void DatasourceController::OnInterpolateFieldInputValidated() { - MEDCALC::InterpolationParameters params; - params.precision = _dlgInterpolateField->getPrecision(); - STDLOG("precision = " << params.precision); - params.defaultValue = _dlgInterpolateField->getDefaultValue(); - STDLOG("defaultValue = " << params.defaultValue); - params.reverse = _dlgInterpolateField->getReverse(); - STDLOG("reverse = " << params.reverse); - params.intersectionType = _dlgInterpolateField->getIntersectionType().c_str(); - STDLOG("intersectionType = " << params.intersectionType); - params.method = _dlgInterpolateField->getMethod().c_str(); - STDLOG("method = " << params.method); - params.nature = _dlgInterpolateField->getFieldNature().c_str(); - STDLOG("nature = " << params.nature); - - int meshId = _dlgInterpolateField->getMeshId(); - STDLOG("meshId = " << ToString(meshId)); - int fieldId = _dlgInterpolateField->getFieldId(); - MEDCALC::FieldHandler* fieldHandler = MEDFactoryClient::getDataManager()->getFieldHandler(fieldId); - - // We don't modify the original field but create first a duplicate - // MEDCALC::FieldHandler* duplicate = MEDFactoryClient::getCalculator()->dup(*fieldHandler); - //MEDFactoryClient::getDataManager()->changeUnderlyingMesh(duplicate->id, meshId); - MEDCALC::FieldHandler* result = NULL; - try { - result = MEDFactoryClient::getDataManager()->interpolateField(fieldId, meshId, params); - } - catch(...) { - STDLOG("Unable to process field interpolation; please check interpolation parameters"); - QMessageBox::critical(_salomeModule->getApp()->desktop(), - tr("Operation failed"), - tr("Unable to process field interpolation; please check interpolation parameters")); - return; - } - - // Request once more the duplicate to update the meta-data on this - // client side - // duplicate = MEDFactoryClient::getDataManager()->getFieldHandler(duplicate->id); - - // >>> - // WARN: the following is a temporary code for test purpose - // Automatically add in ws - DatasourceEvent* event = new DatasourceEvent(); - event->eventtype = DatasourceEvent::EVENT_IMPORT_OBJECT; - XmedDataObject* dataObject = new XmedDataObject(); - dataObject->setFieldHandler(*result); - event->objectdata = dataObject; - emit datasourceSignal(event); - // Note that this signal is processed by the WorkspaceController - - // // Tag the item to prevent double import - // //_studyEditor->setParameterBool(soField,OBJECT_IS_IN_WORKSPACE,true); -} - void DatasourceController::processWorkspaceEvent(const MEDCALC::MedEvent* event) { diff --git a/src/MEDCalc/gui/DatasourceController.hxx b/src/MEDCalc/gui/DatasourceController.hxx index b2097e38c..7d9e5bef2 100644 --- a/src/MEDCalc/gui/DatasourceController.hxx +++ b/src/MEDCalc/gui/DatasourceController.hxx @@ -31,8 +31,6 @@ #include #include "XmedDataModel.hxx" -#include "DlgChangeUnderlyingMesh.hxx" -#include "DlgInterpolateField.hxx" #include "MEDCALCGUI.hxx" // // The DatasourceController defines data structures and classes to @@ -88,9 +86,6 @@ public: void createActions(); public slots: - // Callback connected to dialog box validation signals - void OnChangeUnderlyingMeshInputValidated(); - void OnInterpolateFieldInputValidated(); void processWorkspaceEvent(const MEDCALC::MedEvent* event); signals: @@ -101,8 +96,6 @@ protected slots: void OnAddImagesource(); void OnExpandField(); void OnUseInWorkspace(); - void OnChangeUnderlyingMesh(); - void OnInterpolateField(); private: void addDatasource(const char* filename); @@ -111,10 +104,6 @@ private: private: MEDModule* _salomeModule; SALOME_AppStudyEditor* _studyEditor; // borrowed to MEDModule - - DlgChangeUnderlyingMesh* _dlgChangeUnderlyingMesh; - DlgInterpolateField* _dlgInterpolateField; - }; #endif diff --git a/src/MEDCalc/gui/MEDModule.cxx b/src/MEDCalc/gui/MEDModule.cxx index f5f091420..d5835444a 100644 --- a/src/MEDCalc/gui/MEDModule.cxx +++ b/src/MEDCalc/gui/MEDModule.cxx @@ -39,7 +39,7 @@ MED_ORB::MED_Gen_var MEDModule::myEngine; MEDModule::MEDModule() : - SalomeApp_Module("MED"), _studyEditor(0), _datasourceController(0), _workspaceController(0), _presentationController(0) + SalomeApp_Module("MED"), _studyEditor(0), _datasourceController(0), _workspaceController(0), _presentationController(0), _processingController(0) { // Note also that we can't use the getApp() function here because // the initialize(...) function has not been called yet. @@ -57,6 +57,8 @@ MEDModule::~MEDModule() // delete _workspaceController; if (_presentationController) delete _presentationController; + if (_processingController) + delete _processingController; } MED_ORB::MED_Gen_var @@ -201,6 +203,7 @@ MEDModule::createModuleWidgets() { _xmedDataModel = new XmedDataModel(); _workspaceController->setDataModel(_xmedDataModel); _presentationController = new PresentationController(this); + _processingController = new ProcessingController(this); connect(_datasourceController, SIGNAL(datasourceSignal(const DatasourceEvent*)), _workspaceController, SLOT(processDatasourceEvent(const DatasourceEvent*))); @@ -208,6 +211,9 @@ MEDModule::createModuleWidgets() { connect(_presentationController, SIGNAL(presentationSignal(const PresentationEvent*)), _workspaceController, SLOT(processPresentationEvent(const PresentationEvent*))); + connect(_processingController, SIGNAL(processingSignal(const ProcessingEvent*)), + _workspaceController, SLOT(processProcessingEvent(const ProcessingEvent*))); + connect(_workspaceController, SIGNAL(workspaceSignal(const MEDCALC::MedEvent*)), _datasourceController, SLOT(processWorkspaceEvent(const MEDCALC::MedEvent*))); @@ -220,6 +226,7 @@ MEDModule::createModuleActions() { _datasourceController->createActions(); _workspaceController->createActions(); _presentationController->createActions(); + _processingController->createActions(); } int diff --git a/src/MEDCalc/gui/MEDModule.hxx b/src/MEDCalc/gui/MEDModule.hxx index 97cf19888..cec0dbf4a 100644 --- a/src/MEDCalc/gui/MEDModule.hxx +++ b/src/MEDCalc/gui/MEDModule.hxx @@ -31,6 +31,7 @@ #include "XmedDataModel.hxx" #include "DatasourceController.hxx" #include "PresentationController.hxx" +#include "ProcessingController.hxx" #include #include CORBA_CLIENT_HEADER(MED_Gen) @@ -94,6 +95,7 @@ private: WorkspaceController* _workspaceController; XmedDataModel* _xmedDataModel; PresentationController* _presentationController; + ProcessingController* _processingController; static MED_ORB::MED_Gen_var myEngine; }; diff --git a/src/MEDCalc/gui/MED_images.ts b/src/MEDCalc/gui/MED_images.ts index bcc3b14e5..7484fc4c1 100644 --- a/src/MEDCalc/gui/MED_images.ts +++ b/src/MEDCalc/gui/MED_images.ts @@ -16,12 +16,12 @@ datasource_add.png - ICO_DATASOURCE_CHANGE_MESH - datasource_changeUnderlyingMesh.png + ICO_PROCESSING_CHANGE_MESH + processing_changeUnderlyingMesh.png - ICO_DATASOURCE_INTERPOLATE_FIELD - datasource_interpolateField.png + ICO_PROCESSING_INTERPOLATE_FIELD + processing_interpolateField.png ICO_DATASOURCE_EXPAND_FIELD diff --git a/src/MEDCalc/gui/MED_msg_en.ts b/src/MEDCalc/gui/MED_msg_en.ts index ba14c9e84..8754beb6b 100644 --- a/src/MEDCalc/gui/MED_msg_en.ts +++ b/src/MEDCalc/gui/MED_msg_en.ts @@ -84,6 +84,21 @@ Point sprite + + ProcessingController + + MENU_PROCESSING + Processing + + + LAB_PROCESSING_CHANGE_MESH + Change underlying mesh + + + LAB_PROCESSING_INTERPOLATE_FIELD + Interpolate field + + DatasourceController @@ -116,16 +131,6 @@ LAB_USE_IN_WORKSPACE Use in workspace - - - LAB_CHANGE_MESH - Change underlying mesh - - - - LAB_INTERPOLATE_FIELD - Interpolate field - IMPORT_MED_FIELDS diff --git a/src/MEDCalc/gui/MED_msg_fr.ts b/src/MEDCalc/gui/MED_msg_fr.ts index d339c08b9..f09dc6717 100644 --- a/src/MEDCalc/gui/MED_msg_fr.ts +++ b/src/MEDCalc/gui/MED_msg_fr.ts @@ -84,6 +84,21 @@ Point sprite + + ProcessingController + + MENU_PROCESSING + Traitement + + + LAB_PROCESSING_CHANGE_MESH + Changer le maillage sous-jacent + + + LAB_PROCESSING_INTERPOLATE_FIELD + Interpoler le champ + + DatasourceController @@ -116,16 +131,6 @@ LAB_USE_IN_WORKSPACE Utiliser dans l'espace de travail - - - LAB_CHANGE_MESH - Changer le maillage sous-jacent - - - - LAB_INTERPOLATE_FIELD - Interpoler le champ - IMPORT_MED_FIELDS diff --git a/src/MEDCalc/gui/PresentationController.cxx b/src/MEDCalc/gui/PresentationController.cxx index b6cbe19c1..c53281a49 100644 --- a/src/MEDCalc/gui/PresentationController.cxx +++ b/src/MEDCalc/gui/PresentationController.cxx @@ -85,7 +85,7 @@ PresentationController::createActions() { STDLOG("Creating PresentationController actions"); - int presentationToolbarId = _salomeModule->createTool("View Mode", "PresentationToolbar"); + int presentationToolbarId = _salomeModule->createTool("Presentations", "PresentationToolbar"); int presentationMenuId = _salomeModule->createMenu(tr("MENU_PRESENTATIONS"), -1, 1); // Presentations diff --git a/src/MEDCalc/gui/PresentationController.hxx b/src/MEDCalc/gui/PresentationController.hxx index 19384c52f..57f7e46df 100644 --- a/src/MEDCalc/gui/PresentationController.hxx +++ b/src/MEDCalc/gui/PresentationController.hxx @@ -43,7 +43,6 @@ typedef struct { }; int eventtype; XmedDataObject* objectdata; - QString objectalias; } PresentationEvent; class MEDModule; diff --git a/src/MEDCalc/gui/ProcessingController.cxx b/src/MEDCalc/gui/ProcessingController.cxx new file mode 100644 index 000000000..e2a257224 --- /dev/null +++ b/src/MEDCalc/gui/ProcessingController.cxx @@ -0,0 +1,208 @@ +// Copyright (C) 2016 CEA/DEN, 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, 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 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#include "ProcessingController.hxx" +#include "DatasourceConstants.hxx" + +#include "MEDFactoryClient.hxx" +#include "MEDModule.hxx" +#include "Basics_Utils.hxx" + +#include + +ProcessingController::ProcessingController(MEDModule* salomeModule) +{ + STDLOG("Creating a ProcessingController"); + _salomeModule = salomeModule; + _studyEditor = _salomeModule->getStudyEditor(); + + _dlgChangeUnderlyingMesh = new DlgChangeUnderlyingMesh(_studyEditor); + connect(_dlgChangeUnderlyingMesh,SIGNAL(inputValidated()), + this, SLOT(OnChangeUnderlyingMeshInputValidated())); + + _dlgInterpolateField = new DlgInterpolateField(_studyEditor); + connect(_dlgInterpolateField,SIGNAL(inputValidated()), + this, SLOT(OnInterpolateFieldInputValidated())); +} + +ProcessingController::~ProcessingController() +{ + STDLOG("Deleting the ProcessingController"); +} + +void +ProcessingController::createActions() +{ + STDLOG("Creating ProcessingController actions"); + + int processingToolbarId = _salomeModule->createTool("Processing", "ProcessingToolbar"); + int processingMenuId = _salomeModule->createMenu(tr("MENU_PROCESSING"), -1, 1); + + // Change underlying mesh (note that this action creates a new field in + // the workspace that corresponds to a copy of the selected field + // modified by the change of the underlying mesh. + QString label = tr("LAB_PROCESSING_CHANGE_MESH"); + QString icon = tr("ICO_PROCESSING_CHANGE_MESH"); + int actionId; + actionId = _salomeModule->createStandardAction(label,this, SLOT(OnChangeUnderlyingMesh()),icon,label); + _salomeModule->createTool(actionId, processingToolbarId); + _salomeModule->action(actionId)->setIconVisibleInMenu(true); + _salomeModule->createMenu(actionId, processingMenuId); + + label = tr("LAB_PROCESSING_INTERPOLATE_FIELD"); + icon = tr("ICO_PROCESSING_INTERPOLATE_FIELD"); + actionId = _salomeModule->createStandardAction(label,this, SLOT(OnInterpolateField()),icon,label); + _salomeModule->createTool(actionId, processingToolbarId); + _salomeModule->action(actionId)->setIconVisibleInMenu(true); + _salomeModule->createMenu(actionId, processingMenuId); +} + +void +ProcessingController::OnChangeUnderlyingMesh() +{ + // We need a studyEditor updated on the active study + _studyEditor->updateActiveStudy(); + + // Get the selected objects in the study (SObject). In cas of a + // multiple selection, we consider only the first item. At least one + // item must be selected. + SALOME_StudyEditor::SObjectList* listOfSObject = _studyEditor->getSelectedObjects(); + if ( listOfSObject->size() > 0 ) { + SALOMEDS::SObject_var soField = listOfSObject->at(0); + int fieldId = _studyEditor->getParameterInt(soField,OBJECT_ID); + // _GBO_ : the dialog should not be modal, so that we can choose a + // mesh in the browser. Then we have to emit a signal from the + // dialog.accept, connected to a slot of the DatasourceControler + _dlgChangeUnderlyingMesh->setFieldId(fieldId); + Qt::WindowFlags flags = _dlgChangeUnderlyingMesh->windowFlags(); + _dlgChangeUnderlyingMesh->setWindowFlags(flags | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint); + _dlgChangeUnderlyingMesh->open(); + } +} + +void +ProcessingController::OnChangeUnderlyingMeshInputValidated() +{ + int meshId = _dlgChangeUnderlyingMesh->getMeshId(); + STDLOG("meshId = " << ToString(meshId)); + int fieldId = _dlgChangeUnderlyingMesh->getFieldId(); + MEDCALC::FieldHandler* fieldHandler = + MEDFactoryClient::getDataManager()->getFieldHandler(fieldId); + + // We don't modify the original field but create first a duplicate + MEDCALC::FieldHandler* duplicate = MEDFactoryClient::getCalculator()->dup(*fieldHandler); + MEDFactoryClient::getDataManager()->changeUnderlyingMesh(duplicate->id, meshId); + + // Request once more the duplicate to update the meta-data on this + // client side + duplicate = MEDFactoryClient::getDataManager()->getFieldHandler(duplicate->id); + + // >>> + // WARN: the following is a temporary code for test purpose + // Automatically add in ws + ProcessingEvent* event = new ProcessingEvent(); + event->eventtype = ProcessingEvent::EVENT_IMPORT_OBJECT; + XmedDataObject* dataObject = new XmedDataObject(); + dataObject->setFieldHandler(*duplicate); + event->objectdata = dataObject; + emit processingSignal(event); + // Note that this signal is processed by the WorkspaceController + + // Tag the item to prevent double import + //_studyEditor->setParameterBool(soField,OBJECT_IS_IN_WORKSPACE,true); +} + +void +ProcessingController::OnInterpolateField() +{ + // We need a studyEditor updated on the active study + _studyEditor->updateActiveStudy(); + + // Get the selected objects in the study (SObject). In case of a + // multiple selection, we consider only the first item. At least one + // item must be selected. + SALOME_StudyEditor::SObjectList* listOfSObject = _studyEditor->getSelectedObjects(); + if ( listOfSObject->size() > 0 ) { + SALOMEDS::SObject_var soField = listOfSObject->at(0); + int fieldId = _studyEditor->getParameterInt(soField,OBJECT_ID); + // _GBO_ : the dialog should not be modal, so that we can choose a + // mesh in the browser. Then we have to emit a signal from the + // dialog.accept, connected to a slot of the DatasourceControler + _dlgInterpolateField->setFieldId(fieldId); + Qt::WindowFlags flags = _dlgInterpolateField->windowFlags(); + _dlgInterpolateField->setWindowFlags(flags | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint); + _dlgInterpolateField->open(); + } +} + +void +ProcessingController::OnInterpolateFieldInputValidated() +{ + MEDCALC::InterpolationParameters params; + params.precision = _dlgInterpolateField->getPrecision(); + STDLOG("precision = " << params.precision); + params.defaultValue = _dlgInterpolateField->getDefaultValue(); + STDLOG("defaultValue = " << params.defaultValue); + params.reverse = _dlgInterpolateField->getReverse(); + STDLOG("reverse = " << params.reverse); + params.intersectionType = _dlgInterpolateField->getIntersectionType().c_str(); + STDLOG("intersectionType = " << params.intersectionType); + params.method = _dlgInterpolateField->getMethod().c_str(); + STDLOG("method = " << params.method); + params.nature = _dlgInterpolateField->getFieldNature().c_str(); + STDLOG("nature = " << params.nature); + + int meshId = _dlgInterpolateField->getMeshId(); + STDLOG("meshId = " << ToString(meshId)); + int fieldId = _dlgInterpolateField->getFieldId(); + MEDCALC::FieldHandler* fieldHandler = MEDFactoryClient::getDataManager()->getFieldHandler(fieldId); + + // We don't modify the original field but create first a duplicate + // MEDCALC::FieldHandler* duplicate = MEDFactoryClient::getCalculator()->dup(*fieldHandler); + //MEDFactoryClient::getDataManager()->changeUnderlyingMesh(duplicate->id, meshId); + MEDCALC::FieldHandler* result = NULL; + try { + result = MEDFactoryClient::getDataManager()->interpolateField(fieldId, meshId, params); + } + catch(...) { + STDLOG("Unable to process field interpolation; please check interpolation parameters"); + QMessageBox::critical(_salomeModule->getApp()->desktop(), + tr("Operation failed"), + tr("Unable to process field interpolation; please check interpolation parameters")); + return; + } + + // Request once more the duplicate to update the meta-data on this + // client side + // duplicate = MEDFactoryClient::getDataManager()->getFieldHandler(duplicate->id); + + // >>> + // WARN: the following is a temporary code for test purpose + // Automatically add in ws + ProcessingEvent* event = new ProcessingEvent(); + event->eventtype = ProcessingEvent::EVENT_IMPORT_OBJECT; + XmedDataObject* dataObject = new XmedDataObject(); + dataObject->setFieldHandler(*result); + event->objectdata = dataObject; + emit processingSignal(event); + // Note that this signal is processed by the WorkspaceController + + // // Tag the item to prevent double import + // //_studyEditor->setParameterBool(soField,OBJECT_IS_IN_WORKSPACE,true); +} diff --git a/src/MEDCalc/gui/ProcessingController.hxx b/src/MEDCalc/gui/ProcessingController.hxx new file mode 100644 index 000000000..f3bffe195 --- /dev/null +++ b/src/MEDCalc/gui/ProcessingController.hxx @@ -0,0 +1,77 @@ +// Copyright (C) 2016 CEA/DEN, 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, 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 +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// + +#ifndef PROCESSING_CONTROLLER_HXX +#define PROCESSING_CONTROLLER_HXX + +#include "MEDCALCGUI.hxx" + +#include "MEDEventListener_i.hxx" +#include +#include CORBA_CLIENT_HEADER(MEDDataManager) + +#include +#include +#include + +#include "XmedDataModel.hxx" +#include "DlgChangeUnderlyingMesh.hxx" +#include "DlgInterpolateField.hxx" + +typedef struct { + enum EventType { + EVENT_IMPORT_OBJECT, + EVENT_PROCESS_INTERPOLATE_FIELD, + EVENT_PROCESS_CHANGE_UNDERLYING_MESH + }; + int eventtype; + XmedDataObject* objectdata; +} ProcessingEvent; + +class MEDModule; + +class MEDCALCGUI_EXPORT ProcessingController : public QObject { + Q_OBJECT + +public: + ProcessingController(MEDModule* salomeModule); + ~ProcessingController(); + + void createActions(); + +public slots: + // Callback connected to dialog box validation signals + void OnChangeUnderlyingMeshInputValidated(); + void OnInterpolateFieldInputValidated(); + +protected slots: + void OnChangeUnderlyingMesh(); + void OnInterpolateField(); + +signals: + void processingSignal(const ProcessingEvent*); + +private: + MEDModule* _salomeModule; + SALOME_AppStudyEditor* _studyEditor; // borrowed to MEDModule + DlgChangeUnderlyingMesh* _dlgChangeUnderlyingMesh; + DlgInterpolateField* _dlgInterpolateField; +}; + +#endif /* PROCESSING_CONTROLLER_HXX */ diff --git a/src/MEDCalc/gui/WorkspaceController.cxx b/src/MEDCalc/gui/WorkspaceController.cxx index ec6f3e2b2..e98cbe532 100644 --- a/src/MEDCalc/gui/WorkspaceController.cxx +++ b/src/MEDCalc/gui/WorkspaceController.cxx @@ -611,6 +611,35 @@ void WorkspaceController::processPresentationEvent(const PresentationEvent* even } } +void +WorkspaceController::processProcessingEvent(const ProcessingEvent* event) +{ + XmedDataModel* dataModel = (XmedDataModel*)this->getDataModel(); + if ( dataModel == NULL ) { + STDLOG("No data model associated to this tree view"); + return; + } + + // >>> + // __GBO__ To know what to do we should test the type, because the + // object could be a mesh, a timeseries or a single field. We test + // here the case of a single field. Moreover, there could have + // options such that "change the underlying mesh". + // <<< + + XmedDataObject* dataObject = event->objectdata; + + if ( event->eventtype == ProcessingEvent::EVENT_IMPORT_OBJECT ) { + std::cout << "IMPORT object in workspace: " << dataObject->toString() << std::endl; + STDLOG("IMPORT object in workspace:\n"<toString()); + // _GBO_ QUESTION: tag automatically the object as a peristant object ?? + // We first add the data object to the internal data model + dataModel->addDataObject(dataObject); + // Then we request the tree view to consider this new object + this->getDataTreeModel()->addData(dataObject); + } +} + void WorkspaceController::OnSaveWorkspace() { // Dialog to get the filename where the workspace must be saved into diff --git a/src/MEDCalc/gui/WorkspaceController.hxx b/src/MEDCalc/gui/WorkspaceController.hxx index b53c73db5..5c6960767 100644 --- a/src/MEDCalc/gui/WorkspaceController.hxx +++ b/src/MEDCalc/gui/WorkspaceController.hxx @@ -27,6 +27,7 @@ #include "XmedConsoleDriver.hxx" #include "DatasourceController.hxx" #include "PresentationController.hxx" +#include "ProcessingController.hxx" #include "MEDCALCGUI.hxx" #include @@ -60,6 +61,7 @@ public slots: void processMedEvent(const MEDCALC::MedEvent* event); void processDatasourceEvent(const DatasourceEvent* event); void processPresentationEvent(const PresentationEvent* event); + void processProcessingEvent(const ProcessingEvent* event); void OnSaveWorkspace(); void OnCleanWorkspace(); diff --git a/src/MEDCalc/res/MEDCalc.png b/src/MEDCalc/res/MEDCalc.png index 85079c10f8afe9c8a5d7fa89dac7cfac52dc64dd..a32e67b2a7c892f7cfee96071ed4bd849e8b0cf1 100644 GIT binary patch literal 6721 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 diff --git a/src/MEDCalc/res/datasource_changeUnderlyingMesh.png b/src/MEDCalc/res/datasource_changeUnderlyingMesh.png deleted file mode 100644 index fe6c8b6d38fcd974db65904e2f858d590d78a202..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 798 zcmV+(1L6FMP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2ipf0 z4GIzK_{lT?00N##L_t(I%Y~D%OB-<%$G>;xXVjQ93E?EUP(!Lv#6?LXbSMN$mZsg> zK;jgU(y2ocN~aF>FQ_zBu-HWrItW>cG*&uQMT$5Wl<=!fOo9oqaJh@|?)SS6ts;%K zA9%xiJU+wY`vlW8aT&>EGFY$IL#nF6VzGQ(U0wZg*`9EjAeBnp69nO%EXz`FZ!ajN z-;2fK%S4p=7h!93vwm7#)A4xxW}6_HOb&E+cRvpV0{15;C#L}*olZ}m zoSgh*jKONPf-#2v{(dWCEOt>~0f5uf)08aB?noqpwY9YuTU+HW995;{9O z!5BkFN5`!;fhdYz&N=q?_Yn$(AW2f%k@YPAlyTrTwV^q|#hp<1oNZnwkjc4KU8410Tfn32o6W-Mbi(O$-r$@+I6vYUOG`^t z0JDDze!u@oqtSR13~G8khhm&>r*?Wj~LcLB_c_y>%!x3yYrd1Yk<+uPe9gy7)d z0F+Xgrupg0XS#^b=d%$)X1lt&5)Ow0M@L7{b^SGfsZy!b`mf*&zu*6ea~>50;p5@q c;fJ&NFZ$Or9C}m#VgLXD07*qoM6N<$f{{05dH?_b diff --git a/src/MEDCalc/res/datasource_interpolateField.png b/src/MEDCalc/res/datasource_interpolateField.png deleted file mode 100644 index 97b7c97d35d37ace24486c24ee3c72186a8319e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 836 zcmV-K1H1f*P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2i^(_ z2r~pc_}{Al00P8GL_t(2&rOm`PZLoXK)-M9o$0itw6v7cLZhuvAiPvCAdjHNC<~2B zP}GHSZ~O_ypWr`WVWNpKt_(&XF+L&+@=%Hhh>&7!OBta^OUumMdtEd!p7qID9UQoJ z7XSbd000COK{S}KJM5&aE4{X2B^v^mObG}f0U%(}27xFLQ3zckO(puh!P>SHp`HAp z>elP04yz_J0fqEmR{(&nCeHB)A_^{$32a^a))@V2E0sJa-N6f; z@%EwNaa$@jUsdt_#O%b`P~NQ+SPveR+GZa+PpKcE<%$(Y*P=lWc*c-F5Xy}td1vSzttXe zxtb#r7+G0JQShIC^jqKg18Z+`n?E-TxqVq#>er{*C!?rHwnnF~+3P>owHmoJGH#|f zlGxGzm~rGFRrp=5GBcZceVr{F(NfH!IQ%YWbIn0Z&y?9R`lhh>ajw!CrN_E!$~~mD zO4m}$?XmZ=6y>`_%Ey*uvPt@D-M?DpDr z<`UnQ9()lDWR#?T2N$6^LM6@t5s5tadEPUVC|_QBR@Z}yS`7d1Bfww4gg^4{nsQ+P O0000x diff --git a/src/MEDCalc/res/processing_changeUnderlyingMesh.png b/src/MEDCalc/res/processing_changeUnderlyingMesh.png new file mode 100644 index 0000000000000000000000000000000000000000..57980dbf1554c44bb1187e80906fe2fc74802cf0 GIT binary patch literal 750 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2jBw% z5gH>ZBJOzr00M4FL_t(Y$L*FeZxcZfg};j|S5Q&eG!&2m8Hz)QKM`nBK@%!R;twEK zXL>56G`Ij7B#Jbc1}PL!K#>?BAt(@1BB65t#Q}vXQOKj%IlOYt>$}K6!$>3D&ff06 zoq02}Fa;4@5Ihv@2v!AG1;_YTBDiZ{WV$LibCkWJDFNyMan96h;IVyoBR9_0)Pc*u zoSB{g-Ac~(r+@|Ex*6^R4uAr5-B=NvxniLG3N`$#7NWDW+L31YO-wo4D z`Xl3U2V~(WDldU$;D_n5+44A~1hfnK3hEoLCILzWNeK^C1vSBvX-!ZKEs+<(q)4VI zKhvhMZWM%ipg0sROZ}sij3T@n1)$j34!OKxh^)9erRA zcmv#wTz|}ZWM>qhpe|Sxbglng3~;Ylii3J5`EJYl3>~m;fzN?`Yo@-mA-YwhhXE%{ zGmi}-ml#xl55QaCy#4SIxCcB7>^p}mg7q;kgwPXp&n~=~H(vo>0iDsOBt-qdJ-02j g{a594{>xvGU*ZXLU>y$Vp8x;=07*qoM6N<$f^_LPF8}}l literal 0 HcmV?d00001 diff --git a/src/MEDCalc/res/processing_interpolateField.png b/src/MEDCalc/res/processing_interpolateField.png new file mode 100644 index 0000000000000000000000000000000000000000..62750404f66c7b1e4178e2011a407faa7850e90f GIT binary patch literal 2280 zcmVP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2jBw% z5f=$WH(BBU00?MFL_t(Y$BmbHjMdc@$3N%Z-|ua+y?JkT-VFN;AQBNGI4W2XBXuEG z`j=u$Qf(s@L}Od34PvW_HHx*?rBMlPDN$-sLjWC^YCvio_JZugHp6Vp^5)H(_ulV! zZ~p+AP(b|tbN;zE=X1`z67O& zSpm)U1F(3ycd^62+)^zsPd$DX=F1X>ay2spGr85D&gcWf39Jbgng&&?y7Q($$7KAc z=8ffLfa5^=1*m=GazF)}6d9$+UV9#dH2M)$@?McIA6Mi1K9l~wjhvYHwJTy>J4VkY z$6RWe%#YjxX0=1f$He?kna)XW6R7Klq854!POxD3gS-uJ0we+Udt~UW^41lyup+?^ z`z8_HS&w`*QQ2MNOYA`FxKL_Q*EqLRmYz!JRGGM215s}iBh^Xj zl^Jza(!TIPGo7WwZvL0ee)56j@sQ1rA+emb&Pl?4yNuN^E(?*PC~rHyJ%HAoRME?` zN6Tm%+D=m5tUwc9{%^I~Q2nw@joTo3R2O0r6~9ATkJafo(;rQ~0V4bQj}Qn%^H+lmk>|v8|WL zkizeo0hxLtN|R8K=z-uiTV?m!>m8V!L|5;^k8K6F$xJx1hS%*~h3R=?;9S%VK+EZd-)Kyd_CH?23oz z)8A&&Lpdl~wMMX%fm;kJ0?I{{MYIJ4QGtg$pbVh&qCf!rZXcnNv`ScYI9NXlP7HJav_g~xZ6V;B;ufuz zSO_y~-YU9+Z?yMUve{^k#IcM5ry7U?VL;;`_-9+|fi{=`Pzm=r|B=wwsTUh_fk#^p3>p zF(6f7qhKS5b+A^zz-R*tS|I?Cycb%}E7_B)498#B0MqV?y+M~+o=PQXvaTGCVyOnF z3Zw`m1adZ71z_a?3*(qPyOr+JKezP`F>A5`ww8f+6*v>XPklaDq*JmZ2<%=H!X z0LH!x19zS&od%$%2}65VzHm?scoj?-EB6t{U zP|6bRc2xc{WB+*eSEF!(&^#KE5a|i~{g2vi$ zi=p|srAv2m&)lQFZ|*o27|ctBdL$mjmK2Kw!-5Tf?;^f~F+r3KQREje=Kf+fz1mIZ zOAY5TbWR`US(>hO`0Fkcw+jxYuV}flE0n5p!#z@$hmDDd=>xAHtdAHFBY@xxy6Vbh zp8b63dmFYgXRedc#WVH?GMscftXGT_41v4~aLW}cCQ8NdrBswEBM~0OuovdgxO5}Q z^MN=5S4@Vr+iiO9>I^@a*_A6)vswbZkw9cXstd8vfQYq_GiOVnFvdmU*mzfg8uh1? zUA6T6hK<~{V5}#@#~%)dWtZD!j)l_FTY}9dtaw8$G6I}Ba%v>nA3<$%Emh7kY0?+G zOl!AW*8alb-ER!5zdp>JcNF)B!Z#dtJIRF7wzvd|mI{F)g+#yxQGOWT=Amo>qk5_- zeW`^{x$dJzPN$|Zcx56Ps+B!%#5B36odsEcPjS}YUyAy+Tsb=v4tvTKO?hVg_7ris z=!dfKVR&(fLLM{D;`htFn~uIs`GH#s3O6vFW^+ppHK`veTOiOZNQ+pL#MnWrJy(bq znubab= z;A;#`#i`i~ktS0R*k>!97E_iTaN`+8A(p7k;CWdNdbas+sr~t(D%QhCcSHC!+-Q(^ z{yR(>{x_bBY-gM#zk6c5K(+A4Hx<9S!2mGhllhdDJWq8fNL@daoq|X^6tzRasXiq~ z+8vsA6x!Bp`Pt;2K+^g5{(A4k89yuTg7P$6vjJk6^W3yp=voNuzZ?)y_bAlN7d{(d z0U^Bdaf+*cLrGyC)w-V%rj?0i3sX{Sso1-Pj&-e!`5=Ay{o*UAx3KwptRfev=4pZS zIrt!~d