Beispiel #1
0
    def testSpaceRelativeLocationSameAsLocationInvalid(self):

        from random import Random
        from datetime import datetime

        r = Random(datetime.now())

        name1 = 'a' + randomName(r, 4, 9)
        name2 = 'b' + randomName(r, 4, 9)

        s = GafferScene.Sphere()
        s["name"].setValue(name1)

        bq = GafferScene.BoundQuery()
        bq["scene"].setInput(s["out"])
        bq["location"].setValue(name2)
        bq["relativeLocation"].setValue(name2)
        bq["space"].setValue(GafferScene.BoundQuery.Space.Relative)

        v = imath.V3f(0.0, 0.0, 0.0)
        b = imath.Box3f(v, v)

        self.assertTrue(
            bq["__internalBound"].getValue().min().equalWithAbsError(
                b.min(), 0.000001))
        self.assertTrue(
            bq["__internalBound"].getValue().max().equalWithAbsError(
                b.max(), 0.000001))
        self.assertTrue(bq["bound"]["min"].getValue().equalWithAbsError(
            v, 0.000001))
        self.assertTrue(bq["bound"]["max"].getValue().equalWithAbsError(
            v, 0.000001))
        self.assertTrue(bq["center"].getValue().equalWithAbsError(v, 0.000001))
        self.assertTrue(bq["size"].getValue().equalWithAbsError(v, 0.000001))
Beispiel #2
0
    def testDefault(self):

        v = imath.V3f(0.0, 0.0, 0.0)
        b = imath.Box3f(v, v)

        bq = GafferScene.BoundQuery()

        self.assertEqual(bq["__internalBound"].getValue(), b)
        self.assertEqual(bq["bound"]["min"].getValue(), v)
        self.assertEqual(bq["bound"]["max"].getValue(), v)
        self.assertEqual(bq["center"].getValue(), v)
        self.assertEqual(bq["size"].getValue(), v)
Beispiel #3
0
    def testSpaceRelativeLocationSameAsLocationValid(self):

        from random import Random
        from datetime import datetime

        r = Random(datetime.now())

        name = randomName(r, 5, 10)

        s = GafferScene.Sphere()
        s["name"].setValue(name)
        s["transform"]["scale"].setValue(
            imath.V3f(r.random() * 10.0,
                      r.random() * 10.0,
                      r.random() * 10.0))
        s["transform"]["translate"].setValue(
            imath.V3f((r.random() - 0.5) * 10.0, (r.random() - 0.5) * 10.0,
                      (r.random() - 0.5) * 10.0))
        s["transform"]["rotate"].setValue(
            imath.V3f((r.random() - 0.5) * 360.0, (r.random() - 0.5) * 360.0,
                      (r.random() - 0.5) * 360.0))

        bq = GafferScene.BoundQuery()
        bq["scene"].setInput(s["out"])
        bq["location"].setValue(name)
        bq["relativeLocation"].setValue(name)
        bq["space"].setValue(GafferScene.BoundQuery.Space.Relative)

        b = bq["scene"].bound(name)

        self.assertTrue(
            bq["__internalBound"].getValue().min().equalWithAbsError(
                b.min(), 0.000001))
        self.assertTrue(
            bq["__internalBound"].getValue().max().equalWithAbsError(
                b.max(), 0.000001))
        self.assertTrue(bq["bound"]["min"].getValue().equalWithAbsError(
            b.min(), 0.000001))
        self.assertTrue(bq["bound"]["max"].getValue().equalWithAbsError(
            b.max(), 0.000001))
        self.assertTrue(bq["center"].getValue().equalWithAbsError(
            b.center(), 0.000001))
        self.assertTrue(bq["size"].getValue().equalWithAbsError(
            b.size(), 0.000001))
Beispiel #4
0
    def testSpaceLocal(self):

        from random import Random
        from datetime import datetime

        r = Random(datetime.now())

        name1 = randomName(r, 5, 10)
        s1 = GafferScene.Sphere()
        s1["name"].setValue(name1)
        s1["transform"]["scale"].setValue(
            imath.V3f(r.random() * 10.0,
                      r.random() * 10.0,
                      r.random() * 10.0))
        s1["transform"]["translate"].setValue(
            imath.V3f((r.random() - 0.5) * 10.0, (r.random() - 0.5) * 10.0,
                      (r.random() - 0.5) * 10.0))
        s1["transform"]["rotate"].setValue(
            imath.V3f((r.random() - 0.5) * 360.0, (r.random() - 0.5) * 360.0,
                      (r.random() - 0.5) * 360.0))

        name2 = randomName(r, 5, 10)
        s2 = GafferScene.Sphere()
        s2["name"].setValue(name2)
        s2["transform"]["scale"].setValue(
            imath.V3f(r.random() * 10.0,
                      r.random() * 10.0,
                      r.random() * 10.0))
        s2["transform"]["translate"].setValue(
            imath.V3f((r.random() - 0.5) * 10.0, (r.random() - 0.5) * 10.0,
                      (r.random() - 0.5) * 10.0))
        s2["transform"]["rotate"].setValue(
            imath.V3f((r.random() - 0.5) * 360.0, (r.random() - 0.5) * 360.0,
                      (r.random() - 0.5) * 360.0))

        g = GafferScene.Group()
        g["name"].setValue("group")
        g["in"][0].setInput(s1["out"])
        g["in"][1].setInput(s2["out"])
        g["transform"]["scale"].setValue(
            imath.V3f(r.random() * 10.0,
                      r.random() * 10.0,
                      r.random() * 10.0))
        g["transform"]["translate"].setValue(
            imath.V3f((r.random() - 0.5) * 10.0, (r.random() - 0.5) * 10.0,
                      (r.random() - 0.5) * 10.0))
        g["transform"]["rotate"].setValue(
            imath.V3f((r.random() - 0.5) * 360.0, (r.random() - 0.5) * 360.0,
                      (r.random() - 0.5) * 360.0))

        bq = GafferScene.BoundQuery()
        bq["space"].setValue(GafferScene.BoundQuery.Space.Local)
        bq["location"].setValue("/")

        v = imath.V3f(0.0, 0.0, 0.0)
        b = imath.Box3f(v, v)

        self.assertEqual(bq["__internalBound"].getValue(), b)
        self.assertEqual(bq["bound"]["min"].getValue(), v)
        self.assertEqual(bq["bound"]["max"].getValue(), v)
        self.assertEqual(bq["center"].getValue(), v)
        self.assertEqual(bq["size"].getValue(), v)

        bq["location"].setValue("/" + name1)

        self.assertEqual(bq["__internalBound"].getValue(), b)
        self.assertEqual(bq["bound"]["min"].getValue(), v)
        self.assertEqual(bq["bound"]["max"].getValue(), v)
        self.assertEqual(bq["center"].getValue(), v)
        self.assertEqual(bq["size"].getValue(), v)

        bq["scene"].setInput(g["out"])
        bq["location"].setValue('/group/' + name1)

        b = bq["scene"].bound('/group/' + name1)

        self.assertTrue(bq["__internalBound"].getValue() == b)
        self.assertTrue(bq["bound"]["min"].getValue() == b.min())
        self.assertTrue(bq["bound"]["max"].getValue() == b.max())
        self.assertTrue(bq["center"].getValue() == b.center())
        self.assertTrue(bq["size"].getValue() == b.size())

        bq["location"].setValue('/group/' + name2)

        b = bq["scene"].bound('/group/' + name2)

        self.assertTrue(bq["__internalBound"].getValue() == b)
        self.assertTrue(bq["bound"]["min"].getValue() == b.min())
        self.assertTrue(bq["bound"]["max"].getValue() == b.max())
        self.assertTrue(bq["center"].getValue() == b.center())
        self.assertTrue(bq["size"].getValue() == b.size())

        bq["location"].setValue('/group')

        b = bq["scene"].bound('/group')

        self.assertTrue(bq["__internalBound"].getValue() == b)
        self.assertTrue(bq["bound"]["min"].getValue() == b.min())
        self.assertTrue(bq["bound"]["max"].getValue() == b.max())
        self.assertTrue(bq["center"].getValue() == b.center())
        self.assertTrue(bq["size"].getValue() == b.size())
Beispiel #5
0
    def testSpaceRelative(self):

        from random import Random
        from datetime import datetime

        r = Random(datetime.now())

        name1 = randomName(r, 5, 10)
        s1 = GafferScene.Sphere()
        s1["name"].setValue(name1)
        s1["transform"]["scale"].setValue(
            imath.V3f(r.random() * 10.0,
                      r.random() * 10.0,
                      r.random() * 10.0))
        s1["transform"]["translate"].setValue(
            imath.V3f((r.random() - 0.5) * 10.0, (r.random() - 0.5) * 10.0,
                      (r.random() - 0.5) * 10.0))
        s1["transform"]["rotate"].setValue(
            imath.V3f((r.random() - 0.5) * 360.0, (r.random() - 0.5) * 360.0,
                      (r.random() - 0.5) * 360.0))
        m1 = s1["transform"].matrix()

        name2 = randomName(r, 5, 10)
        s2 = GafferScene.Sphere()
        s2["name"].setValue(name2)
        s2["transform"]["scale"].setValue(
            imath.V3f(r.random() * 10.0,
                      r.random() * 10.0,
                      r.random() * 10.0))
        s2["transform"]["translate"].setValue(
            imath.V3f((r.random() - 0.5) * 10.0, (r.random() - 0.5) * 10.0,
                      (r.random() - 0.5) * 10.0))
        s2["transform"]["rotate"].setValue(
            imath.V3f((r.random() - 0.5) * 360.0, (r.random() - 0.5) * 360.0,
                      (r.random() - 0.5) * 360.0))
        m2 = s2["transform"].matrix()

        g = GafferScene.Group()
        g["name"].setValue("group")
        g["in"][0].setInput(s1["out"])
        g["in"][1].setInput(s2["out"])
        g["transform"]["scale"].setValue(
            imath.V3f(r.random() * 10.0,
                      r.random() * 10.0,
                      r.random() * 10.0))
        g["transform"]["translate"].setValue(
            imath.V3f((r.random() - 0.5) * 10.0, (r.random() - 0.5) * 10.0,
                      (r.random() - 0.5) * 10.0))
        g["transform"]["rotate"].setValue(
            imath.V3f((r.random() - 0.5) * 360.0, (r.random() - 0.5) * 360.0,
                      (r.random() - 0.5) * 360.0))
        m3 = g["transform"].matrix()

        bq = GafferScene.BoundQuery()
        bq["space"].setValue(GafferScene.BoundQuery.Space.Relative)
        bq["location"].setValue("/")
        bq["relativeLocation"].setValue("")

        v = imath.V3f(0.0, 0.0, 0.0)
        b = imath.Box3f(v, v)

        self.assertEqual(bq["__internalBound"].getValue(), b)
        self.assertEqual(bq["bound"]["min"].getValue(), v)
        self.assertEqual(bq["bound"]["max"].getValue(), v)
        self.assertEqual(bq["center"].getValue(), v)
        self.assertEqual(bq["size"].getValue(), v)

        bq["relativeLocation"].setValue("/")

        self.assertEqual(bq["__internalBound"].getValue(), b)
        self.assertEqual(bq["bound"]["min"].getValue(), v)
        self.assertEqual(bq["bound"]["max"].getValue(), v)
        self.assertEqual(bq["center"].getValue(), v)
        self.assertEqual(bq["size"].getValue(), v)

        bq["location"].setValue("/" + name1)
        bq["relativeLocation"].setValue("")

        self.assertEqual(bq["__internalBound"].getValue(), b)
        self.assertEqual(bq["bound"]["min"].getValue(), v)
        self.assertEqual(bq["bound"]["max"].getValue(), v)
        self.assertEqual(bq["center"].getValue(), v)
        self.assertEqual(bq["size"].getValue(), v)

        bq["relativeLocation"].setValue("/" + name2)

        self.assertEqual(bq["__internalBound"].getValue(), b)
        self.assertEqual(bq["bound"]["min"].getValue(), v)
        self.assertEqual(bq["bound"]["max"].getValue(), v)
        self.assertEqual(bq["center"].getValue(), v)
        self.assertEqual(bq["size"].getValue(), v)

        bq["scene"].setInput(g["out"])
        bq["location"].setValue('/group/' + name1)
        bq["relativeLocation"].setValue('/group/' + name2)

        m = (m1 * m3) * (m2 * m3).inverse()
        b = bq["scene"].bound('/group/' + name1) * m

        self.assertTrue(
            bq["__internalBound"].getValue().min().equalWithAbsError(
                b.min(), 0.000001))
        self.assertTrue(
            bq["__internalBound"].getValue().max().equalWithAbsError(
                b.max(), 0.000001))
        self.assertTrue(bq["bound"]["min"].getValue().equalWithAbsError(
            b.min(), 0.000001))
        self.assertTrue(bq["bound"]["max"].getValue().equalWithAbsError(
            b.max(), 0.000001))
        self.assertTrue(bq["center"].getValue().equalWithAbsError(
            b.center(), 0.000001))
        self.assertTrue(bq["size"].getValue().equalWithAbsError(
            b.size(), 0.000001))