Changed importers (off ply obj raw) to tag edges inside polygonal faces as "faux"
This commit is contained in:
parent
97b5d83721
commit
241d058c92
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -840,38 +840,49 @@ 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
|
||||
// It performs a simple fan triangulation.
|
||||
if(fa.size>3)
|
||||
{
|
||||
int curpos=int(fi-m.face.begin());
|
||||
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)
|
||||
{
|
||||
(*fi).V(0) = index[ fa.v[0] ];
|
||||
for(k=1;k<3;++k)
|
||||
{
|
||||
if( fa.v[2+qq]<0 || fa.v[2+qq]>=m.vn )
|
||||
{
|
||||
pi.status = PlyInfo::E_BAD_VERT_INDEX;
|
||||
return pi.status;
|
||||
}
|
||||
(*fi).V(k) = index[ fa.v[1+qq+k] ];
|
||||
}
|
||||
for(k=1;k<3;++k)
|
||||
{
|
||||
if( fa.v[2+qq]<0 || fa.v[2+qq]>=m.vn )
|
||||
{
|
||||
pi.status = PlyInfo::E_BAD_VERT_INDEX;
|
||||
return pi.status;
|
||||
}
|
||||
(*fi).V(k) = index[ fa.v[1+qq+k] ];
|
||||
|
||||
}
|
||||
|
||||
for(k=0;k<pi.fdn;k++)
|
||||
memcpy((char *)(&(*fi)) + pi.FaceData[k].offset1,
|
||||
(char *)(&fa) + FPV[k].offset1, FPV[k].memtypesize());
|
||||
++fi;
|
||||
}
|
||||
// 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());
|
||||
++fi;
|
||||
}
|
||||
|
||||
}
|
||||
}else if( !strcmp( pf.ElemName(i),"tristrips") )//////////////////// LETTURA TRISTRIP DI STANFORD
|
||||
|
@ -1168,3 +1179,4 @@ static bool LoadMask(const char * filename, int &mask, PlyInfo &pi)
|
|||
} // end namespace vcg
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue