@@ -116,24 +116,33 @@ pub fn path_segment_intersection(seg0: &PathSegment, seg1: &PathSegment, endpoin
116
116
let mut subdivided0 = Vec :: new ( ) ;
117
117
let mut subdivided1 = Vec :: new ( ) ;
118
118
119
+ // check if start and end points are on the other bezier curves. If so, add as intersection.
120
+
119
121
while !pairs. is_empty ( ) {
120
122
next_pairs. clear ( ) ;
121
- dbg ! ( "checking pairs" ) ;
123
+ // dbg!("checking pairs");
124
+
125
+ if pairs. len ( ) > 1000 {
126
+ return vec ! [ ] ;
127
+ }
122
128
123
129
for ( seg0, seg1) in pairs. iter ( ) {
124
130
if segments_equal ( & seg0. seg , & seg1. seg , eps. point ) {
125
131
// TODO: move this outside of this loop?
126
132
continue ; // TODO: what to do?
127
133
}
128
134
129
- let is_linear0 = bounding_box_max_extent ( & seg0. bounding_box ) <= eps. linear || ( seg1. end_param - seg1. start_param ) . abs ( ) < eps. param ;
135
+ let diff1 = ( seg0. start_param - seg0. end_param ) . abs ( ) ;
136
+ let diff2 = ( seg1. start_param - seg1. end_param ) . abs ( ) ;
137
+ // dbg!(diff1.min(diff2));
138
+ let is_linear0 = bounding_box_max_extent ( & seg0. bounding_box ) <= eps. linear || ( seg0. end_param - seg0. start_param ) . abs ( ) < eps. param ;
130
139
let is_linear1 = bounding_box_max_extent ( & seg1. bounding_box ) <= eps. linear || ( seg1. end_param - seg1. start_param ) . abs ( ) < eps. param ;
131
140
132
141
if is_linear0 && is_linear1 {
133
142
let line_segment0 = path_segment_to_line_segment ( & seg0. seg ) ;
134
143
let line_segment1 = path_segment_to_line_segment ( & seg1. seg ) ;
135
144
if let Some ( st) = line_segment_intersection ( line_segment0, line_segment1, eps. param ) {
136
- dbg ! ( "pushing param" ) ;
145
+ // dbg!("pushing param");
137
146
params. push ( [ lerp ( seg0. start_param , seg0. end_param , st. 0 ) , lerp ( seg1. start_param , seg1. end_param , st. 1 ) ] ) ;
138
147
}
139
148
} else {
0 commit comments