Skip to content

Fix Modeling tool bugs found in a tool audit - #87

Merged
pfsteve merged 19 commits into
mainfrom
fix/tool-bugs
Nov 7, 2026
Merged

pfsteve merged 19 commits into
mainfrom
fix/tool-bugs

Conversation

@pfsteve

@pfsteve pfsteve commented Nov 7, 2026

Copy link
Copy Markdown
Collaborator

An audit of the Modeling tools found places where the tools did something different from what their help, status text or bar controls promised. This fixes them.

Selection and the Eraser

  • Alt/Option: no longer acts as Ctrl in Select, Lasso and the Eraser. Only Ctrl (Cmd on macOS) adds to the selection or softens edges.
  • Esc during a drag: Esc during a selection box, lasso outline or eraser stroke, then releasing, no longer selects, adds a point or erases. When Select was chosen during another tool's operation, the first Esc ends the drag and the second returns to that tool.
  • Guides: the Eraser erases guides in the open context, in the same undo step as the rest of the stroke.

Move, Rotate, Scale and placement

  • Guides and text: Move, Rotate and Scale now take guides and leader/model text, with copies when Copy is on.
    • Screen text stays put.
    • Edges drawn on a face stay in place in a mixed selection.
    • A selection of only those edges is refused with a message instead of failing the whole move.
    • The moving outline shows guides and text.
  • Autofold: Move's toggle is removed. It had no effect, because the model always folds faces as needed.
  • Orbit: Shift-drag pans, as its status text said. The help also lists Ctrl for free orbit.
  • Place Component: inside a rotated group, the preview now matches where the component lands.

Drawing

  • Active tag: Circle, Polygon, the arc tools, Pie and Freehand now put their edges on the active tag. Faces formed by any drawing tool do too, and changing a curve's segments or radius keeps its tags.
  • Rectangle: a typed width and height, and a re-edit, keep the side the pointer is on.
  • Arc tools: they show the "type 12s" hint before the first click, and their fields are labelled Segments. The last field of 3 Point Arc is labelled Length, because it sets a distance.
  • Polygon: Circumscribed resets when the tool is chosen. Toggling it while the bar shows the polygon just drawn redoes that polygon, and a Sides change keeps its mode.
  • Offset: a typed re-edit that fails keeps the original offset, and the hint describes which side a typed value goes.

Other tools

  • Solid Tools: an Intersect, Subtract or Trim that would leave nothing is refused with a message, and the model is unchanged. Messages no longer show internal ids, and refusals from the context menu reach the status bar.
  • Resize Model: now also scales imported mesh parts and placed lights.
  • Position Texture: shows Done, Reset, Flip and Rotate in the tool options bar.
  • Tape Measure and Protractor: go back to their default modes each time they're chosen.

Behavior change for the AI model API

A subtract where one cutter would swallow one of several pieces is now refused. It used to delete that piece silently.

Testing

Typecheck, lint, the SPDX and license checks, and the full suite pass (4,558 tests). Each fix has new tests, and the tests that were checked fail without their fix. User help in docs/help/modeling/ is updated, and every section stays within the AI Help chunk size. Not yet checked by hand in the running app.

🤖 Generated with Claude Code

pfsteve and others added 19 commits November 7, 2026 06:43
Option on macOS (Alt elsewhere) added to the selection in Select and
Lasso and softened edges in the Eraser, because a leftover helper
counted Alt as Ctrl. Cmd is already mapped to Ctrl before tools see it,
so only Ctrl now adds, removes or softens. Scale keeps its documented
Ctrl-or-Alt centre anchor.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pressing Esc while dragging cancelled the box, outline or eraser stroke
but also cleared the flag that ignores the browser's click after a
drag. Releasing then selected or cleared what was under the pointer
(closing the open group), started a click outline, or erased the edge
under the pointer. Esc mid-drag now swallows that trailing click, and a
new press clears any click still owed so a missing one cannot eat the
next real click.

Select also reports a press as pending work, so Esc during a box drag
over a set-aside tool ends the drag in Select instead of handing the
release and click to that tool.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Guides were among the Eraser's pick kinds but were never marked, so
they could not be erased and a guide in front of an edge kept the edge
from being erased. Guides of the open edit context are now marked and
deleted through the guide delete command, in the same undo step as the
rest of the stroke. Shift and Ctrl leave guides alone, as they do
dimensions and text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Inside a rotated or scaled group, the outline that follows the cursor moved
in world axes while the component was placed in the group's axes, so the
result differed from the preview. The outline now uses the same transform
the placement gets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Orbit tool's status and help said Shift pans, but the tool ignored Shift
and always orbited. Holding Shift when a drag starts now pans for that drag,
through the same camera pan as the Pan tool. The help also lists Ctrl for a
free orbit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The toggle and its Alt tap only changed a flag the tool displayed; the move
never used it, because moved faces and edges of a solid always fold into a
valid solid. The tool options bar now shows only Copy, and Alt is no longer
taken by Move.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A selection holding a guide, a text or an edge drawn on a solid's face
failed as a whole. Now:

- Guide points, lines and segments follow the transform, and copy mode
  copies them.
- Leader and model text move by their anchor and label point; copies are
  new texts. Screen text, fixed to the screen, is left where it is.
- Edges drawn on a solid's face stay on the face while the rest of the
  selection moves. Selected on their own, the move is refused with a
  message saying to move the solid.
- The moved outline draws guides, and leader lines and text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Intersect of solids that do not overlap, and Subtract or Trim with a
cutter that covers the whole target, used to delete the inputs without
a word. The commands now refuse an empty result before the document
changes and say why. Refusal messages are plain sentences without
internal ids, and a refusal from the context menu shows in the status
bar.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Resize Model scaled solids, sketch geometry, guides, section planes,
dimensions, texts, groups, components and images, but left imported
mesh parts and placed scene lights where they were. They now scale
uniformly about the same point as everything else, and an area
light's panel scales with them. Resize Model stays model-wide when it
is started from inside a group.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tape Measure kept the last mode it was used in, and Protractor kept
Create guides off once it was turned off, so choosing either tool
could quietly measure without guides or make guides when only a
measurement was wanted. Each time it is chosen, Tape Measure now
starts in Guide lines and Protractor starts with Create guides on.
Setting a tool aside for a camera tool and returning to it keeps its
mode.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Done, Reset, Flip and Rotate were only in the right-click menu while
positioning a texture, and the tool options bar stayed empty. The bar
now offers Done, Reset, Flip Left/Right, Flip Up/Down and Rotate 90,
180 and 270 degrees. Each runs the same command as its menu item, and
they are disabled until a face is being positioned.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Circle, Polygon, Arc, 2 Point Arc, 3 Point Arc, Pie and Freehand now put
the edges they create on the active tag, as Line and Rectangle do. Faces
formed by any drawing command (curves, Line, Rectangle) also go on the
active tag, unless they take over an existing face's attributes.
Changing a curve's segments or radius keeps its edges' and face's tag.
Callers of addCurveToDraft that pass no tag keep the default tag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A width and height typed as a list, or typed right after the commit to
re-edit the rectangle, now keep the side of the first corner that the
pointer is on, as the Width and Height fields already did. A negative
value still takes the other side.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s end value

Before the first click of Arc, Pie, 2 Point Arc and 3 Point Arc, a bare
number changes nothing (unless it re-edits the arc just drawn), and the
status now says to type it with s for a segment count, as Circle does
for sides. Their value before the first click is labelled Segments and
shows the count.

3 Point Arc's end stage takes a typed length as the end point's distance
from the second point, toward the pointer. Its value was labelled
Radius; it is now a Length field showing that distance.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… drawn

Circumscribed goes back to inscribed each time Polygon is chosen. Each
polygon now records its own mode, so redrawing it for a Sides change
keeps that mode instead of reading the live toggle. While the tool
options bar shows the polygon just drawn, a Ctrl tap or the bar's
toggle redraws it in the other mode as one undo step.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Typing a new distance right after an offset undid the original and did
not restore it when the new offset failed; it is now put back, as the
bar's Allow overlaps re-edit already did, and stays the applied
operation. The status no longer says "negative = inward": it says a
typed value offsets toward the pointer's side and a negative one the
other side, which is what the tool does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@pfsteve
pfsteve merged commit 74c7a39 into main Nov 7, 2026
11 checks passed
@pfsteve
pfsteve deleted the fix/tool-bugs branch November 7, 2026 15:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant