Skip to main content

VolumeMesh

Struct VolumeMesh 

Source
pub struct VolumeMesh { /* private fields */ }
Expand description

A volume mesh structure (tetrahedral or hexahedral).

Cells are stored as arrays of 8 vertex indices. For tetrahedra, only the first 4 indices are used (indices 4-7 are set to u32::MAX).

Implementations§

Source§

impl VolumeMesh

Source

pub fn new( name: impl Into<String>, vertices: Vec<Vec3>, cells: Vec<[u32; 8]>, ) -> Self

Creates a new volume mesh from vertices and cell indices.

§Arguments
  • name - The name of the mesh
  • vertices - Vertex positions
  • cells - Cell indices, 8 per cell (unused indices should be u32::MAX)
Source

pub fn new_tet_mesh( name: impl Into<String>, vertices: Vec<Vec3>, tets: Vec<[u32; 4]>, ) -> Self

Creates a tetrahedral mesh.

Source

pub fn new_hex_mesh( name: impl Into<String>, vertices: Vec<Vec3>, hexes: Vec<[u32; 8]>, ) -> Self

Creates a hexahedral mesh.

Source

pub fn num_vertices(&self) -> usize

Returns the number of vertices.

Source

pub fn num_cells(&self) -> usize

Returns the number of cells.

Source

pub fn cell_type(&self, cell_idx: usize) -> VolumeCellType

Returns the cell type of the given cell.

Source

pub fn vertices(&self) -> &[Vec3]

Returns the vertices.

Source

pub fn cells(&self) -> &[[u32; 8]]

Returns the cells.

Source

pub fn color(&self) -> Vec4

Gets the base color.

Source

pub fn set_color(&mut self, color: Vec3) -> &mut Self

Sets the base color.

Source

pub fn interior_color(&self) -> Vec4

Gets the interior color.

Source

pub fn set_interior_color(&mut self, color: Vec3) -> &mut Self

Sets the interior color.

Source

pub fn edge_color(&self) -> Vec4

Gets the edge color.

Source

pub fn set_edge_color(&mut self, color: Vec3) -> &mut Self

Sets the edge color.

Source

pub fn edge_width(&self) -> f32

Gets the edge width.

Source

pub fn set_edge_width(&mut self, width: f32) -> &mut Self

Sets the edge width.

Source

pub fn decompose_to_tets(&self) -> Vec<[u32; 4]>

Decomposes all cells into tetrahedra. Tets pass through unchanged, hexes are decomposed into 5 tets.

Source

pub fn num_tets(&self) -> usize

Returns the number of tetrahedra (including decomposed hexes).

Source

pub fn generate_render_geometry_with_quantities( &self, ) -> VolumeMeshRenderGeometry

Generates render geometry including any enabled quantity data.

Source

pub fn init_render_data( &mut self, device: &Device, bind_group_layout: &BindGroupLayout, camera_buffer: &Buffer, )

Initializes GPU render data.

Source

pub fn update_render_data_with_culling( &mut self, device: &Device, bind_group_layout: &BindGroupLayout, camera_buffer: &Buffer, planes: &[(Vec3, Vec3)], )

Reinitializes render data with cell culling based on slice planes. Cells whose centroid is on the negative side of any plane are hidden. Uses caching to avoid regenerating geometry every frame.

Source

pub fn reset_render_data( &mut self, device: &Device, bind_group_layout: &BindGroupLayout, camera_buffer: &Buffer, )

Resets render data to show all cells (no culling).

Source

pub fn is_culled(&self) -> bool

Returns true if the mesh is currently showing culled geometry.

Source

pub fn render_data(&self) -> Option<&SurfaceMeshRenderData>

Returns the render data if available.

Source

pub fn pick_triangles( &self, planes: &[(Vec3, Vec3)], ) -> (Vec<Vec3>, Vec<[u32; 3]>)

Generates triangulated exterior faces for picking. Uses current slice plane culling if provided.

Source

pub fn init_pick_resources( &mut self, device: &Device, mesh_pick_bind_group_layout: &BindGroupLayout, camera_buffer: &Buffer, global_start: u32, )

Initializes GPU resources for pick rendering.

Creates the pick uniform buffer, cell index mapping buffer, and bind group. The cell index buffer maps each GPU triangle to its parent cell index.

Source

pub fn pick_bind_group(&self) -> Option<&BindGroup>

Returns the pick bind group if initialized.

Source

pub fn update_pick_uniforms(&self, queue: &Queue)

Updates pick uniforms (model transform) when the structure is moved.

Source

pub fn num_render_vertices(&self) -> u32

Returns the total number of vertices in the rendered triangulation (for draw calls).

Source

pub fn update_gpu_buffers(&self, queue: &Queue)

Updates GPU buffers.

Source

pub fn update_slice_render_data( &mut self, device: &Device, queue: &Queue, bind_group_layout: &BindGroupLayout, camera_buffer: &Buffer, plane_origin: Vec3, plane_normal: Vec3, ) -> bool

Updates or creates slice mesh render data for a given slice plane.

Returns true if the slice intersects this volume mesh.

Source

pub fn slice_render_data(&self) -> Option<&SliceMeshRenderData>

Returns the slice render data if available.

Source

pub fn clear_slice_render_data(&mut self)

Clears the slice render data cache.

Source

pub fn build_egui_ui(&mut self, ui: &mut Ui)

Builds the egui UI for this volume mesh.

Source

pub fn add_vertex_scalar_quantity( &mut self, name: impl Into<String>, values: Vec<f32>, ) -> &mut Self

Adds a vertex scalar quantity.

Source

pub fn add_cell_scalar_quantity( &mut self, name: impl Into<String>, values: Vec<f32>, ) -> &mut Self

Adds a cell scalar quantity.

Source

pub fn add_vertex_color_quantity( &mut self, name: impl Into<String>, colors: Vec<Vec3>, ) -> &mut Self

Adds a vertex color quantity.

Source

pub fn add_cell_color_quantity( &mut self, name: impl Into<String>, colors: Vec<Vec3>, ) -> &mut Self

Adds a cell color quantity.

Source

pub fn add_vertex_vector_quantity( &mut self, name: impl Into<String>, vectors: Vec<Vec3>, ) -> &mut Self

Adds a vertex vector quantity.

Source

pub fn add_cell_vector_quantity( &mut self, name: impl Into<String>, vectors: Vec<Vec3>, ) -> &mut Self

Adds a cell vector quantity.

Source

pub fn generate_slice_geometry( &self, plane_origin: Vec3, plane_normal: Vec3, ) -> Option<SliceMeshData>

Generates mesh geometry for the cross-section created by a slice plane.

This computes the intersection of all cells with the plane and triangulates the resulting polygons for rendering. If a vertex color quantity is enabled, colors are interpolated at slice points.

§Arguments
  • plane_origin - A point on the slice plane
  • plane_normal - The plane normal (points toward kept geometry)
§Returns

Some(SliceMeshData) if the plane intersects the mesh, None otherwise.

Trait Implementations§

Source§

impl HasQuantities for VolumeMesh

Source§

fn add_quantity(&mut self, quantity: Box<dyn Quantity>)

Adds a quantity to this structure.
Source§

fn get_quantity(&self, name: &str) -> Option<&dyn Quantity>

Gets a quantity by name.
Source§

fn get_quantity_mut(&mut self, name: &str) -> Option<&mut Box<dyn Quantity>>

Gets a mutable quantity by name.
Source§

fn remove_quantity(&mut self, name: &str) -> Option<Box<dyn Quantity>>

Removes a quantity by name.
Source§

fn quantities(&self) -> &[Box<dyn Quantity>]

Returns all quantities attached to this structure.
Source§

fn num_quantities(&self) -> usize

Returns the number of quantities attached.
Source§

impl Structure for VolumeMesh

Source§

fn as_any(&self) -> &dyn Any

Returns a reference to self as Any for downcasting.
Source§

fn as_any_mut(&mut self) -> &mut dyn Any

Returns a mutable reference to self as Any for downcasting.
Source§

fn name(&self) -> &str

Returns the unique name of this structure.
Source§

fn type_name(&self) -> &'static str

Returns the type name of this structure (e.g., “PointCloud”, “SurfaceMesh”).
Source§

fn bounding_box(&self) -> Option<(Vec3, Vec3)>

Returns the axis-aligned bounding box in world coordinates. Read more
Source§

fn length_scale(&self) -> f32

Returns a characteristic length scale for this structure.
Source§

fn transform(&self) -> Mat4

Returns the current model transform matrix.
Source§

fn set_transform(&mut self, transform: Mat4)

Sets the model transform matrix.
Source§

fn is_enabled(&self) -> bool

Returns whether this structure is currently visible.
Source§

fn set_enabled(&mut self, enabled: bool)

Sets the visibility of this structure.
Source§

fn draw(&self, _ctx: &mut dyn RenderContext)

Draws this structure to the scene. Read more
Source§

fn draw_pick(&self, _ctx: &mut dyn RenderContext)

Draws this structure for picking/selection. Read more
Source§

fn build_ui(&mut self, _ui: &dyn Any)

Builds the ImGui UI for this structure.
Source§

fn build_pick_ui(&self, _ui: &dyn Any, _pick: &PickResult)

Builds the ImGui UI for a picked element.
Source§

fn clear_gpu_resources(&mut self)

Clears all GPU resources (render data, pick buffers, etc.). Read more
Source§

fn refresh(&mut self)

Refreshes GPU resources after data changes.
Source§

fn center_bounding_box(&mut self)

Centers the camera on this structure’s bounding box.
Source§

fn reset_transform(&mut self)

Resets the transform to identity.
Source§

fn material(&self) -> &str

Returns the material name for this structure (e.g., “clay”, “wax”).
Source§

fn set_material(&mut self, _material: &str)

Sets the material for this structure by name.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> Downcast for T
where T: Any,

Source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
Source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

Source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,