PolygonMesh

Struct PolygonMesh 

Source
pub struct PolygonMesh<V = StandardVertex, A = StandardAttributes> { /* private fields */ }
Expand description

Polygon mesh

The polygon data is held in a method compliant with wavefront obj. Position, uv (texture) coordinates, and normal vectors are held in separate arrays, and each face vertex accesses those values by an indices triple.

Implementations§

Source§

impl<V, A> PolygonMesh<V, A>
where V: Copy + Hash + Debug + Eq, A: Attributes<V>,

Source

pub fn expands<T>( &self, contraction: impl Fn(<A as Attributes<V>>::Output) -> T, ) -> PolygonMesh<usize, Vec<T>>
where T: Copy,

Contract attributes and expand polygon.

§Examples
use truck_polymesh::*;
let polygon = PolygonMesh::new(
    StandardAttributes {
        positions: vec![
            Point3::new(0.0, 0.0, 0.0),
            Point3::new(1.0, 0.0, 0.0),
            Point3::new(0.0, 1.0, 0.0),
            Point3::new(1.0, 1.0, 0.0),
        ],
        normals: vec![
            Vector3::new(0.0, 0.0, 1.0),
            Vector3::new(0.0, 0.0, -1.0),
        ],
        ..Default::default()
    },
    Faces::from_iter(&[
        &[(0, None, Some(0)), (1, None, Some(0)), (2, None, Some(0))],
        &[(3, None, Some(1)), (1, None, Some(1)), (2, None, Some(1))],
    ])
);
let expands = polygon.expands(|attr| (attr.position, attr.normal.unwrap()));
assert_eq!(
    expands,
    PolygonMesh::<usize, Vec<(Point3, Vector3)>>::new(
        vec![
           (Point3::new(0.0, 0.0, 0.0), Vector3::new(0.0, 0.0, 1.0)),
           (Point3::new(1.0, 0.0, 0.0), Vector3::new(0.0, 0.0, 1.0)),
           (Point3::new(0.0, 1.0, 0.0), Vector3::new(0.0, 0.0, 1.0)),
           (Point3::new(1.0, 1.0, 0.0), Vector3::new(0.0, 0.0, -1.0)),
           (Point3::new(1.0, 0.0, 0.0), Vector3::new(0.0, 0.0, -1.0)),
           (Point3::new(0.0, 1.0, 0.0), Vector3::new(0.0, 0.0, -1.0)),
        ],
        Faces::from_iter(&[[0, 1, 2], [3, 4, 5]]),
    )
);
Source§

impl<V, A> PolygonMesh<V, A>
where V: Copy + Debug, A: Attributes<V>,

Source

pub fn new(attributes: A, faces: Faces<V>) -> PolygonMesh<V, A>

complete constructor

§Panics

Panic occurs if there is an index is out of range.

§Remarks

This method does not check whether the normal is normalized or not.

Source

pub fn try_new( attributes: A, faces: Faces<V>, ) -> Result<PolygonMesh<V, A>, Error<V>>

complete constructor

§Errors

Returns Error::OutOfRange if there is an index is out of range.

§Remarks

This method does not check whether the normal is normalized or not.

Source

pub const fn new_unchecked(attributes: A, faces: Faces<V>) -> PolygonMesh<V, A>

constructor without boundary check

Source

pub fn debug_new(attributes: A, faces: Faces<V>) -> PolygonMesh<V, A>

constructor, boundary check is acrivated only in debug mode.

Source

pub const fn attributes(&self) -> &A

Returns attributes

Source

pub const fn faces(&self) -> &Faces<V>

Returns the faces of the polygon.

Source

pub const fn tri_faces(&self) -> &Vec<[V; 3]>

Returns the vector of all triangles of the polygon.

Source

pub const fn quad_faces(&self) -> &Vec<[V; 4]>

Returns the vector of all quadrangles.

Source

pub const fn other_faces(&self) -> &Vec<Vec<V>>

Returns the vector of n-gons (n > 4).

Source

pub fn face_iter(&self) -> impl Iterator<Item = &[V]>

Returns the iterator of the slice.

By the internal optimization, this iterator does not runs in the simple order in which they are registered, but runs order: triangle, square, and the others. cf: Faces::face_iter

Source

pub fn face_iter_mut(&mut self) -> impl Iterator<Item = &mut [V]>

Returns the iterator of the slice.

By the internal optimization, this iterator does not runs in the simple order in which they are registered, but runs order: triangle, square, and the others. cf: Faces::face_iter

Source

pub fn editor(&mut self) -> PolygonMeshEditor<'_, V, A>

Creates an editor that performs boundary checking on dropped.

Source

pub fn uncheck_editor(&mut self) -> PolygonMeshEditor<'_, V, A>

Creates an editor that does NOT perform boundary checking on dropped.

Source

pub fn debug_editor(&mut self) -> PolygonMeshEditor<'_, V, A>

Creates an editor that performs boundary checking on dropped ONLY in debug build.

Source§

impl PolygonMesh

Source

pub fn merge(&mut self, mesh: PolygonMesh)

Returns a polygon mesh merged self and mesh.

Source

pub fn bounding_box(&self) -> BoundingBox<Point3<f64>>

Creates the bounding box of the polygon mesh.

Source

pub fn to_positions_mesh(&self) -> PolygonMesh<usize, Vec<Point3<f64>>>

Returns a polygon mesh with only positions information.

Source§

impl PolygonMesh

Source

pub const fn positions(&self) -> &Vec<Point3<f64>>

Returns the vector of all positions.

Source

pub fn positions_mut(&mut self) -> &mut [Point3<f64>]

Returns the mutable slice of all positions.

Source

pub fn push_position(&mut self, position: Point3<f64>)

Adds a position.

Source

pub fn extend_positions<I>(&mut self, iter: I)
where I: IntoIterator<Item = Point3<f64>>,

Extend positions by iterator.

Source

pub const fn uv_coords(&self) -> &Vec<Vector2<f64>>

Returns the vector of all uv (texture) coordinates.

Source

pub fn uv_coords_mut(&mut self) -> &mut [Vector2<f64>]

Returns the mutable slice of all uv (texture) coordinates.

Source

pub fn push_uv_coord(&mut self, uv_coord: Vector2<f64>)

Adds a uv (texture) coordinate.

Source

pub fn extend_uv_coords<I>(&mut self, iter: I)
where I: IntoIterator<Item = Vector2<f64>>,

Extend uv (texture) coordinates by iterator.

Source

pub const fn normals(&self) -> &Vec<Vector3<f64>>

Returns the vector of all normals.

Source

pub fn normals_mut(&mut self) -> &mut [Vector3<f64>]

Returns the mutable slice of all normals.

Source

pub fn extend_normals<I>(&mut self, iter: I)
where I: IntoIterator<Item = Vector3<f64>>,

Extend normals by iterator

Trait Implementations§

Source§

impl<V, A> Clone for PolygonMesh<V, A>
where V: Clone, A: Clone,

Source§

fn clone(&self) -> PolygonMesh<V, A>

Returns a duplicate of the value. Read more
1.0.0§

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

Performs copy-assignment from source. Read more
Source§

impl CreateBuffers for PolygonMesh

Source§

fn buffers( &self, vertex_usage: BufferUsages, index_usage: BufferUsages, device: &Device, ) -> (BufferHandler, BufferHandler)

Creates buffer handlers of attributes and indices.
Source§

impl<V, A> Debug for PolygonMesh<V, A>
where V: Debug, A: Debug,

Source§

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

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

impl<V, A> Default for PolygonMesh<V, A>
where A: Default,

Source§

fn default() -> PolygonMesh<V, A>

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

impl<'de, V, A> Deserialize<'de> for PolygonMesh<V, A>
where V: Copy + Debug + Deserialize<'de>, A: Attributes<V> + Deserialize<'de>,

Source§

fn deserialize<D>( deserializer: D, ) -> Result<PolygonMesh<V, A>, <D as Deserializer<'de>>::Error>
where D: Deserializer<'de>,

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

impl FromIterator<StlFace> for PolygonMesh

Source§

fn from_iter<I>(iter: I) -> PolygonMesh
where I: IntoIterator<Item = StlFace>,

Creates a value from an iterator. Read more
Source§

impl<'a> IntoStlIterator for &'a PolygonMesh

Source§

type IntoIter = PolygonMeshStlFaceIterator<'a>

Which kind of iterator are we turning this into?
Source§

fn into_iter(self) -> <&'a PolygonMesh as IntoStlIterator>::IntoIter

Creates an iterator from a value.
Source§

impl Invertible for PolygonMesh

Source§

fn invert(&mut self)

Inverts self
Source§

fn inverse(&self) -> PolygonMesh

Returns the inverse.
Source§

impl<V, A> PartialEq for PolygonMesh<V, A>
where V: PartialEq, A: PartialEq,

Source§

fn eq(&self, other: &PolygonMesh<V, A>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<V, A> Serialize for PolygonMesh<V, A>
where V: Serialize, A: Serialize,

Source§

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

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

impl ToInstance<PolygonInstance> for PolygonMesh

Source§

type State = PolygonState

Configuration descriptor for instance.
Source§

fn to_instance( &self, handler: &DeviceHandler, shaders: &PolygonShaders, state: &PolygonState, ) -> PolygonInstance

Creates Instance from self.
Source§

impl ToInstance<WireFrameInstance> for PolygonMesh

Source§

type State = WireFrameState

Configuration descriptor for instance.
Source§

fn to_instance( &self, handler: &DeviceHandler, shaders: &WireShaders, state: &WireFrameState, ) -> WireFrameInstance

Creates Instance from self.
Source§

impl<V, A> Eq for PolygonMesh<V, A>
where V: Eq, A: Eq,

Source§

impl<V, A> StructuralPartialEq for PolygonMesh<V, A>

Auto Trait Implementations§

§

impl<V, A> Freeze for PolygonMesh<V, A>
where A: Freeze,

§

impl<V, A> RefUnwindSafe for PolygonMesh<V, A>

§

impl<V, A> Send for PolygonMesh<V, A>
where A: Send, V: Send,

§

impl<V, A> Sync for PolygonMesh<V, A>
where A: Sync, V: Sync,

§

impl<V, A> Unpin for PolygonMesh<V, A>
where A: Unpin, V: Unpin,

§

impl<V, A> UnwindSafe for PolygonMesh<V, A>
where A: UnwindSafe, V: UnwindSafe,

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
§

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

§

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<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<T> From<T> for T

§

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
§

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

§

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<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
§

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

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

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

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

Uses borrowed data to replace owned data, usually by cloning. Read more
§

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

§

type Error = Infallible

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

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

Performs the conversion.
§

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

§

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

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

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> 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,