Changed importers (off ply obj raw) to tag edges inside polygonal faces as "faux"

This commit is contained in:
mtarini 2009-04-20 22:59:08 +00:00
parent 97b5d83721
commit 241d058c92
4 changed files with 48 additions and 23 deletions

View File

@ -625,7 +625,7 @@ static int Open( OpenMeshType &m, const char * filename, Info &oi)
}
if ( oi.mask & vcg::tri::io::Mask::IOM_WEDGNORMAL )
m.face[i].WN(j).Import(normals[indexedFaces[i].n[j]]);
// set border flags according to internals faces
// set faux edge flags according to internals faces
if(indexedFaces[i].edge[j]) m.face[i].SetF(j);
else m.face[i].ClearF(j);
}

View File

@ -499,6 +499,12 @@ namespace vcg
mesh.face[f+j].V(0) = &(mesh.vert[ vertIndices[0 ] ]);
mesh.face[f+j].V(1) = &(mesh.vert[ vertIndices[1+j] ]);
mesh.face[f+j].V(2) = &(mesh.vert[ vertIndices[2+j] ]);
if (tri::HasPerFaceFlags(mesh)) {
// tag internal polygnal edges as "faux"
if (j>0) mesh.face[f+j].SetF(0);
if (j<vert_per_face-3) mesh.face[f+j].SetF(2);
loadmask |= Mask::IOM_FACEFLAGS;
}
}
f+=trigs;

View File

@ -840,10 +840,15 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi )
(*fi).V(k) = index[ fa.v[k] ];
}
// tag faux vertices of first face
if (fa.size>3) fi->SetF(2);
for(k=0;k<pi.fdn;k++)
memcpy((char *)(&(*fi)) + pi.FaceData[k].offset1,
(char *)(&fa) + FPV[k].offset1,
FPV[k].memtypesize());
++fi;
// Non Triangular Faces Loop
@ -853,6 +858,7 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi )
int curpos=int(fi-m.face.begin());
Allocator<OpenMeshType>::AddFaces(m,fa.size-3);
fi=m.face.begin()+curpos;
}
for(int qq=0;qq<fa.size-3;++qq)
{
@ -865,8 +871,13 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi )
return pi.status;
}
(*fi).V(k) = index[ fa.v[1+qq+k] ];
}
// tag faux vertices of extra faces
fi->SetF(0);
if (qq!=fa.size-3) fi->SetF(2);
for(k=0;k<pi.fdn;k++)
memcpy((char *)(&(*fi)) + pi.FaceData[k].offset1,
(char *)(&fa) + FPV[k].offset1, FPV[k].memtypesize());
@ -1168,3 +1179,4 @@ static bool LoadMask(const char * filename, int &mask, PlyInfo &pi)
} // end namespace vcg
#endif

View File

@ -419,29 +419,36 @@ static int Open( MESH_TYPE &m, const char * filename, bool triangulate=false, in
int trinum = (rownumber-1) * (colnumber-1) * 2;
FaceIterator fi=Allocator<MESH_TYPE>::AddFaces(m,trinum);
FaceIterator fi2 = fi;
m.fn = trinum;
for(cc=0; cc<colnumber-1; cc++)
for(rr=0; rr<rownumber-1; rr++)
{
// upper tri
(*fi).V(2) = &(m.vert[(cc ) + ((rr ) * colnumber)]);
(*fi).V(1) = &(m.vert[(cc+1) + ((rr ) * colnumber)]);
(*fi).V(0) = &(m.vert[(cc ) + ((rr+1) * colnumber)]);
(*fi).V(0) = &(m.vert[(cc+1) + ((rr ) * colnumber)]);
(*fi).V(1) = &(m.vert[(cc ) + ((rr ) * colnumber)]);
(*fi).V(2) = &(m.vert[(cc ) + ((rr+1) * colnumber)]);
fi++;
// lower tri
(*fi).V(2) = &(m.vert[(cc+1) + ((rr ) * colnumber)]);
(*fi).V(1) = &(m.vert[(cc+1) + ((rr+1) * colnumber)]);
(*fi).V(0) = &(m.vert[(cc ) + ((rr+1) * colnumber)]);
(*fi).V(1) = &(m.vert[(cc+1) + ((rr+1) * colnumber)]);
(*fi).V(2) = &(m.vert[(cc+1) + ((rr ) * colnumber)]);
fi++;
}
// tag faux faces
if (m.HasPerFaceFlags()) {
for (; fi2!=m.face.end(); fi2++) {
(*fi2).SetF(2);
}
}
}