lib3mf_core/model/
slice.rs

1use crate::model::ResourceId;
2use serde::{Deserialize, Serialize};
3
4/// A stack of 2D slices defining a geometry.
5#[derive(Debug, Clone, Default, Serialize, Deserialize)]
6pub struct SliceStack {
7    pub id: ResourceId,
8    #[serde(default)]
9    pub z_bottom: f32,
10    pub slices: Vec<Slice>,
11    pub refs: Vec<SliceRef>,
12}
13
14#[derive(Debug, Clone, Default, Serialize, Deserialize)]
15pub struct Slice {
16    pub z_top: f32,
17    pub vertices: Vec<Vertex2D>,
18    pub polygons: Vec<Polygon>,
19}
20
21#[derive(Debug, Clone, Copy, Default, Serialize, Deserialize)]
22pub struct Vertex2D {
23    pub x: f32,
24    pub y: f32,
25}
26
27#[derive(Debug, Clone, Default, Serialize, Deserialize)]
28pub struct Polygon {
29    /// Index of the start vertex.
30    pub start_segment: u32,
31    pub segments: Vec<Segment>,
32}
33
34#[derive(Debug, Clone, Default, Serialize, Deserialize)]
35pub struct Segment {
36    /// Index of the vertex to connect to.
37    pub v2: u32,
38    #[serde(skip_serializing_if = "Option::is_none")]
39    pub p1: Option<u32>,
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub p2: Option<u32>,
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub pid: Option<ResourceId>,
44}
45
46#[derive(Debug, Clone, Default, Serialize, Deserialize)]
47pub struct SliceRef {
48    pub slice_stack_id: ResourceId,
49    pub slice_path: String,
50}