s2json_core/geometry/
mod.rs1pub mod bbox;
3pub mod impls;
5pub mod primitive;
7pub mod vector;
9pub mod vector_point;
11
12use crate::Face;
13pub use bbox::*;
14pub use primitive::*;
15use serde::{Deserialize, Serialize};
16pub use vector::*;
17pub use vector_point::*;
18
19pub trait GetXY {
21 fn x(&self) -> f64;
23 fn y(&self) -> f64;
25 fn xy(&self) -> (f64, f64) {
27 (self.x(), self.y())
28 }
29}
30pub trait GetZ {
32 fn z(&self) -> Option<f64>;
34}
35pub trait GetM<M> {
37 fn m(&self) -> Option<&M>;
39}
40
41pub trait GetXYZ: GetXY + GetZ {}
43impl<T> GetXYZ for T where T: GetXY + GetZ {}
44pub trait GetXYM<M>: GetXY + GetM<M> {}
46impl<T, M> GetXYM<M> for T where T: GetXY + GetM<M> {}
47pub trait GetXYZM<M>: GetXY + GetZ + GetM<M> {}
49impl<T, M> GetXYZM<M> for T where T: GetXY + GetZ + GetM<M> {}
50
51pub trait SetXY {
53 fn set_x(&mut self, x: f64);
55 fn set_y(&mut self, y: f64);
57 fn set_xy(&mut self, x: f64, y: f64) {
59 self.set_x(x);
60 self.set_y(y);
61 }
62}
63pub trait SetZ {
65 fn set_z(&mut self, z: f64);
67}
68pub trait SetM<M> {
70 fn set_m(&mut self, m: M);
72}
73
74pub trait SetXYZ: SetXY + SetZ {
76 fn set_xyz(&mut self, x: f64, y: f64, z: f64) {
78 self.set_xy(x, y);
79 self.set_z(z);
80 }
81}
82impl<T> SetXYZ for T where T: SetXY + SetZ {}
83pub trait SetXYM<M>: SetXY + SetM<M> {
85 fn set_xym(&mut self, x: f64, y: f64, m: M) {
87 self.set_xy(x, y);
88 self.set_m(m);
89 }
90}
91impl<T, M> SetXYM<M> for T where T: SetXY + SetM<M> {}
92pub trait SetXYZM<M>: SetXY + SetZ + SetM<M> {
94 fn set_xyzm(&mut self, x: f64, y: f64, z: f64, m: M) {
96 self.set_xy(x, y);
97 self.set_z(z);
98 self.set_m(m);
99 }
100}
101impl<T, M> SetXYZM<M> for T where T: SetXY + SetZ + SetM<M> {}
102
103pub trait NewXY {
105 fn new_xy(x: f64, y: f64) -> Self;
107}
108pub trait NewXYM<M> {
110 fn new_xym(x: f64, y: f64, m: M) -> Self;
112}
113pub trait NewXYZ {
115 fn new_xyz(x: f64, y: f64, z: f64) -> Self;
117}
118pub trait NewXYZM<M> {
120 fn new_xyzm(x: f64, y: f64, z: f64, m: M) -> Self;
122}
123
124pub trait FullXY: GetXYZ + SetXY + NewXY + Clone + PartialEq + Ord {}
128impl<T> FullXY for T where T: GetXYZ + SetXY + NewXY + Clone + PartialEq + Ord {}
129
130pub trait FullXYZ: GetXYZ + SetXYZ + NewXYZ + Clone + PartialEq + Ord {}
132impl<T> FullXYZ for T where T: GetXYZ + SetXYZ + NewXYZ + Clone + PartialEq + Ord {}
133
134pub trait FullXYZM<M>: GetXYZM<M> + SetXYZM<M> + NewXYZM<M> + Clone + PartialEq + Ord {}
136impl<T, M> FullXYZM<M> for T where T: GetXYZM<M> + SetXYZM<M> + NewXYZM<M> + Clone + PartialEq + Ord {}
137
138#[derive(Debug, PartialEq, Eq, Clone, Copy)]
140pub enum Axis {
141 X = 0,
143 Y = 1,
145}
146
147#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Default)]
149pub struct STPoint<M> {
150 pub face: Face,
152 pub s: f64,
154 pub t: f64,
156 pub z: Option<f64>,
158 pub m: Option<M>,
160}