@@ -433,46 +433,24 @@ impl BoundingBoxManager {
433433 }
434434
435435 pub fn check_skew_handle ( & self , cursor : DVec2 , edge : EdgeBool ) -> bool {
436- if let Some ( [ start, end] ) = self . edge_endpoints_vector_from_edge_bool ( edge) {
437- if ( end - start) . length ( ) < MIN_LENGTH_FOR_SKEW_TRIANGLE_VISIBILITY {
438- return false ;
439- }
440-
441- let touches_triangle = |base : DVec2 , direction : DVec2 , cursor : DVec2 | -> bool {
442- let normal = direction. perp ( ) ;
443- let top = base + direction * SKEW_TRIANGLE_SIZE ;
444- let edge1 = base + normal * SKEW_TRIANGLE_SIZE / 2. ;
445- let edge2 = base - normal * SKEW_TRIANGLE_SIZE / 2. ;
446-
447- let v0 = edge1 - top;
448- let v1 = edge2 - top;
449- let v2 = cursor - top;
450-
451- let d00 = v0. dot ( v0) ;
452- let d01 = v0. dot ( v1) ;
453- let d11 = v1. dot ( v1) ;
454- let d20 = v2. dot ( v0) ;
455- let d21 = v2. dot ( v1) ;
456-
457- let denom = d00 * d11 - d01 * d01;
458- let v = ( d11 * d20 - d01 * d21) / denom;
459- let w = ( d00 * d21 - d01 * d20) / denom;
460- let u = 1. - v - w;
436+ let Some ( [ start, end] ) = self . edge_endpoints_vector_from_edge_bool ( edge) else { return false } ;
437+ if ( end - start) . length_squared ( ) < MIN_LENGTH_FOR_SKEW_TRIANGLE_VISIBILITY . powi ( 2 ) {
438+ return false ;
439+ } ;
461440
462- u >= 0. && v >= 0. && w >= 0.
463- } ;
441+ let edge_dir = ( end - start ) . normalize ( ) ;
442+ let mid = start . midpoint ( end ) ;
464443
465- let edge_dir = ( end - start) . normalize ( ) ;
466- let mid = end. midpoint ( start) ;
444+ for direction in [ -edge_dir, edge_dir] {
445+ let base = mid + direction * ( 3. + SKEW_TRIANGLE_OFFSET + SKEW_TRIANGLE_SIZE / 2. ) ;
446+ let extension = cursor - base;
447+ let along_edge = extension. dot ( edge_dir) . abs ( ) ;
448+ let along_perp = extension. perp_dot ( edge_dir) . abs ( ) ;
467449
468- for direction in [ edge_dir, -edge_dir] {
469- let base = mid + direction * ( 3. + SKEW_TRIANGLE_OFFSET ) ;
470- if touches_triangle ( base, direction, cursor) {
471- return true ;
472- }
450+ if along_edge <= SKEW_TRIANGLE_SIZE / 2. && along_perp <= BOUNDS_SELECT_THRESHOLD {
451+ return true ;
473452 }
474453 }
475-
476454 false
477455 }
478456
0 commit comments