diff --git a/vcg/complex/algorithms/stat.h b/vcg/complex/algorithms/stat.h index 02aa5894..dd1e12b9 100644 --- a/vcg/complex/algorithms/stat.h +++ b/vcg/complex/algorithms/stat.h @@ -48,6 +48,7 @@ Initial Commit #include #include #include +#include namespace vcg { @@ -64,6 +65,7 @@ class Stat typedef typename MeshType::FaceType FaceType; typedef typename MeshType::FacePointer FacePointer; typedef typename MeshType::FaceIterator FaceIterator; + typedef typename MeshType::EdgeIterator EdgeIterator; typedef typename MeshType::FaceContainer FaceContainer; typedef typename vcg::Box3 Box3Type; @@ -202,14 +204,33 @@ class Stat } } - static int ComputeEdgeHistogram( MeshType & m, Histogramf &h) // V1.0 + static void ComputeEdgeHistogram( MeshType & m, Histogramf &h) { - ScalarType Diag = m.bbox.Diag(); + assert(m.edge.size()>0); h.Clear(); - h.SetRange( 0, Diag, 10000); - FaceIterator fi;VertexIterator vi; - for(vi = m.vert.begin(); vi != m.vert.end(); ++vi) (*vi).ClearV(); - for(fi = m.face.begin(); fi != m.face.end(); ++fi) + h.SetRange( 0, m.bbox.Diag(), 10000); + for(EdgeIterator ei = m.edge.begin(); ei != m.edge.end(); ++ei) + { + if(!(*ei).IsD()) + { + h.Add(Distance((*ei).V(0)->P(),(*ei).V(1)->P())); + } + } + } + + static ScalarType ComputeEdgeAverage(MeshType & m) + { + Histogramf h; + ComputeEdgeHistogram(m,h); + return h.Avg(); + } + + static int ComputeFaceEdgeHistogram( MeshType & m, Histogramf &h) + { + h.Clear(); + h.SetRange( 0, m.bbox.Diag(), 10000); + tri::UpdateFlags::VertexClearV(m); + for(FaceIterator fi = m.face.begin(); fi != m.face.end(); ++fi) { if(!(*fi).IsD()) { @@ -233,8 +254,6 @@ class Stat } } } - - for(vi = m.vert.begin(); vi != m.vert.end(); ++vi)(*vi).ClearV(); return 0; } }; // end class