diff --git a/src/common/interfaces.h b/src/common/interfaces.h
index 73ef83eaf..86de454d6 100644
--- a/src/common/interfaces.h
+++ b/src/common/interfaces.h
@@ -315,6 +315,9 @@ public:
if (preMask & MeshModel::MM_VERTQUALITY && !m.hasDataMask(MeshModel::MM_VERTQUALITY))
MissingItems.push_back("Vertex Quality");
+ if (preMask & MeshModel::MM_FACEQUALITY && !m.hasDataMask(MeshModel::MM_FACEQUALITY))
+ MissingItems.push_back("Face Quality");
+
if (preMask & MeshModel::MM_WEDGTEXCOORD && !m.hasDataMask(MeshModel::MM_WEDGTEXCOORD))
MissingItems.push_back("Per Wedge Texture Coords");
@@ -499,7 +502,6 @@ public:
assert(NULL != md.mm());
return (StartEdit(*(md.mm()), parent));
}
-
// Called when the user press the second time the button
virtual void EndEdit(MeshModel &/*m*/, GLArea * /*parent*/){};
diff --git a/src/common/meshmodel.h b/src/common/meshmodel.h
index e97e3a7ad..11222b774 100644
--- a/src/common/meshmodel.h
+++ b/src/common/meshmodel.h
@@ -148,51 +148,51 @@ public:
- to know what elements are required by a filter and therefore should be made ready before starting the filter (e.g. if a
- to know what elements are changed by a filter and therefore should be saved/restored in case of dynamic filters with a preview
*/
- enum MeshElement {
- MM_NONE = 0x00000000,
- MM_VERTCOORD = 0x00000001,
- MM_VERTNORMAL = 0x00000002,
- MM_VERTFLAG = 0x00000004,
- MM_VERTCOLOR = 0x00000008,
- MM_VERTQUALITY = 0x00000010,
- MM_VERTMARK = 0x00000020,
- MM_VERTFACETOPO = 0x00000040,
- MM_VERTCURV = 0x00000080,
- MM_VERTCURVDIR = 0x00000100,
- MM_VERTRADIUS = 0x00000200,
- MM_VERTTEXCOORD = 0x00000400,
- MM_VERTNUMBER = 0x00000800,
+ enum MeshElement{
+ MM_NONE = 0x00000000,
+ MM_VERTCOORD = 0x00000001,
+ MM_VERTNORMAL = 0x00000002,
+ MM_VERTFLAG = 0x00000004,
+ MM_VERTCOLOR = 0x00000008,
+ MM_VERTQUALITY = 0x00000010,
+ MM_VERTMARK = 0x00000020,
+ MM_VERTFACETOPO = 0x00000040,
+ MM_VERTCURV = 0x00000080,
+ MM_VERTCURVDIR = 0x00000100,
+ MM_VERTRADIUS = 0x00000200,
+ MM_VERTTEXCOORD = 0x00000400,
+ MM_VERTNUMBER = 0x00000800,
- MM_FACEVERT = 0x00001000,
- MM_FACENORMAL = 0x00002000,
- MM_FACEFLAG = 0x00004000,
- MM_FACECOLOR = 0x00008000,
- MM_FACEQUALITY = 0x00010000,
- MM_FACEMARK = 0x00020000,
- MM_FACEFACETOPO = 0x00040000,
- MM_FACENUMBER = 0x00080000,
+ MM_FACEVERT = 0x00001000,
+ MM_FACENORMAL = 0x00002000,
+ MM_FACEFLAG = 0x00004000,
+ MM_FACECOLOR = 0x00008000,
+ MM_FACEQUALITY = 0x00010000,
+ MM_FACEMARK = 0x00020000,
+ MM_FACEFACETOPO = 0x00040000,
+ MM_FACENUMBER = 0x00080000,
- MM_WEDGTEXCOORD = 0x00100000,
- MM_WEDGNORMAL = 0x00200000,
- MM_WEDGCOLOR = 0x00400000,
+ MM_WEDGTEXCOORD = 0x00100000,
+ MM_WEDGNORMAL = 0x00200000,
+ MM_WEDGCOLOR = 0x00400000,
+
+ MM_UNKNOWN = 0x00800000,
- MM_UNKNOWN = 0x00800000,
+ // SubParts of bits
+ MM_VERTFLAGSELECT = 0x01000000,
+ MM_FACEFLAGSELECT = 0x02000000,
+ // This part should be deprecated.
+ MM_VERTFLAGBORDER = 0x04000000,
+ MM_FACEFLAGBORDER = 0x08000000,
- // SubParts of bits
- MM_VERTFLAGSELECT = 0x01000000,
- MM_FACEFLAGSELECT = 0x02000000,
- // This part should be deprecated.
- MM_VERTFLAGBORDER = 0x04000000,
- MM_FACEFLAGBORDER = 0x08000000,
-
- // Per Mesh Stuff....
- MM_CAMERA = 0x10000000,
- MM_TRANSFMATRIX = 0x20000000,
- MM_COLOR = 0x40000000,
- MM_POLYGONAL = 0x80000000,
- MM_ALL = 0xffffffff
+ // Per Mesh Stuff....
+ MM_CAMERA = 0x10000000,
+ MM_TRANSFMATRIX = 0x20000000,
+ MM_COLOR = 0x40000000,
+ MM_POLYGONAL = 0x80000000,
+ MM_ALL = 0xffffffff
};
diff --git a/src/meshlabplugins/filter_colorize/meshcolorize.cpp b/src/meshlabplugins/filter_colorize/meshcolorize.cpp
index 1a9cc728e..68a9d160d 100644
--- a/src/meshlabplugins/filter_colorize/meshcolorize.cpp
+++ b/src/meshlabplugins/filter_colorize/meshcolorize.cpp
@@ -49,7 +49,8 @@ using namespace vcg;
ExtraMeshColorizePlugin::ExtraMeshColorizePlugin() {
typeList <<
CP_CLAMP_QUALITY <<
- CP_MAP_QUALITY_INTO_COLOR <<
+ CP_MAP_VQUALITY_INTO_COLOR <<
+ CP_MAP_FQUALITY_INTO_COLOR <<
CP_DISCRETE_CURVATURE <<
CP_TRIANGLE_QUALITY <<
CP_VERTEX_SMOOTH <<
@@ -65,118 +66,115 @@ ExtraMeshColorizePlugin::ExtraMeshColorizePlugin() {
}
QString ExtraMeshColorizePlugin::filterName(FilterIDType c) const{
- switch(c)
- {
- case CP_CLAMP_QUALITY: return QString("Clamp vertex quality");
- case CP_MAP_QUALITY_INTO_COLOR: return QString("Colorize by Quality");
- case CP_DISCRETE_CURVATURE: return QString("Discrete Curvatures");
- case CP_TRIANGLE_QUALITY: return QString("Per Face Quality according to Triangle shape and aspect ratio");
- case CP_COLOR_NON_TOPO_COHERENT: return QString("Color edges topologically non coherent");
- case CP_VERTEX_SMOOTH: return QString("Smooth: Laplacian Vertex Color");
- case CP_FACE_SMOOTH: return QString("Smooth: Laplacian Face Color");
- case CP_VERTEX_TO_FACE: return QString("Transfer Color: Vertex to Face");
- case CP_FACE_TO_VERTEX: return QString("Transfer Color: Face to Vertex");
- case CP_TEXTURE_TO_VERTEX: return QString("Transfer Color: Texture to Vertex");
- case CP_RANDOM_FACE: return QString("Random Face Color");
-
- default: assert(0);
+ switch(c){
+ case CP_CLAMP_QUALITY: return QString("Clamp vertex quality");
+ case CP_MAP_VQUALITY_INTO_COLOR: return QString("Colorize by vertex Quality");
+ case CP_MAP_FQUALITY_INTO_COLOR: return QString("Colorize by face Quality");
+ case CP_DISCRETE_CURVATURE: return QString("Discrete Curvatures");
+ case CP_TRIANGLE_QUALITY: return QString("Per Face Quality according to Triangle shape and aspect ratio");
+ case CP_COLOR_NON_TOPO_COHERENT: return QString("Color edges topologically non coherent");
+ case CP_VERTEX_SMOOTH: return QString("Smooth: Laplacian Vertex Color");
+ case CP_FACE_SMOOTH: return QString("Smooth: Laplacian Face Color");
+ case CP_VERTEX_TO_FACE: return QString("Transfer Color: Vertex to Face");
+ case CP_FACE_TO_VERTEX: return QString("Transfer Color: Face to Vertex");
+ case CP_TEXTURE_TO_VERTEX: return QString("Transfer Color: Texture to Vertex");
+ case CP_RANDOM_FACE: return QString("Random Face Color");
+ default: assert(0);
}
return QString("error!");
}
QString ExtraMeshColorizePlugin::filterInfo(FilterIDType filterId) const
{
- switch(filterId)
- {
- case CP_CLAMP_QUALITY: return tr("Clamp quality vertex values to a given range according to specific values or to percentiles");
- case CP_MAP_QUALITY_INTO_COLOR : return tr("Colorize vertex and faces depending on quality field (manually equalized).");
- case CP_DISCRETE_CURVATURE : return tr("Colorize according to various discrete curvature computed as described in:
"
- "'Discrete Differential-Geometry Operators for Triangulated 2-Manifolds'
"
- "M. Meyer, M. Desbrun, P. Schroder, A. H. Barr");
- case CP_TRIANGLE_QUALITY: return tr("Compute a quality and colorize faces depending on triangle quality:
1: minimum ratio height/edge among the edges
2: ratio between radii of incenter and circumcenter
3: 2*sqrt(a, b)/(a+b), a, b the eigenvalues of M^tM, M transform triangle into equilateral");
- case CP_VERTEX_SMOOTH: return QString("Laplacian Smooth Vertex Color");
- case CP_FACE_SMOOTH: return QString("Laplacian Smooth Face Color");
- case CP_VERTEX_TO_FACE: return QString("Vertex to Face color transfer");
- case CP_FACE_TO_VERTEX: return QString("Face to Vertex color transfer");
- case CP_TEXTURE_TO_VERTEX: return QString("Texture to Vertex color transfer");
- case CP_COLOR_NON_TOPO_COHERENT :return tr("Color edges topologically non coherent.");
- case CP_RANDOM_FACE: return QString("Colorize Faces randomly. If internal edges are present they are used");
-
- default: assert(0);
+ switch(filterId){
+ case CP_CLAMP_QUALITY: return QString("Clamp quality vertex values to a given range according to specific values or to percentiles");
+ case CP_MAP_VQUALITY_INTO_COLOR : return QString("Color vertices depending on their quality field (manually equalized).");
+ case CP_MAP_FQUALITY_INTO_COLOR : return QString("Color faces depending on their quality field (manually equalized).");
+ case CP_DISCRETE_CURVATURE : return QString("Colorize according to various discrete curvature computed as described in:
"
+ "'Discrete Differential-Geometry Operators for Triangulated 2-Manifolds'
"
+ "M. Meyer, M. Desbrun, P. Schroder, A. H. Barr");
+ case CP_TRIANGLE_QUALITY: return QString("Compute a quality and colorize faces depending on triangle quality:
"
+ "1: minimum ratio height/edge among the edges
"
+ "2: ratio between radii of incenter and circumcenter
"
+ "3: 2*sqrt(a, b)/(a+b), a, b the eigenvalues of M^tM, M transform triangle into equilateral");
+ case CP_VERTEX_SMOOTH: return QString("Laplacian Smooth Vertex Color");
+ case CP_FACE_SMOOTH: return QString("Laplacian Smooth Face Color");
+ case CP_VERTEX_TO_FACE: return QString("Vertex to Face color transfer");
+ case CP_FACE_TO_VERTEX: return QString("Face to Vertex color transfer");
+ case CP_TEXTURE_TO_VERTEX: return QString("Texture to Vertex color transfer");
+ case CP_COLOR_NON_TOPO_COHERENT : return QString("Color edges topologically non coherent.");
+ case CP_RANDOM_FACE: return QString("Colorize Faces randomly. If internal edges are present they are used");
+ default: assert(0);
}
- return QString();
}
-int ExtraMeshColorizePlugin::getRequirements(QAction *action)
-{
- switch(ID(action))
- {
- case CP_DISCRETE_CURVATURE: return MeshModel::MM_FACEFACETOPO | MeshModel::MM_FACEFLAGBORDER | MeshModel::MM_VERTCURV;
- case CP_TRIANGLE_QUALITY: return MeshModel::MM_FACECOLOR | MeshModel::MM_FACEQUALITY;
- case CP_RANDOM_FACE: return MeshModel::MM_FACEFACETOPO | MeshModel::MM_FACECOLOR;
- case CP_CLAMP_QUALITY: return 0;
- case CP_MAP_QUALITY_INTO_COLOR: return 0;
- case CP_VERTEX_SMOOTH: return 0;
- case CP_FACE_SMOOTH: return MeshModel::MM_FACEFACETOPO | MeshModel::MM_FACECOLOR ;
- case CP_VERTEX_TO_FACE: return MeshModel::MM_FACECOLOR;
- case CP_FACE_TO_VERTEX: return MeshModel::MM_VERTCOLOR;
- case CP_TEXTURE_TO_VERTEX: return MeshModel::MM_FACECOLOR;
-
- default: assert(0);
+int ExtraMeshColorizePlugin::getRequirements(QAction *action){
+ switch(ID(action)){
+ case CP_DISCRETE_CURVATURE: return MeshModel::MM_FACEFACETOPO | MeshModel::MM_FACEFLAGBORDER | MeshModel::MM_VERTCURV;
+ case CP_TRIANGLE_QUALITY: return MeshModel::MM_FACECOLOR | MeshModel::MM_FACEQUALITY;
+ case CP_RANDOM_FACE: return MeshModel::MM_FACEFACETOPO | MeshModel::MM_FACECOLOR;
+ case CP_CLAMP_QUALITY: return 0; // TODO: split clamp on vertex & faces and add requirements
+ case CP_MAP_VQUALITY_INTO_COLOR: return MeshModel::MM_VERTQUALITY;
+ case CP_MAP_FQUALITY_INTO_COLOR: return MeshModel::MM_FACEQUALITY;
+ case CP_VERTEX_SMOOTH: return 0; // TODO: should it be MM_NONE?
+ case CP_FACE_SMOOTH: return MeshModel::MM_FACEFACETOPO | MeshModel::MM_FACECOLOR ;
+ case CP_VERTEX_TO_FACE: return MeshModel::MM_FACECOLOR;
+ case CP_FACE_TO_VERTEX: return MeshModel::MM_VERTCOLOR;
+ case CP_TEXTURE_TO_VERTEX: return MeshModel::MM_FACECOLOR;
+ default: assert(0);
}
return 0;
}
+void ExtraMeshColorizePlugin::initParameterSet(QAction *a, MeshModel &m, RichParameterSet & par){
+ // variables cannot be defined within switch statement
+ QStringList metrics;
+ QStringList curvNameList;
+ pair minmax;
-void ExtraMeshColorizePlugin::initParameterSet(QAction *a,MeshModel &m, RichParameterSet & par)
-{
- switch(ID(a))
- {
- case CP_FACE_SMOOTH:
- case CP_VERTEX_SMOOTH:
- //par.addInt("iteration",1,tr("Iteration"),tr("the number ofiteration of the smoothing algorithm"));
- par.addParam(new RichInt("iteration",1,tr("Iteration"),tr("the number ofiteration of the smoothing algorithm")));
- break;
- case CP_TRIANGLE_QUALITY: {
- QStringList metrics;
- metrics.push_back("area/max side");
+ switch(ID(a)){
+ case CP_FACE_SMOOTH:
+ case CP_VERTEX_SMOOTH:
+ par.addParam(new RichInt("iteration",1,QString("Iteration"),QString("the number ofiteration of the smoothing algorithm")));
+ break;
+ case CP_TRIANGLE_QUALITY:
+ metrics.push_back("area/max side");
metrics.push_back("inradius/circumradius");
metrics.push_back("mean ratio");
par.addParam(new RichEnum("Metric", 0, metrics, tr("Metric:"), tr("Choose a metric to compute triangle quality.")));
break;
- }
- case CP_DISCRETE_CURVATURE: {
- QStringList curvNameList;
+ case CP_DISCRETE_CURVATURE:
curvNameList.push_back("Mean Curvature");
curvNameList.push_back("Gaussian Curvature");
curvNameList.push_back("RMS Curvature");
curvNameList.push_back("ABS Curvature");
- par.addParam(new RichEnum("CurvatureType", 0, curvNameList, tr("Type:"), tr("Choose the curvatures. Mean and Gaussian curvature are computed according the technique described in the Desbrun et al. paper.
"
- "Absolute curvature is defined as |H|+|K| and RMS curvature as sqrt(4* H^2 - 2K) as explained in
Improved curvature estimation for watershed segmentation of 3-dimensional meshes by S. Pulla, A. Razdan, G. Farin. ")));
- break;
- }
+ par.addParam(new RichEnum("CurvatureType", 0, curvNameList, tr("Type:"),
+ QString("Choose the curvatures. Mean and Gaussian curvature are computed according the technique described in the Desbrun et al. paper.
"
+ "Absolute curvature is defined as |H|+|K| and RMS curvature as sqrt(4* H^2 - 2K) as explained in
Improved curvature estimation"
+ "for watershed segmentation of 3-dimensional meshes by S. Pulla, A. Razdan, G. Farin. ")));
+ break;
case CP_CLAMP_QUALITY:
- case CP_MAP_QUALITY_INTO_COLOR :
- {
- pair minmax = tri::Stat::ComputePerVertexQualityMinMax(m.cm);
-
+ case CP_MAP_VQUALITY_INTO_COLOR:
+ minmax = tri::Stat::ComputePerVertexQualityMinMax(m.cm);
par.addParam(new RichFloat("minVal",minmax.first,"Min","The value that will be mapped with the lower end of the scale (blue)"));
par.addParam(new RichFloat("maxVal",minmax.second,"Max","The value that will be mapped with the upper end of the scale (red)"));
par.addParam(new RichDynamicFloat("perc",0,0,100,"Percentile Crop [0..100]","If not zero this value will be used for a percentile cropping of the quality values.
If this parameter is set to P the value V for which P% of the vertices have a quality lower(greater) than V is used as min (max) value.
The automated percentile cropping is very useful for automatically discarding outliers."));
par.addParam(new RichBool("zeroSym",false,"Zero Simmetric","If true the min max range will be enlarged to be symmertic (so that green is always Zero)"));
- }
- break;
-
- default: break; // do not add any parameter for the other filters
+ break;
+ case CP_MAP_FQUALITY_INTO_COLOR:
+ minmax = tri::Stat::ComputePerFaceQualityMinMax(m.cm);
+ par.addParam(new RichFloat("minVal",minmax.first,"Min","The value that will be mapped with the lower end of the scale (blue)"));
+ par.addParam(new RichFloat("maxVal",minmax.second,"Max","The value that will be mapped with the upper end of the scale (red)"));
+ par.addParam(new RichDynamicFloat("perc",0,0,100,"Percentile Crop [0..100]","If not zero this value will be used for a percentile cropping of the quality values.
If this parameter is set to P the value V for which P% of the vertices have a quality lower(greater) than V is used as min (max) value.
The automated percentile cropping is very useful for automatically discarding outliers."));
+ par.addParam(new RichBool("zeroSym",false,"Zero Simmetric","If true the min max range will be enlarged to be symmertic (so that green is always Zero)"));
+ break;
}
}
-bool ExtraMeshColorizePlugin::applyFilter(QAction *filter, MeshDocument &md, RichParameterSet & par, vcg::CallBackPos *cb)
-{
+bool ExtraMeshColorizePlugin::applyFilter(QAction *filter, MeshDocument &md, RichParameterSet & par, vcg::CallBackPos *cb){
MeshModel &m=*(md.mm());
switch(ID(filter)) {
case CP_CLAMP_QUALITY:
- case CP_MAP_QUALITY_INTO_COLOR :
- {
+ case CP_MAP_VQUALITY_INTO_COLOR:{
float RangeMin = par.getFloat("minVal");
float RangeMax = par.getFloat("maxVal");
bool usePerc = par.getDynamicFloat("perc")>0;
@@ -310,92 +308,79 @@ bool ExtraMeshColorizePlugin::applyFilter(QAction *filter, MeshDocument &md, Ric
return true;
}
-MeshFilterInterface::FilterClass ExtraMeshColorizePlugin::getClass(QAction *a)
-{
- switch(ID(a))
- {
- case CP_CLAMP_QUALITY:
- return MeshFilterInterface::Quality;
- case CP_MAP_QUALITY_INTO_COLOR:
- case CP_DISCRETE_CURVATURE:
- case CP_COLOR_NON_TOPO_COHERENT:
- case CP_VERTEX_SMOOTH:
- case CP_FACE_TO_VERTEX:
- return MeshFilterInterface::VertexColoring;
+MeshFilterInterface::FilterClass ExtraMeshColorizePlugin::getClass(QAction *a){
+ switch(ID(a)){
+ case CP_CLAMP_QUALITY:
+ return MeshFilterInterface::Quality;
- case CP_TEXTURE_TO_VERTEX:
- return MeshFilterInterface::VertexColoring;
+ case CP_MAP_VQUALITY_INTO_COLOR:
+ case CP_DISCRETE_CURVATURE:
+ case CP_COLOR_NON_TOPO_COHERENT:
+ case CP_VERTEX_SMOOTH:
+ case CP_FACE_TO_VERTEX:
+ case CP_TEXTURE_TO_VERTEX:
+ return MeshFilterInterface::VertexColoring;
- case CP_TRIANGLE_QUALITY:
- return FilterClass(Quality + FaceColoring);
+ case CP_TRIANGLE_QUALITY:
+ return FilterClass(Quality + FaceColoring);
- case CP_RANDOM_FACE:
- case CP_FACE_SMOOTH:
- case CP_VERTEX_TO_FACE:
- return MeshFilterInterface::FaceColoring;
- default: assert(0);
- return MeshFilterInterface::Generic;
+ case CP_RANDOM_FACE:
+ case CP_FACE_SMOOTH:
+ case CP_VERTEX_TO_FACE:
+ case CP_MAP_FQUALITY_INTO_COLOR:
+ return MeshFilterInterface::FaceColoring;
+
+ default:
+ assert(0);
}
}
-int ExtraMeshColorizePlugin::getPreConditions(QAction *a) const
-{
- switch(ID(a))
- {
- case CP_TRIANGLE_QUALITY:
- case CP_RANDOM_FACE:
- case CP_DISCRETE_CURVATURE:
- case CP_COLOR_NON_TOPO_COHERENT:
- return MeshModel::MM_FACENUMBER;
-
- case CP_CLAMP_QUALITY:
- case CP_MAP_QUALITY_INTO_COLOR:
- return MeshModel::MM_VERTQUALITY;
-
- case CP_FACE_TO_VERTEX:
- case CP_FACE_SMOOTH:
- return MeshModel::MM_FACECOLOR;
-
- case CP_VERTEX_SMOOTH:
- case CP_VERTEX_TO_FACE:
- return MeshModel::MM_VERTCOLOR;
-
- case CP_TEXTURE_TO_VERTEX:
-
- default: assert(0);
- }
- return MeshModel::MM_NONE;
+int ExtraMeshColorizePlugin::getPreConditions(QAction *a) const{
+ switch(ID(a)){
+ case CP_TRIANGLE_QUALITY:
+ case CP_RANDOM_FACE:
+ case CP_DISCRETE_CURVATURE:
+ case CP_COLOR_NON_TOPO_COHERENT:
+ return MeshModel::MM_FACENUMBER;
+ case CP_CLAMP_QUALITY:
+ case CP_MAP_VQUALITY_INTO_COLOR:
+ return MeshModel::MM_VERTQUALITY;
+ case CP_MAP_FQUALITY_INTO_COLOR:
+ return MeshModel::MM_FACEQUALITY;
+ case CP_FACE_TO_VERTEX:
+ case CP_FACE_SMOOTH:
+ return MeshModel::MM_FACECOLOR;
+ case CP_VERTEX_SMOOTH:
+ case CP_VERTEX_TO_FACE:
+ return MeshModel::MM_VERTCOLOR;
+ case CP_TEXTURE_TO_VERTEX:
+ return MeshModel::MM_NONE; // TODO: wrong? compare with original
+ default: assert(0);
+ }
}
-int ExtraMeshColorizePlugin::postCondition( QAction* a ) const
-{
- switch(ID(a))
- {
- case CP_TRIANGLE_QUALITY:
- return MeshModel::MM_FACECOLOR | MeshModel::MM_FACEQUALITY;
-
- case CP_RANDOM_FACE:
- case CP_COLOR_NON_TOPO_COHERENT:
- case CP_FACE_SMOOTH:
- case CP_VERTEX_TO_FACE:
- return MeshModel::MM_FACECOLOR;
- case CP_MAP_QUALITY_INTO_COLOR:
- case CP_FACE_TO_VERTEX:
- case CP_VERTEX_SMOOTH:
- case CP_TEXTURE_TO_VERTEX:
- return MeshModel::MM_VERTCOLOR;
-
- case CP_DISCRETE_CURVATURE:
- return MeshModel::MM_VERTCOLOR | MeshModel::MM_VERTQUALITY | MeshModel::MM_VERTNUMBER;
-
- case CP_CLAMP_QUALITY:
- return MeshModel::MM_VERTQUALITY;
-
- default: assert(0);
+int ExtraMeshColorizePlugin::postCondition( QAction* a ) const{
+ switch(ID(a)){
+ case CP_TRIANGLE_QUALITY:
+ return MeshModel::MM_FACECOLOR | MeshModel::MM_FACEQUALITY;
+ case CP_RANDOM_FACE:
+ case CP_COLOR_NON_TOPO_COHERENT:
+ case CP_FACE_SMOOTH:
+ case CP_VERTEX_TO_FACE:
+ case CP_MAP_FQUALITY_INTO_COLOR:
+ return MeshModel::MM_FACECOLOR;
+ case CP_MAP_VQUALITY_INTO_COLOR:
+ case CP_FACE_TO_VERTEX:
+ case CP_VERTEX_SMOOTH:
+ case CP_TEXTURE_TO_VERTEX:
+ return MeshModel::MM_VERTCOLOR;
+ case CP_DISCRETE_CURVATURE:
+ return MeshModel::MM_VERTCOLOR | MeshModel::MM_VERTQUALITY | MeshModel::MM_VERTNUMBER;
+ case CP_CLAMP_QUALITY:
+ return MeshModel::MM_VERTQUALITY;
+ default: assert(0);
}
- return MeshModel::MM_UNKNOWN;
}
-
Q_EXPORT_PLUGIN(ExtraMeshColorizePlugin)
diff --git a/src/meshlabplugins/filter_colorize/meshcolorize.h b/src/meshlabplugins/filter_colorize/meshcolorize.h
index ebee4f621..d67b73ebd 100644
--- a/src/meshlabplugins/filter_colorize/meshcolorize.h
+++ b/src/meshlabplugins/filter_colorize/meshcolorize.h
@@ -98,7 +98,8 @@ public:
enum {
CP_CLAMP_QUALITY,
- CP_MAP_QUALITY_INTO_COLOR,
+ CP_MAP_VQUALITY_INTO_COLOR,
+ CP_MAP_FQUALITY_INTO_COLOR,
CP_DISCRETE_CURVATURE,
CP_TRIANGLE_QUALITY,
CP_VERTEX_SMOOTH,