geop_core_topology/boundary.rs
1use crate::{CoedgeId, VertexId};
2
3#[derive(Clone, Copy, Debug, PartialEq, Eq)]
4pub enum BoundaryType {
5 /// A boundary defined by a single vertex — no edge exists yet (e.g. a
6 /// face fresh out of `mvfs`).
7 Vertex(VertexId),
8 /// A boundary defined by a starting edge loop.
9 Loop(CoedgeId),
10}
11
12/// Which of a face's boundaries: its one outer loop, or the `n`-th hole.
13///
14/// A face's boundaries are not interchangeable — the outer loop bounds the
15/// material and every hole removes from it — so code that locates a boundary
16/// says *which kind* it found rather than returning a bare index into one
17/// flat list. That distinction is exactly what `splice_edge_into_face` needs
18/// to decide whether joining two loops merges two holes, absorbs a hole into
19/// the outer loop, or splits the face in two.
20#[derive(Clone, Copy, Debug, PartialEq, Eq)]
21pub enum BoundaryIndex {
22 Outer,
23 Hole(usize),
24}