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>
impl<V, A> PolygonMesh<V, A>
Sourcepub fn expands<T>(
&self,
contraction: impl Fn(<A as Attributes<V>>::Output) -> T,
) -> PolygonMesh<usize, Vec<T>>where
T: Copy,
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>
impl<V, A> PolygonMesh<V, A>
Sourcepub fn new(attributes: A, faces: Faces<V>) -> PolygonMesh<V, A>
pub fn new(attributes: A, faces: Faces<V>) -> PolygonMesh<V, A>
Sourcepub fn try_new(
attributes: A,
faces: Faces<V>,
) -> Result<PolygonMesh<V, A>, Error<V>>
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.
Sourcepub const fn new_unchecked(attributes: A, faces: Faces<V>) -> PolygonMesh<V, A>
pub const fn new_unchecked(attributes: A, faces: Faces<V>) -> PolygonMesh<V, A>
constructor without boundary check
Sourcepub fn debug_new(attributes: A, faces: Faces<V>) -> PolygonMesh<V, A>
pub fn debug_new(attributes: A, faces: Faces<V>) -> PolygonMesh<V, A>
constructor, boundary check is acrivated only in debug mode.
Sourcepub const fn attributes(&self) -> &A
pub const fn attributes(&self) -> &A
Returns attributes
Sourcepub const fn tri_faces(&self) -> &Vec<[V; 3]>
pub const fn tri_faces(&self) -> &Vec<[V; 3]>
Returns the vector of all triangles of the polygon.
Sourcepub const fn quad_faces(&self) -> &Vec<[V; 4]>
pub const fn quad_faces(&self) -> &Vec<[V; 4]>
Returns the vector of all quadrangles.
Sourcepub const fn other_faces(&self) -> &Vec<Vec<V>>
pub const fn other_faces(&self) -> &Vec<Vec<V>>
Returns the vector of n-gons (n > 4).
Sourcepub fn face_iter(&self) -> impl Iterator<Item = &[V]>
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
Sourcepub fn face_iter_mut(&mut self) -> impl Iterator<Item = &mut [V]>
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
Sourcepub fn editor(&mut self) -> PolygonMeshEditor<'_, V, A>
pub fn editor(&mut self) -> PolygonMeshEditor<'_, V, A>
Creates an editor that performs boundary checking on dropped.
Sourcepub fn uncheck_editor(&mut self) -> PolygonMeshEditor<'_, V, A>
pub fn uncheck_editor(&mut self) -> PolygonMeshEditor<'_, V, A>
Creates an editor that does NOT perform boundary checking on dropped.
Sourcepub fn debug_editor(&mut self) -> PolygonMeshEditor<'_, V, A>
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
impl PolygonMesh
Sourcepub fn merge(&mut self, mesh: PolygonMesh)
pub fn merge(&mut self, mesh: PolygonMesh)
Returns a polygon mesh merged self and mesh.
Sourcepub fn bounding_box(&self) -> BoundingBox<Point3<f64>>
pub fn bounding_box(&self) -> BoundingBox<Point3<f64>>
Creates the bounding box of the polygon mesh.
Sourcepub fn to_positions_mesh(&self) -> PolygonMesh<usize, Vec<Point3<f64>>>
pub fn to_positions_mesh(&self) -> PolygonMesh<usize, Vec<Point3<f64>>>
Returns a polygon mesh with only positions information.
Source§impl PolygonMesh
impl PolygonMesh
Sourcepub fn positions_mut(&mut self) -> &mut [Point3<f64>]
pub fn positions_mut(&mut self) -> &mut [Point3<f64>]
Returns the mutable slice of all positions.
Sourcepub fn push_position(&mut self, position: Point3<f64>)
pub fn push_position(&mut self, position: Point3<f64>)
Adds a position.
Sourcepub fn extend_positions<I>(&mut self, iter: I)
pub fn extend_positions<I>(&mut self, iter: I)
Extend positions by iterator.
Sourcepub const fn uv_coords(&self) -> &Vec<Vector2<f64>>
pub const fn uv_coords(&self) -> &Vec<Vector2<f64>>
Returns the vector of all uv (texture) coordinates.
Sourcepub fn uv_coords_mut(&mut self) -> &mut [Vector2<f64>]
pub fn uv_coords_mut(&mut self) -> &mut [Vector2<f64>]
Returns the mutable slice of all uv (texture) coordinates.
Sourcepub fn push_uv_coord(&mut self, uv_coord: Vector2<f64>)
pub fn push_uv_coord(&mut self, uv_coord: Vector2<f64>)
Adds a uv (texture) coordinate.
Sourcepub fn extend_uv_coords<I>(&mut self, iter: I)
pub fn extend_uv_coords<I>(&mut self, iter: I)
Extend uv (texture) coordinates by iterator.
Sourcepub fn normals_mut(&mut self) -> &mut [Vector3<f64>]
pub fn normals_mut(&mut self) -> &mut [Vector3<f64>]
Returns the mutable slice of all normals.
Sourcepub fn extend_normals<I>(&mut self, iter: I)
pub fn extend_normals<I>(&mut self, iter: I)
Extend normals by iterator
Trait Implementations§
Source§impl<V, A> Clone for PolygonMesh<V, A>
impl<V, A> Clone for PolygonMesh<V, A>
Source§fn clone(&self) -> PolygonMesh<V, A>
fn clone(&self) -> PolygonMesh<V, A>
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl CreateBuffers for PolygonMesh
impl CreateBuffers for PolygonMesh
Source§fn buffers(
&self,
vertex_usage: BufferUsages,
index_usage: BufferUsages,
device: &Device,
) -> (BufferHandler, BufferHandler)
fn buffers( &self, vertex_usage: BufferUsages, index_usage: BufferUsages, device: &Device, ) -> (BufferHandler, BufferHandler)
Source§impl<V, A> Debug for PolygonMesh<V, A>
impl<V, A> Debug for PolygonMesh<V, A>
Source§impl<V, A> Default for PolygonMesh<V, A>where
A: Default,
impl<V, A> Default for PolygonMesh<V, A>where
A: Default,
Source§fn default() -> PolygonMesh<V, A>
fn default() -> PolygonMesh<V, A>
Source§impl<'de, V, A> Deserialize<'de> for PolygonMesh<V, A>
impl<'de, V, A> Deserialize<'de> for PolygonMesh<V, A>
Source§fn deserialize<D>(
deserializer: D,
) -> Result<PolygonMesh<V, A>, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
fn deserialize<D>(
deserializer: D,
) -> Result<PolygonMesh<V, A>, <D as Deserializer<'de>>::Error>where
D: Deserializer<'de>,
Source§impl FromIterator<StlFace> for PolygonMesh
impl FromIterator<StlFace> for PolygonMesh
Source§fn from_iter<I>(iter: I) -> PolygonMeshwhere
I: IntoIterator<Item = StlFace>,
fn from_iter<I>(iter: I) -> PolygonMeshwhere
I: IntoIterator<Item = StlFace>,
Source§impl<'a> IntoStlIterator for &'a PolygonMesh
impl<'a> IntoStlIterator for &'a PolygonMesh
Source§type IntoIter = PolygonMeshStlFaceIterator<'a>
type IntoIter = PolygonMeshStlFaceIterator<'a>
Source§fn into_iter(self) -> <&'a PolygonMesh as IntoStlIterator>::IntoIter
fn into_iter(self) -> <&'a PolygonMesh as IntoStlIterator>::IntoIter
Source§impl Invertible for PolygonMesh
impl Invertible for PolygonMesh
Source§impl<V, A> PartialEq for PolygonMesh<V, A>
impl<V, A> PartialEq for PolygonMesh<V, A>
Source§impl<V, A> Serialize for PolygonMesh<V, A>
impl<V, A> Serialize for PolygonMesh<V, A>
Source§fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
__serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
Source§impl ToInstance<PolygonInstance> for PolygonMesh
impl ToInstance<PolygonInstance> for PolygonMesh
Source§type State = PolygonState
type State = PolygonState
Source§fn to_instance(
&self,
handler: &DeviceHandler,
shaders: &PolygonShaders,
state: &PolygonState,
) -> PolygonInstance
fn to_instance( &self, handler: &DeviceHandler, shaders: &PolygonShaders, state: &PolygonState, ) -> PolygonInstance
Instance from self.Source§impl ToInstance<WireFrameInstance> for PolygonMesh
impl ToInstance<WireFrameInstance> for PolygonMesh
Source§type State = WireFrameState
type State = WireFrameState
Source§fn to_instance(
&self,
handler: &DeviceHandler,
shaders: &WireShaders,
state: &WireFrameState,
) -> WireFrameInstance
fn to_instance( &self, handler: &DeviceHandler, shaders: &WireShaders, state: &WireFrameState, ) -> WireFrameInstance
Instance from self.impl<V, A> Eq for PolygonMesh<V, A>
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>where
A: RefUnwindSafe,
V: RefUnwindSafe,
impl<V, A> Send for PolygonMesh<V, A>
impl<V, A> Sync for PolygonMesh<V, A>
impl<V, A> Unpin for PolygonMesh<V, A>
impl<V, A> UnwindSafe for PolygonMesh<V, A>where
A: UnwindSafe,
V: UnwindSafe,
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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
impl<T> DowncastSync for T
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().