Repository navigation
v1.63.0
Feature release.
Added
-
geo: five new
Geometrymethods 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_pointandprefer_cornersfor 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 matchingOptimizeSpecfields).prefer_corners(only meaningful together withbest_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.
- With