mirror of
https://github.com/lucaspalomodevelop/meshlab.git
synced 2026-03-16 01:24:36 +00:00
213 lines
10 KiB
C++
213 lines
10 KiB
C++
#include "interfaces.h"
|
|
|
|
bool MeshFilterInterface::isFilterApplicable(QAction *act, const MeshModel& m, QStringList &MissingItems) const
|
|
{
|
|
int preMask = getPreConditions(act);
|
|
MissingItems.clear();
|
|
|
|
if (preMask == MeshModel::MM_NONE) // no precondition specified.
|
|
return true;
|
|
|
|
if (preMask & MeshModel::MM_VERTCOLOR && !m.hasDataMask(MeshModel::MM_VERTCOLOR))
|
|
MissingItems.push_back("Vertex Color");
|
|
|
|
if (preMask & MeshModel::MM_FACECOLOR && !m.hasDataMask(MeshModel::MM_FACECOLOR))
|
|
MissingItems.push_back("Face Color");
|
|
|
|
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");
|
|
|
|
if (preMask & MeshModel::MM_VERTTEXCOORD && !m.hasDataMask(MeshModel::MM_VERTTEXCOORD))
|
|
MissingItems.push_back("Per Vertex Texture Coords");
|
|
|
|
if (preMask & MeshModel::MM_VERTRADIUS && !m.hasDataMask(MeshModel::MM_VERTRADIUS))
|
|
MissingItems.push_back("Vertex Radius");
|
|
|
|
if (preMask & MeshModel::MM_CAMERA && !m.hasDataMask(MeshModel::MM_CAMERA))
|
|
MissingItems.push_back("Camera");
|
|
|
|
if (preMask & MeshModel::MM_FACENUMBER && (m.cm.fn==0))
|
|
MissingItems.push_back("Any Faces");
|
|
|
|
|
|
return MissingItems.isEmpty();
|
|
}
|
|
|
|
int MeshFilterInterface::previewOnCreatedAttributes(QAction* act,const MeshModel& mm )
|
|
{
|
|
int changedIfCalled = postCondition(act);
|
|
int createdIfCalled = MeshModel::MM_NONE;
|
|
if ((changedIfCalled & MeshModel::MM_VERTCOLOR) && !mm.hasDataMask(MeshModel::MM_VERTCOLOR))
|
|
createdIfCalled = createdIfCalled | MeshModel::MM_VERTCOLOR;
|
|
|
|
if ((changedIfCalled & MeshModel::MM_FACECOLOR) && !mm.hasDataMask(MeshModel::MM_FACECOLOR))
|
|
createdIfCalled = createdIfCalled | MeshModel::MM_FACECOLOR;
|
|
|
|
if ((changedIfCalled & MeshModel::MM_VERTQUALITY) && !mm.hasDataMask(MeshModel::MM_VERTQUALITY))
|
|
createdIfCalled = createdIfCalled | MeshModel::MM_VERTQUALITY;
|
|
|
|
if ((changedIfCalled & MeshModel::MM_FACEQUALITY) && !mm.hasDataMask(MeshModel::MM_FACEQUALITY))
|
|
createdIfCalled = createdIfCalled | MeshModel::MM_FACEQUALITY;
|
|
|
|
if ((changedIfCalled & MeshModel::MM_WEDGTEXCOORD) && !mm.hasDataMask(MeshModel::MM_WEDGTEXCOORD))
|
|
createdIfCalled = createdIfCalled | MeshModel::MM_WEDGTEXCOORD;
|
|
|
|
if ((changedIfCalled & MeshModel::MM_VERTTEXCOORD) && !mm.hasDataMask(MeshModel::MM_VERTTEXCOORD))
|
|
createdIfCalled = createdIfCalled | MeshModel::MM_VERTTEXCOORD;
|
|
|
|
if ((changedIfCalled & MeshModel::MM_VERTRADIUS) && !mm.hasDataMask(MeshModel::MM_VERTRADIUS))
|
|
createdIfCalled = createdIfCalled | MeshModel::MM_VERTRADIUS;
|
|
|
|
if ((getClass(act) == MeshFilterInterface::MeshCreation) && (mm.cm.vn == 0))
|
|
createdIfCalled = createdIfCalled | MeshModel::MM_VERTCOORD;
|
|
|
|
return createdIfCalled;
|
|
}
|
|
|
|
bool MeshLabFilterInterface::arePreCondsValid( const int filterPreConds,const MeshModel& m, QStringList &MissingItems )
|
|
{
|
|
MissingItems.clear();
|
|
|
|
if (filterPreConds == MeshModel::MM_NONE) // no precondition specified.
|
|
return true;
|
|
|
|
if (filterPreConds & MeshModel::MM_VERTCOLOR && !m.hasDataMask(MeshModel::MM_VERTCOLOR))
|
|
MissingItems.push_back("Vertex Color");
|
|
|
|
if (filterPreConds & MeshModel::MM_FACECOLOR && !m.hasDataMask(MeshModel::MM_FACECOLOR))
|
|
MissingItems.push_back("Face Color");
|
|
|
|
if (filterPreConds & MeshModel::MM_VERTQUALITY && !m.hasDataMask(MeshModel::MM_VERTQUALITY))
|
|
MissingItems.push_back("Vertex Quality");
|
|
|
|
if (filterPreConds & MeshModel::MM_FACEQUALITY && !m.hasDataMask(MeshModel::MM_FACEQUALITY))
|
|
MissingItems.push_back("Face Quality");
|
|
|
|
if (filterPreConds & MeshModel::MM_WEDGTEXCOORD && !m.hasDataMask(MeshModel::MM_WEDGTEXCOORD))
|
|
MissingItems.push_back("Per Wedge Texture Coords");
|
|
|
|
if (filterPreConds & MeshModel::MM_VERTTEXCOORD && !m.hasDataMask(MeshModel::MM_VERTTEXCOORD))
|
|
MissingItems.push_back("Per Vertex Texture Coords");
|
|
|
|
if (filterPreConds & MeshModel::MM_VERTRADIUS && !m.hasDataMask(MeshModel::MM_VERTRADIUS))
|
|
MissingItems.push_back("Vertex Radius");
|
|
|
|
if (filterPreConds & MeshModel::MM_FACENUMBER && (m.cm.fn==0))
|
|
MissingItems.push_back("Non empty Face Set");
|
|
|
|
return MissingItems.isEmpty();
|
|
}
|
|
|
|
int MeshLabFilterInterface::convertStringListToMeshElementEnum( const QStringList& stringListEnum )
|
|
{
|
|
int res = 0;
|
|
QMap<QString,MeshModel::MeshElement> convertingMap;
|
|
initConvertingMap(convertingMap);
|
|
foreach(QString st,stringListEnum)
|
|
{
|
|
res = res | convertingMap[st];
|
|
}
|
|
return res;
|
|
}
|
|
|
|
void MeshLabFilterInterface::initConvertingMap(QMap<QString,MeshModel::MeshElement>& convertingMap)
|
|
{
|
|
convertingMap["MM_NONE"] = MeshModel::MeshElement(MeshModel::MM_NONE);
|
|
convertingMap["MM_VERTCOORD"] = MeshModel::MeshElement(MeshModel::MM_VERTCOORD);
|
|
convertingMap["MM_VERTNORMAL"] = MeshModel::MeshElement(MeshModel::MM_VERTNORMAL);
|
|
convertingMap["MM_VERTFLAG"] = MeshModel::MeshElement(MeshModel::MM_VERTFLAG);
|
|
convertingMap["MM_VERTCOLOR"] = MeshModel::MeshElement(MeshModel::MM_VERTCOLOR);
|
|
convertingMap["MM_VERTQUALITY"]= MeshModel::MeshElement(MeshModel::MM_VERTQUALITY);
|
|
convertingMap["MM_VERTMARK"] = MeshModel::MeshElement(MeshModel::MM_VERTMARK);
|
|
convertingMap["MM_VERTFACETOPO"] = MeshModel::MeshElement(MeshModel::MM_VERTFACETOPO);
|
|
convertingMap["MM_VERTCURV"] = MeshModel::MeshElement(MeshModel::MM_VERTCURV);
|
|
convertingMap["MM_VERTCURVDIR"] = MeshModel::MeshElement(MeshModel::MM_VERTCURVDIR);
|
|
convertingMap["MM_VERTRADIUS"] = MeshModel::MeshElement(MeshModel::MM_VERTRADIUS);
|
|
convertingMap["MM_VERTTEXCOORD"] = MeshModel::MeshElement(MeshModel::MM_VERTTEXCOORD);
|
|
convertingMap["MM_VERTNUMBER"] = MeshModel::MeshElement(MeshModel::MM_VERTNUMBER);
|
|
convertingMap["MM_FACEVERT"] = MeshModel::MeshElement(MeshModel::MM_FACEVERT);
|
|
convertingMap["MM_FACENORMAL"] = MeshModel::MeshElement(MeshModel::MM_FACENORMAL);
|
|
convertingMap["MM_FACEFLAG"] = MeshModel::MeshElement(MeshModel::MM_FACEFLAG);
|
|
convertingMap["MM_FACECOLOR"] = MeshModel::MeshElement(MeshModel::MM_FACECOLOR);
|
|
convertingMap["MM_FACEQUALITY"] = MeshModel::MeshElement(MeshModel::MM_FACEQUALITY);
|
|
convertingMap["MM_FACEMARK"] = MeshModel::MeshElement(MeshModel::MM_FACEMARK);
|
|
convertingMap["MM_FACEFACETOPO"] = MeshModel::MeshElement(MeshModel::MM_FACEFACETOPO);
|
|
convertingMap["MM_FACENUMBER"] = MeshModel::MeshElement(MeshModel::MM_FACENUMBER);
|
|
convertingMap["MM_WEDGTEXCOORD"] = MeshModel::MeshElement(MeshModel::MM_WEDGTEXCOORD);
|
|
convertingMap["MM_WEDGNORMAL"] = MeshModel::MeshElement(MeshModel::MM_WEDGNORMAL);
|
|
convertingMap["MM_WEDGCOLOR"] = MeshModel::MeshElement(MeshModel::MM_WEDGCOLOR);
|
|
convertingMap["MM_UNKNOWN"] = MeshModel::MeshElement(MeshModel::MM_UNKNOWN);
|
|
convertingMap["MM_VERTFLAGSELECT"] = MeshModel::MeshElement(MeshModel::MM_VERTFLAGSELECT);
|
|
convertingMap["MM_FACEFLAGSELECT"] = MeshModel::MeshElement(MeshModel::MM_FACEFLAGSELECT);
|
|
// convertingMap["MM_VERTFLAGBORDER"] = MeshModel::MeshElement(MeshModel::MM_VERTFLAGBORDER);
|
|
// convertingMap["MM_FACEFLAGBORDER"] = MeshModel::MeshElement(MeshModel::MM_FACEFLAGBORDER);
|
|
convertingMap["MM_CAMERA"] = MeshModel::MeshElement(MeshModel::MM_CAMERA);
|
|
convertingMap["MM_TRANSFMATRIX"] = MeshModel::MeshElement(MeshModel::MM_TRANSFMATRIX);
|
|
convertingMap["MM_COLOR"] = MeshModel::MeshElement(MeshModel::MM_COLOR);
|
|
convertingMap["MM_POLYGONAL"] = MeshModel::MeshElement(MeshModel::MM_POLYGONAL);
|
|
convertingMap["MM_ALL"] = MeshModel::MeshElement(MeshModel::MM_ALL);
|
|
}
|
|
|
|
MeshLabFilterInterface::MeshLabFilterInterface()
|
|
:QObject(),glContext(NULL),intteruptreq(false)
|
|
{
|
|
//if (!init)
|
|
//{
|
|
// initConvertingMap();
|
|
// init = true;
|
|
//}
|
|
}
|
|
|
|
void MeshLabFilterInterface::initConvertingCategoryMap( QMap<QString,MeshFilterInterface::FilterClass>& convertingMap )
|
|
{
|
|
convertingMap["Generic"] = MeshFilterInterface::Generic;
|
|
convertingMap["Selection"] = MeshFilterInterface::Selection;
|
|
convertingMap["Cleaning"] = MeshFilterInterface::Cleaning;
|
|
convertingMap["Remeshing"] = MeshFilterInterface::Remeshing;
|
|
convertingMap["FaceColoring"] = MeshFilterInterface::FaceColoring;
|
|
convertingMap["VertexColoring"] = MeshFilterInterface::VertexColoring;
|
|
convertingMap["MeshColoring"] = MeshFilterInterface::MeshColoring;
|
|
convertingMap["MeshCreation"] = MeshFilterInterface::MeshCreation;
|
|
convertingMap["Smoothing"] = MeshFilterInterface::Smoothing;
|
|
convertingMap["Quality"] = MeshFilterInterface::Quality;
|
|
convertingMap["Layer"] = MeshFilterInterface::Layer;
|
|
convertingMap["Normal"] = MeshFilterInterface::Normal;
|
|
convertingMap["Sampling"] = MeshFilterInterface::Sampling;
|
|
convertingMap["Texture"] = MeshFilterInterface::Texture;
|
|
convertingMap["RangeMap"] = MeshFilterInterface::RangeMap;
|
|
convertingMap["PointSet"] = MeshFilterInterface::PointSet;
|
|
convertingMap["Measure"] = MeshFilterInterface::Measure;
|
|
convertingMap["Polygonal"] = MeshFilterInterface::Polygonal;
|
|
convertingMap["Camera"] = MeshFilterInterface::Camera;
|
|
}
|
|
|
|
int MeshLabFilterInterface::convertStringListToCategoryEnum( const QStringList& stringListEnum )
|
|
{
|
|
int res = 0;
|
|
QMap<QString,MeshFilterInterface::FilterClass> convertingMap;
|
|
initConvertingCategoryMap(convertingMap);
|
|
foreach(QString st,stringListEnum)
|
|
{
|
|
res = res | convertingMap[st];
|
|
}
|
|
return res;
|
|
}
|
|
|
|
//bool MeshLabFilterInterface::sendUpdateRequest( const MeshDocument& md,const QList<int>& meshid,const int meshmaskupdate,const QList<int>& rasterid,const int rastermaskupdate )
|
|
//{
|
|
// if (intteruptreq)
|
|
// return false;
|
|
// md.updateRenderState(meshid,meshmaskupdate,rasterid,rastermaskupdate);
|
|
// return true;
|
|
//}
|
|
|
|
//QMap<QString,MeshModel::MeshElement> MeshLabFilterInterface::convertingMap;
|
|
//
|
|
//bool MeshLabFilterInterface::init = false;
|