Expand description
Persistent structural names for faces and edges. Persistent names for exact B-rep faces and edges.
crate::SurfaceId and axiolid_topology::FaceId are arena positions.
They answer “which slot” and are only meaningful inside one assembled
value: rebuild the catalog and slot 7 is a different face. That is fine
for validation, which never outlives assembly, and useless for anything
that must refer to a face across an operation – selecting an edge to
fillet, carrying a material through a boolean, or re-applying a feature
after an upstream edit.
A FaceName instead records WHERE THE FACE CAME FROM. It is derived
from the generating inputs, so the same construction names the same face
no matter how the arenas are packed, and an operation that splits a face
can say which face each fragment came from.
§What a name is not
A name is not a guarantee that the face still exists, and not a claim that two equal names are geometrically identical. It is a statement about provenance: “this face was produced by that part of that input”. Callers that need existence must look the name up and handle absence.