Matrix.decompose() fix

Fixes some errors when matrix has zero scale in one or two directions
This commit is contained in:
Jolbas
2023-08-31 14:50:36 +02:00
committed by Chris Hennes
parent 2d8c280528
commit 40228d9ef2
3 changed files with 87 additions and 63 deletions

View File

@@ -266,20 +266,20 @@ class AlgebraTestCase(unittest.TestCase):
self.assertNotEqual(m2, m4 * m3, "Wrong multiplication order")
def testRotationFromMatrix(self):
rot = FreeCAD.Rotation(45,30,0)
rot = FreeCAD.Rotation(45, 30, 0)
m_r = rot.toMatrix()
m_r.move(5,6,7)
m_r.move(5, 6, 7)
m_s = FreeCAD.Matrix()
m_s.scale(1,1,3)
m_s.move(7,3,2)
target_rot = FreeCAD.Rotation(45,60,0)
m_s.scale(1, 1, 3)
m_s.move(7, 3, 2)
target_rot = FreeCAD.Rotation(45, 60, 0)
err = "Non uniform scale has wrong affect non orthogonal rotation"
self.assertTrue(FreeCAD.Rotation(m_s * m_r).isSame(target_rot, 1e-12), err)
err = "Right multiplication with non uniform scale must not affect rotation"
self.assertTrue(FreeCAD.Rotation(m_r * m_s).isSame(rot,1e-12), err)
self.assertTrue(FreeCAD.Rotation(m_r * m_s).isSame(rot, 1e-12), err)
m_r.scale(-2)
err = "Uniform scale must not affect rotation"
self.assertTrue(FreeCAD.Rotation(m_r).isSame(rot,1e-12), err)
self.assertTrue(FreeCAD.Rotation(m_r).isSame(rot, 1e-12), err)
def testRotation(self):
r = FreeCAD.Rotation(1, 0, 0, 0) # 180 deg around (1,0,0)