use crate::{Vec3, VolumeMesh, with_context_mut};
pub fn register_tet_mesh(
name: impl Into<String>,
vertices: Vec<Vec3>,
tets: Vec<[u32; 4]>,
) -> VolumeMeshHandle {
let name = name.into();
let mesh = VolumeMesh::new_tet_mesh(name.clone(), vertices, tets);
with_context_mut(|ctx| {
ctx.registry
.register(Box::new(mesh))
.expect("failed to register tet mesh");
ctx.update_extents();
});
VolumeMeshHandle { name }
}
pub fn register_hex_mesh(
name: impl Into<String>,
vertices: Vec<Vec3>,
hexes: Vec<[u32; 8]>,
) -> VolumeMeshHandle {
let name = name.into();
let mesh = VolumeMesh::new_hex_mesh(name.clone(), vertices, hexes);
with_context_mut(|ctx| {
ctx.registry
.register(Box::new(mesh))
.expect("failed to register hex mesh");
ctx.update_extents();
});
VolumeMeshHandle { name }
}
pub fn register_volume_mesh(
name: impl Into<String>,
vertices: Vec<Vec3>,
cells: Vec<[u32; 8]>,
) -> VolumeMeshHandle {
let name = name.into();
let mesh = VolumeMesh::new(name.clone(), vertices, cells);
with_context_mut(|ctx| {
ctx.registry
.register(Box::new(mesh))
.expect("failed to register volume mesh");
ctx.update_extents();
});
VolumeMeshHandle { name }
}
impl_structure_accessors! {
get_fn = get_volume_mesh,
with_fn = with_volume_mesh,
with_ref_fn = with_volume_mesh_ref,
handle = VolumeMeshHandle,
type_name = "VolumeMesh",
rust_type = VolumeMesh,
doc_name = "volume mesh"
}
#[derive(Clone)]
pub struct VolumeMeshHandle {
name: String,
}
impl VolumeMeshHandle {
#[must_use]
pub fn name(&self) -> &str {
&self.name
}
pub fn set_color(&self, color: Vec3) -> &Self {
with_volume_mesh(&self.name, |vm| {
vm.set_color(color);
});
self
}
pub fn set_interior_color(&self, color: Vec3) -> &Self {
with_volume_mesh(&self.name, |vm| {
vm.set_interior_color(color);
});
self
}
pub fn set_edge_color(&self, color: Vec3) -> &Self {
with_volume_mesh(&self.name, |vm| {
vm.set_edge_color(color);
});
self
}
pub fn set_edge_width(&self, width: f32) -> &Self {
with_volume_mesh(&self.name, |vm| {
vm.set_edge_width(width);
});
self
}
pub fn add_vertex_scalar_quantity(&self, name: impl Into<String>, values: Vec<f32>) -> &Self {
let name = name.into();
with_volume_mesh(&self.name, |vm| {
vm.add_vertex_scalar_quantity(name, values);
});
self
}
pub fn add_cell_scalar_quantity(&self, name: impl Into<String>, values: Vec<f32>) -> &Self {
let name = name.into();
with_volume_mesh(&self.name, |vm| {
vm.add_cell_scalar_quantity(name, values);
});
self
}
pub fn add_vertex_color_quantity(&self, name: impl Into<String>, colors: Vec<Vec3>) -> &Self {
let name = name.into();
with_volume_mesh(&self.name, |vm| {
vm.add_vertex_color_quantity(name, colors);
});
self
}
pub fn add_cell_color_quantity(&self, name: impl Into<String>, colors: Vec<Vec3>) -> &Self {
let name = name.into();
with_volume_mesh(&self.name, |vm| {
vm.add_cell_color_quantity(name, colors);
});
self
}
pub fn add_vertex_vector_quantity(&self, name: impl Into<String>, vectors: Vec<Vec3>) -> &Self {
let name = name.into();
with_volume_mesh(&self.name, |vm| {
vm.add_vertex_vector_quantity(name, vectors);
});
self
}
pub fn add_cell_vector_quantity(&self, name: impl Into<String>, vectors: Vec<Vec3>) -> &Self {
let name = name.into();
with_volume_mesh(&self.name, |vm| {
vm.add_cell_vector_quantity(name, vectors);
});
self
}
}