logo
Expand description

Incremental polygonal mesh construction.

This module provides traits for incrementally constructing mesh data structures. This API allows for meshes to be constructed in a way that is agnostic to the specific data structure used to represent the mesh.

Buildable is the primary trait of this API. It is implemented by mesh data structures and exposes various associated types for their associated data. Buildable exposes a builder type via its builder function. This builder type in turn provides additional builders that can be used to construct a mesh from surfaces and facets.

Examples

A function that generates a triangle from point geometry using builders:

use nalgebra::Point2;
use plexus::buffer::MeshBuffer3;
use plexus::builder::Buildable;
use plexus::geometry::FromGeometry;
use plexus::graph::MeshGraph;
use plexus::prelude::*;

type E2 = Point2<f64>;

fn trigon<B, T>(points: [T; 3]) -> Result<B, B::Error>
where
    B: Buildable,
    B::Vertex: FromGeometry<T>,
{
    let mut builder = B::builder();
    builder.surface_with(|builder| {
        let [a, b, c] = points;
        let a = builder.insert_vertex(a)?;
        let b = builder.insert_vertex(b)?;
        let c = builder.insert_vertex(c)?;
        builder.facets_with(|builder| builder.insert_facet(&[a, b, c], B::Facet::default()))
    })?;
    builder.build()
}

// `MeshBuffer` and `MeshGraph` implement the `Buildable` trait.
let graph: MeshGraph<E2> = trigon([(0.0, 0.0), (0.0, 1.0), (1.0, 1.0)]).unwrap();
let buffer: MeshBuffer3<usize, E2> = trigon([(0.0, 0.0), (0.0, 1.0), (1.0, 1.0)]).unwrap();

Traits

Polygonal mesh data structure that can be built incrementally.

Incremental polygonal mesh builder.