Skip to main content

clifford/specialized/projective/dim3/generated/
conversions.rs

1#![doc = " Multivector conversions for projective3."]
2#![doc = ""]
3#![doc = " This file is auto-generated by clifford-codegen."]
4#![doc = " Do not edit manually."]
5use super::types::{Flector, Line, Motor, Plane, Point, Quadvector, Scalar};
6use crate::algebra::Multivector;
7use crate::basis::Blade;
8use crate::scalar::Float;
9use crate::signature::Projective3;
10impl<T: Float> From<Flector<T>> for Multivector<T, Projective3> {
11    fn from(value: Flector<T>) -> Self {
12        Self::from_coeffs(&[
13            T::zero(),
14            value.px(),
15            value.py(),
16            T::zero(),
17            value.pz(),
18            T::zero(),
19            T::zero(),
20            value.dist(),
21            value.pw(),
22            T::zero(),
23            T::zero(),
24            value.nz(),
25            T::zero(),
26            value.ny(),
27            value.nx(),
28            T::zero(),
29        ])
30    }
31}
32impl<T: Float> From<Line<T>> for Multivector<T, Projective3> {
33    fn from(value: Line<T>) -> Self {
34        Self::from_coeffs(&[
35            T::zero(),
36            T::zero(),
37            T::zero(),
38            value.moment_z(),
39            T::zero(),
40            value.moment_y(),
41            value.moment_x(),
42            T::zero(),
43            T::zero(),
44            value.dir_x(),
45            value.dir_y(),
46            T::zero(),
47            value.dir_z(),
48            T::zero(),
49            T::zero(),
50            T::zero(),
51        ])
52    }
53}
54impl<T: Float> From<Motor<T>> for Multivector<T, Projective3> {
55    fn from(value: Motor<T>) -> Self {
56        Self::from_coeffs(&[
57            value.s(),
58            T::zero(),
59            T::zero(),
60            value.tz(),
61            T::zero(),
62            value.ty(),
63            value.rx(),
64            T::zero(),
65            T::zero(),
66            value.tx(),
67            value.ry(),
68            T::zero(),
69            value.rz(),
70            T::zero(),
71            T::zero(),
72            value.ps(),
73        ])
74    }
75}
76impl<T: Float> From<Plane<T>> for Multivector<T, Projective3> {
77    fn from(value: Plane<T>) -> Self {
78        Self::from_coeffs(&[
79            T::zero(),
80            T::zero(),
81            T::zero(),
82            T::zero(),
83            T::zero(),
84            T::zero(),
85            T::zero(),
86            value.dist(),
87            T::zero(),
88            T::zero(),
89            T::zero(),
90            value.nz(),
91            T::zero(),
92            value.ny(),
93            value.nx(),
94            T::zero(),
95        ])
96    }
97}
98impl<T: Float> From<Point<T>> for Multivector<T, Projective3> {
99    fn from(value: Point<T>) -> Self {
100        Self::from_coeffs(&[
101            T::zero(),
102            value.x(),
103            value.y(),
104            T::zero(),
105            value.z(),
106            T::zero(),
107            T::zero(),
108            T::zero(),
109            value.w(),
110            T::zero(),
111            T::zero(),
112            T::zero(),
113            T::zero(),
114            T::zero(),
115            T::zero(),
116            T::zero(),
117        ])
118    }
119}
120impl<T: Float> From<Quadvector<T>> for Multivector<T, Projective3> {
121    fn from(value: Quadvector<T>) -> Self {
122        Self::from_coeffs(&[
123            T::zero(),
124            T::zero(),
125            T::zero(),
126            T::zero(),
127            T::zero(),
128            T::zero(),
129            T::zero(),
130            T::zero(),
131            T::zero(),
132            T::zero(),
133            T::zero(),
134            T::zero(),
135            T::zero(),
136            T::zero(),
137            T::zero(),
138            value.ps(),
139        ])
140    }
141}
142impl<T: Float> From<Scalar<T>> for Multivector<T, Projective3> {
143    fn from(value: Scalar<T>) -> Self {
144        Self::from_coeffs(&[
145            value.s(),
146            T::zero(),
147            T::zero(),
148            T::zero(),
149            T::zero(),
150            T::zero(),
151            T::zero(),
152            T::zero(),
153            T::zero(),
154            T::zero(),
155            T::zero(),
156            T::zero(),
157            T::zero(),
158            T::zero(),
159            T::zero(),
160            T::zero(),
161        ])
162    }
163}
164impl<T: Float> From<Multivector<T, Projective3>> for Flector<T> {
165    #[doc = r" Extracts this type from a multivector."]
166    #[doc = r""]
167    #[doc = r" Note: This is a lossy projection that only extracts the relevant"]
168    #[doc = r" grades. Other components of the multivector are discarded."]
169    fn from(mv: Multivector<T, Projective3>) -> Self {
170        Self::new_unchecked(
171            mv.get(Blade::from_index(1usize)),
172            mv.get(Blade::from_index(2usize)),
173            mv.get(Blade::from_index(4usize)),
174            mv.get(Blade::from_index(8usize)),
175            mv.get(Blade::from_index(7usize)),
176            mv.get(Blade::from_index(11usize)),
177            mv.get(Blade::from_index(13usize)),
178            mv.get(Blade::from_index(14usize)),
179        )
180    }
181}
182impl<T: Float> From<Multivector<T, Projective3>> for Line<T> {
183    #[doc = r" Extracts this type from a multivector."]
184    #[doc = r""]
185    #[doc = r" Note: This is a lossy projection that only extracts the relevant"]
186    #[doc = r" grades. Other components of the multivector are discarded."]
187    fn from(mv: Multivector<T, Projective3>) -> Self {
188        Self::new_unchecked(
189            mv.get(Blade::from_index(3usize)),
190            mv.get(Blade::from_index(5usize)),
191            mv.get(Blade::from_index(9usize)),
192            mv.get(Blade::from_index(6usize)),
193            mv.get(Blade::from_index(10usize)),
194            mv.get(Blade::from_index(12usize)),
195        )
196    }
197}
198impl<T: Float> From<Multivector<T, Projective3>> for Motor<T> {
199    #[doc = r" Extracts this type from a multivector."]
200    #[doc = r""]
201    #[doc = r" Note: This is a lossy projection that only extracts the relevant"]
202    #[doc = r" grades. Other components of the multivector are discarded."]
203    fn from(mv: Multivector<T, Projective3>) -> Self {
204        Self::new_unchecked(
205            mv.get(Blade::from_index(0usize)),
206            mv.get(Blade::from_index(3usize)),
207            mv.get(Blade::from_index(5usize)),
208            mv.get(Blade::from_index(9usize)),
209            mv.get(Blade::from_index(6usize)),
210            mv.get(Blade::from_index(10usize)),
211            mv.get(Blade::from_index(12usize)),
212            mv.get(Blade::from_index(15usize)),
213        )
214    }
215}
216impl<T: Float> From<Multivector<T, Projective3>> for Plane<T> {
217    #[doc = r" Extracts this type from a multivector."]
218    #[doc = r""]
219    #[doc = r" Note: This is a lossy projection that only extracts the relevant"]
220    #[doc = r" grades. Other components of the multivector are discarded."]
221    fn from(mv: Multivector<T, Projective3>) -> Self {
222        Self::new_unchecked(
223            mv.get(Blade::from_index(7usize)),
224            mv.get(Blade::from_index(11usize)),
225            mv.get(Blade::from_index(13usize)),
226            mv.get(Blade::from_index(14usize)),
227        )
228    }
229}
230impl<T: Float> From<Multivector<T, Projective3>> for Point<T> {
231    #[doc = r" Extracts this type from a multivector."]
232    #[doc = r""]
233    #[doc = r" Note: This is a lossy projection that only extracts the relevant"]
234    #[doc = r" grades. Other components of the multivector are discarded."]
235    fn from(mv: Multivector<T, Projective3>) -> Self {
236        Self::new_unchecked(
237            mv.get(Blade::from_index(1usize)),
238            mv.get(Blade::from_index(2usize)),
239            mv.get(Blade::from_index(4usize)),
240            mv.get(Blade::from_index(8usize)),
241        )
242    }
243}
244impl<T: Float> From<Multivector<T, Projective3>> for Quadvector<T> {
245    #[doc = r" Extracts this type from a multivector."]
246    #[doc = r""]
247    #[doc = r" Note: This is a lossy projection that only extracts the relevant"]
248    #[doc = r" grades. Other components of the multivector are discarded."]
249    fn from(mv: Multivector<T, Projective3>) -> Self {
250        Self::new_unchecked(mv.get(Blade::from_index(15usize)))
251    }
252}
253impl<T: Float> From<Multivector<T, Projective3>> for Scalar<T> {
254    #[doc = r" Extracts this type from a multivector."]
255    #[doc = r""]
256    #[doc = r" Note: This is a lossy projection that only extracts the relevant"]
257    #[doc = r" grades. Other components of the multivector are discarded."]
258    fn from(mv: Multivector<T, Projective3>) -> Self {
259        Self::new_unchecked(mv.get(Blade::from_index(0usize)))
260    }
261}