Struct quantized_density_fields::lod::LOD
source · pub struct LOD<S>where
S: State,{ /* private fields */ }
Expand description
Object that represents space level of details. This gives you the ability to sample space area states at different zoom levels (LOD mechanism).
Implementations§
source§impl<S> LOD<S>where
S: State,
impl<S> LOD<S>where
S: State,
sourcepub fn new(dimensions: usize, count: usize, root_state: S) -> Self
pub fn new(dimensions: usize, count: usize, root_state: S) -> Self
Creates new LOD information universe.
Arguments
dimensions
- Number of dimensions which space contains.count
- Number of levels.root_state
- State of root level.
Examples
use quantized_density_fields::LOD;
// Create 2D space with 1 level of details and `16` as root space.
let lod = LOD::new(2, 1, 16);
assert_eq!(*lod.state(), 16);
// LOD has 4 children level objects.
assert_eq!(lod.level(lod.root()).data().as_sublevels().len(), 4);
// sampled state at level 1 equals to `4` (`16 / 4`).
assert_eq!(*lod.level(lod.level(lod.root()).data().as_sublevels()[0]).state(), 4);
sourcepub fn dimensions(&self) -> usize
pub fn dimensions(&self) -> usize
Gets LOD dimensions number.
Examples
use quantized_density_fields::LOD;
let lod = LOD::new(2, 1, 16);
assert_eq!(lod.dimensions(), 2);
sourcepub fn levels_count(&self) -> usize
pub fn levels_count(&self) -> usize
Gets LOD zoom levels number.
Examples
use quantized_density_fields::LOD;
let lod = LOD::new(2, 1, 16);
assert_eq!(lod.levels_count(), 1);
sourcepub fn state(&self) -> &S
pub fn state(&self) -> &S
Gets LOD root level state.
Examples
use quantized_density_fields::LOD;
let lod = LOD::new(2, 1, 16);
assert_eq!(*lod.state(), 16);
sourcepub fn level_exists(&self, id: ID) -> bool
pub fn level_exists(&self, id: ID) -> bool
sourcepub fn try_get_level(&self, id: ID) -> Option<&Level<S>>
pub fn try_get_level(&self, id: ID) -> Option<&Level<S>>
sourcepub fn field_exists(&self, id: ID) -> bool
pub fn field_exists(&self, id: ID) -> bool
sourcepub fn try_get_field(&self, id: ID) -> Option<&QDF<S>>
pub fn try_get_field(&self, id: ID) -> Option<&QDF<S>>
sourcepub fn try_get_field_mut(&mut self, id: ID) -> Option<&mut QDF<S>>
pub fn try_get_field_mut(&mut self, id: ID) -> Option<&mut QDF<S>>
sourcepub fn get_field_mut(&mut self, id: ID) -> Result<&mut QDF<S>>
pub fn get_field_mut(&mut self, id: ID) -> Result<&mut QDF<S>>
sourcepub fn field_mut(&mut self, id: ID) -> &mut QDF<S>
pub fn field_mut(&mut self, id: ID) -> &mut QDF<S>
Gets mutable QDF with given id and panics if field does not exists.
Arguments
id
- QDF id.
Examples
use quantized_density_fields::LOD;
let mut lod = LOD::new(2, 0, 16);
let id = lod.level(lod.root()).data().as_field();
let mut qdf = lod.field_mut(id);
let id = qdf.root();
qdf.set_space_state(id, 4);
sourcepub fn find_level_neighbors(&self, id: ID) -> Result<Vec<ID>>
pub fn find_level_neighbors(&self, id: ID) -> Result<Vec<ID>>
Gets list of space level neighbors IDs or throws error if level does not exists.
Arguments
id
- Level id.
Examples
use quantized_density_fields::LOD;
let lod = LOD::new(2, 1, 16);
let subs = lod.level(lod.root()).data().as_sublevels();
assert_eq!(lod.find_level_neighbors(subs[0]).unwrap(), vec![subs[1], subs[2], subs[3]]);
sourcepub fn find_path(&self, from: ID, to: ID) -> Result<Vec<ID>>
pub fn find_path(&self, from: ID, to: ID) -> Result<Vec<ID>>
Gets list of space level IDs that defines shortest path between two space levels, or throws error if level does not exists. Levels must lay on the same zoom level!
Arguments
from
- source level id.to
- target level id.
Examples
use quantized_density_fields::LOD;
let lod = LOD::new(2, 1, 16);
let subs = lod.level(lod.root()).data().as_sublevels();
assert_eq!(lod.find_path(subs[1], subs[3]).unwrap(), vec![subs[1], subs[0], subs[3]]);
sourcepub fn recalculate_state(&mut self) -> Result<S>
pub fn recalculate_state(&mut self) -> Result<S>
Updates LOD states.
Examples
use quantized_density_fields::LOD;
let mut lod = LOD::new(2, 1, 16);
let id = {
let level = lod.level(lod.root()).clone();
let subs = level.data().as_sublevels();
let level = lod.level(subs[0]).clone();
level.data().as_field()
};
{
let mut qdf = lod.field_mut(id);
let id = qdf.root();
qdf.set_space_state(id, 8);
}
lod.recalculate_state();
assert_eq!(*lod.state(), 20);
sourcepub fn simulation_step<M>(&mut self) -> Result<S>where
M: Simulate<S>,
pub fn simulation_step<M>(&mut self) -> Result<S>where
M: Simulate<S>,
Simulate underlying QDF objects. See more: QDF::simulation_step()
.
sourcepub fn simulation_step_parallel<M>(&mut self) -> Result<S>where
M: Simulate<S>,
pub fn simulation_step_parallel<M>(&mut self) -> Result<S>where
M: Simulate<S>,
Simulate underlying QDF objects in parallel manner.
See more: QDF::simulation_step_parallel()
.