示例#1
0
	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"] ) )
示例#2
0
    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()
示例#3
0
	def testHashForPythonDerivedClasses( self ) :
	
		n = GafferTest.AddNode()
		self.assertHashesValid( n )
示例#4
0
	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" ] ) )
示例#5
0
	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 )