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}
26pub trait GetZ {
28 fn z(&self) -> Option<f64>;
30}
31pub trait GetM<M> {
33 fn m(&self) -> Option<&M>;
35}
36
37pub trait GetXYZ: GetXY + GetZ {}
39impl<T> GetXYZ for T where T: GetXY + GetZ {}
40pub trait GetXYM<M>: GetXY + GetM<M> {}
42impl<T, M> GetXYM<M> for T where T: GetXY + GetM<M> {}
43pub trait GetXYZM<M>: GetXY + GetZ + GetM<M> {}
45impl<T, M> GetXYZM<M> for T where T: GetXY + GetZ + GetM<M> {}
46
47pub trait SetXY {
49 fn set_x(&mut self, x: f64);
51 fn set_y(&mut self, y: f64);
53 fn set_xy(&mut self, x: f64, y: f64) {
55 self.set_x(x);
56 self.set_y(y);
57 }
58}
59pub trait SetZ {
61 fn set_z(&mut self, z: f64);
63}
64pub trait SetM<M> {
66 fn set_m(&mut self, m: M);
68}
69
70pub trait SetXYZ: SetXY + SetZ {
72 fn set_xyz(&mut self, x: f64, y: f64, z: f64) {
74 self.set_xy(x, y);
75 self.set_z(z);
76 }
77}
78impl<T> SetXYZ for T where T: SetXY + SetZ {}
79pub trait SetXYM<M>: SetXY + SetM<M> {
81 fn set_xym(&mut self, x: f64, y: f64, m: M) {
83 self.set_xy(x, y);
84 self.set_m(m);
85 }
86}
87impl<T, M> SetXYM<M> for T where T: SetXY + SetM<M> {}
88pub trait SetXYZM<M>: SetXY + SetZ + SetM<M> {
90 fn set_xyzm(&mut self, x: f64, y: f64, z: f64, m: M) {
92 self.set_xy(x, y);
93 self.set_z(z);
94 self.set_m(m);
95 }
96}
97impl<T, M> SetXYZM<M> for T where T: SetXY + SetZ + SetM<M> {}
98
99pub trait NewXY {
101 fn new_xy(x: f64, y: f64) -> Self;
103}
104pub trait NewXYZ {
106 fn new_xyz(x: f64, y: f64, z: f64) -> Self;
108}
109pub trait NewXYZM<M> {
111 fn new_xyzm(x: f64, y: f64, z: f64, m: M) -> Self;
113}
114
115pub trait FullXY: GetXY + SetXY + NewXY + Clone + PartialEq + Ord {}
119impl<T> FullXY for T where T: GetXY + SetXY + NewXY + Clone + PartialEq + Ord {}
120
121pub trait FullXYZ: GetXYZ + SetXYZ + NewXYZ + Clone + PartialEq + Ord {}
123impl<T> FullXYZ for T where T: GetXYZ + SetXYZ + NewXYZ + Clone + PartialEq + Ord {}
124
125pub trait FullXYZM<M>: GetXYZM<M> + SetXYZM<M> + NewXYZM<M> + Clone + PartialEq + Ord {}
127impl<T, M> FullXYZM<M> for T where T: GetXYZM<M> + SetXYZM<M> + NewXYZM<M> + Clone + PartialEq + Ord {}
128
129#[derive(Debug, PartialEq, Eq, Clone, Copy)]
131pub enum Axis {
132 X = 0,
134 Y = 1,
136}
137
138#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Default)]
140pub struct STPoint<M> {
141 pub face: Face,
143 pub s: f64,
145 pub t: f64,
147 pub z: Option<f64>,
149 pub m: Option<M>,
151}