DenseField

Struct DenseField 

Source
pub struct DenseField<T> { /* private fields */ }
Expand description

3-dimensional dense field for scalar values.

A uniform grid representation that stores field values at every point in the sampling domain. The field geometry is defined by:

  • An origin point defining the minimum corner of the field
  • A uniform cell size for all dimensions
  • The number of points in x, y, and z directions

The field stores values in a contiguous array, providing efficient access and parallel processing capabilities. This representation is memory-intensive but offers fast random access and is well-suited for operations like smoothing and iso-surface extraction.

Note: This type should not be constructed directly. Instead, use ~DenseSampler to sample and extract a dense field from an implicit model.

Implementations§

Source§

impl<T> DenseField<T>

Source

pub fn origin(&self) -> &Vec3<T>

Returns a reference to the origin point of the field as a Vec3<T>.

Source

pub fn num_points(&self) -> usize

Returns the total number of points in the field as the product of points in each direction.

Source

pub fn num_cells(&self) -> usize

Returns the total number of cells in the field as the product of cells in each direction. Note that the number of cells is one less than the number of points in each direction.

Source

pub fn data(&self) -> &[T]

Returns a reference to the underlying data buffer as a slice.

Source§

impl<T: Float> DenseField<T>

Source

pub fn new(origin: Vec3<T>, cell_size: T, num_pts: Vec3i) -> Self

Create a new empty field.

§Arguments
  • origin - The base of the field, and the first data location.
  • cell_size - The size of each cell in the field.
  • num_pts - Number of points in each direction.
§Returns

A new DenseField initialized with zeros and the specified parameters.

Source

pub fn from_bounds(bounds: BoundingBox<T>, cell_size: T) -> Self

Create a new empty field from bounds and a cell size.

§Arguments
  • bounds - The extents of the field.
  • cell_size - The size of each cell in the field.
§Returns

A new DenseField initialized with zeros and dimensions derived from the bounds and cell size.

Source

pub fn from_data( origin: Vec3<T>, cell_size: T, num_pts: Vec3i, data: Vec<T>, ) -> Result<Self, ModelError>

Create a new field from a data buffer.

The size of the data buffer must match the specified point count.

§Arguments
  • origin - The base of the field, and the first value location in space.
  • cell_size - The size of each cell in the field.
  • num_pts - Number of points in each direction.
  • data - The data buffer.
§Returns

Ok with the generated DenseField if the data matches the point count, or Err if the data doesn’t match.

Source

pub fn set_value(&mut self, index: usize, value: T)

Sets the value at a specific index in the data buffer.

§Arguments
  • index - The 1D index in the data buffer.
  • value - The new value to set.
Source

pub fn cell_size(&self) -> T

Returns the cell size of the field.

Source

pub fn copy_data(&self) -> Vec<T>

Returns a copy of the data buffer in the field.

Source

pub fn cell_corners(&self, i: usize, j: usize, k: usize) -> [Vec3<T>; 8]

Returns the vertex locations at the corners of the specified cell.

§Arguments
  • i - Index in first direction.
  • j - Index in second direction.
  • k - Index in third direction.
§Returns

An array of 8 Vec3<T> coordinates corresponding to the corners of the cell.

Source

pub fn cell_values(&self, i: usize, j: usize, k: usize) -> [T; 8]

Returns the values at the corners of the specified cell.

§Arguments
  • i - Index in first direction.
  • j - Index in second direction.
  • k - Index in third direction.
§Returns

An array of 8 values corresponding to the corners of the cell.

Source

pub fn threshold(&mut self, limit: T)

Assigns 0 to any point with an absolute value below the limit.

§Arguments
  • limit - The limit threshold for non-zero values.
Source

pub fn smooth(&mut self, factor: T, iterations: u32)

Performs a laplacian smoothing operation on the field data.

The value of each point will be updated based on the average of the adjacent points.

§Arguments
  • factor - Interpolation value between the average of the adjacent points and the current value.
  • iterations - Number of successive smoothing iterations.
Source

pub fn padding(&mut self, padding_value: T)

Applies padding to the field boundaries. All boundary points will be assigned a specific value.

This can be used to ensure open edges of a solid are capped at the bounds.

§Arguments
  • padding_value - The value to assign to all boundary points.
Source§

impl<T: ModelFloat + 'static> DenseField<T>

Source

pub fn smooth_par(&mut self, factor: T, iterations: u32)

Performs a laplacian smoothing operation on the field data using parallel iteration.

The value of each point will be updated based on the average of the adjacent points. This is a parallel version of the smooth method.

§Arguments
  • factor - Interpolation value between the average of the adjacent points and the current value.
  • iterations - Number of successive smoothing iterations.

Trait Implementations§

Source§

impl<T: Float> CellGridIterator<T> for DenseField<T>

Source§

fn iter_cell_grid(&self) -> CellGridIter<T>

Returns an iterator that yields all cell coordinates in the field grid.

Source§

type GridIter<'a> = CellGridIter<T> where Self: 'a

A different grid‐cell iterator for each borrow‐lifetime 'a.
Source§

impl<T: Float> CellIterator<T> for DenseField<T>

Source§

fn iter_cells(&self) -> CellGridIter<T>

Returns an iterator that yields all cell coordinates in the field.

Source§

type Iter<'a> = CellGridIter<T> where T: 'a

A different Iterator<Item=BoundingBox<T>> for each borrow‐lifetime 'a.
Source§

impl<T: Float> CellValueIterator<T> for DenseField<T>

Source§

fn iter_cell_values<'a>(&'a self) -> Self::Iter<'a>

Returns an iterator that yields the values at each cell’s corners.

Source§

type Iter<'a> = DenseCellValueIterator<'a, T> where Self: 'a

A different Iterator<Item=[T;8]> for each borrow‐lifetime 'a.
Source§

impl<T: Clone> Clone for DenseField<T>

Source§

fn clone(&self) -> DenseField<T>

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug> Debug for DenseField<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de, T> Deserialize<'de> for DenseField<T>
where T: Deserialize<'de>,

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl<T: Float> GridIterator<T> for DenseField<T>

Source§

fn iter_grid<'a>(&'a self) -> Self::GridIter<'a>

Returns an iterator that yields all grid point coordinates in the field.

Source§

type GridIter<'a> = PointGridIter<T> where Self: 'a

A different grid‐iterator for each borrow‐lifetime 'a.
Source§

impl<T: Float> PointIterator<T> for DenseField<T>

Source§

fn iter_points(&self) -> PointGridIter<T>

Returns an iterator that yields all point coordinates in the field.

Source§

type Iter<'a> = PointGridIter<T> where T: 'a

A different Iterator<Item=Vec3<T>> for each borrow‐lifetime 'a.
Source§

impl<T: ModelFloat> Sampler<T, DenseField<T>> for DenseSampler<T>

Source§

fn sample_field( &mut self, model: &ImplicitModel<T>, ) -> Result<&DenseField<T>, ModelError>

Sample a field for the default component given by ImplicitModel::get_default_output Read more
Source§

fn sample_field_for_component( &mut self, model: &ImplicitModel<T>, component_tag: &str, ) -> Result<&DenseField<T>, ModelError>

Sample a field from one of the model components. Read more
Source§

fn iso_surface(&self, iso_val: T) -> Result<Mesh<T>, ModelError>

Extract an iso-surface for a certain iso value. Read more
Source§

fn field(&self) -> &DenseField<T>

Access the field data.
Source§

impl<T> Serialize for DenseField<T>
where T: Serialize,

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl<T: Float + 'static> ValueIterator<T> for DenseField<T>

Source§

fn iter_values<'a>(&'a self) -> Self::Iter<'a>

Returns an iterator that yields each value in the field’s data buffer.

Source§

type Iter<'a> = Copied<Iter<'a, T>>

A different Iterator<Item=T> for each borrow‐lifetime 'a.

Auto Trait Implementations§

§

impl<T> Freeze for DenseField<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for DenseField<T>
where T: RefUnwindSafe,

§

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

§

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

§

impl<T> Unpin for DenseField<T>
where T: Unpin,

§

impl<T> UnwindSafe for DenseField<T>
where T: UnwindSafe,

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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, 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> Serialize for T
where T: Serialize + ?Sized,

Source§

fn erased_serialize(&self, serializer: &mut dyn Serializer) -> Result<(), Error>

Source§

fn do_erased_serialize( &self, serializer: &mut dyn Serializer, ) -> Result<(), ErrorImpl>

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

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

Source§

impl<T> WasmNotSendSync for T

Source§

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