CypherNaugh_0x
adb1e5fec5
timeline.inspect returns a feature's definition in the shape timeline.edit's set takes, so agents no longer guess field names: timeline.edit had no documented format ({"extent": {"distance": …}} worked, but only by trying). The new read-only command (feature: id or name) returns type, definition (the editable fields and their current values; bookkeeping and large payloads such as sketch geometry and imported STEP text are left out and listed under omitted), inputs (label, parameter name, expression, unit) and the feature's error and warning. timeline.edit's params doc points to it, and the book's Solid features chapter documents the edit format with the fields of the common features. Tests: inspect, edit by the field names it shows, inspect again (extrude, fillet, sketch); no undo step; hostile feature arguments are refused
2026-10-11 12:23:30 +02:00
CypherNaugh_0x
3573b96c7a
fix: shell bodies where four or more planar faces meet at a corner (a floor falling to a drain from the trough edges) by splitting such corners into several joined by short edges instead of refusing because the moved planes miss a common point
2026-10-11 12:23:23 +02:00
CypherNaugh_0x
c67ad22129
A sketch fillet keeps the dimensions of the corner it rounds: filleting the corner of a spout (a vertical riser and a horizontal top, the top's length dimensioned to the corner and the corner's height from the origin) dropped the height dimension with the corner point and left the length on the shortened straight part, so the top came out a fillet radius too long. Like Fusion, a corner that dimensions or constraints measure to now stays as a virtual sharp corner, a free point held on both curves' extensions (two point-on-curve constraints), with those dimensions kept and a line length to the corner turned into a distance from the line's far end to it; chamfers do the same. sketch.fillet and the chamfers report virtual_corners and moved_to_virtual_corner, and the viewport draws a virtual corner as an open square with dashed extension lines from the curves. Tests: the spout keeps its 80 x 100 size and both dimensions still drive it, the virtual corner survives save/load and undo/redo, a fillet with nothing on its corner leaves no point behind, and nearly straight or folded corners with dimensions never panic
2026-10-11 12:23:22 +02:00
CypherNaugh_0x
2406957039
A loft gives the same body whatever the order of its sections: the ruled side faces were parameterised from the first section to the last, and a loft cut that touches the body along an edge (a fall lofted from a shelled basin's whole outline down to a drain pad) worked for one order and failed for the other, with an Option::unwrap() panic inside the kernel's intersection or "shell not oriented and closed" from the planar fallback. The loft now builds its sections in one canonical order (first-to-last step with a positive largest component), so either order gives the same, working body. Tests: the basin fall cut, joined and as a new body in both orders and with the pad in every corner (engine), and the kernel loft's volume and cut in both orders, including large-below and planes facing down
2026-10-11 12:23:22 +02:00
bherbruck
a6bb8fc924
feat: stabilize face attachments and closed spline workflows
2026-10-11 05:32:46 -04:00
CypherNaugh_0x
5073f5dd72
A failed boolean no longer blames "coincident faces on curved bodies" whatever the cause: the exact polygon fallback runs after any failed B-rep boolean (faces that touch, or cross at a shallow angle) and takes planar faces only, but its refusal named coincident faces and curved bodies regardless. It now says which operand is in the way and why: "the tool has 2 curved faces (cylinder)" (kinds: cylinder, cone, sphere, torus, freeform), a face that could not be meshed, a planar face whose mesh is not flat, or a mesh too detailed. Test: planar_fallback_names_the_curved_faces
2026-10-11 10:25:10 +02:00
CypherNaugh_0x
848e7aec0e
feat: pick sketch profiles by their bounding curve ids so features keep the same region when parameters move the geometry, matching curves cut into pieces, refusing ambiguous or missing picks instead of taking another region, and storing point picks by curves
2026-10-11 10:17:25 +02:00
GU Junhua
75e9472a47
modified: CONTRIBUTING.md
...
new file: flake.lock
new file: flake.nix
2026-10-11 16:07:46 +08:00
bherbruck
c1d819f235
feat: preserve body history and placed modelling workflows
...
Record ownership transfers in the timeline so earlier Join/Cut membership,
world placement, machining data and styles survive component moves, edits,
independent copying, undo and reopening. Preserve pending positions in history
snapshots and keep constructor transfers ordered during feature redefinition.
Retain shallow sheet pockets and exact planar intersection islands through
unfold/refold, with depth-aware flat previews and DXF export. Store explicit
3D wire coordinate spaces and migrate known legacy provenance without moving
saved points or analytic fits.
Infer unique eligible cylindrical Emboss targets, align Revolve manipulators
with actual extent geometry, and discard obsolete preview errors after input
correction. Certify constructed and immutable imported face styles using exact
source metadata while preserving legacy face names. Upgrade designs to format10
with bounded validation and geometry-preserving legacy migration.
2026-10-11 03:59:12 -04:00
bherbruck
0398a813c8
feat: strengthen sketches, feature editing, and independent assemblies
2026-10-11 02:44:31 -04:00
bherbruck
07932d0f42
feat: preserve modeling intent across sketches, assemblies, and fabrication
...
Persist typed sketch dimensions and bounded ordered configuration rules in format 8. Use exact occurrence paths and source identity for editing, movement, appearance, and mass. Preserve sheet material regions through cutting, folding, and exact DXF export; retain nested cavities and material islands.
Validation: cargo xtask ci passed, including 368 engine tests, 178 UI tests, 68 UI scenarios, 136 kernel tests, and the 10-crate wasm check. Actual preview workflows and legacy format-7 origin-corner reopening were inspected.
2026-10-11 01:28:01 -04:00
bherbruck
d71bdb78ec
feat: strengthen modeling, configuration, and assembly workflows
...
Preserve linked sketch identities through deterministic face projection and resizing. Fix origin-corner picking, persistent inline navigation, appearance editing, configuration styles, component properties, contact sweeps, sheet exports, analytic STEP offsets, and bounded rolling-ball fit accuracy.
Validated with full cargo xtask ci, native workflow screenshots, repeated enclosure replays, and analytic geometry regressions.
2026-10-11 00:37:26 -04:00
Mithril-3d
3afd6ae447
feat: add multi-language (i18n) support with Japanese UI
2026-10-11 12:52:39 +09:00
CypherNaugh_0x
8c1b1478ce
Joins and cuts of round pads, bosses and holes across a floor that falls a degree or two no longer fail: the B-rep results were right, but the plausibility check meshed them without refinement, and where the shallow cut trims a round side to a thin band the plain mesh spans it with triangles cutting through the cylinder, so the check saw missing material (0.8 to 1.6 % of samples misclassified), rejected the result, and the planar fallback then refused the round tool. The check now meshes the operands and the result with refinement on curved faces (as measure does). Test: round_pads_crossing_a_shallow_fall (a 1° fall and a 2° four-face fall toward a drain)
2026-10-11 05:33:50 +02:00
bherbruck
22672585c9
fix: join connected solids at exact edge contacts
2026-10-10 23:11:02 -04:00
bherbruck
fc8b71956c
fix: reject planar joins that displace original faces
2026-10-10 22:53:44 -04:00
bherbruck
74fed469dc
fix: deploy docs web and Flatpak through one Pages workflow
v0.1.6
2026-10-10 21:59:18 -04:00
bherbruck
efa6706226
Release SolveCraft 0.1.6
2026-10-10 21:43:21 -04:00
bherbruck
c1b6478ab5
fix: join additive extrusions and merge coplanar faces
2026-10-10 21:31:19 -04:00
bherbruck
17e8e3eff2
Merge pull request #109 from CypherNaught-0x/fix/timeline-modifier-highlighting
...
Highlight fillets and other modifier faces from the timeline
2026-10-10 20:56:59 -04:00
bherbruck
4b7e1d317d
fix: load designs off-thread and cache recent thumbnails as PNGs
2026-10-10 20:55:14 -04:00
bherbruck
b375c2a92a
Merge pull request #108 from CypherNaught-0x/fix/basin-rim-blends
...
Fix fillets and chamfers around sloped pocket rims
2026-10-10 20:05:45 -04:00
CypherNaugh_0x
5275911b44
Highlight modifier faces from timeline hover and selection
2026-10-11 01:59:02 +02:00
95ae096265
Restore minimal view-cube turns and drag-to-orbit
...
Recover N3MI-DG's TOP/BOTTOM heading and drag-to-orbit contributions
from PR #101 , adapted to the existing 14-target cube. Add Y-up/Z-up
regressions, navigation ownership and dialog blocking coverage.
Original heading commit: c28e780f52
Original orbit commit: f30b30be6e
Source: https://github.com/bherbruck/solvecraft/pull/101
Co-authored-by: N3MI-DG <david1985gray@gmail.com >
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 19:50:31 -04:00
CypherNaugh_0x
5835bb10d4
Join chamfers across unequal sloped rim walls
2026-10-11 01:37:06 +02:00
CypherNaugh_0x
db4f885bac
Support fillets around sloped pocket rims
2026-10-11 01:37:06 +02:00
bherbruck
683d45c28d
Release SolveCraft 0.1.5
v0.1.5
2026-10-10 19:34:26 -04:00
bherbruck
13dd4566ce
Merge pull request #102 from CypherNaught-0x/fix/chamfer-sloped-rims
...
Fix chamfers on sloped end faces and enforce rim clearance
2026-10-10 19:28:48 -04:00
lillith
7c667eda53
test: verify constrained line geometry after preselection and redo
2026-10-11 01:24:42 +02:00
CypherNaugh_0x
e575bded0e
Fix construction-plane references in mirror, section, and sketches ( #99 )
...
Accept construction planes by name or feature ID, preserve parametric mirror references, and reject invalid plane inputs. Retain both mirror-plane and primitive-point regression test modules after resolving the conflict with main.
Validation: cargo xtask ci passed, including 282 engine tests, 138 UI tests, 62 UI scenarios, and WebAssembly.
2026-10-10 19:20:51 -04:00
bherbruck
1a1838c114
Merge pull request #106 from N3MI-DG/view_cube_label_size
...
View cube: larger face labels
2026-10-10 19:15:10 -04:00
lillith
5cc65fe46b
fix: apply curve-pair constraints to sketch preselection
2026-10-11 01:09:02 +02:00
N3MI-DG and Claude Opus 5.5
ff1453f868
View cube face labels are larger: one font size for all six, the widest (BOTTOM) spanning 90% of its face, instead of a fixed 9.5 px that left the names small on the cube. Tests: BOTTOM spans 90% of the face seen straight on, and every label stays within its face from any direction
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-11 10:06:05 +11:00
bherbruck
e3ee1b359e
Fix cubic input-name repair when loading large designs
2026-10-10 19:04:19 -04:00
lillith
2683b8dfed
fix: allow horizontal and vertical alignment of sketch points
2026-10-11 00:58:49 +02:00
CypherNaugh_0x
15bb64c2ab
Reject chamfer extensions beyond trimmed rim faces
2026-10-11 00:50:20 +02:00
bherbruck
feaed2e3f6
Merge pull request #97 from CypherNaught-0x/fix/dimension-measured-after-solve
...
sketch.dimension reports the measured value after solving
2026-10-10 18:49:25 -04:00
lillith
347230f5d3
fix: validate fuzz seed ranges without overflow
2026-10-11 00:41:49 +02:00
CypherNaugh_0x and Claude Haiku 5.5
f33efa2b6e
The timeline scrolls sideways when its features don't fit the window: with more features than the window is wide, the features past the right edge were clipped and could not be reached
...
Cause: the feature buttons are placed by absolute x coordinates and take no layout space, so nothing in the panel could scroll. The playback controls and the feature strip shared one row with no scroll area.
Fix: the feature strip (after the playback controls) is a horizontal ScrollArea. The content width is allocated from the drawn features and joints so the scroll range matches them. Clicks, drags, the history marker, and context menus work inside the scrolled strip; the playback controls stay fixed.
Tests: cargo xtask ci passes. Checked by hand in the app with a long feature list. Not covered: auto-scroll while dragging a feature or the marker past the visible edge.
Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com >
2026-10-10 18:37:48 -04:00
CypherNaugh_0x
c61b77613a
solid.cylinder, box, sphere, torus and coil place by expressions: base, corner and center take numbers or length expressions per coordinate ("basin_width/2", "10 mm") and follow parameter changes, renames and component frames; before, a point that was not three plain numbers (or an unreadable axis) was silently replaced by the origin (or Z). The features now store the point as expressions (plain numbers still saved as numbers, so existing designs read and write the same) and evaluate it on every recompute; an unreadable or out-of-range point or axis is refused with an error. Tests: primitive points take expressions, follow parameters, renames and a moved component, and bad points are refused
2026-10-10 18:37:22 -04:00
lillith
6b46915507
docs: align testing guide with the CI profile
2026-10-11 00:32:48 +02:00
CypherNaugh_0x
9c6f9410d2
Fix equal-distance chamfers on sloped end faces
2026-10-11 00:30:28 +02:00
bherbruck
31dadcee63
Add nightly prereleases at midnight Eastern, skipping unchanged commits
2026-10-10 18:26:06 -04:00
bherbruck
4ac803ab52
Release SolveCraft 0.1.4
v0.1.4
2026-10-10 18:21:13 -04:00
bherbruck
63fd838f55
Fix hover highlight flicker during viewport navigation
...
Resolve hover before rendering and suppress it throughout navigation gestures and animated views. Closes #92 .
2026-10-10 18:14:53 -04:00
CypherNaugh_0x
ade30e9c4e
Merge origin/main (with #86 ): sketch.dimension reports the solved value in the dimension's unit; the spout test expects the solved 30 and 60 degrees
2026-10-11 00:13:51 +02:00
CypherNaugh_0x
9c09e82cff
sketch.dimension reports measured on the solved sketch: it reported the value the geometry had before the new dimension was solved, so dimensioning a 99.84 mm trough line to 100 answered measured: 99.84 and looked like the dimension had not taken. The command now measures the new dimension again once the sketch is solved (driven dimensions too), through a new solvecraft_sketch::measure_dimension that shares the solver's own measuring. Tests: lengths, a driven distance and a diameter report their solved values
2026-10-11 00:01:19 +02:00
bherbruck
71a4f3061b
Fix document and toolbar tab styling
2026-10-10 18:00:37 -04:00
CypherNaugh_0x and Claude Opus 5.5
1227fab860
Extrude's start_offset says which way it goes: along the sketch normal, also with direction: negative (where a positive offset starts on the far side of the sketch from the extrusion)
...
The params doc listed start_offset? with no description, and an extrude in direction negative with a positive start offset surprised a user. The behaviour is unchanged (an offset start plane, as in Fusion); the params doc of solid.extrude and the Extent field doc say so.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 17:57:34 -04:00
CypherNaugh_0x and Claude Opus 5.5
9a2a3cef8b
A sweep along a path with sharp corners follows the corners: sweeping a rim profile along three lines (an open rectangle) gave a body of volume -0.0006 mm3 with its centre of mass at x = -3.5e9, and no error
...
kernel::sweep swept segment by segment: a line translates the profile along it, an arc turns it. At a sharp corner the next line runs within the plane the profile has reached, so the profile slid sideways in its own plane and the walls folded into an inside-out, zero-volume shell. Paths whose direction changes at a joint (more than 1e-3 rad) are now swept as a polyline by sweep_path, which mitres the corners; arcs become points within 0.01 mm. Smooth paths (lines and tangent arcs) are swept as before. Pipe uses the same path.
Tests: sweep_round_a_sharp_corner_is_mitred sweeps a 2 x 2 square along an L of two 10 mm lines and checks the volume, 80 mm3 (fails on main).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-10 17:57:34 -04:00