Skip to main content

Mesh

Struct Mesh 

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

Triangle mesh geometry decoded from, or prepared for, a Draco bitstream.

A mesh owns triangle topology and dereferences to its underlying PointCloud, where attributes and metadata are stored.

Implementations§

Source§

impl Mesh

Source

pub fn new() -> Self

Creates an empty mesh with no faces, points, attributes, or metadata.

Source

pub fn add_face(&mut self, face: Face)

Appends one triangle face.

Source

pub fn set_face(&mut self, face_id: FaceIndex, face: Face)

Sets a face, growing the face list with zeroed faces when needed.

Source

pub fn set_faces_from_flat_indices(&mut self, indices: &[u32])

Bulk-set all faces from a flat u32 index array (3 indices per face). Assumes set_num_faces has already been called with the right count.

Source

pub fn set_faces_from_u8_indices(&mut self, bytes: &[u8])

Bulk-set all faces from tightly packed u8 indices. Assumes set_num_faces has already been called with the right count.

Source

pub fn set_faces_from_le_u16_indices(&mut self, bytes: &[u8])

Bulk-set all faces from tightly packed little-endian u16 indices. Assumes set_num_faces has already been called with the right count.

Source

pub fn set_faces_from_le_u32_indices(&mut self, bytes: &[u8])

Bulk-set all faces from tightly packed little-endian u32 indices. Assumes set_num_faces has already been called with the right count.

Source

pub fn set_face_from_indices(&mut self, face_id: usize, indices: [u32; 3])

Sets one face from raw u32 point ids.

Source

pub fn face(&self, face_id: FaceIndex) -> Face

Returns the point indices for a face.

Source

pub fn num_faces(&self) -> usize

Returns the number of triangle faces.

Source

pub fn set_num_faces(&mut self, num_faces: usize)

Resizes the face list, filling new faces with point index zero.

Source

pub fn try_set_num_faces(&mut self, num_faces: usize) -> Status

Fallibly resizes the face list.

Source

pub fn deduplicate_point_ids(&mut self)

Deduplicate point IDs to match C++ Draco behavior.

This function remaps point indices such that:

  1. Points are assigned new IDs in the order they’re first encountered in faces
  2. Face indices are updated to use the new point IDs
  3. Attribute point mappings are updated accordingly

This is needed for binary compatibility with C++ Draco, which internally creates separate points for each face corner during OBJ loading and then deduplicates them in face-traversal order.

Methods from Deref<Target = PointCloud>§

Source

pub fn set_num_points(&mut self, num_points: usize)

Sets the number of logical points.

Source

pub fn add_attribute(&mut self, attribute: PointAttribute) -> i32

Adds an attribute and assigns it a unique id matching its attribute id.

Source

pub fn add_attribute_preserve_unique_id( &mut self, attribute: PointAttribute, ) -> i32

Adds an attribute while preserving its existing unique id.

Source

pub fn set_attribute(&mut self, att_id: i32, attribute: PointAttribute)

Places an attribute at att_id, growing the attribute list if needed.

Mirrors C++ PointCloud::SetAttribute: the attribute’s unique id is set to att_id. Any vacancies created when growing the list are filled with empty attributes.

Source

pub fn num_attributes(&self) -> i32

Returns the number of attributes.

Source

pub fn attribute_id_by_unique_id(&self, unique_id: u32) -> i32

Returns the attribute id for the given Draco unique id, or -1.

Mirrors C++ PointCloud::GetAttributeIdByUniqueId.

Source

pub fn attribute_by_unique_id(&self, unique_id: u32) -> Option<&PointAttribute>

Returns the attribute with the given Draco unique id.

Mirrors C++ PointCloud::GetAttributeByUniqueId.

Source

pub fn attribute(&self, att_id: i32) -> &PointAttribute

Returns an attribute by attribute id.

Source

pub fn try_attribute(&self, att_id: i32) -> Result<&PointAttribute, DracoError>

Fallibly returns an attribute by attribute id.

Source

pub fn attribute_mut(&mut self, att_id: i32) -> &mut PointAttribute

Returns a mutable attribute by attribute id.

Source

pub fn try_attribute_mut( &mut self, att_id: i32, ) -> Result<&mut PointAttribute, DracoError>

Fallibly returns a mutable attribute by attribute id.

Source

pub fn named_attribute_id(&self, att_type: GeometryAttributeType) -> i32

Returns the first attribute id with the requested semantic type, or -1.

Source

pub fn named_attribute( &self, att_type: GeometryAttributeType, ) -> Option<&PointAttribute>

Returns the first attribute with the requested semantic type.

Source

pub fn num_points(&self) -> usize

Returns the number of logical points.

Source

pub fn metadata(&self) -> Option<&GeometryMetadata>

Returns geometry metadata, if present.

Source

pub fn metadata_mut(&mut self) -> Option<&mut GeometryMetadata>

Returns mutable geometry metadata, if present.

Source

pub fn metadata_or_insert(&mut self) -> &mut GeometryMetadata

Returns geometry metadata, inserting an empty block when absent.

Source

pub fn set_metadata(&mut self, metadata: Option<GeometryMetadata>)

Replaces geometry metadata.

Source

pub fn attribute_metadata_by_unique_id( &self, attribute_unique_id: u32, ) -> Option<&AttributeMetadata>

Finds per-attribute metadata by Draco attribute unique id.

Source

pub fn attribute_metadata_by_string_entry( &self, entry_name: &str, entry_value: &str, ) -> Option<&AttributeMetadata>

Finds per-attribute metadata by a string metadata entry.

Source

pub fn set_attribute_metadata( &mut self, att_id: i32, metadata: Metadata, ) -> Result<(), DracoError>

Sets metadata for an attribute id.

Trait Implementations§

Source§

impl Clone for Mesh

Source§

fn clone(&self) -> Mesh

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for Mesh

Source§

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

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

impl Default for Mesh

Source§

fn default() -> Mesh

Returns the “default value” for a type. Read more
Source§

impl Deref for Mesh

Source§

type Target = PointCloud

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl DerefMut for Mesh

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.

Auto Trait Implementations§

§

impl Freeze for Mesh

§

impl RefUnwindSafe for Mesh

§

impl Send for Mesh

§

impl Sync for Mesh

§

impl Unpin for Mesh

§

impl UnsafeUnpin for Mesh

§

impl UnwindSafe for Mesh

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> 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<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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.