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.
This commit is contained in:
Howard Trickey 2020-11-28 14:27:10 -05:00
parent 1169507308
commit 458d8a423a
1 changed files with 5 additions and 0 deletions

View File

@ -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) {