pub struct BspNode {
pub plane: BspPlane,
pub polygons: Vec<Vec<[f64; 3]>>,
pub front: Option<Box<BspNode>>,
pub back: Option<Box<BspNode>>,
}Expand description
A node in a Binary Space Partitioning tree.
Each node divides space with a plane; polygons are classified as front, back, or coplanar with the plane.
Fields§
§plane: BspPlaneThe dividing plane.
polygons: Vec<Vec<[f64; 3]>>Coplanar polygons stored at this node.
front: Option<Box<BspNode>>Subtree in front of the plane.
back: Option<Box<BspNode>>Subtree behind the plane.
Implementations§
Source§impl BspNode
impl BspNode
Sourcepub fn new(plane: BspPlane) -> Self
pub fn new(plane: BspPlane) -> Self
Create a new BSP node with the given plane, no polygons, no children.
Sourcepub fn classify_point(&self, p: [f64; 3]) -> PlaneClass
pub fn classify_point(&self, p: [f64; 3]) -> PlaneClass
Classify a point relative to this node’s plane.
Sourcepub fn insert_polygon(&mut self, polygon: Vec<[f64; 3]>)
pub fn insert_polygon(&mut self, polygon: Vec<[f64; 3]>)
Insert a polygon into the BSP tree.
The polygon is split if it straddles the plane, and each fragment is routed to the front or back subtree.
Sourcepub fn collect_front_polygons(&self) -> Vec<Vec<[f64; 3]>>
pub fn collect_front_polygons(&self) -> Vec<Vec<[f64; 3]>>
Collect all polygons in front of the plane (recursively).
Sourcepub fn collect_back_polygons(&self) -> Vec<Vec<[f64; 3]>>
pub fn collect_back_polygons(&self) -> Vec<Vec<[f64; 3]>>
Collect all polygons behind the plane (recursively).
Sourcepub fn count_polygons(&self) -> usize
pub fn count_polygons(&self) -> usize
Count all polygons in the tree.
Auto Trait Implementations§
impl Freeze for BspNode
impl RefUnwindSafe for BspNode
impl Send for BspNode
impl Sync for BspNode
impl Unpin for BspNode
impl UnsafeUnpin for BspNode
impl UnwindSafe for BspNode
Blanket Implementations§
Source§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
Mutably borrows from an owned value. Read more
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.