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}