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"))
def test(self): g = GafferScene.Grid() self.assertSceneValid(g["out"]) g["dimensions"].setValue(imath.V2f(100, 5)) self.assertSceneValid(g["out"])
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"))
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"))
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)}))
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"]))
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 )
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()))
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 )
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())