1
0
Fork 0
freesewing/markdown/dev/reference/api/path/split/en.md
joostdecock eded9e9d3a fix(core): Handle path splits on start or end points
In some edge cases, like when splitting a path on or very close to its
start or end point, `Path.split()` will return an array in which one of
the elements is not a Path object, but rather an empty array.

That is rather combersome to check for, so this changes that behaviour
and will return null for such cases.

I've also updated the documentation to clarify this behaviour.

Fixes #6816

This also fixes a bug when a path was being split on its end point.
2024-06-12 13:24:42 +02:00

1.8 KiB

title
Path.split()

The Path.split() method splits a path in two halves, on a point along that path that you pass it.

Signature

array path.split(Point splitPoint)

Example

```js ({ Point, points, Path, paths, snippets, Snippet, part }) => {

points.A = new Point(45, 60) points.B = new Point(10, 30) points.BCp2 = new Point(40, 20) points.C = new Point(90, 30) points.CCp1 = new Point(50, -30) points.D = new Point(50, 130) points.DCp1 = new Point(150, 30)

paths.demo = new Path() .move(points.D) .curve(points.DCp1, points.DCp1, points.C) .curve(points.CCp1, points.BCp2, points.B) .line(points.A)

points.split = paths.demo.shiftFractionAlong(0.75) snippets.split = new Snippet("notch", points.split)

let halves = paths.demo.split(points.split) for (let i in halves) { paths[i] = halves[i] .attr("style", "stroke-width: 3; stroke-opacity: 0.5;") .attr("style", stroke: hsl(${i * 70}, 100%, 50%)) }

return part }

</Example>

## Notes

### The returned array will hold null for edge cases

Typically, the returned array will hold a `Path` object for each half.
But in some cases, one of the array entries can hold `null` if the split failed to find a path.
For example because you are splitting a `Path` on its start or end point.

```mjs
// Return value for a normal case
[Path, Path]
// Return value when calling Path.split() on/near the path's start point
[null, Path]
// Return value when calling Path.split() on/near the path's end point
[Path, null]

This method will snap the split point to start or end points

This method will also snap to the start or end point if you are splitting a path (very) close to it, as it checks with Point.sitsRoughlyOn().