Added missing face quality variable and added postcondition for function filters (preview!)

This commit is contained in:
Paolo Cignoni cignoni 2010-04-30 09:40:15 +00:00
parent 304d89e5b2
commit db42bd4e2c
2 changed files with 41 additions and 9 deletions

View File

@ -72,12 +72,12 @@ FilterFunctionPlugin::~FilterFunctionPlugin()
case FF_VERT_SELECTION : return QString("Conditional Vertex Selection");
case FF_FACE_SELECTION : return QString("Conditional Face Selection");
case FF_GEOM_FUNC : return QString("Geometric Function");
case FF_FACE_COLOR : return QString("Per-Face Color Function");
case FF_FACE_QUALITY : return QString("Per-Face Quality Function");
case FF_VERT_COLOR : return QString("Per-Vertex Color Function");
case FF_VERT_QUALITY : return QString("Per-Vertex Quality Function");
case FF_DEF_VERT_ATTRIB : return QString("Define New Per-Vertex Attribute");
case FF_DEF_FACE_ATTRIB : return QString("Define New Per-Face Attribute");
case FF_FACE_COLOR : return QString("Per Face Color Function");
case FF_FACE_QUALITY : return QString("Per Face Quality Function");
case FF_VERT_COLOR : return QString("Per Vertex Color Function");
case FF_VERT_QUALITY : return QString("Per Vertex Quality Function");
case FF_DEF_VERT_ATTRIB : return QString("Define New Per Vertex Attribute");
case FF_DEF_FACE_ATTRIB : return QString("Define New Per Face Attribute");
case FF_GRID : return QString("Grid Generator");
case FF_REFINE : return QString("Refine User-Defined");
case FF_ISOSURFACE : return QString("Implicit Surface");
@ -169,11 +169,34 @@ const QString PerFaceAttributeString("It's possibile to use per-face variables l
case FF_DEF_VERT_ATTRIB : return MeshFilterInterface::Layer;
case FF_DEF_FACE_ATTRIB : return MeshFilterInterface::Layer;
default : return MeshFilterInterface::Generic;
}
}
int FilterFunctionPlugin::postCondition(QAction *action) const
{
switch(ID(action))
{
case FF_VERT_SELECTION :
case FF_FACE_SELECTION :
return MeshModel::MM_VERTFLAGSELECT | MeshModel::MM_FACEFLAGSELECT;
case FF_FACE_COLOR :
return MeshModel::MM_FACECOLOR;
case FF_GEOM_FUNC :
return MeshModel::MM_VERTCOORD + MeshModel::MM_VERTNORMAL + MeshModel::MM_FACENORMAL;
case FF_VERT_COLOR :
return MeshModel::MM_VERTCOLOR;
case FF_VERT_QUALITY :
return MeshModel::MM_VERTQUALITY+MeshModel::MM_VERTCOLOR;
case FF_FACE_QUALITY :
return MeshModel::MM_FACECOLOR + MeshModel::MM_FACEQUALITY;
case FF_DEF_VERT_ATTRIB :
case FF_GRID :
case FF_ISOSURFACE :
case FF_DEF_FACE_ATTRIB :
case FF_REFINE :
return MeshModel::MM_UNKNOWN;
}
}
int FilterFunctionPlugin::getRequirements(QAction *action)
{
switch(ID(action))
@ -968,6 +991,10 @@ void FilterFunctionPlugin::setAttributes(CMeshO::FaceIterator &fi, CMeshO &m)
g2 = (*fi).V(2)->C()[1];
b2 = (*fi).V(2)->C()[2];
if(HasPerFaceQuality(m))
fq=(*fi).Q();
else fq=0;
// set face color attributes
if(HasPerFaceColor(m)){
r = (*fi).C()[0];
@ -1066,6 +1093,9 @@ void FilterFunctionPlugin::setPerFaceVariables(Parser &p)
p.DefineVar("g", &g);
p.DefineVar("b", &b);
// face quality
p.DefineVar("q", &fq);
// index
p.DefineVar("fi",&f);
p.DefineVar("vi0",&v0i);

View File

@ -37,7 +37,7 @@ class FilterFunctionPlugin : public QObject, public MeshFilterInterface
Q_INTERFACES(MeshFilterInterface)
protected:
double x,y,z,nx,ny,nz,r,g,b,q,rad;
double x,y,z,nx,ny,nz,r,g,b,q,fq,rad;
double x0,y0,z0,x1,y1,z1,x2,y2,z2,nx0,ny0,nz0,nx1,ny1,nz1,nx2,ny2,nz2,r0,g0,b0,r1,g1,b1,r2,g2,b2,q0,q1,q2;
double v,f,v0i,v1i,v2i;
std::vector<std::string> v_attrNames;
@ -67,9 +67,11 @@ public:
virtual QString filterName(FilterIDType filter) const;
virtual QString filterInfo(FilterIDType filter) const;
virtual FilterClass getClass(QAction *);
virtual int postCondition(QAction *action) const;
virtual void initParameterSet(QAction *,MeshModel &/*m*/, RichParameterSet & /*parent*/);
virtual int getRequirements(QAction *);
virtual bool applyFilter(QAction *filter, MeshDocument &md, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
void showParserError(const QString &s, mu::Parser::exception_type &e);
void normalizeVertexQuality(MeshModel &m);
void normalizeFaceQuality(MeshModel &m);