Sun, 03 Nov 2019 13:18:55 +0200
added matrix conversions and datastream operators
8
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
1 | #pragma once |
11
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
2 | #include <QGenericMatrix> |
8
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
3 | |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
4 | template<int Rows, int Columns, typename T = double> |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
5 | struct Matrix |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
6 | { |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
7 | T values[Rows][Columns]; |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
8 | T& operator()(int row, int column) |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
9 | { |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
10 | return this->values[row][column]; |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
11 | } |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
12 | T operator()(int row, int column) const |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
13 | { |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
14 | return this->values[row][column]; |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
15 | } |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
16 | }; |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
17 | |
11
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
18 | template<int Rows, int Columns, typename T> |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
19 | QGenericMatrix<Rows, Columns, T> matrixToQGenericMatrix(const Matrix<Rows, Columns, T>& matrix) |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
20 | { |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
21 | return {matrix.values}; |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
22 | } |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
23 | |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
24 | template<int Rows, int Columns, typename T> |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
25 | Matrix<Rows, Columns, T> matrixFromQGenericMatrix(const QGenericMatrix<Rows, Columns, T&> matrix) |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
26 | { |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
27 | Matrix<Rows, Columns, T> result; |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
28 | for (int row = 0; row < Rows; row += 1) |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
29 | { |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
30 | for (int column = 0; column < Columns; column += 1) |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
31 | { |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
32 | result(row, column) = matrix(row, column); |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
33 | } |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
34 | } |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
35 | return result; |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
36 | } |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
37 | |
8
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
38 | using Matrix3x3 = Matrix<3, 3>; |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
39 | Q_DECLARE_METATYPE(Matrix3x3); |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
40 | using Matrix4x4 = Matrix<4, 4>; |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
diff
changeset
|
41 | Q_DECLARE_METATYPE(Matrix4x4); |
11
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
42 | |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
43 | template<int Rows, int Columns, typename T> |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
44 | QDataStream& operator<<(QDataStream& stream, const Matrix<Rows, Columns, T>& matrix) |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
45 | { |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
46 | return stream << matrixToQGenericMatrix(matrix); |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
47 | } |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
48 | |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
49 | template<int Rows, int Columns, typename T> |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
50 | QDataStream& operator>>(QDataStream& stream, Matrix<Rows, Columns, T>& matrix) |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
51 | { |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
52 | QGenericMatrix<Rows, Columns, T> qmatrix; |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
53 | stream >> qmatrix; |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
54 | matrix = matrixFromQGenericMatrix(matrix); |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
55 | return stream; |
771168ee2c76
added matrix conversions and datastream operators
Teemu Piippo <teemu@hecknology.net>
parents:
8
diff
changeset
|
56 | } |