From c8262379f39b4d2301a3169bb86e29df80d377fb Mon Sep 17 00:00:00 2001 From: Paolo Cignoni cignoni Date: Thu, 13 Nov 2008 16:14:51 +0000 Subject: [PATCH] cleaned up the mechanism of enabling/allowing the save of elements in the dialog. Now vertex normals for ply should work allowing to use ply for pointsets --- src/meshlab/mainwindow_RunTime.cpp | 10 ++++- src/meshlab/meshmodel.cpp | 29 +++++++++++++ src/meshlab/meshmodel.h | 66 +++++++++++++++++------------- src/meshlab/savemaskexporter.cpp | 12 +++--- 4 files changed, 81 insertions(+), 36 deletions(-) diff --git a/src/meshlab/mainwindow_RunTime.cpp b/src/meshlab/mainwindow_RunTime.cpp index 696d6db25..2a49bb7ab 100644 --- a/src/meshlab/mainwindow_RunTime.cpp +++ b/src/meshlab/mainwindow_RunTime.cpp @@ -977,15 +977,23 @@ bool MainWindow::open(QString fileName, GLArea *gla) renderModeTextureAct->setEnabled(true); GLA()->setTextureMode(GLW::TMPerWedgeMulti); } + + + if( mask & vcg::tri::io::Mask::IOM_VERTNORMAL) vcg::tri::UpdateNormals::PerFace(mm->cm); else vcg::tri::UpdateNormals::PerVertexNormalizedPerFaceNormalized(mm->cm); + vcg::tri::UpdateBounding::Box(mm->cm); // updates bounding box + if(gla->mm()->cm.fn==0){ gla->setDrawMode(vcg::GLW::DMPoints); - gla->setLight(false); + if(!(mask & vcg::tri::io::Mask::IOM_VERTNORMAL)) gla->setLight(false); + else mm->updateDataMask(MeshModel::MM_VERTNORMAL); } + else mm->updateDataMask(MeshModel::MM_VERTNORMAL); + updateMenus(); int delVertNum = vcg::tri::Clean::RemoveDegenerateVertex(mm->cm); int delFaceNum = vcg::tri::Clean::RemoveDegenerateFace(mm->cm); diff --git a/src/meshlab/meshmodel.cpp b/src/meshlab/meshmodel.cpp index baae2089d..aab694506 100644 --- a/src/meshlab/meshmodel.cpp +++ b/src/meshlab/meshmodel.cpp @@ -125,3 +125,32 @@ bool MeshModel::RenderSelectedFaces() glPopAttrib(); return true; } + + +int MeshModel::io2mm(int single_iobit) +{ + switch(single_iobit) + { + case tri::io::Mask::IOM_NONE : return MM_NONE; + case tri::io::Mask::IOM_VERTCOORD : return MM_VERTCOORD; + case tri::io::Mask::IOM_VERTCOLOR : return MM_VERTCOLOR; + case tri::io::Mask::IOM_VERTFLAGS : return MM_VERTFLAG; + case tri::io::Mask::IOM_VERTQUALITY : return MM_VERTQUALITY; + case tri::io::Mask::IOM_VERTNORMAL : return MM_VERTNORMAL; + case tri::io::Mask::IOM_VERTTEXCOORD : return MM_VERTTEXCOORD; + case tri::io::Mask::IOM_VERTRADIUS : return MM_VERTRADIUS; + + case tri::io::Mask::IOM_FACEINDEX : return MM_FACEVERT ; + case tri::io::Mask::IOM_FACEFLAGS : return MM_FACEFLAG ; + case tri::io::Mask::IOM_FACECOLOR : return MM_FACECOLOR ; + case tri::io::Mask::IOM_FACEQUALITY : return MM_FACEQUALITY; + case tri::io::Mask::IOM_FACENORMAL : return MM_FACENORMAL ; + + case tri::io::Mask::IOM_WEDGTEXCOORD : return MM_WEDGTEXCOORD; + case tri::io::Mask::IOM_WEDGCOLOR : return MM_WEDGCOLOR; + case tri::io::Mask::IOM_WEDGNORMAL : return MM_WEDGNORMAL ; + } ; + + assert(0); +} + diff --git a/src/meshlab/meshmodel.h b/src/meshlab/meshmodel.h index b0bec0795..25ab8a99b 100644 --- a/src/meshlab/meshmodel.h +++ b/src/meshlab/meshmodel.h @@ -126,39 +126,41 @@ public: - 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 = 0x000000, - MM_VERTCOORD = 0x000001, - MM_VERTNORMAL = 0x000002, - MM_VERTFLAG = 0x000004, - MM_VERTCOLOR = 0x000008, - MM_VERTQUALITY = 0x000010, - MM_VERTMARK = 0x000020, - MM_VERTFACETOPO = 0x000040, - MM_VERTCURV = 0x000080, - MM_VERTCURVDIR = 0x000100, - MM_VERTRADIUS = 0x000200, + 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_FACEVERT = 0x001000, - MM_FACENORMAL = 0x002000, - MM_FACEFLAG = 0x004000, - MM_FACECOLOR = 0x008000, - MM_FACEQUALITY = 0x010000, - MM_FACEMARK = 0x020000, - MM_FACEFACETOPO = 0x040000, - MM_WEDGTEXCOORD = 0x080000, - MM_WEDGNORMAL = 0x100000, + MM_FACEVERT = 0x00001000, + MM_FACENORMAL = 0x00002000, + MM_FACEFLAG = 0x00004000, + MM_FACECOLOR = 0x00008000, + MM_FACEQUALITY = 0x00010000, + MM_FACEMARK = 0x00020000, + MM_FACEFACETOPO = 0x00040000, + MM_WEDGTEXCOORD = 0x00080000, + MM_WEDGNORMAL = 0x00100000, + MM_WEDGCOLOR = 0x00200000, // SubParts of bits - MM_VERTFLAGSELECT = 0x01000000, - MM_FACEFLAGSELECT = 0x02000000, + MM_VERTFLAGSELECT = 0x01000000, + MM_FACEFLAGSELECT = 0x02000000, // This part should be deprecated. - MM_VERTFLAGBORDER = 0x04000000, - MM_FACEFLAGBORDER = 0x08000000, + MM_VERTFLAGBORDER = 0x04000000, + MM_FACEFLAGBORDER = 0x08000000, // Per Mesh Stuff.... - MM_CAMERA = 0x10000000, + MM_CAMERA = 0x10000000, - MM_ALL = 0xffffff + MM_ALL = 0xffffffff } ; @@ -299,7 +301,11 @@ public: currentDataMask = currentDataMask & (~unneededDataMask); } -}; + + static int io2mm(int single_iobit); + +};// end class MeshModel + class RenderMode @@ -331,7 +337,8 @@ public: castShadow = false; selectedFaces=false; } -}; + +}; // end class RenderMode class MeshDocument : public QObject { @@ -409,7 +416,7 @@ public: //when ever the current mesh changed this will send out the index of the newest mesh void currentMeshChanged(int index); -}; +};// end class MeshDocument /* A class designed to save partial aspects of the state of a mesh, such as vertex colors, current selections, vertex positions @@ -528,6 +535,7 @@ class MeshModelState } bool isValid(MeshModel *m); + }; #endif diff --git a/src/meshlab/savemaskexporter.cpp b/src/meshlab/savemaskexporter.cpp index 89dd2a0ef..ddbf7daa6 100644 --- a/src/meshlab/savemaskexporter.cpp +++ b/src/meshlab/savemaskexporter.cpp @@ -147,7 +147,7 @@ int SaveMaskExporterDialog::GetNewMask() there are three things that are looked when setting the initial states of the checkbox of this dialog - this->capabilityBit - this->defaultBit - - m->ioMask + setDisabled(true): uncheckable setDisabled(false) : checkable @@ -164,17 +164,17 @@ int SaveMaskExporterDialog::GetNewMask() */ bool SaveMaskExporterDialog::shouldBeChecked(int bit, int capabilityBits, int defaultBits) { - if(!m->hasDataMask(bit)) return false; + if(!m->hasDataMask(MeshModel::io2mm(bit))) return false; //if( (bit & meshBits) == 0 ) return false; if( (bit & defaultBits) == 0 ) return false; return true; } -bool SaveMaskExporterDialog::shouldBeEnabled(int bit, int capabilityBits, int defaultBits) +bool SaveMaskExporterDialog::shouldBeEnabled(int iobit, int capabilityBits, int defaultBits) { - if( (bit & capabilityBits) == 0 ) return false; -// if( (bit & meshBits) == 0 ) return false; - if(!m->hasDataMask(bit)) return false; + if( (iobit & capabilityBits) == 0 ) return false; + int mmbit = MeshModel::io2mm(iobit); + if(!m->hasDataMask(mmbit)) return false; return true; }