From 584922ff2b4cbe05c46b775f4ec8b94b6dbae26d Mon Sep 17 00:00:00 2001 From: Paolo Cignoni cignoni Date: Thu, 4 Dec 2014 16:11:49 +0000 Subject: [PATCH] Changed relaxation procedrue in voronoi. --- .../filter_voronoi/filter_voronoi.cpp | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/meshlabplugins/filter_voronoi/filter_voronoi.cpp b/src/meshlabplugins/filter_voronoi/filter_voronoi.cpp index e95398f14..7048491a2 100644 --- a/src/meshlabplugins/filter_voronoi/filter_voronoi.cpp +++ b/src/meshlabplugins/filter_voronoi/filter_voronoi.cpp @@ -29,7 +29,6 @@ #include #include #include -#include // Constructor usually performs only two simple tasks of filling the two lists // - typeList: with all the possible id of the filtering actions @@ -81,9 +80,9 @@ bool FilterVoronoiPlugin::applyFilter( const QString& filterName,MeshDocument& m { m.updateDataMask(MeshModel::MM_VERTFACETOPO); m.updateDataMask(MeshModel::MM_FACEFACETOPO); - tri::FieldSmoother::InitByCurvature(m.cm); - tri::FieldSmoother::SmoothParam par; - tri::FieldSmoother::SmoothDirections(m.cm,par); +// tri::FieldSmoother::InitByCurvature(m.cm); +// tri::FieldSmoother::SmoothParam par; +// tri::FieldSmoother::SmoothDirections(m.cm,par); } return true; @@ -115,6 +114,7 @@ bool FilterVoronoiPlugin::applyFilter( const QString& filterName,MeshDocument& m // tri::ClusteringSampler cs(seedVec); // tri::SurfaceSampling >::SamplingRandomGenerator().initialize(randSeed); vector pointVec; + vector fixedVec; CMeshO::ScalarType radius=0; int randomSeed = env.evalInt("randomSeed"); @@ -125,12 +125,15 @@ bool FilterVoronoiPlugin::applyFilter( const QString& filterName,MeshDocument& m vpp.colorStrategy = env.evalEnum("colorStrategy"); vpp.deleteUnreachedRegionFlag=true; vpp.refinementRatio=env.evalInt("refineFactor"); + vpp.seedPerturbationAmount = env.evalDouble("perturbAmount"); + vpp.seedPerturbationProbability = env.evalDouble("perturbProbability"); if(env.evalBool("preprocessFlag")) { tri::VoronoiProcessing::PreprocessForVoronoi(m.cm,radius,vpp); } - tri::VoronoiProcessing::SeedToVertexConversion(m.cm,pointVec,seedVec); + tri::VoronoiProcessing::SeedToVertexConversion(m.cm,pointVec,seedVec); + fixedVec.resize(pointVec.size(),false); QList meshlist; meshlist << m.id(); if(distanceType==0) // Uniform Euclidean Distance @@ -140,10 +143,14 @@ bool FilterVoronoiPlugin::applyFilter( const QString& filterName,MeshDocument& m { cb(100*i/iterNum, "Relaxing..."); if(env.evalEnum("relaxType")==2) - tri::VoronoiProcessing >::RestrictedVoronoiRelaxing(m.cm, seedVec, 10,vpp); + { + tri::VoronoiProcessing >::RestrictedVoronoiRelaxing(m.cm, pointVec, fixedVec, 10,vpp); + tri::VoronoiProcessing::SeedToVertexConversion(m.cm,pointVec,seedVec); + tri::VoronoiProcessing::ComputePerVertexSources(m.cm,seedVec,dd); + } else tri::VoronoiProcessing >::VoronoiRelaxing(m.cm, seedVec, 1,dd,vpp); - md.updateRenderStateMeshes(meshlist,int(MeshModel::MM_VERTCOLOR)); +// md.updateRenderStateMeshes(meshlist,int(MeshModel::MM_VERTCOLOR)); if (intteruptreq) return true; } om->updateDataMask(MeshModel::MM_FACEFACETOPO); @@ -157,7 +164,7 @@ bool FilterVoronoiPlugin::applyFilter( const QString& filterName,MeshDocument& m { cb(100*i/iterNum, "Relaxing..."); tri::VoronoiProcessing >::VoronoiRelaxing(m.cm, seedVec, 1,id,vpp); - md.updateRenderStateMeshes(meshlist,int(MeshModel::MM_VERTCOLOR)); +// md.updateRenderStateMeshes(meshlist,int(MeshModel::MM_VERTCOLOR)); if (intteruptreq) return true; } // tri::VoronoiProcessing::ConvertVoronoiDiagramToMesh(m.cm,om->cm,poly->cm,seedVec, vpp); @@ -170,13 +177,13 @@ bool FilterVoronoiPlugin::applyFilter( const QString& filterName,MeshDocument& m BasicCrossFunctor bcf(m.cm); AnisotropicDistance ad(m.cm,bcf); tri::VoronoiProcessing >::VoronoiRelaxing(m.cm, seedVec, 1, ad, vpp); - md.updateRenderStateMeshes(meshlist,int(MeshModel::MM_VERTCOLOR)); +// md.updateRenderStateMeshes(meshlist,int(MeshModel::MM_VERTCOLOR)); if (intteruptreq) return true; } // tri::VoronoiProcessing >::ConvertVoronoiDiagramToMesh(m.cm,om->cm,seedVec, ad, vpp); } - md.updateRenderStateMeshes(meshlist,int(MeshModel::MM_VERTCOLOR)); +// md.updateRenderStateMeshes(meshlist,int(MeshModel::MM_VERTCOLOR)); if (intteruptreq) return true; om->UpdateBoxAndNormals();