def testDependencyNode( self ) : s = Gaffer.ScriptNode() # Make a reference, and check it's a DependencyNode s["r"] = Gaffer.Reference() self.assertTrue( isinstance( s["r"], Gaffer.DependencyNode ) ) self.assertTrue( s["r"].isInstanceOf( Gaffer.DependencyNode.staticTypeId() ) ) self.assertTrue( isinstance( s["r"], Gaffer.SubGraph ) ) self.assertTrue( s["r"].isInstanceOf( Gaffer.SubGraph.staticTypeId() ) ) # create a box with a promoted output: s["b"] = Gaffer.Box() s["b"]["n"] = GafferTest.AddNode() Gaffer.PlugAlgo.promote( s["b"]["n"]["sum"] ) s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" ) # load onto reference: s["r"].load( self.temporaryDirectory() + "/test.grf" ) self.assertEqual( s["r"].correspondingInput( s["r"]["sum"] ), None ) self.assertEqual( s["r"].enabledPlug(), None ) # Wire it up to support enabledPlug() and correspondingInput() Gaffer.PlugAlgo.promote( s["b"]["n"]["op1"] ) s["b"]["n"]["op2"].setValue( 10 ) s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" ) # reload reference and test: s["r"].load( self.temporaryDirectory() + "/test.grf" ) self.assertEqual( s["r"].correspondingInput( s["r"]["sum"] ), None ) self.assertEqual( s["r"].enabledPlug(), None ) # add an enabled plug: s["b"]["enabled"] = Gaffer.BoolPlug( flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" ) # reload reference and test that's now visible via enabledPlug(): s["r"].load( self.temporaryDirectory() + "/test.grf" ) self.assertEqual( s["r"].correspondingInput( s["r"]["sum"] ), None ) self.assertTrue( s["r"].enabledPlug().isSame( s["r"]["enabled"] ) ) # hook up the enabled plug inside the box: s["b"]["n"]["enabled"].setInput( s["b"]["enabled"] ) s["b"].exportForReference( self.temporaryDirectory() + "/test.grf" ) # reload reference and test that's now visible via enabledPlug(): s["r"].load( self.temporaryDirectory() + "/test.grf" ) self.assertTrue( s["r"].enabledPlug().isSame( s["r"]["enabled"] ) ) self.assertTrue( s["r"].correspondingInput( s["r"]["sum"] ).isSame( s["r"]["op1"] ) ) # Connect it into a network, delete it, and check that we get nice auto-reconnect behaviour s["a"] = GafferTest.AddNode() s["r"]["op1"].setInput( s["a"]["sum"] ) s["c"] = GafferTest.AddNode() s["c"]["op1"].setInput( s["r"]["sum"] ) s.deleteNodes( filter = Gaffer.StandardSet( [ s["r"] ] ) ) self.assertTrue( s["c"]["op1"].getInput().isSame( s["a"]["sum"] ) )
def testCreate(self): s = Gaffer.ScriptNode() s["n1"] = GafferTest.AddNode() s["n2"] = GafferTest.AddNode() s["n3"] = GafferTest.AddNode() s["n4"] = GafferTest.AddNode() s["n2"]["op1"].setInput(s["n1"]["sum"]) s["n2"]["op2"].setInput(s["n1"]["sum"]) s["n3"]["op1"].setInput(s["n2"]["sum"]) s["n4"]["op1"].setInput(s["n3"]["sum"]) s["n4"]["op2"].setInput(s["n3"]["sum"]) def assertPreConditions(): self.assertTrue("Box" not in s) self.assertTrue(s["n2"]["op1"].getInput().isSame(s["n1"]["sum"])) self.assertTrue(s["n2"]["op2"].getInput().isSame(s["n1"]["sum"])) self.assertTrue(s["n3"]["op1"].getInput().isSame(s["n2"]["sum"])) self.assertTrue(s["n4"]["op1"].getInput().isSame(s["n3"]["sum"])) self.assertTrue(s["n4"]["op2"].getInput().isSame(s["n3"]["sum"])) assertPreConditions() with Gaffer.UndoContext(s): b = Gaffer.Box.create(s, Gaffer.StandardSet([s["n2"], s["n3"]])) def assertPostConditions(): self.assertTrue(isinstance(b, Gaffer.Box)) self.assertTrue(b.parent().isSame(s)) self.assertTrue("n2" not in s) self.assertTrue("n3" not in s) self.assertTrue("n2" in b) self.assertTrue("n3" in b) self.assertTrue(b["n3"]["op1"].getInput().isSame(b["n2"]["sum"])) self.assertTrue(b["n2"]["op1"].getInput().node().isSame(b)) self.assertTrue(b["n2"]["op2"].getInput().node().isSame(b)) self.assertTrue(b["n2"]["op1"].getInput().getInput().isSame( s["n1"]["sum"])) self.assertTrue(b["n2"]["op2"].getInput().getInput().isSame( s["n1"]["sum"])) self.assertTrue(b["n2"]["op1"].getInput().isSame( b["n2"]["op2"].getInput())) self.assertTrue(s["n4"]["op1"].getInput().node().isSame(b)) self.assertTrue(s["n4"]["op2"].getInput().node().isSame(b)) self.assertTrue(s["n4"]["op1"].getInput().isSame( s["n4"]["op2"].getInput())) assertPostConditions() s.undo() assertPreConditions() s.redo() assertPostConditions()
def testHashForPythonDerivedClasses( self ) : n = GafferTest.AddNode() self.assertHashesValid( n )
def testConnectedNodeGadgets( self ) : script = Gaffer.ScriptNode() # a -> b -> c -> e -> f # | # v # d script["a"] = GafferTest.AddNode() script["b"] = GafferTest.AddNode() script["c"] = GafferTest.AddNode() script["d"] = GafferTest.AddNode() script["e"] = GafferTest.AddNode() script["f"] = GafferTest.AddNode() script["b"]["op1"].setInput( script["a"]["sum"] ) script["c"]["op1"].setInput( script["b"]["sum"] ) script["d"]["op1"].setInput( script["c"]["sum"] ) script["e"]["op1"].setInput( script["c"]["sum"] ) script["f"]["op1"].setInput( script["e"]["sum"] ) g = GafferUI.GraphGadget( script ) # test traversing in both directions u = [ x.node().relativeName( script ) for x in g.connectedNodeGadgets( script["b"] ) ] self.assertEqual( set( u ), set( [ "a", "c", "d", "e", "f" ] ) ) u = [ x.node().relativeName( script ) for x in g.connectedNodeGadgets( script["e"] ) ] self.assertEqual( set( u ), set( [ "a", "b", "c", "d", "f" ] ) ) u = [ x.node().relativeName( script ) for x in g.connectedNodeGadgets( script["c"], degreesOfSeparation = 1 ) ] self.assertEqual( set( u ), set( [ "b", "d", "e" ] ) ) # test traversing upstream u = [ x.node().relativeName( script ) for x in g.connectedNodeGadgets( script["c"], direction = Gaffer.Plug.Direction.In ) ] self.assertEqual( set( u ), set( [ "a", "b" ] ) ) u = [ x.node().relativeName( script ) for x in g.connectedNodeGadgets( script["c"], direction = Gaffer.Plug.Direction.In, degreesOfSeparation = 1 ) ] self.assertEqual( set( u ), set( [ "b" ] ) ) # test traversing downstream u = [ x.node().relativeName( script ) for x in g.connectedNodeGadgets( script["c"], direction = Gaffer.Plug.Direction.Out ) ] self.assertEqual( set( u ), set( [ "d", "e", "f" ] ) ) u = [ x.node().relativeName( script ) for x in g.connectedNodeGadgets( script["c"], direction = Gaffer.Plug.Direction.Out, degreesOfSeparation = 1 ) ] self.assertEqual( set( u ), set( [ "d", "e" ] ) ) # test that invisible nodes are ignored g.setFilter( Gaffer.StandardSet( [ script["f"], script["e"], script["c"] ] ) ) u = [ x.node().relativeName( script ) for x in g.connectedNodeGadgets( script["e"] ) ] self.assertEqual( set( u ), set( [ "f", "c" ] ) ) u = [ x.node().relativeName( script ) for x in g.connectedNodeGadgets( script["e"], direction = Gaffer.Plug.Direction.In ) ] self.assertEqual( set( u ), set( [ "c" ] ) ) u = [ x.node().relativeName( script ) for x in g.connectedNodeGadgets( script["e"], direction = Gaffer.Plug.Direction.Out ) ] self.assertEqual( set( u ), set( [ "f" ] ) )
def testUnsavedChanges( self ) : s = Gaffer.ScriptNode() self.assertEqual( s["unsavedChanges"].getValue(), False ) # the unsaved changes flag only reacts to undoable changes # so this shouldn't set the flag s["nonUndoableNode"] = GafferTest.AddNode() self.assertEqual( s["unsavedChanges"].getValue(), False ) # but this should. with Gaffer.UndoScope( s ) : s["node"] = GafferTest.AddNode() self.assertEqual( s["unsavedChanges"].getValue(), True ) s["fileName"].setValue( self.temporaryDirectory() + "/test.gfr" ) s.save() self.assertEqual( s["unsavedChanges"].getValue(), False ) with Gaffer.UndoScope( s ) : s["node"]["op1"].setValue( 10 ) self.assertEqual( s["unsavedChanges"].getValue(), True ) s.save() self.assertEqual( s["unsavedChanges"].getValue(), False ) with Gaffer.UndoScope( s ) : s["node"]["op1"].setValue( 20 ) self.assertEqual( s["unsavedChanges"].getValue(), True ) s.save() self.assertEqual( s["unsavedChanges"].getValue(), False ) s.undo() self.assertEqual( s["unsavedChanges"].getValue(), True ) s.save() self.assertEqual( s["unsavedChanges"].getValue(), False ) s.redo() self.assertEqual( s["unsavedChanges"].getValue(), True ) s.save() self.assertEqual( s["unsavedChanges"].getValue(), False ) with Gaffer.UndoScope( s ) : s["node2"] = GafferTest.AddNode() self.assertEqual( s["unsavedChanges"].getValue(), True ) s.save() self.assertEqual( s["unsavedChanges"].getValue(), False ) with Gaffer.UndoScope( s ) : s["node2"]["op1"].setInput( s["node"]["sum"] ) self.assertEqual( s["unsavedChanges"].getValue(), True ) s.save() self.assertEqual( s["unsavedChanges"].getValue(), False ) s.load() self.assertEqual( s["unsavedChanges"].getValue(), False )