Beispiel #1
0
    def testKeepLightsAndCamerasHashing(self):

        # - group
        #    - cameraGroup
        #       - camera

        camera = GafferScene.Camera()

        cameraGroup = GafferScene.Group()
        cameraGroup["name"].setValue("cameraGroup")
        cameraGroup["in"][0].setInput(camera["out"])

        group = GafferScene.Group()
        group["in"][0].setInput(cameraGroup["out"])

        filter = GafferScene.PathFilter()

        isolate = GafferScene.Isolate()
        isolate["in"].setInput(group["out"])
        isolate["filter"].setInput(filter["out"])

        isolate["keepCameras"].setValue(True)

        self.assertTrue(
            GafferScene.SceneAlgo.exists(isolate["out"],
                                         "/group/cameraGroup/camera"))
Beispiel #2
0
    def testSets(self):

        light1 = GafferSceneTest.TestLight()
        light2 = GafferSceneTest.TestLight()

        group = GafferScene.Group()
        group["in"][0].setInput(light1["out"])
        group["in"][1].setInput(light2["out"])

        lightSet = group["out"].set("__lights")
        self.assertEqual(set(lightSet.value.paths()),
                         set(["/group/light", "/group/light1"]))

        isolate = GafferScene.Isolate()
        isolate["in"].setInput(group["out"])

        lightSet = isolate["out"].set("__lights")
        self.assertEqual(set(lightSet.value.paths()),
                         set(["/group/light", "/group/light1"]))

        filter = GafferScene.PathFilter()
        isolate["filter"].setInput(filter["out"])

        lightSet = isolate["out"].set("__lights")
        self.assertEqual(set(lightSet.value.paths()), set([]))

        filter["paths"].setValue(IECore.StringVectorData(["/group/light"]))
        lightSet = isolate["out"].set("__lights")
        self.assertEqual(set(lightSet.value.paths()), set(["/group/light"]))

        filter["paths"].setValue(IECore.StringVectorData(["/group/light*"]))
        lightSet = isolate["out"].set("__lights")
        self.assertEqual(set(lightSet.value.paths()),
                         set(["/group/light", "/group/light1"]))
Beispiel #3
0
    def testIsolate(self):

        p1 = GafferScene.Plane()
        p2 = GafferScene.Plane()
        g = GafferScene.Group()
        g["in"][0].setInput(p1["out"])
        g["in"][1].setInput(p2["out"])

        s1 = GafferScene.Set()
        s1["name"].setValue("set1")
        s1["paths"].setValue(IECore.StringVectorData(["/group/plane"]))
        s1["in"].setInput(g["out"])

        s2 = GafferScene.Set()
        s2["name"].setValue("set2")
        s2["paths"].setValue(
            IECore.StringVectorData(["/group", "/group/plane1"]))
        s2["in"].setInput(s1["out"])

        f = GafferScene.SetFilter()
        f["setExpression"].setValue("set1")

        i = GafferScene.Isolate()
        i["in"].setInput(s2["out"])
        i["filter"].setInput(f["out"])

        self.assertSceneValid(i["out"])
        self.assertEqual(i["out"].childNames("/group"),
                         IECore.InternedStringVectorData(["plane"]))

        self.assertEqual(i["out"].set("set1").value.paths(), ["/group/plane"])
        self.assertEqual(i["out"].set("set2").value.paths(), ["/group"])
Beispiel #4
0
    def testForwardDeclarations(self):

        light1 = GafferSceneTest.TestLight()
        light2 = GafferSceneTest.TestLight()

        group = GafferScene.Group()
        group["in"].setInput(light1["out"])
        group["in1"].setInput(light2["out"])

        fd = group["out"]["globals"].getValue()["gaffer:forwardDeclarations"]
        self.assertEqual(set(fd.keys()), set(["/group/light",
                                              "/group/light1"]))

        isolate = GafferScene.Isolate()
        isolate["in"].setInput(group["out"])

        fd = isolate["out"]["globals"].getValue()["gaffer:forwardDeclarations"]
        self.assertEqual(set(fd.keys()), set(["/group/light",
                                              "/group/light1"]))

        filter = GafferScene.PathFilter()
        isolate["filter"].setInput(filter["match"])

        fd = isolate["out"]["globals"].getValue()["gaffer:forwardDeclarations"]
        self.assertEqual(set(fd.keys()), set([]))

        filter["paths"].setValue(IECore.StringVectorData(["/group/light"]))
        fd = isolate["out"]["globals"].getValue()["gaffer:forwardDeclarations"]
        self.assertEqual(set(fd.keys()), set(["/group/light"]))

        filter["paths"].setValue(IECore.StringVectorData(["/group/light*"]))
        fd = isolate["out"]["globals"].getValue()["gaffer:forwardDeclarations"]
        self.assertEqual(set(fd.keys()), set(["/group/light",
                                              "/group/light1"]))
Beispiel #5
0
    def testIsolation(self):

        sphere = IECoreScene.SpherePrimitive()
        input = GafferSceneTest.CompoundObjectSource()
        input["in"].setValue(
            IECore.CompoundObject({
                "bound": IECore.Box3fData(sphere.bound()),
                "children": {
                    "groupA": {
                        "bound": IECore.Box3fData(sphere.bound()),
                        "children": {
                            "sphereAA": {
                                "bound": IECore.Box3fData(sphere.bound()),
                                "object": sphere,
                            },
                            "sphereAB": {
                                "bound": IECore.Box3fData(sphere.bound()),
                                "object": sphere,
                            },
                        },
                    },
                    "groupB": {
                        "bound": IECore.Box3fData(sphere.bound()),
                        "children": {
                            "sphereBA": {
                                "bound": IECore.Box3fData(sphere.bound()),
                                "object": sphere,
                            },
                            "sphereBB": {
                                "bound": IECore.Box3fData(sphere.bound()),
                                "object": sphere,
                            },
                        },
                    },
                },
            }), )

        isolate = GafferScene.Isolate()
        isolate["in"].setInput(input["out"])

        filter = GafferScene.PathFilter()
        filter["paths"].setValue(IECore.StringVectorData(["/groupA/sphereAB"]))
        isolate["filter"].setInput(filter["out"])

        self.assertNotEqual(isolate["out"].childNamesHash("/groupA"),
                            input["out"].childNamesHash("/groupA"))
        self.assertEqual(isolate["out"].childNames("/groupA"),
                         IECore.InternedStringVectorData(["sphereAB"]))
        self.assertEqual(isolate["out"].childNames("/"),
                         IECore.InternedStringVectorData(["groupA"]))

        filter["paths"].setValue(IECore.StringVectorData(["/groupA/sphereAA"]))
        self.assertEqual(isolate["out"].childNames("/groupA"),
                         IECore.InternedStringVectorData(["sphereAA"]))
        self.assertEqual(isolate["out"].childNames("/"),
                         IECore.InternedStringVectorData(["groupA"]))
Beispiel #6
0
    def testConnectWithoutInputs(self):

        s = Gaffer.ScriptNode()

        s["i"] = GafferScene.Isolate()
        s["p"] = GafferScene.PathFilter()

        s["s"] = GafferScene.FilterSwitch()
        s["s"]["in"][0].setInput(s["p"]["out"])
        s["s"]["in"][0].setInput(None)

        s["i"]["filter"].setInput(s["s"]["out"])
Beispiel #7
0
	def testSetFilter( self ) :

		sphere = GafferScene.Sphere()
		sphere["sets"].setValue( "A" )

		filter = GafferScene.SetFilter()
		filter["setExpression"].setValue( "A" )

		isolate = GafferScene.Isolate()
		isolate["in"].setInput( sphere["out"] )
		isolate["filter"].setInput( filter["out"] )

		self.assertSceneValid( isolate["out"] )
		self.assertTrue( GafferScene.SceneAlgo.exists( isolate["out"], "/sphere" ) )
Beispiel #8
0
	def testIsolateNothing( self ) :

		sphere = GafferScene.Sphere()
		sphere["sets"].setValue("sphereSet")

		i = GafferScene.Isolate()
		i["in"].setInput( sphere["out"] )
		pathFilter = GafferScene.PathFilter()
		i["filter"].setInput( pathFilter["out"] )
		pathFilter["paths"].setValue( IECore.StringVectorData( [ "/sphere" ] ) )

		self.assertEqual( i["out"].childNames("/"), IECore.InternedStringVectorData( [ "sphere" ] ) )
		self.assertEqual( i["out"].set( "sphereSet" ).value.paths(), ["/sphere"] )

		pathFilter["paths"].setValue( IECore.StringVectorData() )

		self.assertEqual( i["out"].set( "sphereSet" ).value.paths(), [] )
		self.assertEqual( i["out"].childNames("/"), IECore.InternedStringVectorData() )
Beispiel #9
0
    def testAdjustBounds(self):

        sphere1 = IECoreScene.SpherePrimitive()
        sphere2 = IECoreScene.SpherePrimitive(2)
        input = GafferSceneTest.CompoundObjectSource()
        input["in"].setValue(
            IECore.CompoundObject({
                "bound": IECore.Box3fData(sphere2.bound()),
                "children": {
                    "group": {
                        "bound": IECore.Box3fData(sphere2.bound()),
                        "children": {
                            "sphere1": {
                                "bound": IECore.Box3fData(sphere1.bound()),
                                "object": sphere1,
                            },
                            "sphere2": {
                                "bound": IECore.Box3fData(sphere2.bound()),
                                "object": sphere2,
                            },
                        },
                    },
                },
            }), )

        isolate = GafferScene.Isolate()
        isolate["in"].setInput(input["out"])

        filter = GafferScene.PathFilter()
        filter["paths"].setValue(IECore.StringVectorData(["/group/sphere1"]))
        isolate["filter"].setInput(filter["out"])

        self.assertEqual(isolate["out"].bound("/"), sphere2.bound())
        self.assertEqual(isolate["out"].bound("/group"), sphere2.bound())
        self.assertEqual(isolate["out"].bound("/group/sphere1"),
                         sphere1.bound())

        isolate["adjustBounds"].setValue(True)

        self.assertEqual(isolate["out"].bound("/"), sphere1.bound())
        self.assertEqual(isolate["out"].bound("/group"), sphere1.bound())
        self.assertEqual(isolate["out"].bound("/group/sphere1"),
                         sphere1.bound())
Beispiel #10
0
    def testTwoAffectedScenes(self):

        setNode = GafferScene.Set()
        setFilter = GafferScene.SetFilter()

        prune = GafferScene.Prune()
        prune["in"].setInput(setNode["out"])
        prune["filter"].setInput(setFilter["out"])

        isolate = GafferScene.Isolate()
        isolate["in"].setInput(prune["out"])
        isolate["filter"].setInput(setFilter["out"])

        cs = GafferTest.CapturingSlot(prune.plugDirtiedSignal(),
                                      isolate.plugDirtiedSignal())
        setNode["name"].setValue("test")

        self.assertTrue({x[0]
                         for x in cs
                         }.issuperset({prune["filter"], isolate["filter"]}))
Beispiel #11
0
	def testGlobalsDoNotDependOnScenePath( self ) :

		pathFilter = GafferScene.PathFilter()
		pathFilter["paths"].setValue( IECore.StringVectorData( [ "/grid/borderLines" ] ) )

		grid = GafferScene.Grid()

		isolate = GafferScene.Isolate()
		isolate["in"].setInput( grid["out"] )
		isolate["filter"].setInput( pathFilter["out"] )

		c = Gaffer.Context()
		with c :
			h1 = isolate["out"]["globals"].hash()
			c["scene:path"] = IECore.InternedStringVectorData( [ "grid" ] )
			h2 = isolate["out"]["globals"].hash()
			c["scene:path"] = IECore.InternedStringVectorData( [ "grid", "centerLines" ] )
			h3 = isolate["out"]["globals"].hash()

		self.assertEqual( h1, h2 )
		self.assertEqual( h2, h3 )
Beispiel #12
0
    def testPassThrough(self):

        sphere = IECoreScene.SpherePrimitive()
        input = GafferSceneTest.CompoundObjectSource()
        input["in"].setValue(
            IECore.CompoundObject({
                "bound": IECore.Box3fData(sphere.bound()),
                "children": {
                    "groupA": {
                        "bound": IECore.Box3fData(sphere.bound()),
                        "children": {
                            "sphereAA": {
                                "bound": IECore.Box3fData(sphere.bound()),
                                "object": sphere,
                            },
                            "sphereAB": {
                                "bound": IECore.Box3fData(sphere.bound()),
                                "object": sphere,
                            },
                        },
                    },
                    "groupB": {
                        "bound": IECore.Box3fData(sphere.bound()),
                        "children": {
                            "sphereBA": {
                                "bound": IECore.Box3fData(sphere.bound()),
                                "object": sphere,
                            },
                            "sphereBB": {
                                "bound": IECore.Box3fData(sphere.bound()),
                                "object": sphere,
                            },
                        },
                    },
                },
            }), )

        isolate = GafferScene.Isolate()
        isolate["in"].setInput(input["out"])

        self.assertSceneValid(input["out"])
        self.assertSceneValid(isolate["out"])

        # with no filter applied, nothing should be isolated so we should have a perfect pass through

        self.assertScenesEqual(input["out"], isolate["out"])
        self.assertSceneHashesEqual(input["out"], isolate["out"])
        self.assertTrue(input["out"].object(
            "/groupA/sphereAA",
            _copy=False).isSame(isolate["out"].object("/groupA/sphereAA",
                                                      _copy=False)))

        # and even with a filter applied, we should have a perfect pass through if the node is disabled.

        filter = GafferScene.PathFilter()
        filter["paths"].setValue(IECore.StringVectorData(["/*"]))
        isolate["filter"].setInput(filter["out"])

        isolate["enabled"].setValue(False)

        self.assertScenesEqual(input["out"], isolate["out"])
        self.assertSceneHashesEqual(input["out"], isolate["out"])
        self.assertTrue(input["out"].object(
            "/groupA/sphereAA",
            _copy=False).isSame(isolate["out"].object("/groupA/sphereAA",
                                                      _copy=False)))
Beispiel #13
0
    def testKeepLightsAndCameras(self):

        # - group
        #    - light
        #    - camera
        #    - model1
        #       - sphere
        #       - light
        #	 - model2
        #       - sphere
        #       - light

        light = GafferSceneTest.TestLight()
        light["sets"].setValue("lightsAndSpheres")

        sphere = GafferScene.Sphere()
        sphere["sets"].setValue("lightsAndSpheres")

        camera = GafferScene.Camera()

        model1 = GafferScene.Group()
        model1["in"][0].setInput(sphere["out"])
        model1["in"][1].setInput(light["out"])
        model1["name"].setValue("model1")

        model2 = GafferScene.Group()
        model2["in"][0].setInput(sphere["out"])
        model2["in"][1].setInput(light["out"])
        model2["name"].setValue("model2")

        group = GafferScene.Group()
        group["in"][0].setInput(light["out"])
        group["in"][1].setInput(camera["out"])
        group["in"][2].setInput(model1["out"])
        group["in"][3].setInput(model2["out"])

        self.assertSceneValid(group["out"])

        filter = GafferScene.PathFilter()
        filter["paths"].setValue(IECore.StringVectorData(["/group/model1"]))

        isolate = GafferScene.Isolate()
        isolate["in"].setInput(group["out"])
        isolate["filter"].setInput(filter["out"])

        # Keep neither

        self.assertSceneValid(isolate["out"])

        self.assertTrue(
            GafferScene.SceneAlgo.exists(isolate["out"],
                                         "/group/model1/sphere"))
        self.assertTrue(
            GafferScene.SceneAlgo.exists(isolate["out"],
                                         "/group/model1/light"))
        self.assertTrue(
            GafferScene.SceneAlgo.exists(isolate["out"], "/group/model1"))

        self.assertFalse(
            GafferScene.SceneAlgo.exists(isolate["out"],
                                         "/group/model2/sphere"))
        self.assertFalse(
            GafferScene.SceneAlgo.exists(isolate["out"], "/group/model2"))

        self.assertFalse(
            GafferScene.SceneAlgo.exists(isolate["out"], "/group/light"))
        self.assertFalse(
            GafferScene.SceneAlgo.exists(isolate["out"], "/group/camera"))

        self.assertEqual(isolate["out"].set("__lights").value.paths(),
                         ["/group/model1/light"])
        self.assertEqual(isolate["out"].set("__cameras").value.paths(), [])
        self.assertEqual(
            isolate["out"].set("lightsAndSpheres").value,
            IECore.PathMatcher(["/group/model1/sphere",
                                "/group/model1/light"]))

        self.assertNotEqual(isolate["out"].setHash("__lights"),
                            group["out"].setHash("__lights"))
        self.assertNotEqual(isolate["out"].setHash("__cameras"),
                            group["out"].setHash("__cameras"))

        # Keep lights

        isolate["keepLights"].setValue(True)

        self.assertSceneValid(isolate["out"])

        self.assertFalse(
            GafferScene.SceneAlgo.exists(isolate["out"], "/group/camera"))

        self.assertEqual(isolate["out"].set("__lights"),
                         group["out"].set("__lights"))
        self.assertEqual(isolate["out"].set("__cameras").value.paths(), [])
        self.assertEqual(
            isolate["out"].set("lightsAndSpheres").value,
            IECore.PathMatcher(["/group/model1/sphere"] +
                               group["out"].set("__lights").value.paths()))

        self.assertEqual(isolate["out"].setHash("__lights"),
                         group["out"].setHash("__lights"))
        self.assertNotEqual(isolate["out"].setHash("__cameras"),
                            group["out"].setHash("__cameras"))

        # Keep cameras too

        isolate["keepCameras"].setValue(True)

        self.assertSceneValid(isolate["out"])

        self.assertTrue(
            GafferScene.SceneAlgo.exists(isolate["out"], "/group/camera"))

        self.assertEqual(isolate["out"].set("__lights"),
                         group["out"].set("__lights"))
        self.assertEqual(isolate["out"].set("__cameras"),
                         group["out"].set("__cameras"))
        self.assertEqual(
            isolate["out"].set("lightsAndSpheres").value,
            IECore.PathMatcher(["/group/model1/sphere"] +
                               group["out"].set("__lights").value.paths()))

        self.assertEqual(isolate["out"].setHash("__lights"),
                         group["out"].setHash("__lights"))
        self.assertEqual(isolate["out"].setHash("__cameras"),
                         group["out"].setHash("__cameras"))
Beispiel #14
0
    def testFrom(self):

        # - group1
        #	- group2
        #		- light1
        #		- light2
        #	- light3
        # - plane

        light1 = GafferSceneTest.TestLight()
        light1["name"].setValue("light1")
        light2 = GafferSceneTest.TestLight()
        light2["name"].setValue("light2")
        light3 = GafferSceneTest.TestLight()
        light3["name"].setValue("light3")

        group1 = GafferScene.Group()
        group1["name"].setValue("group1")
        group2 = GafferScene.Group()
        group2["name"].setValue("group2")

        group1["in"][0].setInput(group2["out"])
        group1["in"][1].setInput(light3["out"])
        group2["in"][0].setInput(light1["out"])
        group2["in"][1].setInput(light2["out"])

        plane = GafferScene.Plane()

        parent = GafferScene.Parent()
        parent["parent"].setValue("/")
        parent["in"].setInput(group1["out"])
        parent["children"][0].setInput(plane["out"])

        isolate = GafferScene.Isolate()
        isolate["in"].setInput(parent["out"])

        self.assertSceneValid(isolate["out"])
        self.assertEqual(isolate["out"].childNames("/"),
                         IECore.InternedStringVectorData(["group1", "plane"]))
        self.assertEqual(isolate["out"].childNames("/group1"),
                         IECore.InternedStringVectorData(["group2", "light3"]))
        self.assertEqual(isolate["out"].childNames("/group1/group2"),
                         IECore.InternedStringVectorData(["light1", "light2"]))

        filter = GafferScene.PathFilter()
        filter["paths"].setValue(
            IECore.StringVectorData(["/group1/group2/light1"]))

        isolate["filter"].setInput(filter["out"])

        self.assertSceneValid(isolate["out"])
        self.assertEqual(isolate["out"].childNames("/"),
                         IECore.InternedStringVectorData(["group1"]))
        self.assertEqual(isolate["out"].childNames("/group1"),
                         IECore.InternedStringVectorData(["group2"]))
        self.assertEqual(isolate["out"].childNames("/group1/group2"),
                         IECore.InternedStringVectorData(["light1"]))

        isolate["from"].setValue("/group1")

        self.assertSceneValid(isolate["out"])
        self.assertEqual(isolate["out"].childNames("/"),
                         IECore.InternedStringVectorData(["group1", "plane"]))
        self.assertEqual(isolate["out"].childNames("/group1"),
                         IECore.InternedStringVectorData(["group2"]))
        self.assertEqual(isolate["out"].childNames("/group1/group2"),
                         IECore.InternedStringVectorData(["light1"]))

        isolate["from"].setValue("/group1/group2")

        self.assertSceneValid(isolate["out"])
        self.assertEqual(isolate["out"].childNames("/"),
                         IECore.InternedStringVectorData(["group1", "plane"]))
        self.assertEqual(isolate["out"].childNames("/group1"),
                         IECore.InternedStringVectorData(["group2", "light3"]))
        self.assertEqual(isolate["out"].childNames("/group1/group2"),
                         IECore.InternedStringVectorData(["light1"]))