Sketch on cut walls, chamfers, pattern copies, join-merged sides and split faces (#625)

A flat face that no construction certificate names on its own now attaches by its exact history name (a new lineage face certificate): cut walls and floors, chamfer faces, each pattern or mirror copy, side walls a Join merged, and the pieces a later feature split a face into. Construction certificates still come first; a seed keeps its certificate when it is patterned. Two flush extrudes of one outline joined end to end keep their exact history in the prism boolean. Face sketch 52% -> 71%, offset plane 52% -> 71%, press-pull/extrude from face 41% -> 60% in the action matrix; baseline blessed.

Fixes #491, fixes #492, fixes #493, fixes #557.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
bherbruckandClaude Opus 5.5 authored and GitHub committed 2026-10-13 05:26:29 -04:00
1 parent 27f20f97cb
commit 6d5df4b9b3
18 files changed
+786 -381

No files matched your search

+7 -7
View File
@@ -263,10 +263,10 @@ make a legacy face sketch there).
| 2 | | A helix edge projected along its axis is a point (expected) | `edge.project` 2 | 1 | oracle/50-sweep-tight-bend `Bend/F3:side:c1#1\|F3:side:c1#2~2` |
Where the face history stands (`crates/kernel/src/history.rs`, [face attachments](face-attachments.md)):
a face takes an attached sketch only when the body carries an exact source certificate for it.
Extrude caps and sides, boxes, shells' inner walls, STEP faces and sheet metal panels have one,
and booleans, fillets and shells pass untouched faces' sources through. Everything that makes or
reshapes faces without recording one (cut walls, holes, chamfers, revolves, lofts, sweeps, drafts,
tapers, splits, intersects, shell rims, pattern and mirror copies, sheet metal rims) leaves faces
that refuse a sketch, and press-pull and extrude-from-face then fall back to a legacy face sketch
that is found again by a point. Together they are the largest group of failures.
a flat face takes an attached sketch when the body carries an exact source certificate for it
(extrude caps and sides, boxes, shells' inner walls, STEP faces, sheet metal panels), or else
when its persistent name follows exact history (a `lineage` certificate): cut walls and floors,
chamfers, pattern and mirror copies, sides a Join merged, and pieces of a split face. What still
refuses a sketch is what makes faces without recording their history (revolves in some cases,
Offset Face, the plastic features, lofts, sweeps, drafts, tapers, shell rims, sheet metal rims):
press-pull and extrude-from-face then fall back to a legacy face sketch found again by a point.
+25 -7
View File
@@ -13,12 +13,28 @@ profile's cap. A profile drawn over a face sketch's projected boundary (a rectan
traced over the whole face, or a strip whose sides lie on the face's edges) is identified by
the drawn curves: where a drawn curve and a projected one cover the same edge, the drawn curve
is the source. Two drawn curves, or two projections, over one edge remain ambiguous. Curved surfaces cannot host a planar sketch through this workflow.
Edited surfaces without retained construction provenance, ambiguous sources, and unsupported
generators require an explicit fixed plane instead. A face that a Join merged from two features' coplanar
faces belongs to neither, so it also needs a fixed plane. The error says why, and the Create
Sketch dialog then offers **Use fixed plane**, which places the sketch on that face's current
plane without following later changes. A nearby or parallel face is never used
to repair a new attachment automatically.
Every other flat face is attached by its exact history name (a `lineage` certificate) when it
has one: the persistent name the kernel's face history gives it, which says what made the face
and follows it through every later feature. That covers a Cut's walls and floor
(`F5:side:l1`, `F5:top`), a chamfer face (`F7:blend:…`), each copy a pattern or mirror makes
(`F4:top@F6.2`: the seed's face and the copy's instance), a side wall a Join merged from two
features (named after the first, answering to the other), and the pieces a later feature split
a face into (all pieces of one name on one oriented plane are that face). A lineage face's
plane is its current exact plane, measured in a frame that depends on the plane alone: its
origin where the definition origin projects onto it, its x axis the first of the definition's
X, Y and Z axes not steep to it (`|cos| < 0.6`), projected. The construction certificates
above still come first; a lineage certificate is used where none names the face alone. Copies
carry their seed's construction certificate, so a sketch attached to the seed before it was
patterned keeps resolving to the seed: of the faces carrying one certificate, the producing
feature's own face is the one whose name is not a copy's.
Faces whose history is not exact (Offset Face, the plastic features, sheet metal rims, faces a
feature rebuilt without reporting its history), ambiguous sources, and the pieces of a face
split on purpose with Split Face (each piece is its own face) require an explicit fixed plane
instead. The error says why, and the Create Sketch dialog then offers **Use fixed plane**,
which places the sketch on that face's current plane without following later changes. A
nearby or parallel face is never used to repair a new attachment automatically.
The flat faces of a sheet metal body are the exception: they have no construction
certificate, so a sketch on one attaches to its panel by name (`sheet:<body>:<panel>:<side>`)
@@ -58,7 +74,9 @@ A missing author path also requires explicit repair. Reattachment and creation c
pending positions only on the involved source and author paths. Failed commands restore
those pending positions; undo restores the previous attachment and placement state.
File format 11 introduced these optional attachments, which format 12 also preserves. Existing designs with face references
File format 11 introduced these optional attachments, which format 12 also preserves. Format 16
adds the `lineage` certificate (older readers ask for an update rather than meeting an unknown
kind); anchors saved with construction certificates resolve as before. Existing designs with face references
without an attachment retain their legacy geometry and lookup behavior when opened; they
are not silently upgraded. Redefining such a sketch onto a supported selected face creates
the stronger attachment. Unsupported legacy geometry can instead be retained on an explicit