@@ -2180,31 +2180,33 @@ fn bevel_algorithm(mut vector: Vector, transform: DAffine2, distance: f64) -> Ve
21802180 let end_points = segment_domain. end_point ( ) ;
21812181
21822182 let mut paths = Vec :: new ( ) ;
2183- let mut unvisited_segments: std :: collections :: HashSet < usize > = ( 0 ..segment_domain. ids ( ) . len ( ) ) . collect ( ) ;
2183+ let mut unvisited_segments: Vec < usize > = ( 0 ..segment_domain. ids ( ) . len ( ) ) . collect ( ) ;
21842184
21852185 while !unvisited_segments. is_empty ( ) {
2186- let first = * unvisited_segments. iter ( ) . next ( ) . unwrap ( ) ;
2187- unvisited_segments. remove ( & first) ;
2188-
2186+ let first = unvisited_segments[ 0 ] ;
2187+ unvisited_segments. retain ( | & x| x != first) ;
2188+
21892189 let mut path = vec ! [ first] ;
2190-
2190+
21912191 loop {
21922192 let last = * path. last ( ) . unwrap ( ) ;
21932193 // Find next segment
2194- if let Some ( & next) = unvisited_segments. iter ( ) . find ( |& & p| start_points[ p] == end_points[ last] ) {
2194+ if let Some ( next_idx) = unvisited_segments. iter ( ) . position ( |& p| start_points[ p] == end_points[ last] ) {
2195+ let next = unvisited_segments[ next_idx] ;
21952196 path. push ( next) ;
2196- unvisited_segments. remove ( & next) ;
2197+ unvisited_segments. retain ( | & x| x != next) ;
21972198 } else {
21982199 break ;
21992200 }
22002201 }
2201-
2202+
22022203 // Try to extend backwards
22032204 loop {
22042205 let first = * path. first ( ) . unwrap ( ) ;
2205- if let Some ( & prev) = unvisited_segments. iter ( ) . find ( |& & p| end_points[ p] == start_points[ first] ) {
2206+ if let Some ( prev_idx) = unvisited_segments. iter ( ) . position ( |& p| end_points[ p] == start_points[ first] ) {
2207+ let prev = unvisited_segments[ prev_idx] ;
22062208 path. insert ( 0 , prev) ;
2207- unvisited_segments. remove ( & prev) ;
2209+ unvisited_segments. retain ( | & x| x != prev) ;
22082210 } else {
22092211 break ;
22102212 }
@@ -2348,7 +2350,7 @@ fn bevel_algorithm(mut vector: Vector, transform: DAffine2, distance: f64) -> Ve
23482350 // Clean up colinear_manipulators: remove entries that reference
23492351 // segments which no longer exist or have become linear after beveling.
23502352 // Collect valid non-linear segment IDs first to avoid borrow conflicts.
2351- let valid_nonlinear_segments: std :: collections :: HashSet < SegmentId > = vector
2353+ let valid_nonlinear_segments: Vec < SegmentId > = vector
23522354 . segment_domain
23532355 . ids ( )
23542356 . iter ( )
0 commit comments