Skip to content

Commit 7c28a53

Browse files
authored
Fix the Spline node to maintain stable segment IDs (#3321)
Stable segment ids in the spline node
1 parent 1b9a492 commit 7c28a53

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

node-graph/gcore/src/vector/vector_nodes.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -821,16 +821,17 @@ async fn vec2_to_point(_: impl Ctx, vec2: DVec2) -> Table<Vector> {
821821
async fn points_to_polyline(_: impl Ctx, mut points: Table<Vector>, #[default(true)] closed: bool) -> Table<Vector> {
822822
for row in points.iter_mut() {
823823
let mut segment_domain = SegmentDomain::new();
824+
let mut next_id = SegmentId::ZERO;
824825

825826
let points_count = row.element.point_domain.ids().len();
826827

827828
if points_count > 2 {
828829
(0..points_count - 1).for_each(|i| {
829-
segment_domain.push(SegmentId::generate(), i, i + 1, BezierHandles::Linear, StrokeId::generate());
830+
segment_domain.push(next_id.next_id(), i, i + 1, BezierHandles::Linear, StrokeId::generate());
830831
});
831832

832833
if closed {
833-
segment_domain.push(SegmentId::generate(), points_count - 1, 0, BezierHandles::Linear, StrokeId::generate());
834+
segment_domain.push(next_id.next_id(), points_count - 1, 0, BezierHandles::Linear, StrokeId::generate());
834835

835836
row.element
836837
.region_domain
@@ -1394,6 +1395,7 @@ async fn spline(_: impl Ctx, content: Table<Vector>) -> Table<Vector> {
13941395
}
13951396

13961397
let mut segment_domain = SegmentDomain::default();
1398+
let mut next_id = SegmentId::ZERO;
13971399
for (manipulator_groups, closed) in row.element.stroke_manipulator_groups() {
13981400
let positions = manipulator_groups.iter().map(|manipulators| manipulators.anchor).collect::<Vec<_>>();
13991401
let closed = closed && positions.len() > 2;
@@ -1418,7 +1420,7 @@ async fn spline(_: impl Ctx, content: Table<Vector>) -> Table<Vector> {
14181420
let handle_end = positions[next_index] * 2. - first_handles[next_index];
14191421
let handles = BezierHandles::Cubic { handle_start, handle_end };
14201422

1421-
segment_domain.push(SegmentId::generate(), start_index, end_index, handles, stroke_id);
1423+
segment_domain.push(next_id.next_id(), start_index, end_index, handles, stroke_id);
14221424
}
14231425
}
14241426

0 commit comments

Comments
 (0)