コード例 #1
0
ファイル: BoxInTest.py プロジェクト: stefanfeess/gaffer
    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")
コード例 #2
0
	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"] ) )
コード例 #3
0
ファイル: OSLObjectTest.py プロジェクト: Eryckz/gaffer
	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"] )
コード例 #4
0
ファイル: OSLImageTest.py プロジェクト: jonntd/gaffer
	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"] )
コード例 #5
0
	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 )
コード例 #6
0
	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 ) )
コード例 #7
0
	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 )
コード例 #8
0
	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"] )
コード例 #9
0
ファイル: ReferenceTest.py プロジェクト: mcanthony/gaffer
    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")
コード例 #10
0
    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())
コード例 #11
0
ファイル: BoxInTest.py プロジェクト: stefanfeess/gaffer
    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"]))
コード例 #12
0
ファイル: ReferenceTest.py プロジェクト: jhoolmans/gaffer
    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()
コード例 #13
0
    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"]))
コード例 #14
0
	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()
コード例 #15
0
	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"] ) )
コード例 #16
0
    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"])
コード例 #17
0
ファイル: BoxUITest.py プロジェクト: wubugui/gaffer
    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)
コード例 #18
0
	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() )
コード例 #19
0
ファイル: PlugAlgoTest.py プロジェクト: stefanfeess/gaffer
    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))
コード例 #20
0
ファイル: TaskNodeTest.py プロジェクト: wubugui/gaffer
	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"] ) )
コード例 #21
0
	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 )
コード例 #22
0
ファイル: ReferenceTest.py プロジェクト: wubugui/gaffer
	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"] ) )
コード例 #23
0
    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"]))
コード例 #24
0
	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"] )
コード例 #25
0
	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"] ) )
コード例 #26
0
ファイル: AnimationTest.py プロジェクト: wizofe/gaffer
    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)
コード例 #27
0
	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"] )
コード例 #28
0
    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))
コード例 #29
0
ファイル: BoxTest.py プロジェクト: tws0002/gaffer
	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" )
コード例 #30
0
ファイル: CatalogueTest.py プロジェクト: Eric-coder/gaffer
	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 )