forked from 1b-agent/opencadstudio-upstream
feat(trim): TRIM/EXTEND options — edges, fence, crossing, edge, erase (#336)
Both commands gain a shared option mode machine:
- Cutting/Boundary edges (T/B): pick which objects act as the boundary
(picked edges highlight yellow, the hovered candidate half-strength);
Enter rebuilds the boundary set, empty = everything (quick mode).
- Fence (F): draw a dashed fence; every object crossing it is trimmed /
extended at each crossing, re-applied to the surviving pieces so a
fence across both overhanging ends clears both. Live red/cyan result
preview while placing points.
- Crossing (C): crossing-selection semantics — the dashed green window
picks objects crossing its edges AND wholly inside; runs through the
fence machinery with a synthesized inside click.
- Edge (E): boundaries extrapolate (lines run past their ends, arcs
close to full circles). Cuts that land on an implied extension draw a
dashed yellow guide from the boundary's drawn end to the cut point,
so the user sees which edge causes the cut. Extend previews also show
the added tail as a bright dashed slice of the true curve.
- Erase (R, TRIM): picks delete without needing an intersection, with a
red hover preview.
- Shift+click swaps trim<->extend per pick (new set_shift plumbing into
the entity-pick and hover paths); the hover preview follows the held
state. Project is out of scope for the 2D pipeline.
The per-type pick bodies moved to shared free fns (pick_trim_at /
pick_extend_at) used by direct picks, hover previews and the fence
pass; EXTEND's snapshot bookkeeping unified with TRIM's placeholder
flow. Option keywords now take precedence over the hex-handle reading
in feed_active_cmd ("F"/"C"/"E" are valid hex), and fence geos carry
sentinel handles — probing with NULL against NULL-handle geos excluded
the whole fence. Regression test: fence_trims_x_arm.
Closes #336
Co-Authored-By: Claude Fable 5 <[email protected]>
This commit is contained in:
1 parent
5f08b77ebc
commit
9b40881ab1
4 files changed
+1390
-218
No files matched your search
@@ -1213,6 +1213,11 @@ pub trait CadCommand: Send {
|
||||
/// `ARC_CONT`) store it; most commands ignore it. Default no-op.
|
||||
fn set_ctrl(&mut self, _ctrl: bool) {}
|
||||
|
||||
/// Push the live Shift-key state into the command before each dispatch.
|
||||
/// TRIM/EXTEND use it for the shift-select swap (Shift+click extends
|
||||
/// during TRIM and trims during EXTEND, #336). Default no-op.
|
||||
fn set_shift(&mut self, _shift: bool) {}
|
||||
|
||||
/// Called when the user left-clicks in the viewport (point pick).
|
||||
fn on_point(&mut self, pt: DVec3) -> CmdResult;
|
||||
|
||||
|
||||
Reference in new issue
Block a user