From cf028b728bf9c4f4d83b367629382a5e19621f33 Mon Sep 17 00:00:00 2001 From: cnr-isti-vclab Date: Wed, 25 Mar 2009 08:22:03 +0000 Subject: [PATCH] Added parameter invertQuality to PoissonDiskSampling in order to invert how quality influences density distribution --- vcg/complex/trimesh/point_sampling.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/vcg/complex/trimesh/point_sampling.h b/vcg/complex/trimesh/point_sampling.h index eb42d4e9..1f39e2a8 100644 --- a/vcg/complex/trimesh/point_sampling.h +++ b/vcg/complex/trimesh/point_sampling.h @@ -754,9 +754,11 @@ struct PoissonDiskParam adaptiveRadiusFlag = false; radiusVariance =1; MAXLEVELS = 5; + invertQuality = false; } bool adaptiveRadiusFlag; float radiusVariance; + bool invertQuality; int MAXLEVELS; }; @@ -774,7 +776,7 @@ static int ComputePoissonSampleNum(MetroMesh &origMesh, ScalarType diskRadius) return sampleNum; } -static void ComputePoissonSampleRadii(MetroMesh &sampleMesh, ScalarType diskRadius, ScalarType radiusVariance) +static void ComputePoissonSampleRadii(MetroMesh &sampleMesh, ScalarType diskRadius, ScalarType radiusVariance, bool invert) { VertexIterator vi; std::pair minmax = tri::Stat::ComputePerVertexQualityMinMax( sampleMesh); @@ -784,7 +786,7 @@ static void ComputePoissonSampleRadii(MetroMesh &sampleMesh, ScalarType diskRadi float deltaRad = maxRad-minRad; for (vi = sampleMesh.vert.begin(); vi != sampleMesh.vert.end(); vi++) { - (*vi).Q() = minRad + deltaRad*(((*vi).Q() - minmax.first)/deltaQ); + (*vi).Q() = minRad + deltaRad*((invert ? minmax.second - (*vi).Q() : (*vi).Q() - minmax.first )/deltaQ); } } @@ -873,7 +875,7 @@ static void Poissondisk(MetroMesh &origMesh, VertexSampler &ps, MetroMesh &monte // if we are doing variable density sampling we have to prepare the random samples quality with the correct expected radii. if(pp.adaptiveRadiusFlag) - ComputePoissonSampleRadii(montecarloMesh, diskRadius, pp.radiusVariance); + ComputePoissonSampleRadii(montecarloMesh, diskRadius, pp.radiusVariance, pp.invertQuality); do {