From 458d8a423a2fde63e367c605ad069cc76d34ea2c Mon Sep 17 00:00:00 2001 From: Howard Trickey Date: Sat, 28 Nov 2020 14:27:10 -0500 Subject: 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. --- source/blender/blenlib/intern/mesh_boolean.cc | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'source/blender/blenlib/intern') 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> find_patch_components(const CellsInfo &cinfo, Patches return Vector>(); } int current_component = 0; + Array cell_processed(cinfo.tot_cell(), false); Stack stack; /* Patch indices to visit. */ Vector> ans; for (int pstart : pinfo.index_range()) { @@ -1258,6 +1259,10 @@ static Vector> 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) { -- cgit v1.2.3