Files
OneCAD-Simulation/crates/mesh/src/lib.rs
T
jyvikoandClaude Opus 5.5 13b506150c Mesh: the hex meshers honour edge seeds
A seed is matched to a mesher's curve by position (ends and middle within the
two tessellations' tolerance), which also orients its bias. Interval
assignment holds exact seeds, raises minimums and takes free seeds as goals;
an equality, loop minimum or parity it cannot meet with the exact seeds held
names them. Seeded curves get the seed's spacing. Extrude and revolve seed
cross-section curves and the layers of a level interval; sweep and mapped
seed their B-rep edges; cells seed the shared edge once, so both cells keep
it and stay conforming.

Part of #230.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
2026-10-14 21:23:05 -04:00

48 lines
1.5 KiB
Rust

//! Meshing: robust geometric predicates, boundary surface preparation, tetrahedral and
//! hexahedral volume meshing, and element quality.
//!
//! Every algorithm here is implemented from the papers cited in its module docs (see
//! `docs/meshing/literature.md`); no GPL-family code is read or used. Meshing decisions use exact
//! predicates, results are deterministic, and every iterative stage is bounded.
#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)]
#![forbid(unsafe_code)]
pub mod block;
pub mod cdt;
pub mod delaunay;
pub mod hex;
pub mod join;
pub mod mirror;
pub mod octree;
pub mod planar;
pub mod quad;
pub mod quality;
pub mod seeds;
pub mod size;
pub mod surface;
pub mod tet;
mod vec3;
#[derive(Debug, Clone, PartialEq, thiserror::Error)]
pub enum Error {
#[error("invalid input: {0}")]
Invalid(String),
#[error("limit reached: {0}")]
Limit(String),
#[error("meshing failed: {0}")]
Failed(String),
/// The input is valid but outside what the mesher handles yet (a body that is not
/// sweepable, …); the message says why.
#[error("not supported yet: {0}")]
Unsupported(String),
/// The boundary surface has defects ([`surface::BoundarySurface::new`]).
#[error("invalid boundary surface: {0}")]
Surface(surface::Defects),
#[error(transparent)]
Model(#[from] fieldcraft_model::Error),
}
pub type Result<T> = std::result::Result<T, Error>;
pub mod predicates;