Files
solidcraft-upstream/docs/face-attachments.md
T
bherbruckandClaude Opus 5.5 45bc22fc30 fix: faces of an extrude drawn over a face's projected edges keep an exact source (#505)
A profile traced over a face sketch's projected boundary left the extrude's caps and sides without an exact planar source, so a sketch or offset plane on the new top face was refused. The drawn curve is now the edge's source where it covers a projection. Clearer fixed-plane message; regression tests in the engine, UI harness and design corpus, plus a corpus-wide flat-face attachment check (known gaps under #491-#495).

Fixes #489

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-12 23:01:35 -04:00

78 lines
5.2 KiB
Markdown

# Face-attached sketches
New face-attached sketches store the selected source body, its creating feature, an exact
face certificate, and the source and author occurrence paths. The sketch's picked origin
and orientation are stored in the source face's canonical plane. Editing the source height
or moving its placement therefore updates the sketch plane while preserving its local
geometry and dimensions.
Supported planar sources are exact Box faces, untapered New Body and Join Extrude caps and
straight sketch sides, and planar faces of immutable STEP imports. Extrude caps also identify their
outer boundary and holes by source curve IDs. Reordering profiles cannot substitute another
profile's cap. A profile drawn over a face sketch's projected boundary (a rectangle
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.
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>`)
and finds it again after every rebuild, unfold and refold. If that panel no longer exists the
sketch reports a lost attachment, as above. See the sheet metal guide.
## Create and repair
Select a supported planar face and create a sketch. The desktop selection supplies the exact
body and face index, including its occurrence path. Command callers can use
`sketch.create` with `plane: {face: [x,y,z], body: "world body key", index: face_index}`;
the point is in world coordinates. A point-only face request must find a unique supported
source. An unsupported or ambiguous request fails with an explanation instead of creating
an attachment with weaker identity.
When a source is suppressed, deleted, replaced, or loses its certificate, the sketch reports
a lost attachment. Its saved plane is only a visible repair guide: it does not produce a
healthy solved sketch or let downstream features build at a substitute face.
Use **Redefine Sketch Plane** to select a new supported face explicitly. The draft can be
reviewed before applying it; cancellation leaves the existing attachment intact. Reattachment
keeps existing sketch geometry, IDs, and dimensions. When the selected source changes, its
previous automatically projected boundary becomes ordinary geometry on the new plane;
it is not replaced by a newly projected boundary. Rebinding to the same certified source
retains its live boundary. Manually created projection links retain their own sources.
Choose an explicit fixed plane to detach the sketch. This preserves its current local
geometry and dimensions and converts only its automatically projected face boundary to
ordinary geometry. Manual projection links remain attached to their own sources. A fresh
fixed-plane sketch has no live face auto-projection.
## Occurrences, pending positions, and files
The selected source occurrence and the sketch's author occurrence are separate identities.
Repeated instances therefore cannot silently switch an attachment to the first placement.
A missing author path also requires explicit repair. Reattachment and creation capture
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
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
fixed plane. Imported attachments also bind the exact STEP payload digest, item entity, and
face entity: replacing the payload cannot reuse an old attachment merely because a face
index or shape looks the same.
## Profiles generated by face modelling commands
Extrude, Revolve, and Press Pull can generate an internal sketch from a selected planar face. Supported
sources use the same certified attachment and live boundary as an ordinary attached sketch.
For modified faces without a construction certificate, these commands retain their historical
named-face and linked-boundary behaviour through a private compatibility path. Initial capture
uses the selected body and face index. These helper sketches do not have the stronger saved
identity guarantee of a certified attachment. This compatibility path does not change the
requirements for creating an ordinary face-attached sketch.