X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCalc%2Fgui%2FPresentationController.cxx;h=93c5eef0c191c752a5adb6654b1f59368f789503;hb=70087ddf60110c529327c7016daf1cd96e86df19;hp=7ea2bc26de31002bc0ea2e060e6e25bb8182c70a;hpb=ac322e3094a38d268a2cc56e58ab05206a67436b;p=modules%2Fmed.git diff --git a/src/MEDCalc/gui/PresentationController.cxx b/src/MEDCalc/gui/PresentationController.cxx index 7ea2bc26d..93c5eef0c 100644 --- a/src/MEDCalc/gui/PresentationController.cxx +++ b/src/MEDCalc/gui/PresentationController.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2016-2020 CEA/DEN, EDF R&D +// Copyright (C) 2016-2021 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 @@ -33,6 +33,9 @@ #include "MEDPresentationSlices.hxx" #include "MEDPresentationPointSprite.hxx" #include "MEDPresentationVectorField.hxx" +#include "MEDPresentationPlot3D.hxx" +#include "MEDPresentationStreamLines.hxx" +#include "MEDPresentationCutSegment.hxx" #include "MEDPresentationDeflectionShape.hxx" #include "MEDWidgetHelperMeshView.hxx" @@ -40,6 +43,9 @@ #include "MEDWidgetHelperContour.hxx" #include "MEDWidgetHelperSlices.hxx" #include "MEDWidgetHelperPointSprite.hxx" +#include "MEDWidgetHelperPlot3D.hxx" +#include "MEDWidgetHelperStreamLines.hxx" +#include "MEDWidgetHelperCutSegment.hxx" #include "MEDWidgetHelperVectorField.hxx" #include "MEDWidgetHelperDeflectionShape.hxx" @@ -58,6 +64,7 @@ #include #include #include +#include #include "MEDFactoryClient.hxx" @@ -180,7 +187,8 @@ PresentationController::createActions() label = tr("LAB_PRESENTATION_SCALAR_MAP"); tooltip = tr("TIP_PRESENTATION_SCALAR_MAP"); icon = tr(_getIconName("ICO_PRESENTATION_SCALAR_MAP").c_str()); - actionId = _salomeModule->createStandardAction(label,this, SLOT(onVisualizeScalarMap()),icon,tooltip); + actionId = _salomeModule->createStandardAction(label, this, SLOT(onVisualizeScalarMap()), + icon, tooltip, FIELDSOp::OpScalarMap); _salomeModule->createTool(actionId, presentationToolbarId); _salomeModule->action(actionId)->setIconVisibleInMenu(true); _salomeModule->createMenu(actionId, presentationMenuId); @@ -188,7 +196,8 @@ PresentationController::createActions() label = tr("LAB_PRESENTATION_CONTOUR"); tooltip = tr("TIP_PRESENTATION_CONTOUR"); icon = tr(_getIconName("ICO_PRESENTATION_CONTOUR").c_str()); - actionId = _salomeModule->createStandardAction(label,this, SLOT(onVisualizeContour()),icon,tooltip); + actionId = _salomeModule->createStandardAction(label, this, SLOT(onVisualizeContour()), + icon, tooltip, FIELDSOp::OpContour); _salomeModule->createTool(actionId, presentationToolbarId); _salomeModule->action(actionId)->setIconVisibleInMenu(true); _salomeModule->createMenu(actionId, presentationMenuId); @@ -196,7 +205,8 @@ PresentationController::createActions() label = tr("LAB_PRESENTATION_VECTOR_FIELD"); tooltip = tr("TIP_PRESENTATION_VECTOR_FIELD"); icon = tr(_getIconName("ICO_PRESENTATION_VECTOR_FIELD").c_str()); - actionId = _salomeModule->createStandardAction(label,this, SLOT(onVisualizeVectorField()),icon,tooltip); + actionId = _salomeModule->createStandardAction(label, this, SLOT(onVisualizeVectorField()), + icon, tooltip, FIELDSOp::OpVectorFields); _salomeModule->createTool(actionId, presentationToolbarId); _salomeModule->action(actionId)->setIconVisibleInMenu(true); _salomeModule->createMenu(actionId, presentationMenuId); @@ -204,7 +214,8 @@ PresentationController::createActions() label = tr("LAB_PRESENTATION_SLICES"); tooltip = tr("TIP_PRESENTATION_SLICES"); icon = tr(_getIconName("ICO_PRESENTATION_SLICES").c_str()); - actionId = _salomeModule->createStandardAction(label,this, SLOT(onVisualizeSlices()),icon,tooltip); + actionId = _salomeModule->createStandardAction(label, this, SLOT(onVisualizeSlices()), + icon, tooltip, FIELDSOp::OpSlices); _salomeModule->createTool(actionId, presentationToolbarId); _salomeModule->action(actionId)->setIconVisibleInMenu(true); _salomeModule->createMenu(actionId, presentationMenuId); @@ -212,7 +223,8 @@ PresentationController::createActions() label = tr("LAB_PRESENTATION_DEFLECTION_SHAPE"); tooltip = tr("TIP_PRESENTATION_DEFLECTION_SHAPE"); icon = tr(_getIconName("ICO_PRESENTATION_DEFLECTION_SHAPE").c_str()); - actionId = _salomeModule->createStandardAction(label,this, SLOT(onVisualizeDeflectionShape()),icon,tooltip); + actionId = _salomeModule->createStandardAction(label, this, SLOT(onVisualizeDeflectionShape()), + icon, tooltip, FIELDSOp::OpDeflectionShape); _salomeModule->createTool(actionId, presentationToolbarId); _salomeModule->action(actionId)->setIconVisibleInMenu(true); _salomeModule->createMenu(actionId, presentationMenuId); @@ -220,11 +232,42 @@ PresentationController::createActions() label = tr("LAB_PRESENTATION_POINT_SPRITE"); tooltip = tr("TIP_PRESENTATION_POINT_SPRITE"); icon = tr(_getIconName("ICO_PRESENTATION_POINT_SPRITE").c_str()); - actionId = _salomeModule->createStandardAction(label,this, SLOT(onVisualizePointSprite()),icon,tooltip); + actionId = _salomeModule->createStandardAction(label, this, SLOT(onVisualizePointSprite()), + icon, tooltip, FIELDSOp::OpPointSprite); _salomeModule->createTool(actionId, presentationToolbarId); _salomeModule->action(actionId)->setIconVisibleInMenu(true); _salomeModule->createMenu(actionId, presentationMenuId); + // sphinx doc: begin of plot3d gui items + label = tr("LAB_PRESENTATION_PLOT3D"); + tooltip = tr("TIP_PRESENTATION_PLOT3D"); + icon = tr(_getIconName("ICO_PRESENTATION_PLOT3D").c_str()); + actionId = _salomeModule->createStandardAction(label, this, SLOT(onVisualizePlot3D()), + icon, tooltip, FIELDSOp::OpPlot3D); + _salomeModule->createTool(actionId, presentationToolbarId); + _salomeModule->action(actionId)->setIconVisibleInMenu(true); + _salomeModule->createMenu(actionId, presentationMenuId); + // sphinx doc: end of plot3d gui items + + label = tr("LAB_PRESENTATION_STREAM_LINES"); + tooltip = tr("TIP_PRESENTATION_STREAM_LINES"); + icon = tr(_getIconName("ICO_PRESENTATION_STREAM_LINES").c_str()); + actionId = _salomeModule->createStandardAction(label, this, SLOT(onVisualizeStreamLines()), + icon, tooltip, FIELDSOp::OpStreamLines); + _salomeModule->createTool(actionId, presentationToolbarId); + _salomeModule->action(actionId)->setIconVisibleInMenu(true); + _salomeModule->createMenu(actionId, presentationMenuId); + + label = tr("LAB_PRESENTATION_CUT_SEGMENT"); + tooltip = tr("TIP_PRESENTATION_CUT_SEGMENT"); + icon = tr(_getIconName("ICO_PRESENTATION_CUT_SEGMENT").c_str()); + actionId = _salomeModule->createStandardAction(label, this, SLOT(onVisualizeCutSegment()), + icon, tooltip, FIELDSOp::OpCutSegment); + _salomeModule->createTool(actionId, presentationToolbarId); + _salomeModule->action(actionId)->setIconVisibleInMenu(true); + _salomeModule->createMenu(actionId, presentationMenuId); + + // Separator _salomeModule->createMenu(_salomeModule->separator(), presentationMenuId); @@ -289,12 +332,11 @@ PresentationController::visualize(PresentationEvent::EventType eventType) // For each object, emit a signal to the workspace to request a // visualisation using the tui command (so that the user can see how // to make a view of an object from the tui console). - for (int i=0; isize(); i++) { + for (int i=0; i<(int)listOfSObject->size(); i++) { SALOMEDS::SObject_var soObj = listOfSObject->at(i); std::string name(_studyEditor->getName(soObj)); if (soObj->_is_nil() || name == "MEDCalc") return; - int fieldId = _salomeModule->getIntParamFromStudyEditor(soObj, FIELD_ID); int meshId = _salomeModule->getIntParamFromStudyEditor(soObj, MESH_ID); MEDCALC::FieldHandler* fieldHandler = 0; @@ -317,12 +359,10 @@ PresentationController::visualize(PresentationEvent::EventType eventType) if ( fieldSeriesId < 0) continue; - MEDCALC::FieldHandlerList* fieldHandlerList = MEDFactoryClient::getDataManager()->getFieldListInFieldseries(fieldSeriesId); - if (fieldHandlerList->length() < 0) - continue; - // For a field series, get the first real field entry: - MEDCALC::FieldHandler fieldHandler = (*fieldHandlerList)[0]; - fieldId = fieldHandler.id; + // get the current timestamp + double timestamp = _salomeModule->getCurrentAnimationTimestamp(); + // get the field id a the current timestamp + fieldId = MEDFactoryClient::getDataManager()->getFieldIdAtTimestamp(fieldSeriesId, timestamp); } fieldHandler = MEDFactoryClient::getDataManager()->getFieldHandler(fieldId); } @@ -384,6 +424,31 @@ PresentationController::onVisualizePointSprite() this->visualize(PresentationEvent::EVENT_VIEW_OBJECT_POINT_SPRITE); } +// sphinx doc: begin of onVisualizePlot3D +void +PresentationController::onVisualizePlot3D() +{ + this->visualize(PresentationEvent::EVENT_VIEW_OBJECT_PLOT3D); +} +// sphinx doc: end of onVisualizePlot3D + +void +PresentationController::onVisualizeStreamLines() +{ + this->visualize(PresentationEvent::EVENT_VIEW_OBJECT_STREAM_LINES); +} + +void +PresentationController::onVisualizeCutSegment() +{ + // Cut segment presentation "creates" new view, so switch off visibility state update + // because pqActiveObjects::viewChanged is emmited + _salomeModule->visibilityStateUpdateOff(); + this->visualize(PresentationEvent::EVENT_VIEW_OBJECT_CUT_SEGMENT); + _salomeModule->visibilityStateUpdateOn(); + _salomeModule->updateVisibilityState(); +} + void PresentationController::onDeletePresentation() { @@ -391,7 +456,7 @@ PresentationController::onDeletePresentation() SALOME_StudyEditor::SObjectList* listOfSObject = _studyEditor->getSelectedObjects(); // For each object, emit a signal to the workspace to request pres deletion - for (int i=0; isize(); i++) { + for (int i=0; i<(int)listOfSObject->size(); i++) { SALOMEDS::SObject_var soPres = listOfSObject->at(i); std::string name(_studyEditor->getName(soPres)); if (soPres->_is_nil() || name == "MEDCalc") @@ -436,10 +501,11 @@ PresentationController::getColorMapPython() const QString PresentationController::getScalarBarRangePython() const { - MEDCALC::ScalarBarRangeType colorMap = getSelectedScalarBarRange(); - switch(colorMap) { + MEDCALC::ScalarBarRangeType scalarBarRange = getSelectedScalarBarRange(); + switch(scalarBarRange) { case MEDCALC::SCALAR_BAR_ALL_TIMESTEPS: return "MEDCALC.SCALAR_BAR_ALL_TIMESTEPS"; case MEDCALC::SCALAR_BAR_CURRENT_TIMESTEP: return "MEDCALC.SCALAR_BAR_CURRENT_TIMESTEP"; + case MEDCALC::SCALAR_BAR_CUSTOM_RANGE: return "MEDCALC.SCALAR_BAR_CUSTOM_RANGE"; } return QString(); } @@ -472,6 +538,19 @@ PresentationController::getSliceOrientationPython(const int orientation) const return QString(); } +QString +PresentationController::getIntegrDirTypePython(const int intDir) const +{ + MEDCALC::IntegrationDirType type = static_cast(intDir); + switch(type) { + case MEDCALC::INTEGRATION_DIR_BOTH: return "MEDCALC.INTEGRATION_DIR_BOTH"; + case MEDCALC::INTEGRATION_DIR_FORWARD: return "MEDCALC.INTEGRATION_DIR_FORWARD"; + case MEDCALC::INTEGRATION_DIR_BACKWARD: return "MEDCALC.INTEGRATION_DIR_BACKWARD"; + } + return QString(); +} + + std::string PresentationController::getPresTypeFromWidgetHelper(int presId) const { @@ -481,6 +560,12 @@ PresentationController::getPresTypeFromWidgetHelper(int presId) const return "UNKNOWN"; } +void +PresentationController::emitPresentationSignal(const PresentationEvent* event) +{ + emit presentationSignal(event); +} + void PresentationController::processPresentationEvent(const PresentationEvent* event) { // --> Send commands to SALOME Python console @@ -524,7 +609,24 @@ PresentationController::processPresentationEvent(const PresentationEvent* event) .arg(fieldHandler->id).arg(viewMode).arg(scalarBarRange).arg(colorMap); commands += QString("presentation_id"); } - else if ( event->eventtype == PresentationEvent::EVENT_VIEW_OBJECT_DEFLECTION_SHAPE ) { + // sphinx doc: begin of plot3d prs creation + else if ( event->eventtype == PresentationEvent::EVENT_VIEW_OBJECT_PLOT3D ) { + commands += QString("presentation_id = medcalc.MakePlot3D(accessField(%1), viewMode=%2, scalarBarRange=%3, colorMap=%4)") + .arg(fieldHandler->id).arg(viewMode).arg(scalarBarRange).arg(colorMap); + commands += QString("presentation_id"); + } + // sphinx doc: end of plot3d prs creation + else if ( event->eventtype == PresentationEvent::EVENT_VIEW_OBJECT_STREAM_LINES ) { + commands += QString("presentation_id = medcalc.MakeStreamLines(accessField(%1), viewMode=%2, scalarBarRange=%3, colorMap=%4)") + .arg(fieldHandler->id).arg(viewMode).arg(scalarBarRange).arg(colorMap); + commands += QString("presentation_id"); + } + else if ( event->eventtype == PresentationEvent::EVENT_VIEW_OBJECT_CUT_SEGMENT ) { + commands += QString("presentation_id = medcalc.MakeCutSegment(accessField(%1), viewMode=%2, scalarBarRange=%3, colorMap=%4)") + .arg(fieldHandler->id).arg(viewMode).arg(scalarBarRange).arg(colorMap); + commands += QString("presentation_id"); + } + else if ( event->eventtype == PresentationEvent::EVENT_VIEW_OBJECT_DEFLECTION_SHAPE ) { commands += QString("presentation_id = medcalc.MakeDeflectionShape(accessField(%1), viewMode=%2, scalarBarRange=%3, colorMap=%4)") .arg(fieldHandler->id).arg(viewMode).arg(scalarBarRange).arg(colorMap); commands += QString("presentation_id"); @@ -544,9 +646,20 @@ PresentationController::processPresentationEvent(const PresentationEvent* event) commands += QString("medcalc.Update%1(%2, params)").arg(QString::fromStdString(typ)).arg(event->presentationId); } else if ( event->eventtype == PresentationEvent::EVENT_CHANGE_TIME_RANGE ) { + bool customRangeFlag = + (bool)_presManager->getPresentationIntProperty(event->presentationId, MEDPresentation::PROP_HIDE_DATA_OUTSIDE_CUSTOM_RANGE.c_str()); std::string typ = getPresTypeFromWidgetHelper(event->presentationId); commands += QString("params = medcalc.Get%1Parameters(%2)").arg(QString::fromStdString(typ)).arg(event->presentationId); commands += QString("params.scalarBarRange = %1").arg(getScalarBarRangePython()); + if (getSelectedScalarBarRange() == MEDCALC::SCALAR_BAR_CUSTOM_RANGE) { + commands += QString("params.scalarBarRangeArray = [%1, %2]").arg(event->aDouble1).arg(event->aDouble2); + } + else { + if (customRangeFlag) // switch off hideDataOutsideCustomRange + { + commands += QString("params.hideDataOutsideCustomRange = False"); + } + } commands += QString("medcalc.Update%1(%2, params)").arg(QString::fromStdString(typ)).arg(event->presentationId); } else if ( event->eventtype == PresentationEvent::EVENT_CHANGE_NB_CONTOUR ) { @@ -573,9 +686,100 @@ PresentationController::processPresentationEvent(const PresentationEvent* event) commands += QString("params.orientation = %1").arg(getSliceOrientationPython(event->anInteger)); commands += QString("medcalc.UpdateSlices(%1, params)").arg(event->presentationId); } + // sphinx doc: begin of plot3d prs update + else if ( event->eventtype == PresentationEvent::EVENT_CHANGE_PLANE_POS ) { + std::string typ = getPresTypeFromWidgetHelper(event->presentationId); + commands += QString("params = medcalc.GetPlot3DParameters(%2)").arg(event->presentationId); + commands += QString("params.planePos = %1").arg(event->aDouble3); + commands += QString("medcalc.UpdatePlot3D(%1, params)").arg(event->presentationId); + } + else if ( event->eventtype == PresentationEvent::EVENT_CHANGE_NORMAL ) { + std::string typ = getPresTypeFromWidgetHelper(event->presentationId); + commands += QString("params = medcalc.GetPlot3DParameters(%2)").arg(event->presentationId); + commands += QString("params.planeNormal = [%1, %2, %3]").arg(event->aDoubleN[0]).arg(event->aDoubleN[1]).arg(event->aDoubleN[2]); + commands += QString("medcalc.UpdatePlot3D(%1, params)").arg(event->presentationId); + } + // sphinx doc: end of plot3d prs update + else if ( event->eventtype == PresentationEvent::EVENT_CHANGE_CUT_POINT1 ) { + std::string typ = getPresTypeFromWidgetHelper(event->presentationId); + commands += QString("params = medcalc.GetCutSegmentParameters(%2)").arg(event->presentationId); + commands += QString("params.point1 = [%1, %2, %3]").arg(event->aDoubleP1[0]).arg(event->aDoubleP1[1]).arg(event->aDoubleP1[2]); + commands += QString("medcalc.UpdateCutSegment(%1, params)").arg(event->presentationId); + } + else if ( event->eventtype == PresentationEvent::EVENT_CHANGE_CUT_POINT2 ) { + std::string typ = getPresTypeFromWidgetHelper(event->presentationId); + commands += QString("params = medcalc.GetCutSegmentParameters(%2)").arg(event->presentationId); + commands += QString("params.point2 = [%1, %2, %3]").arg(event->aDoubleP2[0]).arg(event->aDoubleP2[1]).arg(event->aDoubleP2[2]); + commands += QString("medcalc.UpdateCutSegment(%1, params)").arg(event->presentationId); + } + else if ( event->eventtype == PresentationEvent::EVENT_CHANGE_INTEGR_DIR ) { + std::string typ = getPresTypeFromWidgetHelper(event->presentationId); + commands += QString("params = medcalc.GetStreamLinesParameters(%2)").arg(event->presentationId); + commands += QString("params.integrDir = %1").arg(getIntegrDirTypePython(event->anInteger)); + commands += QString("medcalc.UpdateStreamLines(%1, params)").arg(event->presentationId); + } + else if ( event->eventtype == PresentationEvent::EVENT_CHANGE_CONTOUR_COMPONENT) { + std::string typ = getPresTypeFromWidgetHelper(event->presentationId); + commands += QString("params = medcalc.GetContourParameters(%2)").arg(event->presentationId); + commands += QString("params.contourComponent = '%1'").arg(event->aString.c_str()); + commands += QString("medcalc.UpdateContour(%1, params)").arg(event->presentationId); + } + else if ( event->eventtype == PresentationEvent::EVENT_CHANGE_SCALE_FACTOR ) { + std::string typ = getPresTypeFromWidgetHelper(event->presentationId); + commands += QString("params = medcalc.GetVectorFieldParameters(%2)").arg(event->presentationId); + commands += QString("params.scaleFactor = %1").arg(event->aDouble3); + commands += QString("medcalc.UpdateVectorField(%1, params)").arg(event->presentationId); + } + + else if (event->eventtype == PresentationEvent::EVENT_CHANGE_CUSTOM_SCALE_FACTOR) { + std::string typ = getPresTypeFromWidgetHelper(event->presentationId); + commands += QString("params = medcalc.GetVectorFieldParameters(%2)").arg(event->presentationId); + commands += QString("params.customScaleFactor = %1").arg(event->anInteger); + if(event->anInteger) { + commands += QString("params.scaleFactor = %1").arg(event->aDouble3); + } + commands += QString("medcalc.UpdateVectorField(%1, params)").arg(event->presentationId); + } else if ( event->eventtype == PresentationEvent::EVENT_DELETE_PRESENTATION ) { commands += QString("medcalc.RemovePresentation(%1)").arg(event->presentationId); + + } + else if (event->eventtype == PresentationEvent::EVENT_DISPLAY_PRESENTATION || + event->eventtype == PresentationEvent::EVENT_ERASE_PRESENTATION) { + commands += QString("params = medcalc.Get%1Parameters(%2)").arg(QString::fromStdString(getPresTypeFromWidgetHelper(event->presentationId))) + .arg(event->presentationId); + QString visility = event->eventtype == PresentationEvent::EVENT_DISPLAY_PRESENTATION ? QString("True") : QString("False"); + commands += QString("params.visibility = %1").arg(visility); + commands += QString("medcalc.Update%1(%2, params)").arg(QString::fromStdString(getPresTypeFromWidgetHelper(event->presentationId))) + .arg(event->presentationId); + } + else if (event->eventtype == PresentationEvent::EVENT_SCALAR_BAR_VISIBILITY_CHANGED || + event->eventtype == PresentationEvent::EVENT_HIDE_DATA_OUTSIDE_CUSTOM_RANGE_CHANGED) { + std::string typ = getPresTypeFromWidgetHelper(event->presentationId); + QString param; + switch (event->eventtype) { + case PresentationEvent::EVENT_SCALAR_BAR_VISIBILITY_CHANGED: + param = QString("scalarBarVisibility"); + break; + case PresentationEvent::EVENT_HIDE_DATA_OUTSIDE_CUSTOM_RANGE_CHANGED: + param = QString("hideDataOutsideCustomRange"); + break; + default: break; + } + commands += QString("params = medcalc.Get%1Parameters(%2)").arg(QString::fromStdString(typ)).arg(event->presentationId); + commands += QString("params.%1 = %2").arg(param).arg( event->anInteger ? QString("True") : QString("False")); + if (event->eventtype == PresentationEvent::EVENT_HIDE_DATA_OUTSIDE_CUSTOM_RANGE_CHANGED && event->anInteger) { + commands += QString("params.scalarBarRangeArray = [%1, %2]").arg(event->aDouble1).arg(event->aDouble2); + } + commands += QString("medcalc.Update%1(%2, params)").arg(QString::fromStdString(typ)).arg(event->presentationId); + } + else if (event->eventtype == PresentationEvent::EVENT_CUSTOM_RANGE_CHANGED) + { + std::string typ = getPresTypeFromWidgetHelper(event->presentationId); + commands += QString("params = medcalc.Get%1Parameters(%2)").arg(QString::fromStdString(typ)).arg(event->presentationId); + commands += QString("params.scalarBarRangeArray = [%1, %2]").arg(event->aDouble1).arg(event->aDouble2); + commands += QString("medcalc.Update%1(%2, params)").arg(QString::fromStdString(typ)).arg(event->presentationId); } else { STDLOG("The event "<eventtype<<" is not implemented yet"); @@ -584,7 +788,7 @@ PresentationController::processPresentationEvent(const PresentationEvent* event) } MEDWidgetHelper * -PresentationController::findOrCreateWidgetHelper(MEDCALC::MEDPresentationManager_ptr presManager, +PresentationController::findOrCreateWidgetHelper(MEDCALC::MEDPresentationManager_ptr /*presManager*/, // todo: unused int presId, const std::string& type, const std::string& name ) { std::map::const_iterator it =_presHelperMap.find(presId); @@ -603,12 +807,17 @@ PresentationController::findOrCreateWidgetHelper(MEDCALC::MEDPresentationManager wh = new MEDWidgetHelperVectorField(this, _presManager, presId, name, _widgetPresentationParameters); else if (type == MEDPresentationPointSprite::TYPE_NAME) wh = new MEDWidgetHelperPointSprite(this, _presManager, presId, name, _widgetPresentationParameters); + else if (type == MEDPresentationPlot3D::TYPE_NAME) + wh = new MEDWidgetHelperPlot3D(this, _presManager, presId, name, _widgetPresentationParameters); + else if (type == MEDPresentationStreamLines::TYPE_NAME) + wh = new MEDWidgetHelperStreamLines(this, _presManager, presId, name, _widgetPresentationParameters); + else if (type == MEDPresentationCutSegment::TYPE_NAME) + wh = new MEDWidgetHelperCutSegment(this, _presManager, presId, name, _widgetPresentationParameters); else if (type == MEDPresentationDeflectionShape::TYPE_NAME) wh = new MEDWidgetHelperDeflectionShape(this, _presManager, presId, name, _widgetPresentationParameters); else { - const char * msg ="findOrCreateWidgetHelper(): NOT IMPLEMENTED !!!"; - STDLOG(msg); + STDLOG("findOrCreateWidgetHelper(): NOT IMPLEMENTED !!!"); return wh; } _presHelperMap[presId] = wh; @@ -646,7 +855,7 @@ PresentationController::onParavisDump() SALOME_StudyEditor::SObjectList* listOfSObject = _studyEditor->getSelectedObjects(); // For the first object only, request the dump - for (int i=0; isize(); i++) { + for (int i=0; i<(int)listOfSObject->size(); i++) { SALOMEDS::SObject_var soPres = listOfSObject->at(i); std::string name(_studyEditor->getName(soPres)); if (soPres->_is_nil() || name == "MEDCalc") @@ -713,6 +922,7 @@ PresentationController::updateTreeViewWithNewPresentation(long dataId, long pres int presId = -1; _salomeModule->itemClickGeneric(name, type, presId); onPresentationSelected(presId, QString::fromStdString(type), QString::fromStdString(name)); + updateVisibilityState(presId); } void @@ -763,6 +973,9 @@ PresentationController::processWorkspaceEvent(const MEDCALC::MedEvent* event) else { updateTreeViewWithNewPresentation(event->dataId, event->presentationId); _dealWithReplaceMode(); + // Update parameter widget if shown: some parameters should be updated after presentation has been added + if (_currentWidgetHelper) + _currentWidgetHelper->updateWidget(false); } } else if ( event->type == MEDCALC::EVENT_REMOVE_PRESENTATION ) { @@ -775,6 +988,9 @@ PresentationController::processWorkspaceEvent(const MEDCALC::MedEvent* event) if(_currentWidgetHelper) _currentWidgetHelper->updateWidget(false); } + else if (event->type == MEDCALC::EVENT_VISIBILITY_CHANGED) { + updateVisibilityState(event->presentationId); + } } void @@ -782,3 +998,17 @@ PresentationController::showDockWidgets(bool isVisible) { _dockWidget->setVisible(isVisible); } + +void PresentationController::updateVisibilityState(long presId) +{ + char* str = _salomeModule->engine()->getStudyPresentationEntry(presId); + if (str) { + QStringList entries; + entries.append(str); + _salomeModule->updateVisibilityState(false, entries); + } +} + +std::string PresentationController::presentationName2Type(const std::string& name) { + return std::regex_replace(name, std::regex("MEDPresentation"), std::string("")); +} \ No newline at end of file