* Point clouds: insert PLY, XYZ and PTS scans as a modelling reference (#5151)
A point cloud is kept in the design as a reference, drawn as depth-tested
dots and never a body.
- io: a PLY reader (ASCII, binary little/big endian; x, y, z of any numeric
type, optional colours, other elements skipped; counts checked against the
file) and XYZ/PTS text, thinned evenly past max_points. PLY meshes with
faces can also come in through file.insert_mesh.
- doc: Document.point_clouds (shared f32 points relative to an f64 origin,
colours, units, rigid placement, size and colour), stored as a binary
container part; format change in pending/point-clouds.rs.
- engine: pointcloud.insert / edit / delete / list; doc.open opens a cloud as
a new design; selection.delete takes point_clouds; view bounds include them.
- gpu: an instanced point-sprite pipeline (16 bytes a point).
- ui: Browser Point Clouds folder with eyes, menu and an Edit Point Cloud
card; drop, Open, Insert and file dialogs take .ply/.xyz/.pts; a CPU
viewport fallback; messages in en, en-GB, ja, zh, de and ko.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Point clouds: colour by the file, one colour or height, from the UI (#5151)
The Edit Point Cloud card gets Color By (File Colors, Single Color,
Height). Height is a blue-to-red ramp over design Z, between the cloud's
own two heights or, by default, a range worked out from the points (all
but the lowest and highest 2 %, from an even sample). pointcloud.insert
and pointcloud.edit take color_by and height_range; pointcloud.list
reports them. The colour of each point is worked out in one place
(PointCloud::shade) for the GPU and CPU viewports.
Also: the card's dropdowns compare the picked index (a dropdown's
response doesn't report the pick, so File Units did not change either).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Point clouds: integrate format registration and viewport caches (#5151)
* Point clouds: satisfy current UI audits and document comparisons (#5151)
Route model RGB data through the theme conversion boundary, provide a compact ribbon label, and include point clouds in the new document comparison. Gate the Unix-only CLI-link helper and test so Windows all-target checks remain buildable after the rebase.
* Point clouds: isolate translations for current main (#5151)
Move the existing 74 messages unchanged into one pending locale file and attribute it through a pending row, following the current repository workflow. Repository checks, 50 tooling tests, final workspace Clippy, wasm and generated-catalog equality checks passed after the rebase.
* Point clouds: fit the rebased code to main's GpuTarget and Frame
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Compare point clouds when reusing placement-independent results
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Point clouds: complete command help and required translations (#5151)
* Point clouds: size the save cap from the raised limit after the rebase
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>
* Render output: size presets, Check list, Copy, progress pill, R and Esc, and the result viewer
* Complete Output GPU help translations and format choices
* Remove Output size labels already present in catalogs
* fix: compile the legacy finishing controls only for tests
The hint "at the face" had no catalog message, so it stayed English in
every language. Add it in English and the 26 other catalogs, and check
that every plastic dialog hint has a message.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* claim: #8318
* Preferences: the File view entry and the search field carry the window's name (#8318)
The File view's entry that opens Preferences said "Settings", and the window's
search field said "Search settings" / "No matching settings", while the window
title, the File menu and the help texts around the app say "Preferences". The
strings that name the window or point to it now use "Preferences"; ids unchanged.
Translations of these ids followed the English source and keep their wording
until the language teams catch up.
Tests: home::tests::the_entry_that_opens_preferences_carries_the_windows_name
and prefs_search::tests::the_search_field_names_the_window_it_searches fail on
main ("Settings" vs "Preferences") and pass here; the prefs_search:: and home::
suites pass, and the full solidcraft-ui-egui lib suite passed in `cargo xtask ci`.
* claim: #6901
* Feature windows choose Join, New Body or Cut from what the material touches (#6901)
Extrude, Revolve, Loft, Sweep, Coil and the Box, Cylinder, Sphere and Torus choose
their operation by running the Join on a copy of the design off the window thread
and counting the pieces: Join when the material makes one body with what it
touches, New Body when it would be a separate piece, Cut when it lies inside a
body (Revolve and the four primitives; Extrude keeps its own Cut). The choice
changes only when a check is in, a pick in the Operation row (the shown option
included) stops it for good, and OK waits for a running check. Hidden bodies take
no part: with some hidden, the shown ones become the feature's targets.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Operation row: a pick in Extrude stops its own choice at once; ja/zh strings, gallery entry
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Operation check: contact test first, mesh volumes for Cut, OK takes the evaluated Join
Material touching no body is a New Body without running the Join (the contact
test costs 0-240 ms where the Join costs seconds on a large body). Inside is told
from display-mesh volumes instead of exact ones (8 s on a 400-hole plate). The
check evaluates the Join through Session::ahead, and OK of the same commands
takes it (Session::prime) rather than computing it again.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Preference: Choose the operation automatically (on by default)
Preferences > Design gets "Choose the operation automatically" (auto_operation,
on by default). Off, feature windows don't choose Join, New Body or Cut from
what their material touches: each keeps the operation it opens with (Extrude
its own Join or Cut), no check runs and OK doesn't wait for one, as before
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Arabic, Hebrew, Vietnamese and Turkish strings for the operation choice and its preference
Arabic, Hebrew and Vietnamese are complete catalogs now, and Turkish has a full
catalog, so this change's three strings get them too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Operation check: a closed window's check stops; the icon audit doesn't choose
A window's operation check kept running after the window closed, a Join on
the design for nothing, and the test harness waited for it after every step:
the icon audit, which opens every window, took ~30 min instead of ~1. The
check now runs under a Progress, and closing the window (or one that doesn't
choose) abandons it: its evaluation stops at the next feature and nothing
waits for it. The icon audit turns auto_operation off, as it only looks at
icons (75 s again).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Box placement test: the window keeps its New Body
The test #6248 added places a box that overlaps Base and expects a second body;
with #6901 the window would join or cut it. The test is about where the box
goes, so it turns auto_operation off.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Join pieces: read the target lists leniently after the rebase
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>
* claim: #7717
* Stand-up offer: a note only when the part seems to lie on its back (#7717)
* Stand-up note: an unclear shape still gets the note
* Stand-up note: a Don't ask again button, as the dialog has
* Control protocol: the stand-up settings in the sorted ui.prefs list (#7717)
* Stand-up note: the control import test asks as before (#7717)
The test checks the caller's `up`, so it sets the setting to Ask and every
file from another program still gets the offer.
* claim: #6645
* Sketch: Center Point Arc follows the cursor clockwise or counter-clockwise (#6645)
The centre-point arc always ran counter-clockwise from its start; a
clockwise arc needed a typed negative sweep. The tool now tracks the
signed turn the cursor makes round the centre after the start is placed,
and its sign sets the direction of the preview, the live Sweep box and
the created arc.
sketch.arc.center_point takes `clockwise` with a clicked end: the arc is
stored counter-clockwise from the end and reversed, as a negative sweep
is, so the start keeps its radius and `<id>.start`.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FN5eEMrqWWXqi65FcK8GXq
* Sketch: keep the old counter-clockwise centre-point arc behind a preference (#6645)
Preferences > Sketch gets "Center point arc follows the cursor's
direction" (center_arc_follows_cursor, on). Off, the arc runs
counter-clockwise from the start whichever way the cursor went, as it
always did. Its strings are a pending locale file (en, de).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FN5eEMrqWWXqi65FcK8GXq
* Sketch: Japanese and Chinese strings for the centre-point arc preference (#6645)
ja and zh are complete catalogs, so the new preference's label and tip
need them too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FN5eEMrqWWXqi65FcK8GXq
* Sketch: Arabic, Hebrew and Vietnamese strings for the centre-point arc preference (#6645)
Arabic, Hebrew and Vietnamese became complete catalogs on main, so the new
preference needs them too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: sascha2101 <221609842+sascha2101@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Russian: translate the Render workspace's 706 messages (batch 2)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Russian: the 27 Render messages main gained since (the Appearances panel)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
A new command, sketch.spline.reverse, runs a spline the other way: its
point list is reversed in place, so its last point becomes its first and
the curve keeps its path (chord-length fits, uniform clamped knots and
closed fits read the same both ways). Points and constraints stay. A
projected spline and one an offset uses or makes are refused. The
sketch's right-click menu offers it for one selected spline.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* claim: #8301
* Timeline: the feature menu's suppress item follows the reader's language (#8301)
Suppress Features / Unsuppress Features were raw literals. Menu::label()
translates a label only when a catalog entry carries it, and none did, so the
item stayed English in every language, the Japanese UI included.
The two labels are now the messages timeline.suppress_features and
timeline.unsuppress_features in a new assets/locales/pending file: the English
wording is unchanged, and the complete catalogs (ar, he, ja, vi, zh) plus de and
ko carry the translations.
cargo test --profile ci -p solidcraft-ui-egui --lib -- timeline::tests::the_feature_menu_suppress_item_follows_the_language
fails on the claim commit (the Japanese menu paints the English literal) and
passes with the change.
The Appearances panel's 27 messages for Dutch, Hungarian, Galician,
Malay and Norwegian Bokmål, which their merged Render batches missed,
and the shots strip's 7 newer messages for those and ten more.
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Italian: translate the 132 messages main gained since batch 1 (batch 3)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Italian: the Appearances panel's 27 Render messages
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Dutch: translate the 199 messages main gained since batch 1 (batch 3)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Dutch: Spoed for a thread's pitch, as the catalog's Pitch (review)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* Render inspector: selection-following appearance panel with the look chain, Applies to and edit controls
* Render appearance: Glass, Clear coat, Maps, Saved optics and Reflections sections
* Update Render navigation tests for dedicated editors
* Exercise Focus keyboard protection through the Library search field
* French: translate the 205 messages the catalog was missing
The French catalog lacked 205 of the English messages, so parts of
Preferences, the hole presets, the slicer messages, the Render
workspace and the Assistant showed in English. They are translated in
one pending file, with the catalog's terms (Esquisse, Fonction,
Bossage, Appui, Clip, Prise de vue) and its non-breaking space before
: ; ? and !.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Translate the 90 messages main added since (the navigation bar's)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* claim: #4086
* Raise the largest file SolidCraft opens with a setting or launch flag (#4086)
* Translate the file size limit strings
* Size limits: design files are .sc now, .solidcraft still read
* Romanian: translate the Render workspace's 733 messages (batch 2)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Romanian: the Render tree's switch hint is a verb
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* claim: #7861
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* Sketch dimensions in a colour of their own in every theme (#7861)
Dimension lines, arrows and values were drawn in the same near-black or
near-white as fully constrained sketch curves, so they were hard to tell
apart in a busy sketch. Every theme now sets its own dimension colours:
plum on Light, orchid on Dark, and a hue from each built-in theme's own
palette. Colour vision tests measure them against the curves, the
construction lines and the conflict red, and a new test holds every
shipped theme to readable, distinct dimension colours.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>