Exemple #1
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.LiveScene()
		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 ) )
Exemple #2
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.LiveScene()
		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 ) ) )
Exemple #3
0
    def testNoDuplicateAttributeNames(self):

        t = maya.cmds.createNode("transform")
        maya.cmds.currentTime("0sec")

        maya.cmds.addAttr(t, ln="ieAttr_test", at="bool")

        doDuplicateNameTest = True

        def myAttributeNames(node):
            if not doDuplicateNameTest:
                return []
            return ["user:test"]

        def readMyAttribute(node, attr):
            if not doDuplicateNameTest:
                return None
            if attr == "user:test":
                return IECore.IntData(1)

        IECoreMaya.LiveScene.registerCustomAttributes(myAttributeNames,
                                                      readMyAttribute)

        try:
            scene = IECoreMaya.LiveScene()
            transformScene = scene.child(str(t))

            # we've specified an attribute called "user:test" in two ways - once through an ieAttr_,
            # once through a custom reader. The name "user:test" should only appear once:
            self.assertEqual(len(transformScene.attributeNames()), 2)
            self.assertEqual(set(transformScene.attributeNames()),
                             set(["scene:visible", "user:test"]))

            # The custom reader should override the ieAttr_
            self.failUnless(
                isinstance(transformScene.readAttribute("user:test", 0),
                           IECore.IntData))
        finally:
            doDuplicateNameTest = False
Exemple #4
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.LiveScene()
        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"])
Exemple #5
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.LiveScene()
		
		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"] ) )
Exemple #6
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.LiveScene()
		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 )
Exemple #7
0
	def testSceneShapeVisible( self ) :

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

		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 ) )
Exemple #8
0
	def testConvertsMayaSetsOfSetsToTags( self ) :

		maya.cmds.createNode( "transform", name="sharedParent" )

		sphere = maya.cmds.polySphere( name="pSphere" )[0]

		maya.cmds.select( sphere )
		maya.cmds.sets(name="mySet")

		maya.cmds.addAttr("mySet", longName="ieExport", at="bool")
		maya.cmds.setAttr("mySet.ieExport", True)

		maya.cmds.select( "mySet" )
		maya.cmds.sets(name="mySet2")

		maya.cmds.addAttr("mySet2", longName="ieExport", at="bool")
		maya.cmds.setAttr("mySet2.ieExport", True)

		root = IECoreMaya.LiveScene()
		tags = root.child('pSphere').readTags()

		self.assertEqual( len(tags), 2)
		self.assertEqual( set(tags), set([IECore.InternedString("mySet"), IECore.InternedString("mySet2")]))
Exemple #9
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.LiveScene()

		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" )
Exemple #10
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.LiveScene()
		transformChild = scene.child( "pCube2" )

		maya.cmds.currentTime( "0.0sec" )
		self.assertEqual( transformChild.readBound( 0.0 ), imath.Box3d( imath.V3d( -0.5, -0.5, -0.5 ), imath.V3d( 0.5, 0.5, 0.5 ) ) )
		maya.cmds.currentTime( "0.5sec" )
		self.assertEqual( transformChild.readBound( 0.5 ), imath.Box3d( imath.V3d( -1.0, -0.5, -0.5 ), imath.V3d( 0.5, 0.5, 0.5 ) ) )
		maya.cmds.currentTime( "1.0sec" )
		self.assertEqual( transformChild.readBound( 1.0 ), imath.Box3d( imath.V3d( -1.5, -0.5, -0.5 ), imath.V3d( 0.5, 0.5, 0.5 ) ) )
Exemple #11
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.LiveScene()

		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" ] )
    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.LiveScene().child(transform)
        self.assertEqual(
            sorted([
                str(x) for x in scene.readTags(
                    IECoreScene.SceneInterface.TagFilter.EveryTag)
            ]), ["ObjectType:MeshPrimitive", "a", "b", "c", "top"])
        self.assertEqual(sorted([str(x) for x in scene.readTags()]), ["top"])
        for tag in scene.readTags(
                IECoreScene.SceneInterface.TagFilter.EveryTag):
            self.assertTrue(
                scene.hasTag(tag,
                             IECoreScene.SceneInterface.TagFilter.EveryTag))
        self.assertFalse(
            scene.hasTag("fakeTag",
                         IECoreScene.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(
                    IECoreScene.SceneInterface.TagFilter.DescendantTag
                    | IECoreScene.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(
                IECoreScene.SceneInterface.TagFilter.EveryTag):
            self.assertTrue(
                scene.hasTag(tag,
                             IECoreScene.SceneInterface.TagFilter.EveryTag))
        self.assertFalse(
            scene.hasTag("fakeTag",
                         IECoreScene.SceneInterface.TagFilter.EveryTag))

        childFn = childFn.expandOnce()[0]
        scene = childFn.sceneInterface()
        self.assertEqual(
            sorted([
                str(x) for x in scene.readTags(
                    IECoreScene.SceneInterface.TagFilter.DescendantTag
                    | IECoreScene.SceneInterface.TagFilter.LocalTag)
            ]), ["ObjectType:MeshPrimitive", "c"])
        self.assertEqual(sorted([str(x) for x in scene.readTags()]),
                         ["ObjectType:MeshPrimitive", "c"])
        for tag in scene.readTags(
                IECoreScene.SceneInterface.TagFilter.EveryTag):
            self.assertTrue(
                scene.hasTag(tag,
                             IECoreScene.SceneInterface.TagFilter.EveryTag))
        self.assertFalse(
            scene.hasTag("fakeTag",
                         IECoreScene.SceneInterface.TagFilter.EveryTag))
Exemple #13
0
	def testSceneVisible( self ) :

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

		scene = IECoreMaya.LiveScene()
		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 ) )

		# test override of maya visibility with ieVisibility attribute
		maya.cmds.addAttr( "t1", ln="ieVisibility", at="bool" )
		maya.cmds.setAttr( "t1.visibility", False )
		maya.cmds.setAttr( "m1.visibility", False )
		maya.cmds.setAttr( "t1.ieVisibility", True )
		self.assertEqual( t1.readAttribute( "scene:visible", 0 ), IECore.BoolData( True ) )

		# shape ieVisibility should be ignored since we set the transform level to invisible
		maya.cmds.addAttr( "m1", ln="ieVisibility", at="bool" )
		maya.cmds.setAttr( "t1.visibility", False )
		maya.cmds.setAttr( "t1.ieVisibility", False )
		maya.cmds.setAttr( "m1.ieVisibility", True )
		self.assertEqual( t1.readAttribute( "scene:visible", 0 ), IECore.BoolData( False ) )

		# shape ieVisibility should override the transform ieVisibility
		maya.cmds.setAttr( "t1.visibility", False )
		maya.cmds.setAttr( "t1.ieVisibility", True )
		maya.cmds.setAttr( "m1.ieVisibility", False )
		self.assertEqual( t1.readAttribute( "scene:visible", 0 ), IECore.BoolData( False ) )
Exemple #14
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 []
			if not node:
				return ["root"]

			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

			if not node :
				if attr == "root":
					return IECore.BoolData( True )
				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")

		try:
			IECoreMaya.LiveScene.registerCustomAttributes( myAttributeNames, readMyAttribute )

			scene = IECoreMaya.LiveScene()
			transformScene = scene.child(str(t))
			sphereScene = scene.child('pSphere')
			self.assertEqual( set( scene.attributeNames() ), set( [ "scene:visible", "root" ] ) )
			self.assertEqual( scene.readAttribute("anyAttr", 0.0), IECore.NullObject.defaultNullObject() )
			self.assertEqual( scene.readAttribute("scene:visible", 0.0), IECore.BoolData(True) )
			self.assertEqual( scene.readAttribute("root", 0.0), IECore.BoolData(True) )

			self.assertEqual( transformScene.attributeNames(), [ IECore.InternedString("scene:visible"), IECore.InternedString("transformAttribute") ] )
			self.assertEqual( transformScene.hasAttribute("shapeAttribute"), False )
			self.assertEqual( transformScene.readAttribute("shapeAttribute", 0.0), IECore.NullObject.defaultNullObject() )
			self.assertEqual( transformScene.readAttribute( "transformAttribute", 0.0), IECore.FloatData(5) )
			self.assertEqual( sphereScene.attributeNames(), [ IECore.InternedString("scene:visible"), IECore.InternedString('shapeAttribute') ] )
			self.assertEqual( sphereScene.readAttribute( "shapeAttribute", 0.0), IECore.StringData("mesh") )

		finally:
			# Disable custom attribute functions so they don't mess with other tests
			doTest = False
Exemple #15
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 & IECoreScene.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 & IECoreScene.SceneInterface.TagFilter.LocalTag and dagPath.apiType() == maya.OpenMaya.MFn.kMesh :
				result.append( "renderable" )

			return result

		IECoreMaya.LiveScene.registerCustomTags( hasMyTags, readMyTags )

		scene = IECoreMaya.LiveScene()
		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( IECoreScene.SceneInterface.TagFilter.EveryTag )), set([ IECore.InternedString('renderable'), IECore.InternedString('archivable') ]) )
		self.assertEqual( sphereScene.readTags( IECoreScene.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
Exemple #16
0
	def testFileName( self ) :

		scene = IECoreMaya.LiveScene()
		self.assertRaises( RuntimeError, scene.fileName )
Exemple #17
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.LiveScene()
        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)))
Exemple #18
0
    def testSceneShapeCustomReaders(self):

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

        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)
            }))
Exemple #19
0
    def testCustomAttributes(self):

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

        attrFnResult = []
        mightHaveFnResult = []

        doTest = True

        def readMyAttribute(node, attr):
            return None

        def myAttributeNames(node):
            if not doTest:
                return []

            attrFnResult.append(node)

            return ["mightHaveAttribute2"]

        def myAttributeMightHave(node, attr):
            if not doTest:
                return False

            mightHaveFnResult.append((node, attr))

            return attr in ["mightHaveAttribute1", "mightHaveAttribute2"]

        try:
            IECoreMaya.LiveScene.registerCustomAttributes(
                myAttributeNames, readMyAttribute, myAttributeMightHave)

            scene = IECoreMaya.LiveScene()
            transformScene = scene.child(str(t))

            self.assertEqual(
                transformScene.hasAttribute("nonExistentCustomAttribute"),
                False)
            self.assertEqual(
                mightHaveFnResult[0][1], "nonExistentCustomAttribute"
            )  # myAttributeMightHave() should always be called when specified.
            self.assertEqual(
                len(attrFnResult), 0
            )  # myAttributeNames() should not have been called because myAttributeMightHave had returned False.

            self.assertEqual(
                transformScene.hasAttribute("mightHaveAttribute1"), False)
            self.assertEqual(mightHaveFnResult[1][1], "mightHaveAttribute1")
            self.assertEqual(
                len(attrFnResult), 1
            )  # myAttributeNames() should have been called because myAttributeMightHave had returned True.

            self.assertEqual(
                transformScene.hasAttribute("mightHaveAttribute2"), True)
            self.assertEqual(mightHaveFnResult[2][1], "mightHaveAttribute2")
            self.assertEqual(len(attrFnResult), 2)

        finally:
            # Disable custom attribute functions so they don't mess with other tests
            doTest = False