X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FMEDCalc%2Fcmp%2FMEDPresentationScalarMap.cxx;h=2f969abb07d160a53deb49248d8f8f5f9f76aa6d;hb=9a9f81053e1e8fa736b90baf2843b49e6df8af81;hp=0beac00ac6633b055eea35309173a9f0e6b137f5;hpb=7acfe5d0690db25de950d8f6599df319e3f93dfe;p=modules%2Fmed.git diff --git a/src/MEDCalc/cmp/MEDPresentationScalarMap.cxx b/src/MEDCalc/cmp/MEDPresentationScalarMap.cxx index 0beac00ac..2f969abb0 100644 --- a/src/MEDCalc/cmp/MEDPresentationScalarMap.cxx +++ b/src/MEDCalc/cmp/MEDPresentationScalarMap.cxx @@ -1,42 +1,90 @@ +// 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 +// 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 "MEDPyLockWrapper.hxx" + #include "MEDPresentationScalarMap.hxx" +#include "MEDPresentationException.hxx" + +#include +#undef LOG // should be fixed in KERNEL - double definition +#include + +#include + +const std::string MEDPresentationScalarMap::TYPE_NAME = "MEDPresentationScalarMap"; + +MEDPresentationScalarMap::MEDPresentationScalarMap(const MEDCALC::ScalarMapParameters& params, + const MEDCALC::ViewModeType viewMode) : + MEDPresentation(params.fieldHandlerId, TYPE_NAME, viewMode, params.colorMap, params.scalarBarRange), _params(params) +{ +} void MEDPresentationScalarMap::internalGeneratePipeline() { - //MEDPresentation::TypeID fieldHandlerId = params.fieldHandlerId; - //MEDCALC::MEDPresentationViewMode viewMode = params.viewMode; - - // :TODO: consider viewMode - - /* - MEDCALC::MEDDataManager_ptr dataManager(MEDFactoryClient::getDataManager()); - MEDCALC::FieldHandler* fieldHandler = dataManager->getFieldHandler(fieldHandlerId); - - std::cout << "\tfieldHandlerId: " << fieldHandlerId << std::endl; - std::cout << "\tviewMode: " << viewMode << std::endl; - - MEDCALC::MeshHandler* meshHandler = dataManager->getMesh(fieldHandler->meshid); - MEDCALC::DatasourceHandler* dataSHandler = dataManager->getDatasourceHandlerFromID(meshHandler->sourceid); - std::cout << "\tfileName: " << dataSHandler->uri << std::endl; - std::cout << "\tfiedName: " << fieldHandler->fieldname << std::endl; - */ - - PyGILState_STATE _gil_state = PyGILState_Ensure(); - - std::string cmd = std::string("import pvsimple as pvs;"); - cmd += std::string("__obj1 = pvs.MEDReader(FileName='") + _fileName + std::string("');"); - cmd += std::string("__disp1 = pvs.Show(__obj1);"); - cmd += std::string("pvs.ColorBy(__disp1, ('") + _fieldType + std::string("', '") + _fieldName + std::string("'));"); - cmd += std::string("pvs.GetActiveViewOrCreate('RenderView').ResetCamera();"); - cmd += std::string("__disp1.RescaleTransferFunctionToDataRangeOverTime();"); - - //std::cerr << "Python command:" << std::endl; - //std::cerr << cmd << std::endl; - PyRun_SimpleString(cmd.c_str()); - // Retrieve Python object for internal storage: - PyObject * obj = getPythonObjectFromMain("__obj1"); - PyObject * disp = getPythonObjectFromMain("__disp1"); - pushInternal(obj, disp); - - PyGILState_Release(_gil_state); + MEDPresentation::internalGeneratePipeline(); + + MEDPyLockWrapper lock; + + setOrCreateRenderView(); // instantiate __viewXXX + createSource(); + setTimestamp(); + + // Populate internal array of available components: + fillAvailableFieldComponents(); + + // Nothing to do in a scalar map, obj = source: + pushAndExecPyLine(_objVar + " = " + _srcObjVar); + + showObject(); + + colorBy(); + showScalarBar(); + selectColorMap(); + rescaleTransferFunction(); + resetCameraAndRender(); + pushAndExecPyLine(_dispVar+".SetRepresentationType('Surface')"); +} + +void +MEDPresentationScalarMap::updatePipeline(const MEDCALC::ScalarMapParameters& params) +{ + if (params.fieldHandlerId != _params.fieldHandlerId) + throw KERNEL::createSalomeException("Unexpected updatePipeline error! Mismatching fieldHandlerId!"); + + if (params.colorMap != _params.colorMap) + updateColorMap(params.colorMap); + + if (std::string(params.displayedComponent) != std::string(_params.displayedComponent)) + updateComponent(std::string(params.displayedComponent)); + if (params.scalarBarRange != _params.scalarBarRange || + params.hideDataOutsideCustomRange != _params.hideDataOutsideCustomRange || + params.scalarBarRangeArray[0] != _params.scalarBarRangeArray[0] || + params.scalarBarRangeArray[1] != _params.scalarBarRangeArray[1] ) + updateScalarBarRange(params.scalarBarRange, + params.hideDataOutsideCustomRange, + params.scalarBarRangeArray[0], + params.scalarBarRangeArray[1]); + if (params.visibility != _params.visibility) + updateVisibility(params.visibility); + if (params.scalarBarVisibility != _params.scalarBarVisibility) + updateScalarBarVisibility(params.scalarBarVisibility); } +