f4d937d8a298f9bd930d8a430d82de2ec00e02bb
231
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
f11ad0ce28 |
Ribbon tooltips: written help for six more tools (#2758) (#4592)
Combine, Loft, Mirror, Circular pattern, Rectangular pattern and Sweep get the same two-sentence help as the first six (en, fr, ja, zh). Text only. Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> |
||
|
|
b671265faa |
Viewport: show the running tool's icon beside the pointer (#4869) (#4870)
* Viewport: show the running tool's icon beside the pointer
While an interactive tool or a command's dialog runs, its toolbar icon
rides above and right of the pointer in the viewport, so the next click's
command is visible without looking up at the ribbon. It sits clear of the
system arrow and of the sketch tools' coordinate readout below the
pointer, moves left at the right edge and below the readout at the top.
It shows only where a click reaches the model: not over panels, dialogs,
menus or the navigation bar, and not while the camera moves. The icon is
the command's own (the one the ribbon and the dialog header show), so
there is no new artwork. On by default; "Show tool at cursor" in View
settings (`ui.set {"toolCursor": false}`) turns it off.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Viewport: the tool at the cursor is off by default
As asked in review: the badge starts off, and "Show tool at cursor" in
View settings (or `ui.set {"toolCursor": true}`) turns it on. The test
checks the default and turns it on through the View settings checkbox.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
||
|
|
1d48707d0c |
Drive Joints: a Show ghost checkbox (#5905) (#5955)
* claim: #5905 * Drive Joints: a Show ghost checkbox (#5905) Driving a joint draws the moved parts' old place as a translucent ghost, which gets in the way when driving joints over and over. Drive Joints has a Show ghost box under its value rows: on by default (nothing changes), off draws only the moved parts at their new place. The stopped-short warning stays. The choice is a preference (drive_joints_ghost), so it is remembered between uses; it affects Drive Joints only. The preview's Colors carry the choice (ghost), so toggling it recomputes the preview (its key hashes the colours) and world_preview leaves the ghost out. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
443baa41f0 |
Design tabs: the tooltip says where the file is saved (#5868) (#5974)
* claim: #5868 * Design tabs: the tooltip says where the file is saved (#5868) Hovering a design tab showed the design's name, the same text as the tab. The tooltip now says where the file is saved, with a path in the home folder shortened to ~/ (home::friendly_path, as the start page does), or "Not saved yet" for a design never saved. When the tab is too narrow for its name, the full name comes first, then the place. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
67adf5abb5 |
Preferences: the theme strip shows arrows where more themes are (#6161) (#6167)
* claim: #6161 * Preferences: the theme strip shows arrows where more themes are (#6161) The strip scrolls sideways with a hidden scrollbar, so nothing showed that more themes were past its end. An end with themes past it now shows a chevron button over the tiles there; a click scrolls most of a page. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
c0640cb95e |
inspect.parameter_sweep: check a design across a parameter's range (#2273) (#2276)
* inspect.parameter_sweep: check a design across a parameter's range Rebuilds a copy of the design at each value of a parameter and reports what no longer holds compared with the design as it is: features that fail or warn, joint origins that are lost or turn over on their own part, sketch planes that turn over, and sketch solves that fail or fold. The design is not changed; each value's rebuild time is reported too. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * inspect.parameter_sweep: params doc matches what it takes and returns `steps` takes at most 199 (200 values), as the check says; failed and warned entries carry the feature's name; a lost origin says which one; a value the parameter refuses gives {value, ms, ok: false, error}. The refusal test covers steps 200. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> * inspect.parameter_sweep: Japanese and Chinese labels Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Aac7mP9rthK3WsPpPRvCsF --------- Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com> |
||
|
|
4b119dd471 |
Performance overlay: frame-time graph and histogram, triangles, draw calls (#2548) (#2549)
* Performance overlay: frame-time graph and histogram, triangles, draw calls (#2548) Net change of the perf-overlay branch, rebased onto main as one commit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Document frame_rate_details in ui.prefs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: bherbruck <brennen.herbruck@gmail.com> |
||
|
|
4cd1a51f48 |
Assistant: a request timeout per endpoint for slow models (#5009) (#5010)
* claim: #5009 * Assistant: a request timeout per endpoint for slow models (#5009) An OpenAI-compatible endpoint now stores how long one model request may take (request_timeout_s, 300 s by default, clamped to 30 s ..= 1 h). It is set in the Add agent dialog and in the endpoint's entry under Agents (a running conversation uses a change from its next request), through ui.agent_chat add_agent, and reported in the chat's state. A request that runs out of time says the limit and where to raise it instead of "timeout: global". The desktop HTTP cap goes from 900 s to an hour. The tool-call timeout stays 330 s: it covers SolidCraft's own tool work and the user's Allow, never the model. * Assistant settings: line up an endpoint's Request timeout with Permissions The label column of an agent's entry is wide enough for "Request timeout", so the label isn't cut and both rows share one column. |
||
|
|
88f079bd8c |
Timeline: the tooltip hint is translated (Part of #4370) (#4398)
* claim: #4370 * Timeline: the tooltip hint is translated (Part of #4370) |
||
|
|
1dbb13cad2 |
Korean: translate the 297 messages added since the last pass (#5147)
assets/locales/ko.json had 298 ids that en.json has and it lacks (the help.solid.* texts, the whole Preferences page, the issue-report dialog, history names, ribs, mouse gestures and navigation presets). Add Korean for 297 of them; "Of" is left untranslated because its context is unclear. Wording follows the existing ko.json (필렛, 모따기, 돌출, 쉘, 바디, 피처, 비활성화, 환경 설정, 어시스턴트, 에이전트). The file stays in the canonical sorted one-message-per-line form; no existing message changed. Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> |
||
|
|
152efb5774 |
Windows installer: add the install folder to the system PATH (#6340)
MCP clients configured with "command": "solidcraft-cli" could not find it. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
8cbde001ef |
Front … Isometric View commands, Ctrl+1…7 by default (#5057) (#5058)
* Ctrl+1…7 turn the view to the standard views (#5057) Front, back, left, right, top, bottom and isometric, handled with the other view keys beside Ctrl+8: animated like the view cube, reserved so no command can take them, and ignored on the flat pattern page. * Front … Isometric View are commands, Ctrl+1…7 their default keys (#5057) The standard views become seven commands (view.front, view.back, view.left, view.right, view.top, view.bottom, view.isometric) whose default shortcuts are Ctrl+1…7, instead of keys the window handles itself. They show in Keyboard Shortcuts, can be moved to other keys or cleared, and the digits can be given to other commands. In the app they turn the view as the view cube does; headless they set the session camera, keeping target, distance and projection. |
||
|
|
9919825ea3 |
Expand All and Collapse All in the Browser (#5190) (#5335)
Open or close every Browser folder from the design or a component menu, including folders that start closed. Display only: not saved, not an undo step. |
||
|
|
46f24f2394 |
Save the browser's view with the design, and an option to hide the origin by default (#1849)
The Origin folder's eye, a finished sketch's Show Profile and Show Dimensions, and body locks move from UiState into the design's saved visibility (origin_hidden, hidden_profiles, shown_dimensions, locked_bodies), so each tab keeps its own and they survive closing the design. The Sketches folder uses the saved browser folder (c0/sketches in hidden_folders); ui.set/ui.inspect keep showOrigin, showSketches, hiddenProfiles, shownDims and lockedBodies. Preferences > Design > "Hide origin by default": a design that never toggled its Origin eye follows the preference. New fields are a pending format change (format/pending/browser-view-state.rs). Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
1236863b17 |
Coil: its parameters show and can be edited (#3862) (#3915)
* claim: #3862 * Coil: its parameters show and can be edited (#3862) The Coil dialog now shows every setting solid.coil takes: the section (circular or square), where it sits on the diameter (inside, center or outside), the start angle and a Clockwise option. Edit Feature on a coil reopens the dialog filled in from the feature, and OK redefines it; before, it fell back to a timeline.edit line in the command search. Settings left at their default are not sent, so OK on an unchanged edit keeps the coil as it was. |
||
|
|
4f4b1fc2d2 | Sketch: select edge midpoints for horizontal and vertical constraints (#5159) | ||
|
|
d5a79a77e6 |
Agent chat: Pick context and Attach selection for elements, features and bodies (#2286) (#2288)
* claim: #2224 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * Agent chat: keep Send in view for a long message, open "View attached" (#2224) The message box sat in a fixed 92-point reserve, so a long message grew it past the panel and took Send, Stop and Attach view with it. The box is now a panel of its own at the bottom: it grows upwards up to a cap, then scrolls, and the conversation takes what is left. The picture sent with a message is kept on it (once the agent starts on the message), and the "View attached" caption opens it in a window. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * Agent chat: a message's pictures as thumbnails with a hover preview and a viewer (#2224) Instead of a window on the far side of the screen: the pictures of a message show as small thumbnails under it, hovering one shows it bigger for as long as the pointer stays, and a click opens a viewer over the app with the message's pictures one at a time (previous and next, arrow keys, Esc). A picture carries a note shown with it, so attachments of other kinds can use the same viewer. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * claim: #2286 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * Agent chat: Attach selection sends what is selected in the model with the message (#2286) A checkbox beside Attach view. The selection is read when the message is sent (also for a queued one) and described: faces and edges with the names, indices and points the tools take plus their size and place, features by name and kind, bodies by name; at most 64, the rest counted. The agent gets it as text after the message; the conversation shows the message as typed with the things as grouped chips (hover for what the agent was told). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * WIP: the chat's context picker dialog (#2286) * Agent chat: Pick context, a picker for elements, features and bodies (#2286) A button beside Attach selection opens the picker: a dialog with Elements, Features and Bodies inputs, so clicks in the model, the timeline and the browser pick into the active one (clicking again takes one out), with the usual highlight. OK puts the picks as chips with an x above the message box; they go with the next message like an attached selection (text for the agent, chips in the conversation) and the tray is empty again afterwards. Cancel keeps what was picked before. The control channel opens it with pick. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * Agent chat: Attach selection counts and describes what was clicked, not the pieces of a rim (#2286) A click on a circular rim or a split surface selects all its pieces for the commands. The checkbox counted them one by one and the agent got one entry per piece (reported on macOS). They are now grouped back into the click they came from: one chip, one entry with the whole size, and the indices of every piece in its detail. Edge details are looked up by position as well as index. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * Agent chat: a message's picture is kept on exactly that message (#2224) The turn now carries its message's place in the conversation (also through a queue and a send again after a sign-in), so its picture is kept there, once, and never on an older message that also wanted one (review of #2225). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * Agent chat: use the UI kit's checkbox and button and the font tokens (guard tests) Main's UI-kit guard tests reject raw egui checkboxes, buttons and font sizes in the chat panel; Attach selection, Pick context, the chip remove button and the chip fonts now come from ui_kit and Tokens. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> Co-authored-by: bherbruck <brennen.herbruck@gmail.com> |
||
|
|
9e6e0b8df1 |
Render workspace: complete experimental ribbon, resources and effects integration (#5493) (#5494)
* wip(render): reconcile completed material and image pipeline source with 0.20 (#5493) Source-only integration reference for staged review, not a merge-ready aggregate. Donor: 0xlillith/solidcraft@aea20b0115. Upstream: |
||
|
+33 |
b7b25f9e2b |
Render workspace: first basic delivery to main (#6050)
* Normalize UI container violation paths across platforms (#5599) Report repository-relative paths with forward slashes so diagnostics and the existing nested-package regression assertions agree on Windows and Unix. Keep the container detection rules unchanged. Validation: official ui-containers gate and all seven focused xtask tests passed; rustfmt and diff checks passed. Only xtask/dependencies were compiled; no application build or heavy tests. (cherry picked from commit |
||
|
|
a633a67e63 |
Preferences: choose the window system on Linux (Wayland or X11) (#3083) (#3084)
* claim: #3083 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * WIP: choose the window system on Linux in Preferences (#3083) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Preferences: a window system set over the control channel is saved for the next start again The merge kept main's check in ui.prefs, which only looked at the anti-aliasing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Preferences: the window system section drops the restart badge its note already states Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
5ca7c2fb95 |
Sketch tools: pressing a tool's shortcut again cycles its creation modes (#2459) (#3564)
* claim: #2459 * Sketch tools: pressing a tool's shortcut again cycles its creation modes (#2459) R starts 2-Point Rectangle; R again, before the first corner, switches to 3-Point, Center, Rounded, then back to 2-Point (likewise for Circle, Line, Arc, Slot, Polygon and Spline keys). A held key's auto-repeat doesn't cycle, the first press always starts the bound mode, and once a point is placed the key keeps the tool and its points. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Sketch tools: the mode cycling is a Sketch preference, off by default (#2459) A tool's shortcut pressed again keeps restarting the tool, as before; Preferences > Sketch > "Pressing a tool's shortcut again switches its mode" turns the cycling on. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Phanoob <phanoob@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
19db763899 |
Tapped Hole: verified metric fine, UNC/UNF and parallel G/Rp catalogues (#4178)
* feat: expand tapped-hole catalogue with metric fine and Unified sizes * docs: distinguish metric designations from expanded tapped catalogue * feat: add internal pipe catalogue and checked Rc profile data * Connect parallel G and Rp catalogues to cylindrical tapped holes * fix(i18n): register tapped thread catalogue labels * fix(i18n): complete thread labels in required locales |
||
|
|
8b65d41b31 |
Expression completion: keep longer names visible when the typed word is a unit (#3663) (#3664)
* claim: #3663 * Expression completion: keep longer names listed when the typed word is a unit (#3663) Typing `rad` into an expression box showed nothing because `rad` is the radians unit and a word that is itself a known token closed the popup. The popup now stays open on such a word. A complete name (`width` with `width_extra` defined) opens it unarmed: the longer names are listed with no row selected, Enter submits what was typed and Tab moves on; Up or Down picks a row, after which Enter or Tab complete it as before. A unit means something only after a number, so a unit typed anywhere else (`rad` on the way to `radius`) is a prefix like any other: the popup is armed and Enter completes `radius` instead of submitting one radian. A complete token is extended only by names that start with it (`in` lists `inner`, not `rounding`), a typed unit offers no other units (`in` does not list `inch`), and a unit right after a number (`2 in`, the form every dialog starts its sizes in) opens no popup at all, so nothing sits over a dialog's OK button. Fixes #3663 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> |
||
|
|
807e367bdb |
Hole: place a Single hole by distances from reference edges (#37) (#2931)
A Single hole can take up to two straight edges of its face as references,
each with the distance of the hole's centre from that edge's line, measured
in the face's plane. `solid.hole` takes them as `references: [{edge, distance}]`;
the edges are found again by their persistent names, else their points, so
the hole follows them when the part changes, and each distance is a
parameter. A bad reference (no edge there, a curved edge, one square to the
face, parallel edges, a negative distance, a centre off the face) is refused.
In the Hole dialog, Reference 1 and 2 follow the face, each with its Distance
row; the canvas shows each distance as a dimension from its edge to the hole,
with a box just past the edge to type it in. Picking an edge measures its
distance (and its box takes the keyboard), typing one moves the hole, and
moving the hole measures them again. Edit Feature picks the edges again with
their distances.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
||
|
|
400e06c202 |
Hole: snap to face and round-edge centres, drag placed holes, section in the dialog (#2171) (#2912)
Placing a Single hole put it exactly where the click landed, with nothing to line it up by and no
way to move it but taking it out and picking again; the dialog was a list of size fields.
- Preferences › Design › Create Hole has two settings, both off by default, so a new installation
places holes as before:
- Snap to face and edge centres (`hole_snaps`): the planar face under the cursor offers its
middle and the centres of its round edges (a boss, a rounded corner, a hole already there) as
marks; a pick near one, or on or beside such an edge, takes that centre and the mark is named.
Sketch points on the face still come first; Alt or Ctrl held places it where clicked.
- Move holes by clicking or dragging (`hole_moves`): each placed hole has a handle that drags it
(snapping when snaps are on) and takes it out when clicked, and a pick elsewhere on its face
moves it there. Edit Feature shows the handle too, so a hole can be moved later (#1047).
- The Hole dialog draws a section of the hole as its options make it, with each size in a field
beside the dimension it sets; a hovered or focused field lights its dimension. The layout is a
new kit element, `ui_kit::figure_rows` (a caller-painted figure beside captioned fields).
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
|
||
|
|
1f6a2d4daf |
3D mouse: driver choice, guided calibration, button mapping and a picture of the device (#1463) (#3825)
* Add a small test boat to steer around with the 3D mouse A little hull in its own camera, drawn by the UI itself and not the CAD viewport, so a 3D mouse can be tried out without opening a design. It brings the model (generated by assets/models/make_test_boat.py) and the tests for how the camera moves it. Nothing uses it yet; Preferences picks it up with the rest of the 3D mouse work. * UI kit: keep a choice row from flipping with the scrollbar A choice row picks segments or a dropdown by whether its labels fit. A page scrollbar that comes and goes narrows the row by its own width, so the row could flip back and forth between the two on a page that sits right at the edge. It is now judged on the whole row and through a small helper, fits_steadily, that only changes its answer once the miss is wider than the scrollbar. Also tests for that, for typed numbers in a slider's value box, and a test hook to put up the issue-report input barrier by hand. * 3D mouse: device model, guided calibration, buttons and a picture The 3D mouse becomes a device we know something about instead of six raw numbers. The reader picks between spacenavd and the direct hidraw driver, falls back from one to the other, and says so when it can't open the device. Guided calibration asks whether the device is a spring cap or a trackball, adds a touch step, and uses a settle filter so a ball let go of stops reading as motion. Buttons get jobs (keys, held modifiers, commands), saved per device, with defaults for the SpaceMouse Pro. Preferences gets a picture of the device that moves as it does, next to the test boat, and the same picture can sit in the 3D view at Left Viewport, Right Viewport or Left Window, above the floating History card like the legend and readouts. These ride together because the crate's calibration types, the Preferences page, the Linux reader and the button hook all use each other. * 3D mouse: offer to calibrate an uncalibrated device When a 3D mouse shows up that has not been calibrated, a card in the 3D view offers to calibrate it, to swap drivers when the other one would work better, to close, or to never ask again. It is made once per device, goes away after 30 seconds in view, and gives way to a status or computing toast instead of stacking on it. The card is the shared toast, which now takes buttons: they group by purpose, wrap inside the card at narrow widths, and do nothing while an issue report holds CAD input. The picture of the device in the 3D view keeps clear of the card. * 3D mouse: translations and attribution The 3D mouse strings (ui.3d_mouse_*, the calibration steps and the offer card) in every shipped language, the Japanese catalog note, and the credit for the test boat model in ATTRIBUTION.md. This is last because the code before it only looks keys up: it builds and runs without these, falling back to English until they land. * 3D mouse: draw its preferences with the settings kit like the rest of Navigation The 3D mouse section was a folded header with its own layout. It now uses the same kit as the sections above it: a settings_section card, settings_form rows with the shared label column, dividers between the device, axes, picture and buttons groups, Text::Hint for the helper lines, and settings_control_width for the dropdowns. The section is open like every other one (the header still folds it), so the device badge on the folded header is gone; the calibration row already names the device. Every setting, string and key is unchanged. Tests that unfolded the section no longer click it, and the hint lines are looked up as hints instead of notes. * 3D mouse: show each axis's live tilt in Preferences, like main's axis rows Each view axis row is main's axis row again: a meter that follows the tilt of the motion driving it, with the dead zone marked, next to Invert, Speed and the "driven by" menu. The meter reads the calibrated travel when the device has a calibration and the raw reading over full scale when it does not, and asks for a frame whenever the reading changes. The helpers are back as they are on main, and the calibration state is a badge by the enable toggle. * 3D mouse: line its preferences up with the rest of Navigation - The two checkboxes sit side by side in the same two-column grid as Wheel and trackpad. - Row labels stop repeating "3D mouse" and use sentence case: Calibration, Driver, Restore defaults, Reset view, Left viewport, Right viewport, Left window. - Hints line up under the control column instead of the left edge. - The six view axes are named Pan X, Pan Y, Zoom, Orbit X, Orbit Y and Roll so they fit the name column. - Buttons are a divider and rows in a form like the other groups, without the bold sub-heading. - The driver, dead zone, axes, picture and buttons sit behind a collapsed Advanced section, since most people never touch them. * 3D mouse: tidy the Advanced test for clippy |
||
|
|
a199a2cc25 |
Section Analysis: OK with no plane picked turns the section off (#2410) (#2411)
While a section is on, Section Analysis opened with no plane picked now
says "No plane picked: OK turns the section off." and OK runs
inspect.section {"clear": true}. With no section on, OK with no plane
still asks for a plane.
Fixes #2410.
|
||
|
|
fb374b543b |
UI: integrate theme radii, borders, palettes and viewport refresh (#5045) (#5046)
* claim: #4922 * UI: let themes own corner radii * UI: use four-point panel and window radii in SolidCraft 95 * UI: align the 95 radius assertion with four-point panels * claim: #4953 * UI: let themes own structural and control borders * UI: single Blueprint outlines and dotted secondary rules * UI: separate container outlines and add theme-owned 95 bevels * claim: #5007 * UI: apply theme palettes to icons, workspace tabs and Gruvbox settings * claim: #5045 * Viewport: invalidate cached geometry colours when the theme palette changes * UI: preserve legacy theme logo colours with the borderless mark |
||
|
|
0dffb206b1 |
Assembly: ground the first part; drag free joint chains (#2804) (#2805)
* assembly(feat): ground first parts and drag free joint chains Ground the first top-level part when it is created and let face dragging reposition free occurrences or any member of a floating joint chain in one undo step. Preserve exact repeated-placement frames, joint values, modifier selection and Escape cancellation. Keep the accumulated fixture, viewport layout and documentation integration fixes from the existing PR. Signed-off-by: Karl Von Richter<karl@embeint.com> * assembly(fix): update movable fixtures for first-part grounding Accept the documented grounded override in component creation, explicitly free movement fixtures, and keep linked clipboard pastes movable even in an empty document. Cover first and reused linked pastes, default insertion grounding, and single-step undo in the existing link tests. Signed-off-by: Karl Von Richter<karl@embeint.com> * assembly(test): keep the motion-cost crank free Unground the first component in the document-level joint-face measurement fixture so its motion samples can rotate after first-part grounding. Preserve the rotation and shared-measurement assertions that caught the Linux CI failure. Signed-off-by: Karl Von Richter<karl@embeint.com> * assembly(test): free the frame placement fixture Create the frame-member placement fixture ungrounded before moving it above its root sketch. Keep its world-space member assertions while respecting first-part grounding in the frame tests added on main. Signed-off-by: Karl Von Richter<karl@embeint.com> --------- Signed-off-by: Karl Von Richter<karl@embeint.com> |
||
|
|
1ed394f8d6 |
Extrude: picking a face, vertex or parallel plane off the profile switches the extent to To Object (#2855)
* Extrude: picking a face, vertex or parallel plane off the profile turns the extent to To Object With profiles picked, a face off their plane (or curved), a vertex off it, or a construction plane parallel to it is taken as the To Object target instead of another profile: the extent switches without the Extent Type choice, and the distance shows how far the target is. Coplanar faces still join the profiles. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Extrude: automatic To Object is a Preferences setting, off by default Preferences > Design > "Extrude to a picked target" (`extrude_auto_to_object`, default false) turns the automatic To Object on. Off, picks in the Extrude dialog only add profiles and the distance is not synced to a target, as before this change. --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> Co-authored-by: bherbruck <brennen.herbruck@gmail.com> |
||
|
|
6eaf723041 |
fix(ui): preview shortcut chords and wait for complete modifier input (#1810)
Keep physical modifier events out of the ordinary-key slot, preview held keys immediately, and confirm after release and a one-second settling interval. Preserve legacy control-channel modifier behavior while allowing explicit physical Control/Command input. Add regression coverage, a UI scenario, localized guidance and documentation. Fixes #1809. Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> |
||
|
|
98c4f335e8 |
Control channel and MCP on by default, with a setting to turn it off (#5561)
The app opens its localhost control channel on port 27878 (or the next free one) unless Preferences > Assistant turns it off; --control and SOLIDCRAFT_CONTROL_PORT still win. A current.port discovery file lets solidcraft-cli mcp find the running app with no arguments. Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> |
||
|
|
7e472bc4da |
Cancel Sketch: leave a sketch without keeping its changes (#3838) (#3938)
* claim: #3838 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SBN24y2TcqRcm2zn8Gkj27 * Cancel Sketch: leave a sketch without keeping its changes (#3838) sketch.cancel (Cancel Sketch, ribbon Exit group and the sketch's right-click menu) puts the design back as it was when the open sketch was created or opened for editing: a new sketch is removed with its dimension parameters, an edited one returns to how it was. It is one undo step, so Undo goes back into the sketch. The session remembers the design and the undo history at the point a sketch is entered. Cancel uses that only while the history still runs through it (the same steps before, every step since taken in this sketch); otherwise it refuses and points to Undo, so a stale entry can never throw away later work. The icon is the approved close glyph in the sketch accent (alias sketch_cancel); ja and zh carry the new label. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SBN24y2TcqRcm2zn8Gkj27 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
68abb15d7f |
Spanish (es-ES): catch up with en.json (#4292)
Co-authored-by: carlymx <24634598+carlymx@users.noreply.github.com> |
||
|
|
04dc68d988 |
macOS: Fusion navigation preset does not support Shift + two-finger orbit (#3446)
* Macos: keep touchpad/key modifiers true to fusion * fix: remove obsolete orbit snap reset from trackpad navigation Upstream removed ViewportState::orbit_snap. The new trackpad orbit path retained one reference, causing E0609 in the PR merge build. Validation: all seven trackpad tests pass; cargo check -p solidcraft-ui-egui --all-targets passes on the exact failing CI merge 66a2791b with this fix applied; rustfmt and diff checks pass. Co-Authored-By: GitHub Copilot <noreply@github.com> * fix: retain Fusion trackpad help in refactored preferences Preserve upstream's new preferences pages and apply the translated Fusion trackpad tooltip in prefs/navigation.rs. Validation: cargo build -p solidcraft passed. Tests and full CI were not run, as requested. Co-Authored-By: GitHub Copilot <noreply@github.com> * style: format Fusion trackpad preferences tooltip Apply rustfmt's required wrapping for the relocated tooltip. No behavior changes. Validation: cargo fmt --all -- --check and git diff --check passed. Co-Authored-By: GitHub Copilot <noreply@github.com> --------- Co-authored-by: GitHub Copilot <noreply@github.com> |
||
|
|
27d2fe6ec0 |
Frames: profile library, members along frame sketch lines, and the Frame Member dialog (#4003) (#4004)
* claim: #4003 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Frames: the profile library (#4003) The first slice of frames and weldments: the cross-sections structural members will be made of, each SolidCraft's own parametric definition built in code (no vendor or standard size tables are shipped). - solidcraft_doc::frame: bar, round bar, rectangular and round tube, angle, channel, I-beam and a generic T-slot extrusion as exact line/arc regions, with defaults worked out from the profile's size, refusals that name the dimension that does not fit, anchors and placement, and exact section properties (area, centroid, Ixx/Iyy/Ixy by Green's theorem). - frame.profile.list, frame.profile.properties (with mass per metre for a density) and frame.profile.insert (draws a profile into a sketch, locked by default, at a point, anchor and angle). - Tests against hand-computed values (rectangles, circles, composite rectangles by the parallel-axis theorem, fillet spandrels), hostile input, extrusion volume, undo; catalog entries in every locale; docs/frames.md; ROADMAP M15. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Frames: drop the built-in T-slot profile (#4003) Aluminium extrusions and other vendor sections come from the user's own sketch (drawn or inserted from the vendor's DXF), so the library keeps the plain steel shapes only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Frames: members along frame sketch lines (#4003) frame.member lays one body per straight line of a frame sketch (2D lines or 3D sketch lines), its cross-section square to the line from end to end: - profile: a built-in profile, or profile_sketch, a sketch whose material (nested loops alternating, so two circles make a tube) is the section in its own x and y around its origin; profiles picks override it. - anchor (origin, centre, centroid or a bounding-box corner or edge middle), angle (an angle expression, so a parameter), mirror. - Orientation: the profile's y as near world up as the line allows, x square to both; a vertical member's x is world X (frame::member_axes). - Members follow sketch and parameter edits, undo as one step, save and reopen (format: pending/frame-members.rs), and are named after the profile (Rect Tube 40x40x3, (2)…), numbering on past names already taken. Tests against hand-computed volumes and bounding boxes (rectangle, 3D tower lines, parameter edit, sketch tube profile and picks, anchor/angle/ mirror), refusals, undo/redo and reopen; walk fixtures and goldens; docs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Frames: fixes from the adversarial review (#4003) - Default member lines are what was drawn: projected and other linked curves and 3D wires (a face sketch's edges) and lines of no length are left out. - A profile sketch's material starts from its drawn profiles, as solid.extrude's "all" does, so a section sketched on a face works; the even-odd test uses outlines and boxes worked out once, capped at 256. - Member names are pinned to their lines (`names`, by line id; `body_name` is the base): deleting or adding a line, or deleting another feature, no longer renames other members, and frame.member stores every name it gives. body.rename renames a member on its line (also for later member features); a copy whose body_names were set still names its members by position. - Built-in profile dimensions are expressions (ProfileSpec): they follow parameters, bare numbers take the design's units, and they are feature inputs. frame.profile.properties/insert read them the same way. - Default root/toe radii shrink to the room a thick section leaves; radii given are checked by name; a radius must be 0 or at least 0.01 mm; error messages report the wall or flange value given, not twice it. - A line within 1e-6 rad of vertical orients as vertical, so rounding never turns a post a quarter turn. - A 2D frame sketch in a differently placed component is mapped into the member's frame, and member features recompute when placements change. - Caps before lookups for a design's `lines`; a line listed twice is refused; a 3D wire that runs back on itself is not a line. Regression tests for each, from the review's scenarios. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Frames: the Frame Member dialog on the ribbon (#4003) - Frame Member (MODEL > Create) opens a dialog: the frame sketch's lines picked in the view (or All Lines), a built-in profile and its dimensions or a section picked in another sketch, anchor, angle, mirror and name, with a live preview. Edit Feature reopens it filled in. - Lines picked in the view keep their sketch (a SKETCH_LINES input picks ExternalSketchCurve): line ids are each sketch's own, so two 3D sketches both have a `w2`, and the members went on the newer sketch's lines. - timeline.redefine takes frame.member. Members keep their names through an edit unless it gives them a new body_name; frame.member takes `names`. - A member whose section is a whole profile sketch keeps it when edited (the dialog shows the sketch instead of picking every region, which would fill a tube's hole). - An original frame_member icon, open for review, on the ribbon, timeline and browser. - The angle profile is listed as L-Angle, and web and flange as Web/Flange thickness, so they translate apart from the existing Angle, Web and Flange; the dialog's labels are in en, ja and zh. en-GB no longer repeats the frame command labels it spells the same. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
b79c03d227 |
Viewport: show reference geometry through bodies (Preferences, off by default) (#2697)
A new Graphics preference, "Show reference geometry through bodies", draws inactive sketch contours, origin and construction planes and their axes over shaded bodies. It is off by default, so the viewport looks as before: reference geometry is depth-tested and a section leaves it whole (#1229); Create Sketch and dialogs picking a plane still draw the planes through the model. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
c3ed8b1c07 |
Offer to stand up SolidWorks files instead of turning them silently; add Turn Up Axis to the component menu (#5655)
Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> |
||
|
|
8301d1c48e |
Viewport: whole-body highlights reuse the model's own triangles (#4554) (#5109)
Hovering or selecting whole bodies -- a browser row, a History group, a body under the pointer in body-pick mode -- built a CPU copy of every body's triangles into the highlight scene. On a 40-body 4.3 MB STEP assembly that was 147 bodies, 70 MB of triangle copies and a 519 ms frame. The model already has the same geometry on the GPU. The highlight now names it and the renderer draws it again in the highlight colour: - bodies drawn from a display plan: the model's evaluated plan chunks, with a hover/selection tint uniform (the chunks stay resident in the model scene); - bodies drawn as placements of shared triangles: the same placements of the model's shared triangles, coloured per instance; - bodies the model builds on the CPU: their vertex range in the model scene's block. See-through and faded bodies keep the CPU feedback, which colours them; faces and edges highlighted on their own are unchanged. The highlight looks the same (verified side by side). On the assembly the highlight build drops from 519 ms to 9 ms and no longer copies any triangles; selecting the whole assembly takes 9-20 ms. Co-authored-by: Claude Code <noreply@anthropic.com> |
||
|
|
769dfff1a5 |
Section Analysis: a Hatch option (#4563) (#4565)
* claim: #4563 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Section Analysis: a Hatch option, off for a plain cut in the body's colour (#4563) The Section Analysis dialog gets a Hatch check box beside Flip, and inspect.section a hatch?: bool (default true), so scripts, the CLI and the control channel reach it too. Hatched, a cut is its body's colour tinted toward the cap colour with 45 degree stripes, as before; off, it is the body's own solid colour. The viewport (cap alpha in the uniform), the CPU rasterizer and ui.render follow it, and the section keeps it when hidden and shown again or edited. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
5c280b9a94 |
fr: Répétition instead of Réseau for patterns (#4751)
Nine messages: the pattern tools, their headings and two sample descriptions. "Réseau" can be mistaken for a network. Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> |
||
|
|
9559ad398a |
Physical material: one rule for a body's material and its density (#4783) (#4785)
* claim: #4783 * Physical material: one rule for a body's material and its density (#4783) inspect.measure, component.properties, occurrence.properties and the Properties window took a body's material name from the raw assignment, but its density from Document::density, which falls back to the default material when the assigned one is unknown or has an unusable density. So a damaged or hand-edited design read one material and weighed another: a design material "Broken" at -3 g/cm³ read "Broken" at 1.29 g/cm³. One rule, in one place: - DEFAULT_MATERIAL (new, beside DEFAULT_DENSITY in the material library) is the default material's name. The library's first row uses it. - Document::body_material (new, beside Document::density) is the material a body's mass is computed with, as the library or the design spells it: the assigned one when it is known and has a usable density, else DEFAULT_MATERIAL. Document::density is that material's density, with the same value as before for every input. inspect.measure and the physical properties name body_material. inspect.measure now names every body's material, measured or not, since naming it takes no measuring; the density stays with the mass, on the bodies measured. So the Properties window shows the engine's name without a fallback of its own. The places that keep the assignment as stored (configuration cells, material.assign, material.edit, material.delete and the dialogs) only use the constant, so a configuration still keeps a damaged assignment as it is. The visible change: a body whose material is unknown, or has an unusable density, reads "Default", the material it weighs, and a miscased name reads as the library or the design spells it. A body inspect.measure can't measure now has its material too. Masses and densities don't change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
a0fd39a7be |
Flange on a plain solid says how to start sheet metal (#2987) (#4789)
* claim: #2987 * Flange on a plain solid says how to start sheet metal (#2987) Flange, Flat Pattern, and Export DXF on a design with no sheet metal body now say how to make one: Flange > Base, or Convert to Sheet Metal on a plate's large flat face. An edge flange checks for a sheet metal body before it adds a feature. The message is in the catalogs, and engine messages that match a catalog entry are shown in the interface language. * Dialogs show a refusal without the engine's parameter prefix (#2987) The Flange dialog showed "invalid parameters for `sheet.flange`: " in front of the new guidance. The dialog already names its command, so the red refusal text leaves that prefix out and follows the interface language when the message is in the catalogs. Create Issue still gets the full text. |
||
|
|
2f55a39c9c |
Timeline: delete the selected features, Shift+click ranges, delete after the history marker (#5005) (#5006)
* claim: #5005 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * Timeline: delete the selected features, Shift+click ranges, delete after the history marker (#5005) Delete in a feature's menu deletes the selected features when the right-clicked one is among them ("Delete 3 Selected Features"). Shift+click selects the range from the last feature clicked (or the last selected one), in the order taken before drawing. The menu of a feature after the history marker deletes every feature after the marker, with their number in the label. All of it goes through delete_features: one timeline.delete and one undo step. The confirmation no longer lists features that are themselves being deleted. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
80fd2fbbf1 |
Assistant: add Anthropic-compatible API agents (#5015) (#5017)
* claim: #5015 Co-Authored-By: Claude Code <noreply@anthropic.com> * Assistant: add Anthropic-compatible API agents (#5015) The Add agent wizard now offers Anthropic-compatible endpoints beside OpenAI-compatible ones. The API backend speaks the Anthropic Messages protocol with the same MCP bridge, tool gate, limits, undo and keychain rules: x-api-key and anthropic-version, a top-level system note, input_schema tools, content-block answers and one user tool_result message per round. Test sends a short message because compatible endpoints (Qwen's) need not list models. Co-Authored-By: Claude Code <noreply@anthropic.com> --------- Co-authored-by: Claude Code <noreply@anthropic.com> |
||
|
|
d273c45de6 |
i18n(pl): translate 213 missing messages (#5031)
Catch up with en.json: the new Preferences pages, assistant settings, 3D mouse axis assignment, bug report form, history names and the tool help texts. pl now covers every message of en.json. |
||
|
|
2dc31a30d4 |
Extract to File: move a component into its own linked design (#5113)
The component's sketches, features, bodies, subcomponents, the joints among them and the parameters they use move to a new .solidcraft design, keeping their ids and names, and the component becomes linked to it as Insert Design makes it. The new design must build the same bodies and the assembly must look the same afterwards, else nothing changes and no file is written. Joint faces on the component are found again on the linked bodies, and components that build the same bodies can become placements of the link. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
96679f3e2b |
Themes: drop the logo's fourth colour, which #5465 retired (#5548)
The 14 new built-in themes still listed four logo colours, so none of them read after #5465 and main's theme test failed. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
3ba17bb517 |
App icon: draw the borderless mark everywhere (#5461) (#5465)
* claim: #5461 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * App icon: draw the borderless mark everywhere (#5461) app_icon.rs drew the older mark with white lines between the faces and a white outline around it, so the Windows, Linux, web and README icons did not match the macOS icon, the social card or the title bar. It now draws the borderless mark from the faces and gradients of the macOS artwork (03-solid-blue-cutout.svg): five faces with transparent gaps between them. The filler fills even-odd spans so the concave faces work. The Linux hicolor PNGs and both Windows .ico files are regenerated with `cargo xtask app-icons`. The README logo, the web app's icons and every package pick them up from there. The logo colour token's fourth entry (the white edge) is gone: nothing draws it any more. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
63d81cc096 |
Motion Trace: regenerate kept curves only when inputs change (#5248) (#5270)
* claim: #5248 * feat(motion): regenerate kept traces when source inputs change * feat(motion): add a parametric Chebyshev trace demo * perf(joints): reuse face measurements across motion samples Face-centred joint origins called Body::faces on every solve, bypassing the reference-mesh reuse used for rigid placements. Share face measurements with unchanged model geometry at the existing tolerance, while guarding replaced bodies and applying offsets after the cached measurements. Cover repeated named/nearest-face solves, shape edits, retained snapshots and direct replacement with deterministic work counts. The 145-point Chebyshev dimension and range updates retain identical sampled and interpolated curves. * perf(naming): skip preparation for cached face names Both face lookup paths spawned fresh workers over every body even when their name cells were ready. Prepare only cold cells, with direct handling of zero or one cold body. Preserve the existing parallel naming path and all face selection semantics. Deterministic regressions cover repeated picked and unique-name lookups, misses, partial warmup, renames, snapshots and moved copies. Release Chebyshev medians fall from 859 to 50 ms for a dimension edit and 871 to 34 ms for a sweep edit; all 145 samples and interpolated points remain identical. Full cargo xtask ci passes with RUST_TEST_THREADS=4 and the existing local Windows validation overlays. |