From f12fdc7bb88ab76b6eeb95b9d7463a39e56f4f41 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Wed, 24 Mar 2010 18:12:42 +0000 Subject: [PATCH] new MinMax plugin --- Plugin/CMakeLists.txt | 2 +- Plugin/MinMax.cpp | 79 ++++++++++++++++++++++++++++++++++++++++ Plugin/MinMax.h | 31 ++++++++++++++++ Plugin/PluginManager.cpp | 3 ++ 4 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 Plugin/MinMax.cpp create mode 100644 Plugin/MinMax.h diff --git a/Plugin/CMakeLists.txt b/Plugin/CMakeLists.txt index bd3c5e2622..dee3492d33 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 0000000000..1825393bcb --- /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 0000000000..ae37f205d8 --- /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 592f1eb8ef..073486e699 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*> -- GitLab