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

This commit is contained in:
Paolo Cignoni cignoni 2008-11-13 16:14:51 +00:00
parent 0ad91da6b9
commit c8262379f3
4 changed files with 81 additions and 36 deletions

View File

@ -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<CMeshO>::PerFace(mm->cm);
else
vcg::tri::UpdateNormals<CMeshO>::PerVertexNormalizedPerFaceNormalized(mm->cm);
vcg::tri::UpdateBounding<CMeshO>::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<CMeshO>::RemoveDegenerateVertex(mm->cm);
int delFaceNum = vcg::tri::Clean<CMeshO>::RemoveDegenerateFace(mm->cm);

View File

@ -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);
}

View File

@ -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

View File

@ -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;
}