Skip to main content

axiolid_curve/
conic.rs

1//! Exact conic curve data.
2
3use axiolid_core::{Frame2, Frame3, Scalar};
4
5/// Circle in a two-dimensional frame.
6#[derive(Debug, Clone, Copy, PartialEq)]
7#[cfg_attr(
8    feature = "serde",
9    derive(serde::Serialize, serde::Deserialize),
10    serde(deny_unknown_fields)
11)]
12pub struct Circle2 {
13    /// Local frame.
14    pub frame: Frame2,
15    /// Radius. Validation rejects non-positive values.
16    pub radius: Scalar,
17}
18
19/// Circle in a three-dimensional plane frame.
20#[derive(Debug, Clone, Copy, PartialEq)]
21#[cfg_attr(
22    feature = "serde",
23    derive(serde::Serialize, serde::Deserialize),
24    serde(deny_unknown_fields)
25)]
26pub struct Circle3 {
27    /// Local frame; `z` is the plane normal.
28    pub frame: Frame3,
29    /// Radius. Validation rejects non-positive values.
30    pub radius: Scalar,
31}
32
33/// Ellipse in a two-dimensional frame.
34#[derive(Debug, Clone, Copy, PartialEq)]
35#[cfg_attr(
36    feature = "serde",
37    derive(serde::Serialize, serde::Deserialize),
38    serde(deny_unknown_fields)
39)]
40pub struct Ellipse2 {
41    /// Local frame.
42    pub frame: Frame2,
43    /// Semi-axis along local x.
44    pub semi_axis_x: Scalar,
45    /// Semi-axis along local y.
46    pub semi_axis_y: Scalar,
47}
48
49/// Ellipse in a three-dimensional plane frame.
50#[derive(Debug, Clone, Copy, PartialEq)]
51#[cfg_attr(
52    feature = "serde",
53    derive(serde::Serialize, serde::Deserialize),
54    serde(deny_unknown_fields)
55)]
56pub struct Ellipse3 {
57    /// Local frame; `z` is the plane normal.
58    pub frame: Frame3,
59    /// Semi-axis along local x.
60    pub semi_axis_x: Scalar,
61    /// Semi-axis along local y.
62    pub semi_axis_y: Scalar,
63}