33 lines
1.6 KiB
Diff
33 lines
1.6 KiB
Diff
# UNDF: UNDF-2026-000000911
|
|
--- a/src/libslic3r/SLA/SupportIslands/UniformSupportIsland.cpp
|
|
+++ b/src/libslic3r/SLA/SupportIslands/UniformSupportIsland.cpp
|
|
@@ -1994,7 +1994,8 @@
|
|
// Queue of island nodes to propagate shortest distance into their neigbors
|
|
// contain indices into node_distances
|
|
std::vector<size_t> process;
|
|
+ std::unordered_set<size_t> process_set;
|
|
for (size_t i = 1; i < node_distances.size(); i++) process.push_back(i); // zero index is start
|
|
+ for (size_t i = 1; i < node_distances.size(); i++) process_set.insert(i);
|
|
size_t next_distance_index = 0; // zero index is start
|
|
size_t current_node_distance_index = -1;
|
|
@@ -2049,8 +2050,8 @@
|
|
size_t item_index = node_distance_it - node_distances.begin();
|
|
// process store unique indices into node_distances
|
|
- if(std::find(process.begin(), process.end(), item_index) != process.end())
|
|
+ if(process_set.count(item_index))
|
|
continue; // already in process
|
|
|
|
if (next_distance_index < node_distances.size())
|
|
- process.push_back(next_distance_index); // store for next processing
|
|
+ {
|
|
+ process.push_back(next_distance_index);
|
|
+ process_set.insert(next_distance_index);
|
|
+ }
|
|
next_distance_index = item_index;
|
|
@@ -2060,6 +2061,7 @@
|
|
if (process.empty())
|
|
break; // no more nodes to process
|
|
next_distance_index = process.back();
|
|
process.pop_back();
|
|
+ process_set.erase(next_distance_index);
|
|
prev_neighbor = nullptr; // do not know previous neighbor
|