From a2e16cf8f94b236fe8ab0fc330ebd7706366d934 Mon Sep 17 00:00:00 2001 From: Paolo Cignoni cignoni Date: Thu, 19 Oct 2006 07:34:24 +0000 Subject: [PATCH] added callback --- src/meshlabplugins/meshfilter/quadricsimp.cpp | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/meshlabplugins/meshfilter/quadricsimp.cpp b/src/meshlabplugins/meshfilter/quadricsimp.cpp index 958ebdcb2..2d5421595 100644 --- a/src/meshlabplugins/meshfilter/quadricsimp.cpp +++ b/src/meshlabplugins/meshfilter/quadricsimp.cpp @@ -22,6 +22,9 @@ /**************************************************************************** History $Log$ +Revision 1.3 2006/10/19 07:34:24 cignoni +added callback + Revision 1.2 2006/10/15 17:08:52 cignoni typenames and qualifiers for gcc compliance @@ -56,8 +59,8 @@ class QHelper static void Init(){}; static math::Quadric &Qd(CVertexO &v) {return TD()[v];} static math::Quadric &Qd(CVertexO *v) {return TD()[*v];} - static CVertexO::ScalarType W(CVertexO *v) {return 1.0;}; - static CVertexO::ScalarType W(CVertexO &v) {return 1.0;}; + static CVertexO::ScalarType W(CVertexO * /*v*/) {return 1.0;}; + static CVertexO::ScalarType W(CVertexO & /*v*/) {return 1.0;}; static void Merge(CVertexO & /*v_dest*/, CVertexO const & /*v_del*/){}; static QuadricTemp* &TDp() {static QuadricTemp *td; return td;} static QuadricTemp &TD() {return *TDp();} @@ -72,7 +75,7 @@ class MyTriEdgeCollapse: public vcg::tri::TriEdgeCollapseQuadric< CMeshO, MyTriE }; -void QuadricSimplification(CMeshO &cm,float threshold) +void QuadricSimplification(CMeshO &cm,int TargetFaceNum, CallBackPos *cb) { math::Quadric QZero; QZero.Zero(); @@ -83,19 +86,19 @@ void QuadricSimplification(CMeshO &cm,float threshold) tri::TriEdgeCollapseQuadricParameter qparams; MyTriEdgeCollapse::SetDefaultParams(); qparams.QualityThr =.3; - int FinalSize=cm.fn/2; vcg::LocalOptimization DeciSession(cm); - - int t1=clock(); + cb(1,"Initializing simplification"); DeciSession.Init(); - int t2=clock(); - printf("Initial Heap Size %i\n",DeciSession.h.size()); - DeciSession.SetTargetSimplices(FinalSize); - DeciSession.SetTimeBudget(0.5f); + DeciSession.SetTargetSimplices(TargetFaceNum); + DeciSession.SetTimeBudget(0.1f); // this allow to update the progress bar 10 time for sec... // if(TargetError< numeric_limits::max() ) DeciSession.SetTargetMetric(TargetError); - - while( DeciSession.DoOptimization() && cm.fn>FinalSize ); + int startFn=cm.fn; + int faceToDel=cm.fn-TargetFaceNum; + while( DeciSession.DoOptimization() && cm.fn>TargetFaceNum ) + { + cb(100-100*(cm.fn-TargetFaceNum)/(faceToDel), "Simplifing"); + }; }