Esempio n. 1
0
	def testDeletedDagPath( self ) :
		
		sphere = maya.cmds.polySphere( name="pSphere1" )
		
		scene = IECoreMaya.MayaScene()
		child = scene.child( "pSphere1" )
		
		maya.cmds.delete( "pSphere1" )
		
		self.assertRaises( RuntimeError, IECore.curry( child.child, "pSphereShape1" ) )
		self.assertRaises( RuntimeError, child.childNames )
		self.assertRaises( RuntimeError, IECore.curry( child.hasChild, "asdd" ) )
		self.assertRaises( RuntimeError, child.name )
		self.assertRaises( RuntimeError, child.path )
		self.assertRaises( RuntimeError, child.hasObject )
		self.assertRaises( RuntimeError, IECore.curry( child.readBound, 0.0 ) )
		self.assertRaises( RuntimeError, IECore.curry( child.readObject, 0.0 ) )
		self.assertRaises( RuntimeError, IECore.curry( child.readTransform, 0.0 ) )
		self.assertRaises( RuntimeError, IECore.curry( child.readTransformAsMatrix, 0.0 ) )
		
		# this doesn't need to throw an exception does it?
		self.assertEqual( child.scene( [ "pSphere1", "pSphereShape1" ], IECore.SceneInterface.MissingBehaviour.NullIfMissing ), None )
		
		# I guess this does...
		self.assertRaises( RuntimeError, IECore.curry( child.scene, [ "pSphere1", "pSphereShape1" ] ) )
Esempio n. 2
0
    def testCustomTags(self):

        t = maya.cmds.createNode("transform")
        maya.cmds.select(clear=True)
        sphere = maya.cmds.polySphere(name="pSphere")

        def renderableTag(node):
            dagPath = IECoreMaya.StringUtil.dagPathFromString(node)
            try:
                dagPath.extendToShapeDirectlyBelow(0)
            except:
                return False
            return dagPath.fullPathName().endswith("Shape")

        IECoreMaya.MayaScene.registerCustomTag("renderable", renderableTag)

        scene = IECoreMaya.MayaScene()
        transformScene = scene.child(str(t))
        sphereScene = scene.child('pSphere')
        self.assertFalse(scene.hasTag('renderable'))
        self.assertEqual(scene.readTags(), [])
        self.assertFalse(transformScene.hasTag('renderable'))
        self.assertEqual(transformScene.readTags(), [])
        self.assertEqual(sphereScene.readTags(),
                         [IECore.InternedString('renderable')])
        self.assertTrue(sphereScene.hasTag('renderable'))
Esempio n. 3
0
	def testTags( self ) :
		
		self.writeTagSCC( file=SceneShapeTest.__testFile )
		
		maya.cmds.file( new=True, f=True )
		node = maya.cmds.createNode( 'ieSceneShape' )
		fn = IECoreMaya.FnSceneShape( node )
		transform = str(maya.cmds.listRelatives( node, parent=True )[0])
		maya.cmds.setAttr( node+'.file', SceneShapeTest.__testFile, type='string' )
		
		scene = IECoreMaya.MayaScene().child( transform )
		self.assertEqual( sorted([ str(x) for x in scene.readTags( IECore.SceneInterface.TagFilter.EveryTag ) ]), [ "ObjectType:MeshPrimitive", "a", "b", "c" ] )
		self.assertEqual( sorted([ str(x) for x in scene.readTags() ]), [] )
		for tag in scene.readTags(IECore.SceneInterface.TagFilter.EveryTag) :
			self.assertTrue( scene.hasTag( tag, IECore.SceneInterface.TagFilter.EveryTag ) )
		self.assertFalse( scene.hasTag( "fakeTag", IECore.SceneInterface.TagFilter.EveryTag ) )
		
		# double expanding because the first level has all the same tags
		childFn = fn.expandOnce()[0].expandOnce()[0]
		scene = childFn.sceneInterface()
		self.assertEqual( set([ str(x) for x in scene.readTags( IECore.SceneInterface.TagFilter.DescendantTag|IECore.SceneInterface.TagFilter.LocalTag ) ]), set([ "ObjectType:MeshPrimitive", "b", "c" ]) )
		self.assertEqual( sorted([ str(x) for x in scene.readTags() ]), [ "ObjectType:MeshPrimitive", "b" ] )
		for tag in scene.readTags(IECore.SceneInterface.TagFilter.EveryTag) :
			self.assertTrue( scene.hasTag( tag, IECore.SceneInterface.TagFilter.EveryTag ) )
		self.assertFalse( scene.hasTag( "fakeTag", IECore.SceneInterface.TagFilter.EveryTag ) )
		
		childFn = childFn.expandOnce()[0]
		scene = childFn.sceneInterface()
		self.assertEqual( sorted([ str(x) for x in scene.readTags( IECore.SceneInterface.TagFilter.DescendantTag|IECore.SceneInterface.TagFilter.LocalTag ) ]), [ "ObjectType:MeshPrimitive", "c" ] )
		self.assertEqual( sorted([ str(x) for x in scene.readTags() ]), [ "ObjectType:MeshPrimitive", "c" ] )
		for tag in scene.readTags(IECore.SceneInterface.TagFilter.EveryTag) :
			self.assertTrue( scene.hasTag( tag, IECore.SceneInterface.TagFilter.EveryTag ) )
		self.assertFalse( scene.hasTag( "fakeTag", IECore.SceneInterface.TagFilter.EveryTag ) )
Esempio n. 4
0
    def testAnimatedMeshBound(self):

        # Currently fails, because I'm pulling on the boundingBox plugs at arbitrary
        # times, and that doesn't work, although it kind of should!

        maya.cmds.polyCube(name="pCube2")

        # create a skin cluster to animate vertex 0:
        maya.cmds.select(cl=True)
        maya.cmds.select("pCube2.vtx[0]", r=True)
        cluster = maya.mel.eval('newCluster "-envelope 1"')[1]

        maya.cmds.setKeyframe(cluster, attribute="tx", t="0sec")
        maya.cmds.setKeyframe(cluster, attribute="tx", t="1sec", v=-1)

        scene = IECoreMaya.MayaScene()
        transformChild = scene.child("pCube2")

        maya.cmds.currentTime("0.0sec")
        self.assertEqual(
            transformChild.readBound(0.0),
            IECore.Box3d(IECore.V3d(-0.5, -0.5, -0.5),
                         IECore.V3d(0.5, 0.5, 0.5)))
        maya.cmds.currentTime("0.5sec")
        self.assertEqual(
            transformChild.readBound(0.5),
            IECore.Box3d(IECore.V3d(-1.0, -0.5, -0.5),
                         IECore.V3d(0.5, 0.5, 0.5)))
        maya.cmds.currentTime("1.0sec")
        self.assertEqual(
            transformChild.readBound(1.0),
            IECore.Box3d(IECore.V3d(-1.5, -0.5, -0.5),
                         IECore.V3d(0.5, 0.5, 0.5)))
Esempio n. 5
0
    def testAnimatedBound(self):

        # Currently fails, because I'm pulling on the boundingBox plugs at arbitrary
        # times, and that doesn't work, although it kind of should!

        maya.cmds.polyCube(name="pCube1")
        maya.cmds.createNode("transform", name="pCube1Parent")

        maya.cmds.parent("pCube1", "pCube1Parent")

        maya.cmds.setKeyframe("pCube1", attribute="tx", t="0sec", v=0)
        maya.cmds.setKeyframe("pCube1", attribute="tx", t="1sec", v=-1)

        scene = IECoreMaya.MayaScene()
        transformChild = scene.child("pCube1Parent")

        maya.cmds.currentTime("0.0sec")
        self.assertEqual(
            transformChild.readBound(0.0),
            IECore.Box3d(IECore.V3d(-0.5, -0.5, -0.5),
                         IECore.V3d(0.5, 0.5, 0.5)))
        maya.cmds.currentTime("0.5sec")
        self.assertEqual(
            transformChild.readBound(0.5),
            IECore.Box3d(IECore.V3d(-1.0, -0.5, -0.5),
                         IECore.V3d(0.0, 0.5, 0.5)))
        maya.cmds.currentTime("1.0sec")
        self.assertEqual(
            transformChild.readBound(1.0),
            IECore.Box3d(IECore.V3d(-1.5, -0.5, -0.5),
                         IECore.V3d(-0.5, 0.5, 0.5)))
Esempio n. 6
0
    def testTimeException(self):

        sphere = maya.cmds.polySphere(name="pSphere1")

        maya.cmds.setKeyframe("pSphere1", attribute="tx", t="0sec", v=1)
        maya.cmds.setKeyframe("pSphere1", attribute="ty", t="0sec", v=2)
        maya.cmds.setKeyframe("pSphere1", attribute="tz", t="0sec", v=3)

        maya.cmds.setKeyframe("pSphere1", attribute="tx", t="1sec", v=4)
        maya.cmds.setKeyframe("pSphere1", attribute="ty", t="1sec", v=5)
        maya.cmds.setKeyframe("pSphere1", attribute="tz", t="1sec", v=6)

        scene = IECoreMaya.MayaScene()
        transformChild = scene.child("pSphere1")

        # move to frame -1:
        maya.cmds.currentTime(-1)

        # test it returns the correct transform in local space
        self.assertRaises(RuntimeError,
                          IECore.curry(transformChild.readTransform, 0.0))
        self.assertRaises(RuntimeError,
                          IECore.curry(transformChild.readTransform, 0.5))
        self.assertRaises(RuntimeError,
                          IECore.curry(transformChild.readTransform, 1.0))
Esempio n. 7
0
	def testAnimatedMesh( self ) :
		
		cube = maya.cmds.polyCube( name = "pCube1" )
		
		# create a skin cluster to animate vertex 0:
		maya.cmds.select( cl=True )
		maya.cmds.select( "pCube1.vtx[0]", r=True )
		cluster = maya.mel.eval( 'newCluster "-envelope 1"' )[1]
		
		maya.cmds.setKeyframe( cluster, attribute="tx", t="0sec" )
		maya.cmds.setKeyframe( cluster, attribute="tx", t="1sec", v=-1 )
		
		scene = IECoreMaya.MayaScene()
		cube = scene.child( "pCube1" )
		
		# read mesh at different times:
		maya.cmds.currentTime( "0.0sec" )
		mesh0   = cube.readObject( 0 )
		maya.cmds.currentTime( "0.5sec" )
		mesh0_5 = cube.readObject( 0.5 )
		maya.cmds.currentTime( "1.0sec" )
		mesh1   = cube.readObject( 1 )
		
		# have we moved vertex 0?
		self.assertEqual( mesh0["P"].data[0].x, -0.5 )
		self.assertEqual( mesh0_5["P"].data[0].x, -1 )
		self.assertEqual( mesh1["P"].data[0].x, -1.5 )
Esempio n. 8
0
    def testSceneMethod(self):

        sphere = maya.cmds.polySphere(name="pSphere1")

        sphere2 = maya.cmds.polySphere(name="pSphere2")
        sphere3 = maya.cmds.polySphere(name="pSphere3")

        maya.cmds.parent("pSphere2", "pSphere1")
        maya.cmds.parent("pSphere3", "pSphere1")

        scene = IECoreMaya.MayaScene()

        self.assertEqual(str(scene.scene(["pSphere1"]).name()), "pSphere1")

        # does it still return absolute paths if we've gone to another location?
        scene = scene.scene(["pSphere1"])
        self.assertEqual(str(scene.scene([]).name()), "/")
        self.assertEqual(str(scene.scene(["pSphere1", "pSphere2"]).name()),
                         "pSphere2")
        self.assertEqual(str(scene.scene(["pSphere1", "pSphere3"]).name()),
                         "pSphere3")

        self.assertEqual(
            scene.scene(["idontexist"],
                        IECore.SceneInterface.MissingBehaviour.NullIfMissing),
            None)
        self.assertRaises(RuntimeError,
                          IECore.curry(scene.scene, ["idontexist"]))
Esempio n. 9
0
    def testSceneShapeVisible(self):

        # make sure we are at time 0
        maya.cmds.currentTime("0sec")
        scene = IECoreMaya.MayaScene()

        envShape = str(
            IECoreMaya.FnSceneShape.create("ieScene1").fullPathName())
        envNode = 'ieScene1'

        envScene = scene.child(envNode)
        self.failUnless(
            IECore.InternedString("scene:visible") in
            envScene.attributeNames())

        maya.cmds.setAttr(envShape + '.file',
                          'test/IECore/data/sccFiles/animatedSpheres.scc',
                          type='string')
        self.failUnless(
            IECore.InternedString("scene:visible") in
            envScene.attributeNames())

        maya.cmds.setAttr("ieScene1.visibility", False)
        self.assertEqual(envScene.readAttribute("scene:visible", 0),
                         IECore.BoolData(False))

        maya.cmds.setAttr("ieScene1.visibility", True)
        self.assertEqual(envScene.readAttribute("scene:visible", 0),
                         IECore.BoolData(True))

        maya.cmds.setAttr(envShape + ".visibility", False)
        self.assertEqual(envScene.readAttribute("scene:visible", 0),
                         IECore.BoolData(False))
Esempio n. 10
0
	def testAnimatedTransform( self ) :
		
		sphere = maya.cmds.polySphere( name="pSphere1" )
		
		maya.cmds.setKeyframe( "pSphere1", attribute="tx", t="0sec", v=1 )
		maya.cmds.setKeyframe( "pSphere1", attribute="ty", t="0sec", v=2 )
		maya.cmds.setKeyframe( "pSphere1", attribute="tz", t="0sec", v=3 )
		
		maya.cmds.setKeyframe( "pSphere1", attribute="tx", t="1sec", v=4 )
		maya.cmds.setKeyframe( "pSphere1", attribute="ty", t="1sec", v=5 )
		maya.cmds.setKeyframe( "pSphere1", attribute="tz", t="1sec", v=6 )
		
		scene = IECoreMaya.MayaScene()
		transformChild = scene.child( "pSphere1" )
		
		# test it returns the correct transform in local space
		maya.cmds.currentTime( "0sec" )
		transform0 = transformChild.readTransform( 0 ).value
		maya.cmds.currentTime( "0.5sec" )
		transform0_5 = transformChild.readTransform( 0.5 ).value
		maya.cmds.currentTime( "1sec" )
		transform1 = transformChild.readTransform( 1 ).value
		
		self.assertEqual( transform0.translate, IECore.V3d( 1, 2, 3 ) )
		
		self.assertAlmostEqual( transform0_5.translate.x, 2.5, 5 )
		self.assertAlmostEqual( transform0_5.translate.y, 3.5, 5 )
		self.assertAlmostEqual( transform0_5.translate.z, 4.5, 5 )
		
		self.assertEqual( transform1.translate, IECore.V3d( 4, 5, 6 ) )
Esempio n. 11
0
	def testWriteExceptions( self ) :
		
		scene = IECoreMaya.MayaScene()
		
		self.assertRaises( RuntimeError, IECore.curry( scene.writeBound, IECore.Box3d(), 0.0 ) )
		self.assertRaises( RuntimeError, IECore.curry( scene.writeTransform, IECore.M44dData( IECore.M44d() ), 0.0 ) )
		self.assertRaises( RuntimeError, IECore.curry( scene.writeAttribute, "asdfs", IECore.BoolData( False ), 0.0 ) )
		self.assertRaises( RuntimeError, IECore.curry( scene.writeObject, IECore.SpherePrimitive(), 0.0 ) )
Esempio n. 12
0
	def testReadRootAttribute( self ):
		
		maya.cmds.file( new=True, f=True )
		# make sure we are at time 0
		maya.cmds.currentTime( "0sec" )
		scene = IECoreMaya.MayaScene()
		
		# tests a bug where calling attributeNames at the root raised an exception
		scene.attributeNames()
Esempio n. 13
0
	def testHasObject( self ) :
		
		sphere = maya.cmds.polySphere( name="pSphere1" )
		
		scene = IECoreMaya.MayaScene()
		child = scene.child( "pSphere1" )
		
		self.assertEqual( scene.hasObject(), False )
		self.assertEqual( child.hasObject(), True )
Esempio n. 14
0
	def testSceneShapeCustomReaders( self ):
		
		# make sure we are at time 0
		maya.cmds.currentTime( "0sec" )
		scene = IECoreMaya.MayaScene()

		envShape = str( IECoreMaya.FnSceneShape.create( "ieScene1" ).fullPathName() )
		envNode = 'ieScene1'

		envScene = scene.child( envNode )
		self.assertFalse( envScene.hasAttribute( IECore.LinkedScene.linkAttribute ) )

		maya.cmds.setAttr( envShape+'.file', 'test/IECore/data/sccFiles/environment.lscc',type='string' )

		self.assertTrue( envScene.hasAttribute( IECore.LinkedScene.linkAttribute ) )

		spheresShape = str( IECoreMaya.FnSceneShape.create( "ieScene2" ).fullPathName() )
		spheresNode = 'ieScene2'
		maya.cmds.setAttr( spheresShape+'.file', 'test/IECore/data/sccFiles/animatedSpheres.scc',type='string' )

		self.assertEqual( set( scene.childNames() ).intersection([ envNode, spheresNode ]) , set( [ envNode, spheresNode ] ) )
		self.assertTrue( IECore.LinkedScene.linkAttribute in envScene.attributeNames() )
		self.assertEqual( envScene.readAttribute( IECore.LinkedScene.linkAttribute, 0 ), IECore.CompoundData( { "fileName":IECore.StringData('test/IECore/data/sccFiles/environment.lscc'), "root":IECore.InternedStringVectorData() } ) )
		self.assertFalse( envScene.hasObject() )

		spheresScene = scene.child( spheresNode )
		self.assertTrue( spheresScene.hasAttribute( IECore.LinkedScene.linkAttribute ) )
		self.assertEqual( spheresScene.readAttribute( IECore.LinkedScene.linkAttribute, 0 ), IECore.CompoundData( { "fileName":IECore.StringData('test/IECore/data/sccFiles/animatedSpheres.scc'), "root":IECore.InternedStringVectorData() } ) )
		self.assertFalse( spheresScene.hasObject() )

		# expand the scene
		fnSpheres = IECoreMaya.FnSceneShape( spheresShape )
		fnSpheres.expandAll()

		self.assertFalse( spheresScene.hasAttribute( IECore.LinkedScene.linkAttribute ) )
		leafScene = spheresScene.child("A").child("a")
		self.assertTrue( leafScene.hasAttribute( IECore.LinkedScene.linkAttribute ) )
		# When expanding, we connect the child time attributes to their scene shape parent time attribute to propagate time remapping. When checking for time remapping, the scene shape
		# currently only checks the direct connection, so we have here time in the link attributes. Will have to look out for performance issues.
		self.assertEqual( leafScene.readAttribute( IECore.LinkedScene.linkAttribute, 0 ), IECore.CompoundData( { "fileName":IECore.StringData('test/IECore/data/sccFiles/animatedSpheres.scc'), "root":IECore.InternedStringVectorData([ 'A', 'a' ]), 'time':IECore.DoubleData( 0 ) } ) )
		self.assertFalse( leafScene.hasObject() )

		# expand scene to meshes
		fnSpheres.convertAllToGeometry()
		self.assertFalse( leafScene.hasAttribute( IECore.LinkedScene.linkAttribute ) )
		self.assertTrue( leafScene.hasObject() )
		self.assertTrue( isinstance( leafScene.readObject(0), IECore.MeshPrimitive) )

		# test time remapped scene readers...
		spheresShape = str( maya.cmds.createNode( 'ieSceneShape' ) )
		maya.cmds.setAttr( spheresShape+'.file', 'test/IECore/data/sccFiles/animatedSpheres.scc',type='string' )
		maya.cmds.setAttr( spheresShape+'.time', 24.0*10 )

		spheresScene = scene.child( 'ieScene3' )

		self.assertTrue( spheresScene.hasAttribute( IECore.LinkedScene.linkAttribute ) )
		self.assertEqual( spheresScene.readAttribute( IECore.LinkedScene.linkAttribute, 0 ), IECore.CompoundData( { "fileName":IECore.StringData('test/IECore/data/sccFiles/animatedSpheres.scc'), "root":IECore.InternedStringVectorData(), "time":IECore.DoubleData(10.0) } ) )		
Esempio n. 15
0
    def testSceneVisible(self):

        maya.cmds.createNode("transform", name="t1")
        maya.cmds.createNode("transform", name="t2")

        scene = IECoreMaya.MayaScene()
        t1 = scene.child("t1")
        t2 = scene.child("t2")

        self.assertEqual(t1.attributeNames(), ["scene:visible"])
        self.assertEqual(t2.attributeNames(), ["scene:visible"])

        self.assertEqual(t1.hasAttribute("scene:visible"), True)
        self.assertEqual(t2.hasAttribute("scene:visible"), True)

        self.assertEqual(t1.readAttribute("scene:visible", 0),
                         IECore.BoolData(True))
        self.assertEqual(t2.readAttribute("scene:visible", 0),
                         IECore.BoolData(True))

        # test visibility on transform:
        maya.cmds.setAttr("t1.visibility", False)

        self.assertEqual(t1.readAttribute("scene:visible", 0),
                         IECore.BoolData(False))
        self.assertEqual(t2.readAttribute("scene:visible", 0),
                         IECore.BoolData(True))

        maya.cmds.setAttr("t1.visibility", True)

        # test visibility on shape. Add a mesh to the two transforms, along with an image plane to confuse it:
        maya.cmds.createNode("mesh", name="m1", parent="t1")
        maya.cmds.createNode("imagePlane", name="i1", parent="t1")

        maya.cmds.createNode("imagePlane", name="i2", parent="t2")
        maya.cmds.createNode("mesh", name="m2", parent="t2")

        maya.cmds.setAttr("i1.visibility", False)
        maya.cmds.setAttr("i2.visibility", False)

        # these should both be visible, as cortex ignores image planes and the meshes are visible:
        self.assertEqual(t1.readAttribute("scene:visible", 0),
                         IECore.BoolData(True))
        self.assertEqual(t2.readAttribute("scene:visible", 0),
                         IECore.BoolData(True))

        maya.cmds.setAttr("m1.visibility", False)
        maya.cmds.setAttr("m2.visibility", False)

        # should both be invisible now, as we've hidden the meshes:
        self.assertEqual(t1.readAttribute("scene:visible", 0),
                         IECore.BoolData(False))
        self.assertEqual(t2.readAttribute("scene:visible", 0),
                         IECore.BoolData(False))
Esempio n. 16
0
    def testReadTransformMethods(self):

        # create a little hierarchy
        transfromythingy = maya.cmds.createNode("transform", name="transform1")
        maya.cmds.setAttr("transform1.tx", 0.1)
        maya.cmds.setAttr("transform1.ty", 0.2)
        maya.cmds.setAttr("transform1.tz", 0.3)

        maya.cmds.setAttr("transform1.rx", 0.1)
        maya.cmds.setAttr("transform1.ry", 0.2)
        maya.cmds.setAttr("transform1.rz", 0.3)

        maya.cmds.setAttr("transform1.sx", 0.1)
        maya.cmds.setAttr("transform1.sy", 0.2)
        maya.cmds.setAttr("transform1.sz", 0.3)

        sphere = maya.cmds.polySphere(name="pSphere1")
        maya.cmds.parent("pSphere1", "transform1")

        maya.cmds.setAttr("pSphere1.tx", 1)
        maya.cmds.setAttr("pSphere1.ty", 2)
        maya.cmds.setAttr("pSphere1.tz", 3)

        maya.cmds.setAttr("pSphere1.rx", 10)
        maya.cmds.setAttr("pSphere1.ry", 20)
        maya.cmds.setAttr("pSphere1.rz", 30)

        maya.cmds.setAttr("pSphere1.sx", 4)
        maya.cmds.setAttr("pSphere1.sy", 5)
        maya.cmds.setAttr("pSphere1.sz", 6)

        scene = IECoreMaya.MayaScene()
        transformChild = scene.child("transform1").child("pSphere1")

        # test it returns the correct transform in local space
        maya.cmds.currentTime("0.0sec")
        transform = transformChild.readTransform(0).value

        import math

        self.assertAlmostEqual(transform.translate.x, 1, 5)
        self.assertAlmostEqual(transform.translate.y, 2, 5)
        self.assertAlmostEqual(transform.translate.z, 3, 5)

        self.assertAlmostEqual(transform.rotate.x * 180.0 / math.pi, 10.0, 5)
        self.assertAlmostEqual(transform.rotate.y * 180.0 / math.pi, 20.0, 5)
        self.assertAlmostEqual(transform.rotate.z * 180.0 / math.pi, 30.0, 5)

        self.assertAlmostEqual(transform.scale.x, 4, 5)
        self.assertAlmostEqual(transform.scale.y, 5, 5)
        self.assertAlmostEqual(transform.scale.z, 6, 5)

        self.assertEqual(transform.transform,
                         transformChild.readTransformAsMatrix(0))
Esempio n. 17
0
	def testCustomTags( self ) :

		t = maya.cmds.createNode( "transform" )
		maya.cmds.select( clear = True )
		sphere = maya.cmds.polySphere( name="pSphere" )

		def hasMyTags( node, tag ) :
			
			if tag not in ( "renderable", "archivable" ) :
				return False
			
			dagPath = IECoreMaya.StringUtil.dagPathFromString(node)
			try:
				dagPath.extendToShapeDirectlyBelow(0)
			except:
				return False
			
			if dagPath.apiType() != maya.OpenMaya.MFn.kMesh :
				return False
			
			return dagPath.fullPathName().endswith("Shape")

		def readMyTags( node, includeChildren ) :
			
			dagPath = IECoreMaya.StringUtil.dagPathFromString(node)
			try:
				dagPath.extendToShapeDirectlyBelow(0)
			except:
				return []
			
			if dagPath.apiType() != maya.OpenMaya.MFn.kMesh :
				return []
			
			if includeChildren :
				return [ "renderable", "archivable" ]
			
			return [ "renderable" ]
		
		IECoreMaya.MayaScene.registerCustomTags( hasMyTags, readMyTags )

		scene = IECoreMaya.MayaScene()
		transformScene = scene.child(str(t))
		sphereScene = scene.child('pSphere')
		self.assertFalse( scene.hasTag( 'renderable' ) )
		self.assertFalse( scene.hasTag( 'archivable' ) )
		self.assertEqual( scene.readTags(), [] )
		self.assertFalse( transformScene.hasTag( 'renderable' ) )
		self.assertFalse( transformScene.hasTag( 'archivable' ) )
		self.assertEqual( transformScene.readTags(), [] )
		self.assertEqual( sphereScene.readTags(), [ IECore.InternedString('renderable'), IECore.InternedString('archivable') ] )
		self.assertEqual( sphereScene.readTags( False ), [ IECore.InternedString('renderable') ] )
		self.assertTrue( sphereScene.hasTag( 'renderable' ) )
		self.assertTrue( sphereScene.hasTag( 'archivable' ) )
Esempio n. 18
0
	def testCameraTransform( self ) :
		
		# camera must be output with an identity transform, because of the hierarchical
		# nature of this class...
		
		scene = IECoreMaya.MayaScene()
		cameraTransform = scene.child( "persp" )
		maya.cmds.currentTime( "0.0sec" )
		camera = cameraTransform.readObject( 0 )
		
		# sanity check: camera transform is not identity?
		self.assertNotEqual( cameraTransform.readTransformAsMatrix( 0 ), IECore.M44f() )
		
		# this transform must be identity...
		self.assertEqual( camera.getTransform().transform(), IECore.M44f() )
Esempio n. 19
0
	def testChildNames( self ) :
		
		sphere = maya.cmds.polySphere( name="pSphere1" )
		
		sphere2 = maya.cmds.polySphere( name="pSphere2" )
		sphere3 = maya.cmds.polySphere( name="pSphere3" )
		
		maya.cmds.parent( "pSphere2", "pSphere1" )
		maya.cmds.parent( "pSphere3", "pSphere1" )
		
		scene = IECoreMaya.MayaScene()
		child = scene.child( "pSphere1" )
		
		self.assertEqual( set( child.childNames() ), set( [ "pSphere2", "pSphere3" ] ) )
		
		self.assertEqual( scene.child( "pSphere1" ).child( "pSphere2" ).childNames(), [] )
Esempio n. 20
0
	def testReadBound( self ) :
		
		# create some cubes:
		maya.cmds.polyCube( name = "pCube1" )
		maya.cmds.polyCube( name = "pCube2" )
		maya.cmds.polyCube( name = "pCube3" )
		maya.cmds.polyCube( name = "pCube4" )
		
		maya.cmds.parent( "pCube2", "pCube1" )
		maya.cmds.parent( "pCube3", "pCube1" )
		
		maya.cmds.setAttr( "pCube4.tx", 3 )
		maya.cmds.setAttr( "pCube4.ty", 3 )
		maya.cmds.setAttr( "pCube4.tz", 3 )
		
		maya.cmds.setAttr( "pCube2.tx", 1 )
		maya.cmds.setAttr( "pCube2.ty", 1 )
		maya.cmds.setAttr( "pCube2.tz", 1 )
		
		maya.cmds.setAttr( "pCube3.tx", -1 )
		maya.cmds.setAttr( "pCube3.ty", -1 )
		maya.cmds.setAttr( "pCube3.tz", -1 )
		
		scene = IECoreMaya.MayaScene()
		cube4Transform = scene.child( "pCube4" )
		cube1Transform = scene.child( "pCube1" )

		maya.cmds.currentTime( "0.0sec" )		
		self.assertEqual( scene.readBound( 0.0 ), IECore.Box3d( IECore.V3d( -1.5, -1.5, -1.5 ), IECore.V3d( 3.5, 3.5, 3.5 ) ) )
		
		self.assertEqual( cube4Transform.readBound( 0.0 ), IECore.Box3d( IECore.V3d( -0.5, -0.5, -0.5 ), IECore.V3d( 0.5, 0.5, 0.5 ) ) )
		
		# check it's including its children:
		self.assertEqual( cube1Transform.readBound( 0.0 ), IECore.Box3d( IECore.V3d( -1.5, -1.5, -1.5 ), IECore.V3d( 1.5, 1.5, 1.5 ) ) )
		
		maya.cmds.setAttr( "pCube1.tx", 1 )
		maya.cmds.setAttr( "pCube1.ty", 1 )
		maya.cmds.setAttr( "pCube1.tz", 1 )
		
		# should be in object space!!!
		self.assertEqual( cube1Transform.readBound( 0.0 ), IECore.Box3d( IECore.V3d( -1.5, -1.5, -1.5 ), IECore.V3d( 1.5, 1.5, 1.5 ) ) )
		
		cube2Transform = cube1Transform.child( "pCube2" )
		self.assertEqual( cube2Transform.readBound( 0.0 ), IECore.Box3d( IECore.V3d( -0.5, -0.5, -0.5 ), IECore.V3d( 0.5, 0.5, 0.5 ) ) )
		
		cube3Transform = cube1Transform.child( "pCube3" )
		self.assertEqual( cube3Transform.readBound( 0.0 ), IECore.Box3d( IECore.V3d( -0.5, -0.5, -0.5 ), IECore.V3d( 0.5, 0.5, 0.5 ) ) )
Esempio n. 21
0
	def testMeshChange( self ) :
		
		sphere = maya.cmds.polySphere( name="pSphere1" )
		
		scene = IECoreMaya.MayaScene()
		sphere = scene.child( "pSphere1" )
		
		maya.cmds.currentTime( "0.0sec" )
		mesh = sphere.readObject( 0 )
		
		# should default to 382 verts:
		self.assertEqual( len( mesh["P"].data ), 382 )
		
		maya.cmds.setAttr( "polySphere1.subdivisionsAxis", 3 )
		maya.cmds.setAttr( "polySphere1.subdivisionsHeight", 3 )
		
		mesh = sphere.readObject( 0 )
		
		# should be 8 verts now:
		self.assertEqual( len( mesh["P"].data ), 8 )
Esempio n. 22
0
    def testReadMesh(self):

        # create a cube:
        maya.cmds.polyCube(name="pCube1")

        # transform a bit, so we can check it's returning the mesh in world space:
        maya.cmds.setAttr("pCube1.tx", 0.1)
        maya.cmds.setAttr("pCube1.ty", 0.2)
        maya.cmds.setAttr("pCube1.tz", 0.3)

        maya.cmds.setAttr("pCube1.rx", 10)
        maya.cmds.setAttr("pCube1.ry", 20)
        maya.cmds.setAttr("pCube1.rz", 30)

        scene = IECoreMaya.MayaScene()
        cube = scene.child("pCube1")

        # read mesh at time 0:
        maya.cmds.currentTime("0.0sec")
        mesh = cube.readObject(0)

        vertList = list(mesh["P"].data)

        # check it's got the right length:
        self.assertEqual(len(vertList), 8)

        # check it's got the right verts:
        self.assertEqual(vertList.count(IECore.V3f(-0.5, -0.5, 0.5)), 1)
        self.assertEqual(vertList.count(IECore.V3f(0.5, -0.5, 0.5)), 1)
        self.assertEqual(vertList.count(IECore.V3f(-0.5, 0.5, 0.5)), 1)
        self.assertEqual(vertList.count(IECore.V3f(0.5, 0.5, 0.5)), 1)
        self.assertEqual(vertList.count(IECore.V3f(-0.5, 0.5, -0.5)), 1)
        self.assertEqual(vertList.count(IECore.V3f(0.5, 0.5, -0.5)), 1)
        self.assertEqual(vertList.count(IECore.V3f(-0.5, -0.5, -0.5)), 1)
        self.assertEqual(vertList.count(IECore.V3f(0.5, -0.5, -0.5)), 1)

        # check read primvars
        self.assertEqual(mesh["P"],
                         cube.readObjectPrimitiveVariables(["P"], 0)["P"])
Esempio n. 23
0
	def testHasChild( self ) :
		
		sphere = maya.cmds.polySphere( name="pSphere1" )
		
		sphere2 = maya.cmds.polySphere( name="pSphere2" )
		sphere3 = maya.cmds.polySphere( name="pSphere3" )
		
		maya.cmds.parent( "pSphere2", "pSphere1" )
		maya.cmds.parent( "pSphere3", "pSphere1" )
		
		scene = IECoreMaya.MayaScene()
		child = scene.child( "pSphere1" )
		
		self.assertEqual( scene.hasChild("pSphere1"), True )
		
		self.assertEqual( child.hasChild("pSphere1Shape"), False )
		self.assertEqual( child.hasChild("pSphere2"), True )
		self.assertEqual( child.hasChild("pSphere3"), True )
		self.assertEqual( child.hasChild("pSphere3Shape"), False )
		self.assertEqual( child.hasChild("pSphere2Shape"), False )
		
		self.assertEqual( child.hasChild("asdfasdf"), False )
Esempio n. 24
0
	def testPaths( self ) :
		
		sphere = maya.cmds.polySphere( name="pSphere1" )
		
		sphere2 = maya.cmds.polySphere( name="pSphere2" )
		sphere3 = maya.cmds.polySphere( name="pSphere3" )
		
		maya.cmds.parent( "pSphere2", "pSphere1" )
		maya.cmds.parent( "pSphere3", "pSphere1" )
		
		scene = IECoreMaya.MayaScene()
		
		sphere1 = scene.child( "pSphere1" )
		
		sphere2 = sphere1.child( "pSphere2" )
		
		sphere3 = sphere1.child( "pSphere3" )
	
		self.assertEqual( scene.path(), [] )
		self.assertEqual( sphere1.path(), [ "pSphere1" ] )
		
		self.assertEqual( sphere2.path(), [ "pSphere1", "pSphere2" ] )
		
		self.assertEqual( sphere3.path(), [ "pSphere1", "pSphere3" ] )
Esempio n. 25
0
	def testNames( self ) :
	
		sphere = maya.cmds.polySphere( name="pSphere1" )
		
		sphere2 = maya.cmds.polySphere( name="pSphere2" )
		sphere3 = maya.cmds.polySphere( name="pSphere3" )
		
		maya.cmds.parent( "pSphere2", "pSphere1" )
		maya.cmds.parent( "pSphere3", "pSphere1" )
		
		scene = IECoreMaya.MayaScene()
		
		sphere1 = scene.child( "pSphere1" )
		
		sphere2 = sphere1.child( "pSphere2" )
		
		sphere3 = sphere1.child( "pSphere3" )
		
		self.assertEqual( str( scene.name() ), "/" )
		self.assertEqual( str( sphere1.name() ), "pSphere1" )
		
		self.assertEqual( str( sphere2.name() ), "pSphere2" )
		
		self.assertEqual( str( sphere3.name() ), "pSphere3" )
Esempio n. 26
0
	def testCustomAttributes( self ) :
	
		t = maya.cmds.createNode( "transform" )
		maya.cmds.select( clear = True )
		sphere = maya.cmds.polySphere( name="pSphere" )
		maya.cmds.currentTime( "0sec" )
		
		doTest = True
	
		def myAttributeNames( node ) :

			if not doTest:
				return []
			
			dagPath = IECoreMaya.StringUtil.dagPathFromString(node)
			try:
				dagPath.extendToShapeDirectlyBelow(0)
			except:
				return ["transformAttribute"]
			
			if dagPath.apiType() != maya.OpenMaya.MFn.kMesh :
				return []
	
			return ["shapeAttribute"]
	
		def readMyAttribute( node, attr ) :
			
			if not doTest:
				return None
			
			dagPath = IECoreMaya.StringUtil.dagPathFromString(node)
			try:
				dagPath.extendToShapeDirectlyBelow(0)
			except:
				if attr == "shapeAttribute":
					return None
				return IECore.FloatData( 5 )
			
			if attr == "transformAttribute":
				return None
			
			if dagPath.apiType() != maya.OpenMaya.MFn.kMesh :
				return None
	
			return IECore.StringData("mesh")
		
		IECoreMaya.MayaScene.registerCustomAttributes( myAttributeNames, readMyAttribute )
	
		scene = IECoreMaya.MayaScene()
		transformScene = scene.child(str(t))
		sphereScene = scene.child('pSphere')
		self.assertEqual( scene.attributeNames(), [] )
		self.assertEqual( scene.readAttribute("anyAttr", 0.0), None )
		self.assertEqual( transformScene.attributeNames(), [ IECore.InternedString("transformAttribute") ] )
		self.assertEqual( transformScene.hasAttribute("shapeAttribute"), False )
		self.assertEqual( transformScene.readAttribute("shapeAttribute", 0.0), None )
		self.assertEqual( transformScene.readAttribute( "transformAttribute", 0.0), IECore.FloatData(5) )
		self.assertEqual( sphereScene.attributeNames(), [ IECore.InternedString('shapeAttribute') ] )
		self.assertEqual( sphereScene.readAttribute( "shapeAttribute", 0.0), IECore.StringData("mesh") )
		
		# Disable custom attribute functions so they don't mess with other tests
		doTest = False
Esempio n. 27
0
    def testCustomTags(self):

        t = maya.cmds.createNode("transform")
        maya.cmds.select(clear=True)
        sphere = maya.cmds.polySphere(name="pSphere")

        doTest = True

        def hasMyTags(node, tag, tagFilter):
            #'archivable' should be on all transforms and 'renderable' only at shape transforms.

            if not doTest:
                return False

            if tag not in ("renderable", "archivable"):
                return False

            if tag == "archivable":
                return True

            dagPath = IECoreMaya.StringUtil.dagPathFromString(node)
            try:
                dagPath.extendToShapeDirectlyBelow(0)
            except:
                return False

            if not (tagFilter & IECore.SceneInterface.TagFilter.LocalTag):
                return False

            if dagPath.apiType() != maya.OpenMaya.MFn.kMesh:
                return False

            return dagPath.fullPathName().endswith("Shape")

        def readMyTags(node, tagFilter):
            #'archivable' should be on all transforms and 'renderable' only at shape transforms.

            if not doTest:
                return []

            result = ["archivable"]

            dagPath = IECoreMaya.StringUtil.dagPathFromString(node)
            try:
                dagPath.extendToShapeDirectlyBelow(0)
            except:
                return result

            if tagFilter & IECore.SceneInterface.TagFilter.LocalTag and dagPath.apiType(
            ) == maya.OpenMaya.MFn.kMesh:
                result.append("renderable")

            return result

        IECoreMaya.MayaScene.registerCustomTags(hasMyTags, readMyTags)

        scene = IECoreMaya.MayaScene()
        transformScene = scene.child(str(t))
        sphereScene = scene.child('pSphere')
        self.assertFalse(scene.hasTag('renderable'))
        self.assertFalse(scene.hasTag('archivable'))
        self.assertEqual(scene.readTags(), [])
        self.assertFalse(transformScene.hasTag('renderable'))
        self.assertTrue(transformScene.hasTag('archivable'))
        self.assertEqual(transformScene.readTags(),
                         [IECore.InternedString('archivable')])
        self.assertEqual(
            set(sphereScene.readTags()),
            set([
                IECore.InternedString('renderable'),
                IECore.InternedString('archivable')
            ]))
        self.assertEqual(
            set(sphereScene.readTags(
                IECore.SceneInterface.TagFilter.EveryTag)),
            set([
                IECore.InternedString('renderable'),
                IECore.InternedString('archivable')
            ]))
        self.assertEqual(
            sphereScene.readTags(IECore.SceneInterface.TagFilter.AncestorTag),
            [IECore.InternedString('archivable')])
        self.assertTrue(sphereScene.hasTag('renderable'))
        self.assertTrue(sphereScene.hasTag('archivable'))

        # Disable custom tag functions so they don't mess with other tests
        doTest = False
Esempio n. 28
0
	def testFileName( self ) :

		scene = IECoreMaya.MayaScene()
		self.assertRaises( RuntimeError, scene.fileName )