[Bf-blender-cvs] [47b7f77be52] temp-geometry-nodes-distribute-points-cleanup: Move the tiling code to its own function

Dalai Felinto noreply at git.blender.org
Fri Dec 11 02:00:50 CET 2020


Commit: 47b7f77be52f833ca5af381078c685ccb036c3e3
Author: Dalai Felinto
Date:   Fri Dec 11 01:51:19 2020 +0100
Branches: temp-geometry-nodes-distribute-points-cleanup
https://developer.blender.org/rB47b7f77be52f833ca5af381078c685ccb036c3e3

Move the tiling code to its own function

===================================================================

M	source/blender/nodes/geometry/nodes/node_geo_point_distribute_poisson_disk.cc

===================================================================

diff --git a/source/blender/nodes/geometry/nodes/node_geo_point_distribute_poisson_disk.cc b/source/blender/nodes/geometry/nodes/node_geo_point_distribute_poisson_disk.cc
index 5c04a439ca0..489bc896d45 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_point_distribute_poisson_disk.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_point_distribute_poisson_disk.cc
@@ -144,6 +144,42 @@ static float weight_limit_fraction_get(const size_t input_size, const size_t out
   return (1.0f - std::pow(ratio, gamma)) * beta;
 }
 
+/**
+ * Tile the input points.
+ */
+static void points_tiling(Vector<float3> const *input_points,
+                          const void *kd_tree,
+                          const float maximum_distance,
+                          const float3 boundbox)
+
+{
+  std::vector<float3> tiled_points(input_points->data(),
+                                   input_points->data() + input_points->size());
+  std::vector<size_t> indices(input_points->size());
+
+  /* Start building a kdtree for the samples. */
+  for (size_t i = 0; i < input_points->size(); i++) {
+    indices[i] = i;
+    BLI_kdtree_3d_insert((KDTree_3d *)kd_tree, i, input_points->data()[i]);
+  }
+  BLI_kdtree_3d_balance((KDTree_3d *)kd_tree);
+
+  /* Tile the tree based on the boundbox. */
+  for (size_t i = 0; i < input_points->size(); i++) {
+    tile_point(&tiled_points, &indices, maximum_distance, boundbox, input_points->data()[i], i);
+  }
+
+  /* Re-use the same kdtree, so free it before re-creating it. */
+  BLI_kdtree_3d_free((KDTree_3d *)kd_tree);
+
+  /* Build a new tree with the new indices and tiled points. */
+  kd_tree = BLI_kdtree_3d_new(tiled_points.size());
+  for (size_t i = 0; i < tiled_points.size(); i++) {
+    BLI_kdtree_3d_insert((KDTree_3d *)kd_tree, indices[i], tiled_points[i]);
+  }
+  BLI_kdtree_3d_balance((KDTree_3d *)kd_tree);
+}
+
 static void weighted_sample_elimination(Vector<float3> const *input_points,
                                         Vector<float3> *output_points,
                                         const float maximum_distance,
@@ -154,40 +190,7 @@ static void weighted_sample_elimination(Vector<float3> const *input_points,
                                                            output_points->size());
 
   void *kd_tree = BLI_kdtree_3d_new(input_points->size());
-  {
-    std::vector<float3> tiled_points(input_points->data(),
-                                     input_points->data() + input_points->size());
-    std::vector<size_t> indices(input_points->size());
-
-    /* Start building a kdtree for the samples. */
-    for (size_t i = 0; i < input_points->size(); i++) {
-      indices[i] = i;
-      BLI_kdtree_3d_insert((KDTree_3d *)kd_tree, i, input_points->data()[i]);
-    }
-    BLI_kdtree_3d_balance((KDTree_3d *)kd_tree);
-
-    /* Tile the tree based on the boundbox. */
-    for (size_t i = 0; i < input_points->size(); i++) {
-      tile_point(&tiled_points, &indices, maximum_distance, boundbox, input_points->data()[i], i);
-    }
-
-    /* Re-use the same kdtree, so free it before re-creating it. */
-    BLI_kdtree_3d_free((KDTree_3d *)kd_tree);
-
-    /* Build a new tree with the new indices and tiled points. */
-    kd_tree = BLI_kdtree_3d_new(tiled_points.size());
-    for (size_t i = 0; i < tiled_points.size(); i++) {
-      BLI_kdtree_3d_insert((KDTree_3d *)kd_tree, indices[i], tiled_points[i]);
-    }
-    BLI_kdtree_3d_balance((KDTree_3d *)kd_tree);
-  }
-#else
-  UNUSED_VARS(boundbox);
-  for (size_t i = 0; i < input_points->size(); i++) {
-    BLI_kdtree_3d_insert((KDTree_3d *)kd_tree, i, input_points->data()[i]);
-  }
-  BLI_kdtree_3d_balance((KDTree_3d *)kd_tree);
-#endif
+  points_tiling(input_points, kd_tree, maximum_distance, boundbox);
 
   /* Assign weights to each sample. */
   std::vector<float> weights(input_points->size(), 0.0f);



More information about the Bf-blender-cvs mailing list