Commit Graph

  • 1c12fa83b0 Holes: a tapped hole takes the tap drill of its thread (major − pitch) when no diameter is given, and clearance: "M6" (fit close, normal or loose) gives the ISO 273 clearance diameter bherbruckandClaude Opus 5.5 2026-10-08 12:03:22 +00:00
  • a901dade04 Browser: joints use the shared context menu (Edit Joint, Drive Joint, Suppress, Delete, Rename) bherbruckandClaude Opus 5.5 2026-10-08 11:26:38 +00:00
  • 13070abc55 Document Settings: design units (document.units: mm, cm, m, in, ft; values keep their meaning) from the browser's Units row, display precision row; new designs take the preferred units; the Properties window shows lengths, areas and volumes in the design's units with the chosen precision bherbruckandClaude Opus 5.5 2026-10-08 11:13:47 +00:00
  • c99e7e41ec Preferences window (File › Preferences): theme, units of new designs, recovery copies every N minutes (to a Recovery folder beside the preferences), mouse presets (Fusion, SolidWorks, Inventor), reverse zoom, orbit around the point under the cursor, grid, perspective, visual style, display precision, anti-aliasing (on restart), sketch and selection options; all kept between runs; ui.prefs control method bherbruckandClaude Opus 5.5 2026-10-08 11:06:06 +00:00
  • bfa70f005b Help menu (? on the application bar): About SolveCraft (version, commit, build date, ATTRIBUTION.md, fonts, licences), Keyboard Shortcuts read only, Report an Issue copies diagnostics (version, OS, GPU); ui.help control method bherbruckandClaude Opus 5.5 2026-10-08 10:56:21 +00:00
  • 5096bf2442 Dialogs for contact sets, motion studies, exploded views and configurations; Drive scenario bherbruckandClaude Opus 5.5 2026-10-08 11:16:57 +00:00
  • 46f3ff713d Fillets of edges meeting at corners in any selection order: blends go one at a time in an order that works (a run along a planar loop waits for a selected edge meeting its inner corner, then bridges the arc it left), so three edges at a box corner give a sphere octant bherbruckandClaude Opus 5.5 2026-10-08 11:44:51 +00:00
  • 3d384c7de7 Retest: joints mate face to face and Drive Joints takes the keyboard (4c3a5d9): s07/s20 type the angle straight away and check B sits on A's top (z 10..20); harness bbox check measures bodies as placed bherbruckandClaude Opus 5.5 2026-10-08 11:18:09 +00:00
  • 6653db806e Joint dialog after the engine's mating default: the dialog's Flip is the command's flip (no double flip with 4c3a5d9); Appearance dialog on the new appearance model; AppearanceCommand takes a colour with any name (the dialog's palette names) bherbruckandClaude Opus 5.5 2026-10-08 11:11:30 +00:00
  • 2c383460e9 Joints mate by default (Fusion's convention): origin B's z is turned against origin A's, so two picked faces meet face to face and B sits on A instead of inside it; Flip now means don't mate. File format 4 inverts older joints' flip so they keep their placement; as-built joints and rigid groups stay where they are bherbruckandClaude Opus 5.5 2026-10-08 10:52:20 +00:00
  • d12c955220 ROADMAP: M5 status bherbruckandClaude Opus 5.5 2026-10-08 10:47:05 +00:00
  • e7a85b30f7 Persistent naming: joint origins on faces and circular ends, and face appearances, store the face's name and find it by name first (a joint whose face is gone reports it instead of attaching elsewhere) bherbruckandClaude Opus 5.5 2026-10-08 10:46:54 +00:00
  • e7aff4fef0 Persistent naming: shell, draft, offset-face and replace-face faces and hole placements store their faces' names (Feature.face_names) and are moved onto the named face before evaluating (a split face: the nearest piece, with a warning; a vanished face: the picked point, with a warning) bherbruckandClaude Opus 5.5 2026-10-08 10:43:55 +00:00
  • 99886594e7 Persistent naming: sketches on faces store the face's name and find it by name first (an upstream feature that adds a nearer parallel face no longer moves the sketch); a vanished face falls back to the old geometric search with a warning bherbruckandClaude Opus 5.5 2026-10-08 10:33:25 +00:00
  • 452ee5f9f9 Persistent naming, step 2: revolved faces named by the section curve they sweep and their angle caps, box faces by side (+x … -z), cylinders by top/bottom/side, and pattern and mirror copies after their sources through the instance transforms (<source>@F<pattern>.<instance>) bherbruckandClaude Opus 5.5 2026-10-08 10:31:05 +00:00
  • 72297047d5 Persistent naming, step 1 (plan/adr/0002): faces are named from their history (a face lying on an input face keeps its name; new faces by role: F<feature>:side:<sketch curve>, :start/:top/:bottom caps, :blend:<edge>, …; split pieces #k along their spread), edges by the faces they separate (pieces ~k); names worked out lazily per body and shared by its clones; fillets and chamfers store edge names and resolve by name first (a split edge takes the piece nearest the picked point with a warning, a vanished one falls back to the point with a warning); model.faces and model.edges report names; tests for resize, suppress, reorder, an upstream split and a removed sketch segment bherbruckandClaude Opus 5.5 2026-10-08 10:07:11 +00:00
  • 3efe347809 Appearance API for the dialog: faces as {body, point} too, library entries carry a category, appearance.list gives in_design (each look used, with its bodies, faces and components) bherbruckandClaude Opus 5.5 2026-10-08 09:42:08 +00:00
  • 99385b1e31 Fillets and chamfers keep their edges through upstream edits: each picked edge remembers its direction and its body's bounding box when picked (Feature.edge_refs, set by the commands and by timeline.edit); a reference point that is off every edge after an edit is carried to the same place in the body as it is now and kept when an edge running the same way is there (QA s06: a fillet on the right top edge follows the edge when the sketch widens); otherwise the nearest edge with a warning as before bherbruckandClaude Opus 5.5 2026-10-08 09:40:50 +00:00
  • 5b9749aad6 Fold on flange panels (the side toward the flange's own bend stays; flanges and folds on the moving part ride along) and through cut-outs whose edges run along or across the bend; slanted or curved edges across a bend still say not supported (they would need helical edges) bherbruckandClaude Opus 5.5 2026-10-08 09:36:23 +00:00
  • a01f191d25 Evaluation cache: every feature evaluation is kept by a key of its own inputs, the document context it reads and a digest of the model it starts from (bodies identified by the evaluation that made them, kept while passed through), shared with previews and scratch copies; setting a value back, undo, redo and repeated evaluations reuse results (a 20 × 20 patterned plate builds in 1.7 s instead of 7.5 s; undo/redo of a parameter edit 0 ms); cached and from-scratch evaluation compared in a test; numbers in docs/perf.md (solvecraft-cli bench-edit). Designs read now always get feature input names and occurrences filled in bherbruckandClaude Opus 5.5 2026-10-08 09:33:32 +00:00
  • b78cb886b8 Configurations: a configuration table of rows (parameter expressions and feature suppressions per row) that switch the design (config.activate: undoable, all or nothing), kept through parameter renames and feature deletes; FusionStartDesignConfigModeCmd, FusionShowDesignConfigPanelCmd (with whether the design still matches the active row), config.column, config.row bherbruckandClaude Opus 5.5 2026-10-08 08:51:32 +00:00
  • 10a67ef259 Contact Sets (EnableContactSetsCmd, EnableAllContactCmd, DisableAllContactCmd, ContactSetCmd, contact.edit/list/check): driving a joint stops where bodies of one set would pass through each other (bisection to the touch; penetration found by ray parity and depth on the tessellations); Motion Study (FusionMotionStudyCommand: joint values keyed along a timeline, motion.play, motion.export of occurrence poses per step as JSON or CSV without changing the design, contact-aware); Exploded views (explode.create automatic or by hand, explode.show without changing placements) bherbruckandClaude Opus 5.5 2026-10-08 08:48:31 +00:00
  • a283e424d9 Appearances on faces, bodies and components (face > body > component > material > imported colour), with names and opacity and a built-in library of 20 (metals, ABS colours, glass, rubber, wood, paint); AppearanceCommand takes bodies, faces (points) or components, a library name or a colour with opacity, or nothing to clear; appearance.library, appearance.list (a body's resolved look and per-face colours); file format 3 turns the old body colour map into body appearances bherbruckandClaude Opus 5.5 2026-10-08 08:44:17 +00:00
  • f413a86d3d Design file format 2 with a migration chain (doc::format: older formats upgraded step by step, newer refused with a message, out-of-range numbers and broken occurrence placements refused); a corpus of designs saved by the M0, components-era, joints-era and current builds that must open and evaluate as saved (two pre-versioning behaviour changes listed with their reasons); damaged and hostile variants of every corpus file never panic bherbruckandClaude Opus 5.5 2026-10-08 08:10:30 +00:00
  • f50d743c55 docs/oracle.md: 73/76 (35 passes; 50 area exempt) bherbruckandClaude Opus 5.5 2026-10-08 08:10:06 +00:00
  • 9f8915996d Sheet metal Fold (SheetMetalFoldCmd): fold the base panel along a sketch line (followed when the sketch changes) or two points on its face; angle, bend radius and K-factor from the rule; the bend zone (BA = θ(R + K·T)) comes out of the existing sheet so the flat pattern keeps its size; the line at the bend's centre, start, end or on the mould line; the side holding a picked point stays (default the larger), flip folds down; flanges on the moving part ride along bherbruckandClaude Opus 5.5 2026-10-08 07:58:38 +00:00
  • 4ae4b45d91 Oracle: a seam between two closed curves on a face of unknown surface is found by topology (its ends each meet only a closed curve) and a closed curve never joins an open edge (35 passes); vertex keys at 1e-6 mm; part 50's area not compared (Fusion's horn torus area is three times the Pappus value), volume and topology still are bherbruckandClaude Opus 5.5 2026-10-08 07:58:38 +00:00
  • bdb27a1e93 safe_write: no unused import on wasm bherbruckandClaude Opus 5.5 2026-10-08 07:22:56 +00:00
  • f40356a74f Never lose work: atomic saves (temporary file, flush, rename) keeping the replaced version as <file>.bak; autosave of unsaved changes into a recovery folder (every 5 min, preference autosave_minutes, and after commands over 1.5 s; skipped when unchanged; entries locked while their app runs); Recover unsaved design? at launch; doc.recovery_list / doc.recover / doc.recovery_discard; kill-mid-save test bherbruckandClaude Opus 5.5 2026-10-08 06:22:08 +00:00
  • 01b349842c Fillets and chamfers on runs of neighbouring edges along a planar face's loop (two or three top edges of a box): the blends meet in mitres at the sharp corners between them and end square where unblended edges go on (those edges and the walls' seams stop at the blend) bherbruckandClaude Opus 5.5 2026-10-08 11:08:17 +00:00
  • bee763959c Patterns of features: Object Type (Bodies / Features) in the rectangular, circular and path pattern dialogs; features are picked in the timeline (or pre-selected there), so a hole can be patterned with a live preview; Edit Feature shows a pattern of holes as features bherbruckandClaude Opus 5.5 2026-10-08 10:57:22 +00:00
  • f4c39320ec One canvas panel: placing a canvas and Edit Canvas open the browser's canvas panel; the separate sketch-tool panel (which overlapped Calibrate) is gone bherbruckandClaude Opus 5.5 2026-10-08 10:54:11 +00:00
  • 20fbdb7351 Document tabs: past the room for 90 pt tabs a window of tabs around the active one shows and a » button lists every open design; + opens a new design on the start page bherbruckandClaude Opus 5.5 2026-10-08 10:46:53 +00:00
  • 2a54c83bf8 UI scenarios: named views (save the view from the browser, change it, restore it); targets written ahead of their features, ignored until they land: sheet metal Fold, configurations, motion study, autosave and recovery. Harness: note steps, named-view and camera checks bherbruckandClaude Opus 5.5 2026-10-08 10:55:46 +00:00
  • 829c4a2811 UI scenarios, batch 3: plastic enclosure (shell, boss, lip, snap fit), appearance then STEP and 3MF export with the colour, start page sample edited, saved and reopened, two design tabs with their own undo, the S toolbox and V visibility, 3D sketch lines snapped to the model then a pipe along them, canvas inserted and calibrated, section analysis with a joint driven. Harness: until (waits for background work), make_image, widget near a label, checks for files' text, start page, open designs, design name, hidden bodies, canvas width and section. Fixes: Enter in the S command search runs the first match (it read the focus after taking it back); Sketch Palette toggles are checkboxes with their labels (click the text to toggle); a dialog test no longer panics dropping unpainted textures bherbruckandClaude Opus 5.5 2026-10-08 10:46:29 +00:00
  • 4c3a5d9853 Joints mate face to face; Drive Joints takes the keyboard; Appearance on the engine's list bherbruckandClaude Opus 5.5 2026-10-08 10:39:15 +00:00
  • b2d611bafe Booleans about twice as fast: point-in-mesh tests through a per-direction grid (sampling checks), one mesh of the result for both its volume and membership checks, operand volumes from their meshes, and the intersection tried at the coarser tolerance first (oracle run 10 → 5 minutes); free-form faces merge in the topology counts when their normals agree within 2.5° bherbruckandClaude Opus 5.5 2026-10-08 10:27:50 +00:00
  • 940c425316 Accessibility Analysis: faces a tool coming along a direction reaches (facing it, nothing above: a depth map of the model seen from that direction, tested per pixel on the GPU) shade green, the rest red; the analyses (zebra, draft, curvature map, environment map, accessibility, minimum radius, isocurves, curvature comb, center of mass) also on SOLID INSPECT, and Interference on sketch INSPECT; path patterns follow 3D sketch curves through the same path chain as sweeps (path_segments_3d folded into path_points) bherbruckandClaude Opus 5.5 2026-10-08 10:09:35 +00:00
  • a7fc1fe532 S box: command search at the cursor (fuzzy over name, id, tab and panel; recent first; pinned favourites as a mini toolbar; kept between runs); Named Views in the browser (save the camera, restore animated, rename, update, delete; Top/Front/Right/Home listed; view.save/rename/delete/list, saved in the design); Keyboard Shortcuts (File menu): rebind any command, conflicts reported, clear, reset, kept between runs; ui.shortcut control method bherbruckandClaude Opus 5.5 2026-10-08 09:28:44 +00:00
  • d0a9ef27ca Appearance dialog (MODIFY > Appearance, A) bherbruckandClaude Opus 5.5 2026-10-08 09:55:58 +00:00
  • 187e9a97b9 UI scenarios, batch 2: edit an early sketch from the timeline, components with a revolute joint driven to 90°, sheet metal base and edge flange to flat pattern and DXF, STEP export, new design and STEP insert with a hole on the imported face, parameters table drives the model, sketch constraints workflow (dimensions, delete and undo, fix, construction), rectangular pattern. Harness: widgets found by their text through the accessibility tree, file pickers answered from the scenario's folder, model renders at shot steps (SOLVECRAFT_SCENARIO_SHOTS), query/file checks; ui.at takes a dimension. Fix: a click on a sketch point under a dimension line (a diameter through the centre) selects the point; only the dimension's text takes precedence bherbruckandClaude Opus 5.5 2026-10-08 09:47:21 +00:00
  • 717b181082 Booleans: a tool wholly inside the target leaves a void (an inner shell); results are oriented outward from a mesh fine enough for every face (a sphere clipping a box's corner came out inside out); as a last resort the tool is nudged by a micron-scale screw motion (tangencies, seams on the other body); a boolean survey test over random boxes, cylinders and spheres bherbruckandClaude Opus 5.5 2026-10-08 09:42:37 +00:00
  • 81c85b553c Booleans are deterministic: result faces keep their shell's order bherbruckandClaude Opus 5.5 2026-10-08 09:29:52 +00:00
  • a3d9eec238 Test: a pipe along 3D sketch curves ends square to the path (its end cap may reach past the end point) bherbruckandClaude Opus 5.5 2026-10-08 09:13:01 +00:00
  • 7a2b81fbf2 Environment Map Analysis: the model's faces as a mirror reflecting a studio (sky, horizon band, floor with light streaks, two light panels); toggles like the other surface analyses bherbruckandClaude Opus 5.5 2026-10-08 08:31:32 +00:00
  • 4126ae5a75 Clippy: assign operators in the path sweep, isocurve grid and centre of mass bherbruckandClaude Opus 5.5 2026-10-08 08:29:56 +00:00
  • dea1f46266 Zebra, Draft and Curvature Map analyses (view state on the session, no undo step): the GPU shades the model's faces with reflected stripes, draft-angle bands to a pull direction (green, yellow within the angle, red) or a blue-green-red curvature map; the toolbar button toggles each bherbruckandClaude Opus 5.5 2026-10-08 08:01:12 +00:00
  • 319386760f Isocurve Analysis (FusionIsoCurveAnalysisCommand): a grid of isoparametric curves each way across picked faces (the face cut by evenly spaced planes of each family), drawn while the tool is active bherbruckandClaude Opus 5.5 2026-10-08 07:38:22 +00:00
  • 561df89b1d Minimum Radius Analysis (sketch curves exactly, edges, faces from the mesh normals; every face when nothing is picked) and Center of Mass (all bodies or picked ones, uniform density) in the sketch INSPECT panel, with markers and labels in the viewport and their own icons bherbruckandClaude Opus 5.5 2026-10-08 07:33:35 +00:00
  • b9bc75670c Exact profiles for splines of any degree (a degree-4…7 Bézier segment kind, Seg2::Bezier, extruded as B-spline edges) and for free-form curves cut by crossings (exact sub-curves whose ends are moved to the true crossing, found by Newton; polylines only where that fails) bherbruckandClaude Opus 5.5 2026-10-08 07:27:40 +00:00
  • f79b5c1045 Sweeps and pipes along 3D sketch curves (projected, intersection and included curves): a path that uses sketch wires is followed as one chain of points by a new kernel sweep_path (rotation-minimising frame; smooth B-spline walls per profile segment, or ruled walls mitred at sharp corners and for profiles with holes); 3D sketch curves can be picked as sweep paths bherbruckandClaude Opus 5.5 2026-10-08 07:16:52 +00:00
  • 3aacebdda4 Canvases in the 3D pass: textured quads depth-tested against the model (the model hides them, decals sit on their face), with the section cut applied; Canvas panel (opened after placing a canvas or by Edit Canvas in INSERT): opacity slider, width, angle, flip, visibility, delete bherbruckandClaude Opus 5.5 2026-10-08 06:31:20 +00:00
  • d5b8aa0375 User scenarios in the real UI, headless: scenario::Harness draws the app frame by frame into an egui context and drives it with control-channel input (toolbar starts, clicks on world/sketch/origin-plane/axis points, keys, typing, drags) and checks the model; tests/scenarios/*.json: box with fillets, shell and hole; revolve on XZ; sketch on a face and cut; mirror; delete and undo. Control: ui.at, ui.dialogInput. Fixes found by them: a shape started on an existing point (the origin, a corner) is tied to it; the Dimension tool's value is edited in place with the value selected, so typing replaces it bherbruckandClaude Opus 5.5 2026-10-08 09:07:52 +00:00
  • 62dbf60eb2 Fix OK lost while a joint animates; Browser Joints folder inside the root component bherbruckandClaude Opus 5.5 2026-10-08 08:56:25 +00:00
  • bdc15d2204 Start page and document tabs bherbruckandClaude Opus 5.5 2026-10-08 08:02:14 +00:00
  • c8da3b78f3 Browser: rows out of view take only their space (400 bodies: 1.95 ms to 0.72 ms per frame, docs/perf.md); V shows/hides what is selected (bodies, sketches, planes and axes, components, canvases), Show/Hide with V in every menu that has it bherbruckandClaude Opus 5.5 2026-10-08 08:37:33 +00:00
  • 8ea38bc518 STEP export: undo face merging for a body when the merged faces do not read back cleanly bherbruckandClaude Opus 5.5 2026-10-08 08:31:54 +00:00
  • 2ac226cf0a Line tool inference like Fusion: parallel or perpendicular to existing lines, on a line's extension and tangent to circles and arcs, shown with a dashed guide and the snap label; placing the point adds the constraint (the existing curve stays, the new line follows) bherbruckandClaude Opus 5.5 2026-10-08 08:39:08 +00:00
  • d40ef5bbdc 3D sketch: with 3D Sketch on, the Line, Spline and Point tools take points off the sketch plane, snapping to model vertices, edges and faces and to drawn 3D points (segments that stay on the plane are ordinary sketch lines); drawn 3D curves are wires with fit points (sketch.line3d, sketch.spline3d: centripetal Catmull-Rom, sketch.point3d), a clicked 3D point gets a move triad (drag along X/Y/Z or parallel to the sketch plane: sketch.move3d, joined ends move together), Delete removes it; sweep and pipe paths may mix 3D curves with sketch curves; control: ui.triad, ui.worldToScreen bherbruckandClaude Opus 5.5 2026-10-08 08:32:08 +00:00
  • d2068e07a3 Selection inside sketches: double-click a curve selects the chain joined to it end to end (sketch.chain; shared or coincident ends), dimensions and constraint glyphs are selectable like other entities (Sel::SketchConstraint: Ctrl/Shift toggle, window and crossing boxes take them, Delete removes them with the rest), boxes leave out the origin, and the selection filter has sketch curves, points, dimensions and constraints bherbruckandClaude Opus 5.5 2026-10-08 08:16:31 +00:00
  • f7703ca720 Fillets and chamfers along open chains of curved edges that end at planar faces square to them (the round edge of a D-shaped block): the end faces take the blend's end arcs and their edges stop at the contacts; the curved blend is tried only for curved edges or edges between curved faces, and refuses a blend larger than its neighbouring faces bherbruckandClaude Opus 5.5 2026-10-08 08:10:06 +00:00
  • ae4570ed39 Colours in exports from materials and appearances; Appearance command bherbruckandClaude Opus 5.5 2026-10-08 07:57:20 +00:00
  • 578b35e88a Icons: use the existing canvas icon bherbruckandClaude Opus 5.5 2026-10-08 07:29:57 +00:00
  • 0feb6a7d70 Context menus follow Fusion's items and order (face, edge, empty space, sketch entities; browser body, sketch, component, Bodies/Sketches folders, Origin): Edit Feature, Edit Profile Sketch, Shell, Physical Material, Save As Mesh, Remove, Export DXF, Look At, Pan/Zoom/Orbit, Show All/Unisolate, Show/Hide Planes and Axes; our extras after them bherbruckandClaude Opus 5.5 2026-10-08 07:09:45 +00:00
  • 0f4a0e7053 Browser: Canvases folder (show/hide, Edit Canvas, Calibrate, Rename, Delete; a picked canvas goes with the Delete key) bherbruckandClaude Opus 5.5 2026-10-08 06:58:47 +00:00
  • f6b42f8750 Sketch drag feel like Fusion (sketch.drag): the grabbed point goes exactly to the cursor, a line (spline, conic) slides with it, a circle or arc grabbed on its edge changes radius about its centre (an ellipse its minor radius), the centre moves the circle; the grabbed geometry is held while the rest moves as little as it can; fixed and fully constrained geometry stays. Dragging a curve of the sketch being edited now drags it (it used to start a box selection). Tests for per-entity fully-constrained feedback bherbruckandClaude Opus 5.5 2026-10-08 07:37:38 +00:00
  • bbd0a19260 Sketch Palette, docked at the right while sketching: line type of the selected curves (normal, construction, centerline), Look At, and options kept with each sketch (sketch.options: Sketch Grid, Snap, Slice, Show Profile, Show Points, Show Dimensions, Show Constraints, Show Projected Geometries, 3D Sketch), the degrees of freedom, Finish Sketch. Slice cuts the model at the sketch plane; Snap off places points at the cursor bherbruckandClaude Opus 5.5 2026-10-08 07:03:08 +00:00
  • 2608ae6761 Revolve a planar body face (face: point) like Extrude does, its edges projected (linked) into a sketch on it bherbruckandClaude Opus 5.5 2026-10-08 07:20:38 +00:00
  • 2ec34c6e78 Sketches on body faces follow their face: the plane is a face reference found again on each evaluation (same normal, nearest the picked point), and face extrudes (Extrude on a face, Press Pull) use the linked projection of the face's edges instead of a frozen copy, so they follow when earlier features change bherbruckandClaude Opus 5.5 2026-10-08 07:13:38 +00:00
  • 2db9e66048 STEP orientation check: judge only revolution faces, no drifting parameter hint bherbruckandClaude Opus 5.5 2026-10-08 06:17:16 +00:00
  • 66fa6fe584 Dialogs for joints, sheet metal and plastic bherbruckandClaude Opus 5.5 2026-10-08 07:13:37 +00:00
  • ec1090837e Merged topology: a sphere's normals must be radial too (torus strips no longer pass for spheres), so torus pieces merge (40) bherbruckandClaude Opus 5.5 2026-10-08 06:51:34 +00:00
  • a7f301bde6 Delete for everything: selection.delete removes sketch entities, features and sketches (with their dependents), construction planes, bodies (Remove feature), occurrences and components, and canvases in one undo step, with a dry run; Delete/Backspace and every menu's Delete go through it and ask first, listing what goes with it and what would fail; faces say Delete Face is not available yet; ui.confirm control method bherbruckandClaude Opus 5.5 2026-10-08 06:22:29 +00:00
  • 7f9a8f2afd Two-entity constraints move only the second pick (tangent, parallel, perpendicular, equal, concentric, coincident, collinear, symmetric, midpoint): the constraint is applied with the first entity held (solve_holding), the second keeping its size where it can (lines turn and slide, circles translate), then resizing; if the second is fixed, projected or fully constrained the first moves instead, and if neither can the constraint is refused and nothing changes; later solves hold nothing. Context-menu constraints keep the selection order; a curve picked before a point puts the point on the curve bherbruckandClaude Opus 5.5 2026-10-08 05:40:42 +00:00
  • 3e7826fe56 Fillets and chamfers along closed chains of curved edges between any two smooth sides (a branch pipe meeting a main pipe): a ball rolled along the edge gives the contact curves and the blend (rational B-spline through exact arcs, smooth across the chain's joints); side faces trimmed to the contacts and seams shortened; merged topology joins free-form faces that meet smoothly by their exact normals bherbruckandClaude Opus 5.5 2026-10-08 06:31:05 +00:00
  • 4cba923bec Large-model viewport performance: bounding-box culling for face/edge/vertex picking, cached per-body boxes and model extent, picks reused while nothing changed and skipped while the view moves (400 bodies: hover 18.7 -> 1.9 ms, orbit 21 -> 2.6 ms; docs/perf.md) bherbruckandClaude Opus 5.5 2026-10-08 06:17:49 +00:00
  • 04726747f2 Toolbar icons for the sketch commands that had the placeholder square (38 icons: project/include/intersect family, spun/iso/section curves, mid line, tangent arc, 2/3-tangent circles, arc slots, ellipse, splines, conic, text, constrainer, mirror/patterns, fillet/chamfer, offset, trim, extend, break, scale, blend, curvature and polygon constraints, AutoConstrain, curvature comb, DXF/SVG, canvas, decal), drawn in code in the sketch line style bherbruckandClaude Opus 5.5 2026-10-08 06:05:34 +00:00
  • b4c7177589 STEP test hostile_boundaries_mesh_in_bounded_time: 12x12 patch, as agreed with solvecraft-step (still a 180 s hang bound) bherbruckandClaude Opus 5.5 2026-10-08 05:47:45 +00:00
  • 584cb7e8a0 Browser: Show Dimensions for finished sketches bherbruckandClaude Opus 5.5 2026-10-08 04:32:27 +00:00
  • 5539de8fd4 Booleans: a face crossed by nested intersection loops (both walls of a tube) gives each hole to the innermost piece holding it (vendored shapeops; tubes and tori cut across now work); revolved full circles start at an odd angle so their seams don't lie in common cut planes bherbruckandClaude Opus 5.5 2026-10-08 05:31:47 +00:00
  • 89c2c440ac Dialog parity with Fusion: header with fold glyph, label column, Select/N selected chips, info glyph and OK greyed until valid, Fusion colours; Extrude rows Start (profile plane/offset), Direction (one side, two sides, symmetric), Extent Type (distance/all), Taper Angle; Hole rows Placement (single/multiple sketch points), Extents, Hole Tap Type (tapped size), Drill Point, Tip Angle; pattern Type switch; Mirror operation; pre-selection routes every item to the input that takes it (planar-only inputs, fillet tangent chains), with tests bherbruckandClaude Opus 5.5 2026-10-08 05:33:13 +00:00
  • a8d54e0a3f docs/oracle.md: no-oracle section bherbruckandClaude Opus 5.5 2026-10-08 05:42:37 +00:00
  • 66df249c0f Plastic: Rest (round or rectangular pad, solid or hollow wall, draft) and Plastic Rules (the six-rule library, design rules from expressions using Thickness, active rule, rules assigned to bodies; a body's rule gives Boss and Rest their draft and grooves their clearance), plastic.rules; docs/oracle.md lists the plastic features as no oracle (licence) with the analytic tests that cover them bherbruckandClaude Opus 5.5 2026-10-08 05:30:48 +00:00
  • 1db841aa76 Insert DXF: block references expanded (INSERT with scale, rotation, column/row arrays, nested blocks with a depth cap; non-uniform scale turns circles into ellipses), paper-space entities skipped; DXF/SVG insert joins ends within a tolerance (default 0.0001 mm, tolerance param) so nearly-closed drawings make profiles bherbruckandClaude Opus 5.5 2026-10-08 05:46:31 +00:00
  • 7757e6d9c7 Construction toggle on every curve type: the selection switches as a whole (slots, polygons; to construction unless all already are), projected curves too; construction curves are drawn dashed and centerlines dash-dot; profiles update at once bherbruckandClaude Opus 5.5 2026-10-08 05:21:14 +00:00
  • 00ddaa25f5 Canvas and Decal (FusionAddCanvasCommand, FusionAddEditDecalCommand): PNG/JPEG reference images stored in the design (base64), placed on an origin/construction plane, a sketch plane or a planar face; canvas.edit (position, width, angle, opacity, flip, visibility), canvas.calibrate (scale by a known distance), canvas.delete; drawn textured in the viewport; toolbar tools pick the file, then the plane or face bherbruckandClaude Opus 5.5 2026-10-08 05:31:04 +00:00
  • bc21959777 Oracle seams: fmt bherbruckandClaude Opus 5.5 2026-10-08 05:15:53 +00:00
  • 20aa3ed4e1 Oracle: seam-normalised topology. When body count, volume and area pass but the raw counts differ, Fusion's faces/edges/vertices are normalised from its face, edge and vertex lists as SolveCraft's merged counts are (closed-surface patches split by seams count once, seam edges dropped, two-edge vertices joined) and compared exactly, with both raw counts in the note (56 and 61 pass) bherbruckandClaude Opus 5.5 2026-10-08 05:15:25 +00:00
  • 5b8816aa7d Fix/Unfix on every sketch entity: points (Fix constraint) and lines, arcs, circles, ellipses, splines and conics (fixed curves hold their points and radius); ConstraintFix takes entities (fixes them all unless all are fixed); the toolbar button and the context menu act on the whole selection; fixed points never move when dragged or solved; projected geometry counts as fixed; fixed geometry is drawn green; sketch.inspect reports fixed bherbruckandClaude Opus 5.5 2026-10-08 04:58:30 +00:00
  • b457b6b7b6 Sketch: lines snap to horizontal/vertical near the axes (with an H/V marker; the constraint is inferred), inline dimension boxes sit beside what they measure instead of on it; Esc acts once per press (ends the line chain first, then the tool) bherbruckandClaude Opus 5.5 2026-10-08 02:46:32 +00:00
  • d44a104dcc STEP test hostile_boundaries_mesh_in_bounded_time: smaller wild patch (16x16) and a 180 s bound, so it catches hangs without failing on a loaded machine (11 s now, was ~50 s against a 60 s bound) bherbruckandClaude Opus 5.5 2026-10-08 05:05:34 +00:00
  • f9b7604ed1 Large sketches: the solver works on each component's own Jacobian (block-diagonal DOF analysis, no dense whole-sketch matrices), component grouping by map, and profile finding uses its grid for end checks and keyed sorting. A 10 000-entity sketch solves in 65 ms instead of 1.3 s and commands on it take ~0.2 s instead of 5 s; numbers in docs/perf.md bherbruckandClaude Opus 5.5 2026-10-08 04:56:06 +00:00
  • 69353faf75 Kernel: clippy bherbruckandClaude Opus 5.5 2026-10-08 04:44:01 +00:00
  • fc7cb5d60d Booleans: prisms along one direction combined exactly in 2D (overlapping holes in plates; equal sections stacked end to end), bodies touching along one whole face stitched (a part joined with its mirror image), pushing coincident faces works with any plane-and-cylinder neighbours bherbruckandClaude Opus 5.5 2026-10-08 04:42:43 +00:00
  • 187ffd0a03 Sketch dimensions drawn as dimensions: extension lines, dimension lines and arcs with arrowheads (flipped outside when tight), the value centred on the line (fx: for expressions), R/Ø leaders, angle arcs, arc-length mark, driven ones in parentheses in a muted colour; click selects, Delete removes, drag moves the text (sketch.dimension_text, kept relative to the dimension), double-click edits the value in place with parameter completion bherbruckandClaude Opus 5.5 2026-10-08 04:19:30 +00:00
  • 4adfd69d6a Plastic: Boss (draft, root fillet, hole, ribs), Lip and Groove along a shelled body's rim (inside or outside edge, groove clearance), Snap Fit (cantilever arm with a catch) bherbruckandClaude Opus 5.5 2026-10-08 04:36:18 +00:00
  • 4c64ceed5c Curvature Comb Analysis (FusionCurvatureCombAnalysisCommand): combs on sketch curves (exact, from their Bézier/conic pieces) and model edges, with minimum radius; interactive tool draws teeth and envelope; ignored large-sketch timing test (sketch_perf) bherbruckandClaude Opus 5.5 2026-10-08 04:40:33 +00:00
  • 7382ebd6e8 STEP export: Fusion round-trip fixes (sense, analytic surfaces, horn torus) bherbruckandClaude Opus 5.5 2026-10-08 03:09:43 +00:00
  • 178fc47ed7 Custom title bar: on Windows and Linux the application bar is the window's title bar (drag to move with OS snapping, double-click to maximize or restore, minimize/maximize/close buttons, resize from the edges and corners); macOS keeps its traffic lights over the bar; the web build has no window buttons; ui.window control method (adapted from VectorCraft) bherbruckandClaude Opus 5.5 2026-10-08 03:54:15 +00:00
  • e5560e8035 Sheet metal: rules as expressions (Thickness, K-factor, bend radius, reliefs, gaps; may use parameters), sheet bodies kept as flat patterns and sewn folded from exact faces (new kernel::sew), Flange (base, edge with height to the outer face, angle, inside/outside/middle, several edges at once with corners closed to the rule gap, contour from an open chain), Hem, Unfold/Refold with cut-outs that follow the bends, Convert to Sheet Metal, flat pattern with bend lines and bend table, DXF export; recipes: sm_flange, sm_hem, unfold/refold, rule edits (oracle 67-76 all pass) bherbruckandClaude Opus 5.5 2026-10-08 03:50:06 +00:00