f3l_glam/array/
mat3.rs

1impl super::F3lMatrix for glam::Mat3 {
2    type RowType = glam::Vec3;
3
4    #[inline]
5    fn cols(&self) -> usize {
6        3
7    }
8
9    #[inline]
10    fn rows(&self) -> usize {
11        3
12    }
13
14    #[inline]
15    fn row(&self, r: usize) -> Self::RowType {
16        glam::Vec3::new(self.x_axis[r], self.y_axis[r], self.z_axis[r])
17    }
18
19    #[inline]
20    fn get(&self, r: usize, c: usize) -> Option<f32> {
21        if r >= 3 {
22            return None;
23        }
24        match c {
25            0 => Some(self.x_axis[r]),
26            1 => Some(self.y_axis[r]),
27            2 => Some(self.z_axis[r]),
28            _ => None,
29        }
30    }
31
32    #[inline]
33    fn set_row<R: Into<Self::RowType> + Copy>(&mut self, row: usize, v: R) {
34        if row >= 3 {
35            return;
36        }
37        self.x_axis[row] = v.into()[0];
38        self.y_axis[row] = v.into()[1];
39        self.z_axis[row] = v.into()[2];
40    }
41
42    #[inline]
43    fn set_element(&mut self, pos: (usize, usize), v: f32) {
44        if pos.0 >= 3 || pos.1 >= 3 {
45            return;
46        }
47        match pos.1 {
48            0 => self.x_axis[pos.0] = v,
49            1 => self.y_axis[pos.0] = v,
50            2 => self.z_axis[pos.0] = v,
51            _ => {}
52        };
53    }
54}
55
56impl super::ArrayRowMajor for glam::Mat3 {
57    type Row = [f32; 9];
58
59    type Mat = [[f32; 3]; 3];
60
61    #[inline]
62    fn from_rows<R: std::ops::Index<usize, Output = f32>>(rows: &[R]) -> Self {
63        Self::from_cols_array(&[
64            rows[0][0], rows[1][0], rows[2][0], rows[0][1], rows[1][1], rows[2][1], rows[0][2],
65            rows[1][2], rows[2][2],
66        ])
67    }
68
69    #[inline]
70    fn from_rows_slice(m: &[f32]) -> Self {
71        Self::from_cols_array(&[m[0], m[3], m[6], m[1], m[4], m[7], m[2], m[5], m[8]])
72    }
73
74    #[inline]
75    fn to_rows_array(&self) -> Self::Row {
76        self.transpose().to_cols_array()
77    }
78
79    #[inline]
80    fn from_cols_array_2d(m: &Self::Mat) -> Self {
81        Self::from_cols_array(&[
82            m[0][0], m[1][0], m[2][0], m[0][1], m[1][1], m[2][1], m[0][2], m[1][2], m[2][2],
83        ])
84    }
85
86    #[inline]
87    fn to_rows_array_2d(&self) -> Self::Mat {
88        self.transpose().to_cols_array_2d()
89    }
90
91    #[inline]
92    fn write_rows_to_slice(self, slice: &mut [f32]) {
93        slice[0] = self.x_axis.x;
94        slice[1] = self.x_axis.y;
95        slice[2] = self.x_axis.z;
96        slice[3] = self.y_axis.x;
97        slice[4] = self.y_axis.y;
98        slice[5] = self.y_axis.z;
99        slice[6] = self.z_axis.x;
100        slice[7] = self.z_axis.y;
101        slice[8] = self.z_axis.z;
102    }
103}
104
105impl super::ArrayDimensions for glam::Mat3 {
106    fn nb_cols() -> usize {
107        3
108    }
109
110    fn nb_rows() -> usize {
111        3
112    }
113}
114impl super::GenericArray for glam::Mat3 {}