diff --git a/Plugin/MinMax.cpp b/Plugin/MinMax.cpp index fb3948f527723448f2cbf5439e604ad4a688f103..0a4d9122339e42db8ddfab777638b3140987d4de 100644 --- a/Plugin/MinMax.cpp +++ b/Plugin/MinMax.cpp @@ -7,7 +7,8 @@ #include "PViewOptions.h" StringXNumber MinMaxOptions_Number[] = { - {GMSH_FULLRC, "View", NULL, -1.} + {GMSH_FULLRC, "View", NULL, -1.}, + {GMSH_FULLRC, "OverTime", NULL, 0} }; extern "C" @@ -22,6 +23,7 @@ std::string GMSH_MinMaxPlugin::getHelp() const { return "Plugin(MinMax) computes the min/max of a view.\n\n" "If `View' < 0, the plugin is run on the current view.\n\n" + "If `OverTime' = 1, calculates the min-max over space AND time\n\n" "Plugin(MinMax) creates two new views."; } @@ -38,6 +40,7 @@ StringXNumber *GMSH_MinMaxPlugin::getOption(int iopt) PView *GMSH_MinMaxPlugin::execute(PView * v) { int iView = (int)MinMaxOptions_Number[0].def; + int overTime = (int)MinMaxOptions_Number[1].def; PView *v1 = getView(iView, v); if(!v1) return v; @@ -53,24 +56,51 @@ PView *GMSH_MinMaxPlugin::execute(PView * v) double z = data1->getBoundingBox().center().z(); dataMin->SP.push_back(x); dataMin->SP.push_back(y); dataMin->SP.push_back(z); dataMax->SP.push_back(x); dataMax->SP.push_back(y); dataMax->SP.push_back(z); + + double minView, maxView, min=1E200, max=-1E200, timeMin=0, timeMax=0; for(int step = 0; step < data1->getNumTimeSteps(); step++){ if(data1->hasTimeStep(step)){ - dataMin->SP.push_back(data1->getMin(step)); - dataMax->SP.push_back(data1->getMax(step)); + minView=data1->getMin(step); + maxView=data1->getMax(step); + if(minView<min){ + min=minView; + timeMin = data1->getTime(step); + } + if(maxView>max){ + max=maxView; + timeMax = data1->getTime(step); + } + if(!overTime){ + dataMin->SP.push_back(data1->getMin(step)); + dataMax->SP.push_back(data1->getMax(step)); + } } } + if(overTime){ + dataMin->SP.push_back(min); + dataMax->SP.push_back(max); + } + dataMin->NbSP = 1; dataMax->NbSP = 1; + vMin->getOptions()->intervalsType = PViewOptions::Numeric; vMax->getOptions()->intervalsType = PViewOptions::Numeric; for(int step = 0; step < data1->getNumTimeSteps(); step++){ if(data1->hasTimeStep(step)){ - double time = data1->getTime(step); - dataMin->Time.push_back(time); - dataMax->Time.push_back(time); + if(overTime){ + dataMin->Time.push_back(timeMin); + dataMax->Time.push_back(timeMax); + } + else{ + double time = data1->getTime(step); + dataMin->Time.push_back(time); + dataMax->Time.push_back(time); + } } } + dataMin->setName(data1->getName() + "_Min"); dataMin->setFileName(data1->getName() + "_Min.pos"); dataMin->finalize();