def testCompoundPlugUserDefaults(self): node = GafferTest.CompoundPlugNode() self.assertEqual(node["p"]["s"].getValue(), "") Gaffer.Metadata.registerValue(GafferTest.CompoundPlugNode, "p.s", "userDefault", IECore.StringData("from the metadata")) self.assertFalse(Gaffer.NodeAlgo.isSetToUserDefault(node["p"]["s"])) Gaffer.NodeAlgo.applyUserDefaults(node) self.assertEqual(node["p"]["s"].getValue(), "from the metadata") self.assertTrue(Gaffer.NodeAlgo.isSetToUserDefault(node["p"]["s"])) # override the metadata for this particular instance Gaffer.Metadata.registerValue(node["p"]["s"], "userDefault", IECore.StringData("i am special")) self.assertFalse(Gaffer.NodeAlgo.isSetToUserDefault(node["p"]["s"])) Gaffer.NodeAlgo.applyUserDefaults(node) self.assertEqual(node["p"]["s"].getValue(), "i am special") self.assertTrue(Gaffer.NodeAlgo.isSetToUserDefault(node["p"]["s"])) # this node still gets the original userDefault node2 = GafferTest.CompoundPlugNode() self.assertFalse(Gaffer.NodeAlgo.isSetToUserDefault(node2["p"]["s"])) Gaffer.NodeAlgo.applyUserDefaults(node2) self.assertEqual(node2["p"]["s"].getValue(), "from the metadata") self.assertTrue(Gaffer.NodeAlgo.isSetToUserDefault(node2["p"]["s"]))
def testConnectNode(self): s = Gaffer.ScriptNode() s["add1"] = GafferTest.AddNode() s["add2"] = GafferTest.AddNode() ge = GafferUI.GraphEditor(s) g = ge.graphGadget() # check we can connect to a top level plug g.getLayout().connectNode(g, s["add2"], Gaffer.StandardSet([s["add1"]])) self.assertTrue(s["add2"]["op1"].getInput().isSame(s["add1"]["sum"])) # check we can connect to a nested plug, but only provided it is represented # in the node graph by a nodule for that exact plug. s["compound"] = GafferTest.CompoundPlugNode() g.getLayout().connectNode(g, s["compound"], Gaffer.StandardSet([s["add2"]])) self.assertEqual(s["compound"]["p"]["f"].getInput(), None) Gaffer.Metadata.registerValue(GafferTest.CompoundPlugNode, "p", "nodule:type", "GafferUI::CompoundNodule") s["compound2"] = GafferTest.CompoundPlugNode() g.getLayout().connectNode(g, s["compound2"], Gaffer.StandardSet([s["add2"]])) self.assertTrue(s["compound2"]["p"]["f"].getInput().isSame( s["add2"]["sum"])) # check we can connect from a nested plug, but only provided it is represented # in the node graph by a nodule for that exact plug. s["add3"] = GafferTest.AddNode() g.getLayout().connectNode(g, s["add3"], Gaffer.StandardSet([s["compound2"]])) self.assertEqual(s["add3"]["op1"].getInput(), None) Gaffer.Metadata.registerValue(GafferTest.CompoundPlugNode, "o", "nodule:type", "GafferUI::CompoundNodule") s["compound3"] = GafferTest.CompoundPlugNode() g.getLayout().connectNode(g, s["add3"], Gaffer.StandardSet([s["compound3"]])) self.assertTrue(s["add3"]["op1"].getInput().isSame( s["compound3"]["o"]["f"]))
def testConnectNode(self): s = Gaffer.ScriptNode() s["add1"] = GafferTest.AddNode() s["add2"] = GafferTest.AddNode() ng = GafferUI.NodeGraph(s) g = ng.graphGadget() # check we can connect to a top level plug g.getLayout().connectNode(g, s["add2"], Gaffer.StandardSet([s["add1"]])) self.assertTrue(s["add2"]["op1"].getInput().isSame(s["add1"]["sum"])) # check we can connect to a nested plug, but only provided it is represented # in the node graph by a nodule for that exact plug. s["compound"] = GafferTest.CompoundPlugNode() g.getLayout().connectNode(g, s["compound"], Gaffer.StandardSet([s["add2"]])) self.assertEqual(s["compound"]["p"]["f"].getInput(), None) GafferUI.Nodule.registerNodule( GafferTest.CompoundPlugNode.staticTypeId(), "p", GafferUI.CompoundNodule) s["compound2"] = GafferTest.CompoundPlugNode() g.getLayout().connectNode(g, s["compound2"], Gaffer.StandardSet([s["add2"]])) self.assertTrue(s["compound2"]["p"]["f"].getInput().isSame( s["add2"]["sum"])) # check we can connect from a nested plug, but only provided it is represented # in the node graph by a nodule for that exact plug. s["add3"] = GafferTest.AddNode() g.getLayout().connectNode(g, s["add3"], Gaffer.StandardSet([s["compound2"]])) self.assertEqual(s["add3"]["op1"].getInput(), None) GafferUI.Nodule.registerNodule( GafferTest.CompoundPlugNode.staticTypeId(), "o", GafferUI.CompoundNodule) s["compound3"] = GafferTest.CompoundPlugNode() g.getLayout().connectNode(g, s["add3"], Gaffer.StandardSet([s["compound3"]])) self.assertTrue(s["add3"]["op1"].getInput().isSame( s["compound3"]["o"]["f"]))
def testDirtyPropagationScopingForCompoundPlugInputChange( self ) : n1 = GafferTest.CompoundPlugNode() n2 = GafferTest.CompoundPlugNode() n3 = GafferTest.CompoundPlugNode() # We never want to be signalled at a point # when the child connections are not in # a consistent state. InputState = collections.namedtuple( "InputState", ( "p", "s", "f" ) ) inputStates = [] def plugDirtied( p ) : # We can't use self.assert*() in here, # because exceptions are caught in plugDirtiedSignal() # handling. So we just record the state to check later # in assertStatesValid(). inputStates.append( InputState( n3["p"].getInput(), n3["p"]["s"].getInput(), n3["p"]["f"].getInput() ) ) def assertStatesValid() : for state in inputStates : if state.p is not None : self.assertTrue( state.s is not None ) self.assertTrue( state.f is not None ) self.assertTrue( state.p.isSame( state.f.parent() ) ) else : self.assertTrue( state.s is None ) self.assertTrue( state.f is None ) c = n3.plugDirtiedSignal().connect( plugDirtied ) n3["p"].setInput( n1["o"] ) assertStatesValid() n3["p"].setInput( n2["o"] ) assertStatesValid() n3["p"].setInput( None ) assertStatesValid()
def testSerialisation(self): s = Gaffer.ScriptNode() s["n1"] = GafferTest.CompoundPlugNode() s["n2"] = GafferTest.CompoundPlugNode() s["n1"]["p"]["f"].setValue(10) s["n1"]["p"]["s"].setInput(s["n2"]["p"]["s"]) ss = s.serialise() s = Gaffer.ScriptNode() s.execute(ss) self.assertEqual(s["n1"]["p"]["f"].getValue(), 10) self.failUnless(s["n1"]["p"]["s"].getInput().isSame(s["n2"]["p"]["s"]))
def testSerialisationOfMasterConnection(self): s = Gaffer.ScriptNode() s["n1"] = GafferTest.CompoundPlugNode() s["n2"] = GafferTest.CompoundPlugNode() s["n1"]["p"].setInput(s["n2"]["p"]) self.failUnless(s["n1"]["p"].getInput().isSame(s["n2"]["p"])) self.failUnless(s["n1"]["p"]["f"].getInput().isSame(s["n2"]["p"]["f"])) self.failUnless(s["n1"]["p"]["s"].getInput().isSame(s["n2"]["p"]["s"])) ss = s.serialise() s = Gaffer.ScriptNode() s.execute(ss) self.failUnless(s["n1"]["p"].getInput().isSame(s["n2"]["p"])) self.failUnless(s["n1"]["p"]["f"].getInput().isSame(s["n2"]["p"]["f"])) self.failUnless(s["n1"]["p"]["s"].getInput().isSame(s["n2"]["p"]["s"]))
def testSerialisationOfDynamicPlugsOnNondynamicParent( self ) : s = Gaffer.ScriptNode() s["n"] = GafferTest.CompoundPlugNode() s["n"]["nonDynamicParent"]["dynamicPlug"] = Gaffer.IntPlug( flags = Gaffer.Plug.Flags.Default | Gaffer.Plug.Flags.Dynamic ) s["n"]["nonDynamicParent"]["dynamicPlug"].setValue( 10 ) s2 = Gaffer.ScriptNode() s2.execute( s.serialise() ) self.assertEqual( s2["n"]["nonDynamicParent"]["dynamicPlug"].getValue(), 10 )
def testAffected( self ) : n = GafferTest.CompoundPlugNode() affected = [] ancestorAffected = [] childAffected = [] def plugValueChanged( nodeTypeId, plugPath, key, plug ) : affected.append( Gaffer.MetadataAlgo.affectedByChange( n["p"]["s"], nodeTypeId, plugPath, plug ) ) ancestorAffected.append( Gaffer.MetadataAlgo.ancestorAffectedByChange( n["p"]["s"], nodeTypeId, plugPath, plug ) ) childAffected.append( Gaffer.MetadataAlgo.childAffectedByChange( n["p"], nodeTypeId, plugPath, plug ) ) c = Gaffer.Metadata.plugValueChangedSignal().connect( plugValueChanged ) Gaffer.Metadata.registerValue( Gaffer.Node, "user", "test", 1 ) self.assertEqual( affected, [ False ] ) self.assertEqual( ancestorAffected, [ False ] ) self.assertEqual( childAffected, [ False ] ) Gaffer.Metadata.registerValue( GafferTest.SphereNode, "p.s", "test", 1 ) self.assertEqual( affected, [ False, False ] ) self.assertEqual( ancestorAffected, [ False, False ] ) self.assertEqual( childAffected, [ False, False ] ) Gaffer.Metadata.registerValue( GafferTest.CompoundPlugNode, "p.s", "test", 1 ) self.assertEqual( affected, [ False, False, True ] ) self.assertEqual( ancestorAffected, [ False, False, False ] ) self.assertEqual( childAffected, [ False, False, True ] ) Gaffer.Metadata.registerValue( GafferTest.CompoundPlugNode, "p", "test", 2 ) self.assertEqual( affected, [ False, False, True, False ] ) self.assertEqual( ancestorAffected, [ False, False, False, True ] ) self.assertEqual( childAffected, [ False, False, True, False ] ) del affected[:] del ancestorAffected[:] del childAffected[:] Gaffer.Metadata.registerValue( n["user"], "test", 3 ) self.assertEqual( affected, [ False ] ) self.assertEqual( ancestorAffected, [ False ] ) self.assertEqual( childAffected, [ False ] ) Gaffer.Metadata.registerValue( n["p"]["s"], "test", 4 ) self.assertEqual( affected, [ False, True ] ) self.assertEqual( ancestorAffected, [ False, False ] ) self.assertEqual( childAffected, [ False, True ] ) Gaffer.Metadata.registerValue( n["p"], "test", 5 ) self.assertEqual( affected, [ False, True, False ] ) self.assertEqual( ancestorAffected, [ False, False, True ] ) self.assertEqual( childAffected, [ False, True, False ] )
def testDirtyPropagation(self): n = GafferTest.CompoundPlugNode() dirtyPlugs = GafferTest.CapturingSlot(n.plugDirtiedSignal()) n["p"]["f"].setValue(100) self.assertEqual(len(dirtyPlugs), 4) self.failUnless(dirtyPlugs[0][0].isSame(n["p"]["f"])) self.failUnless(dirtyPlugs[1][0].isSame(n["p"])) self.failUnless(dirtyPlugs[2][0].isSame(n["o"]["f"])) self.failUnless(dirtyPlugs[3][0].isSame(n["o"]))
def testPromoteStaticPlugsWithChildren( self ) : s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["n"] = GafferTest.CompoundPlugNode() s["b"]["n"]["valuePlug"]["i"].setValue( 10 ) p = s["b"].promotePlug( s["b"]["n"]["valuePlug"] ) p.setName( "p" ) s2 = Gaffer.ScriptNode() s2.execute( s.serialise() ) self.assertEqual( s2["b"]["n"]["valuePlug"]["i"].getValue(), 10 ) self.assertTrue( s2["b"]["n"]["valuePlug"]["i"].getInput().isSame( s2["b"]["p"]["i"] ) )
def testPromoteCompoundPlugAndSerialise( self ) : s = Gaffer.ScriptNode() s["n"] = GafferTest.CompoundPlugNode() s["n"]["p"]["s"].setValue( "hello" ) b = Gaffer.Box.create( s, Gaffer.StandardSet( [ s["n"] ] ) ) b.promotePlug( b["n"]["p"] ) ss = s.serialise() s = Gaffer.ScriptNode() s.execute( ss ) self.assertEqual( s["Box"]["n"]["p"]["s"].getValue(), "hello" )
def testPromoteCompoundPlugAndSerialise(self): s = Gaffer.ScriptNode() s["b"] = Gaffer.Box() s["b"]["n"] = GafferTest.CompoundPlugNode() s["b"]["n"]["p"]["s"].setValue("hello") Gaffer.PlugAlgo.promote(s["b"]["n"]["p"]) ss = s.serialise() s = Gaffer.ScriptNode() s.execute(ss) self.assertEqual(s["b"]["n"]["p"]["s"].getValue(), "hello")
def testNodeAffected( self ) : n = GafferTest.CompoundPlugNode() affected = [] def nodeValueChanged( nodeTypeId, key, node ) : affected.append( Gaffer.MetadataAlgo.affectedByChange( n, nodeTypeId, node ) ) c = Gaffer.Metadata.nodeValueChangedSignal().connect( nodeValueChanged ) Gaffer.Metadata.registerValue( Gaffer.Node, "metadataAlgoTest", 1 ) self.assertEqual( affected, [ True ] ) Gaffer.Metadata.registerValue( GafferTest.AddNode, "metadataAlgoTest", 2 ) self.assertEqual( affected, [ True, False ] ) Gaffer.Metadata.registerValue( n, "metadataAlgoTest", 3 ) self.assertEqual( affected, [ True, False, True ] ) a = GafferTest.AddNode() Gaffer.Metadata.registerValue( a, "metadataAlgoTest", 4 ) self.assertEqual( affected, [ True, False, True, False ] )
def testAffectsRejectsCompoundPlugs(self): n = GafferTest.CompoundPlugNode() self.assertRaises(RuntimeError, n.affects, n["p"])
def testAffectedByPlugTypeRegistration(self): n = GafferTest.CompoundPlugNode() self.assertTrue( Gaffer.MetadataAlgo.affectedByChange(n["p"]["s"], Gaffer.StringPlug, changedPlugPath="", changedPlug=None)) self.assertFalse( Gaffer.MetadataAlgo.affectedByChange(n["p"]["s"], Gaffer.IntPlug, changedPlugPath="", changedPlug=None)) self.assertTrue( Gaffer.MetadataAlgo.affectedByChange(n["p"], Gaffer.Plug, changedPlugPath="", changedPlug=None)) self.assertTrue( Gaffer.MetadataAlgo.childAffectedByChange(n["p"], Gaffer.StringPlug, changedPlugPath="", changedPlug=None)) self.assertTrue( Gaffer.MetadataAlgo.childAffectedByChange(n["p"], Gaffer.FloatPlug, changedPlugPath="", changedPlug=None)) self.assertFalse( Gaffer.MetadataAlgo.childAffectedByChange(n["p"], Gaffer.IntPlug, changedPlugPath="", changedPlug=None)) self.assertFalse( Gaffer.MetadataAlgo.childAffectedByChange(n["p"]["s"], Gaffer.StringPlug, changedPlugPath="", changedPlug=None)) self.assertFalse( Gaffer.MetadataAlgo.ancestorAffectedByChange(n["p"], Gaffer.CompoundPlug, changedPlugPath="", changedPlug=None)) self.assertTrue( Gaffer.MetadataAlgo.ancestorAffectedByChange(n["p"]["s"], Gaffer.CompoundPlug, changedPlugPath="", changedPlug=None)) self.assertTrue( Gaffer.MetadataAlgo.ancestorAffectedByChange(n["p"]["s"], Gaffer.Plug, changedPlugPath="", changedPlug=None)) self.assertFalse( Gaffer.MetadataAlgo.ancestorAffectedByChange(n["p"]["s"], Gaffer.StringPlug, changedPlugPath="", changedPlug=None))