mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-05 00:04:40 -05:00
Add method to translate QgsMatrix4x4 by QgsVector3D
This commit is contained in:
parent
816c274bb4
commit
c25596269f
@ -51,6 +51,11 @@ Initializes matrix by setting all values in row-major order
|
||||
QList< double > dataList() const /PyName=data,HoldGIL/;
|
||||
%Docstring
|
||||
Returns matrix data (in column-major order)
|
||||
%End
|
||||
|
||||
void translate( const QgsVector3D &vector );
|
||||
%Docstring
|
||||
Multiplies this matrix by another that translates coordinates by the components of a ``vector``.
|
||||
%End
|
||||
|
||||
QgsVector3D map( const QgsVector3D &vector ) const /HoldGIL/;
|
||||
|
||||
@ -29,6 +29,13 @@ QgsMatrix4x4::QgsMatrix4x4( double m11, double m12, double m13, double m14,
|
||||
m[3][0] = m14; m[3][1] = m24; m[3][2] = m34; m[3][3] = m44;
|
||||
}
|
||||
|
||||
void QgsMatrix4x4::translate( const QgsVector3D &vector )
|
||||
{
|
||||
m[3][0] += m[0][0] * vector.x() + m[1][0] * vector.y() + m[2][0] * vector.z();
|
||||
m[3][1] += m[0][1] * vector.x() + m[1][1] * vector.y() + m[2][1] * vector.z();
|
||||
m[3][2] += m[0][2] * vector.x() + m[1][2] * vector.y() + m[2][2] * vector.z();
|
||||
m[3][3] += m[0][3] * vector.x() + m[1][3] * vector.y() + m[2][3] * vector.z();
|
||||
}
|
||||
|
||||
QList< double > QgsMatrix4x4::dataList() const
|
||||
{
|
||||
|
||||
@ -71,6 +71,11 @@ class CORE_EXPORT QgsMatrix4x4
|
||||
//! Returns matrix data (in column-major order)
|
||||
QList< double > dataList() const SIP_PYNAME( data ) SIP_HOLDGIL;
|
||||
|
||||
/**
|
||||
* Multiplies this matrix by another that translates coordinates by the components of a \a vector.
|
||||
*/
|
||||
void translate( const QgsVector3D &vector );
|
||||
|
||||
//! Matrix-vector multiplication (vector is converted to homogenous coordinates [X,Y,Z,1] and back)
|
||||
QgsVector3D map( const QgsVector3D &vector ) const SIP_HOLDGIL
|
||||
{
|
||||
|
||||
@ -78,6 +78,22 @@ class TestQgsMatrix4x4(QgisTestCase):
|
||||
13, 14, 15, 16])])
|
||||
)
|
||||
|
||||
def test_translate(self):
|
||||
"""
|
||||
Test translating a matrix
|
||||
"""
|
||||
m = QgsMatrix4x4()
|
||||
m.translate(QgsVector3D(1, 2, 3))
|
||||
self.assertEqual(m.data(), [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 2.0, 3.0, 1.0])
|
||||
|
||||
m = QgsMatrix4x4(1, 2, 3, 4,
|
||||
5, 6, 7, 8,
|
||||
9, 10, 11, 12,
|
||||
0, 0, 0, 1)
|
||||
|
||||
m.translate(QgsVector3D(1, 2, 3))
|
||||
self.assertEqual(m.data(), [1.0, 5.0, 9.0, 0.0, 2.0, 6.0, 10.0, 0.0, 3.0, 7.0, 11.0, 0.0, 18.0, 46.0, 74.0, 1.0])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user