@@ -91,12 +91,10 @@ impl<'a> Default for OffsetCfg<'a> {
9191///
9292/// The offsetting process involves several stages:
9393/// 1. Convert input polyline to raw offset segments (lines and arcs)
94- /// 2. Compute offset for each segment
95- /// 3. Connect adjacent offset segments with transition arcs
96- /// 4. Split overlapping segments at intersection points
97- /// 5. Prune invalid segments that are too close to the original
98- /// 6. Reconnect valid segments into continuous paths
99- /// 7. Convert final arcs back to polylines with pvertex segments
94+ /// 2. Connect adjacent offset segments with transition arcs
95+ /// 3. Split overlapping segments at intersection points
96+ /// 4. Prune invalid segments that are too close to the original
97+ /// 5. Reconnect valid segments into continuous paths
10098///
10199/// # Notes
102100///
@@ -114,8 +112,14 @@ pub fn offset_polyline_to_polyline(
114112 }
115113 let offset_arcs = offset_polyline_to_polyline_impl ( poly, off, cfg) ;
116114
115+ // remove bridges
116+ let offset_arcs = remove_bridge_arcs ( & offset_arcs) ;
117+
118+ // Slightly adjust arc endpoints
119+ let offset_arcs = find_middle_points ( & offset_arcs) ;
120+
117121 // Always reconnect arcs
118- let reconnect_arcs = offset_reconnect_arcs ( & mut offset_arcs. clone ( ) ) ;
122+ let reconnect_arcs = offset_reconnect_arcs ( & offset_arcs) ;
119123 // println!(
120124 // "DEBUG: offset_reconnect_arcs returned {} components",
121125 // reconnect_arcs.len()
@@ -181,12 +185,10 @@ pub fn offset_polyline_to_polyline(
181185/// The offsetting process follows the same stages as polyline offsetting but preserves
182186/// arc geometry throughout:
183187/// 1. Convert input arcline to raw offset segments (lines and arcs)
184- /// 2. Compute precise offset for each segment maintaining arc properties
185- /// 3. Connect adjacent offset segments with transition arcs
186- /// 4. Split overlapping segments at intersection points
187- /// 5. Prune invalid segments that are too close to the original
188- /// 6. Reconnect valid segments into continuous arc-preserving paths
189- /// 7. Return final result as arclines (no conversion to line segments)
188+ /// 2. Connect adjacent offset segments with transition arcs
189+ /// 3. Split overlapping segments at intersection points
190+ /// 4. Prune invalid segments that are too close to the original
191+ /// 5. Reconnect valid segments into continuous arc-paths
190192///
191193pub fn offset_arcline_to_arcline ( arcs : & Arcline , off : f64 , cfg : & mut OffsetCfg ) -> Vec < Arcline > {
192194 if let Some ( svg) = cfg. svg . as_deref_mut ( )
@@ -196,15 +198,15 @@ pub fn offset_arcline_to_arcline(arcs: &Arcline, off: f64, cfg: &mut OffsetCfg)
196198 }
197199 let offset_arcs = offset_arcline_to_arcline_impl ( arcs, off, cfg) ;
198200
199- // Slightly adjust arc endpoints
200- let mut mod_arcs = find_middle_points ( & mut offset_arcs. clone ( ) ) ;
201-
202201 // remove bridges
203- remove_bridge_arcs ( & mut mod_arcs) ;
202+ let offset_arcs = remove_bridge_arcs ( & offset_arcs) ;
203+
204+ // Slightly adjust arc endpoints
205+ let offset_arcs = find_middle_points ( & offset_arcs) ;
204206
205207 let mut final_arcs = Vec :: new ( ) ;
206208 if cfg. reconnect {
207- final_arcs = offset_reconnect_arcs ( & mut mod_arcs ) ;
209+ final_arcs = offset_reconnect_arcs ( & offset_arcs ) ;
208210 println ! (
209211 "offset_reconnect_arcs returned {} components" ,
210212 final_arcs. len( )
@@ -213,7 +215,7 @@ pub fn offset_arcline_to_arcline(arcs: &Arcline, off: f64, cfg: &mut OffsetCfg)
213215 println ! ( " Component {}: {} arcs" , i, component. len( ) ) ;
214216 }
215217 } else {
216- final_arcs. push ( mod_arcs ) ;
218+ final_arcs. push ( offset_arcs ) ;
217219 }
218220
219221 if let Some ( svg) = cfg. svg . as_deref_mut ( ) {
0 commit comments