unit tests for Rotation class

This commit is contained in:
wmayer
2018-01-01 16:45:33 +01:00
parent 83fe8f8c36
commit 31bf496b67

View File

@@ -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()