Expand description
Intersection segments between two triangle meshes, and the polylines they assemble into.
§The capability this adds
ScalarBoolean is exact and total for disjoint,
nested, and identical operands, and refuses everything else. The single
missing capability is resolving surfaces that properly cross, which needs
the intersection curve first. This module computes it.
§Why nodes are symbolic, not coordinates
An intersection point is named by the source topology that produced it – a vertex index, or the pair of faces and the edge that crossed – never by its computed position. Two faces sharing an edge then produce byte- identical node names, so stitching segments into a polyline is exact integer matching with no tolerance anywhere.
Matching on coordinates instead would need an epsilon, and an epsilon in
the stitching step is precisely how a boolean develops cracks: two
segments that should share an endpoint fail to join, and the curve opens.
ScalarSection already uses this technique for plane cuts; this reuses it
for the mesh-mesh case.
§Honest limits
Coplanar face pairs are refused, not approximated. Their intersection is an area rather than a curve, and resolving it needs a 2D overlap policy the caller must choose. Refusing keeps this module’s output meaning exactly one thing.
Structs§
- EdgeKey
- An undirected mesh edge, named by its two vertex indices in sorted order.
- Intersection
Curve - The intersection curve between two meshes, as segments plus positions.
- Intersection
Segment - One segment of the intersection curve, joining two nodes.
- Point
Key - A point named by its exact coordinate bits.
- Polyline
- A connected run of the intersection curve.
Enums§
- NodeKey
- An intersection point, named by the source topology that produced it.
- Operand
- Which operand a piece of source topology belongs to.
Functions§
- assemble_
polylines - Stitch segments into maximal connected polylines.
- intersection_
segments - Compute the intersection curve between two triangle meshes.