3086c32a9a
A round hole elsewhere on a body no longer breaks a loft cut beside it: a loft cut from a pocket floor (556.68 x 99 down 4 mm to 80 x 80), with a 35 mm hole 66 mm away that it never touches, failed with a kernel panic in TroughFall, while the same cut without the hole, or with the hole made afterwards, worked
CypherNaugh_0xandClaude Opus 5.52026-10-10 23:32:48 +02:00
5249ae84ef
Moving a body that a boolean made no longer hangs: a boolean between a cylinder and a tilted plane (an elliptical edge) froze the app at 100 % CPU, because its retries move both bodies and the result back
CypherNaugh_0xandClaude Opus 5.52026-10-10 23:31:46 +02:00
f3a689f284
A thin part trimmed by a long one is no longer refused as an implausible result: a 437 mm bar with a 3 mm concave arc in its profile, cut by a 920 mm prism with a top tilted 21 degrees, failed with "implausible result volume 3870" (it was 3694 before the cut)
CypherNaugh_0xandClaude Opus 5.52026-10-10 23:17:02 +02:00
f17ff913d6
A panic while healing a boolean result no longer ends the boolean: a shallow, wide loft cut from a top face (556.68 x 99 down 4 mm to 80 x 80 in a 900 x 480 x 160 slab) failed with "called Option::unwrap() on a None value"
CypherNaugh_0xandClaude Opus 5.52026-10-10 23:16:01 +02:00
6f16b31771
Fix viewport input leaking through dialogs
bherbruck2026-10-10 17:28:12 -04:00
ab23fc9906
A failed MCP batch goes back to where it started however long the undo history is: rollback undid as many steps as the undo history had grown, but the history is capped at 200 steps, so once it was full a failed batch reported undone: 0 and left its sketches behind (an empty Sketch1, two sketches named TapHole). New commands edit.checkpoint and edit.restore_checkpoint (forget: true drops one) remember and restore the design, the active sketch and the undo history; batch takes a checkpoint before its first step, restores it on a failure and forgets it on success. Against an app without checkpoints batch falls back to counting undo steps
CypherNaugh_0x2026-10-10 20:21:47 +02:00
54a86dc6f5
Deleting a sketch deletes every feature built from it: a pipe whose path sketch was deleted stayed in the timeline as a broken feature ("unknown sketch"), and so did holes drilled at sketch points and patches filling sketch regions. Which sketches a feature uses now comes from one place, FeatureKind::input_sketches, a match over every kind with no wildcard arm, so a new feature kind does not compile until it says which sketches it uses; a test reads the FeatureKind definition and fails when a kind with a sketch field is listed as using none (it catches a sketch field added to an existing kind). timeline.dependents reports the same features
CypherNaugh_0x2026-10-10 20:21:47 +02:00
acf4669f73
fix: select complete circular rims and curved surfaces in 3D
bherbruck2026-10-10 17:13:36 -04:00
e042a7b555
ci: cache native Linux test compilation with sccache (#93)
bherbruck2026-10-10 17:07:18 -04:00
96ee326424
ci: drop pages: write permission from Flatpak repository build job
Dylan M. Taylor2026-10-10 16:18:23 -04:00
d6cdec40da
Fix modelling regressions and reconcile WIP UI work
bherbruck2026-10-10 15:05:27 -04:00
49bd89de13
Parameter and feature edits report the features they restored from the evaluation cache: setting a parameter back (or a timeline.edit back) reused the earlier results for the same inputs, so the geometry changed back but recomputed said 0, which read as "nothing rebuilt". The evaluator now counts cache hits as last_restored, and parameters.change, timeline.edit, timeline.redefine and solid.press_pull on a fillet or chamfer face report it as restored next to recomputed (params docs, the MCP set_parameter description and docs/mcp.md say what each counts). Tests: setting a parameter back and a feature edit back report restored, in the evaluator and through the commands
CypherNaugh_0x2026-10-10 21:00:32 +02:00
90ce5261b3
An angle dimension between two lines takes the reading nearest its value and reports degrees: without text_at the angle was measured between the lines' directions, so a riser pointing up and an outlet pointing down-left (meeting at 30°, directions 150° apart) asked for 30° swung the outlet round by 120°, which the fillets between them could not follow, and the dimension was refused as over-constraining with a degree of freedom left. Two lines make two angles, θ and 180° − θ; the dimension now takes the one nearer the value (the acute one without a value), and text_at still picks a sector. sketch.dimension reports measured in the dimension's unit (deg for angles, mm for lengths) with a unit field, instead of radians for angles
CypherNaugh_0x2026-10-10 20:40:07 +02:00
81be4e74b8
browser.visibility hides and shows sketches, bodies, construction geometry and origin items (items: ids or names, or a whole folder; visible: bool), so agents can hide helper sketches over MCP. What is hidden moved from the egui UI state into the engine session (view state: not saved, not an undo step); the desktop eye toggles and menus use it, headless renders and fit leave hidden items out, and document.inspect, sketch.inspect and ui.inspect report visibility. ui.set still accepts hiddenBodies, hiddenOrigin, hiddenSketches and shownSketches. Tests: helper sketches hide and show in the engine (hostile input changes nothing) and through MCP only
CypherNaugh_0x2026-10-10 20:02:06 +02:00
0321778d38
Perspective views no longer show hidden edges through solids: lines, decals and ghosts were pulled toward the eye by a fixed step in depth, and perspective depth is not linear in distance (near plane at about 0.1 % of the distance), so at the model that step spanned tens of millimetres and hole bottoms, the far side of bores and the back edges showed through the part (and through section caps). In perspective the point now moves toward the eye by a fraction of its distance (about 0.2 mm at 140 mm, like the orthographic step); orthographic is unchanged. Not covered by an automated test (no GPU in the test suite); checked in the app with before/after screenshots
CypherNaugh_0x2026-10-10 19:23:49 +02:00
b5fd55cce6
Section Analysis cut faces hide the inside of the body: the cap was drawn on the far walls' back faces at their own depth, so every edge between the cut and the far wall (hole and boss edges, corner seams) showed through it like a pane of glass. While a section is shown the solids mark in the stencil where the cap is the visible surface, then draw the cap again there at the depth where the view ray meets the section plane (orthographic and perspective), so holes stay open and the inside is hidden. The native app asks for an 8-bit stencil; without one (eframe's web painter has none) the cap draws as before. Not covered by an automated test (no GPU in the test suite); checked in the app with before/after screenshots
CypherNaugh_0x2026-10-10 19:19:46 +02:00
29796762de
cargo xtask test runs every test binary at once (cargo test runs them one after another): 323 s to 75 s on 12 cores. cargo xtask ci runs the quick gates (fmt, assets, licences, layers) first, then clippy, then the tests with the wasm check and doc tests alongside; the wasm check uses the ci profile to reuse clippy's host build scripts and proc macros. GitHub CI runs its tests through cargo xtask test
CypherNaugh_0x2026-10-10 18:51:18 +02:00
aa268f0f0e
Faster tests: hostile_params_never_panic shares its commands across threads (154 s to 20 s), the design-file fuzz test tries its seeded cases on all cores (21 s to 7.5 s), the kernel's tangent-primitive boolean test runs its three seeds at once, and the headless scenario harness skips the software viewport render it threw away every frame (scenarios 63 s to 26 s). kill_mid_save waits for the saver to reach a varying round instead of sleeping a fixed time, so it holds on a busy machine
CypherNaugh_0x2026-10-10 18:51:18 +02:00
4a41de72ec
Autosave ids are unique within the process: an app restarted in the same second (the scenario harness crashes and restarts in one process) took the id {seconds}-{pid} of the crashed app, locked its entry again and so offered nothing to recover. The id now carries a per-process sequence number. Test: a restart in the same second still offers the crashed app's work
CypherNaugh_0x2026-10-10 18:51:18 +02:00
524ef6b8c2
The up axis preference (Preferences > Design, ui.prefs up_axis) turns the view: the camera, home view, ground grid and orbit follow it, at startup too
bherbruckandClaude Opus 5.52026-10-10 17:08:51 +00:00
74f70614cc
Section Analysis: cut faces in their body's colour (tinted toward the cap colour) and hatched; snapshots show the section too (the cut part removed, hatched cut faces)
bherbruckandClaude Opus 5.52026-10-10 16:49:54 +00:00
c90070c497
Agent cursor speed: a slider from 1× to 5× with Instant at the far right. Instant no longer breaks: the command runs at once (as with the cursor off) and the pointer jumps to where it acted, with a click ripple. ui.agent_cursor speed takes 1–5 or "instant"; saved "slow" and "normal" read as 1×. Scenario covers 1×, 3× and Instant against the cursor-off result
v0.1.3
bherbruckandClaude Opus 5.52026-10-10 16:54:54 +00:00
9508ee749c
Shell refuses a wall thicker than a rim instead of returning a corrupt body: the topology-preserving face offset now checks every planar face's moved loops, and a loop that turns inside out or two loops that cross (a rim or ledge narrower than the move, e.g. a bowl opening sliding past the slab's outer edge) is an error naming the spot. Before, the self-crossing cavity went into the boolean and the shelled body came back with roughly twice its volume and its centre of mass outside the body, so every later cut failed its volume check
CypherNaugh_0x2026-10-10 17:55:31 +02:00
a0f456d4f4
Clippy passes on macOS and Windows again: the options rebinding for the XWayland default is compiled only where the Linux block that mutates it is, instead of leaving an unused mut that -D warnings rejects (#75)
CypherNaugh_0x2026-10-10 18:09:07 +02:00
9a22d9df92
Section Analysis takes a world coordinate: inspect.section {plane, at} places the cut at that coordinate on the named plane's axis (XY: Z, XZ: Y, YZ: X), so XZ's -Y normal no longer flips the sign; the params doc gives each named plane's normal; the result reports axis and at for named planes. at with offset, or with an {origin, normal} plane, is an error
CypherNaugh_0x2026-10-10 17:10:04 +02:00
5d5ff44db2
Drawing connects to existing points: a new point landing exactly on an existing point (the origin too) gets a coincident constraint in the engine, for every drawing command and every caller (MCP, scripts, clicks), in the same undo step; connect: false opts out. Re-tying an existing coincident returns it ("existing": true) instead of failing; the UI's after-the-fact tie_snaps is gone
CypherNaugh_0x2026-10-10 16:25:41 +02:00
49d6682fe7
Rectangles name their sides and corners: sketch.rectangle.two_point and .center return sides {bottom, right, top, left} (line ids) and corners {bottom_left, bottom_right, top_right, top_left} (point ids), so they can be dimensioned without a sketch.inspect round trip
CypherNaugh_0x2026-10-10 14:50:32 +02:00
d57e90a32a
View cube labels are printed on their faces: each face's name is laid out flat and mapped through the cube's projection, so it turns and foreshortens with the face and fades out as the face turns edge-on (instead of floating upright at the face's centre and vanishing past 70 degrees). TOP and BOTTOM read upright in the plan views clicking them turns to. Tests: every label reads upright in its own view and stays within its face from every direction
David GrayandClaude Opus 5.52026-10-10 21:06:34 +11:00
52d2936f94
Linux: default to XWayland for file drag-and-drop on Wayland desktops
Dylan M. Taylor2026-10-10 09:02:59 -04:00
365879c722
Merge pull request #72 from bherbruck/fix/riscv64-apt-sources
bherbruck2026-10-10 10:30:19 -04:00
ba0f683e89
ci: separate native tests and lint, make cross checks opt-in
bherbruck2026-10-10 09:56:31 -04:00
cf1ab075ec
Merge pull request #65 from N3MI-DG/fix/view-cube-edge-on-flares
bherbruck2026-10-10 09:32:27 -04:00
03790f5509
View cube, move triad plane squares and the Offset Plane preview no longer flash lines while orbiting: faces turned nearly edge-on are drawn with projected_polygon (an unfeathered fill, outlined edge by edge) instead of egui's convex_polygon, whose miter joins shot spikes hundreds of pixels long at the slivers' sharp ends. Tests check everything drawn stays within each shape from 4050 view directions
David GrayandClaude Opus 5.52026-10-10 20:28:08 +11:00
be095132b9
Re-land of the shell branches on the renamed ids (#6): the occurrence Move window goes through frame.rs like every window
bherbruckandClaude Opus 5.52026-10-09 23:00:50 +00:00
5f45f0789f
Status bar: commands by their labels ("Fillet done", "Shell: offset must be …") instead of internal ids
bherbruckandClaude Opus 5.52026-10-08 16:50:16 +00:00
4812ec6c0b
Toolbar customisation: a command's menu (right-click a toolbar button, a panel drop-down row or an S box row) pins it to the toolbar, removes it or pins it to the S box's favourites; drag buttons to reorder within and between panels (drop line); Reset Toolbar; per workspace and tab, kept with the preferences, exported and imported with the keyboard shortcuts. Workspace switcher spans the toolbar's height and opens the workspace menu (Design; the others coming later)
bherbruckandClaude Opus 5.52026-10-08 16:27:00 +00:00
b5e74030c0
Occurrence Move/Copy uses the shared move triad (arrows, plane squares, rings, ball; snapped): distances and X/Y/Z angles, turning about the occurrence's starting origin, pending until Capture Position
bherbruckandClaude Opus 5.52026-10-08 15:30:14 +00:00
9d3cbb4acc
Browser fold arrows: each row is one widget with a stable id, and where the click lands decides what it does (fold arrow with padding, eye, radio, or the row), so an arrow click toggles without also selecting or picking the row or starting a drag; Collapse/Expand tips; ui.at {browser|chevron} and ui.browser for automation; scenario browser_chevrons clicks every folder's arrow (document settings, named views, origin, groups, sketches, construction, canvases, components, bodies, the design) and checks the children; the inch-width units test runs now that params reads unit-less lengths in design units
bherbruckandClaude Opus 5.52026-10-08 15:16:08 +00:00
fd4d38d31e
Test (ignored until params reads unit-less length parameters in design units): a bare inch width stays 50.8 mm when the design goes metric
bherbruckandClaude Opus 5.52026-10-08 13:22:45 +00:00
535bd5dfff
Section Analysis visuals: the cut faces are hatched at 45 degrees in the cap colour, and each body's outline along the cut is drawn
bherbruckandClaude Opus 5.52026-10-10 04:06:34 +00:00
794a394b28
Scenario acceptance_lip_on_rounded_rim enabled: the Lip on the enclosure's rounded rim works since #29's fix
bherbruckandClaude Opus 5.52026-10-10 03:58:08 +00:00
9dd901649c
View cube with Y up (#3): the cube is drawn and clicked in the camera's up-axis frame, so TOP is the world's up; TOP and BOTTOM turn to the standard plan views (yaw 0). Scenario view_cube_y_up; the camera check can test the world direction the camera looks from
bherbruckandClaude Opus 5.52026-10-10 03:52:24 +00:00
d1cdc4d061
Silhouette edges on curved surfaces: drawn in the surface shader where it turns away from the eye (about 1.5 px, only on the visible surface, so nothing shows through thin walls), in the viewport and live previews; snapshots draw them too. The back-face outline pass is gone
bherbruckandClaude Opus 5.52026-10-10 03:52:14 +00:00
62746045af
Fillet dialog: middle radii for variable fillets (add, remove, position and radius) and the Smooth toggle
bherbruckandClaude Opus 5.52026-10-09 23:01:45 +00:00
be18bd6573
Variable-radius fillets through middle points: radii at positions along the edge, straight or smooth between
bherbruckandClaude Opus 5.52026-10-09 22:38:56 +00:00
a7fe0429f0
IGES reader checked against Fusion's IGES exports: 75 of 76 reference parts read back exactly; cone tips read whole
bherbruckandClaude Opus 5.52026-10-09 22:20:11 +00:00
72bc6fb010
A pattern or mirror of a suppressed feature has nothing to copy: its copies go with it and the pattern warns (the acceptance enclosure loses all four standoffs when Standoff is suppressed); scenario acceptance_pattern_of_suppressed_feature enabled
bherbruckandClaude Opus 5.52026-10-10 03:50:04 +00:00
d1428ef27c
UI tests clear the frame's texture changes: no "Dropped TexturesDelta" panic in debug builds
bherbruckandClaude Opus 5.52026-10-10 03:47:00 +00:00
7318b98b8d
Preferences: one Fusion-style dialog from the gear at the top right and Ctrl+, (Cmd+,)
bherbruckandClaude Opus 5.52026-10-09 22:21:42 +00:00
132acc9863
Perpendicular Plane (construct.plane.perpendicular {plane, line}): the plane through a straight edge, sketch line or axis, square to a plane or planar face; a line square to the plane is refused (no single answer)
bherbruckandClaude Opus 5.52026-10-09 22:56:36 +00:00
0e2d8efd5c
See-through bodies and faces are drawn back to front: the glass triangles are re-sorted along the view direction when the view turns (more than about 2 degrees), so overlapping glass blends in order. Large triangles that cut through each other can still show a seam (sorted by centre)
bherbruckandClaude Opus 5.52026-10-09 22:45:53 +00:00
eac7306d59
Merge pull request #39 from dylanmtaylor/ci/flatpak-pages
bherbruck2026-10-09 22:19:56 -04:00
183301bce9
Merge pull request #54 from dylanmtaylor/feat/riscv-build
bherbruck2026-10-09 21:18:54 -04:00
721c8b96a4
Merge pull request #55 from bherbruck/ci/agent-managed-releases
bherbruck2026-10-09 21:17:14 -04:00
1e5356e056
Selected and hovered edges, and a selected face's outline, show dimmed where the model hides them
bherbruckandClaude Opus 5.52026-10-09 22:32:31 +00:00
1c23620bd9
Merge pull request #56 from bherbruck/docs/readme-fusion-introduction
bherbruck2026-10-09 20:23:56 -04:00
7a98800699
ci: stage agent-managed releases from the release branch
bherbruck2026-10-09 20:18:13 -04:00
88b4c5b883
fix: preserve behavior under new Clippy lints
bherbruck2026-10-09 20:18:05 -04:00
a3a1d15d02
Test: Project and Include from other bodies (an edge, a face's loop, a silhouette, a 3D circle) follow a parameter edit of that body and are reported lost, not failed, when it is deleted
bherbruckandClaude Opus 5.52026-10-09 22:40:06 +00:00
61f86d073d
Sketch Fillet: several corners at once (points: one radius dimension, the other arcs equal to it); a radius too large for a line corner is a clear error naming the length it needs, and nothing changes; tests for a constrained rectangle's corners (areas exact), line-arc and arc-arc corners, too-large fillets and chamfers, chamfer areas
bherbruckandClaude Opus 5.52026-10-09 22:33:18 +00:00
307ef11c0a
Sketch Trim/Extend/Offset robustness: Extend reaches splines, ellipses and conics (their polyline, then pinned on the curve); Offset refuses a distance its shape can't take (a straight piece overrun by its neighbours) instead of drawing a turned-inside-out copy; adversarial tests for trims (chords, tangent touches, lone lines, collinear overlaps, splines, ellipses, hostile points), extends and offsets (rectangles in and out, slots, splines, a spike, hostile distances), each leaving the sketch sound
bherbruckandClaude Opus 5.52026-10-09 22:20:47 +00:00
ab574952b1
Hidden origin planes and axes are not pickable: Create Sketch only brings the Origin back when no body is shown; origin and construction planes give way to a face or profile at the same depth (a shelled box's floor where the XZ plane crosses it). Scenarios hidden_origin_planes_not_pickable and face_wins_over_origin_plane
bherbruckandClaude Opus 5.52026-10-09 22:05:01 +00:00
67c79ec91c
Lips on rounded, shelled rims: the band along the rim's edge is raised from the body's own faces (kernel::raise_band: the rim face split along the band's exact offset edge, the band's walls swept up from the walls below, a top), since a join can't merge walls that continue each other; grooves cut with a band reaching into the free side so no wall coincides; tests against the band's area times its height
bherbruckandClaude Opus 5.52026-10-09 22:22:43 +00:00
80f5a58806
Re-land the robustness batch on main (#6): fillets running into an earlier round go to blend_corner (any radius) instead of the same-radius undo; the lip and drilled-hole regression tests move into tests/robustness.rs with the new command ids; measuring 5000 faces is checked for its counts, its time in an ignored perf test run alone
bherbruckandClaude Opus 5.52026-10-09 21:42:28 +00:00
f967b8d3ff
Measuring bodies of thousands of faces: 13 s to 0.8 s for 5000 faces (the body's size was recomputed for every face); merged topology counts right on finely faceted bodies (vertices welded only when they coincide, planes merged only when parallel within 1e-9), with a test
bherbruckandClaude Opus 5.52026-10-08 20:21:52 +00:00
6ab39679e7
Rounding an edge that runs into an earlier round of the same radius (a box's edges filleted one at a time, the first tutorial): the earlier round is undone (its faces deleted and healed) and both edges rounded together, the same body as picking both at once; another radius says what to do instead of 'the faces at the edge ends must be planar'
bherbruckandClaude Opus 5.52026-10-08 20:03:09 +00:00
d7f9f0a516
Shell of rounded parts (the first tutorial): a round thinner than the shell collapses to a sharp inner edge (as in Fusion) instead of failing; when an open face's tangent round can't follow it out, every face moves in and the opening is the open face's copy swept out through the body; spindle tori (a bottom round running round a rounded corner) are taken by the offset; shells after a drilled hole; engine tests against the analytic volumes (box with rounded vertical edges and bottom loop, the tutorial plate at 2 mm and 1.5 mm)
bherbruckandClaude Opus 5.52026-10-08 19:46:20 +00:00
1bf377c14b
No panics in the boolean's final assembly (the web build aborts on any panic: the Plastic Enclosure sample panicked 8 times and crashed the browser's start page); face pushes check their result and fall back to the general offset (a boss standing on a plate joins again with off-axis cylinder seams); offset errors name the face they can't move; docs/robustness.md with the before and after rates; caught panics counted per design in the robustness runs
bherbruckandClaude Opus 5.52026-10-08 19:30:51 +00:00
5d69452db3
View cube: the axis triad is drawn behind the cube, so only its parts outside the cube show
bherbruckandClaude Opus 5.52026-10-09 22:00:16 +00:00
322a357dee
Y-up worlds in the camera: an up axis on the camera (Z by default, or Y), with yaw and pitch measured about it; standard views, the home view, Look At, orbit, pan, the ground grid (XZ with Y up), the ground shadow and snapshots follow it. ui upAxis setting (app.set_up_axis re-aims and frames); cam.up_dir / to_frame / from_frame for the view cube and others
bherbruckandClaude Opus 5.52026-10-09 21:58:43 +00:00
abb9d7460f
Acceptance project (#27): examples/acceptance/sensor_enclosure.json, a sensor enclosure sized from user parameters (case with USB cut-out, patterned PCB standoffs and lid bosses, snap fit; lid with a lip from offsets of the case's rim and patterned screw holes). Scenario acceptance_sensor_enclosure edits it (USB moved, suppress and back, save and reopen, STEP out and back in); pending scenarios for what fails: #40 (lid lip after a resize), #41 (snap fit after a resize), #42 (pattern of a suppressed feature), #29 (Lip on the rounded rim). Harness: a script step runs a command script, $DIR in call parameters is the scenario's folder
bherbruckandClaude Opus 5.52026-10-09 21:43:07 +00:00
141f3acc85
Split pieces stay separate faces: Measure counts them apart and Offset Face moves only the picked piece
bherbruckandClaude Opus 5.52026-10-09 21:42:37 +00:00
a00153fc99
Snapshots show appearances: the CPU renderer colours bodies by their appearance (or imported colour) and faces with looks of their own, as the viewport does
bherbruckandClaude Opus 5.52026-10-09 21:37:21 +00:00
3a416ccb7d
Profiles picked by index are kept by the curves around them: add_feature turns profile indices into the curve ids of each profile's outer loop (Extrude, Revolve, Sweep, Loft, Emboss, Sheet Base, Patch), so a face sketch whose projected outline is rebuilt still extrudes the picked region; a profile that is gone is an error on the feature, never another pick
bherbruckandClaude Opus 5.52026-10-09 21:31:18 +00:00
4c8f080691
Faces split on purpose stay split: the body remembers its Split Face lines, export and healing keep the pieces apart
bherbruckandClaude Opus 5.52026-10-09 21:31:16 +00:00
0a1ab40ea0
View cube with chamfered corners: its only targets are the 6 faces (orthographic views) and the 8 corner facets (iso views); edges are not targets, a point on one goes to a neighbouring face or facet, and hover lights exactly the face or facet under the pointer. Design decision.
v0.1.2
bherbruckandClaude Opus 5.52026-10-09 20:03:04 +00:00
eef2430bc7
Surface tool dialogs: Patch (sketch profiles or a loop of edges), Stitch (tolerance), Thicken (thickness, one side or symmetric, operation), Extend (edges, distance), Trim (tool plane or face, side to keep) and Split Face; Split Body takes any face as its tool (a curved face's surface extended). Live previews and Edit Feature; icons for patch, stitch and thicken drawn in code
bherbruckandClaude Opus 5.52026-10-09 19:40:37 +00:00
a1a6e2b624
Release packaging: the MSI's licence files get a component GUID, the mounted dmg is verified without --strict, shellcheck follows env.sh
bherbruckandClaude Opus 5.52026-10-09 19:42:00 +00:00
6b146942bd
Dialog rows for the newer engine options: Thread Modeled; Shell Tangent Chain (on by default) and Direction (inside, outside, both); Revolve Type (Angle, To Object) and Direction (one side, two sides with Angle 2, symmetric); Extrude and Hole extents To Object; Hole on all points of a sketch; Fillet Radius Type (constant, chord length, variable with an end radius and Swap Ends); Combine into a New Component; Align snaps (as picked, centre, circle centre; edges snap at their middle); Boundary Fill dialog (the tools' cells found by sampling, ticked cells filled, Remove Tools). Edit Feature restores them; tests for each mapping
bherbruckandClaude Opus 5.52026-10-09 19:31:42 +00:00
ce61aef4a6
Dialog labels show in full: the label column grows to its longest label (up to 150 px, then wraps) instead of cutting labels off. Feature previews that remove material (Hole, pockets) show the cut's new faces through the body in the cut colour, so the hole is seen from any side
bherbruckandClaude Opus 5.52026-10-09 19:06:24 +00:00
7e0618d64b
Release pipeline after PhotoCraft's: AppImage/deb/rpm/Flatpak/tar.gz for Linux x86_64 and aarch64, FreeBSD, a macOS dmg and CLI zip, Windows x64/x86/arm64 MSI and portable zip (plus the plain x64 exe), web zip, SHA256SUMS.txt; version 0.1.2
bherbruckandClaude Opus 5.52026-10-09 19:04:27 +00:00
90fde44c32
Construction axes and points in the viewport: axes dashed in the construction colour across the model (past it either side), points as small stars; axes are picked like the origin axes and work as axes in dialogs (pattern directions, revolve, rotate); hidden like construction planes; timeline icons
bherbruckandClaude Opus 5.52026-10-09 18:53:06 +00:00
cbdc4fe0d8
View cube hover lights the whole region a click turns to: a corner its 3 patches, an edge its 2 strips, a face its middle (one hit test for hover and click; test over all 26 regions). View animations ease with smoothstep and take longer for turns past a quarter turn, so no frame sweeps much more than 9 degrees; s38 and s39 enabled
bherbruckandClaude Opus 5.52026-10-09 18:45:27 +00:00
3b650cac5f
Release workflow: the macOS job mounts the .dmg and checks it (the app, its Info.plist, both architectures, the Applications link)
bherbruckandClaude Opus 5.52026-10-09 18:22:29 +00:00
50a74ac66d
Agent cursor: a violet pointer labelled Agent acts out control-channel and MCP commands. It glides to the command's toolbar button (or its panel) and clicks with a ripple, then to each pick (faces, edges and points projected to the screen, sketch points, a new sketch's plane, the profiles an extrude takes), then the command runs; the reply waits for it and later requests queue behind. Speed instant/normal/slow; follow camera turns to a new sketch and back on finish. View settings on the navigation bar (Show Agent Cursor, speed, follow camera; remembered, off by default); ui.agent_cursor {show, speed, follow_camera}; "animate": false per call. Tests: pick to screen mapping; scenario with the cursor on (replies wait for the animation) matching the cursor-off result
bherbruckandClaude Opus 5.52026-10-09 18:21:47 +00:00