axiolid_topology/
entity.rs1use axiolid_core::Point3;
4
5use crate::{EdgeId, FaceId, LoopId, ShellId, VertexId};
6
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
9#[cfg_attr(
10 feature = "serde",
11 derive(serde::Serialize, serde::Deserialize),
12 serde(deny_unknown_fields)
13)]
14pub enum Orientation {
15 Forward,
17 Reversed,
19}
20
21#[derive(Debug, Clone, Copy, PartialEq)]
23#[cfg_attr(
24 feature = "serde",
25 derive(serde::Serialize, serde::Deserialize),
26 serde(deny_unknown_fields)
27)]
28pub struct Vertex {
29 pub position: Point3,
31}
32
33#[derive(Debug, Clone, PartialEq)]
35#[cfg_attr(
36 feature = "serde",
37 derive(serde::Serialize, serde::Deserialize),
38 serde(deny_unknown_fields)
39)]
40pub struct Edge<G> {
41 pub start: VertexId,
43 pub end: VertexId,
45 pub curve: Option<G>,
48}
49
50#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
63#[cfg_attr(
64 feature = "serde",
65 derive(serde::Serialize, serde::Deserialize),
66 serde(deny_unknown_fields)
67)]
68pub struct EdgeUse<G> {
69 pub edge: EdgeId,
71 pub orientation: Orientation,
73 pub pcurve: Option<G>,
75}
76
77#[derive(Debug, Clone, Default, PartialEq, Eq)]
79#[cfg_attr(
80 feature = "serde",
81 derive(serde::Serialize, serde::Deserialize),
82 serde(deny_unknown_fields)
83)]
84pub struct Loop<G> {
85 pub edges: Vec<EdgeUse<G>>,
87}
88
89#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
91#[cfg_attr(
92 feature = "serde",
93 derive(serde::Serialize, serde::Deserialize),
94 serde(deny_unknown_fields)
95)]
96pub struct FaceBound {
97 pub loop_id: LoopId,
99 pub orientation: Orientation,
101 pub outer: bool,
103}
104
105#[derive(Debug, Clone, PartialEq)]
107#[cfg_attr(
108 feature = "serde",
109 derive(serde::Serialize, serde::Deserialize),
110 serde(deny_unknown_fields)
111)]
112pub struct Face<G> {
113 pub surface: Option<G>,
115 pub bounds: Vec<FaceBound>,
117 pub orientation: Orientation,
119}
120
121#[derive(Debug, Clone, Default, PartialEq, Eq)]
123#[cfg_attr(
124 feature = "serde",
125 derive(serde::Serialize, serde::Deserialize),
126 serde(deny_unknown_fields)
127)]
128pub struct Shell {
129 pub faces: Vec<(FaceId, Orientation)>,
131 pub closed: bool,
133}
134
135#[derive(Debug, Clone, PartialEq, Eq)]
137#[cfg_attr(
138 feature = "serde",
139 derive(serde::Serialize, serde::Deserialize),
140 serde(deny_unknown_fields)
141)]
142pub struct Solid {
143 pub outer: ShellId,
145 pub voids: Vec<ShellId>,
147}