diff --git a/src/Mod/Test/BaseTests.py b/src/Mod/Test/BaseTests.py index 38d0d49363..1d98cf7414 100644 --- a/src/Mod/Test/BaseTests.py +++ b/src/Mod/Test/BaseTests.py @@ -22,7 +22,7 @@ #* Juergen Riegel 2004 * #***************************************************************************/ -import FreeCAD, os, unittest, tempfile +import FreeCAD, os, unittest, tempfile, math class ConsoleTestCase(unittest.TestCase): def setUp(self): @@ -178,6 +178,61 @@ class ParameterTestCase(unittest.TestCase): self.failUnless(m2==m3*m4 ,"Wrong multiplication order") self.failUnless(not m2==m4*m3,"Wrong multiplication order") + def testRoation(self): + r=FreeCAD.Rotation(1,0,0,0) # 180 deg around (1,0,0) + self.assertEqual(r.Axis, FreeCAD.Vector(1,0,0)) + self.assertAlmostEqual(math.fabs(r.Angle), math.fabs(math.pi)) + + r=r.multiply(r) # identity + self.assertEqual(r.Axis, FreeCAD.Vector(0,0,1)) + self.assertAlmostEqual(r.Angle, 0) + + r=FreeCAD.Rotation(1,0,0,0) + r.Q=(0,0,0,1) # update axis and angle + s=FreeCAD.Rotation(0,0,0,1) + self.assertEqual(r.Axis, s.Axis) + self.assertAlmostEqual(r.Angle, s.Angle) + self.assertTrue(r.isSame(s)) + + r=FreeCAD.Rotation(1,0,0,0) + r.Matrix=FreeCAD.Matrix() # update axis and angle + s=FreeCAD.Rotation(0,0,0,1) + self.assertEqual(r.Axis, s.Axis) + self.assertAlmostEqual(r.Angle, s.Angle) + self.assertTrue(r.isSame(s)) + + r=FreeCAD.Rotation(1,0,0,0) + r.Axes=(FreeCAD.Vector(0,0,1),FreeCAD.Vector(0,0,1)) # update axis and angle + s=FreeCAD.Rotation(0,0,0,1) + self.assertEqual(r.Axis, s.Axis) + self.assertAlmostEqual(r.Angle, s.Angle) + self.assertTrue(r.isSame(s)) + + #add 360 deg to angle + r=FreeCAD.Rotation(FreeCAD.Vector(1,0,0),270) + s=FreeCAD.Rotation(FreeCAD.Vector(1,0,0),270+360) + self.assertEqual(r.Axis, s.Axis) + #self.assertAlmostEqual(r.Angle, s.Angle + 2*math.pi) + self.assertTrue(r.isSame(s)) + + #subtract 360 deg from angle using Euler angles + r=FreeCAD.Rotation(0,0,180) + r.invert() + s=FreeCAD.Rotation(0,0,-180) + self.assertTrue(r.isSame(s)) + + #subtract 360 deg from angle using quaternion + r=FreeCAD.Rotation(1,0,0,0) + s=FreeCAD.Rotation(-1,0,0,0) + #angles have the same sign + if r.Angle * s.Angle > 0: + self.assertEqual(r.Axis, s.Axis*(-1)) + else: + self.assertAlmostEqual(r.Angle, -s.Angle) + self.assertTrue(r.isSame(s)) + r.invert() + self.assertTrue(r.isSame(s)) + def testBounding(self): b=FreeCAD.BoundBox() b.setVoid()