pub struct SelfIntersectionReport {
pub triangles: usize,
pub candidate_pairs: usize,
pub confirmed: Vec<FaceCrossing>,
pub rejected: usize,
pub undecided: usize,
pub same_face_candidates: usize,
pub folds: Vec<FaceFold>,
pub fold_rejected: usize,
pub fold_undecided: usize,
pub truncated: bool,
pub options: SelfIntersectionOptions,
}Expand description
Outcome of solid_self_intersections.
Fields§
§triangles: usize§candidate_pairs: usizeTriangle pairs whose boxes overlapped and that survived the welded- vertex skip — the work the exact confirmation was offered.
confirmed: Vec<FaceCrossing>Mesh crossings between DISTINCT faces that the exact-surface straddle test confirmed, one entry per face pair (deepest kept).
rejected: usizeMesh crossings between distinct faces the straddle test REJECTED — tangent neighbours and chord error. A large number here beside zero confirmations is the detector working, not failing.
undecided: usizeMesh crossings whose confirmation could not be evaluated (projection or normal failed). Never counted as either verdict.
same_face_candidates: usizeMesh crossings between two triangles of ONE face: the candidates the fold confirmation was offered. A candidate is not a defect — a sharply curved face’s chords cross each other without the face folding.
folds: Vec<FaceFold>Faces confirmed to FOLD THROUGH THEMSELVES in 3D, one entry per FACE (the widest-separated hit kept). The face is the stable unit: a fold region produces as many triangle pairs as the mesh happens to have there, and a denser mesh would rewrite that number without the face being any more or less folded.
fold_rejected: usizeSame-face candidates the fold confirmation REJECTED — the two feet came back within one tessellation cell of each other (chord error on a tight curve), or their normals were parallel (a pole). A large number here beside zero folds is the confirmation working, not failing.
fold_undecided: usizeSame-face candidates whose confirmation could not be evaluated: a
projection, a normal or a containment query failed, or a corner did not
come back onto its own carrier. Never counted as either verdict, and a
caller must not read an empty folds beside a large one of these as
“no folds”.
truncated: boolThe mesh exceeded max_triangles and was not scanned.
options: SelfIntersectionOptionsImplementations§
Source§impl SelfIntersectionReport
impl SelfIntersectionReport
Sourcepub fn is_flagged(&self) -> bool
pub fn is_flagged(&self) -> bool
The predicate for a caller that has opted into this check: the solid passes through itself — two faces crossing, or ONE face folded through itself. Both are the same defect to a caller deciding whether to accept a result, so both are in the predicate.
Sourcepub fn summary(&self) -> Option<String>
pub fn summary(&self) -> Option<String>
One line naming the worst crossing or fold, or None when nothing was
confirmed.
Sourcepub fn fold_summary(&self) -> Option<String>
pub fn fold_summary(&self) -> Option<String>
One line naming the worst FOLD, or None when no face folded.