From f79adff0da3e262117a431c5ba21c5fb377906de Mon Sep 17 00:00:00 2001 From: cignoni Date: Thu, 8 Mar 2007 22:49:35 +0000 Subject: [PATCH] Changed the include order and the order in which cleaning filters are applied. --- apps/trimeshinfo/trimeshinfo.cpp | 70 ++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 31 deletions(-) diff --git a/apps/trimeshinfo/trimeshinfo.cpp b/apps/trimeshinfo/trimeshinfo.cpp index f0d62b99..71cf71b1 100644 --- a/apps/trimeshinfo/trimeshinfo.cpp +++ b/apps/trimeshinfo/trimeshinfo.cpp @@ -24,6 +24,9 @@ History $Log: not supported by cvs2svn $ +Revision 1.40 2006/05/16 21:55:28 cignoni +Updated to the new remove zero area syntax + Revision 1.39 2006/03/29 09:27:07 cignoni Added managemnt of non critical errors @@ -176,6 +179,12 @@ Added Standard comments using namespace std; // VCG headers +#include +#include + +#include +#include + #include #include #include @@ -188,11 +197,6 @@ using namespace std; #include #include -#include -#include - -#include -#include #include #include @@ -231,7 +235,8 @@ struct MeshInfo bool hasFColor; bool hasTexture; int vn,fn; - bool Manifold; + bool VManifold; + bool FManifold; int count_e,boundary_e,count_fd,count_uv,numholes; int BEdges; float Volume; @@ -319,7 +324,8 @@ void initMeshInfo(MeshInfo &mi) mi.hasFNormal = false; mi.hasVNormal = false; mi.hasTexture = false; - mi.Manifold = false; + mi.VManifold = false; + mi.FManifold = false; mi.count_e = 0; mi.boundary_e = 0; mi.count_fd = 0; @@ -378,7 +384,7 @@ void PrintMeshInfo(MeshInfo &mi) else printf(" Has Texture information: NO\n"); - if ((mi.Manifold)&&(mi.Oriented)&&(!mi.numholes)) + if ((mi.VManifold && mi.FManifold )&&(mi.Oriented)&&(!mi.numholes)) printf(" Volume: %f \n", mi.Volume); else printf(" Volume: UNDEFINED (a closed oriented manifold is required)\n"); @@ -386,7 +392,7 @@ void PrintMeshInfo(MeshInfo &mi) printf(" Number of connected components: %d\n", mi.numcomponents); // Orientation - if (!mi.Manifold) + if (!mi.VManifold && mi.FManifold) { printf(" Orientable Mesh: NO\n"); printf(" Oriented Mesh: NO\n"); @@ -405,13 +411,13 @@ void PrintMeshInfo(MeshInfo &mi) } // Manifold - if (!mi.Manifold) - printf(" Manifold: NO\n"); - else + if (mi.VManifold && mi.FManifold ) printf(" Manifold: YES\n"); + else + printf(" Manifold: NO\n"); // Genus - if (mi.Manifold) + if (mi.VManifold && mi.FManifold) printf(" Genus: %d \n", mi.Genus); else printf(" Genus: N/A \n"); @@ -442,7 +448,7 @@ void SaveXMLInfo(MeshInfo &mi) sprintf(s,"%d",mi.fn); doc.addNode(s, VALUE_INTEGER, "Number of Faces"); - if(mi.Manifold) + if(mi.VManifold && mi.FManifold) doc.addNode("false", VALUE_BOOL,"Manifold"); else doc.addNode("true", VALUE_BOOL,"Manifold"); @@ -498,7 +504,7 @@ void SaveXMLInfo(MeshInfo &mi) else doc.addNode("IRREGULAR", VALUE_STRING,"Type of Mesh"); - if (!mi.Manifold) + if (!mi.VManifold && mi.FManifold) { doc.addNode("NO", VALUE_STRING,"Orientable Mesh"); doc.addNode("NO", VALUE_STRING,"Oriented Mesh"); @@ -535,7 +541,7 @@ void SaveMeshInfoHtmlTable(fstream &fout, MeshInfo &mi) fout << " " << mi.fn << "" << std::endl; fout << " " << mi.count_e << "" << std::endl; - if (mi.Manifold) + if (mi.VManifold && mi.FManifold) fout << " " << mi.numholes << "" << std::endl; else fout << " N/A" << std::endl; @@ -551,7 +557,7 @@ void SaveMeshInfoHtmlTable(fstream &fout, MeshInfo &mi) else fout << " None" << std::endl; - if (mi.Manifold) + if(mi.VManifold && mi.FManifold) fout << " Yes" << std::endl; else fout << " No" << std::endl; @@ -563,7 +569,7 @@ void SaveMeshInfoHtmlTable(fstream &fout, MeshInfo &mi) else if (!mi.Orientable) fout << " No / No" << std::endl; - if (mi.Manifold) + if (mi.VManifold && mi.FManifold) fout << " " << mi.Genus << "" << std::endl; else fout << " N/A" << std::endl; @@ -758,27 +764,29 @@ int main(int argc, char ** argv) // Number of faces mi.fn = m.fn; - // DEGENERATED FACES => (faces with area zero) - mi.count_fd = tri::Clean::RemoveFaceOutOfRangeArea(m,0); - - // UNREFERENCED VERTEX - mi.count_uv = tri::Clean::RemoveUnreferencedVertex(m); - // DUPLICATED VERTICES mi.dv = tri::Clean::RemoveDuplicateVertex(m); + // DEGENERATED FACES => (faces with area zero) + mi.count_fd = tri::Clean::RemoveDegenerateFace(m); + mi.count_fd += tri::Clean::RemoveFaceOutOfRangeArea(m,0); + + // UNREFERENCED VERTEX + mi.count_uv = tri::Clean::RemoveUnreferencedVertex(m); + // Update topology (face-to-face) tri::UpdateTopology::FaceFace(m); tri::UpdateTopology::VertexFace(m); // IS MANIFOLD? - mi.Manifold = tri::Clean::IsTwoManifoldFace(m) && tri::Clean::IsTwoManifoldVertex(m); - + mi.VManifold = tri::Clean::IsTwoManifoldVertex(m); + mi.FManifold = tri::Clean::IsTwoManifoldFace(m); + // COUNT EDGES tri::Clean::CountEdges(m, mi.count_e, mi.boundary_e); // HOLES COUNT - if(mi.Manifold) + if(mi.VManifold && mi.FManifold) { mi.numholes = tri::Clean::CountHoles(m); mi.BEdges = tri::Clean::BorderEdges(m, mi.numholes); @@ -788,7 +796,7 @@ int main(int argc, char ** argv) mi.numcomponents = tri::Clean::ConnectedComponents(m); // ORIENTATION - if (mi.Manifold) + if (mi.VManifold && mi.FManifold) tri::Clean::IsOrientedMesh(m, mi.Oriented, mi.Orientable); else { @@ -800,7 +808,7 @@ int main(int argc, char ** argv) tri::UpdateTopology::VertexFace(m); // VOLUME (require a closed oriented manifold) - if ((mi.Manifold)&&(mi.Oriented)&&(!mi.numholes)) + if ((mi.VManifold && mi.FManifold)&&(mi.Oriented)&&(!mi.numholes)) { tri::Inertia mm; mm.Compute(m); @@ -812,12 +820,12 @@ int main(int argc, char ** argv) } // GENUS - if(mi.Manifold) + if(mi.VManifold && mi.FManifold) mi.Genus = tri::Clean::MeshGenus(m, mi.numholes, mi.numcomponents, mi.count_e); // REGULARITY - if (mi.Manifold) + if (mi.VManifold && mi.FManifold) tri::Clean::IsRegularMesh(m, mi.Regular, mi.Semiregular); else {