[Bf-blender-cvs] [458d8a423a2] master: Speed up finding patch components in new boolean.

Howard Trickey noreply at git.blender.org
Sat Nov 28 20:30:26 CET 2020


Commit: 458d8a423a2fde63e367c605ad069cc76d34ea2c
Author: Howard Trickey
Date:   Sat Nov 28 14:27:10 2020 -0500
Branches: master
https://developer.blender.org/rB458d8a423a2fde63e367c605ad069cc76d34ea2c

Speed up finding patch components in new boolean.

By checking if a cell has already been processed in the finding patch
component code, an enormous speedup happens. This only will be
noticeable if there are lots of patches, and some cells with a
large number of patches.

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

M	source/blender/blenlib/intern/mesh_boolean.cc

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

diff --git a/source/blender/blenlib/intern/mesh_boolean.cc b/source/blender/blenlib/intern/mesh_boolean.cc
index f1510355160..2db939cd628 100644
--- a/source/blender/blenlib/intern/mesh_boolean.cc
+++ b/source/blender/blenlib/intern/mesh_boolean.cc
@@ -1242,6 +1242,7 @@ static Vector<Vector<int>> find_patch_components(const CellsInfo &cinfo, Patches
     return Vector<Vector<int>>();
   }
   int current_component = 0;
+  Array<bool> cell_processed(cinfo.tot_cell(), false);
   Stack<int> stack; /* Patch indices to visit. */
   Vector<Vector<int>> ans;
   for (int pstart : pinfo.index_range()) {
@@ -1258,6 +1259,10 @@ static Vector<Vector<int>> find_patch_components(const CellsInfo &cinfo, Patches
       Patch &patch = pinfo.patch(p);
       BLI_assert(patch.component == current_component);
       for (int c : {patch.cell_above, patch.cell_below}) {
+        if (cell_processed[c]) {
+          continue;
+        }
+        cell_processed[c] = true;
         for (int pn : cinfo.cell(c).patches()) {
           Patch &patch_neighbor = pinfo.patch(pn);
           if (patch_neighbor.component == NO_INDEX) {



More information about the Bf-blender-cvs mailing list