#edge #graphics #truck #topology #topological #shell #wire

truck-topology

拓扑结构:顶点、边、线、面、壳和实体

6个版本 (重大更改)

0.5.0 2022年12月21日
0.4.0 2022年5月24日
0.3.0 2021年12月4日
0.2.0 2021年2月21日
0.1.0 2020年12月28日

图形API 中排名 513

Download history 39/week @ 2024-03-11 88/week @ 2024-03-18 27/week @ 2024-03-25 91/week @ 2024-04-01 67/week @ 2024-04-08 66/week @ 2024-04-15 53/week @ 2024-04-22 31/week @ 2024-04-29 37/week @ 2024-05-06 46/week @ 2024-05-13 197/week @ 2024-05-20 68/week @ 2024-05-27 54/week @ 2024-06-03 127/week @ 2024-06-10 37/week @ 2024-06-17 33/week @ 2024-06-24

每月254 次下载
用于 5 个包(4个直接使用)

Apache-2.0

290KB
4.5K SLoC

truck-topology

Crates.io Docs.rs

拓扑结构:顶点、边、线、面、壳和实体


lib.rs:

拓扑结构:顶点、边、线、面、壳和实体

示例

以下示例代码描述了由本包作为实体模型描述的拓扑四面体。

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]);

元素和容器

truck_topology 中的主要结构包括4个拓扑元素和2个拓扑容器。

拓扑元素

以下结构是拓扑元素。

除了 Solid 外,每个拓扑元素都有一个独特的 id,用于每个实例。在高级包中,通过将此 id 映射到几何信息,可以绘制实体形状。

拓扑容器

以下结构是拓扑容器。

WireShell 的实体分别是 std::collections::VecDeque<Edge>std::vec::Vec<Face>,并且继承了许多来自 DerefDerefMut 的方法。这些容器用于创建高维拓扑元素,并在创建这些元素之前检查其规范性(例如连通性、封闭性等)。

依赖关系

~2.4–3.5MB
~70K SLoC