diff --git a/apps/sample/trimesh_split_vertex/trimesh_split_vertex.cpp b/apps/sample/trimesh_split_vertex/trimesh_split_vertex.cpp index 4c14bd84..71b1220b 100644 --- a/apps/sample/trimesh_split_vertex/trimesh_split_vertex.cpp +++ b/apps/sample/trimesh_split_vertex/trimesh_split_vertex.cpp @@ -1,7 +1,9 @@ #include #include +#include #include +#include #include #include @@ -13,12 +15,43 @@ during the process new vertices could be created. */ +#define TEST_IN_PLACE_SPLIT + +#ifdef TEST_IN_PLACE_SPLIT + +class SrcVertex; +class SrcEdge; +class SrcFace; + +class SrcVertex : public vcg::VertexSimp2 +< SrcVertex, SrcEdge, SrcFace, + vcg::vertex::InfoOcf, + vcg::vertex::Coord3f, + vcg::vertex::TexCoordfOcf, + vcg::vertex::BitFlags +> { }; + +class SrcFace : public vcg::FaceSimp2 +< SrcVertex, SrcEdge, SrcFace, + vcg::face::InfoOcf, + vcg::face::VertexRef, + vcg::face::WedgeTexCoordfOcf +> { }; + +class SrcMesh : public vcg::tri::TriMesh , vcg::face::vector_ocf > { }; + +typedef SrcVertex DstVertex; +typedef SrcFace DstFace; +typedef SrcMesh DstMesh; + +#else + // source mesh type: per-wedge texture coordinates class SrcVertex; class SrcEdge; class SrcFace; -class SrcVertex : public vcg::VertexSimp2 { }; +class SrcVertex : public vcg::VertexSimp2 { }; class SrcFace : public vcg::FaceSimp2 { }; class SrcMesh : public vcg::tri::TriMesh , std::vector > { }; @@ -28,10 +61,12 @@ class DstVertex; class DstEdge; class DstFace; -class DstVertex : public vcg::VertexSimp2 { }; +class DstVertex : public vcg::VertexSimp2 { }; class DstFace : public vcg::FaceSimp2 { }; class DstMesh : public vcg::tri::TriMesh , std::vector > { }; +#endif + // extract wedge attributes functor. // given a source face and a wedge index, this functor extracts all the relevant attributes from the wedge // and transfer them to the destination vertex. @@ -83,30 +118,43 @@ int main(int argc, char ** argv) } SrcMesh srcMesh; +#ifdef TEST_IN_PLACE_SPLIT + srcMesh.face.EnableWedgeTex(); +#endif vcg::tri::io::ImporterPLY::Open(srcMesh, argv[1]); if ((srcMesh.vn <= 0) || (srcMesh.fn <= 0)) { printf("invalid source mesh file.\n"); return -1; } + const int srcVN = srcMesh.vn; + const int srcFN = srcMesh.fn; printf("source mesh succesfully loaded.\n"); +#ifdef TEST_IN_PLACE_SPLIT + DstMesh & dstMesh = srcMesh; + dstMesh.vert.EnableTexCoord(); + vcg::tri::AttributeSeam::SplitVertex(dstMesh, ExtractVertex, CompareVertex); +#else DstMesh dstMesh; vcg::tri::AttributeSeam::SplitVertex(srcMesh, dstMesh, ExtractVertex, CompareVertex, CopyVertex); dstMesh.textures = srcMesh.textures; +#endif if (vcg::tri::io::ExporterPLY::Save(dstMesh, argv[2], vcg::tri::io::Mask::IOM_VERTCOORD | vcg::tri::io::Mask::IOM_VERTTEXCOORD) != 0) { printf("cannot save destination mesh file.\n"); return -1; } printf("destination mesh succesfully saved.\n"); + const int dstVN = dstMesh.vn; + const int dstFN = dstMesh.fn; printf("\n"); printf("statistics:\n"); - printf(" input mesh vertices count : %d\n", srcMesh.vn); - printf(" input mesh faces count : %d\n", srcMesh.fn); - printf(" splitted mesh vertices count : %d\n", dstMesh.vn); - printf(" splitted mesh faces count : %d\n", dstMesh.fn); + printf(" input mesh vertices count : %d\n", srcVN); + printf(" input mesh faces count : %d\n", srcFN); + printf(" splitted mesh vertices count : %d\n", dstVN); + printf(" splitted mesh faces count : %d\n", dstFN); printf("\n"); return 0;