diff --git a/apps/sample/trimesh_refine/trimesh_refine.cpp b/apps/sample/trimesh_refine/trimesh_refine.cpp index 81f33edf..380096bc 100644 --- a/apps/sample/trimesh_refine/trimesh_refine.cpp +++ b/apps/sample/trimesh_refine/trimesh_refine.cpp @@ -1,8 +1,6 @@ - -// mesh definition - #include #include +#include #include #include @@ -11,6 +9,9 @@ #include #include #include +#include + +#include // input output #include @@ -22,11 +23,6 @@ using namespace vcg; using namespace std; -//struct MyFace; -//struct MyEdge; -//struct MyVertex: public VertexVN{}; -//struct MyFace: public FaceAF{}; -//struct MyMesh: public tri::TriMesh< vector, vector >{}; class MyEdge; // dummy prototype never used class MyFace; @@ -36,13 +32,15 @@ struct MyUsedTypes : public UsedTypes< Use::AsVertexType, Use::AsFaceType>{}; class MyVertex : public Vertex< MyUsedTypes, vertex::Coord3f, vertex::Normal3f, vertex::BitFlags >{}; -class MyFace : public Face < MyUsedTypes, face::FFAdj, face::VertexRef, face::BitFlags > {}; -class MyMesh : public vcg::tri::TriMesh< vector, vector > {}; +class MyFace : public Face < MyUsedTypes, face::InfoOcf, face::FFAdjOcf, face::VertexRef, face::BitFlags > {}; +class MyMesh : public vcg::tri::TriMesh< vector, face::vector_ocf > {}; #define FLAT 0 -#define BUTTERFLY 2 +#define LOOP 1 +#define CATMULL 2 +#define BUTTERFLY 3 int main(int argc, char **argv) { @@ -55,8 +53,10 @@ int main(int argc, char **argv) "Commands: \n" " Refinement rules:\n" " -m use simple midpoint subdivision (default) \n" - " -b use butterfly subdivision scheme \n" - " -l# refine only if the the edge is longer than #(default 0.0)\n" + " -b use butterfly subdivision scheme \n" + " -l use butterfly subdivision scheme \n" + " -c use butterfly subdivision scheme \n" + " -e# refine only if the the edge is longer than #(default 0.0)\n" ); exit(0); } @@ -71,30 +71,48 @@ int main(int argc, char **argv) { case 'm' : RefMode=FLAT; break; case 'b' : RefMode=BUTTERFLY; break; - case 'l' : length=(float)atof(argv[i]+2); break; + case 'l' : RefMode=LOOP; break; + case 'c' : RefMode=CATMULL; break; + case 'e' : length=(float)atof(argv[i]+2); break; default : {printf("Error unable to parse option '%s'\n",argv[i]); exit(0);} } ++i; } MyMesh m; - if(vcg::tri::io::ImporterPLY::Open(m,argv[1])!=0) + if(tri::io::ImporterPLY::Open(m,argv[1])!=0) { printf("Error reading file %s\n",argv[1]); exit(0); } - vcg::tri::UpdateTopology::FaceFace(m); - vcg::tri::UpdateFlags::FaceBorderFromFF(m); - vcg::tri::UpdateNormals::PerVertexNormalized(m); + m.face.EnableFFAdjacency(); + tri::UpdateTopology::FaceFace(m); + tri::UpdateFlags::FaceBorderFromFF(m); + tri::UpdateNormals::PerVertexNormalized(m); printf("Input mesh vn:%i fn:%i\n",m.vn,m.fn); n_steps=atoi(argv[3]); for(i=0;i < n_steps;++i) { - switch(RefMode){ - case FLAT: Refine >(m,MidPoint(&m),length); break; - case BUTTERFLY: Refine >(m,MidPointButterfly(),length); break; + switch(RefMode) + { + case FLAT: + Refine >(m,MidPoint(&m),length); + break; + case LOOP: + tri::RefineOddEven, tri::EvenPointLoop >(m, tri::OddPointLoop(), tri::EvenPointLoop(), length); + break; + case CATMULL: + tri::BitQuadCreation::MakePureByRefine(m); + assert(tri::BitQuadCreation::IsBitTriQuadConventional(m)); + tri::UpdateTopology::FaceFace(m); + tri::BitQuadCreation::MakePureByRefine(m); + tri::UpdateNormals::PerBitQuadFaceNormalized(m); + break; + case BUTTERFLY: + Refine >(m,MidPointButterfly(),length); + break; } } diff --git a/apps/sample/trimesh_refine/trimesh_refine.pro b/apps/sample/trimesh_refine/trimesh_refine.pro index fb7ee1d5..7aeb6e87 100644 --- a/apps/sample/trimesh_refine/trimesh_refine.pro +++ b/apps/sample/trimesh_refine/trimesh_refine.pro @@ -10,4 +10,6 @@ DEPENDPATH += . INCLUDEPATH += . ../../.. CONFIG += console stl TEMPLATE = app -SOURCES += trimesh_refine.cpp ../../../wrap/ply/plylib.cpp \ No newline at end of file +SOURCES += trimesh_refine.cpp ../../../wrap/ply/plylib.cpp +# Mac specific Config required to avoid to make application bundles +CONFIG -= app_bundle