# Crate truck_topology[−][src]

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::*;
use std::iter::FromIterator;

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

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

// Create boundaries of faces as the wire.
// Edge is implemented the Copy trait.
let wire = vec![
Wire::from_iter(vec![&edge, &edge, &edge.inverse()]),
Wire::from_iter(vec![&edge, &edge, &edge.inverse()]),
Wire::from_iter(vec![&edge, &edge.inverse(), &edge.inverse()]),
Wire::from_iter(vec![&edge, &edge, &edge.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.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.

## Modules

 errors classifies the errors that can occur in this crate. face Defines the boundary iterator. shell classifies shell conditions and defines the face iterators. wire define the edge iterators and the vertex iterator.

## Structs

 CompressedShell Serialized compressed shell CompressedSolid Serialized compressed solid Edge Edge, which consists two vertices. Face Face, attatched to a simple and closed wire. Shell Shell, a connected compounded faces. Solid Solid, attached to a closed shells. Vertex Vertex, the minimum topological unit. Wire Wire, a path or cycle which consists some edges.

## Type Definitions

 EdgeID The id that does not depend on the direction of the edge. FaceID The id that does not depend on the direction of the face. Result `Result` with crate's errors. VertexID The id of vertex. `Copy` trait is implemented.