Removed a bug in the managment of non triangular faces

This commit is contained in:
Paolo Cignoni 2006-12-21 00:36:17 +00:00
parent 01695ba1d5
commit bbcb8dc26b
1 changed files with 11 additions and 5 deletions

View File

@ -25,6 +25,9 @@
History History
$Log: not supported by cvs2svn $ $Log: not supported by cvs2svn $
Revision 1.11 2006/12/12 02:47:12 cignoni
Removed use of tellg that is broken in current version of mingw
Revision 1.10 2006/11/21 10:56:41 cignoni Revision 1.10 2006/11/21 10:56:41 cignoni
ReWrote loadMask. Now shorter and faster. ReWrote loadMask. Now shorter and faster.
@ -314,7 +317,7 @@ static int Open( OpenMeshType &m, const char * filename, Info &oi)
int numVNormals = 0; // stores the number of vertex normals been read till now int numVNormals = 0; // stores the number of vertex normals been read till now
int numVerticesPlusFaces = oi.numVertices + oi.numFaces; int numVerticesPlusFaces = oi.numVertices + oi.numFaces;
int extraTriangles=0;
// vertices and faces allocatetion // vertices and faces allocatetion
VertexIterator vi = Allocator<OpenMeshType>::AddVertices(m,oi.numVertices); VertexIterator vi = Allocator<OpenMeshType>::AddVertices(m,oi.numVertices);
//FaceIterator fi = Allocator<OpenMeshType>::AddFaces(m,oi.numFaces); //FaceIterator fi = Allocator<OpenMeshType>::AddFaces(m,oi.numFaces);
@ -458,11 +461,13 @@ static int Open( OpenMeshType &m, const char * filename, Info &oi)
// ------------------------------------------ // ------------------------------------------
if(!GoodObjIndex(v4_index, numVertices)) if(!GoodObjIndex(v4_index, numVertices))
return E_BAD_VERT_INDEX; return E_BAD_VERT_INDEX;
if(!GoodObjIndex(vn4_index,numVNormals))
return E_BAD_VERT_NORMAL_INDEX;
if(!GoodObjIndex(vt4_index,oi.numTexCoords)) if(!GoodObjIndex(vt4_index,oi.numTexCoords))
return E_BAD_VERT_TEX_INDEX; return E_BAD_VERT_TEX_INDEX;
if ( oi.mask & vcg::tri::io::Mask::IOM_WEDGNORMAL )
if(!GoodObjIndex(vn4_index,numVNormals))
return E_BAD_VERT_NORMAL_INDEX;
ffNew.t[1]=ff.t[2]; ffNew.t[1]=ff.t[2];
ffNew.t[2]=vt4_index; ffNew.t[2]=vt4_index;
} }
@ -480,6 +485,7 @@ static int Open( OpenMeshType &m, const char * filename, Info &oi)
} }
++numTriangles; ++numTriangles;
++extraTriangles;
indexedFaces.push_back(ffNew); indexedFaces.push_back(ffNew);
ff.v[2] = v4_index; ff.v[2] = v4_index;
} }
@ -530,7 +536,7 @@ static int Open( OpenMeshType &m, const char * filename, Info &oi)
// we simply ignore other situations // we simply ignore other situations
} // end for each line... } // end for each line...
} // end while stream not eof } // end while stream not eof
assert((numTriangles +numVertices) == numVerticesPlusFaces); assert((numTriangles +numVertices) == numVerticesPlusFaces+extraTriangles);
FaceIterator fi = Allocator<OpenMeshType>::AddFaces(m,numTriangles); FaceIterator fi = Allocator<OpenMeshType>::AddFaces(m,numTriangles);
//------------------------------------------------------------------------------- //-------------------------------------------------------------------------------