From 925c7b94b305430396b84c663bfb720ccda4fb2e Mon Sep 17 00:00:00 2001 From: Paolo Cignoni cignoni Date: Fri, 17 Sep 2010 13:13:42 +0000 Subject: [PATCH] added automatic building of list of parameters for each filter --- src/common/pluginmanager.cpp | 33 ++++++++++++++++++++++++--------- src/common/pluginmanager.h | 2 ++ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/common/pluginmanager.cpp b/src/common/pluginmanager.cpp index 960628a0b..afe080908 100644 --- a/src/common/pluginmanager.cpp +++ b/src/common/pluginmanager.cpp @@ -80,13 +80,9 @@ void PluginManager::loadPlugins(RichParameterSet& defaultGlobal,QScriptEngine* e if (eng != 0) { - MeshDocument md; - MeshModel mm(&md); - vcg::tri::Tetrahedron(mm.cm); - mm.updateDataMask(MeshModel::MM_ALL); QString code = ""; code += "Plugins = { };\n"; - + QMap FPM = generateFilterParameterMap(); foreach(MeshFilterInterface* mi,this->meshFilterPlug) { QString pname = mi->pluginName(); @@ -100,10 +96,7 @@ void PluginManager::loadPlugins(RichParameterSet& defaultGlobal,QScriptEngine* e if (filterFunction != "") { ScriptAdapterGenerator gen; - QAction act(filterName,NULL); - RichParameterSet rp; - mi->initParameterSet(&act,mm,rp); - QString gencode = gen.funCodeGenerator(filterName,rp); + QString gencode = gen.funCodeGenerator(filterName,FPM[filterName]); code += "Plugins." + pname + "." + filterFunction + " = " + gencode + "\n"; } } @@ -120,6 +113,28 @@ void PluginManager::loadPlugins(RichParameterSet& defaultGlobal,QScriptEngine* e qDebug("Code:\n %s",qPrintable(code)); } } +/* + This function create a map from filtername to dummy RichParameterSet. + containing for each filtername the set of parameter that it uses. + */ +QMap PluginManager::generateFilterParameterMap() +{ + QMap FPM; + MeshDocument md; + MeshModel mm(&md); + vcg::tri::Tetrahedron(mm.cm); + mm.updateDataMask(MeshModel::MM_ALL); + QMap::iterator ai; + for(ai=this->actionFilterMap.begin(); ai !=this->actionFilterMap.end();++ai) + { + QString filterName = ai.key();// ->filterName(); + QAction act(filterName,NULL); + RichParameterSet rp; + this->stringFilterMap[filterName]->initParameterSet(ai.value(),md,rp); + FPM[filterName]=rp; + } + return FPM; +} QString PluginManager::getBaseDirPath() { diff --git a/src/common/pluginmanager.h b/src/common/pluginmanager.h index 7ee2572d2..cc1251fcb 100644 --- a/src/common/pluginmanager.h +++ b/src/common/pluginmanager.h @@ -45,6 +45,8 @@ public: static QString getPluginDirPath(); static QString getBaseDirPath(); + QMap generateFilterParameterMap(); + QDir pluginsDir; QMap actionFilterMap; QMap stringFilterMap;