def testNoduleSectionMetadata(self): s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["n"] = GafferTest.AddNode() Gaffer.Metadata.registerValue(s["b"]["n"]["op1"], "noduleLayout:section", "left") s["b"]["i"] = Gaffer.BoxIn() s["b"]["i"].setup(s["b"]["n"]["op1"]) self.assertEqual( Gaffer.Metadata.value(s["b"]["i"].promotedPlug(), "noduleLayout:section"), "left") self.assertEqual( Gaffer.Metadata.value(s["b"]["i"].plug(), "noduleLayout:section"), "right")
def testSetRoot( self ) : s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["n"] = Gaffer.Node() f = Gaffer.StandardSet( [ s["b"] ] ) g = GafferUI.GraphGadget( s, f ) self.assertTrue( g.nodeGadget( s["b"] ) ) self.assertFalse( g.nodeGadget( s["b"]["n"] ) ) g.setRoot( s["b"] ) self.assertTrue( g.getRoot().isSame( s["b"] ) ) self.assertEqual( g.getFilter(), None ) self.assertTrue( g.nodeGadget( s["b"]["n"] ) ) self.assertFalse( g.nodeGadget( s["b"] ) )
def testReferencePromotedPlug( self ) : s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["o"] = GafferOSL.OSLObject() p = s["b"].promotePlug( s["b"]["o"]["shader"] ) p.setName( "p" ) s["b"].exportForReference( "/tmp/test.grf" ) s["r"] = Gaffer.Reference() s["r"].load( "/tmp/test.grf" ) s["s"] = GafferOSL.OSLShader() s["s"].loadShader( "ObjectProcessing/OutObject" ) s["r"]["p"].setInput( s["s"]["out"] )
def testReferencePromotedPlug( self ) : s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["i"] = GafferOSL.OSLImage() p = Gaffer.PlugAlgo.promote( s["b"]["i"]["shader"] ) p.setName( "p" ) s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" ) s["r"] = Gaffer.Reference() s["r"].load( self.temporaryDirectory() + "/test.grf" ) s["s"] = GafferOSL.OSLShader() s["s"].loadShader( "ImageProcessing/OutImage" ) s["r"]["p"].setInput( s["s"]["out"] )
def testRowAccessorWithPromotion( self ) : box = Gaffer.Box() box["s"] = Gaffer.Spreadsheet() rows = Gaffer.PlugAlgo.promote( box["s"]["rows"] ) row1 = rows.addRow() row2 = rows.addRow() row1["name"].setValue( "x" ) row2["name"].setValue( "y" ) self.assertEqual( rows.row( "x" ), row1 ) self.assertEqual( rows.row( "y" ), row2 ) self.assertEqual( rows.row( "z" ), None ) self.assertEqual( box["s"]["rows"].row( "x" ).source(), row1 ) self.assertEqual( box["s"]["rows"].row( "y" ).source(), row2 ) self.assertEqual( box["s"]["rows"].row( "z" ), None )
def testVersionMetadata( self ) : s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" ) s["r"] = Gaffer.Reference() s["r"].load( self.temporaryDirectory() + "/test.grf" ) self.assertEqual( Gaffer.Metadata.value( s["r"], "serialiser:milestoneVersion" ), Gaffer.About.milestoneVersion() ) self.assertEqual( Gaffer.Metadata.value( s["r"], "serialiser:majorVersion" ), Gaffer.About.majorVersion() ) self.assertEqual( Gaffer.Metadata.value( s["r"], "serialiser:minorVersion" ), Gaffer.About.minorVersion() ) self.assertEqual( Gaffer.Metadata.value( s["r"], "serialiser:patchVersion" ), Gaffer.About.patchVersion() ) self.assertTrue( "serialiser:milestoneVersion" not in Gaffer.Metadata.registeredValues( s["r"], persistentOnly = True ) ) self.assertTrue( "serialiser:majorVersion" not in Gaffer.Metadata.registeredValues( s["r"], persistentOnly = True ) ) self.assertTrue( "serialiser:minorVersion" not in Gaffer.Metadata.registeredValues( s["r"], persistentOnly = True ) ) self.assertTrue( "serialiser:patchVersion" not in Gaffer.Metadata.registeredValues( s["r"], persistentOnly = True ) )
def testReloadRefreshesMetadata( self ) : s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["p"] = Gaffer.Plug( flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" ) s["r"] = Gaffer.Reference() s["r"].load( self.temporaryDirectory() + "/test.grf" ) self.assertEqual( Gaffer.Metadata.value( s["r"]["p"], "test" ), None ) Gaffer.Metadata.registerValue( s["b"]["p"], "test", 10 ) s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" ) s["r"].load( self.temporaryDirectory() + "/test.grf" ) self.assertEqual( Gaffer.Metadata.value( s["r"]["p"], "test" ), 10 )
def testPromotedPlugs( self ) : script = Gaffer.ScriptNode() script["box"] = Gaffer.Box() script["box"]["sphere"] = GafferScene.Sphere() Gaffer.PlugAlgo.promote( script["box"]["sphere"]["transform"] ) Gaffer.PlugAlgo.promote( script["box"]["sphere"]["out"] ) view = GafferSceneUI.SceneView() view["in"].setInput( script["box"]["out"] ) tool = GafferSceneUI.TranslateTool( view ) tool["active"].setValue( True ) GafferSceneUI.ContextAlgo.setLastSelectedPath( view.getContext(), "/sphere" ) self.assertEqual( tool.selection()[0].editTarget(), script["box"]["transform"] )
def testSinglePlugWithMetadata(self): s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["user"]["p"] = Gaffer.Plug(flags=Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic) Gaffer.Metadata.registerPlugValue(s["b"]["user"]["p"], "description", "ddd") s["b"].exportForReference("/tmp/test.grf") s["r"] = Gaffer.Reference() s["r"].load("/tmp/test.grf") self.assertEqual( Gaffer.Metadata.plugValue(s["r"]["user"]["p"], "description"), "ddd")
def testCustomClassWithRowsPlug(self): script = Gaffer.ScriptNode() script["box"] = Gaffer.Box() script["box"]["node"] = self.CustomSpreadsheet() self.assertEqual(script["box"]["node"]["rows"][0]["cells"].keys(), ["testString", "testInt"]) p = Gaffer.PlugAlgo.promote(script["box"]["node"]["rows"]) self.assertEqual(p[0]["cells"].keys(), ["testString", "testInt"]) script2 = Gaffer.ScriptNode() script2.execute(script.serialise()) self.assertEqual(script2["box"]["rows"][0]["cells"].keys(), script["box"]["rows"][0]["cells"].keys()) self.assertEqual(script2["box"]["node"]["rows"][0]["cells"].keys(), script["box"]["node"]["rows"][0]["cells"].keys())
def testNonSerialisableInput(self): s = Gaffer.ScriptNode() s["a"] = GafferTest.AddNode() s["a"]["sum"].setFlags(Gaffer.Plug.Flags.Serialisable, False) s["b"] = Gaffer.Box() s["b"]["i"] = Gaffer.BoxIn() s["b"]["i"].setup(s["a"]["sum"]) s["b"]["i"].promotedPlug().setInput(s["a"]["sum"]) self.assertTrue(s["b"]["i"]["out"].source().isSame(s["a"]["sum"])) s2 = Gaffer.ScriptNode() s2.execute(s.serialise()) self.assertTrue(s2["b"]["i"]["out"].source().isSame(s2["a"]["sum"]))
def testReloadWithBoxIO(self): s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["a"] = GafferTest.AddNode() s["b"]["i"] = Gaffer.BoxIn() s["b"]["i"]["name"].setValue("in") s["b"]["i"].setup(s["b"]["a"]["op1"]) s["b"]["a"]["op1"].setInput(s["b"]["i"]["out"]) s["b"]["o"] = Gaffer.BoxOut() s["b"]["o"]["name"].setValue("out") s["b"]["o"].setup(s["b"]["a"]["sum"]) s["b"]["o"]["in"].setInput(s["b"]["a"]["sum"]) referenceFileName = self.temporaryDirectory() + "/test.grf" s["b"].exportForReference(referenceFileName) s["a1"] = GafferTest.AddNode() s["r"] = Gaffer.Reference() s["r"].load(referenceFileName) s["r"]["in"].setInput(s["a1"]["sum"]) s["a2"] = GafferTest.AddNode() s["a2"]["op1"].setInput(s["r"]["out"]) def assertReferenceConnections(): self.assertTrue(s["a2"]["op1"].source().isSame(s["r"]["a"]["sum"])) self.assertTrue(s["r"]["a"]["op1"].source().isSame(s["a1"]["sum"])) self.assertEqual( set(s["r"].keys()), set(["in", "out", "user", "a", "i", "o"]), ) assertReferenceConnections() s["r"].load(referenceFileName) assertReferenceConnections()
def testInputAcceptanceFromBoxes(self): s = Gaffer.ScriptNode() s["n"] = Gaffer.Node() s["n"]["requirement"] = Gaffer.Plug( direction=Gaffer.Plug.Direction.Out) s["a"] = GafferTest.TextWriter() s["b"] = Gaffer.Box() s["b"]["a"] = GafferTest.TextWriter() s["b"]["b"] = GafferTest.TextWriter() s["b"]["n"] = Gaffer.Node() s["b"]["n"]["requirement"] = Gaffer.Plug( direction=Gaffer.Plug.Direction.Out) s["b"]["in"] = s["b"]["a"]["requirements"][0].createCounterpart( "in", Gaffer.Plug.Direction.In) s["b"]["out"] = s["b"]["a"]["requirement"].createCounterpart( "out", Gaffer.Plug.Direction.Out) # ExecutableNodes should accept connections speculatively from unconnected box inputs and outputs self.assertTrue(s["b"]["a"]["requirements"][0].acceptsInput( s["b"]["in"])) self.assertTrue(s["a"]["requirements"][0].acceptsInput(s["b"]["out"])) # but should reject connections to connected box inputs and outputs if they're unsuitable. s["b"]["in"].setInput(s["n"]["requirement"]) self.assertFalse(s["b"]["a"]["requirements"][0].acceptsInput( s["b"]["in"])) s["b"]["out"].setInput(s["b"]["n"]["requirement"]) self.assertFalse(s["a"]["requirements"][0].acceptsInput(s["b"]["out"])) # and accept them again if they provide indirect access to an ExecutableNode s["c"] = GafferTest.TextWriter() s["b"]["in"].setInput(s["c"]["requirement"]) self.assertTrue(s["b"]["a"]["requirements"][0].acceptsInput( s["b"]["in"])) s["b"]["out"].setInput(s["b"]["b"]["requirement"]) self.assertTrue(s["a"]["requirements"][0].acceptsInput(s["b"]["out"]))
def testSelectionEditability( self ) : script = Gaffer.ScriptNode() script["box"] = Gaffer.Box() script["box"]["plane"] = GafferScene.Plane() Gaffer.PlugAlgo.promote( script["box"]["plane"]["out"] ) # Box is editable, so all fields of the selection should be useable. selection = GafferSceneUI.TransformTool.Selection( script["box"]["out"], "/plane", script.context(), None ) self.assertEqual( selection.scene(), script["box"]["out"] ) self.assertEqual( selection.path(), "/plane" ) self.assertEqual( selection.context(), script.context() ) self.assertEqual( selection.upstreamScene(), script["box"]["plane"]["out"] ) self.assertEqual( selection.upstreamPath(), "/plane" ) self.assertEqual( selection.upstreamContext()["scene:path"], IECore.InternedStringVectorData( [ "plane" ] ) ) self.assertTrue( selection.editable() ) self.assertEqual( selection.editTarget(), script["box"]["plane"]["transform"] ) self.assertEqual( selection.transformSpace(), imath.M44f() ) # Reference internals are not editable, so attempts to access invalid # fields should throw. referenceFileName = os.path.join( self.temporaryDirectory(), "test.grf" ) script["box"].exportForReference( referenceFileName ) script["reference"] = Gaffer.Reference() script["reference"].load( referenceFileName ) selection = GafferSceneUI.TransformTool.Selection( script["reference"]["out"], "/plane", script.context(), None ) self.assertEqual( selection.scene(), script["reference"]["out"] ) self.assertEqual( selection.path(), "/plane" ) self.assertEqual( selection.context(), script.context() ) self.assertEqual( selection.upstreamScene(), script["reference"]["plane"]["out"] ) self.assertEqual( selection.upstreamPath(), "/plane" ) self.assertEqual( selection.upstreamContext()["scene:path"], IECore.InternedStringVectorData( [ "plane" ] ) ) self.assertFalse( selection.editable() ) with six.assertRaisesRegex( self, RuntimeError, "Selection is not editable" ) : selection.editTarget() with six.assertRaisesRegex( self, RuntimeError, "Selection is not editable" ) : selection.transformSpace()
def testInputAcceptanceFromBoxes( self ) : s = Gaffer.ScriptNode() s["n"] = Gaffer.Node() s["n"]["out"] = Gaffer.Plug( direction = Gaffer.Plug.Direction.Out ) s["a"] = GafferScene.ShaderAssignment() s["b"] = Gaffer.Box() s["b"]["n"] = Gaffer.Node() s["b"]["a"] = GafferScene.ShaderAssignment() s["b"]["n"]["out"] = Gaffer.Plug( direction = Gaffer.Plug.Direction.Out ) # This emulates old plugs which were promoted when the "shader" plug on a ShaderAssignment # was just a plain Plug rather than a ShaderPlug. s["b"]["in"] = Gaffer.Plug( flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) s["b"]["out"] = Gaffer.Plug( flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic, direction = Gaffer.Plug.Direction.Out ) # Shader assignments should accept connections speculatively # from unconnected box inputs and outputs. s["b"]["a"]["shader"].setInput( s["b"]["in"] ) s["a"]["shader"].setInput( s["b"]["out"] ) # but should reject connections to connected box inputs and outputs # if they're unsuitable. s["b"]["a"]["shader"].setInput( None ) s["b"]["in"].setInput( s["n"]["out"] ) self.assertFalse( s["b"]["a"]["shader"].acceptsInput( s["b"]["in"] ) ) s["a"]["shader"].setInput( None ) s["b"]["out"].setInput( s["b"]["n"]["out"] ) self.assertFalse( s["a"]["shader"].acceptsInput( s["b"]["out"] ) ) # and accept them again if they provide indirect access to a shader s["s"] = GafferSceneTest.TestShader() s["b"]["in"].setInput( s["s"]["out"] ) self.assertTrue( s["b"]["a"]["shader"].acceptsInput( s["b"]["in"] ) ) s["b"]["s"] = GafferSceneTest.TestShader() s["b"]["out"].setInput( s["b"]["s"]["out"] ) self.assertTrue( s["a"]["shader"].acceptsInput( s["b"]["out"] ) )
def testAutomaticLayout(self): s = Gaffer.ScriptNode() s["n1"] = GafferTest.AddNode() s["n2"] = GafferTest.AddNode() s["n2"]["op1"].setInput(s["n1"]["sum"]) s["b"] = Gaffer.Box() s["b"]["n1"] = GafferTest.AddNode() s["b"]["n2"] = GafferTest.AddNode() s["b"]["n2"]["op1"].setInput(s["b"]["n1"]["sum"]) with GafferUI.Window() as w: graphEditor = GafferUI.GraphEditor(s) w.setVisible(True) self.waitForIdle(10000) def assertLower(graphGadget, n1, n2): self.assertLess( graphGadget.getNodePosition(n1).y, graphGadget.getNodePosition(n2).y) self.assertEqual(graphEditor.graphGadget().unpositionedNodeGadgets(), []) assertLower(graphEditor.graphGadget(), s["n2"], s["n1"]) graphEditor.graphGadget().setRoot(s["b"]) self.waitForIdle(10000) self.assertEqual(graphEditor.graphGadget().unpositionedNodeGadgets(), []) assertLower(graphEditor.graphGadget(), s["b"]["n2"], s["b"]["n1"]) s["b"]["n3"] = GafferTest.AddNode() s["b"]["n3"]["op1"].setInput(s["b"]["n2"]["sum"]) self.waitForIdle(10000) self.assertEqual(graphEditor.graphGadget().unpositionedNodeGadgets(), []) assertLower(graphEditor.graphGadget(), s["b"]["n3"], s["b"]["n2"])
def testDisabledNodulesAfterCutAndPaste(self): s = Gaffer.ScriptNode() g = GafferUI.GraphGadget(s) s["b"] = Gaffer.Box() s["b"]["n"] = self.NodulePositionNode() g = GafferUI.GraphGadget(s) Gaffer.PlugAlgo.promote(s["b"]["n"]["op1"]) p = Gaffer.PlugAlgo.promote(s["b"]["n"]["op2"]) p.setName("p") self.assertEqual(g.nodeGadget(s["b"]).nodule(s["b"]["p"]), None) s.execute(s.serialise(filter=Gaffer.StandardSet([s["b"]]))) self.assertEqual(g.nodeGadget(s["b1"]).nodule(s["b1"]["p"]), None)
def testDontEditUpstreamOfReference( self ) : script = Gaffer.ScriptNode() script["plane"] = GafferScene.Plane() script["box"] = Gaffer.Box() script["box"]["filter"] = GafferScene.PathFilter() script["box"]["filter"]["paths"].setValue( IECore.StringVectorData( [ "/plane" ] ) ) script["box"]["transform"] = GafferScene.Transform() script["box"]["transform"]["filter"].setInput( script["box"]["filter"]["out"] ) Gaffer.PlugAlgo.promote( script["box"]["transform"]["in"] ) Gaffer.PlugAlgo.promote( script["box"]["transform"]["out"] ) script["box"]["in"].setInput( script["plane"]["out"] ) # Box is editable selection = GafferSceneUI.TransformTool.Selection( script["box"]["out"], "/plane", script.context(), None ) self.assertEqual( selection.upstreamScene(), script["box"]["transform"]["out"] ) self.assertEqual( selection.upstreamPath(), "/plane" ) self.assertEqual( selection.upstreamContext()["scene:path"], IECore.InternedStringVectorData( [ "plane" ] ) ) self.assertTrue( selection.editable() ) self.assertEqual( selection.editTarget(), script["box"]["transform"]["transform"] ) # Reference internals are not editable, so we can't edit the transform any more. # Make sure we don't accidentally traverse through the reference and try to edit # the Plane directly. referenceFileName = os.path.join( self.temporaryDirectory(), "test.grf" ) script["box"].exportForReference( referenceFileName ) script["reference"] = Gaffer.Reference() script["reference"].load( referenceFileName ) script["reference"]["in"].setInput( script["plane"]["out"] ) selection = GafferSceneUI.TransformTool.Selection( script["reference"]["out"], "/plane", script.context(), None ) self.assertEqual( selection.upstreamScene(), script["reference"]["transform"]["out"] ) self.assertEqual( selection.upstreamPath(), "/plane" ) self.assertEqual( selection.upstreamContext()["scene:path"], IECore.InternedStringVectorData( [ "plane" ] ) ) self.assertEqual( selection.warning(), "Transform is locked as it is inside \"reference\" which disallows edits to its children" ) self.assertFalse( selection.editable() )
def testPromoteColor(self): s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["n"] = Gaffer.Node() s["b"]["n"]["c"] = Gaffer.Color3fPlug() s["b"]["n"]["c"].setValue(IECore.Color3f(1, 0, 1)) self.assertTrue(Gaffer.PlugAlgo.canPromote(s["b"]["n"]["c"])) self.assertFalse(Gaffer.PlugAlgo.isPromoted(s["b"]["n"]["c"])) p = Gaffer.PlugAlgo.promote(s["b"]["n"]["c"]) self.assertTrue(isinstance(p, Gaffer.Color3fPlug)) self.assertTrue(s["b"]["n"]["c"].getInput().isSame(p)) self.assertTrue(s["b"]["n"]["c"]["r"].getInput().isSame(p["r"])) self.assertTrue(s["b"]["n"]["c"]["g"].getInput().isSame(p["g"])) self.assertTrue(s["b"]["n"]["c"]["b"].getInput().isSame(p["b"])) self.assertEqual(p.getValue(), IECore.Color3f(1, 0, 1))
def testReferencePromotedPreTasksArrayPlug( self ) : s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["e"] = GafferDispatchTest.TextWriter() p = Gaffer.PlugAlgo.promote( s["b"]["e"]["preTasks"] ) p.setName( "p" ) s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" ) s["r"] = Gaffer.Reference() s["r"].load( self.temporaryDirectory() + "/test.grf" ) s["e"] = GafferDispatchTest.TextWriter() s["r"]["p"][0].setInput( s["e"]["task"] ) self.assertTrue( s["r"]["e"]["preTasks"][0].source().isSame( s["e"]["task"] ) )
def testLoadThrowsExceptionsOnError( self ) : s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["n"] = GafferTest.SphereNode() s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" ) del GafferTest.SphereNode # induce a failure during loading s2 = Gaffer.ScriptNode() s2["r"] = Gaffer.Reference() with IECore.CapturingMessageHandler() as mh : self.assertRaises( Exception, s2["r"].load, self.temporaryDirectory() + "/test.grf" ) self.assertEqual( len( mh.messages ), 2 ) self.assertTrue( "has no attribute 'SphereNode'" in mh.messages[0].message ) self.assertTrue( "KeyError: 'n'" in mh.messages[1].message )
def testCopyPaste( self ) : s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["a1"] = GafferTest.AddNode() s["b"]["a2"] = GafferTest.AddNode() s["b"]["a2"]["op1"].setInput( s["b"]["a1"]["sum"] ) Gaffer.PlugAlgo.promote( s["b"]["a1"]["op1"] ) s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" ) s["r"] = Gaffer.Reference() s["r"].load( self.temporaryDirectory() + "/test.grf" ) s.execute( s.serialise( parent = s["r"], filter = Gaffer.StandardSet( [ s["r"]["a1"], s["r"]["a2"] ] ) ) ) self.assertTrue( "a1" in s ) self.assertTrue( "a2" in s ) self.assertTrue( s["a2"]["op1"].getInput().isSame( s["a1"]["sum"] ) )
def testInputAcceptanceFromBoxes(self): s = Gaffer.ScriptNode() s["n"] = Gaffer.Node() s["n"]["requirement"] = Gaffer.Plug( direction=Gaffer.Plug.Direction.Out) s["a"] = GafferTest.TextWriter() s["b"] = Gaffer.Box() s["b"]["a"] = GafferTest.TextWriter() s["b"]["b"] = GafferTest.TextWriter() s["b"]["n"] = Gaffer.Node() s["b"]["n"]["requirement"] = Gaffer.Plug( direction=Gaffer.Plug.Direction.Out) s["b"]["in"] = s["b"]["a"]["requirements"][0].createCounterpart( "in", Gaffer.Plug.Direction.In) s["b"]["out"] = s["b"]["a"]["requirement"].createCounterpart( "out", Gaffer.Plug.Direction.Out) # ExecutableNodes should accept connections speculatively from unconnected box inputs and outputs self.assertTrue(s["b"]["a"]["requirements"][0].acceptsInput( s["b"]["in"])) self.assertTrue(s["a"]["requirements"][0].acceptsInput(s["b"]["out"])) # But the promoted plugs shouldn't accept any old inputs. self.assertFalse(s["b"]["in"].acceptsInput(s["n"]["requirement"])) self.assertFalse(s["b"]["out"].acceptsInput( s["b"]["n"]["requirement"])) # We should be able to connect them up only to other appropriate requirement plugs. self.assertTrue(s["a"]["requirements"][0].acceptsInput(s["b"]["out"])) s["c"] = GafferTest.TextWriter() s["b"]["in"].setInput(s["c"]["requirement"]) self.assertTrue(s["b"]["a"]["requirements"][0].acceptsInput( s["b"]["in"])) s["b"]["out"].setInput(s["b"]["b"]["requirement"]) self.assertTrue(s["a"]["requirements"][0].acceptsInput(s["b"]["out"]))
def testFilterInputAcceptanceFromReferencesViaDot( self ) : s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["a"] = GafferScene.ShaderAssignment() s["b"]["d"] = Gaffer.Dot() s["b"]["d"].setup( s["b"]["a"]["filter"] ) s["b"]["a"]["filter"].setInput( s["b"]["d"]["out"] ) p = Gaffer.PlugAlgo.promote( s["b"]["d"]["in"] ) s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" ) s["r"] = Gaffer.Reference() s["r"].load( self.temporaryDirectory() + "/test.grf" ) self.assertTrue( s["r"]["a"]["filter"].source().isSame( s["r"][p.getName()] ) ) s["f"] = GafferScene.PathFilter() s["r"][p.getName()].setInput( s["f"]["out"] )
def testReferencePromotedRequirementsPlug( self ) : s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["e"] = GafferTest.TextWriter() p = s["b"].promotePlug( s["b"]["e"]["requirements"] ) p.setName( "p" ) s["b"].exportForReference( "/tmp/test.grf" ) s["r"] = Gaffer.Reference() s["r"].load( "/tmp/test.grf" ) s["e"] = GafferTest.TextWriter() s["r"]["p"][0].setInput( s["e"]["requirement"] ) self.assertTrue( s["r"]["e"]["requirements"][0].source().isSame( s["e"]["requirement"] ) )
def testAnimationWithinAReference(self): s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["n"] = Gaffer.Node() s["b"]["n"] = GafferTest.AddNode() Gaffer.PlugAlgo.promote(s["b"]["n"]["op1"]) Gaffer.PlugAlgo.promote(s["b"]["n"]["sum"]) self.assertTrue(Gaffer.PlugAlgo.canPromote(s["b"]["n"]["op2"])) op2Curve = Gaffer.Animation.acquire(s["b"]["n"]["op2"]) # Cannot promote an animated plug, because it has an input. self.assertFalse(Gaffer.PlugAlgo.canPromote(s["b"]["n"]["op2"])) op2Curve.addKey(Gaffer.Animation.Key(0, 0, Gaffer.Animation.Type.Step)) op2Curve.addKey(Gaffer.Animation.Key(1, 1, Gaffer.Animation.Type.Step)) with Gaffer.Context() as c: self.assertEqual(s["b"]["sum"].getValue(), 0) c.setTime(1) self.assertEqual(s["b"]["sum"].getValue(), 1) fileName = self.temporaryDirectory() + "/reference.grf" s["b"].exportForReference(fileName) s["r"] = Gaffer.Reference() s["r"].load(fileName) with Gaffer.Context() as c: self.assertEqual(s["r"]["sum"].getValue(), 0) c.setTime(1) self.assertEqual(s["r"]["sum"].getValue(), 1) s["r"]["op1"].setValue(2) with Gaffer.Context() as c: self.assertEqual(s["r"]["sum"].getValue(), 2) c.setTime(1) self.assertEqual(s["r"]["sum"].getValue(), 3)
def testReferencePromotedPlug( self ) : s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["i"] = GafferOSL.OSLImage() s["b"]["i"]["channels"].addChild( Gaffer.NameValuePlug( "", GafferOSL.ClosurePlug(), "testClosure", flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) ) p = Gaffer.PlugAlgo.promote( s["b"]["i"]["channels"]["testClosure"]["value"] ) p.setName( "p" ) s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" ) s["r"] = Gaffer.Reference() s["r"].load( self.temporaryDirectory() + "/test.grf" ) s["s"] = GafferOSL.OSLShader() s["s"].loadShader( "ImageProcessing/OutImage" ) s["r"]["p"].setInput( s["s"]["out"]["out"] )
def testNodeMetadata(self): s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() Gaffer.Metadata.registerValue(s["b"], "description", "Test description") Gaffer.Metadata.registerValue(s["b"], "nodeGadget:color", IECore.Color3f(1, 0, 0)) s["b"].exportForReference(self.temporaryDirectory() + "/test.grf") s["r"] = Gaffer.Reference() s["r"].load(self.temporaryDirectory() + "/test.grf") self.assertEqual(Gaffer.Metadata.value(s["r"], "description"), "Test description") self.assertEqual(Gaffer.Metadata.value(s["r"], "nodeGadget:color"), IECore.Color3f(1, 0, 0))
def testNodeMetadata( self ) : s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() self.assertEqual( Gaffer.Metadata.value( s["b"], "description" ), None ) cs = GafferTest.CapturingSlot( Gaffer.Metadata.nodeValueChangedSignal() ) Gaffer.Metadata.registerValue( s["b"], "description", "aaa" ) self.assertEqual( Gaffer.Metadata.value( s["b"], "description" ), "aaa" ) self.assertEqual( len( cs ), 1 ) self.assertEqual( cs[0], ( Gaffer.Box.staticTypeId(), "description", s["b"] ) ) s2 = Gaffer.ScriptNode() s2.execute( s.serialise() ) self.assertEqual( Gaffer.Metadata.value( s["b"], "description" ), "aaa" )
def testDontSavePromotedUnsavedRenders( self ) : s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["c"] = GafferImage.Catalogue() promotedImages = Gaffer.PlugAlgo.promote( s["b"]["c"]["images"] ) promotedImageIndex = Gaffer.PlugAlgo.promote( s["b"]["c"]["imageIndex"] ) promotedOut = Gaffer.PlugAlgo.promote( s["b"]["c"]["out"] ) r = GafferImage.ImageReader() r["fileName"].setValue( "${GAFFER_ROOT}/python/GafferImageTest/images/checker.exr" ) self.sendImage( r["out"], s["b"]["c"] ) self.assertEqual( len( promotedImages ), 1 ) s2 = Gaffer.ScriptNode() s2.execute( s.serialise() ) self.assertEqual( len( s2["b"]["images"] ), 0 )