-// Copyright (C) 2016 CEA/DEN, EDF R&D
+// Copyright (C) 2016-2023 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
{
setIntProperty(MEDPresentationSlices::PROP_NB_SLICES, params.nbSlices);
setIntProperty(MEDPresentationSlices::PROP_SLICE_ORIENTATION, params.orientation);
+
+ int id = GeneratePythonId();
+ std::ostringstream oss;
+ oss << "__objLst" << id;
+ _sliceListVar = oss.str();
}
void
-MEDPresentationSlices::generateSlices()
+MEDPresentationSlices::setSliceParametersAndGroup()
{
std::ostringstream oss;
int nbSlices = getIntProperty(MEDPresentationSlices::PROP_NB_SLICES);
oss << "__origins = medcalc.GetSliceOrigins(" << _srcObjVar << ", " << nbSlices << ", " << normal << ");";
pushAndExecPyLine(oss.str()); oss.str("");
- pushAndExecPyLine("__objLst = [];");
+
oss << "for sliceNum in range(" << nbSlices << "):\n";
- oss << " obj = pvs.Slice(Input=" << _srcObjVar << ")\n";
- oss << " obj.SliceType = 'Plane'\n";
- oss << " obj.SliceType.Normal = " << normal << "\n";
- oss << " obj.SliceType.Origin = __origins[sliceNum]\n";
- oss << " __objLst.append(obj)\n\n";
+ oss << " " << _sliceListVar << "[sliceNum].SliceType.Normal = " << normal << ";\n";
+ oss << " " << _sliceListVar << "[sliceNum].SliceType.Origin = __origins[sliceNum];\n";
pushAndExecPyLine(oss.str()); oss.str("");
- oss << _objVar << " = pvs.GroupDatasets(Input=__objLst);";
+ oss << _objVar << " = pvs.GroupDatasets(Input=" << _sliceListVar << ");";
pushAndExecPyLine(oss.str()); oss.str("");
}
void
-MEDPresentationSlices::generateAndDisplay()
+MEDPresentationSlices::deleteGroup()
{
- generateSlices();
- showObject();
-
- colorBy(_pvFieldType);
- showScalarBar();
- selectColorMap();
- rescaleTransferFunction();
- resetCameraAndRender();
+ deleteThresholds();
+ std::ostringstream oss;
+ oss << "pvs.Hide(" << _objVar << ");";
+ oss << "pvs.Delete(" << _objVar << ");del " <<_objVar<<";";
+ pushAndExecPyLine(oss.str()); oss.str("");
}
-
void
-MEDPresentationSlices::clearPreviousSlices()
+MEDPresentationSlices::adaptNumberOfSlices()
{
std::ostringstream oss;
+ int nbSlices = getIntProperty(MEDPresentationSlices::PROP_NB_SLICES);
+
+ oss << "for _ in range(int(max(len(" << _sliceListVar << ")-" << nbSlices << ", 0))):\n";
+ oss << " pvs.Delete(" << _sliceListVar << ".pop());\n";
+ pushAndExecPyLine(oss.str()); oss.str("");
- pushAndExecPyLine("for sliceNum, _ in enumerate(__objLst):\n pvs.Delete(__objLst[sliceNum]);");
- oss << "pvs.Delete(" << _objVar << ");";
+ oss << "for _ in range(" << nbSlices << "-int(max(len(" << _sliceListVar << "), 0))):\n";
+ oss << " obj = pvs.Slice(Input=" << _srcObjVar << ");\n";
+ oss << " obj.SliceType = 'Plane';\n";
+ oss << " " << _sliceListVar << ".append(obj);\n";
pushAndExecPyLine(oss.str()); oss.str("");
}
+void
+MEDPresentationSlices::generateAndDisplay()
+{
+ adaptNumberOfSlices();
+ setSliceParametersAndGroup();
+ recreateViewSetup();
+}
+
std::string
MEDPresentationSlices::getNormalVector() const
{
MEDPyLockWrapper lock;
- std::ostringstream oss_o, oss;
+ std::ostringstream oss;
createSource();
+ setTimestamp();
// Populate internal array of available components:
fillAvailableFieldComponents();
- setOrCreateRenderView(); // instanciate __viewXXX
+ if (_params.nbSlices < 1)
+ {
+ const char * mes = "Invalid number of slices!";
+ STDLOG(mes);
+ throw KERNEL::createSalomeException(mes);
+ }
+
+ setOrCreateRenderView(); // instantiate __viewXXX
+
+ // Now create the initial slices list
+ oss << _sliceListVar << " = [];";
+ pushAndExecPyLine(oss.str()); oss.str("");
- // Now create the initial number of slices
generateAndDisplay();
}
if (std::string(params.displayedComponent) != std::string(_params.displayedComponent))
updateComponent<MEDPresentationSlices, MEDCALC::SlicesParameters>(std::string(params.displayedComponent));
- if (params.scalarBarRange != _params.scalarBarRange)
- updateScalarBarRange<MEDPresentationSlices, MEDCALC::SlicesParameters>(params.scalarBarRange);
+ if (params.scalarBarRange != _params.scalarBarRange ||
+ params.hideDataOutsideCustomRange != _params.hideDataOutsideCustomRange ||
+ params.scalarBarRangeArray[0] != _params.scalarBarRangeArray[0] ||
+ params.scalarBarRangeArray[1] != _params.scalarBarRangeArray[1])
+ updateScalarBarRange<MEDPresentationSlices, MEDCALC::SlicesParameters>(params.scalarBarRange,
+ params.hideDataOutsideCustomRange,
+ params.scalarBarRangeArray[0],
+ params.scalarBarRangeArray[1]);
if (params.colorMap != _params.colorMap)
updateColorMap<MEDPresentationSlices, MEDCALC::SlicesParameters>(params.colorMap);
if (params.orientation != _params.orientation)
updateOrientation(params.orientation);
if (params.nbSlices != _params.nbSlices)
- updateNbSlices(params.nbSlices);
+ {
+ if (params.nbSlices < 1)
+ {
+ const char * mes = "Invalid number of slices!";
+ STDLOG(mes);
+ throw KERNEL::createSalomeException(mes);
+ }
+ updateNbSlices(params.nbSlices);
+ }
+ if (params.visibility != _params.visibility)
+ updateVisibility<MEDPresentationSlices, MEDCALC::SlicesParameters>(params.visibility);
+
+ if (params.scalarBarVisibility != _params.scalarBarVisibility)
+ updateScalarBarVisibility<MEDPresentationSlices, MEDCALC::SlicesParameters>(params.scalarBarVisibility);
}
void
// Update the pipeline:
{
MEDPyLockWrapper lock;
- clearPreviousSlices();
+ deleteGroup();
generateAndDisplay();
}
}
{
MEDPyLockWrapper lock;
- clearPreviousSlices();
+ deleteGroup();
generateAndDisplay();
}
}