axiolid_profile/
contour.rs1use axiolid_core::Interval;
4use axiolid_curve::Curve2;
5
6#[derive(Debug, Clone, PartialEq)]
8#[cfg_attr(
9 feature = "serde",
10 derive(serde::Serialize, serde::Deserialize),
11 serde(deny_unknown_fields)
12)]
13pub struct ProfileSegment {
14 pub curve: Curve2,
16 pub domain: Interval,
21 pub same_sense: bool,
23}
24
25#[derive(Debug, Clone, Default, PartialEq)]
27#[cfg_attr(
28 feature = "serde",
29 derive(serde::Serialize, serde::Deserialize),
30 serde(deny_unknown_fields)
31)]
32pub struct Contour {
33 pub segments: Vec<ProfileSegment>,
35}
36
37impl Contour {
38 pub fn new(segments: Vec<ProfileSegment>) -> Self {
40 Self { segments }
41 }
42
43 pub fn len(&self) -> usize {
45 self.segments.len()
46 }
47
48 pub fn is_empty(&self) -> bool {
50 self.segments.is_empty()
51 }
52}
53
54#[derive(Debug, Clone, Default, PartialEq)]
56#[cfg_attr(
57 feature = "serde",
58 derive(serde::Serialize, serde::Deserialize),
59 serde(deny_unknown_fields)
60)]
61pub struct ContourProfile {
62 pub outer: Contour,
64 pub holes: Vec<Contour>,
66}