From e4b01974b83f08e39b98bcfb554fddd61eabd0ce Mon Sep 17 00:00:00 2001 From: alemuntoni Date: Mon, 26 Apr 2021 12:28:13 +0200 Subject: [PATCH] better organization FunctionSet --- src/common/python/function_set.cpp | 175 ++++++++++++++++------------- src/common/python/function_set.h | 8 ++ 2 files changed, 106 insertions(+), 77 deletions(-) diff --git a/src/common/python/function_set.cpp b/src/common/python/function_set.cpp index 3a70b9668..d3eb603ab 100644 --- a/src/common/python/function_set.cpp +++ b/src/common/python/function_set.cpp @@ -36,94 +36,102 @@ pymeshlab::FunctionSet::FunctionSet(const PluginManager& pm) { //dummy MeshDocument use to compute default value parameters //the mesh used is a 1x1x1 cube (with extremes [-0.5; 0.5]) - MeshDocument dummyMeshDocument; - Box3m b(Point3m(-0.5,-0.5,-0.5),Point3m(0.5,0.5,0.5)); - CMeshO dummyMesh; - vcg::tri::Box(dummyMesh,b); - dummyMeshDocument.addNewMesh(dummyMesh, "cube"); - int mask = 0; - mask |= vcg::tri::io::Mask::IOM_VERTQUALITY; - mask |= vcg::tri::io::Mask::IOM_FACEQUALITY; - dummyMeshDocument.mm()->Enable(mask); + initDummyMeshDocument(); - for (auto inputFormat : pm.inputMeshFormatList()){ - QString originalFilterName = inputFormat; - QString pythonFilterName = inputFormat.toLower(); - Function f(pythonFilterName, originalFilterName, "Load " + inputFormat + " format."); - IOPlugin* plugin = pm.inputMeshPlugin(inputFormat); - RichParameterList rps; - plugin->initPreOpenParameter(inputFormat, rps); - plugin->initOpenParameter(inputFormat, *dummyMeshDocument.mm(), rps); - - //filename parameter - QString sv = "file_name." + inputFormat; - QStringList sl(inputFormat); - RichOpenFile of("file_name", sv, sl, "File Name", "The name of the file to load"); - FunctionParameter par(of); - f.addParameter(par); - - for (const RichParameter& rp : rps){ - FunctionParameter par(rp); - f.addParameter(par); - } - loadMeshSet.insert(f); - } - - for (auto outputFormat : pm.outputMeshFormatList()){ - QString originalFilterName = outputFormat; - QString pythonFilterName = outputFormat.toLower(); - Function f(pythonFilterName, originalFilterName, "Save " + outputFormat + " format."); - IOPlugin* plugin = pm.outputMeshPlugin(outputFormat); - RichParameterList rps; - plugin->initSaveParameter(outputFormat, *dummyMeshDocument.mm(), rps); - - //filename parameter - QString sv = "file_name." + outputFormat; - RichSaveFile of("file_name", sv, outputFormat, "File Name", "The name of the file to save"); - FunctionParameter par(of); - f.addParameter(par); - - for (const RichParameter& rp : rps){ - FunctionParameter par(rp); - f.addParameter(par); - } - - //data to save - updateSaveParameters(plugin, outputFormat, f); - - saveMeshSet.insert(f); - } - - for (auto inputRasterFormat : pm.inputRasterFormatList()){ - QString originalFilterName = inputRasterFormat; - QString pythonFilterName = inputRasterFormat.toLower(); - Function f(pythonFilterName, originalFilterName, "Load " + inputRasterFormat + " format."); - - //filename parameter - QString sv = "file_name." + inputRasterFormat; - QStringList sl(inputRasterFormat); - RichOpenFile of("file_name", sv, sl, "File Name", "The name of the file to load"); - FunctionParameter par(of); - f.addParameter(par); - - loadRasterSet.insert(f); + for (IOPlugin* iop : pm.ioPluginIterator()){ + loadIOPlugin(iop); } for (FilterPlugin* fp : pm.filterPluginIterator()){ - for (QAction* act : fp->actions()) { - QString originalFilterName = fp->filterName(act); - QString description = fp->filterInfo(act); - QString pythonFilterName = fp->pythonFilterName(act); - Function f(pythonFilterName, originalFilterName, description); + loadFilterPlugin(fp); + } +} +void pymeshlab::FunctionSet::loadFilterPlugin(FilterPlugin* fp) +{ + for (QAction* act : fp->actions()) { + QString originalFilterName = fp->filterName(act); + QString description = fp->filterInfo(act); + QString pythonFilterName = fp->pythonFilterName(act); + Function f(pythonFilterName, originalFilterName, description); + + RichParameterList rps; + fp->initParameterList(act, dummyMeshDocument, rps); + + for (const RichParameter& rp : rps){ + FunctionParameter par(rp); + f.addParameter(par); + } + filterSet.insert(f); + } +} + +void pymeshlab::FunctionSet::loadIOPlugin(IOPlugin* iop) +{ + for (const FileFormat& ff : iop->importFormats()){ + for (const QString& inputFormat : ff.extensions){ + QString originalFilterName = inputFormat.toLower(); + QString pythonFilterName = inputFormat.toLower(); + Function f(pythonFilterName, originalFilterName, "Load " + inputFormat + " format."); RichParameterList rps; - fp->initParameterList(act, dummyMeshDocument, rps); + iop->initPreOpenParameter(inputFormat, rps); + iop->initOpenParameter(inputFormat, *dummyMeshDocument.mm(), rps); + + //filename parameter + QString sv = "file_name." + inputFormat; + QStringList sl(inputFormat); + RichOpenFile of("file_name", sv, sl, "File Name", "The name of the file to load"); + FunctionParameter par(of); + f.addParameter(par); for (const RichParameter& rp : rps){ FunctionParameter par(rp); f.addParameter(par); } - filterSet.insert(f); + loadMeshSet.insert(f); + } + } + + for (const FileFormat& ff : iop->exportFormats()){ + for (const QString& outputFormat : ff.extensions){ + QString originalFilterName = outputFormat.toLower(); + QString pythonFilterName = outputFormat.toLower(); + Function f(pythonFilterName, originalFilterName, "Save " + outputFormat + " format."); + RichParameterList rps; + iop->initSaveParameter(outputFormat, *dummyMeshDocument.mm(), rps); + + //filename parameter + QString sv = "file_name." + outputFormat; + RichSaveFile of("file_name", sv, outputFormat, "File Name", "The name of the file to save"); + FunctionParameter par(of); + f.addParameter(par); + + for (const RichParameter& rp : rps){ + FunctionParameter par(rp); + f.addParameter(par); + } + + //data to save + updateSaveParameters(iop, outputFormat, f); + + saveMeshSet.insert(f); + } + } + + for (const FileFormat& ff : iop->importRasterFormats()){ + for (const QString& inputRasterFormat : ff.extensions){ + QString originalFilterName = inputRasterFormat; + QString pythonFilterName = inputRasterFormat.toLower(); + Function f(pythonFilterName, originalFilterName, "Load " + inputRasterFormat + " format."); + + //filename parameter + QString sv = "file_name." + inputRasterFormat; + QStringList sl(inputRasterFormat); + RichOpenFile of("file_name", sv, sl, "File Name", "The name of the file to load"); + FunctionParameter par(of); + f.addParameter(par); + + loadRasterSet.insert(f); } } } @@ -230,3 +238,16 @@ void pymeshlab::FunctionSet::updateSaveParameters(IOPlugin* plugin, } + +void pymeshlab::FunctionSet::initDummyMeshDocument() +{ + dummyMeshDocument.clear(); + Box3m b(Point3m(-0.5,-0.5,-0.5),Point3m(0.5,0.5,0.5)); + CMeshO dummyMesh; + vcg::tri::Box(dummyMesh,b); + dummyMeshDocument.addNewMesh(dummyMesh, "cube"); + int mask = 0; + mask |= vcg::tri::io::Mask::IOM_VERTQUALITY; + mask |= vcg::tri::io::Mask::IOM_FACEQUALITY; + dummyMeshDocument.mm()->Enable(mask); +} diff --git a/src/common/python/function_set.h b/src/common/python/function_set.h index 128a3d07a..355680210 100644 --- a/src/common/python/function_set.h +++ b/src/common/python/function_set.h @@ -50,6 +50,10 @@ public: FunctionSet(); FunctionSet(const PluginManager& pm); + //load plugins + void loadFilterPlugin(FilterPlugin* fp); + void loadIOPlugin(IOPlugin* iop); + std::list pythonFilterFunctionNames() const; const Function& filterFunction(const QString& pythonFunctionName) const; @@ -87,6 +91,10 @@ private: const QString& outputFormat, Function& f); + void initDummyMeshDocument(); + + MeshDocument dummyMeshDocument; + std::set filterSet; std::set loadMeshSet; std::set saveMeshSet;