From 31a5a54753e507f82a16aa09e0668a0c9d1ff3de Mon Sep 17 00:00:00 2001 From: hypercube <0hypercube@gmail.com> Date: Sun, 23 Nov 2025 19:50:50 +0000 Subject: [PATCH] Fix StrokePathIter missing some segments --- .../src/vector/vector_attributes.rs | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/node-graph/libraries/vector-types/src/vector/vector_attributes.rs b/node-graph/libraries/vector-types/src/vector/vector_attributes.rs index 7e267f62cf..3c8d4adf1e 100644 --- a/node-graph/libraries/vector-types/src/vector/vector_attributes.rs +++ b/node-graph/libraries/vector-types/src/vector/vector_attributes.rs @@ -1041,18 +1041,24 @@ impl Iterator for StrokePathIter<'_, Upstream> { type Item = (Vec>, bool); fn next(&mut self) -> Option { - let current_start = if let Some((index, _)) = self.points.iter().enumerate().skip(self.skip).find(|(_, val)| val.connected() == 1) { - index - } else { - if !self.done_one { - self.done_one = true; - self.skip = 0; - } - self.points.iter().enumerate().skip(self.skip).find(|(_, val)| val.connected() > 0)?.0 - }; - self.skip = current_start + 1; + let mut current_start = None; + // First iterate over the single connected points + if !self.done_one { + current_start = self.points.iter().enumerate().skip(self.skip).find(|(_, val)| val.connected() == 1); + self.done_one = current_start.is_none(); + self.skip = current_start.map_or(0, |(index, _)| index + 1); + } + + // If we've already done the single connected, then go through looking at multi connected + if current_start.is_none() { + current_start = self.points.iter().enumerate().skip(self.skip).find(|(_, val)| val.connected() > 0); + self.skip = current_start.map_or(self.points.len(), |(index, _)| index); + } + + // If there is no starting point, exit + let current_start = current_start?.0; - // There will always be one (seeing as we checked above) + // There will always be at least one segment connected to this one let mut point_index = current_start; let mut manipulators_list = Vec::new(); let mut in_handle = None;