pub struct DualGrid {
pub volumes: Vec<[MortonKey; 8]>,
}Expand description
Type that defines a grid made from the dual edges of an octree.
§Visual Example
Here’s an example simplified in a quadtree.
§Possible Implementation
Here’s a possible implementation simplified in a quadtree, without comments or nice code: It’s meant mostly as a visual guide of what the dual grid looks like.
Fields§
§volumes: Vec<[MortonKey; 8]>The cells or volumes that make up this dual grid.
Each one is composed by, at most, 8 different dual vertices.
They are always presented in the same order: The same one as defined in
[dmc::octree::OctreeIndex].
§Notes
Some cells will have shared vertices, however, their topology will be the same one as a cube, so the Marching Cubes algorithm will work over them.
Implementations§
Source§impl DualGrid
impl DualGrid
Sourcepub fn from_octree<T: Copy + Send + Sync>(octree: &HashedOctree<T>) -> Self
pub fn from_octree<T: Copy + Send + Sync>(octree: &HashedOctree<T>) -> Self
Constructs a dual grid from a given octree.
You won’t require to create an object of this type yourself unless you plan on processing
the duals. If you want to generate a mesh from an octree, use
crate::dmc::mesh_from_octree.
§Example
use dmc::octree::*;
use dmc::duals::*;
let mut octree = HashedOctree::new(1);
octree.subdivide(MortonKey::root()).for_each(drop);
assert!(octree.is_subdivided(MortonKey::root()));
assert_eq!(
octree.leaves(MortonKey::root()),
vec![
MortonKey(0b1111),
MortonKey(0b1110),
MortonKey(0b1101),
MortonKey(0b1100),
MortonKey(0b1011),
MortonKey(0b1010),
MortonKey(0b1001),
MortonKey(0b1000),
]
);
let duals = DualGrid::from_octree(&octree);
assert_eq!(
duals.volumes,
vec![[
MortonKey(0b1111),
MortonKey(0b1110),
MortonKey(0b1101),
MortonKey(0b1100),
MortonKey(0b1011),
MortonKey(0b1010),
MortonKey(0b1001),
MortonKey(0b1000),
]]
);Auto Trait Implementations§
impl Freeze for DualGrid
impl RefUnwindSafe for DualGrid
impl Send for DualGrid
impl Sync for DualGrid
impl Unpin for DualGrid
impl UnsafeUnpin for DualGrid
impl UnwindSafe for DualGrid
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
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more