Esempio n. 1
0
	def testAddFloatSplineToReferencedNode( self ) :

		# make a scene with an empty op holder
		######################################

		maya.cmds.createNode( "ieOpHolderNode" )

		maya.cmds.file( rename = os.path.join( os.getcwd(), "test", "IECoreMaya", "opHolderReference.ma" ) )
		referenceScene = maya.cmds.file( force = True, type = "mayaAscii", save = True )

		# reference it in and add an op with a color spline
		###################################################

		maya.cmds.file( new = True, force = True )
		maya.cmds.file( referenceScene, reference = True, namespace = "ns1" )

		fnOH = IECoreMaya.FnOpHolder( "ns1:ieOpHolderNode1" )
		fnOH.setOp( "splineInput", 1 )

		fnOH.setParameterisedValues()

		self.assertEqual(
			fnOH.getOp()["spline"].getValue().value,
			IECore.Splineff(
				IECore.CubicBasisf.catmullRom(),
				(
					( 0, 1 ),
					( 0, 1 ),
					( 1, 0 ),
					( 1, 0 ),
				),
			)
		)

		# save the scene, and reload it. check that we've worked
		# around another wonderful maya referencing bug
		########################################################

		maya.cmds.file( rename = os.path.join( os.getcwd(), "test", "IECoreMaya", "opHolderReferencer.ma" ) )
		referencerScene = maya.cmds.file( force = True, type = "mayaAscii", save = True )

		maya.cmds.file( new = True, force = True )
		maya.cmds.file( referencerScene, force = True, open = True )

		fnOH = IECoreMaya.FnOpHolder( "ns1:ieOpHolderNode1" )

		fnOH.setParameterisedValues()

		self.assertEqual(
			fnOH.getOp()["spline"].getValue().value,
			IECore.Splineff(
				IECore.CubicBasisf.catmullRom(),
				(
					( 0, 1 ),
					( 0, 1 ),
					( 1, 0 ),
					( 1, 0 ),
				),
			)
		)
    def testResultAttrSaveLoadMeshConnections(self):

        box = maya.cmds.listRelatives(maya.cmds.polyCube(), shapes=True)[0]
        torus = maya.cmds.listRelatives(maya.cmds.polyTorus(), shapes=True)[0]
        node = maya.cmds.createNode("ieOpHolderNode")
        fnPH = IECoreMaya.FnOpHolder(node)
        fnPH.setOp("meshMerge")

        maya.cmds.connectAttr(box + ".outMesh", node + ".parm_input")
        maya.cmds.connectAttr(torus + ".outMesh", node + ".parm_mesh")
        mesh = maya.cmds.createNode("mesh")
        maya.cmds.connectAttr(node + ".result", mesh + ".inMesh")
        quads = maya.cmds.polyQuad(mesh)[0]
        ## \todo: this makes the test fail, but not seg fault. remove once the seg fault is solved.
        maya.cmds.setAttr(quads + ".nodeState", 1)
        joint = maya.cmds.createNode("joint")
        cluster = maya.cmds.skinCluster(mesh, joint)

        fnMesh = maya.OpenMaya.MFnMesh(
            IECoreMaya.dependencyNodeFromString(mesh))
        self.assertEqual(fnMesh.numVertices(), 408)
        self.assertEqual(fnMesh.numPolygons(), 406)

        maya.cmds.file(rename=os.path.join(os.getcwd(), "test", "IECoreMaya",
                                           "resultAttrLoadTest.ma"))
        testScene = maya.cmds.file(force=True, type="mayaAscii", save=True)
        maya.cmds.file(testScene, f=True, o=True)

        fnMesh = maya.OpenMaya.MFnMesh(
            IECoreMaya.dependencyNodeFromString(mesh))
        self.assertEqual(fnMesh.numVertices(), 408)
        self.assertEqual(fnMesh.numPolygons(), 406)

        self.assertEqual(maya.cmds.getAttr(quads + ".nodeState"),
                         0)  # Known bug. See todo above.
    def testSparseEntries(self):

        # load a scene where we have a spline parameter with sparse entries.
        maya.cmds.file(os.getcwd() +
                       "/test/IECoreMaya/scenes/splineWithSparseEntries.ma",
                       force=True,
                       open=True)

        fnOH = IECoreMaya.FnOpHolder("test")
        op = fnOH.getOp()

        # stick a new value on
        splineData = IECore.SplineffData(
            IECore.Splineff(IECore.CubicBasisf.catmullRom(),
                            ((0, 0.644737), (0, 0.644737),
                             (0.257426, 0.0789474), (1, -0.3), (1, -0.3))))

        op["spline"].setValue(splineData)

        # convert the value to maya
        fnOH.setNodeValue(op["spline"])

        # convert it back
        fnOH.setParameterisedValue(op["spline"])

        # make sure it worked
        splineData2 = op["spline"].getValue()
        self.assertEqual(splineData, splineData2)

        # do it all again just for kicks
        op["spline"].setValue(splineData)
        fnOH.setNodeValue(op["spline"])
        fnOH.setParameterisedValue(op["spline"])
        splineData2 = op["spline"].getValue()
        self.assertEqual(splineData, splineData2)
Esempio n. 4
0
	def testExcessReferenceEdits( self ) :
		
		IECoreMaya.FnOpHolder.create( "testOp", "maths/multiply", 2 )

		# Save the scene out so we can reference it
		maya.cmds.file( rename = os.path.join( os.getcwd(), "test", "IECoreMaya", "referenceEditCounts.ma" ) )
		referenceScene = maya.cmds.file( force = True, type = "mayaAscii", save = True )

		# New scene, and read it in.
		maya.cmds.file( new = True, force = True )
		maya.cmds.file( referenceScene, reference = True, namespace = "ns1" )
		
		# Check there are no reference edits
		
		fnOH = IECoreMaya.FnOpHolder( 'ns1:testOp' )
		op = fnOH.getOp()
		
		aPath = fnOH.parameterPlugPath( op["a"] )
		bPath = fnOH.parameterPlugPath( op["b"] )
		self.assertEqual( maya.cmds.getAttr( aPath ), 1 )
		self.assertEqual( maya.cmds.getAttr( bPath ), 2 )
		
		self.assertEqual( len(maya.cmds.referenceQuery( referenceScene, editStrings=True )), 0 )

		# set values, but with no changes
		
		with fnOH.parameterModificationContext() :
			op["a"].setNumericValue( 1 )
			op["b"].setNumericValue( 2 )
		
		# Check the values are the same, and there are still no reference edits
		
		self.assertEqual( maya.cmds.getAttr( aPath ), 1 )
		self.assertEqual( maya.cmds.getAttr( bPath ), 2 )
		
		self.assertEqual( len(maya.cmds.referenceQuery( referenceScene, editStrings=True )), 0 )
				
		# change a value to a genuinely new value
		with fnOH.parameterModificationContext() :
			op["a"].setNumericValue( 100 )
		
		# Check the maya value is updated and there is 1 reference edit
		
		self.assertEqual( maya.cmds.getAttr( aPath ), 100 )
		self.assertEqual( maya.cmds.getAttr( bPath ), 2 )
		
		self.assertEqual( len(maya.cmds.referenceQuery( referenceScene, editStrings=True )), 1 )
		
		# Undo and check there is still 1 reference edit. Ideally there would be none but
		# maya isn't that clever.
		
		maya.cmds.undo()
		
		self.assertEqual( maya.cmds.getAttr( aPath ), 1 )
		self.assertEqual( maya.cmds.getAttr( bPath ), 2 )
		
		self.assertEqual( len(maya.cmds.referenceQuery( referenceScene, editStrings=True )), 1 )
Esempio n. 5
0
	def testExcessClassVectorParameterReferenceEdits( self ) :
	
		# Save a scene with a ClassParameter in it
		
		fnOH = IECoreMaya.FnOpHolder.create( "node", "classVectorParameterTest", 1 )
		op = fnOH.getOp()
		
		with fnOH.parameterModificationContext() :
			
			op["cv"].setClasses(
			
				[
					( "mult", "maths/multiply", 1 ),
					( "coIO", "compoundObjectInOut", 1 ),
				]
				
			)
					
		maya.cmds.file( rename = os.path.join( os.getcwd(), "test", "IECoreMaya", "referenceEditCounts.ma" ) )
		referenceScene = maya.cmds.file( force = True, type = "mayaAscii", save = True )
		
		# And reference it back in to a new scene
		
		maya.cmds.file( new = True, force = True )
		maya.cmds.file( referenceScene, reference = True, namespace = "ns1" )
		
		self.assertEqual( len(maya.cmds.referenceQuery( referenceScene, editStrings=True )), 0 )

		# Make a modification which does nothing and check that there are no reference edits
		
		fnOH = IECoreMaya.FnOpHolder( "ns1:node" )
		with fnOH.parameterModificationContext() :
			pass
			
		self.assertEqual( len(maya.cmds.referenceQuery( referenceScene, editStrings=True )), 0 )	
		
		# Make a modification which happens to set things to the values they're already at and
		# check that there are no reference edits
		
		with fnOH.parameterModificationContext() :
			
			op["cv"].setClasses(
			
				[
					( "mult", "maths/multiply", 1 ),
					( "coIO", "compoundObjectInOut", 1 ),
				]
				
			)
			
		self.assertEqual( len(maya.cmds.referenceQuery( referenceScene, editStrings=True )), 0 )			
    def testParameterPlugForMissingPlug(self):

        ## Make sure that null plugs are returned from the parameterPlug() method
        # if no plug exists.

        node = maya.cmds.createNode("ieOpHolderNode")
        fnPH = IECoreMaya.FnOpHolder(node)
        fnPH.setOp("floatParameter")

        op = fnPH.getOp()

        plug = fnPH.parameterPlug(op.parameters())
        self.failUnless(isinstance(plug, maya.OpenMaya.MPlug))
        self.failUnless(plug.isNull())
Esempio n. 7
0
	def testRoundTripAfterSerialisation( self ) :

		# make a scene with an OpHolder holding an op with a spline parameter
		fnOH = IECoreMaya.FnOpHolder.create( "test", "splineInput", 1 )
		opNode = fnOH.fullPathName()
		op = fnOH.getOp()

		# save it
		maya.cmds.file( rename = os.getcwd() + "/test/IECoreMaya/splineParameterHandlerTest.ma" )
		sceneFileName = maya.cmds.file( force = True, type = "mayaAscii", save = True )

		# load it
		maya.cmds.file( new=True, force=True )
		maya.cmds.file( sceneFileName, force=True, open=True )

		fnOH = IECoreMaya.FnOpHolder( opNode )
		op = fnOH.getOp()

		# stick a new value on
		splineData = IECore.SplineffData(
			IECore.Splineff(
				IECore.CubicBasisf.catmullRom(), (
					( 0, 0.644737 ),
					( 0, 0.644737 ),
					( 0.257426, 0.0789474 ),
					( 1, -0.3 ),
					( 1, -0.3 )
				)
			)
		)

		op["spline"].setValue( splineData )

		# convert the value to maya
		fnOH.setNodeValue( op["spline"] )

		# convert it back
		fnOH.setParameterisedValue( op["spline"] )

		# make sure it worked
		splineData2 = op["spline"].getValue()
		self.assertEqual( splineData, splineData2 )

		# do it all again just for kicks
		op["spline"].setValue( splineData )
		fnOH.setNodeValue( op["spline"] )
		fnOH.setParameterisedValue( op["spline"] )
		splineData2 = op["spline"].getValue()
		self.assertEqual( splineData, splineData2 )
    def testLsMethods(self):

        # create a couple of holders:
        opHolderNode = maya.cmds.createNode("ieOpHolderNode")
        fnOH = IECoreMaya.FnOpHolder(opHolderNode)
        fnOH.setOp("floatParameter")

        converterHolderNode = maya.cmds.createNode("ieConverterHolder")
        fnCH = IECoreMaya.FnConverterHolder(converterHolderNode)
        #fnCH.setOp( "floatParameter" )

        node = maya.cmds.createNode("ieProceduralHolder")

        node2 = maya.cmds.createNode("ieProceduralHolder")

        fnPH = IECoreMaya.FnProceduralHolder(node)
        proc = IECore.ReadProcedural()
        fnPH.setParameterised(proc)

        fnPH2 = IECoreMaya.FnProceduralHolder(node2)

        # do an ls on the op holders: should only be one
        opHolders = IECoreMaya.FnOpHolder.ls()
        self.assertEqual(len(opHolders), 1)
        self.failUnless(isinstance(opHolders[0], IECoreMaya.FnOpHolder))
        self.assertEqual(opHolders[0].fullPathName(), opHolderNode)

        # do an ls on the procedural holders: should be two
        self.assertEqual(len(IECoreMaya.FnProceduralHolder.ls()), 2)

        # do an ls on the procedural holders containing IECore.ReadProcedurals: should be one
        self.assertEqual(
            len(
                IECoreMaya.FnProceduralHolder.ls(
                    classType=IECore.ReadProcedural)), 1)

        # find full path name of node holding ReadProcedural, and check it's the same as the one returned by ls:
        node = maya.cmds.ls(node, l=True)[0]
        self.assertEqual(
            IECoreMaya.FnProceduralHolder.ls(
                classType=IECore.ReadProcedural)[0].fullPathName(), node)

        # do an ls on the converter holders, this time just returning node names:
        converterHolders = IECoreMaya.FnConverterHolder.ls(fnSets=False)
        self.assertEqual(len(converterHolders), 1)
        self.assertEqual(converterHolders[0], converterHolderNode)
Esempio n. 9
0
	def testResultAttrSaveLoad( self ) :
		
		node = maya.cmds.createNode( "ieOpHolderNode" )
		fnPH = IECoreMaya.FnOpHolder( node )
		fnPH.setOp( "floatParameter" )

		self.assertNotEqual( maya.cmds.getAttr( node + ".parm_f" ), 50.5 )
		self.assertNotEqual( maya.cmds.getAttr( node + ".result" ), 50.5 )
		maya.cmds.setAttr( node + ".parm_f", 50.5 )
		self.assertEqual( maya.cmds.getAttr( node + ".parm_f" ), 50.5 )
		self.assertEqual( maya.cmds.getAttr( node + ".result" ), 50.5 )

		maya.cmds.file( rename = os.path.join( os.getcwd(), "test", "IECoreMaya", "resultAttrLoadTest.ma" ) )
		testScene = maya.cmds.file( force = True, type = "mayaAscii", save = True )
		maya.cmds.file( testScene, f = True, o  = True )
		self.assertEqual( maya.cmds.getAttr( node + ".parm_f" ), 50.5 )
		self.assertEqual( maya.cmds.getAttr( node + ".result" ), 50.5 )
Esempio n. 10
0
    def testLsMethods(self):

        # create a couple of holders:
        opHolderNode = maya.cmds.createNode("ieOpHolderNode")
        fnOH = IECoreMaya.FnOpHolder(opHolderNode)
        fnOH.setOp("floatParameter")

        converterHolderNode = maya.cmds.createNode("ieConverterHolder")
        fnCH = IECoreMaya.FnConverterHolder(converterHolderNode)
        #fnCH.setOp( "floatParameter" )

        # do an ls on the op holders: should only be one
        opHolders = IECoreMaya.FnOpHolder.ls()
        self.assertEqual(len(opHolders), 1)
        self.assertTrue(isinstance(opHolders[0], IECoreMaya.FnOpHolder))
        self.assertEqual(opHolders[0].fullPathName(), opHolderNode)

        # do an ls on the converter holders, this time just returning node names:
        converterHolders = IECoreMaya.FnConverterHolder.ls(fnSets=False)
        self.assertEqual(len(converterHolders), 1)
        self.assertEqual(converterHolders[0], converterHolderNode)