pub fn classify_face<S: Scalar>(
model: &Model<S>,
face_id: FaceId,
other_solid: SolidId,
params: RemeshParams<S>,
) -> GeopResult<FaceClassification>Expand description
Where face_id sits relative to other_solid, decided at a single point
strictly inside the face’s trimmed region.
One point is enough because remesh ran first: every curve along which the other solid’s boundary crosses this face has been imprinted, and the face split along it, so the face no longer straddles anything. Without that guarantee this would be unsound, which is why it lives here rather than as a general-purpose query.
A point that lands on the other solid’s boundary doesn’t decide it by
itself: the face may lie along that boundary over an area (coincident
patches, told apart by their normals), or merely touch it at a point or
along a curve — a cube face resting on a sphere’s pole, say, where the
sphere has no normal at all. So such a point is set aside and the next
interior point tried (one per boundary coedge, see
face_interior_point_where); any point off the other solid’s boundary
classifies the whole face. Only if every one lies on it are the patches
coincident, and their normals are compared.