diff --git a/src/Math/Matrix.h b/src/Math/Matrix.h index 45c2671a9..edcecd6e6 100644 --- a/src/Math/Matrix.h +++ b/src/Math/Matrix.h @@ -80,11 +80,21 @@ template class Matrix { return _data[col*size+row]; } + /** @brief Matrix column */ + inline Vector at(size_t col) const { + return _data+col*size; + } + /** @brief Set value at given position */ inline void set(size_t row, size_t col, T value) { _data[col*size+row] = value; } + /** @brief Set matrix column */ + inline void set(size_t col, const Vector& value) { + memcpy(_data+col*size, value.data(), size*sizeof(T)); + } + /** @brief Add value to given position */ inline void add(size_t row, size_t col, T value) { _data[col*size+row] += value; diff --git a/src/Math/Test/MatrixTest.cpp b/src/Math/Test/MatrixTest.cpp index c21af5fae..be52e8e72 100644 --- a/src/Math/Test/MatrixTest.cpp +++ b/src/Math/Test/MatrixTest.cpp @@ -25,6 +25,7 @@ namespace Magnum { namespace Math { namespace Test { typedef Matrix Matrix4; typedef Matrix Matrix3; +typedef Vector Vector4; void MatrixTest::constructIdentity() { Matrix4 identity; @@ -55,18 +56,22 @@ void MatrixTest::constructZero() { void MatrixTest::data() { Matrix4 m(false); + float vector[] = { 4.0f, 5.0f, 6.0f, 7.0f }; + + m.set(3, vector); m.set(1, 2, 1.0f); m.set(2, 1, 1.0f); m.add(2, 1, 0.5f); QVERIFY(m.at(1, 2) == 1.0f); + QVERIFY(m.at(3) == vector); float expected[] = { 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.5f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, - 0.0f, 0.0f, 0.0f, 0.0f + 4.0f, 5.0f, 6.0f, 7.0f }; QVERIFY(m == Matrix4(expected));