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())
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())
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"])
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" ) )
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())
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())
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)
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"])
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)
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"])
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
def testReadNoFilename(self): r = Gaffer.ObjectReader() self.assertEqual(r["out"].getValue(), r["out"].defaultValue())