1
+ use std:: io:: Write ;
2
+
1
3
use crate :: aabb:: { bounding_box_max_extent, bounding_boxes_overlap, Aabb } ;
2
4
use crate :: epsilons:: Epsilons ;
3
5
use crate :: line_segment:: { line_segment_intersection, line_segments_intersect} ;
@@ -113,7 +115,15 @@ pub fn path_segment_intersection(seg0: &PathSegment, seg1: &PathSegment, endpoin
113
115
} ;
114
116
115
117
let intersections = path1. cubic_intersections_t ( & path2) ;
118
+ let mut file = std:: fs:: File :: options ( ) . append ( true ) . create ( true ) . open ( "/tmp/intersections" ) . unwrap ( ) ;
119
+ let format_curve = |seg0 : & PathSegment | seg0. to_cubic ( ) . map ( |point| format ! ( "{} {}" , point. x, point. y) ) . join ( " " ) ;
116
120
let intersections: Vec < _ > = intersections. into_iter ( ) . map ( |( s, t) | [ s, t] ) . collect ( ) ;
121
+ let intersections_fmt: Vec < _ > = intersections. iter ( ) . map ( |[ s, t] | format ! ( "{},{}" , s, t) ) . collect ( ) ;
122
+ if !intersections. is_empty ( ) {
123
+ writeln ! ( & mut file, "{}\n {}\n {}\n " , format_curve( seg0) , format_curve( seg1) , intersections_fmt. join( " " ) , ) . unwrap ( ) ;
124
+ file. flush ( ) . unwrap ( ) ;
125
+ }
126
+ // let intersections: Vec<_> = intersections.into_iter().map(|(s, t)| [s, t]).collect();
117
127
return intersections;
118
128
}
119
129
( PathSegment :: Cubic ( _, _, _, _) , PathSegment :: Line ( _, _) ) => {
@@ -125,6 +135,7 @@ pub fn path_segment_intersection(seg0: &PathSegment, seg1: &PathSegment, endpoin
125
135
_ => ( ) ,
126
136
} ;
127
137
138
+ // Fallback for quadratics and arc segments
128
139
// https://math.stackexchange.com/questions/20321/how-can-i-tell-when-two-cubic-b%C3%A9zier-curves-intersect
129
140
130
141
let mut pairs = vec ! [ (
0 commit comments