From 78d2db647a329ab06cbbf202f1509070407cb982 Mon Sep 17 00:00:00 2001 From: Federico Ponchio ponchio Date: Tue, 20 Nov 2007 18:26:52 +0000 Subject: [PATCH] Added triangle quality with possibiliti to cohose metric. --- .../meshcolorize/meshcolorize.cpp | 48 ++++++++++++++++--- .../meshcolorize/meshcolorize.h | 7 ++- 2 files changed, 46 insertions(+), 9 deletions(-) diff --git a/src/meshlabplugins/meshcolorize/meshcolorize.cpp b/src/meshlabplugins/meshcolorize/meshcolorize.cpp index aa0504938..bd4e4d3c1 100644 --- a/src/meshlabplugins/meshcolorize/meshcolorize.cpp +++ b/src/meshlabplugins/meshcolorize/meshcolorize.cpp @@ -23,6 +23,9 @@ /**************************************************************************** History $Log$ +Revision 1.38 2007/11/20 18:26:52 ponchio +Added triangle quality with possibiliti to cohose metric. + Revision 1.37 2007/11/19 17:08:54 ponchio Added triangle quality. @@ -288,10 +291,24 @@ bool ExtraMeshColorizePlugin::getParameters(QAction *action, QWidget * parent, M return true; } + default :assert(0); } return true; +} +void ExtraMeshColorizePlugin::initParameterSet(QAction *a,MeshModel &m, FilterParameterSet & par) { + switch(ID(a)) + { + case CP_TRIANGLE_QUALITY: { + QStringList metrics; + metrics.push_back("area/max side"); + metrics.push_back("inradius/circumradius"); + par.addEnum("Metric", 0, metrics, tr("Metric:"), tr("Choose a metric to compute triangle quality.")); + break; + } + default: assert(0); + } } bool ExtraMeshColorizePlugin::applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & par, vcg::CallBackPos *cb) @@ -325,12 +342,22 @@ bool ExtraMeshColorizePlugin::applyFilter(QAction *filter, MeshModel &m, FilterP } case CP_TRIANGLE_QUALITY: { - float min = 0; - float max = 0.5;//sqrt(3)/2; - for(unsigned int i = 0; i < m.cm.face.size(); i++) { - CFaceO &f = m.cm.face[i]; - f.C().ColorRamp(min, max, QualityRadii(f.P(0), f.P(1), f.P(2))); - } + int metric = par.getEnum("Metric"); + if(metric == 0) { //area / max edge + float min = 0; + float max = sqrt(3)/2; + for(unsigned int i = 0; i < m.cm.face.size(); i++) { + CFaceO &f = m.cm.face[i]; + f.C().ColorRamp(min, max, Quality(f.P(0), f.P(1), f.P(2))); + } + } else { //inradius / circumradius + float min = 0; + float max = 0.5; + for(unsigned int i = 0; i < m.cm.face.size(); i++) { + CFaceO &f = m.cm.face[i]; + f.C().ColorRamp(min, max, QualityRadii(f.P(0), f.P(1), f.P(2))); + } + } break; } @@ -382,12 +409,19 @@ const MeshFilterInterface::FilterClass ExtraMeshColorizePlugin::getClass(QAction case CP_COLOR_NON_TOPO_COHERENT: return MeshFilterInterface::VertexColoring; case CP_SELFINTERSECT: - case CP_TRIANGLE_QUALITY: + case CP_TRIANGLE_QUALITY: return MeshFilterInterface::FaceColoring; default: assert(0); return MeshFilterInterface::Generic; } } +bool ExtraMeshColorizePlugin::autoDialog(QAction *a) { + switch(ID(a)) { + case CP_TRIANGLE_QUALITY: return true; + default: return false; + } +} + Q_EXPORT_PLUGIN(ExtraMeshColorizePlugin) diff --git a/src/meshlabplugins/meshcolorize/meshcolorize.h b/src/meshlabplugins/meshcolorize/meshcolorize.h index bb16abe44..b8ccd2d4f 100644 --- a/src/meshlabplugins/meshcolorize/meshcolorize.h +++ b/src/meshlabplugins/meshcolorize/meshcolorize.h @@ -23,6 +23,9 @@ /**************************************************************************** History $Log$ +Revision 1.26 2007/11/20 18:26:52 ponchio +Added triangle quality with possibiliti to cohose metric. + Revision 1.25 2007/11/19 17:08:54 ponchio Added triangle quality. @@ -111,12 +114,12 @@ public: virtual const QString filterInfo(FilterIDType filterId); virtual const PluginInfo &pluginInfo(); virtual const FilterClass getClass(QAction *); - virtual bool autoDialog(QAction *) {return false;} + virtual bool autoDialog(QAction *); virtual bool customDialog(QAction *filter) { if(ID(filter) == CP_MAP_QUALITY_INTO_COLOR ) return true; return false; } - virtual void initParameterSet(QAction *,MeshModel &/*m*/, FilterParameterSet & /*parent*/){} + virtual void initParameterSet(QAction *,MeshModel &/*m*/, FilterParameterSet & /*parent*/); virtual bool getParameters(QAction *action, QWidget * /*parent*/, MeshModel &/*m*/, FilterParameterSet & params, MainWindowInterface *mw); virtual const int getRequirements(QAction *); virtual bool applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;