--- title: utils.curveIntersectsX() --- The `utils.curveIntersectsX()` function finds the point(s) where a curve intersects a given X-value. :::warning This function can sometimes fail to find intersections in some curves due to a limitation in an underlying Bézier library. Please see [Bug #3367](https://github.com/freesewing/freesewing/issues/3367) for more information. ::: ## Signature ```js array | Point | false utils.curveIntersectsX( Point start, Point cp1, Point cp2, Point end, float x) ``` This returns `false` if no intersections are found, a [Point](/reference/api/point) object if a single intersection is found, and an array of [Point](/reference/api/point) objects if multiple intersections are found. ## Example ```js ({ Point, points, Path, paths, Snippet, snippets, utils, part }) => { points.start = new Point(10, 15) points.cp1 = new Point(80, 10) points.cp2 = new Point(-50, 80) points.end = new Point(110, 70) paths.curve = new Path() .move(points.start) .curve(points.cp1, points.cp2, points.end) for (let x of [30, 40]) { points["from" + x] = new Point(x, 10) points["to" + x] = new Point(x, 80) paths["line" + x] = new Path() .move(points["from" + x]) .line(points["to" + x]) .addClass("lining dashed") } snippets.i40 = new Snippet( "notch", utils.curveIntersectsX(points.start, points.cp1, points.cp2, points.end, 40) ) for (let p of utils.curveIntersectsX( points.start, points.cp1, points.cp2, points.end, 30 )) snippets[p.y] = new Snippet("notch", p) return part } ``` ## Notes This is a low-level (and faster) variant of [`Path.intersectsX()`](/reference/api/path/intersectsx). Instead of a path, you describe a single curve by passing the four points that describes it.