#topological #topology #edge

truck-topology

topological structs: vertex, edge, wire, face, shell, and solid

7 releases (breaking)

0.6.0 Sep 20, 2024
0.5.0 Dec 21, 2022
0.4.0 May 24, 2022
0.3.0 Dec 4, 2021
0.1.0 Dec 28, 2020

#522 in Math

Download history 24/week @ 2024-07-19 34/week @ 2024-07-26 20/week @ 2024-08-02 13/week @ 2024-08-09 9/week @ 2024-08-16 24/week @ 2024-08-23 19/week @ 2024-08-30 13/week @ 2024-09-06 9/week @ 2024-09-13 176/week @ 2024-09-20 60/week @ 2024-09-27 26/week @ 2024-10-04 40/week @ 2024-10-11 73/week @ 2024-10-18 30/week @ 2024-10-25 58/week @ 2024-11-01

204 downloads per month
Used in 5 crates (4 directly)

Apache-2.0

300KB
4.5K SLoC

truck-topology

Crates.io Docs.rs

Topological structs: vertex, edge, wire, face, shell, and solid


lib.rs:

Topological structs: vertex, edge, wire, face, shell, and solid

Examples

The following sample code is a description of a topological tetrahedron as a solid model by this package.

use truck_topology::*;

// Create vertices. A tetrahedron has four vertices.
let v = Vertex::news(&[(), (), (), ()]);

// Create edges. Vertex is implemented the Copy trait.
let edge = [
    Edge::new(&v[0], &v[1], ()),
    Edge::new(&v[0], &v[2], ()),
    Edge::new(&v[0], &v[3], ()),
    Edge::new(&v[1], &v[2], ()),
    Edge::new(&v[1], &v[3], ()),
    Edge::new(&v[2], &v[3], ()),
];

// Create boundaries of faces as the wire.
// Edge is implemented the Copy trait.
let wire = vec![
    Wire::from_iter(vec![&edge[0], &edge[3], &edge[1].inverse()]),
    Wire::from_iter(vec![&edge[1], &edge[5], &edge[2].inverse()]),
    Wire::from_iter(vec![&edge[2], &edge[4].inverse(), &edge[0].inverse()]),
    Wire::from_iter(vec![&edge[3], &edge[5], &edge[4].inverse()]),
];

// Create faces by the boundary wires.
// The boundary of face must be simple and closed.
let mut face: Vec<Face<_, _, _>> = wire.into_iter().map(|wire| Face::new(vec![wire], ())).collect();
face[3].invert();

// Create shell of faces. Shell can be created by the Vec<Face>.
let shell: Shell<_, _, _> = face.into();

// Create a tetrahedron solid by the boundary shell.
// The boundaries of a solid must be closed and oriented.
let solid = Solid::new(vec![shell]);

Elements and containers

Main structures in truck_topology consist 4 topological elements and 2 topological containers.

Topological elements

The following structures are topological elements.

Except Solid, each topological element has a unique id for each instance. In higher-level packages, by mapping this id to geometric information, you can draw a solid shape.

Topological containers

The following structures are topological container.

The entities of Wire and Shell are std::collections::VecDeque<Edge> and std::vec::Vec<Face>, respectively, and many methods inherited by Deref and DerefMut. These containers are used for creating higher-dimentional topological elements and checked the regularity (e.g. connectivity, closedness, and so on) before creating these elements.

Features

  • nightly – Use features available only in a nightly toolchain.
  • rclite – Use of rclite::Arc instead of std::syn::Arc. The latter uses more memory and is potentially slower than the former. On by default.

Dependencies

~3.5–9MB
~100K SLoC