diff --git a/Plugin/CMakeLists.txt b/Plugin/CMakeLists.txt index bd3c5e262259855ea9b14dd44277bc7f907b8f9b..dee3492d33561881700381a2e9eda4a855dfa3a0 100644 --- a/Plugin/CMakeLists.txt +++ b/Plugin/CMakeLists.txt @@ -20,7 +20,7 @@ set(SRC MakeSimplex.cpp Integrate.cpp Gradient.cpp Curl.cpp Divergence.cpp Annotate.cpp Remove.cpp - Probe.cpp + Probe.cpp MinMax.cpp HarmonicToTime.cpp ModulusPhase.cpp HomologyComputation.cpp Distance.cpp ExtractEdges.cpp diff --git a/Plugin/MinMax.cpp b/Plugin/MinMax.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1825393bcb6200219b3f713bba18c25fe80aca70 --- /dev/null +++ b/Plugin/MinMax.cpp @@ -0,0 +1,79 @@ +// Gmsh - Copyright (C) 1997-2010 C. Geuzaine, J.-F. Remacle +// +// See the LICENSE.txt file for license information. Please report all +// bugs and problems to <gmsh@geuz.org>. + +#include "MinMax.h" +#include "shapeFunctions.h" +#include "PViewOptions.h" + +StringXNumber MinMaxOptions_Number[] = { + {GMSH_FULLRC, "View", NULL, -1.} +}; + +extern "C" +{ + GMSH_Plugin *GMSH_RegisterMinMaxPlugin() + { + return new GMSH_MinMaxPlugin(); + } +} + +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" + "Plugin(MinMax) creates one new view."; +} + +int GMSH_MinMaxPlugin::getNbOptions() const +{ + return sizeof(MinMaxOptions_Number) / sizeof(StringXNumber); +} + +StringXNumber *GMSH_MinMaxPlugin::getOption(int iopt) +{ + return &MinMaxOptions_Number[iopt]; +} + +PView *GMSH_MinMaxPlugin::execute(PView * v) +{ + int iView = (int)MinMaxOptions_Number[0].def; + + PView *v1 = getView(iView, v); + if(!v1) return v; + + PViewData *data1 = v1->getData(); + PView *vMin = new PView(); + PView *vMax = new PView(); + PViewDataList *dataMin = getDataList(vMin); + PViewDataList *dataMax = getDataList(vMax); + + double x = data1->getBoundingBox().center().x(); + double y = data1->getBoundingBox().center().y(); + 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); + for(int step = 0; step < data1->getNumTimeSteps(); step++){ + dataMin->SP.push_back(data1->getMin(step)); + dataMax->SP.push_back(data1->getMax(step)); + } + dataMin->NbSP = 1; + dataMax->NbSP = 1; + vMin->getOptions()->intervalsType = PViewOptions::Numeric; + vMax->getOptions()->intervalsType = PViewOptions::Numeric; + + for(int i = 0; i < data1->getNumTimeSteps(); i++){ + double time = data1->getTime(i); + dataMin->Time.push_back(time); + dataMax->Time.push_back(time); + } + dataMin->setName(data1->getName() + "_Min"); + dataMin->setFileName(data1->getName() + "_Min.pos"); + dataMin->finalize(); + dataMax->setName(data1->getName() + "_Max"); + dataMax->setFileName(data1->getName() + "_Max.pos"); + dataMax->finalize(); + + return 0; +} diff --git a/Plugin/MinMax.h b/Plugin/MinMax.h new file mode 100644 index 0000000000000000000000000000000000000000..ae37f205d8937cf49e1b492049bcedbced22127a --- /dev/null +++ b/Plugin/MinMax.h @@ -0,0 +1,31 @@ +// Gmsh - Copyright (C) 1997-2010 C. Geuzaine, J.-F. Remacle +// +// See the LICENSE.txt file for license information. Please report all +// bugs and problems to <gmsh@geuz.org>. + +#ifndef _MIN_MAX_H_ +#define _MIN_MAX_H_ + +#include "Plugin.h" + +extern "C" +{ + GMSH_Plugin *GMSH_RegisterMinMaxPlugin(); +} + +class GMSH_MinMaxPlugin : public GMSH_PostPlugin +{ + public: + GMSH_MinMaxPlugin(){} + std::string getName() const { return "MinMax"; } + std::string getShortHelp() const + { + return "Get the min/max of a dataset"; + } + std::string getHelp() const; + int getNbOptions() const; + StringXNumber* getOption(int iopt); + PView *execute(PView *); +}; + +#endif diff --git a/Plugin/PluginManager.cpp b/Plugin/PluginManager.cpp index 592f1eb8ef8536364d93e8ebd72e5e1a2afb3bea..073486e699a4436c0502196346f17e439cf33bdd 100644 --- a/Plugin/PluginManager.cpp +++ b/Plugin/PluginManager.cpp @@ -23,6 +23,7 @@ #include "HarmonicToTime.h" #include "ModulusPhase.h" #include "Integrate.h" +#include "MinMax.h" #include "Gradient.h" #include "Curl.h" #include "Divergence.h" @@ -186,6 +187,8 @@ void PluginManager::registerDefaultPlugins() ("ModulusPhase", GMSH_RegisterModulusPhasePlugin())); allPlugins.insert(std::pair<std::string, GMSH_Plugin*> ("Integrate", GMSH_RegisterIntegratePlugin())); + allPlugins.insert(std::pair<std::string, GMSH_Plugin*> + ("MinMax", GMSH_RegisterMinMaxPlugin())); allPlugins.insert(std::pair<std::string, GMSH_Plugin*> ("Gradient", GMSH_RegisterGradientPlugin())); allPlugins.insert(std::pair<std::string, GMSH_Plugin*>