Added SRTTransform3D test, corrected fromMatrix bug
This commit is contained in:
parent
18ddff76f0
commit
0bc923b719
@ -122,7 +122,8 @@ class SRTTransform3D(Transform3D):
|
||||
self.setRow(i, m.row(i))
|
||||
m = self.matrix().reshape(4,4)
|
||||
## translation is 4th column
|
||||
self._state['pos'] = m[:3,3]
|
||||
self._state['pos'] = m[:3,3]
|
||||
|
||||
## scale is vector-length of first three columns
|
||||
scale = (m[:3,:3]**2).sum(axis=0)**0.5
|
||||
## see whether there is an inversion
|
||||
@ -132,7 +133,7 @@ class SRTTransform3D(Transform3D):
|
||||
self._state['scale'] = scale
|
||||
|
||||
## rotation axis is the eigenvector with eigenvalue=1
|
||||
r = m[:3, :3] / scale[:, np.newaxis]
|
||||
r = m[:3, :3] / scale[np.newaxis, :]
|
||||
try:
|
||||
evals, evecs = numpy.linalg.eig(r)
|
||||
except:
|
||||
|
39
pyqtgraph/tests/test_srttransform3d.py
Normal file
39
pyqtgraph/tests/test_srttransform3d.py
Normal file
@ -0,0 +1,39 @@
|
||||
import pyqtgraph as pg
|
||||
from pyqtgraph.Qt import QtCore, QtGui
|
||||
import numpy as np
|
||||
from numpy.testing import assert_array_almost_equal, assert_almost_equal
|
||||
|
||||
testPoints = np.array([
|
||||
[0, 0, 0],
|
||||
[1, 0, 0],
|
||||
[0, 1, 0],
|
||||
[0, 0, 1],
|
||||
[-1, -1, 0],
|
||||
[0, -1, -1]])
|
||||
|
||||
|
||||
def testMatrix():
|
||||
"""
|
||||
SRTTransform3D => Transform3D => SRTTransform3D
|
||||
"""
|
||||
tr = pg.SRTTransform3D()
|
||||
tr.setRotate(45, (0, 0, 1))
|
||||
tr.setScale(0.2, 0.4, 1)
|
||||
tr.setTranslate(10, 20, 40)
|
||||
assert tr.getRotation() == (45, QtGui.QVector3D(0, 0, 1))
|
||||
assert tr.getScale() == QtGui.QVector3D(0.2, 0.4, 1)
|
||||
assert tr.getTranslation() == QtGui.QVector3D(10, 20, 40)
|
||||
|
||||
tr2 = pg.Transform3D(tr)
|
||||
assert np.all(tr.matrix() == tr2.matrix())
|
||||
|
||||
# This is the most important test:
|
||||
# The transition from Transform3D to SRTTransform3D is a tricky one.
|
||||
tr3 = pg.SRTTransform3D(tr2)
|
||||
assert_array_almost_equal(tr.matrix(), tr3.matrix())
|
||||
assert_almost_equal(tr3.getRotation()[0], tr.getRotation()[0])
|
||||
assert_array_almost_equal(tr3.getRotation()[1], tr.getRotation()[1])
|
||||
assert_array_almost_equal(tr3.getScale(), tr.getScale())
|
||||
assert_array_almost_equal(tr3.getTranslation(), tr.getTranslation())
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user