Skip to content

v1.63.0

Choose a tag to compare

@knipknap knipknap released this 11 Oct 20:05
6312750

Feature release.

Added

  • geo: five new Geometry methods for path clean-up — the raygeo piece of barebaric/rayforge#532 (Close Paths, Join Paths, Delete Duplicates, Break Apart; barebaric/rayforge#516).

    • close_open_contours(tolerance): closes open contours whose start and end lie within the tolerance, returning the new geometry and the number of closed contours.
    • join_open_contours(tolerance): chains open contours whose end points meet within the tolerance, reversing pieces where needed and closing chains whose own ends meet.
    • remove_duplicate_contours(tolerance): drops contours duplicating an earlier one within the tolerance, regardless of direction or start point (spatially indexed by bounding-box corner, sampled-coverage comparison).
    • matches(other, tolerance): both geometries consist of the same contours within the tolerance, in any order/direction/start point.
    • split_drawn_contours(): one geometry per contour that draws something; holes become parts of their own.
    • None of these ever move existing points: a gap is bridged with a straight segment between two existing end points, so the bounding box never grows. 33 tests moved over from rayforge.
  • optimize: best_start_point and prefer_corners for the travel optimizer — the raygeo piece of barebaric/rayforge#523 (Choose Best Start Point / Prefer Corners).

    • With best_start_point, a closed path picked as the next segment is rotated so it is entered at the vertex nearest the current head position (optimize_travel(best_start_point=True) or the matching OptimizeSpec fields). prefer_corners (only meaningful together with best_start_point) restricts the candidate start vertices of a closed path to its sharp corners; paths without corners, like circles, fall back to any vertex.
    • Rotation happens in pure command order — arc and Bézier entries stay intact. Open paths keep their current behaviour, and closed paths with lead-ins, overcut or tabs are not geometrically closed, so they are never rotated. Both fields default to off, so existing jobs are unchanged.