From f88fc756ce401ce94ec33b5f31dd7b2e66ee3bef Mon Sep 17 00:00:00 2001 From: Paolo Cignoni cignoni Date: Fri, 9 Feb 2007 13:50:11 +0000 Subject: [PATCH] First Non Working version --- src/meshlabplugins/filtergeom/filtergeom.cpp | 196 +++++++++++++++++++ src/meshlabplugins/filtergeom/filtergeom.h | 114 +++++++++++ src/meshlabplugins/filtergeom/filtergeom.pro | 20 ++ 3 files changed, 330 insertions(+) create mode 100644 src/meshlabplugins/filtergeom/filtergeom.cpp create mode 100644 src/meshlabplugins/filtergeom/filtergeom.h create mode 100644 src/meshlabplugins/filtergeom/filtergeom.pro diff --git a/src/meshlabplugins/filtergeom/filtergeom.cpp b/src/meshlabplugins/filtergeom/filtergeom.cpp new file mode 100644 index 000000000..5a5a6fa40 --- /dev/null +++ b/src/meshlabplugins/filtergeom/filtergeom.cpp @@ -0,0 +1,196 @@ +/**************************************************************************** +* MeshLab o o * +* An extendible mesh processor o o * +* _ O _ * +* Copyright(C) 2005, 2007 \/)\/ * +* Visual Computing Lab /\/| * +* ISTI - Italian National Research Council | * +* \ * +* All rights reserved. * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License (http://www.gnu.org/licenses/gpl.txt) * +* for more details. * +* * +****************************************************************************/ +/**************************************************************************** + History + + $Log$ + Revision 1.1 2007/02/09 13:50:10 cignoni + First Non Working version + +*****************************************************************************/ +#include +#include +#include +#include +#include + + +// temporaneamente prendo la versione corrente dalla cartella test +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "cleanfilter.h" +#include "remove_small_cc.h" +#include +#include + +using namespace vcg; + +CleanFilter::CleanFilter() +{ + typeList << FP_REBUILD_SURFACE << FP_REMOVE_WRT_Q << FP_REMOVE_ISOLATED_COMPLEXITY << FP_REMOVE_ISOLATED_DIAMETER; + + FilterType tt; + foreach(tt , types()) + actionList << new QAction(ST(tt), this); + + maxDiag1=0; + maxDiag2=10; + minCC=25; + val1=1.0; + +} + +CleanFilter::~CleanFilter() { + for (int i = 0; i < actionList.count() ; i++ ) + delete actionList.at(i); +} + +const QString CleanFilter::ST(FilterType filter) +{ + switch(filter) + { + case FP_REBUILD_SURFACE : return QString("Build surface from points"); + case FP_REMOVE_WRT_Q : return QString("Remove Faces wrt quality"); + case FP_REMOVE_ISOLATED_DIAMETER : return QString("Remove isolated pieces (wrt diameter)"); + case FP_REMOVE_ISOLATED_COMPLEXITY : return QString("Remove isolated pieces (wrt face num)"); + default: assert(0); + } + return QString("error!"); +} + +const CleanFilter::FilterClass CleanFilter::getClass(QAction *a) +{ + switch(ID(a)) + { + case FP_REMOVE_WRT_Q : + case FP_REMOVE_ISOLATED_DIAMETER : + case FP_REMOVE_ISOLATED_COMPLEXITY : + return MeshFilterInterface::Cleaning; + default : return MeshFilterInterface::Generic; + } +} + +const QString CleanFilter::Info(QAction *action) +{ + switch(ID(action)) + { + case FP_REBUILD_SURFACE : return QString("Merge"); + case FP_REMOVE_ISOLATED_COMPLEXITY: return tr("Remove Isolated"); + case FP_REMOVE_ISOLATED_DIAMETER: return tr("Remove Isolated"); + case FP_REMOVE_WRT_Q: return tr("Remove all the faces with quality lower than..."); + } +} + +const PluginInfo &CleanFilter::Info() +{ + static PluginInfo ai; + ai.Date=tr( __DATE__ ); + ai.Version = tr("0.1"); + ai.Author = ("Paolo Cignoni"); + return ai; +} + +const int CleanFilter::getRequirements(QAction *action) +{ + switch(ID(action)) + { + case FP_REMOVE_WRT_Q: + case FP_REBUILD_SURFACE : return 0; + case FP_REMOVE_ISOLATED_COMPLEXITY: + case FP_REMOVE_ISOLATED_DIAMETER: + return MeshModel::MM_FACETOPO | MeshModel::MM_BORDERFLAG | MeshModel::MM_FACEMARK; + default: assert(0); + } + return 0; +} + +bool CleanFilter::getStdFields(QAction *action, MeshModel &m, StdParList &parlst) +{ + + + + switch(ID(action)) + { + case FP_REBUILD_SURFACE : + parlst.addField("BallRadius","Enter ball size as a diag perc. (0 autoguess))",(float)maxDiag1); + break; + case FP_REMOVE_ISOLATED_DIAMETER: + parlst.addField("MinComponentDiag","Enter size (as a diag perc 0..100)",(float)maxDiag2); + break; + case FP_REMOVE_ISOLATED_COMPLEXITY: + parlst.addField("MinComponentSize","Enter minimum conn. comp size:",(int)minCC); + break; + case FP_REMOVE_WRT_Q: + parlst.addField("MaxQualityThr","Delete all Vertices with quality under:",(float)val1); + break; + default: + return false; + } + + return true; +} + +bool CleanFilter::getParameters(QAction *action, QWidget *parent, MeshModel &m,FilterParameter &par) +{ + switch(ID(action)) + { + case FP_REBUILD_SURFACE : + maxDiag1 = par.getFloat("BallRadius"); + par.update("BallRadius",float(m.cm.bbox.Diag()*maxDiag1/100.0)); + return true; + case FP_REMOVE_ISOLATED_DIAMETER: + maxDiag2 = par.getFloat("MinComponentDiag"); + par.update("MinComponentDiag",float(m.cm.bbox.Diag()*maxDiag2/100.0)); + return true; + case FP_REMOVE_ISOLATED_COMPLEXITY: + minCC = par.getInt("MinComponentSize"); + return true; + case FP_REMOVE_WRT_Q: + val1 = par.getFloat("MaxQualityThr"); + return true; + } + return false; + } + + + + +bool CleanFilter::applyFilter(QAction *filter, MeshModel &m, FilterParameter & par, vcg::CallBackPos * cb) +{ + if(filter->text() == ST(FP_REBUILD_SURFACE) ) + { + } + return true; +} + + +Q_EXPORT_PLUGIN(CleanFilter) diff --git a/src/meshlabplugins/filtergeom/filtergeom.h b/src/meshlabplugins/filtergeom/filtergeom.h new file mode 100644 index 000000000..b50a9195a --- /dev/null +++ b/src/meshlabplugins/filtergeom/filtergeom.h @@ -0,0 +1,114 @@ +/**************************************************************************** +* MeshLab o o * +* A versatile mesh processing toolbox o o * +* _ O _ * +* Copyright(C) 2005 \/)\/ * +* Visual Computing Lab /\/| * +* ISTI - Italian National Research Council | * +* \ * +* All rights reserved. * +* * +* This program is free software; you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation; either version 2 of the License, or * +* (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License (http://www.gnu.org/licenses/gpl.txt) * +* for more details. * +* * +****************************************************************************/ +/**************************************************************************** + History + + $Log$ + Revision 1.1 2007/02/09 13:50:10 cignoni + First Non Working version + + Revision 1.6 2007/02/08 23:46:16 pirosu + merged srcpar and par in the GetStdParameters() function + + Revision 1.5 2007/01/11 19:52:25 pirosu + fixed bug for QT 4.1.0/dotnet2003 + removed the request of the window title to the plugin. The action description is used instead. + + Revision 1.4 2006/12/27 21:41:58 pirosu + Added improvements for the standard plugin window: + split of the apply button in two buttons:ok and apply + added support for parameters with absolute and percentage values + + Revision 1.3 2006/12/13 17:37:27 pirosu + Added standard plugin window support + + + Revision 1.2 2006/11/29 00:59:15 cignoni + Cleaned plugins interface; changed useless help class into a plain string + + Revision 1.1 2006/11/07 09:09:27 cignoni + First Working release, moved in from epoch svn + + Revision 1.1 2006/01/20 13:03:27 cignoni + *** empty log message *** + + *****************************************************************************/ +#ifndef EXTRAIOPLUGINV3D_H +#define EXTRAIOPLUGINV3D_H + +#include +#include +#include + +#include +#include + + +class GeomFilter : public QObject, public MeshFilterInterface +{ + Q_OBJECT + Q_INTERFACES(MeshFilterInterface) + + public: + /* naming convention : + - FP -> Filter Plugin + - name of the plugin separated by _ + */ + enum { + FP_REBUILD_SURFACE, + FP_REMOVE_ISOLATED_COMPLEXITY, + FP_REMOVE_ISOLATED_DIAMETER, + FP_REMOVE_WRT_Q + } ; + + /* default values for standard parameters' values of the plugin actions */ + float maxDiag1; + float maxDiag2; + int minCC; + float val1; + + + CleanFilter(); + ~CleanFilter(); + virtual const QString ST(FilterType filter); + virtual const QString Info(QAction *); + virtual const PluginInfo &Info(); + + virtual const FilterClass getClass(QAction *); + virtual const int getRequirements(QAction *); + virtual bool applyFilter(QAction *filter, MeshModel &m, FilterParameter & /*parent*/, vcg::CallBackPos * cb) ; + + bool getStdFields(QAction *, MeshModel &m, StdParList &parlst); + bool getParameters(QAction *action, QWidget *parent, MeshModel &m,FilterParameter &par); + + + protected: + +}; + + + + + + +#endif diff --git a/src/meshlabplugins/filtergeom/filtergeom.pro b/src/meshlabplugins/filtergeom/filtergeom.pro new file mode 100644 index 000000000..5361e26c4 --- /dev/null +++ b/src/meshlabplugins/filtergeom/filtergeom.pro @@ -0,0 +1,20 @@ +TEMPLATE = lib +CONFIG += plugin +INCLUDEPATH += ../.. ../../../../sf ../../../../code/lib/glew/include + +HEADERS = filtergeom.h + +SOURCES = filtergeom.cpp +TARGET = filtergeom +DESTDIR = ../../meshlab/plugins + +# the following line is needed to avoid mismatch between +# the awful min/max macros of windows and the limits max +win32:DEFINES += NOMINMAX + +contains(TEMPLATE,lib) { + CONFIG(debug, debug|release) { + unix:TARGET = $$member(TARGET, 0)_debug + else:TARGET = $$member(TARGET, 0)d + } +}