pub enum DegenerateReason {
EmptyOperand,
NoOverlap,
BelowKernelResolution {
thickness_m: f64,
required_m: f64,
},
BudgetExhausted,
}Expand description
Why no solid is being returned.
Variants§
EmptyOperand
One or both operands had no triangles.
NoOverlap
The kernel’s exact intersection is empty: the pair does not overlap, or
overlaps by less than the 2^-16 m snap grid so both faces snapped flush.
A touching pair (coplanar faces, zero overlap) lands here.
BelowKernelResolution
The pair overlaps, but not deeply enough for the kernel’s arrangement to
resolve the overlap as a solid rather than a coplanar contact. The solid
that would be returned here is systematically wrong (see the module
docs), so it is withheld. thickness_m is the intersection’s smallest
extent over the candidate contact normals (see gate_axes), which for a
box-box pair is the true penetration depth whatever the pair’s
orientation; required_m is the depth this pair would have needed.
thickness_m == 0.0 exactly is a real and distinct outcome, observed on
the bridge model (IfcColumn #761 × IfcWall #828): the kernel returned
triangles, but they are FLAT — a coplanar contact patch with no thickness
at all, rather than a slab too thin to resolve. It is reported here
instead of as NoOverlap because the arrangement did
produce geometry; the caller’s action is the same either way (fall back
to the contact marker), and the two are told apart by this field.
BudgetExhausted
The #1109 escalation budget tripped, so the arrangement is partial and nothing about it can be trusted.
Trait Implementations§
Source§impl Clone for DegenerateReason
impl Clone for DegenerateReason
Source§fn clone(&self) -> DegenerateReason
fn clone(&self) -> DegenerateReason
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for DegenerateReason
impl Debug for DegenerateReason
Source§impl PartialEq for DegenerateReason
impl PartialEq for DegenerateReason
impl Copy for DegenerateReason
impl StructuralPartialEq for DegenerateReason
Auto Trait Implementations§
impl Freeze for DegenerateReason
impl RefUnwindSafe for DegenerateReason
impl Send for DegenerateReason
impl Sync for DegenerateReason
impl Unpin for DegenerateReason
impl UnwindSafe for DegenerateReason
Blanket Implementations§
§impl<U> As for U
impl<U> As for U
§fn as_<T>(self) -> Twhere
T: CastFrom<U>,
fn as_<T>(self) -> Twhere
T: CastFrom<U>,
self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. Read moreSource§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> Pointable for T
impl<T> Pointable for T
§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read more§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.