Commit Graph

  • 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.5 2026-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.5 2026-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.5 2026-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.5 2026-10-10 23:16:01 +02:00
  • 49438431f6 Merge main and preserve viewport regression tests fix/hover-navigation-flicker bherbruck 2026-10-10 17:48:57 -04:00
  • 6f16b31771 Fix viewport input leaking through dialogs bherbruck 2026-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_0x 2026-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_0x 2026-10-10 20:21:47 +02:00
  • acf4669f73 fix: select complete circular rims and curved surfaces in 3D bherbruck 2026-10-10 17:13:36 -04:00
  • 389ab74717 Fix hover highlight flicker during viewport navigation bherbruck 2026-10-10 17:12:18 -04:00
  • e042a7b555 ci: cache native Linux test compilation with sccache (#93) bherbruck 2026-10-10 17:07:18 -04:00
  • 96ee326424 ci: drop pages: write permission from Flatpak repository build job Dylan M. Taylor 2026-10-10 16:18:23 -04:00
  • d6cdec40da Fix modelling regressions and reconcile WIP UI work bherbruck 2026-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_0x 2026-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_0x 2026-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_0x 2026-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_0x 2026-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_0x 2026-10-10 19:19:46 +02:00
  • b1ec9fc1ce Release: drop the riscv64 Linux build bherbruckandClaude Opus 5.5 2026-10-10 17:09:56 +00: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_0x 2026-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_0x 2026-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_0x 2026-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.5 2026-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.5 2026-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.5 2026-10-10 16:54:54 +00:00
  • 5ec6d3562e Version 0.1.3 bherbruckandClaude Opus 5.5 2026-10-10 16:42:41 +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_0x 2026-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_0x 2026-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_0x 2026-10-10 17:10:04 +02:00
  • b8bd43f797 chore: bump GitHub Actions to fix Node 20 deprecation warnings Dylan M. TaylorandClaude Opus 5.5 2026-10-10 15:55:50 +00: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_0x 2026-10-10 16:25:41 +02:00
  • 448ea769eb CI builds tests and lints with a ci profile instead of --release bherbruckandClaude Opus 5.5 2026-10-10 15:06:58 +00: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_0x 2026-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.5 2026-10-10 21:06:34 +11:00
  • 52d2936f94 Linux: default to XWayland for file drag-and-drop on Wayland desktops Dylan M. Taylor 2026-10-10 09:02:59 -04:00
  • 365879c722 Merge pull request #72 from bherbruck/fix/riscv64-apt-sources bherbruck 2026-10-10 10:30:19 -04:00
  • ba0f683e89 ci: separate native tests and lint, make cross checks opt-in bherbruck 2026-10-10 09:56:31 -04:00
  • e5ef451214 fix(ci): configure Ubuntu ports for RISC-V dependencies bherbruck 2026-10-10 09:33:08 -04:00
  • b314e3f175 fix(ci): configure Ubuntu ports for RISC-V dependencies bherbruck 2026-10-10 09:33:04 -04:00
  • cf1ab075ec Merge pull request #65 from N3MI-DG/fix/view-cube-edge-on-flares bherbruck 2026-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.5 2026-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.5 2026-10-09 23:00:50 +00:00
  • 8b60d77dad Scenario s40 (toolbar customisation survives a restart) runs now bherbruckandClaude Opus 5.5 2026-10-08 19:05:57 +00:00
  • 5f45f0789f Status bar: commands by their labels ("Fillet done", "Shell: offset must be …") instead of internal ids bherbruckandClaude Opus 5.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-10-09 22:45:53 +00:00
  • a5729f1f97 Constraint glyphs: one per constrained entity, beside it, readable bherbruckandClaude Opus 5.5 2026-10-10 03:27:41 +00:00
  • eac7306d59 Merge pull request #39 from dylanmtaylor/ci/flatpak-pages bherbruck 2026-10-09 22:19:56 -04:00
  • 183301bce9 Merge pull request #54 from dylanmtaylor/feat/riscv-build bherbruck 2026-10-09 21:18:54 -04:00
  • 721c8b96a4 Merge pull request #55 from bherbruck/ci/agent-managed-releases bherbruck 2026-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.5 2026-10-09 22:32:31 +00:00
  • 1c23620bd9 Merge pull request #56 from bherbruck/docs/readme-fusion-introduction bherbruck 2026-10-09 20:23:56 -04:00
  • 2dd540397d docs: highlight Fusion 360 comparison in README introduction bherbruck 2026-10-09 20:23:17 -04:00
  • 7044399da1 ci: add RISC-V Linux build Dylan M. Taylor 2026-10-09 20:06:04 -04:00
  • 7a98800699 ci: stage agent-managed releases from the release branch bherbruck 2026-10-09 20:18:13 -04:00
  • 88b4c5b883 fix: preserve behavior under new Clippy lints bherbruck 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-10-09 21:42:28 +00:00
  • 0e9ddef4d8 docs/robustness.md: the first tutorial's fixes and measuring speed bherbruckandClaude Opus 5.5 2026-10-08 20:22:19 +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.5 2026-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.5 2026-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.5 2026-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.5 2026-10-08 19:30:51 +00:00
  • ccde7a4837 Robustness runs and the kernel fixes they found bherbruckandClaude Opus 5.5 2026-10-08 18:39:55 +00:00
  • 5d69452db3 View cube: the axis triad is drawn behind the cube, so only its parts outside the cube show bherbruckandClaude Opus 5.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-10-09 21:31:16 +00:00
  • 06be3500f8 ci: publish Flatpak repository to Pages Dylan M. Taylor 2026-10-09 17:14:35 -04: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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-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.5 2026-10-09 18:21:47 +00:00