mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-08 00:06:51 -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/;
|
QList< double > dataList() const /PyName=data,HoldGIL/;
|
||||||
%Docstring
|
%Docstring
|
||||||
Returns matrix data (in column-major order)
|
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
|
%End
|
||||||
|
|
||||||
QgsVector3D map( const QgsVector3D &vector ) const /HoldGIL/;
|
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;
|
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
|
QList< double > QgsMatrix4x4::dataList() const
|
||||||
{
|
{
|
||||||
|
|||||||
@ -71,6 +71,11 @@ class CORE_EXPORT QgsMatrix4x4
|
|||||||
//! Returns matrix data (in column-major order)
|
//! Returns matrix data (in column-major order)
|
||||||
QList< double > dataList() const SIP_PYNAME( data ) SIP_HOLDGIL;
|
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)
|
//! Matrix-vector multiplication (vector is converted to homogenous coordinates [X,Y,Z,1] and back)
|
||||||
QgsVector3D map( const QgsVector3D &vector ) const SIP_HOLDGIL
|
QgsVector3D map( const QgsVector3D &vector ) const SIP_HOLDGIL
|
||||||
{
|
{
|
||||||
|
|||||||
@ -78,6 +78,22 @@ class TestQgsMatrix4x4(QgisTestCase):
|
|||||||
13, 14, 15, 16])])
|
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__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user