Skip to main content

LoopCrossingReport

Struct LoopCrossingReport 

Source
pub struct LoopCrossingReport {
    pub loops: usize,
    pub chords: usize,
    pub crossings: Vec<LoopCrossing>,
    pub unreadable: Vec<String>,
}
Expand description

Outcome of loop_self_crossings.

Fields§

§loops: usize

Loops scanned.

§chords: usize

Chords tested — the sampled trim polygon’s segments, summed over loops.

§crossings: Vec<LoopCrossing>

One entry per crossing COEDGE PAIR per loop, first one found kept. The pair is the stable half: a denser sampling moves the crossing’s uv without changing which two trims cross.

Two kinds of crossing are deliberately NOT here, both because the two strands are the same curve twice rather than two parts of a boundary:

  • a crossing within assembler_weld of one of the loop’s own VERTICES. Two trims arriving at one vertex are fitted independently, so each ends a fit-accuracy away from it and near the vertex they overlap. Measured over the case population on 2026-09-13, every such hit sat within 2.4e-7 of a vertex and the one true crossing sat 1.8e-1 from one — four orders of margin either side of the band, not a threshold decision. The cost is stated: a genuine bowtie whose crossing is inside that band of a vertex is not reported.
  • a crossing between two DIFFERENT coedges that use the SAME EDGE — a seam edge, which a periodic face’s loop traverses once each way. The two are one 3D curve under two fits, so they cannot cross on the surface; where the fits wobble past each other they only look like it. A coedge against ITSELF is a different question and is asked.
§unreadable: Vec<String>

Loops whose pcurves could not be evaluated, face/loop: reason. A scan that could not read a loop did not clear it, so a caller must not read an empty crossings beside a non-empty this as “no crossings”.

Implementations§

Source§

impl LoopCrossingReport

Source

pub fn is_flagged(&self) -> bool

The predicate: some face’s trim loop crosses itself.

Source

pub fn summary(&self) -> Option<String>

One line naming the first crossing, or None when nothing crossed.

Trait Implementations§

Source§

impl Clone for LoopCrossingReport

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for LoopCrossingReport

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Serialize for LoopCrossingReport

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<S, T> Upcast<T> for S
where T: UpcastFrom<S> + ?Sized, S: ?Sized,

Source§

fn upcast(&self) -> &T
where Self: ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider ref type within the Wasm bindgen generics type system. Read more
Source§

fn upcast_into(self) -> T
where Self: Sized + ErasableGeneric, T: Sized + ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider type within the Wasm bindgen generics type system. Read more