Beispiel #1
0
    def test_parent_set_invalid(self):
        """Setting parent with an invalid value."""

        n = Node()

        with self.assertRaises(TypeError, msg="Initialising with an invalid value (a string) did not raise a TypeError."):
            n.parent = "spoon"
Beispiel #2
0
    def test_parent_set_invalid(self):
        """Setting parent with an invalid value."""

        n = Node()

        with self.assertRaises(TypeError, msg="Initialising with an invalid value (a string) did not raise a TypeError."):
            n.parent = "spoon"
Beispiel #3
0
    def test_parent_enforce_tree(self):
        """Prevention of cyclic parenting."""

        # build test tree
        a = Node()
        b = Node(a)
        c1 = Node(b)
        c2 = Node(b)

        # test tree at different depths to confirm resursive check succeeds
        with self.assertRaises(ValueError, msg = "Illegal cyclic parenting (a -> a) did not raise an exception."):
            a.parent = a

        with self.assertRaises(ValueError, msg = "Illegal cyclic parenting (a -> b) did not raise an exception."):
            a.parent = b

        with self.assertRaises(ValueError, msg = "Illegal cyclic parenting (a -> c2) did not raise an exception."):
            a.parent = c2

        with self.assertRaises(ValueError, msg = "Illegal cyclic parenting (b -> c1) did not raise an exception."):
            b.parent = c1
Beispiel #4
0
    def test_parent_enforce_tree(self):
        """Prevention of cyclic parenting."""

        # build test tree
        a = Node()
        b = Node(a)
        c1 = Node(b)
        c2 = Node(b)

        # test tree at different depths to confirm resursive check succeeds
        with self.assertRaises(ValueError, msg = "Illegal cyclic parenting (a -> a) did not raise an exception."):
            a.parent = a

        with self.assertRaises(ValueError, msg = "Illegal cyclic parenting (a -> b) did not raise an exception."):
            a.parent = b

        with self.assertRaises(ValueError, msg = "Illegal cyclic parenting (a -> c2) did not raise an exception."):
            a.parent = c2

        with self.assertRaises(ValueError, msg = "Illegal cyclic parenting (b -> c1) did not raise an exception."):
            b.parent = c1
Beispiel #5
0
    def test_parent_to_node_from_node(self):
        """Setting parent to a node from an initially parented state."""

        # build initial tree
        a = Node()
        b1 = Node(a, translate(1,2,3))
        b2 = Node(a, translate(2,4,6))
        c = Node(b1, translate(10,20,30))
        d1 = Node(c, translate(100,200,300))
        d2 = Node(c, translate(200,400,600))
        e = Node(d1, translate(1000,2000,3000))

        # set c's parent to b2
        c.parent = b2

        # is parent correct?
        self.assertEqual(c.parent, b2, "Node parent is incorrect.")

        # is c in b1's child list?
        self.assertEqual(b1.children.count(c), 0, "Node was not removed from previous parents child list.")

        # is c in b2's child list?
        self.assertEqual(b2.children.count(c), 1, "Node was not added to new parents child list.")

        # is c.transform correct?
        self.assertTransformAlmostEqual(c.transform, translate(10,20,30), delta = 1e-14, msg = "Transform matrix should not have been modified by change of parent.")

        # is the root node correct?
        self.assertEqual(c.root, a, "Root node is incorrect.")

        # has the root transform been correctly propagated to the re-parented node and its children?
        self.assertTransformAlmostEqual(a._root_transform, AffineMatrix3D(), delta = 1e-14, msg ="Root node's root transform should not have been modified by change of parent.")
        self.assertTransformAlmostEqual(a._root_transform_inverse, AffineMatrix3D(), delta = 1e-14, msg ="Root node's inverse root transform should not have been modified by change of parent.")

        self.assertTransformAlmostEqual(b1._root_transform, translate(1,2,3), delta = 1e-14, msg = "Previous parent's root transform should not have been modified by change of parent.")
        self.assertTransformAlmostEqual(b1._root_transform_inverse, translate(1,2,3).inverse(), delta = 1e-14, msg = "Previous parent's inverse root transform should not have been modified by change of parent.")

        self.assertTransformAlmostEqual(b2._root_transform, translate(2,4,6), delta = 1e-14, msg = "Parent's root transform should not have been modified by change of parent.")
        self.assertTransformAlmostEqual(b2._root_transform_inverse, translate(2,4,6).inverse(), delta = 1e-14, msg = "Parent's inverse root transform should not have been modified by change of parent.")

        self.assertTransformAlmostEqual(c._root_transform, translate(12,24,36), delta = 1e-14, msg = "Root transform has not correctly propagated to re-parented node.")
        self.assertTransformAlmostEqual(c._root_transform_inverse, translate(12,24,36).inverse(), delta = 1e-14, msg = "Inverse root transform has not correctly propagated to re-parented node.")

        self.assertTransformAlmostEqual(d1._root_transform, translate(112,224,336), delta = 1e-14, msg = "Root transform has not correctly propagated to re-parented node's 1st immediate child.")
        self.assertTransformAlmostEqual(d1._root_transform_inverse, translate(112,224,336).inverse(), delta = 1e-14, msg = "Inverse root transform has not correctly propagated to re-parented node's 1st immediate child.")

        self.assertTransformAlmostEqual(d2._root_transform, translate(212,424,636), delta = 1e-14, msg = "Root transform has not correctly propagated to re-parented node's 2nd immediate child.")
        self.assertTransformAlmostEqual(d2._root_transform_inverse, translate(212,424,636).inverse(), delta = 1e-14, msg = "Inverse root transform has not correctly propagated to re-parented node's 2nd immediate child.")

        self.assertTransformAlmostEqual(e._root_transform, translate(1112,2224,3336), delta = 1e-14, msg = "Root transform has not correctly propagated to re-parented node's distant children.")
        self.assertTransformAlmostEqual(e._root_transform_inverse, translate(1112,2224,3336).inverse(), delta = 1e-14, msg = "Inverse root transform has not correctly propagated to re-parented node's distant children.")
Beispiel #6
0
    def test_parent_to_node_from_node(self):
        """Setting parent to a node from an initially parented state."""

        # build initial tree
        a = Node()
        b1 = Node(a, translate(1,2,3))
        b2 = Node(a, translate(2,4,6))
        c = Node(b1, translate(10,20,30))
        d1 = Node(c, translate(100,200,300))
        d2 = Node(c, translate(200,400,600))
        e = Node(d1, translate(1000,2000,3000))

        # set c's parent to b2
        c.parent = b2

        # is parent correct?
        self.assertEqual(c.parent, b2, "Node parent is incorrect.")

        # is c in b1's child list?
        self.assertEqual(b1.children.count(c), 0, "Node was not removed from previous parents child list.")

        # is c in b2's child list?
        self.assertEqual(b2.children.count(c), 1, "Node was not added to new parents child list.")

        # is c.transform correct?
        self.assertTransformAlmostEqual(c.transform, translate(10,20,30), delta = 1e-14, msg = "Transform matrix should not have been modified by change of parent.")

        # is the root node correct?
        self.assertEqual(c.root, a, "Root node is incorrect.")

        # has the root transform been correctly propagated to the re-parented node and its children?
        self.assertTransformAlmostEqual(a._root_transform, AffineMatrix3D(), delta = 1e-14, msg ="Root node's root transform should not have been modified by change of parent.")
        self.assertTransformAlmostEqual(a._root_transform_inverse, AffineMatrix3D(), delta = 1e-14, msg ="Root node's inverse root transform should not have been modified by change of parent.")

        self.assertTransformAlmostEqual(b1._root_transform, translate(1,2,3), delta = 1e-14, msg = "Previous parent's root transform should not have been modified by change of parent.")
        self.assertTransformAlmostEqual(b1._root_transform_inverse, translate(1,2,3).inverse(), delta = 1e-14, msg = "Previous parent's inverse root transform should not have been modified by change of parent.")

        self.assertTransformAlmostEqual(b2._root_transform, translate(2,4,6), delta = 1e-14, msg = "Parent's root transform should not have been modified by change of parent.")
        self.assertTransformAlmostEqual(b2._root_transform_inverse, translate(2,4,6).inverse(), delta = 1e-14, msg = "Parent's inverse root transform should not have been modified by change of parent.")

        self.assertTransformAlmostEqual(c._root_transform, translate(12,24,36), delta = 1e-14, msg = "Root transform has not correctly propagated to re-parented node.")
        self.assertTransformAlmostEqual(c._root_transform_inverse, translate(12,24,36).inverse(), delta = 1e-14, msg = "Inverse root transform has not correctly propagated to re-parented node.")

        self.assertTransformAlmostEqual(d1._root_transform, translate(112,224,336), delta = 1e-14, msg = "Root transform has not correctly propagated to re-parented node's 1st immediate child.")
        self.assertTransformAlmostEqual(d1._root_transform_inverse, translate(112,224,336).inverse(), delta = 1e-14, msg = "Inverse root transform has not correctly propagated to re-parented node's 1st immediate child.")

        self.assertTransformAlmostEqual(d2._root_transform, translate(212,424,636), delta = 1e-14, msg = "Root transform has not correctly propagated to re-parented node's 2nd immediate child.")
        self.assertTransformAlmostEqual(d2._root_transform_inverse, translate(212,424,636).inverse(), delta = 1e-14, msg = "Inverse root transform has not correctly propagated to re-parented node's 2nd immediate child.")

        self.assertTransformAlmostEqual(e._root_transform, translate(1112,2224,3336), delta = 1e-14, msg = "Root transform has not correctly propagated to re-parented node's distant children.")
        self.assertTransformAlmostEqual(e._root_transform_inverse, translate(1112,2224,3336).inverse(), delta = 1e-14, msg = "Inverse root transform has not correctly propagated to re-parented node's distant children.")
Beispiel #7
0
    def test_parent_to_none_from_node(self):
        """Unparenting a node."""

        # build initial tree
        a = Node()
        b = Node(a, translate(1,2,3))
        c = Node(b, translate(10,20,30))
        d1 = Node(c, translate(100,200,300))
        d2 = Node(c, translate(200,400,600))
        e = Node(d1, translate(1000,2000,3000))

        # set c's parent to None
        c.parent = None

        # is parent correct?
        self.assertEqual(c.parent, None, "Node parent is incorrect.")

        # is c in b's child list?
        self.assertEqual(b.children.count(c), 0, "Node was not removed from the previous parents child list.")

        # is c.transform correct?
        self.assertTransformAlmostEqual(c.transform, translate(10,20,30), delta = 1e-14, msg = "Transform matrix should not have been modified by change of parent.")

        # is the root node correct?
        self.assertEqual(c.root, c, "Root node is incorrect.")

        # has the root transform been correctly propagated to the re-parented node and its children?
        self.assertTransformAlmostEqual(a._root_transform, AffineMatrix3D(), delta = 1e-14, msg ="Root node's root transform should not have been modified by change of parent.")
        self.assertTransformAlmostEqual(a._root_transform_inverse, AffineMatrix3D(), delta = 1e-14, msg ="Root node's inverse root transform should not have been modified by change of parent.")

        self.assertTransformAlmostEqual(b._root_transform, translate(1,2,3), delta = 1e-14, msg = "Previous parent's root transform should not have been modified by change of parent.")
        self.assertTransformAlmostEqual(b._root_transform_inverse, translate(1,2,3).inverse(), delta = 1e-14, msg = "Previous parent's inverse root transform should not have been modified by change of parent.")

        self.assertTransformAlmostEqual(c._root_transform, AffineMatrix3D(), delta = 1e-14, msg ="Root transform is not correct for unparented node.")
        self.assertTransformAlmostEqual(c._root_transform_inverse, AffineMatrix3D(), delta = 1e-14, msg ="Inverse root transform is not correct for unparented node.")

        self.assertTransformAlmostEqual(d1._root_transform, translate(100,200,300), delta = 1e-14, msg = "Root transform has not correctly propagated to re-parented node's 1st immediate child.")
        self.assertTransformAlmostEqual(d1._root_transform_inverse, translate(100,200,300).inverse(), delta = 1e-14, msg = "Inverse root transform has not correctly propagated to re-parented node's 1st immediate child.")

        self.assertTransformAlmostEqual(d2._root_transform, translate(200,400,600), delta = 1e-14, msg = "Root transform has not correctly propagated to re-parented node's 2nd immediate child.")
        self.assertTransformAlmostEqual(d2._root_transform_inverse, translate(200,400,600).inverse(), delta = 1e-14, msg = "Inverse root transform has not correctly propagated to re-parented node's 2nd immediate child.")

        self.assertTransformAlmostEqual(e._root_transform, translate(1100,2200,3300), delta = 1e-14, msg = "Root transform has not correctly propagated to re-parented node's distant children.")
        self.assertTransformAlmostEqual(e._root_transform_inverse, translate(1100,2200,3300).inverse(), delta = 1e-14, msg = "Inverse root transform has not correctly propagated to re-parented node's distant children.")
Beispiel #8
0
    def test_parent_to_none_from_node(self):
        """Unparenting a node."""

        # build initial tree
        a = Node()
        b = Node(a, translate(1,2,3))
        c = Node(b, translate(10,20,30))
        d1 = Node(c, translate(100,200,300))
        d2 = Node(c, translate(200,400,600))
        e = Node(d1, translate(1000,2000,3000))

        # set c's parent to None
        c.parent = None

        # is parent correct?
        self.assertEqual(c.parent, None, "Node parent is incorrect.")

        # is c in b's child list?
        self.assertEqual(b.children.count(c), 0, "Node was not removed from the previous parents child list.")

        # is c.transform correct?
        self.assertTransformAlmostEqual(c.transform, translate(10,20,30), delta = 1e-14, msg = "Transform matrix should not have been modified by change of parent.")

        # is the root node correct?
        self.assertEqual(c.root, c, "Root node is incorrect.")

        # has the root transform been correctly propagated to the re-parented node and its children?
        self.assertTransformAlmostEqual(a._root_transform, AffineMatrix3D(), delta = 1e-14, msg ="Root node's root transform should not have been modified by change of parent.")
        self.assertTransformAlmostEqual(a._root_transform_inverse, AffineMatrix3D(), delta = 1e-14, msg ="Root node's inverse root transform should not have been modified by change of parent.")

        self.assertTransformAlmostEqual(b._root_transform, translate(1,2,3), delta = 1e-14, msg = "Previous parent's root transform should not have been modified by change of parent.")
        self.assertTransformAlmostEqual(b._root_transform_inverse, translate(1,2,3).inverse(), delta = 1e-14, msg = "Previous parent's inverse root transform should not have been modified by change of parent.")

        self.assertTransformAlmostEqual(c._root_transform, AffineMatrix3D(), delta = 1e-14, msg ="Root transform is not correct for unparented node.")
        self.assertTransformAlmostEqual(c._root_transform_inverse, AffineMatrix3D(), delta = 1e-14, msg ="Inverse root transform is not correct for unparented node.")

        self.assertTransformAlmostEqual(d1._root_transform, translate(100,200,300), delta = 1e-14, msg = "Root transform has not correctly propagated to re-parented node's 1st immediate child.")
        self.assertTransformAlmostEqual(d1._root_transform_inverse, translate(100,200,300).inverse(), delta = 1e-14, msg = "Inverse root transform has not correctly propagated to re-parented node's 1st immediate child.")

        self.assertTransformAlmostEqual(d2._root_transform, translate(200,400,600), delta = 1e-14, msg = "Root transform has not correctly propagated to re-parented node's 2nd immediate child.")
        self.assertTransformAlmostEqual(d2._root_transform_inverse, translate(200,400,600).inverse(), delta = 1e-14, msg = "Inverse root transform has not correctly propagated to re-parented node's 2nd immediate child.")

        self.assertTransformAlmostEqual(e._root_transform, translate(1100,2200,3300), delta = 1e-14, msg = "Root transform has not correctly propagated to re-parented node's distant children.")
        self.assertTransformAlmostEqual(e._root_transform_inverse, translate(1100,2200,3300).inverse(), delta = 1e-14, msg = "Inverse root transform has not correctly propagated to re-parented node's distant children.")