Пример #1
0
    def test(self):

        fileName = os.path.dirname(__file__) + "/images/checker.exr"

        node = Gaffer.ObjectReader()
        node["fileName"].setValue(fileName)
        self.assertEqual(node["fileName"].getValue(), fileName)

        # check that there are plugs for the reader parameters,
        # but not for the fileName parameter.

        reader = IECore.Reader.create(fileName)

        for k in reader.parameters().keys():
            if k != "fileName":
                self.failUnless(k in node["parameters"])

        self.failIf("fileName" in node["parameters"])

        # check that the result is the same as loading it ourselves

        self.assertEqual(reader.read(), node["out"].getValue())

        # check that changing the parameter plugs affects the loading

        dirtyCapturer = GafferTest.CapturingSlot(node.plugDirtiedSignal())

        node["parameters"]["channels"].setValue(IECore.StringVectorData(["R"]))

        self.assertEqual(len(dirtyCapturer), 1)
        self.assertEqual(dirtyCapturer[0][0].getName(), "out")

        reader["channels"].setValue(IECore.StringVectorData(["R"]))

        self.assertEqual(reader.read(), node["out"].getValue())
Пример #2
0
    def testChangingFileType(self):

        imageFileName = os.path.dirname(__file__) + "/images/checker.exr"
        cobFileName = os.path.dirname(__file__) + "/cobs/pSphereShape1.cob"

        node = Gaffer.ObjectReader()
        node["fileName"].setValue(imageFileName)

        reader = IECore.Reader.create(imageFileName)

        self.assertEqual(len(node["parameters"]), len(reader.parameters()) - 1)
        for k in reader.parameters().keys():
            if k != "fileName":
                self.failUnless(k in node["parameters"])

        node["fileName"].setValue(cobFileName)

        reader = IECore.Reader.create(cobFileName)

        self.assertEqual(len(node["parameters"]), len(reader.parameters()) - 1)
        for k in reader.parameters().keys():
            if k != "fileName":
                self.failUnless(k in node["parameters"])

        self.assertEqual(reader.read(), node["out"].getValue())
Пример #3
0
    def testFileInput(self):

        fileName = os.path.expandvars(
            "$GAFFER_ROOT/python/GafferTest/cobs/pSphereShape1.cob")

        read = Gaffer.ObjectReader()
        read["fileName"].setValue(fileName)
        object = IECore.Reader.create(fileName).read()

        objectToScene = GafferScene.ObjectToScene()
        objectToScene["object"].setInput(read["out"])

        self.assertEqual(objectToScene["out"].bound("/"), object.bound())
        self.assertEqual(objectToScene["out"].transform("/"), IECore.M44f())
        self.assertEqual(objectToScene["out"].object("/"), IECore.NullObject())
        self.assertEqual(objectToScene["out"].childNames("/"),
                         IECore.InternedStringVectorData(["object"]))

        self.assertEqual(objectToScene["out"].bound("/object"), object.bound())
        self.assertEqual(objectToScene["out"].transform("/object"),
                         IECore.M44f())
        self.assertEqual(objectToScene["out"].object("/object"), object)
        self.assertEqual(objectToScene["out"].childNames("/object"),
                         IECore.InternedStringVectorData())

        self.assertSceneValid(objectToScene["out"])
Пример #4
0
	def test( self ) :
		
		## \todo - this test just needs an arbitrary mesh with normals.
		# We should maybe have a more concise way of achieving this.  How about a cow primitive?
		fileName = os.path.expandvars( "$GAFFER_ROOT/python/GafferTest/cobs/pSphereShape1.cob" )

		read = Gaffer.ObjectReader()
		read["fileName"].setValue( fileName )
		object = IECore.Reader.create( fileName ).read()

		p = GafferScene.ObjectToScene()
		p["object"].setInput( read["out"] )

		m = GafferScene.MeshType()
		m["in"].setInput( p["out"] )
		
		# Test unchanged settings.
		
		self.assertEqual( m["meshType"].getValue(), "" ) # do nothing
		self.assertEqual( p["out"].object( "/object" ), m["out"].object( "/object" ) )
		self.assertScenesEqual( p["out"], m["out"] )
		
		# Test converting poly to poly ( shouldn't do anything )
		
		m["meshType"].setValue( "linear" )
		
		self.assertEqual( p["out"].object( "/object" ), m["out"].object( "/object" ) )
		self.assertScenesEqual( p["out"], m["out"] )
		
		self.failUnless( "P" in m["out"].object( "/object" ) )
		self.failUnless( "N" in m["out"].object( "/object" ) )

		# Test converting poly to subdiv	
		
		m["meshType"].setValue( "catmullClark" )
				
		self.assertNotEqual( p["out"].object( "/object" ), m["out"].object( "/object" ) )
		self.assertSceneHashesEqual( p["out"], m["out"], childPlugNames = ( "attributes", "bound", "transform", "globals", "childNames" ) )
		
		self.assertScenesEqual( p["out"], m["out"], pathsToIgnore = ( "/object", ) )
		
		self.assertEqual( m["out"].object( "/object" ).interpolation, "catmullClark" )
		self.failUnless( "N" not in m["out"].object( "/object" ) )

		# Test converting back to poly
		
		m2 = GafferScene.MeshType()
		m2["in"].setInput( m["out"] )

		m2["meshType"].setValue( "linear" )
		self.assertEqual( m2["out"].object( "/object" ).interpolation, "linear" )
		self.assertTrue( "N" not in m2["out"].object( "/object" ) )
		
		m2["calculatePolygonNormals"].setValue( True )
		self.failUnless( "N" in m2["out"].object( "/object" ) )
Пример #5
0
    def test(self):

        fileName = os.path.dirname(__file__) + "/images/checker.exr"

        node = Gaffer.ObjectReader()
        node["fileName"].setValue(fileName)
        self.assertEqual(node["fileName"].getValue(), fileName)

        reader = IECore.Reader.create(fileName)

        # check that the result is the same as loading it ourselves
        self.assertEqual(reader.read(), node["out"].getValue())
Пример #6
0
    def testChangingFileType(self):

        imageFileName = os.path.dirname(__file__) + "/images/checker.exr"
        cobFileName = os.path.dirname(__file__) + "/cobs/pSphereShape1.cob"

        node = Gaffer.ObjectReader()
        node["fileName"].setValue(imageFileName)
        reader = IECore.Reader.create(imageFileName)
        self.assertEqual(reader.read(), node["out"].getValue())

        node["fileName"].setValue(cobFileName)
        reader = IECore.Reader.create(cobFileName)
        self.assertEqual(reader.read(), node["out"].getValue())
Пример #7
0
    def testReadAfterSerialisation(self):

        s = Gaffer.ScriptNode()
        s["n"] = Gaffer.ObjectReader()
        s["n"]["fileName"].setValue(
            os.path.dirname(__file__) + "/images/checker.exr")

        r = s["n"]["out"].getValue()

        ss = s.serialise()

        s = Gaffer.ScriptNode()
        s.execute(ss)

        self.assertEqual(s["n"]["out"].getValue(), r)
Пример #8
0
    def testExtraneousPlugsAfterSerialisation(self):

        s = Gaffer.ScriptNode()
        s["n"] = Gaffer.ObjectReader()
        s["n"]["fileName"].setValue(
            os.path.dirname(__file__) + "/images/checker.exr")

        self.failIf("parameters1" in s["n"])

        ss = s.serialise()

        s = Gaffer.ScriptNode()
        s.execute(ss)

        self.failIf("parameters1" in s["n"])
Пример #9
0
    def testExtraneousParameterPlugsAfterSerialisation(self):

        s = Gaffer.ScriptNode()
        s["n"] = Gaffer.ObjectReader()
        s["n"]["fileName"].setValue(
            os.path.dirname(__file__) + "/images/checker.exr")

        originalParameterPlugNames = s["n"]["parameters"].keys()

        r = s["n"]["out"].getValue()

        ss = s.serialise()

        s = Gaffer.ScriptNode()
        s.execute(ss)

        self.assertEqual(s["n"]["parameters"].keys(),
                         originalParameterPlugNames)
Пример #10
0
    def __init__(self, name="_ObjectPreview"):

        Gaffer.Node.__init__(self, name)

        self["fileName"] = Gaffer.StringPlug(defaultValue="")
        self["fileName"].setFlags(Gaffer.Plug.Flags.PerformsSubstitutions,
                                  False)
        self["frameRate"] = Gaffer.FloatPlug(defaultValue=24.0)
        self["samplesPerFrame"] = Gaffer.IntPlug(defaultValue=1, minValue=1)

        # single object scenes using Reader ops behind the scenes?
        self["ObjectReader"] = Gaffer.ObjectReader()
        self["ObjectReaderExpression"] = Gaffer.Expression("Expression")
        self["ObjectReaderExpression"]["expression"].setValue('''
import IECore

fileName = parent['fileName']

try :
	sequence = IECore.FileSequence( fileName )
	calc = IECore.OversamplesCalculator( frameRate = parent["frameRate"], samplesPerFrame = parent["samplesPerFrame"] )
	if isinstance( sequence.frameList, IECore.FrameRange ) and sequence.frameList.step == 1 :
		calc.setTicksPerSecond( 24 )

	result = sequence.fileNameForFrame( calc.framesToTicks( context['frame'] ) )

except :
	result = fileName

parent['ObjectReader']['fileName'] = result
''')
        self["ObjectReader"]["fileName"].setInput(
            self["ObjectReaderExpression"]["out"])
        self["ObjectToScene"] = GafferScene.ObjectToScene("ObjectToScene")
        self["ObjectToScene"]["object"].setInput(self["ObjectReader"]["out"])

        self["out"] = GafferScene.ScenePlug(
            direction=Gaffer.Plug.Direction.Out)
        self["out"].setInput(self["ObjectToScene"]["out"])
Пример #11
0
    def _run(self, args):

        if len(args["files"]) < 1 or len(args["files"]) > 2:

            raise Exception("Must view exactly one file.")

        self.__script = Gaffer.ScriptNode()

        ## \todo We need a smarter way of choosing a reader so we
        # can use ImageReaders and SceneReaders too. Perhaps we should
        # create an improved ReaderPathPreview and then just use it
        # as the core of this app.
        readNode = Gaffer.ObjectReader()
        readNode["fileName"].setValue(args["files"][0])

        self.__script.addChild(readNode)
        self.__script.selection().add(readNode)

        self.__window = GafferUI.Window(title="Gaffer Viewer", resizeable=True)

        viewer = GafferUI.Viewer(self.__script)

        self.__window.setChild(viewer)

        self.__closedConnection = self.__window.closedSignal().connect(
            Gaffer.WeakMethod(self.__closed))

        ## \todo The window doesn't appear without this naughtiness. I think we either need to
        # add a similar method in the public interface, or maybe make a SizeConstraintContainer
        # or something along those lines.
        self.__window._qtWidget().setMinimumSize(300, 200)
        self.__window.setVisible(True)

        GafferUI.EventLoop.mainEventLoop().start()

        return 0
Пример #12
0
    def testReadNoFilename(self):

        r = Gaffer.ObjectReader()
        self.assertEqual(r["out"].getValue(), r["out"].defaultValue())