| Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/gui/math3d/qmatrix4x4.cpp |
| Switch to Source code | Preprocessed file |
| Line | Source | Count | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | - | |||||||||||||||||||||||||
| 2 | - | |||||||||||||||||||||||||
| 3 | - | |||||||||||||||||||||||||
| 4 | static const float inv_dist_to_plane = 1.0f / 1024.0f; | - | ||||||||||||||||||||||||
| 5 | QMatrix4x4::QMatrix4x4(const float *values) | - | ||||||||||||||||||||||||
| 6 | { | - | ||||||||||||||||||||||||
| 7 | for (int row = 0; row < 4
| 0 | ||||||||||||||||||||||||
| 8 | for (int col = 0; col < 4
| 0 | ||||||||||||||||||||||||
| 9 | m[col][row] = values[row * 4 + col]; never executed: m[col][row] = values[row * 4 + col]; | 0 | ||||||||||||||||||||||||
| 10 | flagBits = General; | - | ||||||||||||||||||||||||
| 11 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 12 | QMatrix4x4::QMatrix4x4(const float *values, int cols, int rows) | - | ||||||||||||||||||||||||
| 13 | { | - | ||||||||||||||||||||||||
| 14 | for (int col = 0; col < 4
| 0 | ||||||||||||||||||||||||
| 15 | for (int row = 0; row < 4
| 0 | ||||||||||||||||||||||||
| 16 | if (col < cols
| 0 | ||||||||||||||||||||||||
| 17 | m[col][row] = values[col * rows + row]; never executed: m[col][row] = values[col * rows + row]; | 0 | ||||||||||||||||||||||||
| 18 | else if (col == row
| 0 | ||||||||||||||||||||||||
| 19 | m[col][row] = 1.0f; never executed: m[col][row] = 1.0f; | 0 | ||||||||||||||||||||||||
| 20 | else | - | ||||||||||||||||||||||||
| 21 | m[col][row] = 0.0f; never executed: m[col][row] = 0.0f; | 0 | ||||||||||||||||||||||||
| 22 | } | - | ||||||||||||||||||||||||
| 23 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 24 | flagBits = General; | - | ||||||||||||||||||||||||
| 25 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 26 | QMatrix4x4::QMatrix4x4(const QMatrix& matrix) | - | ||||||||||||||||||||||||
| 27 | { | - | ||||||||||||||||||||||||
| 28 | m[0][0] = matrix.m11(); | - | ||||||||||||||||||||||||
| 29 | m[0][1] = matrix.m12(); | - | ||||||||||||||||||||||||
| 30 | m[0][2] = 0.0f; | - | ||||||||||||||||||||||||
| 31 | m[0][3] = 0.0f; | - | ||||||||||||||||||||||||
| 32 | m[1][0] = matrix.m21(); | - | ||||||||||||||||||||||||
| 33 | m[1][1] = matrix.m22(); | - | ||||||||||||||||||||||||
| 34 | m[1][2] = 0.0f; | - | ||||||||||||||||||||||||
| 35 | m[1][3] = 0.0f; | - | ||||||||||||||||||||||||
| 36 | m[2][0] = 0.0f; | - | ||||||||||||||||||||||||
| 37 | m[2][1] = 0.0f; | - | ||||||||||||||||||||||||
| 38 | m[2][2] = 1.0f; | - | ||||||||||||||||||||||||
| 39 | m[2][3] = 0.0f; | - | ||||||||||||||||||||||||
| 40 | m[3][0] = matrix.dx(); | - | ||||||||||||||||||||||||
| 41 | m[3][1] = matrix.dy(); | - | ||||||||||||||||||||||||
| 42 | m[3][2] = 0.0f; | - | ||||||||||||||||||||||||
| 43 | m[3][3] = 1.0f; | - | ||||||||||||||||||||||||
| 44 | flagBits = Translation | Scale | Rotation2D; | - | ||||||||||||||||||||||||
| 45 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 46 | QMatrix4x4::QMatrix4x4(const QTransform& transform) | - | ||||||||||||||||||||||||
| 47 | { | - | ||||||||||||||||||||||||
| 48 | m[0][0] = transform.m11(); | - | ||||||||||||||||||||||||
| 49 | m[0][1] = transform.m12(); | - | ||||||||||||||||||||||||
| 50 | m[0][2] = 0.0f; | - | ||||||||||||||||||||||||
| 51 | m[0][3] = transform.m13(); | - | ||||||||||||||||||||||||
| 52 | m[1][0] = transform.m21(); | - | ||||||||||||||||||||||||
| 53 | m[1][1] = transform.m22(); | - | ||||||||||||||||||||||||
| 54 | m[1][2] = 0.0f; | - | ||||||||||||||||||||||||
| 55 | m[1][3] = transform.m23(); | - | ||||||||||||||||||||||||
| 56 | m[2][0] = 0.0f; | - | ||||||||||||||||||||||||
| 57 | m[2][1] = 0.0f; | - | ||||||||||||||||||||||||
| 58 | m[2][2] = 1.0f; | - | ||||||||||||||||||||||||
| 59 | m[2][3] = 0.0f; | - | ||||||||||||||||||||||||
| 60 | m[3][0] = transform.dx(); | - | ||||||||||||||||||||||||
| 61 | m[3][1] = transform.dy(); | - | ||||||||||||||||||||||||
| 62 | m[3][2] = 0.0f; | - | ||||||||||||||||||||||||
| 63 | m[3][3] = transform.m33(); | - | ||||||||||||||||||||||||
| 64 | flagBits = General; | - | ||||||||||||||||||||||||
| 65 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 66 | static inline double matrixDet2(const double m[4][4], int col0, int col1, int row0, int row1) | - | ||||||||||||||||||||||||
| 67 | { | - | ||||||||||||||||||||||||
| 68 | return never executed: m[col0][row0] * m[col1][row1] - m[col0][row1] * m[col1][row0];return m[col0][row0] * m[col1][row1] - m[col0][row1] * m[col1][row0];never executed: return m[col0][row0] * m[col1][row1] - m[col0][row1] * m[col1][row0]; | 0 | ||||||||||||||||||||||||
| 69 | } | - | ||||||||||||||||||||||||
| 70 | static inline double matrixDet3 | - | ||||||||||||||||||||||||
| 71 | (const double m[4][4], int col0, int col1, int col2, | - | ||||||||||||||||||||||||
| 72 | int row0, int row1, int row2) | - | ||||||||||||||||||||||||
| 73 | { | - | ||||||||||||||||||||||||
| 74 | return never executed: m[col0][row0] * matrixDet2(m, col1, col2, row1, row2)return m[col0][row0] * matrixDet2(m, col1, col2, row1, row2) - m[col1][row0] * matrixDet2(m, col0, col2, row1, row2) + m[col2][row0] * matrixDet2(m, col0, col1, row1, row2);never executed: return m[col0][row0] * matrixDet2(m, col1, col2, row1, row2) - m[col1][row0] * matrixDet2(m, col0, col2, row1, row2) + m[col2][row0] * matrixDet2(m, col0, col1, row1, row2); | 0 | ||||||||||||||||||||||||
| 75 | - m[col1][row0] * matrixDet2(m, col0, col2, row1, row2) never executed: return m[col0][row0] * matrixDet2(m, col1, col2, row1, row2) - m[col1][row0] * matrixDet2(m, col0, col2, row1, row2) + m[col2][row0] * matrixDet2(m, col0, col1, row1, row2); | 0 | ||||||||||||||||||||||||
| 76 | + m[col2][row0] * matrixDet2(m, col0, col1, row1, row2); never executed: return m[col0][row0] * matrixDet2(m, col1, col2, row1, row2) - m[col1][row0] * matrixDet2(m, col0, col2, row1, row2) + m[col2][row0] * matrixDet2(m, col0, col1, row1, row2); | 0 | ||||||||||||||||||||||||
| 77 | } | - | ||||||||||||||||||||||||
| 78 | - | |||||||||||||||||||||||||
| 79 | - | |||||||||||||||||||||||||
| 80 | static inline double matrixDet4(const double m[4][4]) | - | ||||||||||||||||||||||||
| 81 | { | - | ||||||||||||||||||||||||
| 82 | double det; | - | ||||||||||||||||||||||||
| 83 | det = m[0][0] * matrixDet3(m, 1, 2, 3, 1, 2, 3); | - | ||||||||||||||||||||||||
| 84 | det -= m[1][0] * matrixDet3(m, 0, 2, 3, 1, 2, 3); | - | ||||||||||||||||||||||||
| 85 | det += m[2][0] * matrixDet3(m, 0, 1, 3, 1, 2, 3); | - | ||||||||||||||||||||||||
| 86 | det -= m[3][0] * matrixDet3(m, 0, 1, 2, 1, 2, 3); | - | ||||||||||||||||||||||||
| 87 | return never executed: det;return det;never executed: return det; | 0 | ||||||||||||||||||||||||
| 88 | } | - | ||||||||||||||||||||||||
| 89 | - | |||||||||||||||||||||||||
| 90 | static inline void copyToDoubles(const float m[4][4], double mm[4][4]) | - | ||||||||||||||||||||||||
| 91 | { | - | ||||||||||||||||||||||||
| 92 | for (int i = 0; i < 4
| 0 | ||||||||||||||||||||||||
| 93 | for (int j = 0; j < 4
| 0 | ||||||||||||||||||||||||
| 94 | mm[i][j] = double(m[i][j]); never executed: mm[i][j] = double(m[i][j]); | 0 | ||||||||||||||||||||||||
| 95 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 96 | - | |||||||||||||||||||||||||
| 97 | - | |||||||||||||||||||||||||
| 98 | - | |||||||||||||||||||||||||
| 99 | - | |||||||||||||||||||||||||
| 100 | double QMatrix4x4::determinant() const | - | ||||||||||||||||||||||||
| 101 | { | - | ||||||||||||||||||||||||
| 102 | if ((
| 0 | ||||||||||||||||||||||||
| 103 | return never executed: 1.0;return 1.0;never executed: return 1.0; | 0 | ||||||||||||||||||||||||
| 104 | - | |||||||||||||||||||||||||
| 105 | double mm[4][4]; | - | ||||||||||||||||||||||||
| 106 | copyToDoubles(m, mm); | - | ||||||||||||||||||||||||
| 107 | if (flagBits < Rotation2D
| 0 | ||||||||||||||||||||||||
| 108 | return never executed: mm[0][0] * mm[1][1] * mm[2][2];return mm[0][0] * mm[1][1] * mm[2][2];never executed: return mm[0][0] * mm[1][1] * mm[2][2]; | 0 | ||||||||||||||||||||||||
| 109 | if (flagBits < Perspective
| 0 | ||||||||||||||||||||||||
| 110 | return never executed: matrixDet3(mm, 0, 1, 2, 0, 1, 2);return matrixDet3(mm, 0, 1, 2, 0, 1, 2);never executed: return matrixDet3(mm, 0, 1, 2, 0, 1, 2); | 0 | ||||||||||||||||||||||||
| 111 | return never executed: matrixDet4(mm);return matrixDet4(mm);never executed: return matrixDet4(mm); | 0 | ||||||||||||||||||||||||
| 112 | } | - | ||||||||||||||||||||||||
| 113 | QMatrix4x4 QMatrix4x4::inverted(bool *invertible) const | - | ||||||||||||||||||||||||
| 114 | { | - | ||||||||||||||||||||||||
| 115 | - | |||||||||||||||||||||||||
| 116 | if (flagBits == Identity
| 0 | ||||||||||||||||||||||||
| 117 | if (invertible
| 0 | ||||||||||||||||||||||||
| 118 | * never executed: invertible = true;*invertible = true;never executed: *invertible = true; | 0 | ||||||||||||||||||||||||
| 119 | return never executed: QMatrix4x4();return QMatrix4x4();never executed: return QMatrix4x4(); | 0 | ||||||||||||||||||||||||
| 120 | } else if (flagBits == Translation
| 0 | ||||||||||||||||||||||||
| 121 | QMatrix4x4 inv; | - | ||||||||||||||||||||||||
| 122 | inv.m[3][0] = -m[3][0]; | - | ||||||||||||||||||||||||
| 123 | inv.m[3][1] = -m[3][1]; | - | ||||||||||||||||||||||||
| 124 | inv.m[3][2] = -m[3][2]; | - | ||||||||||||||||||||||||
| 125 | inv.flagBits = Translation; | - | ||||||||||||||||||||||||
| 126 | if (invertible
| 0 | ||||||||||||||||||||||||
| 127 | * never executed: invertible = true;*invertible = true;never executed: *invertible = true; | 0 | ||||||||||||||||||||||||
| 128 | return never executed: inv;return inv;never executed: return inv; | 0 | ||||||||||||||||||||||||
| 129 | } else if (flagBits < Rotation2D
| 0 | ||||||||||||||||||||||||
| 130 | - | |||||||||||||||||||||||||
| 131 | if (m[0][0] == 0
| 0 | ||||||||||||||||||||||||
| 132 | if (invertible
| 0 | ||||||||||||||||||||||||
| 133 | * never executed: invertible = false;*invertible = false;never executed: *invertible = false; | 0 | ||||||||||||||||||||||||
| 134 | return never executed: QMatrix4x4();return QMatrix4x4();never executed: return QMatrix4x4(); | 0 | ||||||||||||||||||||||||
| 135 | } | - | ||||||||||||||||||||||||
| 136 | QMatrix4x4 inv; | - | ||||||||||||||||||||||||
| 137 | inv.m[0][0] = 1.0f / m[0][0]; | - | ||||||||||||||||||||||||
| 138 | inv.m[1][1] = 1.0f / m[1][1]; | - | ||||||||||||||||||||||||
| 139 | inv.m[2][2] = 1.0f / m[2][2]; | - | ||||||||||||||||||||||||
| 140 | inv.m[3][0] = -m[3][0] * inv.m[0][0]; | - | ||||||||||||||||||||||||
| 141 | inv.m[3][1] = -m[3][1] * inv.m[1][1]; | - | ||||||||||||||||||||||||
| 142 | inv.m[3][2] = -m[3][2] * inv.m[2][2]; | - | ||||||||||||||||||||||||
| 143 | inv.flagBits = flagBits; | - | ||||||||||||||||||||||||
| 144 | - | |||||||||||||||||||||||||
| 145 | if (invertible
| 0 | ||||||||||||||||||||||||
| 146 | * never executed: invertible = true;*invertible = true;never executed: *invertible = true; | 0 | ||||||||||||||||||||||||
| 147 | return never executed: inv;return inv;never executed: return inv; | 0 | ||||||||||||||||||||||||
| 148 | } else if ((
| 0 | ||||||||||||||||||||||||
| 149 | if (invertible
| 0 | ||||||||||||||||||||||||
| 150 | * never executed: invertible = true;*invertible = true;never executed: *invertible = true; | 0 | ||||||||||||||||||||||||
| 151 | return never executed: orthonormalInverse();return orthonormalInverse();never executed: return orthonormalInverse(); | 0 | ||||||||||||||||||||||||
| 152 | } else if (flagBits < Perspective
| 0 | ||||||||||||||||||||||||
| 153 | QMatrix4x4 inv(1); | - | ||||||||||||||||||||||||
| 154 | - | |||||||||||||||||||||||||
| 155 | double mm[4][4]; | - | ||||||||||||||||||||||||
| 156 | copyToDoubles(m, mm); | - | ||||||||||||||||||||||||
| 157 | - | |||||||||||||||||||||||||
| 158 | double det = matrixDet3(mm, 0, 1, 2, 0, 1, 2); | - | ||||||||||||||||||||||||
| 159 | if (det == 0.0f
| 0 | ||||||||||||||||||||||||
| 160 | if (invertible
| 0 | ||||||||||||||||||||||||
| 161 | * never executed: invertible = false;*invertible = false;never executed: *invertible = false; | 0 | ||||||||||||||||||||||||
| 162 | return never executed: QMatrix4x4();return QMatrix4x4();never executed: return QMatrix4x4(); | 0 | ||||||||||||||||||||||||
| 163 | } | - | ||||||||||||||||||||||||
| 164 | det = 1.0f / det; | - | ||||||||||||||||||||||||
| 165 | - | |||||||||||||||||||||||||
| 166 | inv.m[0][0] = matrixDet2(mm, 1, 2, 1, 2) * det; | - | ||||||||||||||||||||||||
| 167 | inv.m[0][1] = -matrixDet2(mm, 0, 2, 1, 2) * det; | - | ||||||||||||||||||||||||
| 168 | inv.m[0][2] = matrixDet2(mm, 0, 1, 1, 2) * det; | - | ||||||||||||||||||||||||
| 169 | inv.m[0][3] = 0; | - | ||||||||||||||||||||||||
| 170 | inv.m[1][0] = -matrixDet2(mm, 1, 2, 0, 2) * det; | - | ||||||||||||||||||||||||
| 171 | inv.m[1][1] = matrixDet2(mm, 0, 2, 0, 2) * det; | - | ||||||||||||||||||||||||
| 172 | inv.m[1][2] = -matrixDet2(mm, 0, 1, 0, 2) * det; | - | ||||||||||||||||||||||||
| 173 | inv.m[1][3] = 0; | - | ||||||||||||||||||||||||
| 174 | inv.m[2][0] = matrixDet2(mm, 1, 2, 0, 1) * det; | - | ||||||||||||||||||||||||
| 175 | inv.m[2][1] = -matrixDet2(mm, 0, 2, 0, 1) * det; | - | ||||||||||||||||||||||||
| 176 | inv.m[2][2] = matrixDet2(mm, 0, 1, 0, 1) * det; | - | ||||||||||||||||||||||||
| 177 | inv.m[2][3] = 0; | - | ||||||||||||||||||||||||
| 178 | inv.m[3][0] = -inv.m[0][0] * m[3][0] - inv.m[1][0] * m[3][1] - inv.m[2][0] * m[3][2]; | - | ||||||||||||||||||||||||
| 179 | inv.m[3][1] = -inv.m[0][1] * m[3][0] - inv.m[1][1] * m[3][1] - inv.m[2][1] * m[3][2]; | - | ||||||||||||||||||||||||
| 180 | inv.m[3][2] = -inv.m[0][2] * m[3][0] - inv.m[1][2] * m[3][1] - inv.m[2][2] * m[3][2]; | - | ||||||||||||||||||||||||
| 181 | inv.m[3][3] = 1; | - | ||||||||||||||||||||||||
| 182 | inv.flagBits = flagBits; | - | ||||||||||||||||||||||||
| 183 | - | |||||||||||||||||||||||||
| 184 | if (invertible
| 0 | ||||||||||||||||||||||||
| 185 | * never executed: invertible = true;*invertible = true;never executed: *invertible = true; | 0 | ||||||||||||||||||||||||
| 186 | return never executed: inv;return inv;never executed: return inv; | 0 | ||||||||||||||||||||||||
| 187 | } | - | ||||||||||||||||||||||||
| 188 | - | |||||||||||||||||||||||||
| 189 | QMatrix4x4 inv(1); | - | ||||||||||||||||||||||||
| 190 | - | |||||||||||||||||||||||||
| 191 | double mm[4][4]; | - | ||||||||||||||||||||||||
| 192 | copyToDoubles(m, mm); | - | ||||||||||||||||||||||||
| 193 | - | |||||||||||||||||||||||||
| 194 | double det = matrixDet4(mm); | - | ||||||||||||||||||||||||
| 195 | if (det == 0.0f
| 0 | ||||||||||||||||||||||||
| 196 | if (invertible
| 0 | ||||||||||||||||||||||||
| 197 | * never executed: invertible = false;*invertible = false;never executed: *invertible = false; | 0 | ||||||||||||||||||||||||
| 198 | return never executed: QMatrix4x4();return QMatrix4x4();never executed: return QMatrix4x4(); | 0 | ||||||||||||||||||||||||
| 199 | } | - | ||||||||||||||||||||||||
| 200 | det = 1.0f / det; | - | ||||||||||||||||||||||||
| 201 | - | |||||||||||||||||||||||||
| 202 | inv.m[0][0] = matrixDet3(mm, 1, 2, 3, 1, 2, 3) * det; | - | ||||||||||||||||||||||||
| 203 | inv.m[0][1] = -matrixDet3(mm, 0, 2, 3, 1, 2, 3) * det; | - | ||||||||||||||||||||||||
| 204 | inv.m[0][2] = matrixDet3(mm, 0, 1, 3, 1, 2, 3) * det; | - | ||||||||||||||||||||||||
| 205 | inv.m[0][3] = -matrixDet3(mm, 0, 1, 2, 1, 2, 3) * det; | - | ||||||||||||||||||||||||
| 206 | inv.m[1][0] = -matrixDet3(mm, 1, 2, 3, 0, 2, 3) * det; | - | ||||||||||||||||||||||||
| 207 | inv.m[1][1] = matrixDet3(mm, 0, 2, 3, 0, 2, 3) * det; | - | ||||||||||||||||||||||||
| 208 | inv.m[1][2] = -matrixDet3(mm, 0, 1, 3, 0, 2, 3) * det; | - | ||||||||||||||||||||||||
| 209 | inv.m[1][3] = matrixDet3(mm, 0, 1, 2, 0, 2, 3) * det; | - | ||||||||||||||||||||||||
| 210 | inv.m[2][0] = matrixDet3(mm, 1, 2, 3, 0, 1, 3) * det; | - | ||||||||||||||||||||||||
| 211 | inv.m[2][1] = -matrixDet3(mm, 0, 2, 3, 0, 1, 3) * det; | - | ||||||||||||||||||||||||
| 212 | inv.m[2][2] = matrixDet3(mm, 0, 1, 3, 0, 1, 3) * det; | - | ||||||||||||||||||||||||
| 213 | inv.m[2][3] = -matrixDet3(mm, 0, 1, 2, 0, 1, 3) * det; | - | ||||||||||||||||||||||||
| 214 | inv.m[3][0] = -matrixDet3(mm, 1, 2, 3, 0, 1, 2) * det; | - | ||||||||||||||||||||||||
| 215 | inv.m[3][1] = matrixDet3(mm, 0, 2, 3, 0, 1, 2) * det; | - | ||||||||||||||||||||||||
| 216 | inv.m[3][2] = -matrixDet3(mm, 0, 1, 3, 0, 1, 2) * det; | - | ||||||||||||||||||||||||
| 217 | inv.m[3][3] = matrixDet3(mm, 0, 1, 2, 0, 1, 2) * det; | - | ||||||||||||||||||||||||
| 218 | inv.flagBits = flagBits; | - | ||||||||||||||||||||||||
| 219 | - | |||||||||||||||||||||||||
| 220 | if (invertible
| 0 | ||||||||||||||||||||||||
| 221 | * never executed: invertible = true;*invertible = true;never executed: *invertible = true; | 0 | ||||||||||||||||||||||||
| 222 | return never executed: inv;return inv;never executed: return inv; | 0 | ||||||||||||||||||||||||
| 223 | } | - | ||||||||||||||||||||||||
| 224 | QMatrix3x3 QMatrix4x4::normalMatrix() const | - | ||||||||||||||||||||||||
| 225 | { | - | ||||||||||||||||||||||||
| 226 | QMatrix3x3 inv; | - | ||||||||||||||||||||||||
| 227 | - | |||||||||||||||||||||||||
| 228 | - | |||||||||||||||||||||||||
| 229 | if (flagBits < Scale
| 0 | ||||||||||||||||||||||||
| 230 | - | |||||||||||||||||||||||||
| 231 | return never executed: inv;return inv;never executed: return inv; | 0 | ||||||||||||||||||||||||
| 232 | } else if (flagBits < Rotation2D
| 0 | ||||||||||||||||||||||||
| 233 | - | |||||||||||||||||||||||||
| 234 | if (m[0][0] == 0.0f
| 0 | ||||||||||||||||||||||||
| 235 | return never executed: inv;return inv;never executed: return inv; | 0 | ||||||||||||||||||||||||
| 236 | inv.data()[0] = 1.0f / m[0][0]; | - | ||||||||||||||||||||||||
| 237 | inv.data()[4] = 1.0f / m[1][1]; | - | ||||||||||||||||||||||||
| 238 | inv.data()[8] = 1.0f / m[2][2]; | - | ||||||||||||||||||||||||
| 239 | return never executed: inv;return inv;never executed: return inv; | 0 | ||||||||||||||||||||||||
| 240 | } else if ((
| 0 | ||||||||||||||||||||||||
| 241 | float *invm = inv.data(); | - | ||||||||||||||||||||||||
| 242 | invm[0 + 0 * 3] = m[0][0]; | - | ||||||||||||||||||||||||
| 243 | invm[1 + 0 * 3] = m[0][1]; | - | ||||||||||||||||||||||||
| 244 | invm[2 + 0 * 3] = m[0][2]; | - | ||||||||||||||||||||||||
| 245 | invm[0 + 1 * 3] = m[1][0]; | - | ||||||||||||||||||||||||
| 246 | invm[1 + 1 * 3] = m[1][1]; | - | ||||||||||||||||||||||||
| 247 | invm[2 + 1 * 3] = m[1][2]; | - | ||||||||||||||||||||||||
| 248 | invm[0 + 2 * 3] = m[2][0]; | - | ||||||||||||||||||||||||
| 249 | invm[1 + 2 * 3] = m[2][1]; | - | ||||||||||||||||||||||||
| 250 | invm[2 + 2 * 3] = m[2][2]; | - | ||||||||||||||||||||||||
| 251 | return never executed: inv;return inv;never executed: return inv; | 0 | ||||||||||||||||||||||||
| 252 | } | - | ||||||||||||||||||||||||
| 253 | - | |||||||||||||||||||||||||
| 254 | double mm[4][4]; | - | ||||||||||||||||||||||||
| 255 | copyToDoubles(m, mm); | - | ||||||||||||||||||||||||
| 256 | double det = matrixDet3(mm, 0, 1, 2, 0, 1, 2); | - | ||||||||||||||||||||||||
| 257 | if (det == 0.0f
| 0 | ||||||||||||||||||||||||
| 258 | return never executed: inv;return inv;never executed: return inv; | 0 | ||||||||||||||||||||||||
| 259 | det = 1.0f / det; | - | ||||||||||||||||||||||||
| 260 | - | |||||||||||||||||||||||||
| 261 | float *invm = inv.data(); | - | ||||||||||||||||||||||||
| 262 | - | |||||||||||||||||||||||||
| 263 | - | |||||||||||||||||||||||||
| 264 | invm[0 + 0 * 3] = (mm[1][1] * mm[2][2] - mm[2][1] * mm[1][2]) * det; | - | ||||||||||||||||||||||||
| 265 | invm[1 + 0 * 3] = -(mm[1][0] * mm[2][2] - mm[1][2] * mm[2][0]) * det; | - | ||||||||||||||||||||||||
| 266 | invm[2 + 0 * 3] = (mm[1][0] * mm[2][1] - mm[1][1] * mm[2][0]) * det; | - | ||||||||||||||||||||||||
| 267 | invm[0 + 1 * 3] = -(mm[0][1] * mm[2][2] - mm[2][1] * mm[0][2]) * det; | - | ||||||||||||||||||||||||
| 268 | invm[1 + 1 * 3] = (mm[0][0] * mm[2][2] - mm[0][2] * mm[2][0]) * det; | - | ||||||||||||||||||||||||
| 269 | invm[2 + 1 * 3] = -(mm[0][0] * mm[2][1] - mm[0][1] * mm[2][0]) * det; | - | ||||||||||||||||||||||||
| 270 | invm[0 + 2 * 3] = (mm[0][1] * mm[1][2] - mm[0][2] * mm[1][1]) * det; | - | ||||||||||||||||||||||||
| 271 | invm[1 + 2 * 3] = -(mm[0][0] * mm[1][2] - mm[0][2] * mm[1][0]) * det; | - | ||||||||||||||||||||||||
| 272 | invm[2 + 2 * 3] = (mm[0][0] * mm[1][1] - mm[1][0] * mm[0][1]) * det; | - | ||||||||||||||||||||||||
| 273 | - | |||||||||||||||||||||||||
| 274 | return never executed: inv;return inv;never executed: return inv; | 0 | ||||||||||||||||||||||||
| 275 | } | - | ||||||||||||||||||||||||
| 276 | - | |||||||||||||||||||||||||
| 277 | - | |||||||||||||||||||||||||
| 278 | - | |||||||||||||||||||||||||
| 279 | - | |||||||||||||||||||||||||
| 280 | QMatrix4x4 QMatrix4x4::transposed() const | - | ||||||||||||||||||||||||
| 281 | { | - | ||||||||||||||||||||||||
| 282 | QMatrix4x4 result(1); | - | ||||||||||||||||||||||||
| 283 | for (int row = 0; row < 4
| 0 | ||||||||||||||||||||||||
| 284 | for (int col = 0; col < 4
| 0 | ||||||||||||||||||||||||
| 285 | result.m[col][row] = m[row][col]; | - | ||||||||||||||||||||||||
| 286 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 287 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 288 | - | |||||||||||||||||||||||||
| 289 | result.flagBits = (flagBits & Translation
| 0 | ||||||||||||||||||||||||
| 290 | return never executed: result;return result;never executed: return result; | 0 | ||||||||||||||||||||||||
| 291 | } | - | ||||||||||||||||||||||||
| 292 | QMatrix4x4& QMatrix4x4::operator/=(float divisor) | - | ||||||||||||||||||||||||
| 293 | { | - | ||||||||||||||||||||||||
| 294 | m[0][0] /= divisor; | - | ||||||||||||||||||||||||
| 295 | m[0][1] /= divisor; | - | ||||||||||||||||||||||||
| 296 | m[0][2] /= divisor; | - | ||||||||||||||||||||||||
| 297 | m[0][3] /= divisor; | - | ||||||||||||||||||||||||
| 298 | m[1][0] /= divisor; | - | ||||||||||||||||||||||||
| 299 | m[1][1] /= divisor; | - | ||||||||||||||||||||||||
| 300 | m[1][2] /= divisor; | - | ||||||||||||||||||||||||
| 301 | m[1][3] /= divisor; | - | ||||||||||||||||||||||||
| 302 | m[2][0] /= divisor; | - | ||||||||||||||||||||||||
| 303 | m[2][1] /= divisor; | - | ||||||||||||||||||||||||
| 304 | m[2][2] /= divisor; | - | ||||||||||||||||||||||||
| 305 | m[2][3] /= divisor; | - | ||||||||||||||||||||||||
| 306 | m[3][0] /= divisor; | - | ||||||||||||||||||||||||
| 307 | m[3][1] /= divisor; | - | ||||||||||||||||||||||||
| 308 | m[3][2] /= divisor; | - | ||||||||||||||||||||||||
| 309 | m[3][3] /= divisor; | - | ||||||||||||||||||||||||
| 310 | flagBits = General; | - | ||||||||||||||||||||||||
| 311 | return never executed: *this;return *this;never executed: return *this; | 0 | ||||||||||||||||||||||||
| 312 | } | - | ||||||||||||||||||||||||
| 313 | QMatrix4x4 operator/(const QMatrix4x4& matrix, float divisor) | - | ||||||||||||||||||||||||
| 314 | { | - | ||||||||||||||||||||||||
| 315 | QMatrix4x4 m(1); | - | ||||||||||||||||||||||||
| 316 | m.m[0][0] = matrix.m[0][0] / divisor; | - | ||||||||||||||||||||||||
| 317 | m.m[0][1] = matrix.m[0][1] / divisor; | - | ||||||||||||||||||||||||
| 318 | m.m[0][2] = matrix.m[0][2] / divisor; | - | ||||||||||||||||||||||||
| 319 | m.m[0][3] = matrix.m[0][3] / divisor; | - | ||||||||||||||||||||||||
| 320 | m.m[1][0] = matrix.m[1][0] / divisor; | - | ||||||||||||||||||||||||
| 321 | m.m[1][1] = matrix.m[1][1] / divisor; | - | ||||||||||||||||||||||||
| 322 | m.m[1][2] = matrix.m[1][2] / divisor; | - | ||||||||||||||||||||||||
| 323 | m.m[1][3] = matrix.m[1][3] / divisor; | - | ||||||||||||||||||||||||
| 324 | m.m[2][0] = matrix.m[2][0] / divisor; | - | ||||||||||||||||||||||||
| 325 | m.m[2][1] = matrix.m[2][1] / divisor; | - | ||||||||||||||||||||||||
| 326 | m.m[2][2] = matrix.m[2][2] / divisor; | - | ||||||||||||||||||||||||
| 327 | m.m[2][3] = matrix.m[2][3] / divisor; | - | ||||||||||||||||||||||||
| 328 | m.m[3][0] = matrix.m[3][0] / divisor; | - | ||||||||||||||||||||||||
| 329 | m.m[3][1] = matrix.m[3][1] / divisor; | - | ||||||||||||||||||||||||
| 330 | m.m[3][2] = matrix.m[3][2] / divisor; | - | ||||||||||||||||||||||||
| 331 | m.m[3][3] = matrix.m[3][3] / divisor; | - | ||||||||||||||||||||||||
| 332 | m.flagBits = QMatrix4x4::General; | - | ||||||||||||||||||||||||
| 333 | return never executed: m;return m;never executed: return m; | 0 | ||||||||||||||||||||||||
| 334 | } | - | ||||||||||||||||||||||||
| 335 | void QMatrix4x4::scale(const QVector3D& vector) | - | ||||||||||||||||||||||||
| 336 | { | - | ||||||||||||||||||||||||
| 337 | float vx = vector.x(); | - | ||||||||||||||||||||||||
| 338 | float vy = vector.y(); | - | ||||||||||||||||||||||||
| 339 | float vz = vector.z(); | - | ||||||||||||||||||||||||
| 340 | if (flagBits < Scale
| 0 | ||||||||||||||||||||||||
| 341 | m[0][0] = vx; | - | ||||||||||||||||||||||||
| 342 | m[1][1] = vy; | - | ||||||||||||||||||||||||
| 343 | m[2][2] = vz; | - | ||||||||||||||||||||||||
| 344 | } never executed: else if (flagBits < Rotation2Dend of block
| 0 | ||||||||||||||||||||||||
| 345 | m[0][0] *= vx; | - | ||||||||||||||||||||||||
| 346 | m[1][1] *= vy; | - | ||||||||||||||||||||||||
| 347 | m[2][2] *= vz; | - | ||||||||||||||||||||||||
| 348 | } never executed: else if (flagBits < Rotationend of block
| 0 | ||||||||||||||||||||||||
| 349 | m[0][0] *= vx; | - | ||||||||||||||||||||||||
| 350 | m[0][1] *= vx; | - | ||||||||||||||||||||||||
| 351 | m[1][0] *= vy; | - | ||||||||||||||||||||||||
| 352 | m[1][1] *= vy; | - | ||||||||||||||||||||||||
| 353 | m[2][2] *= vz; | - | ||||||||||||||||||||||||
| 354 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
| 355 | m[0][0] *= vx; | - | ||||||||||||||||||||||||
| 356 | m[0][1] *= vx; | - | ||||||||||||||||||||||||
| 357 | m[0][2] *= vx; | - | ||||||||||||||||||||||||
| 358 | m[0][3] *= vx; | - | ||||||||||||||||||||||||
| 359 | m[1][0] *= vy; | - | ||||||||||||||||||||||||
| 360 | m[1][1] *= vy; | - | ||||||||||||||||||||||||
| 361 | m[1][2] *= vy; | - | ||||||||||||||||||||||||
| 362 | m[1][3] *= vy; | - | ||||||||||||||||||||||||
| 363 | m[2][0] *= vz; | - | ||||||||||||||||||||||||
| 364 | m[2][1] *= vz; | - | ||||||||||||||||||||||||
| 365 | m[2][2] *= vz; | - | ||||||||||||||||||||||||
| 366 | m[2][3] *= vz; | - | ||||||||||||||||||||||||
| 367 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 368 | flagBits |= Scale; | - | ||||||||||||||||||||||||
| 369 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 370 | void QMatrix4x4::scale(float x, float y) | - | ||||||||||||||||||||||||
| 371 | { | - | ||||||||||||||||||||||||
| 372 | if (flagBits < Scale
| 0 | ||||||||||||||||||||||||
| 373 | m[0][0] = x; | - | ||||||||||||||||||||||||
| 374 | m[1][1] = y; | - | ||||||||||||||||||||||||
| 375 | } never executed: else if (flagBits < Rotation2Dend of block
| 0 | ||||||||||||||||||||||||
| 376 | m[0][0] *= x; | - | ||||||||||||||||||||||||
| 377 | m[1][1] *= y; | - | ||||||||||||||||||||||||
| 378 | } never executed: else if (flagBits < Rotationend of block
| 0 | ||||||||||||||||||||||||
| 379 | m[0][0] *= x; | - | ||||||||||||||||||||||||
| 380 | m[0][1] *= x; | - | ||||||||||||||||||||||||
| 381 | m[1][0] *= y; | - | ||||||||||||||||||||||||
| 382 | m[1][1] *= y; | - | ||||||||||||||||||||||||
| 383 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
| 384 | m[0][0] *= x; | - | ||||||||||||||||||||||||
| 385 | m[0][1] *= x; | - | ||||||||||||||||||||||||
| 386 | m[0][2] *= x; | - | ||||||||||||||||||||||||
| 387 | m[0][3] *= x; | - | ||||||||||||||||||||||||
| 388 | m[1][0] *= y; | - | ||||||||||||||||||||||||
| 389 | m[1][1] *= y; | - | ||||||||||||||||||||||||
| 390 | m[1][2] *= y; | - | ||||||||||||||||||||||||
| 391 | m[1][3] *= y; | - | ||||||||||||||||||||||||
| 392 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 393 | flagBits |= Scale; | - | ||||||||||||||||||||||||
| 394 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 395 | void QMatrix4x4::scale(float x, float y, float z) | - | ||||||||||||||||||||||||
| 396 | { | - | ||||||||||||||||||||||||
| 397 | if (flagBits < Scale
| 0 | ||||||||||||||||||||||||
| 398 | m[0][0] = x; | - | ||||||||||||||||||||||||
| 399 | m[1][1] = y; | - | ||||||||||||||||||||||||
| 400 | m[2][2] = z; | - | ||||||||||||||||||||||||
| 401 | } never executed: else if (flagBits < Rotation2Dend of block
| 0 | ||||||||||||||||||||||||
| 402 | m[0][0] *= x; | - | ||||||||||||||||||||||||
| 403 | m[1][1] *= y; | - | ||||||||||||||||||||||||
| 404 | m[2][2] *= z; | - | ||||||||||||||||||||||||
| 405 | } never executed: else if (flagBits < Rotationend of block
| 0 | ||||||||||||||||||||||||
| 406 | m[0][0] *= x; | - | ||||||||||||||||||||||||
| 407 | m[0][1] *= x; | - | ||||||||||||||||||||||||
| 408 | m[1][0] *= y; | - | ||||||||||||||||||||||||
| 409 | m[1][1] *= y; | - | ||||||||||||||||||||||||
| 410 | m[2][2] *= z; | - | ||||||||||||||||||||||||
| 411 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
| 412 | m[0][0] *= x; | - | ||||||||||||||||||||||||
| 413 | m[0][1] *= x; | - | ||||||||||||||||||||||||
| 414 | m[0][2] *= x; | - | ||||||||||||||||||||||||
| 415 | m[0][3] *= x; | - | ||||||||||||||||||||||||
| 416 | m[1][0] *= y; | - | ||||||||||||||||||||||||
| 417 | m[1][1] *= y; | - | ||||||||||||||||||||||||
| 418 | m[1][2] *= y; | - | ||||||||||||||||||||||||
| 419 | m[1][3] *= y; | - | ||||||||||||||||||||||||
| 420 | m[2][0] *= z; | - | ||||||||||||||||||||||||
| 421 | m[2][1] *= z; | - | ||||||||||||||||||||||||
| 422 | m[2][2] *= z; | - | ||||||||||||||||||||||||
| 423 | m[2][3] *= z; | - | ||||||||||||||||||||||||
| 424 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 425 | flagBits |= Scale; | - | ||||||||||||||||||||||||
| 426 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 427 | void QMatrix4x4::scale(float factor) | - | ||||||||||||||||||||||||
| 428 | { | - | ||||||||||||||||||||||||
| 429 | if (flagBits < Scale
| 0 | ||||||||||||||||||||||||
| 430 | m[0][0] = factor; | - | ||||||||||||||||||||||||
| 431 | m[1][1] = factor; | - | ||||||||||||||||||||||||
| 432 | m[2][2] = factor; | - | ||||||||||||||||||||||||
| 433 | } never executed: else if (flagBits < Rotation2Dend of block
| 0 | ||||||||||||||||||||||||
| 434 | m[0][0] *= factor; | - | ||||||||||||||||||||||||
| 435 | m[1][1] *= factor; | - | ||||||||||||||||||||||||
| 436 | m[2][2] *= factor; | - | ||||||||||||||||||||||||
| 437 | } never executed: else if (flagBits < Rotationend of block
| 0 | ||||||||||||||||||||||||
| 438 | m[0][0] *= factor; | - | ||||||||||||||||||||||||
| 439 | m[0][1] *= factor; | - | ||||||||||||||||||||||||
| 440 | m[1][0] *= factor; | - | ||||||||||||||||||||||||
| 441 | m[1][1] *= factor; | - | ||||||||||||||||||||||||
| 442 | m[2][2] *= factor; | - | ||||||||||||||||||||||||
| 443 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
| 444 | m[0][0] *= factor; | - | ||||||||||||||||||||||||
| 445 | m[0][1] *= factor; | - | ||||||||||||||||||||||||
| 446 | m[0][2] *= factor; | - | ||||||||||||||||||||||||
| 447 | m[0][3] *= factor; | - | ||||||||||||||||||||||||
| 448 | m[1][0] *= factor; | - | ||||||||||||||||||||||||
| 449 | m[1][1] *= factor; | - | ||||||||||||||||||||||||
| 450 | m[1][2] *= factor; | - | ||||||||||||||||||||||||
| 451 | m[1][3] *= factor; | - | ||||||||||||||||||||||||
| 452 | m[2][0] *= factor; | - | ||||||||||||||||||||||||
| 453 | m[2][1] *= factor; | - | ||||||||||||||||||||||||
| 454 | m[2][2] *= factor; | - | ||||||||||||||||||||||||
| 455 | m[2][3] *= factor; | - | ||||||||||||||||||||||||
| 456 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 457 | flagBits |= Scale; | - | ||||||||||||||||||||||||
| 458 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 459 | void QMatrix4x4::translate(const QVector3D& vector) | - | ||||||||||||||||||||||||
| 460 | { | - | ||||||||||||||||||||||||
| 461 | float vx = vector.x(); | - | ||||||||||||||||||||||||
| 462 | float vy = vector.y(); | - | ||||||||||||||||||||||||
| 463 | float vz = vector.z(); | - | ||||||||||||||||||||||||
| 464 | if (flagBits == Identity
| 0 | ||||||||||||||||||||||||
| 465 | m[3][0] = vx; | - | ||||||||||||||||||||||||
| 466 | m[3][1] = vy; | - | ||||||||||||||||||||||||
| 467 | m[3][2] = vz; | - | ||||||||||||||||||||||||
| 468 | } never executed: else if (flagBits == Translationend of block
| 0 | ||||||||||||||||||||||||
| 469 | m[3][0] += vx; | - | ||||||||||||||||||||||||
| 470 | m[3][1] += vy; | - | ||||||||||||||||||||||||
| 471 | m[3][2] += vz; | - | ||||||||||||||||||||||||
| 472 | } never executed: else if (flagBits == Scaleend of block
| 0 | ||||||||||||||||||||||||
| 473 | m[3][0] = m[0][0] * vx; | - | ||||||||||||||||||||||||
| 474 | m[3][1] = m[1][1] * vy; | - | ||||||||||||||||||||||||
| 475 | m[3][2] = m[2][2] * vz; | - | ||||||||||||||||||||||||
| 476 | } never executed: else if (flagBits == (Translation | Scale)end of block
| 0 | ||||||||||||||||||||||||
| 477 | m[3][0] += m[0][0] * vx; | - | ||||||||||||||||||||||||
| 478 | m[3][1] += m[1][1] * vy; | - | ||||||||||||||||||||||||
| 479 | m[3][2] += m[2][2] * vz; | - | ||||||||||||||||||||||||
| 480 | } never executed: else if (flagBits < Rotationend of block
| 0 | ||||||||||||||||||||||||
| 481 | m[3][0] += m[0][0] * vx + m[1][0] * vy; | - | ||||||||||||||||||||||||
| 482 | m[3][1] += m[0][1] * vx + m[1][1] * vy; | - | ||||||||||||||||||||||||
| 483 | m[3][2] += m[2][2] * vz; | - | ||||||||||||||||||||||||
| 484 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
| 485 | m[3][0] += m[0][0] * vx + m[1][0] * vy + m[2][0] * vz; | - | ||||||||||||||||||||||||
| 486 | m[3][1] += m[0][1] * vx + m[1][1] * vy + m[2][1] * vz; | - | ||||||||||||||||||||||||
| 487 | m[3][2] += m[0][2] * vx + m[1][2] * vy + m[2][2] * vz; | - | ||||||||||||||||||||||||
| 488 | m[3][3] += m[0][3] * vx + m[1][3] * vy + m[2][3] * vz; | - | ||||||||||||||||||||||||
| 489 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 490 | flagBits |= Translation; | - | ||||||||||||||||||||||||
| 491 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 492 | void QMatrix4x4::translate(float x, float y) | - | ||||||||||||||||||||||||
| 493 | { | - | ||||||||||||||||||||||||
| 494 | if (flagBits == Identity
| 0 | ||||||||||||||||||||||||
| 495 | m[3][0] = x; | - | ||||||||||||||||||||||||
| 496 | m[3][1] = y; | - | ||||||||||||||||||||||||
| 497 | } never executed: else if (flagBits == Translationend of block
| 0 | ||||||||||||||||||||||||
| 498 | m[3][0] += x; | - | ||||||||||||||||||||||||
| 499 | m[3][1] += y; | - | ||||||||||||||||||||||||
| 500 | } never executed: else if (flagBits == Scaleend of block
| 0 | ||||||||||||||||||||||||
| 501 | m[3][0] = m[0][0] * x; | - | ||||||||||||||||||||||||
| 502 | m[3][1] = m[1][1] * y; | - | ||||||||||||||||||||||||
| 503 | } never executed: else if (flagBits == (Translation | Scale)end of block
| 0 | ||||||||||||||||||||||||
| 504 | m[3][0] += m[0][0] * x; | - | ||||||||||||||||||||||||
| 505 | m[3][1] += m[1][1] * y; | - | ||||||||||||||||||||||||
| 506 | } never executed: else if (flagBits < Rotationend of block
| 0 | ||||||||||||||||||||||||
| 507 | m[3][0] += m[0][0] * x + m[1][0] * y; | - | ||||||||||||||||||||||||
| 508 | m[3][1] += m[0][1] * x + m[1][1] * y; | - | ||||||||||||||||||||||||
| 509 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
| 510 | m[3][0] += m[0][0] * x + m[1][0] * y; | - | ||||||||||||||||||||||||
| 511 | m[3][1] += m[0][1] * x + m[1][1] * y; | - | ||||||||||||||||||||||||
| 512 | m[3][2] += m[0][2] * x + m[1][2] * y; | - | ||||||||||||||||||||||||
| 513 | m[3][3] += m[0][3] * x + m[1][3] * y; | - | ||||||||||||||||||||||||
| 514 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 515 | flagBits |= Translation; | - | ||||||||||||||||||||||||
| 516 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 517 | void QMatrix4x4::translate(float x, float y, float z) | - | ||||||||||||||||||||||||
| 518 | { | - | ||||||||||||||||||||||||
| 519 | if (flagBits == Identity
| 0 | ||||||||||||||||||||||||
| 520 | m[3][0] = x; | - | ||||||||||||||||||||||||
| 521 | m[3][1] = y; | - | ||||||||||||||||||||||||
| 522 | m[3][2] = z; | - | ||||||||||||||||||||||||
| 523 | } never executed: else if (flagBits == Translationend of block
| 0 | ||||||||||||||||||||||||
| 524 | m[3][0] += x; | - | ||||||||||||||||||||||||
| 525 | m[3][1] += y; | - | ||||||||||||||||||||||||
| 526 | m[3][2] += z; | - | ||||||||||||||||||||||||
| 527 | } never executed: else if (flagBits == Scaleend of block
| 0 | ||||||||||||||||||||||||
| 528 | m[3][0] = m[0][0] * x; | - | ||||||||||||||||||||||||
| 529 | m[3][1] = m[1][1] * y; | - | ||||||||||||||||||||||||
| 530 | m[3][2] = m[2][2] * z; | - | ||||||||||||||||||||||||
| 531 | } never executed: else if (flagBits == (Translation | Scale)end of block
| 0 | ||||||||||||||||||||||||
| 532 | m[3][0] += m[0][0] * x; | - | ||||||||||||||||||||||||
| 533 | m[3][1] += m[1][1] * y; | - | ||||||||||||||||||||||||
| 534 | m[3][2] += m[2][2] * z; | - | ||||||||||||||||||||||||
| 535 | } never executed: else if (flagBits < Rotationend of block
| 0 | ||||||||||||||||||||||||
| 536 | m[3][0] += m[0][0] * x + m[1][0] * y; | - | ||||||||||||||||||||||||
| 537 | m[3][1] += m[0][1] * x + m[1][1] * y; | - | ||||||||||||||||||||||||
| 538 | m[3][2] += m[2][2] * z; | - | ||||||||||||||||||||||||
| 539 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
| 540 | m[3][0] += m[0][0] * x + m[1][0] * y + m[2][0] * z; | - | ||||||||||||||||||||||||
| 541 | m[3][1] += m[0][1] * x + m[1][1] * y + m[2][1] * z; | - | ||||||||||||||||||||||||
| 542 | m[3][2] += m[0][2] * x + m[1][2] * y + m[2][2] * z; | - | ||||||||||||||||||||||||
| 543 | m[3][3] += m[0][3] * x + m[1][3] * y + m[2][3] * z; | - | ||||||||||||||||||||||||
| 544 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 545 | flagBits |= Translation; | - | ||||||||||||||||||||||||
| 546 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 547 | void QMatrix4x4::rotate(float angle, const QVector3D& vector) | - | ||||||||||||||||||||||||
| 548 | { | - | ||||||||||||||||||||||||
| 549 | rotate(angle, vector.x(), vector.y(), vector.z()); | - | ||||||||||||||||||||||||
| 550 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 551 | void QMatrix4x4::rotate(float angle, float x, float y, float z) | - | ||||||||||||||||||||||||
| 552 | { | - | ||||||||||||||||||||||||
| 553 | if (angle == 0.0f
| 0 | ||||||||||||||||||||||||
| 554 | return; never executed: return; | 0 | ||||||||||||||||||||||||
| 555 | float c, s; | - | ||||||||||||||||||||||||
| 556 | if (angle == 90.0f
| 0 | ||||||||||||||||||||||||
| 557 | s = 1.0f; | - | ||||||||||||||||||||||||
| 558 | c = 0.0f; | - | ||||||||||||||||||||||||
| 559 | } never executed: else if (angle == -90.0fend of block
| 0 | ||||||||||||||||||||||||
| 560 | s = -1.0f; | - | ||||||||||||||||||||||||
| 561 | c = 0.0f; | - | ||||||||||||||||||||||||
| 562 | } never executed: else if (angle == 180.0fend of block
| 0 | ||||||||||||||||||||||||
| 563 | s = 0.0f; | - | ||||||||||||||||||||||||
| 564 | c = -1.0f; | - | ||||||||||||||||||||||||
| 565 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
| 566 | float a = angle * 3.14159265358979323846 / 180.0f; | - | ||||||||||||||||||||||||
| 567 | c = std::cos(a); | - | ||||||||||||||||||||||||
| 568 | s = std::sin(a); | - | ||||||||||||||||||||||||
| 569 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 570 | if (x == 0.0f
| 0 | ||||||||||||||||||||||||
| 571 | if (y == 0.0f
| 0 | ||||||||||||||||||||||||
| 572 | if (z != 0.0f
| 0 | ||||||||||||||||||||||||
| 573 | - | |||||||||||||||||||||||||
| 574 | if (z < 0
| 0 | ||||||||||||||||||||||||
| 575 | s = -s; never executed: s = -s; | 0 | ||||||||||||||||||||||||
| 576 | float tmp; | - | ||||||||||||||||||||||||
| 577 | m[0][0] = (tmp = m[0][0]) * c + m[1][0] * s; | - | ||||||||||||||||||||||||
| 578 | m[1][0] = m[1][0] * c - tmp * s; | - | ||||||||||||||||||||||||
| 579 | m[0][1] = (tmp = m[0][1]) * c + m[1][1] * s; | - | ||||||||||||||||||||||||
| 580 | m[1][1] = m[1][1] * c - tmp * s; | - | ||||||||||||||||||||||||
| 581 | m[0][2] = (tmp = m[0][2]) * c + m[1][2] * s; | - | ||||||||||||||||||||||||
| 582 | m[1][2] = m[1][2] * c - tmp * s; | - | ||||||||||||||||||||||||
| 583 | m[0][3] = (tmp = m[0][3]) * c + m[1][3] * s; | - | ||||||||||||||||||||||||
| 584 | m[1][3] = m[1][3] * c - tmp * s; | - | ||||||||||||||||||||||||
| 585 | - | |||||||||||||||||||||||||
| 586 | flagBits |= Rotation2D; | - | ||||||||||||||||||||||||
| 587 | return; never executed: return; | 0 | ||||||||||||||||||||||||
| 588 | } | - | ||||||||||||||||||||||||
| 589 | } never executed: else if (z == 0.0fend of block
| 0 | ||||||||||||||||||||||||
| 590 | - | |||||||||||||||||||||||||
| 591 | if (y < 0
| 0 | ||||||||||||||||||||||||
| 592 | s = -s; never executed: s = -s; | 0 | ||||||||||||||||||||||||
| 593 | float tmp; | - | ||||||||||||||||||||||||
| 594 | m[2][0] = (tmp = m[2][0]) * c + m[0][0] * s; | - | ||||||||||||||||||||||||
| 595 | m[0][0] = m[0][0] * c - tmp * s; | - | ||||||||||||||||||||||||
| 596 | m[2][1] = (tmp = m[2][1]) * c + m[0][1] * s; | - | ||||||||||||||||||||||||
| 597 | m[0][1] = m[0][1] * c - tmp * s; | - | ||||||||||||||||||||||||
| 598 | m[2][2] = (tmp = m[2][2]) * c + m[0][2] * s; | - | ||||||||||||||||||||||||
| 599 | m[0][2] = m[0][2] * c - tmp * s; | - | ||||||||||||||||||||||||
| 600 | m[2][3] = (tmp = m[2][3]) * c + m[0][3] * s; | - | ||||||||||||||||||||||||
| 601 | m[0][3] = m[0][3] * c - tmp * s; | - | ||||||||||||||||||||||||
| 602 | - | |||||||||||||||||||||||||
| 603 | flagBits |= Rotation; | - | ||||||||||||||||||||||||
| 604 | return; never executed: return; | 0 | ||||||||||||||||||||||||
| 605 | } | - | ||||||||||||||||||||||||
| 606 | } never executed: else if (y == 0.0fend of block
| 0 | ||||||||||||||||||||||||
| 607 | - | |||||||||||||||||||||||||
| 608 | if (x < 0
| 0 | ||||||||||||||||||||||||
| 609 | s = -s; never executed: s = -s; | 0 | ||||||||||||||||||||||||
| 610 | float tmp; | - | ||||||||||||||||||||||||
| 611 | m[1][0] = (tmp = m[1][0]) * c + m[2][0] * s; | - | ||||||||||||||||||||||||
| 612 | m[2][0] = m[2][0] * c - tmp * s; | - | ||||||||||||||||||||||||
| 613 | m[1][1] = (tmp = m[1][1]) * c + m[2][1] * s; | - | ||||||||||||||||||||||||
| 614 | m[2][1] = m[2][1] * c - tmp * s; | - | ||||||||||||||||||||||||
| 615 | m[1][2] = (tmp = m[1][2]) * c + m[2][2] * s; | - | ||||||||||||||||||||||||
| 616 | m[2][2] = m[2][2] * c - tmp * s; | - | ||||||||||||||||||||||||
| 617 | m[1][3] = (tmp = m[1][3]) * c + m[2][3] * s; | - | ||||||||||||||||||||||||
| 618 | m[2][3] = m[2][3] * c - tmp * s; | - | ||||||||||||||||||||||||
| 619 | - | |||||||||||||||||||||||||
| 620 | flagBits |= Rotation; | - | ||||||||||||||||||||||||
| 621 | return; never executed: return; | 0 | ||||||||||||||||||||||||
| 622 | } | - | ||||||||||||||||||||||||
| 623 | - | |||||||||||||||||||||||||
| 624 | double len = double(x) * double(x) + | - | ||||||||||||||||||||||||
| 625 | double(y) * double(y) + | - | ||||||||||||||||||||||||
| 626 | double(z) * double(z); | - | ||||||||||||||||||||||||
| 627 | if (!qFuzzyCompare(len, 1.0)
| 0 | ||||||||||||||||||||||||
| 628 | len = std::sqrt(len); | - | ||||||||||||||||||||||||
| 629 | x = float(double(x) / len); | - | ||||||||||||||||||||||||
| 630 | y = float(double(y) / len); | - | ||||||||||||||||||||||||
| 631 | z = float(double(z) / len); | - | ||||||||||||||||||||||||
| 632 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 633 | float ic = 1.0f - c; | - | ||||||||||||||||||||||||
| 634 | QMatrix4x4 rot(1); | - | ||||||||||||||||||||||||
| 635 | rot.m[0][0] = x * x * ic + c; | - | ||||||||||||||||||||||||
| 636 | rot.m[1][0] = x * y * ic - z * s; | - | ||||||||||||||||||||||||
| 637 | rot.m[2][0] = x * z * ic + y * s; | - | ||||||||||||||||||||||||
| 638 | rot.m[3][0] = 0.0f; | - | ||||||||||||||||||||||||
| 639 | rot.m[0][1] = y * x * ic + z * s; | - | ||||||||||||||||||||||||
| 640 | rot.m[1][1] = y * y * ic + c; | - | ||||||||||||||||||||||||
| 641 | rot.m[2][1] = y * z * ic - x * s; | - | ||||||||||||||||||||||||
| 642 | rot.m[3][1] = 0.0f; | - | ||||||||||||||||||||||||
| 643 | rot.m[0][2] = x * z * ic - y * s; | - | ||||||||||||||||||||||||
| 644 | rot.m[1][2] = y * z * ic + x * s; | - | ||||||||||||||||||||||||
| 645 | rot.m[2][2] = z * z * ic + c; | - | ||||||||||||||||||||||||
| 646 | rot.m[3][2] = 0.0f; | - | ||||||||||||||||||||||||
| 647 | rot.m[0][3] = 0.0f; | - | ||||||||||||||||||||||||
| 648 | rot.m[1][3] = 0.0f; | - | ||||||||||||||||||||||||
| 649 | rot.m[2][3] = 0.0f; | - | ||||||||||||||||||||||||
| 650 | rot.m[3][3] = 1.0f; | - | ||||||||||||||||||||||||
| 651 | rot.flagBits = Rotation; | - | ||||||||||||||||||||||||
| 652 | *this *= rot; | - | ||||||||||||||||||||||||
| 653 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 654 | - | |||||||||||||||||||||||||
| 655 | - | |||||||||||||||||||||||||
| 656 | - | |||||||||||||||||||||||||
| 657 | - | |||||||||||||||||||||||||
| 658 | void QMatrix4x4::projectedRotate(float angle, float x, float y, float z) | - | ||||||||||||||||||||||||
| 659 | { | - | ||||||||||||||||||||||||
| 660 | - | |||||||||||||||||||||||||
| 661 | - | |||||||||||||||||||||||||
| 662 | if (angle == 0.0f
| 0 | ||||||||||||||||||||||||
| 663 | return; never executed: return; | 0 | ||||||||||||||||||||||||
| 664 | float c, s; | - | ||||||||||||||||||||||||
| 665 | if (angle == 90.0f
| 0 | ||||||||||||||||||||||||
| 666 | s = 1.0f; | - | ||||||||||||||||||||||||
| 667 | c = 0.0f; | - | ||||||||||||||||||||||||
| 668 | } never executed: else if (angle == -90.0fend of block
| 0 | ||||||||||||||||||||||||
| 669 | s = -1.0f; | - | ||||||||||||||||||||||||
| 670 | c = 0.0f; | - | ||||||||||||||||||||||||
| 671 | } never executed: else if (angle == 180.0fend of block
| 0 | ||||||||||||||||||||||||
| 672 | s = 0.0f; | - | ||||||||||||||||||||||||
| 673 | c = -1.0f; | - | ||||||||||||||||||||||||
| 674 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
| 675 | float a = angle * 3.14159265358979323846 / 180.0f; | - | ||||||||||||||||||||||||
| 676 | c = std::cos(a); | - | ||||||||||||||||||||||||
| 677 | s = std::sin(a); | - | ||||||||||||||||||||||||
| 678 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 679 | if (x == 0.0f
| 0 | ||||||||||||||||||||||||
| 680 | if (y == 0.0f
| 0 | ||||||||||||||||||||||||
| 681 | if (z != 0.0f
| 0 | ||||||||||||||||||||||||
| 682 | - | |||||||||||||||||||||||||
| 683 | if (z < 0
| 0 | ||||||||||||||||||||||||
| 684 | s = -s; never executed: s = -s; | 0 | ||||||||||||||||||||||||
| 685 | float tmp; | - | ||||||||||||||||||||||||
| 686 | m[0][0] = (tmp = m[0][0]) * c + m[1][0] * s; | - | ||||||||||||||||||||||||
| 687 | m[1][0] = m[1][0] * c - tmp * s; | - | ||||||||||||||||||||||||
| 688 | m[0][1] = (tmp = m[0][1]) * c + m[1][1] * s; | - | ||||||||||||||||||||||||
| 689 | m[1][1] = m[1][1] * c - tmp * s; | - | ||||||||||||||||||||||||
| 690 | m[0][2] = (tmp = m[0][2]) * c + m[1][2] * s; | - | ||||||||||||||||||||||||
| 691 | m[1][2] = m[1][2] * c - tmp * s; | - | ||||||||||||||||||||||||
| 692 | m[0][3] = (tmp = m[0][3]) * c + m[1][3] * s; | - | ||||||||||||||||||||||||
| 693 | m[1][3] = m[1][3] * c - tmp * s; | - | ||||||||||||||||||||||||
| 694 | - | |||||||||||||||||||||||||
| 695 | flagBits |= Rotation2D; | - | ||||||||||||||||||||||||
| 696 | return; never executed: return; | 0 | ||||||||||||||||||||||||
| 697 | } | - | ||||||||||||||||||||||||
| 698 | } never executed: else if (z == 0.0fend of block
| 0 | ||||||||||||||||||||||||
| 699 | - | |||||||||||||||||||||||||
| 700 | if (y < 0
| 0 | ||||||||||||||||||||||||
| 701 | s = -s; never executed: s = -s; | 0 | ||||||||||||||||||||||||
| 702 | m[0][0] = m[0][0] * c + m[3][0] * s * inv_dist_to_plane; | - | ||||||||||||||||||||||||
| 703 | m[0][1] = m[0][1] * c + m[3][1] * s * inv_dist_to_plane; | - | ||||||||||||||||||||||||
| 704 | m[0][2] = m[0][2] * c + m[3][2] * s * inv_dist_to_plane; | - | ||||||||||||||||||||||||
| 705 | m[0][3] = m[0][3] * c + m[3][3] * s * inv_dist_to_plane; | - | ||||||||||||||||||||||||
| 706 | flagBits = General; | - | ||||||||||||||||||||||||
| 707 | return; never executed: return; | 0 | ||||||||||||||||||||||||
| 708 | } | - | ||||||||||||||||||||||||
| 709 | } never executed: else if (y == 0.0fend of block
| 0 | ||||||||||||||||||||||||
| 710 | - | |||||||||||||||||||||||||
| 711 | if (x < 0
| 0 | ||||||||||||||||||||||||
| 712 | s = -s; never executed: s = -s; | 0 | ||||||||||||||||||||||||
| 713 | m[1][0] = m[1][0] * c - m[3][0] * s * inv_dist_to_plane; | - | ||||||||||||||||||||||||
| 714 | m[1][1] = m[1][1] * c - m[3][1] * s * inv_dist_to_plane; | - | ||||||||||||||||||||||||
| 715 | m[1][2] = m[1][2] * c - m[3][2] * s * inv_dist_to_plane; | - | ||||||||||||||||||||||||
| 716 | m[1][3] = m[1][3] * c - m[3][3] * s * inv_dist_to_plane; | - | ||||||||||||||||||||||||
| 717 | flagBits = General; | - | ||||||||||||||||||||||||
| 718 | return; never executed: return; | 0 | ||||||||||||||||||||||||
| 719 | } | - | ||||||||||||||||||||||||
| 720 | double len = double(x) * double(x) + | - | ||||||||||||||||||||||||
| 721 | double(y) * double(y) + | - | ||||||||||||||||||||||||
| 722 | double(z) * double(z); | - | ||||||||||||||||||||||||
| 723 | if (!qFuzzyCompare(len, 1.0)
| 0 | ||||||||||||||||||||||||
| 724 | len = std::sqrt(len); | - | ||||||||||||||||||||||||
| 725 | x = float(double(x) / len); | - | ||||||||||||||||||||||||
| 726 | y = float(double(y) / len); | - | ||||||||||||||||||||||||
| 727 | z = float(double(z) / len); | - | ||||||||||||||||||||||||
| 728 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 729 | float ic = 1.0f - c; | - | ||||||||||||||||||||||||
| 730 | QMatrix4x4 rot(1); | - | ||||||||||||||||||||||||
| 731 | rot.m[0][0] = x * x * ic + c; | - | ||||||||||||||||||||||||
| 732 | rot.m[1][0] = x * y * ic - z * s; | - | ||||||||||||||||||||||||
| 733 | rot.m[2][0] = 0.0f; | - | ||||||||||||||||||||||||
| 734 | rot.m[3][0] = 0.0f; | - | ||||||||||||||||||||||||
| 735 | rot.m[0][1] = y * x * ic + z * s; | - | ||||||||||||||||||||||||
| 736 | rot.m[1][1] = y * y * ic + c; | - | ||||||||||||||||||||||||
| 737 | rot.m[2][1] = 0.0f; | - | ||||||||||||||||||||||||
| 738 | rot.m[3][1] = 0.0f; | - | ||||||||||||||||||||||||
| 739 | rot.m[0][2] = 0.0f; | - | ||||||||||||||||||||||||
| 740 | rot.m[1][2] = 0.0f; | - | ||||||||||||||||||||||||
| 741 | rot.m[2][2] = 1.0f; | - | ||||||||||||||||||||||||
| 742 | rot.m[3][2] = 0.0f; | - | ||||||||||||||||||||||||
| 743 | rot.m[0][3] = (x * z * ic - y * s) * -inv_dist_to_plane; | - | ||||||||||||||||||||||||
| 744 | rot.m[1][3] = (y * z * ic + x * s) * -inv_dist_to_plane; | - | ||||||||||||||||||||||||
| 745 | rot.m[2][3] = 0.0f; | - | ||||||||||||||||||||||||
| 746 | rot.m[3][3] = 1.0f; | - | ||||||||||||||||||||||||
| 747 | rot.flagBits = General; | - | ||||||||||||||||||||||||
| 748 | *this *= rot; | - | ||||||||||||||||||||||||
| 749 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 750 | void QMatrix4x4::rotate(const QQuaternion& quaternion) | - | ||||||||||||||||||||||||
| 751 | { | - | ||||||||||||||||||||||||
| 752 | - | |||||||||||||||||||||||||
| 753 | - | |||||||||||||||||||||||||
| 754 | - | |||||||||||||||||||||||||
| 755 | QMatrix4x4 m(Qt::Uninitialized); | - | ||||||||||||||||||||||||
| 756 | - | |||||||||||||||||||||||||
| 757 | const float f2x = quaternion.x() + quaternion.x(); | - | ||||||||||||||||||||||||
| 758 | const float f2y = quaternion.y() + quaternion.y(); | - | ||||||||||||||||||||||||
| 759 | const float f2z = quaternion.z() + quaternion.z(); | - | ||||||||||||||||||||||||
| 760 | const float f2xw = f2x * quaternion.scalar(); | - | ||||||||||||||||||||||||
| 761 | const float f2yw = f2y * quaternion.scalar(); | - | ||||||||||||||||||||||||
| 762 | const float f2zw = f2z * quaternion.scalar(); | - | ||||||||||||||||||||||||
| 763 | const float f2xx = f2x * quaternion.x(); | - | ||||||||||||||||||||||||
| 764 | const float f2xy = f2x * quaternion.y(); | - | ||||||||||||||||||||||||
| 765 | const float f2xz = f2x * quaternion.z(); | - | ||||||||||||||||||||||||
| 766 | const float f2yy = f2y * quaternion.y(); | - | ||||||||||||||||||||||||
| 767 | const float f2yz = f2y * quaternion.z(); | - | ||||||||||||||||||||||||
| 768 | const float f2zz = f2z * quaternion.z(); | - | ||||||||||||||||||||||||
| 769 | - | |||||||||||||||||||||||||
| 770 | m.m[0][0] = 1.0f - (f2yy + f2zz); | - | ||||||||||||||||||||||||
| 771 | m.m[1][0] = f2xy - f2zw; | - | ||||||||||||||||||||||||
| 772 | m.m[2][0] = f2xz + f2yw; | - | ||||||||||||||||||||||||
| 773 | m.m[3][0] = 0.0f; | - | ||||||||||||||||||||||||
| 774 | m.m[0][1] = f2xy + f2zw; | - | ||||||||||||||||||||||||
| 775 | m.m[1][1] = 1.0f - (f2xx + f2zz); | - | ||||||||||||||||||||||||
| 776 | m.m[2][1] = f2yz - f2xw; | - | ||||||||||||||||||||||||
| 777 | m.m[3][1] = 0.0f; | - | ||||||||||||||||||||||||
| 778 | m.m[0][2] = f2xz - f2yw; | - | ||||||||||||||||||||||||
| 779 | m.m[1][2] = f2yz + f2xw; | - | ||||||||||||||||||||||||
| 780 | m.m[2][2] = 1.0f - (f2xx + f2yy); | - | ||||||||||||||||||||||||
| 781 | m.m[3][2] = 0.0f; | - | ||||||||||||||||||||||||
| 782 | m.m[0][3] = 0.0f; | - | ||||||||||||||||||||||||
| 783 | m.m[1][3] = 0.0f; | - | ||||||||||||||||||||||||
| 784 | m.m[2][3] = 0.0f; | - | ||||||||||||||||||||||||
| 785 | m.m[3][3] = 1.0f; | - | ||||||||||||||||||||||||
| 786 | m.flagBits = Rotation; | - | ||||||||||||||||||||||||
| 787 | *this *= m; | - | ||||||||||||||||||||||||
| 788 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 789 | void QMatrix4x4::ortho(const QRect& rect) | - | ||||||||||||||||||||||||
| 790 | { | - | ||||||||||||||||||||||||
| 791 | - | |||||||||||||||||||||||||
| 792 | - | |||||||||||||||||||||||||
| 793 | - | |||||||||||||||||||||||||
| 794 | - | |||||||||||||||||||||||||
| 795 | ortho(rect.x(), rect.x() + rect.width(), rect.y() + rect.height(), rect.y(), -1.0f, 1.0f); | - | ||||||||||||||||||||||||
| 796 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 797 | void QMatrix4x4::ortho(const QRectF& rect) | - | ||||||||||||||||||||||||
| 798 | { | - | ||||||||||||||||||||||||
| 799 | ortho(rect.left(), rect.right(), rect.bottom(), rect.top(), -1.0f, 1.0f); | - | ||||||||||||||||||||||||
| 800 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 801 | void QMatrix4x4::ortho(float left, float right, float bottom, float top, float nearPlane, float farPlane) | - | ||||||||||||||||||||||||
| 802 | { | - | ||||||||||||||||||||||||
| 803 | - | |||||||||||||||||||||||||
| 804 | if (left == right
| 0 | ||||||||||||||||||||||||
| 805 | return; never executed: return; | 0 | ||||||||||||||||||||||||
| 806 | - | |||||||||||||||||||||||||
| 807 | - | |||||||||||||||||||||||||
| 808 | float width = right - left; | - | ||||||||||||||||||||||||
| 809 | float invheight = top - bottom; | - | ||||||||||||||||||||||||
| 810 | float clip = farPlane - nearPlane; | - | ||||||||||||||||||||||||
| 811 | QMatrix4x4 m(1); | - | ||||||||||||||||||||||||
| 812 | m.m[0][0] = 2.0f / width; | - | ||||||||||||||||||||||||
| 813 | m.m[1][0] = 0.0f; | - | ||||||||||||||||||||||||
| 814 | m.m[2][0] = 0.0f; | - | ||||||||||||||||||||||||
| 815 | m.m[3][0] = -(left + right) / width; | - | ||||||||||||||||||||||||
| 816 | m.m[0][1] = 0.0f; | - | ||||||||||||||||||||||||
| 817 | m.m[1][1] = 2.0f / invheight; | - | ||||||||||||||||||||||||
| 818 | m.m[2][1] = 0.0f; | - | ||||||||||||||||||||||||
| 819 | m.m[3][1] = -(top + bottom) / invheight; | - | ||||||||||||||||||||||||
| 820 | m.m[0][2] = 0.0f; | - | ||||||||||||||||||||||||
| 821 | m.m[1][2] = 0.0f; | - | ||||||||||||||||||||||||
| 822 | m.m[2][2] = -2.0f / clip; | - | ||||||||||||||||||||||||
| 823 | m.m[3][2] = -(nearPlane + farPlane) / clip; | - | ||||||||||||||||||||||||
| 824 | m.m[0][3] = 0.0f; | - | ||||||||||||||||||||||||
| 825 | m.m[1][3] = 0.0f; | - | ||||||||||||||||||||||||
| 826 | m.m[2][3] = 0.0f; | - | ||||||||||||||||||||||||
| 827 | m.m[3][3] = 1.0f; | - | ||||||||||||||||||||||||
| 828 | m.flagBits = Translation | Scale; | - | ||||||||||||||||||||||||
| 829 | - | |||||||||||||||||||||||||
| 830 | - | |||||||||||||||||||||||||
| 831 | *this *= m; | - | ||||||||||||||||||||||||
| 832 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 833 | void QMatrix4x4::frustum(float left, float right, float bottom, float top, float nearPlane, float farPlane) | - | ||||||||||||||||||||||||
| 834 | { | - | ||||||||||||||||||||||||
| 835 | - | |||||||||||||||||||||||||
| 836 | if (left == right
| 0 | ||||||||||||||||||||||||
| 837 | return; never executed: return; | 0 | ||||||||||||||||||||||||
| 838 | - | |||||||||||||||||||||||||
| 839 | - | |||||||||||||||||||||||||
| 840 | QMatrix4x4 m(1); | - | ||||||||||||||||||||||||
| 841 | float width = right - left; | - | ||||||||||||||||||||||||
| 842 | float invheight = top - bottom; | - | ||||||||||||||||||||||||
| 843 | float clip = farPlane - nearPlane; | - | ||||||||||||||||||||||||
| 844 | m.m[0][0] = 2.0f * nearPlane / width; | - | ||||||||||||||||||||||||
| 845 | m.m[1][0] = 0.0f; | - | ||||||||||||||||||||||||
| 846 | m.m[2][0] = (left + right) / width; | - | ||||||||||||||||||||||||
| 847 | m.m[3][0] = 0.0f; | - | ||||||||||||||||||||||||
| 848 | m.m[0][1] = 0.0f; | - | ||||||||||||||||||||||||
| 849 | m.m[1][1] = 2.0f * nearPlane / invheight; | - | ||||||||||||||||||||||||
| 850 | m.m[2][1] = (top + bottom) / invheight; | - | ||||||||||||||||||||||||
| 851 | m.m[3][1] = 0.0f; | - | ||||||||||||||||||||||||
| 852 | m.m[0][2] = 0.0f; | - | ||||||||||||||||||||||||
| 853 | m.m[1][2] = 0.0f; | - | ||||||||||||||||||||||||
| 854 | m.m[2][2] = -(nearPlane + farPlane) / clip; | - | ||||||||||||||||||||||||
| 855 | m.m[3][2] = -2.0f * nearPlane * farPlane / clip; | - | ||||||||||||||||||||||||
| 856 | m.m[0][3] = 0.0f; | - | ||||||||||||||||||||||||
| 857 | m.m[1][3] = 0.0f; | - | ||||||||||||||||||||||||
| 858 | m.m[2][3] = -1.0f; | - | ||||||||||||||||||||||||
| 859 | m.m[3][3] = 0.0f; | - | ||||||||||||||||||||||||
| 860 | m.flagBits = General; | - | ||||||||||||||||||||||||
| 861 | - | |||||||||||||||||||||||||
| 862 | - | |||||||||||||||||||||||||
| 863 | *this *= m; | - | ||||||||||||||||||||||||
| 864 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 865 | void QMatrix4x4::perspective(float verticalAngle, float aspectRatio, float nearPlane, float farPlane) | - | ||||||||||||||||||||||||
| 866 | { | - | ||||||||||||||||||||||||
| 867 | - | |||||||||||||||||||||||||
| 868 | if (nearPlane == farPlane
| 0 | ||||||||||||||||||||||||
| 869 | return; never executed: return; | 0 | ||||||||||||||||||||||||
| 870 | - | |||||||||||||||||||||||||
| 871 | - | |||||||||||||||||||||||||
| 872 | QMatrix4x4 m(1); | - | ||||||||||||||||||||||||
| 873 | float radians = (verticalAngle / 2.0f) * 3.14159265358979323846 / 180.0f; | - | ||||||||||||||||||||||||
| 874 | float sine = std::sin(radians); | - | ||||||||||||||||||||||||
| 875 | if (sine == 0.0f
| 0 | ||||||||||||||||||||||||
| 876 | return; never executed: return; | 0 | ||||||||||||||||||||||||
| 877 | float cotan = std::cos(radians) / sine; | - | ||||||||||||||||||||||||
| 878 | float clip = farPlane - nearPlane; | - | ||||||||||||||||||||||||
| 879 | m.m[0][0] = cotan / aspectRatio; | - | ||||||||||||||||||||||||
| 880 | m.m[1][0] = 0.0f; | - | ||||||||||||||||||||||||
| 881 | m.m[2][0] = 0.0f; | - | ||||||||||||||||||||||||
| 882 | m.m[3][0] = 0.0f; | - | ||||||||||||||||||||||||
| 883 | m.m[0][1] = 0.0f; | - | ||||||||||||||||||||||||
| 884 | m.m[1][1] = cotan; | - | ||||||||||||||||||||||||
| 885 | m.m[2][1] = 0.0f; | - | ||||||||||||||||||||||||
| 886 | m.m[3][1] = 0.0f; | - | ||||||||||||||||||||||||
| 887 | m.m[0][2] = 0.0f; | - | ||||||||||||||||||||||||
| 888 | m.m[1][2] = 0.0f; | - | ||||||||||||||||||||||||
| 889 | m.m[2][2] = -(nearPlane + farPlane) / clip; | - | ||||||||||||||||||||||||
| 890 | m.m[3][2] = -(2.0f * nearPlane * farPlane) / clip; | - | ||||||||||||||||||||||||
| 891 | m.m[0][3] = 0.0f; | - | ||||||||||||||||||||||||
| 892 | m.m[1][3] = 0.0f; | - | ||||||||||||||||||||||||
| 893 | m.m[2][3] = -1.0f; | - | ||||||||||||||||||||||||
| 894 | m.m[3][3] = 0.0f; | - | ||||||||||||||||||||||||
| 895 | m.flagBits = General; | - | ||||||||||||||||||||||||
| 896 | - | |||||||||||||||||||||||||
| 897 | - | |||||||||||||||||||||||||
| 898 | *this *= m; | - | ||||||||||||||||||||||||
| 899 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 900 | void QMatrix4x4::lookAt(const QVector3D& eye, const QVector3D& center, const QVector3D& up) | - | ||||||||||||||||||||||||
| 901 | { | - | ||||||||||||||||||||||||
| 902 | QVector3D forward = center - eye; | - | ||||||||||||||||||||||||
| 903 | if (qFuzzyIsNull(forward.x())
| 0 | ||||||||||||||||||||||||
| 904 | return; never executed: return; | 0 | ||||||||||||||||||||||||
| 905 | - | |||||||||||||||||||||||||
| 906 | forward.normalize(); | - | ||||||||||||||||||||||||
| 907 | QVector3D side = QVector3D::crossProduct(forward, up).normalized(); | - | ||||||||||||||||||||||||
| 908 | QVector3D upVector = QVector3D::crossProduct(side, forward); | - | ||||||||||||||||||||||||
| 909 | - | |||||||||||||||||||||||||
| 910 | QMatrix4x4 m(1); | - | ||||||||||||||||||||||||
| 911 | m.m[0][0] = side.x(); | - | ||||||||||||||||||||||||
| 912 | m.m[1][0] = side.y(); | - | ||||||||||||||||||||||||
| 913 | m.m[2][0] = side.z(); | - | ||||||||||||||||||||||||
| 914 | m.m[3][0] = 0.0f; | - | ||||||||||||||||||||||||
| 915 | m.m[0][1] = upVector.x(); | - | ||||||||||||||||||||||||
| 916 | m.m[1][1] = upVector.y(); | - | ||||||||||||||||||||||||
| 917 | m.m[2][1] = upVector.z(); | - | ||||||||||||||||||||||||
| 918 | m.m[3][1] = 0.0f; | - | ||||||||||||||||||||||||
| 919 | m.m[0][2] = -forward.x(); | - | ||||||||||||||||||||||||
| 920 | m.m[1][2] = -forward.y(); | - | ||||||||||||||||||||||||
| 921 | m.m[2][2] = -forward.z(); | - | ||||||||||||||||||||||||
| 922 | m.m[3][2] = 0.0f; | - | ||||||||||||||||||||||||
| 923 | m.m[0][3] = 0.0f; | - | ||||||||||||||||||||||||
| 924 | m.m[1][3] = 0.0f; | - | ||||||||||||||||||||||||
| 925 | m.m[2][3] = 0.0f; | - | ||||||||||||||||||||||||
| 926 | m.m[3][3] = 1.0f; | - | ||||||||||||||||||||||||
| 927 | m.flagBits = Rotation; | - | ||||||||||||||||||||||||
| 928 | - | |||||||||||||||||||||||||
| 929 | *this *= m; | - | ||||||||||||||||||||||||
| 930 | translate(-eye); | - | ||||||||||||||||||||||||
| 931 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 932 | void QMatrix4x4::viewport(float left, float bottom, float width, float height, float nearPlane, float farPlane) | - | ||||||||||||||||||||||||
| 933 | { | - | ||||||||||||||||||||||||
| 934 | const float w2 = width / 2.0f; | - | ||||||||||||||||||||||||
| 935 | const float h2 = height / 2.0f; | - | ||||||||||||||||||||||||
| 936 | - | |||||||||||||||||||||||||
| 937 | QMatrix4x4 m(1); | - | ||||||||||||||||||||||||
| 938 | m.m[0][0] = w2; | - | ||||||||||||||||||||||||
| 939 | m.m[1][0] = 0.0f; | - | ||||||||||||||||||||||||
| 940 | m.m[2][0] = 0.0f; | - | ||||||||||||||||||||||||
| 941 | m.m[3][0] = left + w2; | - | ||||||||||||||||||||||||
| 942 | m.m[0][1] = 0.0f; | - | ||||||||||||||||||||||||
| 943 | m.m[1][1] = h2; | - | ||||||||||||||||||||||||
| 944 | m.m[2][1] = 0.0f; | - | ||||||||||||||||||||||||
| 945 | m.m[3][1] = bottom + h2; | - | ||||||||||||||||||||||||
| 946 | m.m[0][2] = 0.0f; | - | ||||||||||||||||||||||||
| 947 | m.m[1][2] = 0.0f; | - | ||||||||||||||||||||||||
| 948 | m.m[2][2] = (farPlane - nearPlane) / 2.0f; | - | ||||||||||||||||||||||||
| 949 | m.m[3][2] = (nearPlane + farPlane) / 2.0f; | - | ||||||||||||||||||||||||
| 950 | m.m[0][3] = 0.0f; | - | ||||||||||||||||||||||||
| 951 | m.m[1][3] = 0.0f; | - | ||||||||||||||||||||||||
| 952 | m.m[2][3] = 0.0f; | - | ||||||||||||||||||||||||
| 953 | m.m[3][3] = 1.0f; | - | ||||||||||||||||||||||||
| 954 | m.flagBits = General; | - | ||||||||||||||||||||||||
| 955 | - | |||||||||||||||||||||||||
| 956 | *this *= m; | - | ||||||||||||||||||||||||
| 957 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 958 | void QMatrix4x4::flipCoordinates() | - | ||||||||||||||||||||||||
| 959 | { | - | ||||||||||||||||||||||||
| 960 | - | |||||||||||||||||||||||||
| 961 | - | |||||||||||||||||||||||||
| 962 | - | |||||||||||||||||||||||||
| 963 | if (flagBits < Rotation2D
| 0 | ||||||||||||||||||||||||
| 964 | - | |||||||||||||||||||||||||
| 965 | m[1][1] = -m[1][1]; | - | ||||||||||||||||||||||||
| 966 | m[2][2] = -m[2][2]; | - | ||||||||||||||||||||||||
| 967 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
| 968 | m[1][0] = -m[1][0]; | - | ||||||||||||||||||||||||
| 969 | m[1][1] = -m[1][1]; | - | ||||||||||||||||||||||||
| 970 | m[1][2] = -m[1][2]; | - | ||||||||||||||||||||||||
| 971 | m[1][3] = -m[1][3]; | - | ||||||||||||||||||||||||
| 972 | m[2][0] = -m[2][0]; | - | ||||||||||||||||||||||||
| 973 | m[2][1] = -m[2][1]; | - | ||||||||||||||||||||||||
| 974 | m[2][2] = -m[2][2]; | - | ||||||||||||||||||||||||
| 975 | m[2][3] = -m[2][3]; | - | ||||||||||||||||||||||||
| 976 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 977 | flagBits |= Scale; | - | ||||||||||||||||||||||||
| 978 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 979 | - | |||||||||||||||||||||||||
| 980 | - | |||||||||||||||||||||||||
| 981 | - | |||||||||||||||||||||||||
| 982 | - | |||||||||||||||||||||||||
| 983 | - | |||||||||||||||||||||||||
| 984 | void QMatrix4x4::copyDataTo(float *values) const | - | ||||||||||||||||||||||||
| 985 | { | - | ||||||||||||||||||||||||
| 986 | for (int row = 0; row < 4
| 0 | ||||||||||||||||||||||||
| 987 | for (int col = 0; col < 4
| 0 | ||||||||||||||||||||||||
| 988 | values[row * 4 + col] = float(m[col][row]); never executed: values[row * 4 + col] = float(m[col][row]); | 0 | ||||||||||||||||||||||||
| 989 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 990 | QMatrix QMatrix4x4::toAffine() const | - | ||||||||||||||||||||||||
| 991 | { | - | ||||||||||||||||||||||||
| 992 | return never executed: QMatrix(m[0][0], m[0][1],return QMatrix(m[0][0], m[0][1], m[1][0], m[1][1], m[3][0], m[3][1]);never executed: return QMatrix(m[0][0], m[0][1], m[1][0], m[1][1], m[3][0], m[3][1]); | 0 | ||||||||||||||||||||||||
| 993 | m[1][0], m[1][1], never executed: return QMatrix(m[0][0], m[0][1], m[1][0], m[1][1], m[3][0], m[3][1]); | 0 | ||||||||||||||||||||||||
| 994 | m[3][0], m[3][1]); never executed: return QMatrix(m[0][0], m[0][1], m[1][0], m[1][1], m[3][0], m[3][1]); | 0 | ||||||||||||||||||||||||
| 995 | } | - | ||||||||||||||||||||||||
| 996 | QTransform QMatrix4x4::toTransform() const | - | ||||||||||||||||||||||||
| 997 | { | - | ||||||||||||||||||||||||
| 998 | return never executed: QTransform(m[0][0], m[0][1], m[0][3],return QTransform(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3]);never executed: return QTransform(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3]); | 0 | ||||||||||||||||||||||||
| 999 | m[1][0], m[1][1], m[1][3], never executed: return QTransform(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3]); | 0 | ||||||||||||||||||||||||
| 1000 | m[3][0], m[3][1], m[3][3]); never executed: return QTransform(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3]); | 0 | ||||||||||||||||||||||||
| 1001 | } | - | ||||||||||||||||||||||||
| 1002 | QTransform QMatrix4x4::toTransform(float distanceToPlane) const | - | ||||||||||||||||||||||||
| 1003 | { | - | ||||||||||||||||||||||||
| 1004 | if (distanceToPlane == 1024.0f
| 0 | ||||||||||||||||||||||||
| 1005 | - | |||||||||||||||||||||||||
| 1006 | return never executed: QTransform(m[0][0], m[0][1], m[0][3] - m[0][2] * inv_dist_to_plane,return QTransform(m[0][0], m[0][1], m[0][3] - m[0][2] * inv_dist_to_plane, m[1][0], m[1][1], m[1][3] - m[1][2] * inv_dist_to_plane, m[3][0], m[3][1], m[3][3] - m[3][2] * inv_dist_to_plane);never executed: return QTransform(m[0][0], m[0][1], m[0][3] - m[0][2] * inv_dist_to_plane, m[1][0], m[1][1], m[1][3] - m[1][2] * inv_dist_to_plane, m[3][0], m[3][1], m[3][3] - m[3][2] * inv_dist_to_plane); | 0 | ||||||||||||||||||||||||
| 1007 | m[1][0], m[1][1], m[1][3] - m[1][2] * inv_dist_to_plane, never executed: return QTransform(m[0][0], m[0][1], m[0][3] - m[0][2] * inv_dist_to_plane, m[1][0], m[1][1], m[1][3] - m[1][2] * inv_dist_to_plane, m[3][0], m[3][1], m[3][3] - m[3][2] * inv_dist_to_plane); | 0 | ||||||||||||||||||||||||
| 1008 | m[3][0], m[3][1], m[3][3] - m[3][2] * inv_dist_to_plane); never executed: return QTransform(m[0][0], m[0][1], m[0][3] - m[0][2] * inv_dist_to_plane, m[1][0], m[1][1], m[1][3] - m[1][2] * inv_dist_to_plane, m[3][0], m[3][1], m[3][3] - m[3][2] * inv_dist_to_plane); | 0 | ||||||||||||||||||||||||
| 1009 | } else if (distanceToPlane != 0.0f
| 0 | ||||||||||||||||||||||||
| 1010 | - | |||||||||||||||||||||||||
| 1011 | - | |||||||||||||||||||||||||
| 1012 | - | |||||||||||||||||||||||||
| 1013 | - | |||||||||||||||||||||||||
| 1014 | - | |||||||||||||||||||||||||
| 1015 | - | |||||||||||||||||||||||||
| 1016 | - | |||||||||||||||||||||||||
| 1017 | float d = 1.0f / distanceToPlane; | - | ||||||||||||||||||||||||
| 1018 | return never executed: QTransform(m[0][0], m[0][1], m[0][3] - m[0][2] * d,return QTransform(m[0][0], m[0][1], m[0][3] - m[0][2] * d, m[1][0], m[1][1], m[1][3] - m[1][2] * d, m[3][0], m[3][1], m[3][3] - m[3][2] * d);never executed: return QTransform(m[0][0], m[0][1], m[0][3] - m[0][2] * d, m[1][0], m[1][1], m[1][3] - m[1][2] * d, m[3][0], m[3][1], m[3][3] - m[3][2] * d); | 0 | ||||||||||||||||||||||||
| 1019 | m[1][0], m[1][1], m[1][3] - m[1][2] * d, never executed: return QTransform(m[0][0], m[0][1], m[0][3] - m[0][2] * d, m[1][0], m[1][1], m[1][3] - m[1][2] * d, m[3][0], m[3][1], m[3][3] - m[3][2] * d); | 0 | ||||||||||||||||||||||||
| 1020 | m[3][0], m[3][1], m[3][3] - m[3][2] * d); never executed: return QTransform(m[0][0], m[0][1], m[0][3] - m[0][2] * d, m[1][0], m[1][1], m[1][3] - m[1][2] * d, m[3][0], m[3][1], m[3][3] - m[3][2] * d); | 0 | ||||||||||||||||||||||||
| 1021 | } else { | - | ||||||||||||||||||||||||
| 1022 | - | |||||||||||||||||||||||||
| 1023 | return never executed: QTransform(m[0][0], m[0][1], m[0][3],return QTransform(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3]);never executed: return QTransform(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3]); | 0 | ||||||||||||||||||||||||
| 1024 | m[1][0], m[1][1], m[1][3], never executed: return QTransform(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3]); | 0 | ||||||||||||||||||||||||
| 1025 | m[3][0], m[3][1], m[3][3]); never executed: return QTransform(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3]); | 0 | ||||||||||||||||||||||||
| 1026 | } | - | ||||||||||||||||||||||||
| 1027 | } | - | ||||||||||||||||||||||||
| 1028 | QRect QMatrix4x4::mapRect(const QRect& rect) const | - | ||||||||||||||||||||||||
| 1029 | { | - | ||||||||||||||||||||||||
| 1030 | if (flagBits < Scale
| 0 | ||||||||||||||||||||||||
| 1031 | - | |||||||||||||||||||||||||
| 1032 | return never executed: QRect(qRound(rect.x() + m[3][0]),return QRect(qRound(rect.x() + m[3][0]), qRound(rect.y() + m[3][1]), rect.width(), rect.height());never executed: return QRect(qRound(rect.x() + m[3][0]), qRound(rect.y() + m[3][1]), rect.width(), rect.height()); | 0 | ||||||||||||||||||||||||
| 1033 | qRound(rect.y() + m[3][1]), never executed: return QRect(qRound(rect.x() + m[3][0]), qRound(rect.y() + m[3][1]), rect.width(), rect.height()); | 0 | ||||||||||||||||||||||||
| 1034 | rect.width(), rect.height()); never executed: return QRect(qRound(rect.x() + m[3][0]), qRound(rect.y() + m[3][1]), rect.width(), rect.height()); | 0 | ||||||||||||||||||||||||
| 1035 | } else if (flagBits < Rotation2D
| 0 | ||||||||||||||||||||||||
| 1036 | - | |||||||||||||||||||||||||
| 1037 | float x = rect.x() * m[0][0] + m[3][0]; | - | ||||||||||||||||||||||||
| 1038 | float y = rect.y() * m[1][1] + m[3][1]; | - | ||||||||||||||||||||||||
| 1039 | float w = rect.width() * m[0][0]; | - | ||||||||||||||||||||||||
| 1040 | float h = rect.height() * m[1][1]; | - | ||||||||||||||||||||||||
| 1041 | if (w < 0
| 0 | ||||||||||||||||||||||||
| 1042 | w = -w; | - | ||||||||||||||||||||||||
| 1043 | x -= w; | - | ||||||||||||||||||||||||
| 1044 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 1045 | if (h < 0
| 0 | ||||||||||||||||||||||||
| 1046 | h = -h; | - | ||||||||||||||||||||||||
| 1047 | y -= h; | - | ||||||||||||||||||||||||
| 1048 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 1049 | return never executed: QRect(qRound(x), qRound(y), qRound(w), qRound(h));return QRect(qRound(x), qRound(y), qRound(w), qRound(h));never executed: return QRect(qRound(x), qRound(y), qRound(w), qRound(h)); | 0 | ||||||||||||||||||||||||
| 1050 | } | - | ||||||||||||||||||||||||
| 1051 | - | |||||||||||||||||||||||||
| 1052 | QPoint tl = map(rect.topLeft()); | - | ||||||||||||||||||||||||
| 1053 | QPoint tr = map(QPoint(rect.x() + rect.width(), rect.y())); | - | ||||||||||||||||||||||||
| 1054 | QPoint bl = map(QPoint(rect.x(), rect.y() + rect.height())); | - | ||||||||||||||||||||||||
| 1055 | QPoint br = map(QPoint(rect.x() + rect.width(), | - | ||||||||||||||||||||||||
| 1056 | rect.y() + rect.height())); | - | ||||||||||||||||||||||||
| 1057 | - | |||||||||||||||||||||||||
| 1058 | int xmin = qMin(qMin(tl.x(), tr.x()), qMin(bl.x(), br.x())); | - | ||||||||||||||||||||||||
| 1059 | int xmax = qMax(qMax(tl.x(), tr.x()), qMax(bl.x(), br.x())); | - | ||||||||||||||||||||||||
| 1060 | int ymin = qMin(qMin(tl.y(), tr.y()), qMin(bl.y(), br.y())); | - | ||||||||||||||||||||||||
| 1061 | int ymax = qMax(qMax(tl.y(), tr.y()), qMax(bl.y(), br.y())); | - | ||||||||||||||||||||||||
| 1062 | - | |||||||||||||||||||||||||
| 1063 | return never executed: QRect(xmin, ymin, xmax - xmin, ymax - ymin);return QRect(xmin, ymin, xmax - xmin, ymax - ymin);never executed: return QRect(xmin, ymin, xmax - xmin, ymax - ymin); | 0 | ||||||||||||||||||||||||
| 1064 | } | - | ||||||||||||||||||||||||
| 1065 | QRectF QMatrix4x4::mapRect(const QRectF& rect) const | - | ||||||||||||||||||||||||
| 1066 | { | - | ||||||||||||||||||||||||
| 1067 | if (flagBits < Scale
| 0 | ||||||||||||||||||||||||
| 1068 | - | |||||||||||||||||||||||||
| 1069 | return never executed: rect.translated(m[3][0], m[3][1]);return rect.translated(m[3][0], m[3][1]);never executed: return rect.translated(m[3][0], m[3][1]); | 0 | ||||||||||||||||||||||||
| 1070 | } else if (flagBits < Rotation2D
| 0 | ||||||||||||||||||||||||
| 1071 | - | |||||||||||||||||||||||||
| 1072 | float x = rect.x() * m[0][0] + m[3][0]; | - | ||||||||||||||||||||||||
| 1073 | float y = rect.y() * m[1][1] + m[3][1]; | - | ||||||||||||||||||||||||
| 1074 | float w = rect.width() * m[0][0]; | - | ||||||||||||||||||||||||
| 1075 | float h = rect.height() * m[1][1]; | - | ||||||||||||||||||||||||
| 1076 | if (w < 0
| 0 | ||||||||||||||||||||||||
| 1077 | w = -w; | - | ||||||||||||||||||||||||
| 1078 | x -= w; | - | ||||||||||||||||||||||||
| 1079 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 1080 | if (h < 0
| 0 | ||||||||||||||||||||||||
| 1081 | h = -h; | - | ||||||||||||||||||||||||
| 1082 | y -= h; | - | ||||||||||||||||||||||||
| 1083 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 1084 | return never executed: QRectF(x, y, w, h);return QRectF(x, y, w, h);never executed: return QRectF(x, y, w, h); | 0 | ||||||||||||||||||||||||
| 1085 | } | - | ||||||||||||||||||||||||
| 1086 | - | |||||||||||||||||||||||||
| 1087 | QPointF tl = map(rect.topLeft()); QPointF tr = map(rect.topRight()); | - | ||||||||||||||||||||||||
| 1088 | QPointF bl = map(rect.bottomLeft()); QPointF br = map(rect.bottomRight()); | - | ||||||||||||||||||||||||
| 1089 | - | |||||||||||||||||||||||||
| 1090 | float xmin = qMin(qMin(tl.x(), tr.x()), qMin(bl.x(), br.x())); | - | ||||||||||||||||||||||||
| 1091 | float xmax = qMax(qMax(tl.x(), tr.x()), qMax(bl.x(), br.x())); | - | ||||||||||||||||||||||||
| 1092 | float ymin = qMin(qMin(tl.y(), tr.y()), qMin(bl.y(), br.y())); | - | ||||||||||||||||||||||||
| 1093 | float ymax = qMax(qMax(tl.y(), tr.y()), qMax(bl.y(), br.y())); | - | ||||||||||||||||||||||||
| 1094 | - | |||||||||||||||||||||||||
| 1095 | return never executed: QRectF(QPointF(xmin, ymin), QPointF(xmax, ymax));return QRectF(QPointF(xmin, ymin), QPointF(xmax, ymax));never executed: return QRectF(QPointF(xmin, ymin), QPointF(xmax, ymax)); | 0 | ||||||||||||||||||||||||
| 1096 | } | - | ||||||||||||||||||||||||
| 1097 | QMatrix4x4 QMatrix4x4::orthonormalInverse() const | - | ||||||||||||||||||||||||
| 1098 | { | - | ||||||||||||||||||||||||
| 1099 | QMatrix4x4 result(1); | - | ||||||||||||||||||||||||
| 1100 | - | |||||||||||||||||||||||||
| 1101 | result.m[0][0] = m[0][0]; | - | ||||||||||||||||||||||||
| 1102 | result.m[1][0] = m[0][1]; | - | ||||||||||||||||||||||||
| 1103 | result.m[2][0] = m[0][2]; | - | ||||||||||||||||||||||||
| 1104 | - | |||||||||||||||||||||||||
| 1105 | result.m[0][1] = m[1][0]; | - | ||||||||||||||||||||||||
| 1106 | result.m[1][1] = m[1][1]; | - | ||||||||||||||||||||||||
| 1107 | result.m[2][1] = m[1][2]; | - | ||||||||||||||||||||||||
| 1108 | - | |||||||||||||||||||||||||
| 1109 | result.m[0][2] = m[2][0]; | - | ||||||||||||||||||||||||
| 1110 | result.m[1][2] = m[2][1]; | - | ||||||||||||||||||||||||
| 1111 | result.m[2][2] = m[2][2]; | - | ||||||||||||||||||||||||
| 1112 | - | |||||||||||||||||||||||||
| 1113 | result.m[0][3] = 0.0f; | - | ||||||||||||||||||||||||
| 1114 | result.m[1][3] = 0.0f; | - | ||||||||||||||||||||||||
| 1115 | result.m[2][3] = 0.0f; | - | ||||||||||||||||||||||||
| 1116 | - | |||||||||||||||||||||||||
| 1117 | result.m[3][0] = -(result.m[0][0] * m[3][0] + result.m[1][0] * m[3][1] + result.m[2][0] * m[3][2]); | - | ||||||||||||||||||||||||
| 1118 | result.m[3][1] = -(result.m[0][1] * m[3][0] + result.m[1][1] * m[3][1] + result.m[2][1] * m[3][2]); | - | ||||||||||||||||||||||||
| 1119 | result.m[3][2] = -(result.m[0][2] * m[3][0] + result.m[1][2] * m[3][1] + result.m[2][2] * m[3][2]); | - | ||||||||||||||||||||||||
| 1120 | result.m[3][3] = 1.0f; | - | ||||||||||||||||||||||||
| 1121 | - | |||||||||||||||||||||||||
| 1122 | result.flagBits = flagBits; | - | ||||||||||||||||||||||||
| 1123 | - | |||||||||||||||||||||||||
| 1124 | return never executed: result;return result;never executed: return result; | 0 | ||||||||||||||||||||||||
| 1125 | } | - | ||||||||||||||||||||||||
| 1126 | void QMatrix4x4::optimize() | - | ||||||||||||||||||||||||
| 1127 | { | - | ||||||||||||||||||||||||
| 1128 | - | |||||||||||||||||||||||||
| 1129 | flagBits = General; | - | ||||||||||||||||||||||||
| 1130 | if (m[0][3] != 0
| 0 | ||||||||||||||||||||||||
| 1131 | return; never executed: return; | 0 | ||||||||||||||||||||||||
| 1132 | - | |||||||||||||||||||||||||
| 1133 | flagBits &= ~Perspective; | - | ||||||||||||||||||||||||
| 1134 | - | |||||||||||||||||||||||||
| 1135 | - | |||||||||||||||||||||||||
| 1136 | if (m[3][0] == 0
| 0 | ||||||||||||||||||||||||
| 1137 | flagBits &= ~Translation; never executed: flagBits &= ~Translation; | 0 | ||||||||||||||||||||||||
| 1138 | - | |||||||||||||||||||||||||
| 1139 | - | |||||||||||||||||||||||||
| 1140 | if (!m[0][2]
| 0 | ||||||||||||||||||||||||
| 1141 | flagBits &= ~Rotation; | - | ||||||||||||||||||||||||
| 1142 | - | |||||||||||||||||||||||||
| 1143 | if (!m[0][1]
| 0 | ||||||||||||||||||||||||
| 1144 | flagBits &= ~Rotation2D; | - | ||||||||||||||||||||||||
| 1145 | - | |||||||||||||||||||||||||
| 1146 | if (m[0][0] == 1
| 0 | ||||||||||||||||||||||||
| 1147 | flagBits &= ~Scale; never executed: flagBits &= ~Scale; | 0 | ||||||||||||||||||||||||
| 1148 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
| 1149 | - | |||||||||||||||||||||||||
| 1150 | double mm[4][4]; | - | ||||||||||||||||||||||||
| 1151 | copyToDoubles(m, mm); | - | ||||||||||||||||||||||||
| 1152 | double det = matrixDet2(mm, 0, 1, 0, 1); | - | ||||||||||||||||||||||||
| 1153 | double lenX = mm[0][0] * mm[0][0] + mm[0][1] * mm[0][1]; | - | ||||||||||||||||||||||||
| 1154 | double lenY = mm[1][0] * mm[1][0] + mm[1][1] * mm[1][1]; | - | ||||||||||||||||||||||||
| 1155 | double lenZ = mm[2][2]; | - | ||||||||||||||||||||||||
| 1156 | if (qFuzzyCompare(det, 1.0)
| 0 | ||||||||||||||||||||||||
| 1157 | && qFuzzyCompare(lenY, 1.0)
| 0 | ||||||||||||||||||||||||
| 1158 | { | - | ||||||||||||||||||||||||
| 1159 | flagBits &= ~Scale; | - | ||||||||||||||||||||||||
| 1160 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 1161 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 1162 | } else { | - | ||||||||||||||||||||||||
| 1163 | - | |||||||||||||||||||||||||
| 1164 | double mm[4][4]; | - | ||||||||||||||||||||||||
| 1165 | copyToDoubles(m, mm); | - | ||||||||||||||||||||||||
| 1166 | double det = matrixDet3(mm, 0, 1, 2, 0, 1, 2); | - | ||||||||||||||||||||||||
| 1167 | double lenX = mm[0][0] * mm[0][0] + mm[0][1] * mm[0][1] + mm[0][2] * mm[0][2]; | - | ||||||||||||||||||||||||
| 1168 | double lenY = mm[1][0] * mm[1][0] + mm[1][1] * mm[1][1] + mm[1][2] * mm[1][2]; | - | ||||||||||||||||||||||||
| 1169 | double lenZ = mm[2][0] * mm[2][0] + mm[2][1] * mm[2][1] + mm[2][2] * mm[2][2]; | - | ||||||||||||||||||||||||
| 1170 | if (qFuzzyCompare(det, 1.0)
| 0 | ||||||||||||||||||||||||
| 1171 | && qFuzzyCompare(lenY, 1.0)
| 0 | ||||||||||||||||||||||||
| 1172 | { | - | ||||||||||||||||||||||||
| 1173 | flagBits &= ~Scale; | - | ||||||||||||||||||||||||
| 1174 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 1175 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 1176 | } | - | ||||||||||||||||||||||||
| 1177 | - | |||||||||||||||||||||||||
| 1178 | - | |||||||||||||||||||||||||
| 1179 | - | |||||||||||||||||||||||||
| 1180 | - | |||||||||||||||||||||||||
| 1181 | QMatrix4x4::operator QVariant() const | - | ||||||||||||||||||||||||
| 1182 | { | - | ||||||||||||||||||||||||
| 1183 | return never executed: QVariant(QVariant::Matrix4x4, this);return QVariant(QVariant::Matrix4x4, this);never executed: return QVariant(QVariant::Matrix4x4, this); | 0 | ||||||||||||||||||||||||
| 1184 | } | - | ||||||||||||||||||||||||
| 1185 | - | |||||||||||||||||||||||||
| 1186 | - | |||||||||||||||||||||||||
| 1187 | - | |||||||||||||||||||||||||
| 1188 | QDebug operator<<(QDebug dbg, const QMatrix4x4 &m) | - | ||||||||||||||||||||||||
| 1189 | { | - | ||||||||||||||||||||||||
| 1190 | QDebugStateSaver saver(dbg); | - | ||||||||||||||||||||||||
| 1191 | - | |||||||||||||||||||||||||
| 1192 | QByteArray bits; | - | ||||||||||||||||||||||||
| 1193 | if (m.flagBits == QMatrix4x4::Identity
| 0 | ||||||||||||||||||||||||
| 1194 | bits = "Identity"; | - | ||||||||||||||||||||||||
| 1195 | } never executed: else if (m.flagBits == QMatrix4x4::Generalend of block
| 0 | ||||||||||||||||||||||||
| 1196 | bits = "General"; | - | ||||||||||||||||||||||||
| 1197 | } never executed: else {end of block | 0 | ||||||||||||||||||||||||
| 1198 | if ((
| 0 | ||||||||||||||||||||||||
| 1199 | bits += "Translation,"; never executed: bits += "Translation,"; | 0 | ||||||||||||||||||||||||
| 1200 | if ((
| 0 | ||||||||||||||||||||||||
| 1201 | bits += "Scale,"; never executed: bits += "Scale,"; | 0 | ||||||||||||||||||||||||
| 1202 | if ((
| 0 | ||||||||||||||||||||||||
| 1203 | bits += "Rotation2D,"; never executed: bits += "Rotation2D,"; | 0 | ||||||||||||||||||||||||
| 1204 | if ((
| 0 | ||||||||||||||||||||||||
| 1205 | bits += "Rotation,"; never executed: bits += "Rotation,"; | 0 | ||||||||||||||||||||||||
| 1206 | if ((
| 0 | ||||||||||||||||||||||||
| 1207 | bits += "Perspective,"; never executed: bits += "Perspective,"; | 0 | ||||||||||||||||||||||||
| 1208 | if (bits.size() > 0
| 0 | ||||||||||||||||||||||||
| 1209 | bits = bits.left(bits.size() - 1); never executed: bits = bits.left(bits.size() - 1); | 0 | ||||||||||||||||||||||||
| 1210 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 1211 | - | |||||||||||||||||||||||||
| 1212 | - | |||||||||||||||||||||||||
| 1213 | dbg.nospace() << "QMatrix4x4(type:" << bits.constData() << endl | - | ||||||||||||||||||||||||
| 1214 | << qSetFieldWidth(10) | - | ||||||||||||||||||||||||
| 1215 | << m(0, 0) << m(0, 1) << m(0, 2) << m(0, 3) << endl | - | ||||||||||||||||||||||||
| 1216 | << m(1, 0) << m(1, 1) << m(1, 2) << m(1, 3) << endl | - | ||||||||||||||||||||||||
| 1217 | << m(2, 0) << m(2, 1) << m(2, 2) << m(2, 3) << endl | - | ||||||||||||||||||||||||
| 1218 | << m(3, 0) << m(3, 1) << m(3, 2) << m(3, 3) << endl | - | ||||||||||||||||||||||||
| 1219 | << qSetFieldWidth(0) << ')'; | - | ||||||||||||||||||||||||
| 1220 | return never executed: dbg;return dbg;never executed: return dbg; | 0 | ||||||||||||||||||||||||
| 1221 | } | - | ||||||||||||||||||||||||
| 1222 | QDataStream &operator<<(QDataStream &stream, const QMatrix4x4 &matrix) | - | ||||||||||||||||||||||||
| 1223 | { | - | ||||||||||||||||||||||||
| 1224 | for (int row = 0; row < 4
| 0 | ||||||||||||||||||||||||
| 1225 | for (int col = 0; col < 4
| 0 | ||||||||||||||||||||||||
| 1226 | stream << matrix(row, col); never executed: stream << matrix(row, col); | 0 | ||||||||||||||||||||||||
| 1227 | return never executed: stream;return stream;never executed: return stream; | 0 | ||||||||||||||||||||||||
| 1228 | } | - | ||||||||||||||||||||||||
| 1229 | QDataStream &operator>>(QDataStream &stream, QMatrix4x4 &matrix) | - | ||||||||||||||||||||||||
| 1230 | { | - | ||||||||||||||||||||||||
| 1231 | float x; | - | ||||||||||||||||||||||||
| 1232 | for (int row = 0; row < 4
| 0 | ||||||||||||||||||||||||
| 1233 | for (int col = 0; col < 4
| 0 | ||||||||||||||||||||||||
| 1234 | stream >> x; | - | ||||||||||||||||||||||||
| 1235 | matrix(row, col) = x; | - | ||||||||||||||||||||||||
| 1236 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 1237 | } never executed: end of block | 0 | ||||||||||||||||||||||||
| 1238 | matrix.optimize(); | - | ||||||||||||||||||||||||
| 1239 | return never executed: stream;return stream;never executed: return stream; | 0 | ||||||||||||||||||||||||
| 1240 | } | - | ||||||||||||||||||||||||
| 1241 | - | |||||||||||||||||||||||||
| 1242 | - | |||||||||||||||||||||||||
| 1243 | - | |||||||||||||||||||||||||
| 1244 | - | |||||||||||||||||||||||||
| 1245 | - | |||||||||||||||||||||||||
| 1246 | - | |||||||||||||||||||||||||
| Switch to Source code | Preprocessed file |