Struct gut::mesh::uniform_poly_mesh::TriMesh[][src]

pub struct TriMesh<T: Real> {
    pub vertex_positions: IntrinsicAttribute<[T; 3], VertexIndex>,
    pub indices: IntrinsicAttribute<[usize; 3], FaceIndex>,
    pub vertex_attributes: AttribDict<VertexIndex>,
    pub face_attributes: AttribDict<FaceIndex>,
    pub face_vertex_attributes: AttribDict<FaceVertexIndex>,
    pub face_edge_attributes: AttribDict<FaceEdgeIndex>,
    pub attribute_value_cache: AttribValueCache,
}

Fields

vertex_positions: IntrinsicAttribute<[T; 3], VertexIndex>

Vertex positions.

indices: IntrinsicAttribute<[usize; 3], FaceIndex>

Triples of indices into vertices representing triangles.

vertex_attributes: AttribDict<VertexIndex>

Vertex attributes.

face_attributes: AttribDict<FaceIndex>

Triangle attributes.

face_vertex_attributes: AttribDict<FaceVertexIndex>

Triangle vertex attributes.

face_edge_attributes: AttribDict<FaceEdgeIndex>

Triangle edge attributes.

attribute_value_cache: AttribValueCache

Indirect attribute value cache

Implementations

impl<T: Real> TriMesh<T>[src]

impl<T: Real> TriMesh<T>[src]

pub fn merge_with_vertex_source<'a, I>(
    meshes: I,
    source_attrib: &str
) -> Result<Self, Error> where
    I: IntoIterator<Item = &'a Self>, 
[src]

Merge a iterator of meshes into a single distinct mesh.

This version of merge accepts an attribute name for the source index on vertices.

The mesh vertices will be merged in the order given by the source attribute. This is useful when merging previously split up meshes. The source attribute needs to have type usize.

If the source attribute does not exist in at least one of the given meshes, then None is returned and the merge is aborted.

This is a non-destructive merge --- both original meshes remain intact. This also means that this way of merging is somewhat more expensive than a merge without any source indices.

impl<T: Real> TriMesh<T>[src]

pub fn split_vertices_by_face_vertex_attrib(&mut self, attrib_name: &str)[src]

Split vertices by a given face-vertex attribute.

If a pair of face-vertices have different values for the same vertex, then they will be split into distinct vertices. New vertex positions are appended at the end of the vertex position array.

If the given attribute doesn't exist, then nothing is changed.

impl<T: Real> TriMesh<T>[src]

pub fn new(verts: Vec<[T; 3]>, indices: Vec<[usize; 3]>) -> TriMesh<T>[src]

pub fn face_iter(&self) -> Iter<'_, [usize; 3]>[src]

Iterate over each face.

pub fn face_iter_mut(&mut self) -> IterMut<'_, [usize; 3]>[src]

Iterate mutably over each face.

pub fn face<FI: Into<FaceIndex>>(&self, fidx: FI) -> &[usize; 3][src]

Face accessor. These are vertex indices.

pub fn faces(&self) -> &[[usize; 3]][src]

Return a slice of individual faces.

pub fn reverse(&mut self)[src]

Reverse the order of each polygon in this mesh.

pub fn reversed(mut self: Self) -> Self[src]

Reverse the order of each polygon in this mesh. This is the consuming version of the reverse method.

pub fn sort_vertices_by_key<K, F>(&mut self, f: F) where
    F: FnMut(usize) -> K,
    K: Ord
[src]

Sort vertices by the given key values.

impl<T: Real> TriMesh<T>[src]

pub fn tri_iter<'a>(&'a self) -> impl Iterator<Item = Triangle<T>> + 'a[src]

Triangle iterator.

use gut::mesh::TriMesh;
use gut::prim::Triangle;

let verts = vec![[0.0, 0.0, 0.0], [0.0, 0.0, 1.0], [0.0, 1.0, 0.0]];
let mesh = TriMesh::new(verts.clone(), vec![[0, 1, 2]]);
let tri = Triangle::from_indexed_slice(&[0, 1, 2], verts.as_slice());
assert_eq!(Some(tri), mesh.tri_iter().next());

pub fn tri_from_indices(&self, indices: &[usize; 3]) -> Triangle<T>[src]

Get a tetrahedron primitive corresponding to the given vertex indices.

Trait Implementations

impl<T: Real> Attrib for TriMesh<T>[src]

impl<T: Real> AttribPromote<FaceVertexIndex, VertexIndex> for TriMesh<T>[src]

impl<T: Clone + Real> Clone for TriMesh<T>[src]

impl<T: Debug + Real> Debug for TriMesh<T>[src]

impl<T: Real> Default for TriMesh<T>[src]

fn default() -> Self[src]

Produce an empty mesh. This is not particularly useful on its own, however it can be used as a null case for various mesh algorithms.

impl<T: Real> FaceAttrib for TriMesh<T>[src]

impl<T: Real> FaceEdge for TriMesh<T>[src]

impl<T: Real> FaceEdgeAttrib for TriMesh<T>[src]

impl<T: Real> FaceVertex for TriMesh<T>[src]

impl<T: Real> FaceVertexAttrib for TriMesh<T>[src]

impl<T: Real> From<PolyMesh<T>> for TriMesh<T>[src]

Convert a triangle mesh to a polygon mesh.

impl<T: Real> From<TetMesh<T>> for TriMesh<T>[src]

impl<T: Real> From<TriMesh<T>> for PointCloud<T>[src]

Convert a triangle mesh to a point cloud by erasing all triangle data.

impl<T: Real> From<TriMesh<T>> for PolyMesh<T>[src]

Convert a triangle mesh into a polygon mesh.

impl<T: Real> From<TriMesh<T>> for TriMeshExt<T>[src]

impl<T: Real> From<TriMeshExt<T>> for TriMesh<T>[src]

impl<T: Real> Merge for TriMesh<T>[src]

fn merge(&mut self, other: Self) -> &mut Self[src]

Attributes with the same name but different types won't be merged.

impl<T: Real> NumFaces for TriMesh<T>[src]

impl<T: Real> NumVertices for TriMesh<T>[src]

impl<T: PartialEq + Real> PartialEq<TriMesh<T>> for TriMesh<T>[src]

impl<T: Real> Split<VertexIndex> for TriMesh<T>[src]

impl<T: Real> SplitIntoConnectedComponents<VertexIndex, FaceIndex> for TriMesh<T>[src]

impl<T: Real> StructuralPartialEq for TriMesh<T>[src]

impl<T: Real> VertexAttrib for TriMesh<T>[src]

impl<T: Real> VertexPositions for TriMesh<T>[src]

type Element = [T; 3]

Auto Trait Implementations

impl<T> RefUnwindSafe for TriMesh<T> where
    T: RefUnwindSafe
[src]

impl<T> Send for TriMesh<T>[src]

impl<T> Sync for TriMesh<T>[src]

impl<T> Unpin for TriMesh<T> where
    T: Unpin
[src]

impl<T> UnwindSafe for TriMesh<T> where
    T: UnwindSafe
[src]

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> AsSlice<T> for T[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<M, T> BoundingBox<T> for M where
    T: Real,
    M: VertexPositions<Element = [T; 3]>, 
[src]

pub fn bounding_box(&Self) -> BBox<T>[src]

Compute the bounding box of this object.

impl<T> CloneBytes for T where
    T: 'static + Clone
[src]

impl<M> Connectivity<FaceVertexIndex, VertexIndex> for M where
    M: NumVertices + NumFaces + FaceVertex
[src]

type Topo = (Vec<usize, Global>, Vec<usize, Global>)

Additional topology that may aid in computing connectivity. Read more

impl<M> Connectivity<VertexIndex, FaceIndex> for M where
    M: NumVertices + NumFaces + FaceVertex
[src]

type Topo = (Vec<usize, Global>, Vec<usize, Global>)

Additional topology that may aid in computing connectivity. Read more

impl<T> DebugBytes for T where
    T: 'static + Debug
[src]

impl<T> Downcast for T where
    T: Any

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

impl<T> DropBytes for T where
    T: 'static, 
[src]

impl<T> Elem for T where
    T: Any + DropBytes
[src]

impl<T> From<T> for T[src]

impl<'a, S, I> Get<'a, I> for S where
    I: GetIndex<'a, S>, 
[src]

type Output = <I as GetIndex<'a, S>>::Output

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<S, I> Isolate<I> for S where
    I: IsolateIndex<S>, 
[src]

type Output = <I as IsolateIndex<S>>::Output

impl<T> PartialEqBytes for T where
    T: 'static + PartialEq<T>, 
[src]

impl<M> Partition for M where
    M: Attrib
[src]

impl<T> Pointable for T

type Init = T

The type for initializers.

impl<T, N> PushArrayToVec<N> for T where
    T: Clone,
    N: Array<T>, 
[src]

impl<T, M> Rotate<T> for M where
    T: BaseFloat,
    M: VertexPositions<Element = [T; 3]>, 
[src]

pub fn rotate_by_matrix(&mut Self, [[T; 3]; 3])[src]

Rotate the mesh using the given column-major rotation matrix.

impl<S, T> Rotated<T> for S where
    T: BaseFloat,
    S: Rotate<T>, 
[src]

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<T, M> Scale<T> for M where
    T: BaseFloat,
    M: VertexPositions<Element = [T; 3]>, 
[src]

pub fn scale(&mut Self, [T; 3])[src]

Scale a mesh in 3D by a given vector of scale factors. s = [1.0; 3] corresponds to a noop.

impl<S, T> Scaled<T> for S where
    T: Copy,
    S: Scale<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, M> Translate<T> for M where
    T: BaseFloat,
    M: VertexPositions<Element = [T; 3]>, 
[src]

pub fn translate(&mut Self, [T; 3])[src]

Translate the mesh by the given translation vector (displacement) t.

impl<S, T> Translated<T> for S where
    S: Translate<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.

impl<M, T> VertexMesh<T> for M where
    T: Real,
    M: Attrib + VertexAttrib + NumVertices + VertexPositions<Element = [T; 3]>, 
[src]