feat(pline): Undo option removes the last segment (#352)
U / UNDO (typed or via the prompt button) pops the last placed vertex without ending the command, repeatably down to and past the start point. The exit tangent of the remaining last segment is recomputed from its bulge so a following Arc segment stays tangent-continuous. New CmdResult::RemoveLiveEntity takes the live polyline out of the document when Undo drops it below two vertices; the next point re-creates it under the same undo unit. Closes #352 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
e009d2d7a3
commit
1870b8420f
3 changed files with 60 additions and 0 deletions
|
|
@ -808,6 +808,19 @@ impl OpenCADStudio {
|
|||
}
|
||||
}
|
||||
}
|
||||
CmdResult::RemoveLiveEntity(handle) => {
|
||||
// The command backed off below a valid entity (PLINE Undo at
|
||||
// one remaining vertex): take the live entity out of the
|
||||
// document and keep prompting. No undo bookkeeping — the
|
||||
// create's snapshot already covers the whole in-progress
|
||||
// object as one unit.
|
||||
self.tabs[i].scene.erase_entities(&[handle]);
|
||||
self.tabs[i].dirty = true;
|
||||
let prompt = self.tabs[i].active_cmd.as_ref().map(|c| c.prompt());
|
||||
if let Some(p) = prompt {
|
||||
self.command_line.push_info(&p);
|
||||
}
|
||||
}
|
||||
CmdResult::Cancel => {
|
||||
self.tabs[i].scene.clear_preview_wire();
|
||||
self.tabs[i].active_cmd = None;
|
||||
|
|
|
|||
Loading…
Reference in a new issue