pub struct EulerReport {
pub characteristic: i64,
pub shells: usize,
pub genus: Option<i64>,
pub recorded_genus: i64,
pub boundary_edges: usize,
pub non_manifold_edges: usize,
}Expand description
Outcome of solid_euler.
Fields§
§characteristic: i64V − E + F − H over the reduced complex — the same count
BrepSolid::validate makes, with degenerate (collapsed) cells left
out of all four terms.
shells: usize§genus: Option<i64>S − χ/2, and None when characteristic is odd — there is no such
surface, so there is no genus to report rather than a halved one.
recorded_genus: i64What the solid carries in its genus field.
boundary_edges: usizeNon-degenerate edges used by FEWER than two coedges — a boundary edge, or an edge record no loop references at all. A closed surface has neither; a sheet or an in-progress shell legitimately has the first, and its characteristic is then unconstrained. Both are counted here because both mean the same thing for parity: these counts are not those of a closed surface, so decline to judge rather than convict.
non_manifold_edges: usizeNon-degenerate edges used by three or more coedges — not a 2-manifold, so the characteristic means nothing either.
Implementations§
Source§impl EulerReport
impl EulerReport
Sourcepub fn is_closed_manifold(&self) -> bool
pub fn is_closed_manifold(&self) -> bool
Whether the counts describe a closed 2-manifold at all. Parity is only an invariant for one of those.
Sourcepub fn is_unsound(&self) -> bool
pub fn is_unsound(&self) -> bool
The HARD predicate: a CLOSED manifold whose Euler characteristic is odd.
No closed orientable surface has one — χ = 2(S − G) is even by construction — so this is a statement about the record, not about a tolerance, and it cannot be tuned away. It is the one thing the Euler count can establish on its own: the genus itself has no second derivation from the cell complex to check against.