java-topology/defects/prusaslicer-0002/patch/prusaslicer-0002.patch

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