diff --git a/BezierKit/BezierKitTests/PathTests.swift b/BezierKit/BezierKitTests/PathTests.swift index 4c175f7e..71ef0b57 100644 --- a/BezierKit/BezierKitTests/PathTests.swift +++ b/BezierKit/BezierKitTests/PathTests.swift @@ -314,7 +314,7 @@ class PathTests: XCTestCase { cgPath.move(to: CGPoint(x: 0.0, y: 1.0)) cgPath.addQuadCurve(to: CGPoint(x: 1.0, y: 0.0), control: CGPoint(x: 0, y: 0)) // quad curve has derivative exactly horizontal at t=1 cgPath.addLine(to: CGPoint(x: 2.0, y: -1.0e-5)) - cgPath.addLine(to: CGPoint(x: 2.0, y: 1)) + cgPath.addLine(to: CGPoint(x: 4.0, y: 1)) cgPath.closeSubpath() let path = Path(cgPath: cgPath) XCTAssertTrue(path.contains(CGPoint(x: 0.5, y: 0.5))) diff --git a/BezierKit/Library/PathComponent.swift b/BezierKit/Library/PathComponent.swift index 47b32771..e12b1c95 100644 --- a/BezierKit/Library/PathComponent.swift +++ b/BezierKit/Library/PathComponent.swift @@ -239,6 +239,9 @@ public final class PathComponent: NSObject, NSCoding { } internal func windingCount(at point: CGPoint) -> Int { + guard self.boundingBox.contains(point) else { + return 0 + } // TODO: assumes element.normal() is always defined, which unfortunately it's not (eg degenerate curves as points, cusps, zero derivatives at the end of curves) let line = LineSegment(p0: point, p1: CGPoint(x: self.boundingBox.min.x - self.boundingBox.size.x, y: point.y)) // horizontal line from point out of bounding box let delta = line.p0 - line.p1