示例#1
0
    def testAttributesHash(self):

        g1 = GafferScene.Grid()
        g1["name"].setValue("g1")

        g2 = GafferScene.Grid()
        g2["name"].setValue("g2")

        self.assertEqual(g1["out"].attributesHash("/"),
                         g2["out"].attributesHash("/"))
        self.assertEqual(g1["out"].attributesHash("/g1"),
                         g2["out"].attributesHash("/g2"))
        self.assertEqual(g1["out"].attributesHash("/g1/centerLines"),
                         g2["out"].attributesHash("/g2/centerLines"))
示例#2
0
    def test(self):

        g = GafferScene.Grid()
        self.assertSceneValid(g["out"])

        g["dimensions"].setValue(imath.V2f(100, 5))
        self.assertSceneValid(g["out"])
示例#3
0
    def testBoundHash(self):

        g1 = GafferScene.Grid()
        g1["name"].setValue("g1")

        g2 = GafferScene.Grid()
        g2["name"].setValue("g2")

        self.assertEqual(g1["out"].boundHash("/"), g2["out"].boundHash("/"))
        self.assertEqual(g1["out"].boundHash("/g1"),
                         g2["out"].boundHash("/g2"))
        self.assertEqual(g1["out"].boundHash("/g1/centerLines"),
                         g2["out"].boundHash("/g2/centerLines"))

        g1["dimensions"].setValue(g2["dimensions"].getValue() * 2)

        self.assertNotEqual(g1["out"].boundHash("/"), g2["out"].boundHash("/"))
        self.assertNotEqual(g1["out"].boundHash("/g1"),
                            g2["out"].boundHash("/g2"))
        self.assertNotEqual(g1["out"].boundHash("/g1/centerLines"),
                            g2["out"].boundHash("/g2/centerLines"))
示例#4
0
    def testTransformHash(self):

        g1 = GafferScene.Grid()
        g1["name"].setValue("g1")

        g2 = GafferScene.Grid()
        g2["name"].setValue("g2")

        self.assertEqual(g1["out"].transformHash("/"),
                         g2["out"].transformHash("/"))
        self.assertEqual(g1["out"].transformHash("/g1"),
                         g2["out"].transformHash("/g2"))
        self.assertEqual(g1["out"].transformHash("/g1/centerLines"),
                         g2["out"].transformHash("/g2/centerLines"))

        g1["transform"]["translate"]["x"].setValue(10)

        self.assertEqual(g1["out"].transformHash("/"),
                         g2["out"].transformHash("/"))
        self.assertNotEqual(g1["out"].boundHash("/g1"),
                            g2["out"].transformHash("/g2"))
        self.assertEqual(g1["out"].transformHash("/g1/centerLines"),
                         g2["out"].transformHash("/g2/centerLines"))
示例#5
0
    def testAttributes(self):

        g = GafferScene.Grid()

        a = g["out"].attributes("/grid")
        self.assertEqual(
            a["gl:surface"],
            IECore.Shader("Constant", "gl:surface", {"Cs": IECore.Color3f(1)}))

        g["centerPixelWidth"].setValue(2)
        a2 = g["out"].attributes("/grid/centerLines")
        self.assertEqual(
            a2,
            IECore.CompoundObject(
                {"gl:curvesPrimitive:glLineWidth": IECore.FloatData(2)}))
示例#6
0
    def testChildNames(self):

        g = GafferScene.Grid()
        self.assertEqual(g["out"].childNames("/"),
                         IECore.InternedStringVectorData(["grid"]))
        self.assertEqual(
            g["out"].childNames("/grid"),
            IECore.InternedStringVectorData(
                ["gridLines", "centerLines", "borderLines"]))

        cs = GafferTest.CapturingSlot(g.plugDirtiedSignal())
        g["name"].setValue("g")
        self.assertTrue(g["out"]["childNames"] in [x[0] for x in cs])

        self.assertTrue(g["out"].childNames("/"),
                        IECore.InternedStringVectorData(["g"]))
示例#7
0
	def testExtraAttributesOnlyEvaluatedForFilteredLocations( self ) :

		script = Gaffer.ScriptNode()
		script["grid"] = GafferScene.Grid()

		script["filter"] = GafferScene.PathFilter()
		script["filter"]["paths"].setValue( IECore.StringVectorData( [ "/grid" ] ) )

		script["customAttributes"] = GafferScene.CustomAttributes()
		script["customAttributes"]["in"].setInput( script["grid"]["out"] )
		script["customAttributes"]["filter"].setInput( script["filter"]["out"] )

		script["expression"] = Gaffer.Expression()
		script["expression"].setExpression( """parent["customAttributes"]["extraAttributes"] = IECore.CompoundData( { "a" : IECore.StringData( str( context.get( "scene:path" ) ) ) } )""" )

		with Gaffer.ContextMonitor( script["expression"] ) as monitor :
			GafferSceneTest.traverseScene( script["customAttributes"]["out"] )

		self.assertEqual( monitor.combinedStatistics().numUniqueValues( "scene:path" ), 1 )
示例#8
0
    def testTarget(self):

        g = GafferScene.Grid()
        t = GafferSceneUI.SceneInspector.Target(g["out"], "/grid")

        self.assertTrue(t.scene.isSame(g["out"]))
        self.assertEqual(t.path, "/grid")

        p = GafferScene.Plane()

        # Targets are read only
        self.assertRaises(AttributeError, setattr, t, "scene", p["out"])
        self.assertRaises(AttributeError, setattr, t, "path", "/plane")

        # Targets cache their lookups
        self.assertTrue(t.attributes().isSame(t.attributes()))
        self.assertTrue(t.fullAttributes().isSame(t.fullAttributes()))
        self.assertTrue(t.object().isSame(t.object()))
        self.assertTrue(t.globals().isSame(t.globals()))
示例#9
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 )
示例#10
0
    def testParentContextVariable(self):

        # Parent a sphere at `/a` and a grid at `/b`.

        sphere = GafferScene.Sphere()
        sphere["transform"]["translate"]["x"].setValue(1)
        sphere["sets"].setValue("set1")

        grid = GafferScene.Grid()
        grid["transform"]["translate"]["x"].setValue(2)

        switch = Gaffer.NameSwitch()
        switch.setup(sphere["out"])
        switch["selector"].setValue("${parent}")
        switch["in"].resize(3)
        switch["in"][1]["name"].setValue("/a")
        switch["in"][1]["value"].setInput(sphere["out"])
        switch["in"][2]["name"].setValue("/b")
        switch["in"][2]["value"].setInput(grid["out"])

        collect = GafferScene.CollectScenes()
        collect["rootNames"].setValue(IECore.StringVectorData(["a", "b"]))

        filter = GafferScene.PathFilter()
        filter["paths"].setValue(IECore.StringVectorData(["/a", "/b"]))

        parent = GafferScene.Parent()
        parent["in"].setInput(collect["out"])
        parent["children"][0].setInput(switch["out"]["value"])
        parent["filter"].setInput(filter["out"])
        parent["parentVariable"].setValue("parent")

        # Check the scene is as we expect

        self.assertSceneValid(parent["out"])

        self.assertEqual(parent["out"].childNames("/a"),
                         IECore.InternedStringVectorData(["sphere"]))
        self.assertEqual(parent["out"].childNames("/a/sphere"),
                         IECore.InternedStringVectorData())
        self.assertEqual(parent["out"].childNames("/b"),
                         IECore.InternedStringVectorData(["grid"]))
        self.assertEqual(
            parent["out"].childNames("/b/grid"),
            IECore.InternedStringVectorData(
                ["gridLines", "centerLines", "borderLines"]))

        self.assertScenesEqual(sphere["out"],
                               parent["out"],
                               scenePlug2PathPrefix="/a")

        self.assertPathHashesEqual(
            sphere["out"],
            "/sphere",
            parent["out"],
            "/a/sphere",
        )

        self.assertScenesEqual(
            grid["out"],
            parent["out"],
            scenePlug2PathPrefix="/b",
            # Don't want to check sets, because the grid has no sets.
            checks=self.allSceneChecks - {"sets"})

        for path in [
                "/grid", "/grid/centerLines", "/grid/gridLines",
                "/grid/borderLines"
        ]:
            self.assertPathHashesEqual(
                grid["out"],
                path,
                parent["out"],
                "/b" + path,
            )

        # Rename the parent variable. This should dirty all the output plugs and make the NameSwitch
        # output an empty scene.

        cs = GafferTest.CapturingSlot(parent.plugDirtiedSignal())
        parent["parentVariable"].setValue("x")

        self.assertLessEqual( # Equivalent to `assertTrue( a.issubset( b ) )`, but with more informative errors
         { parent["out"][n] for n in [ "bound", "transform", "attributes", "object", "childNames", "set" ] },
         { x[0] for x in cs }
        )

        self.assertSceneValid(parent["out"])
        self.assertEqual(parent["out"].childNames("/a"),
                         IECore.InternedStringVectorData())
        self.assertEqual(parent["out"].childNames("/b"),
                         IECore.InternedStringVectorData())