fix(command): keyword/radius input for ribbon-started modify commands (#90)
Starting FILLET/CHAMFER from the ribbon left the command-line field
unfocused, so its Enter arrived as CommandFinalize and discarded a
typed option keyword ("R"/"D"), cancelling the command. Several
related dynamic-input issues surfaced from the same flow:
- CommandFinalize now forwards a non-empty command-line buffer through
CommandSubmit, so a typed keyword is handled the same whether the
command was started from the ribbon or the command line.
- sync_dyn_fields shows no coordinate box during an object-pick step
(needs_entity_pick / needs_structure_point_pick) — there is no point
to enter there, so typed keywords reach the command line cleanly.
- apply_cmd_result rebuilds the dynamic-input fields on NeedPoint, so a
step change (object pick -> radius entry) shows the matching box
immediately and typed digits land in it instead of the command line.
- Object-pick steps now draw a prompt-only hint pill at the cursor
(no input box).
- FILLET/CHAMFER remember the first pick across a mid-selection radius
or distance entry, resuming the second pick instead of restarting
selection.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
3bafe45ab3
commit
57d3e620ea
5 changed files with 141 additions and 17 deletions
|
|
@ -691,8 +691,18 @@ impl OpenCADStudio {
|
|||
// between boxes; typing locks a box to a fixed value while the
|
||||
// rest keep tracking the cursor. The field set is maintained in
|
||||
// `tab.dyn_fields` by `sync_dyn_fields`.
|
||||
// A pick step (object selection) has no input box, but still shows
|
||||
// its prompt ("Select first object …") near the cursor as a hint.
|
||||
let dyn_picks_object = tab
|
||||
.active_cmd
|
||||
.as_ref()
|
||||
.map(|c| c.needs_entity_pick() || c.needs_structure_point_pick())
|
||||
.unwrap_or(false);
|
||||
let dyn_input_overlay: Option<Element<'_, Message>> =
|
||||
if self.dyn_input && tab.active_cmd.is_some() && !tab.dyn_fields.is_empty() {
|
||||
if self.dyn_input
|
||||
&& tab.active_cmd.is_some()
|
||||
&& (!tab.dyn_fields.is_empty() || dyn_picks_object)
|
||||
{
|
||||
let w = tab.last_cursor_world;
|
||||
let base = self.last_point;
|
||||
// A command may drive a typed scalar by mouse (e.g. a
|
||||
|
|
|
|||
Loading…
Reference in a new issue