From f6b8487607e053f4776bcff05afcd67cdfc54546 Mon Sep 17 00:00:00 2001 From: ponchio Date: Thu, 2 Dec 2004 19:12:44 +0000 Subject: [PATCH] *** empty log message *** --- apps/nexus/decimate.cpp | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/apps/nexus/decimate.cpp b/apps/nexus/decimate.cpp index 5293753d..190aa459 100644 --- a/apps/nexus/decimate.cpp +++ b/apps/nexus/decimate.cpp @@ -45,16 +45,13 @@ class MyFace : public vcg::FaceAV {}; class MyMesh: public vcg::tri::TriMesh< std::vector, std::vector > {}; -class MyTriEdgeCollapse: - public vcg::tri::TriEdgeCollapseQuadric< MyMesh, MyTriEdgeCollapse > { -public: - typedef vcg::tri::TriEdgeCollapseQuadric TECQ; - typedef TECQ::EdgeType EdgeType; - MyTriEdgeCollapse(EdgeType p, int i): TECQ(p, i) {} - ~MyTriEdgeCollapse() {} +class MyTriEdgeCollapse: public vcg::tri::TriEdgeCollapseQuadric< MyMesh, MyTriEdgeCollapse > { + public: + typedef vcg::tri::TriEdgeCollapseQuadric< MyMesh, MyTriEdgeCollapse > TECQ; + typedef TECQ::EdgeType EdgeType; + inline MyTriEdgeCollapse( EdgeType p, int i) :TECQ(p,i){} }; - float Cluster(MyMesh &mesh, unsigned int target_faces); float Quadric(MyMesh &mesh, unsigned int target_faces); @@ -62,8 +59,7 @@ float nxs::Decimate(Decimation mode, unsigned int target_faces, vector &newvert, vector &newface, - vector &newbord) { - + vector &newbord) { for(unsigned int i = 0; i < newface.size(); i+= 3) { assert(newface[i] != newface[i+1]); @@ -100,10 +96,12 @@ float nxs::Decimate(Decimation mode, // vcg::tri::io::ExporterPLY::Save(mesh, "ribum.ply"); float error; - if(mode == CLUSTER) - error = Cluster(mesh, target_faces); - else - error = Quadric(mesh, target_faces); + switch(mode) { + case CLUSTER: error = Cluster(mesh, target_faces); break; + case QUADRIC: error = Quadric(mesh, target_faces); break; + default: cerr << "Unknown simplification mode: " << mode << endl; + exit(0); + } newvert.clear(); newface.clear(); @@ -144,6 +142,8 @@ float nxs::Decimate(Decimation mode, float Quadric(MyMesh &mesh, unsigned int target_faces) { vcg::tri::UpdateTopology::VertexFace(mesh); + vcg::tri::UpdateBounding::Box(mesh); + vcg::LocalOptimization DeciSession(mesh); MyTriEdgeCollapse::SetDefaultParams(); @@ -164,7 +164,8 @@ float Quadric(MyMesh &mesh, unsigned int target_faces) { } } error /= count; - return error; + return error; + return 0; } float Cluster(MyMesh &mesh, unsigned int target_faces) { @@ -212,7 +213,7 @@ float Cluster(MyMesh &mesh, unsigned int target_faces) { } for(unsigned int i = nborder; i < part.size(); i++) { if(count[i] > 0) - part[i] = centroid[i]/count[i]; + part[i] = centroid[i]/count[i]; } }