feat(ucs): interactive UCS command — UCS Z 90 typable everywhere (F2, #169)

Bare `UCS` now enters an interactive front-end (UcsCommand) that gathers the
option then its value as separate steps, instead of the command line
submitting `UCS` alone on the first Space. The front-end delegates execution
back to the existing inline `UCS <option> …` handler via a new
`CmdResult::Dispatch(String)`, so the coordinate-system math and the
save/persist path are untouched.

Now `UCS Z 90` works the same from the command line (Space-separated),
headless automation, and any source that feeds the active command — closing
the input half of #169. Inline `UCS Z 90` (one-shot / paste) still hits the
inline handler directly.

Second phase of routing input sources through the unified step driver: the
interactive command is driven by feed_command like any tool. Adds headless
test ucs_interactive_inline_args.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
This commit is contained in:
Hakan SevenandClaude Opus 4.8 committed 2026-06-25 12:36:49 +03:00
1 parent 5fdd212592
commit 36d2f33301
6 files changed
+159 -2

No files matched your search

+12 -2
View File
@@ -3618,8 +3618,18 @@ impl OpenCADStudio {
}
}
// ── UCS management ───────────────────────────────────────────
cmd if cmd == "UCS" || cmd.starts_with("UCS ") => {
// Bare UCS → interactive front-end (option then value as steps), so
// `UCS Z 90` is typable in the command line and works headlessly.
// The front-end delegates back to the inline handler below. (#169)
"UCS" => {
use crate::modules::view::ucs_cmd::UcsCommand;
let cmd_obj = UcsCommand::new();
self.command_line.push_info(&cmd_obj.prompt());
self.tabs[i].active_cmd = Some(Box::new(cmd_obj));
}
// ── UCS management (inline `UCS <option> …`) ─────────────────────
cmd if cmd.starts_with("UCS ") => {
use super::helpers::{ucs_rotated_z, ucs_to_wcs, ucs_z_axis};
use acadrust::tables::Ucs;
use acadrust::types::Vector3;