def testSelectionFlag(self): makeRobot() MayaCmds.select('bottom', 'leftArm', 'head') self.__files.append(util.expandFileName('selectionTest_partial.abc')) MayaCmds.AbcExport(j='-sl -root head -root body -root lower -file ' + self.__files[-1]) self.__files.append(util.expandFileName('selectionTest.abc')) MayaCmds.AbcExport(j='-sl -file ' + self.__files[-1]) MayaCmds.AbcImport(self.__files[-1], m='open') self.failUnless(MayaCmds.objExists("robot|head")) self.failUnless(MayaCmds.objExists("robot|body|leftArm")) self.failUnless(MayaCmds.objExists("robot|lower|bottom")) self.failIf(MayaCmds.objExists("robot|body|rightArm")) self.failIf(MayaCmds.objExists("robot|body|chest")) self.failIf(MayaCmds.objExists("robot|lower|rightLeg")) self.failIf(MayaCmds.objExists("robot|lower|leftLeg")) MayaCmds.AbcImport(self.__files[-2], m='open') self.failUnless(MayaCmds.objExists("head")) self.failUnless(MayaCmds.objExists("body|leftArm")) self.failUnless(MayaCmds.objExists("lower|bottom")) # we didnt actually select any meshes so there shouldnt # be any in the scene self.failIf(MayaCmds.ls(type='mesh'))
def importAbc(self, parent_transform=True): """ Import alembic cache as maya geometry Args: parent_transform (bool): parent the new maya geometry under alembicHolder transform, if None, user is prompted to choose. When executing via batch, ensure 'parent_transform' is True, if not specified. Returns: bool: The return value. True for success, False otherwise. """ self.logger.info("Import Alembic") if self.data['cacheFileNameAttr'] != '': if os.path.isfile(self.data['cacheFileNameAttr']): # now try the abcImport try: if parent_transform: cmds.AbcImport(self.data['cacheFileNameAttr'], reparent=self.data['transformNode']) self.logger.debug("Parenting to %s " % self.data['transformNode']) else: cmds.AbcImport(self.data['cacheFileNameAttr']) self.logger.info("Imported : %s" % self.data['cacheFileNameAttr']) return True except Exception, e: self.logger.error("Import Alembic Error : %s" % e) return False else: self.logger.error("Missing file : %s" % self.data['cacheFileNameAttr']) return False
def testAnimMeshReload(self): MayaCmds.polyCube(name='mesh') MayaCmds.setKeyframe('meshShape.vtx[0:7]', time=[1, 24]) MayaCmds.setKeyframe('meshShape.vtx[0:7]') MayaCmds.currentTime(12, update=True) MayaCmds.select('meshShape.vtx[0:7]') MayaCmds.scale(5, 5, 5, r=True) MayaCmds.setKeyframe('meshShape.vtx[0:7]', time=[12]) self.__files.append(util.expandFileName('testAnimMeshReadWrite.abc')) MayaCmds.AbcExport(j='-fr 1 24 -root mesh -f ' + self.__files[-1]) # reading test MayaCmds.AbcImport(self.__files[-1], mode='open') # save as a maya file self.__files.append(util.expandFileName('test.mb')) MayaCmds.file(rename=self.__files[-1]) MayaCmds.file(save=True) # reload as a maya file MayaCmds.file(self.__files[-1], open=True) MayaCmds.AbcImport(self.__files[-2], mode='import') retVal = True mesh1 = '|mesh|meshShape' mesh2 = '|mesh1|meshShape' for t in range(1, 25): MayaCmds.currentTime(t, update=True) if not util.compareMesh(mesh1, mesh2): self.fail('%s and %s were not equal at frame %d' % (mesh1, mesh2, t))
def testMeshTopoChange(self): MayaCmds.polySphere(sx=10, sy=15, r=0, n='polyMesh') MayaCmds.createNode('transform', n='group') MayaCmds.parent('polyMesh', 'group') MayaCmds.AbcImport(self.__files[2], connect='group') # this is loaded in for value comparison purpose only MayaCmds.AbcImport(self.__files[2], mode='import') # check the swapped scene at every frame for frame in range(1, 4): MayaCmds.currentTime(frame, update=True) # tranform node group checkEqualTranslate(self, 'group', 'group1', 4) # tranform node group checkEqualTranslate(self, 'group|polyMesh', 'group1|polyMesh', 4) # mesh node polyMesh for index in range(0, 9): string1 = 'group|polyMesh.vt[%d]' % index string2 = 'group1|polyMesh.vt[%d]' % index self.failUnlessAlmostEqual( MayaCmds.getAttr(string1)[0][0], MayaCmds.getAttr(string2)[0][0], 4, '%s.x != %s.x' % (string1, string2)) self.failUnlessAlmostEqual( MayaCmds.getAttr(string1)[0][1], MayaCmds.getAttr(string2)[0][1], 4, '%s.y != %s.y' % (string1, string2)) self.failUnlessAlmostEqual( MayaCmds.getAttr(string1)[0][2], MayaCmds.getAttr(string2)[0][2], 4, '%s.z != %s.z' % (string1, string2))
def testNamespace(self): self.buildScene() self.__files.append(util.expandFileName('testNamespace_foo_a.abc')) self.__files.append(util.expandFileName('testNamespace_bar_a.abc')) self.__files.append(util.expandFileName('testNamespace_a.abc')) MayaCmds.AbcExport(j='-root foo:a -fr 1 4 -file ' + self.__files[-3]) MayaCmds.AbcExport(j='-root bar:a -fr 1 4 -file ' + self.__files[-2]) MayaCmds.AbcExport(j='-root a -fr 1 4 -file ' + self.__files[-1]) self.buildStatic() MayaCmds.AbcImport(self.__files[-3], connect='foo:a') self.failUnless( 'testNamespace_foo_a_AlembicNode.outPolyMesh[0]' == MayaCmds. connectionInfo("|foo:a|foo:b|foo:bShape.inMesh", sfd=True)) MayaCmds.AbcImport(self.__files[-2], connect='bar:a') self.failUnless( 'testNamespace_bar_a_AlembicNode.outPolyMesh[0]' == MayaCmds. connectionInfo("|bar:a|bar:b|bar:bShape.inMesh", sfd=True)) MayaCmds.AbcImport(self.__files[-1], connect='a') self.failUnless( 'testNamespace_a_AlembicNode.outPolyMesh[0]' == MayaCmds.connectionInfo("|a|b|bShape.inMesh", sfd=True))
def testAnimNSurfaceAndPolyDeleteReload(self): # create a poly cube and animate shapeName = 'pCube' MayaCmds.polyCube(name=shapeName) MayaCmds.move(5, 0, 0, r=True) MayaCmds.setKeyframe(shapeName + '.vtx[2:5]', time=[1, 24]) MayaCmds.currentTime(12) MayaCmds.select(shapeName + '.vtx[2:5]', replace=True) MayaCmds.move(0, 4, 0, r=True) MayaCmds.setKeyframe(shapeName + '.vtx[2:5]', time=[12]) # create an animated Nurbs plane MayaCmds.nurbsPlane(ch=False, name='nPlane') MayaCmds.move(-5, 5, 0, relative=True) MayaCmds.select('nPlane.cv[0:3][0:3]', replace=True) MayaCmds.setKeyframe(time=1) MayaCmds.currentTime(12, update=True) MayaCmds.rotate(0, 0, 90, relative=True) MayaCmds.setKeyframe(time=12) MayaCmds.currentTime(24, update=True) MayaCmds.rotate(0, 0, 90, relative=True) MayaCmds.setKeyframe(time=24) # write it out to Abc file and load back in self.__files.append( util.expandFileName('testNSurfaceAndPolyReload.abc')) MayaCmds.AbcExport(j='-fr 1 24 -root pCube -root nPlane -file ' + self.__files[-1]) # load back the Abc file, delete the cube and save to a maya file MayaCmds.AbcImport(self.__files[-1], mode='open') MayaCmds.delete('pCube') self.__files.append(util.expandFileName('test.mb')) MayaCmds.file(rename=self.__files[-1]) MayaCmds.file(save=True) # import the saved maya file to compare with the original scene MayaCmds.file(self.__files[-1], open=True) MayaCmds.select('nPlane', replace=True) MayaCmds.group(name='ReloadGrp') MayaCmds.AbcImport(self.__files[-2], mode='import') shapeList = MayaCmds.ls(type='mesh') self.failUnlessEqual(len(shapeList), 1) surfaceList = MayaCmds.ls(type='nurbsSurface') self.failUnlessEqual(len(surfaceList), 2) # test the equality of plane surface1 = '|nPlane|nPlaneShape' surface2 = '|ReloadGrp|nPlane|nPlaneShape' for t in range(1, 25): MayaCmds.currentTime(t, update=True) if not util.compareNurbsSurface(surface1, surface2): self.fail('%s and %s are not the same at frame %d' % (surface1, surface2, t))
def testPreRollRanges(self): self.createXformNode() # Export (1, 10), [11, 100], (101, 109), [110, 200] __builtins__['framesList'] = [] self.__files.append(util.expandFileName('testPreRollRanges1.abc')) MayaCmds.AbcExport( j='-fr 1 10 -pr -fr 11 100 -fr 101 109 -pr -fr 110 200 -root test -pfc framesList.append(#FRAME#) -file ' + self.__files[-1]) referenceList = [] for i in range(11, 101): referenceList.append(i) for i in range(110, 201): referenceList.append(i) self.failUnlessEqual(framesList, referenceList) # Import MayaCmds.AbcImport(self.__files[-1], mode='open') # Test sampling points self.failUnlessXformValuesEqual([(11, 10), (100, 20), (110, 20), (200, 10)]) # Test not-sampled points self.failUnlessXformValuesEqual([(1, 10), (105, 20), (205, 10)]) # Another pre roll test MayaCmds.file(new=True, force=True) self.createXformNode() # Export [1, 10], (11, 99), [100, 110], (111, 200) __builtins__['framesList'] = [] self.__files.append(util.expandFileName('testPreRollRanges2.abc')) MayaCmds.AbcExport( j='-fr 1 10 -fr 11 99 -pr -fr 100 110 -fr 111 200 -pr -root test -pfc framesList.append(#FRAME#) -file ' + self.__files[-1]) referenceList = [] for i in range(1, 11): referenceList.append(i) for i in range(100, 111): referenceList.append(i) self.failUnlessEqual(framesList, referenceList) # Import MayaCmds.AbcImport(self.__files[-1], mode='open') # Test sampling points self.failUnlessXformValuesEqual([(1, 10), (3, 20), (10, 20), (100, 20), (110, 20)]) # Test not-sampled points self.failUnlessXformValuesEqual([(11, 20), (50, 20), (200, 20)])
def testReturnAbcNodeName(self): makeRobotAnimated() self.__files.append( util.expandFileName('returnAlembicNodeNameTest.abc')) MayaCmds.AbcExport(j='-fr 1 12 -root robot -file ' + self.__files[-1]) ret = MayaCmds.AbcImport(self.__files[-1], mode='open') ret1 = MayaCmds.AbcImport(self.__files[-1], mode='import') self.failUnless(MayaCmds.objExists(ret)) self.failUnless(MayaCmds.objExists(ret1)) self.failIf(ret == ret1)
def testSkipFrames(self): MayaCmds.createNode('transform', name='node') MayaCmds.setKeyframe('node.translateX', time=1.0, v=1.0) MayaCmds.setKeyframe('node.translateX', time=10.0, v=10.0) MayaCmds.duplicate(name='dupNode') MayaCmds.setAttr('dupNode.tx', 0.0) MayaCmds.expression( string= "if(time==11)\n\tdupNode.tx=-50;\n\ndupNode.tx = dupNode.tx + time;\n", name="startAtExp", ae=1, uc=all) self.__files.append(util.expandFileName('skipFrameTest1.abc')) self.__files.append(util.expandFileName('skipFrameTest2.abc')) MayaCmds.AbcExport(j=[ '-fr 1 10 -root node -file ' + self.__files[-2], '-fr 20 25 -root dupNode -file ' + self.__files[-1] ]) MayaCmds.AbcImport(self.__files[-2], m='open') abcNodeName = MayaCmds.ls(exactType='AlembicNode') # make sure all the frames needed are written out and correctly for val in range(1, 11): MayaCmds.currentTime(val, update=True) MayaCmds.dgeval(abcNodeName, verbose=False) self.failUnlessAlmostEqual(MayaCmds.getAttr('node.tx'), val, 3) # also make sure nothing extra gets written out MayaCmds.currentTime(11, update=True) MayaCmds.dgeval(abcNodeName, verbose=False) self.failUnlessEqual(MayaCmds.getAttr('node.tx'), 10.0) MayaCmds.AbcImport(self.__files[-1], m='open') abcNodeName = MayaCmds.ls(exactType='AlembicNode') # if dontSkipFrames flag is not set maya would evaluate frame 11 and # set dupNode.tx to a big negative number MayaCmds.currentTime(20, update=True) MayaCmds.dgeval(abcNodeName, verbose=False) self.failUnless(MayaCmds.getAttr('dupNode.tx') > 0)
def testPartialSwap(self): createStaticSolarSystem() MayaCmds.AbcImport(self.__files[1], connect='group1', createIfNotFound=True) # check the swapped scene is the same as frame #12 # tranform node moon self.failUnlessAlmostEqual(MayaCmds.getAttr('moon.translateX'), -4.1942, 4) self.failUnlessAlmostEqual(MayaCmds.getAttr('moon.translateY'), 0.0000, 4) self.failUnlessAlmostEqual(MayaCmds.getAttr('moon.translateZ'), 2.9429, 4) # transform node earth self.failUnlessAlmostEqual(MayaCmds.getAttr('earth.translateX'), 0.4595, 4) self.failUnlessAlmostEqual(MayaCmds.getAttr('earth.translateY'), 0.0000, 4) self.failUnlessAlmostEqual(MayaCmds.getAttr('earth.translateZ'), 4.7712, 4) # transform node sun self.failUnlessAlmostEqual(MayaCmds.getAttr('sun.rotateX'), 0.0000, 4) self.failUnlessAlmostEqual(MayaCmds.getAttr('sun.rotateY'), 0.0000, 4) self.failUnlessAlmostEqual(MayaCmds.getAttr('sun.rotateZ'), 0.0000, 4)
def testRemoveIfNoUpdate(self): createStaticSolarSystem() # add a few nodes that don't exist in the Alembic file MayaCmds.createNode('transform', name='saturn') MayaCmds.parent('saturn', 'group1') MayaCmds.createNode('transform', name='venus') MayaCmds.parent('venus', 'group2') MayaCmds.AbcImport(self.__files[1], connect='/', removeIfNoUpdate=True) # check if venus and saturn is deleted self.failUnlessEqual(MayaCmds.objExists('venus'), False) self.failUnlessEqual(MayaCmds.objExists('saturn'), False) # check the swapped scene is the same as frame #12 # tranform node moon self.failUnlessAlmostEqual(MayaCmds.getAttr('moon.translateX'), -4.1942, 4) self.failUnlessAlmostEqual(MayaCmds.getAttr('moon.translateY'), 0.0000, 4) self.failUnlessAlmostEqual(MayaCmds.getAttr('moon.translateZ'), 2.9429, 4) # transform node earth self.failUnlessAlmostEqual(MayaCmds.getAttr('earth.translateX'), 0.4595, 4) self.failUnlessAlmostEqual(MayaCmds.getAttr('earth.translateY'), 0.0000, 4) self.failUnlessAlmostEqual(MayaCmds.getAttr('earth.translateZ'), 4.7712, 4) # transform node sun self.failUnlessAlmostEqual(MayaCmds.getAttr('sun.rotateX'), 0.0000, 4) self.failUnlessAlmostEqual(MayaCmds.getAttr('sun.rotateY'), 16.569, 4) self.failUnlessAlmostEqual(MayaCmds.getAttr('sun.rotateZ'), 0.0000, 4)
def buildScene(cameraFile, envFile, charFile): ''' Build the final lighting scene file. :param cameraFile: Camera alembic file to import :param envFile: Published layout env file to reference :param charFile: Baked char file to reference :return: ''' if isValidFile(envFile): try: # Check if env file is already referenced. cmds.referenceQuery(envFile, filename=True) except RuntimeError: cmds.file(envFile, r=True) if isValidFile(charFile): try: # Check if env file is already referenced. cmds.referenceQuery(charFile, filename=True) except RuntimeError: cmds.file(charFile, r=True) if isValidFile(cameraFile): # Check if camera exists in scene cameraNodes = cmds.ls('renderCam') if len(cameraNodes) == 1: # Camara exists, delete and re-import alembic cameraNode = cameraNodes[0] cmds.delete(cameraNode) cmds.AbcImport(cameraFile, mode='import') cmds.file(save=True, type='mayaBinary', force=True)
def _do_import(self, path, sg_publish_data): """ Create a reference with the same settings Maya would use if you used the create settings dialog. :param path: Path to file. :param sg_publish_data: Shotgun data dictionary with all the standard publish fields. """ if not os.path.exists(path): raise Exception("File not found on disk - '%s'" % path) # If we're importing an Alembic cache. if os.path.splitext(path)[1].lower() == ".abc": cmds.AbcImport(path) return # make a name space out of entity name + publish name # e.g. bunny_upperbody namespace = "%s %s" % (sg_publish_data.get("entity").get("name"), sg_publish_data.get("name")) namespace = namespace.replace(" ", "_") # perform a more or less standard maya import, putting all nodes brought in into a specific namespace cmds.file(path, i=True, renameAll=True, namespace=namespace, loadReferenceDepth="all", preserveReferences=True)
def testPolyUVs(self): MayaCmds.polyCube(name='cube') cubeObj = getObjFromName('cubeShape') fnMesh = OpenMaya.MFnMesh(cubeObj) # get the name of the current UV set uvSetName = fnMesh.currentUVSetName() uArray = OpenMaya.MFloatArray() vArray = OpenMaya.MFloatArray() fnMesh.getUVs(uArray, vArray, uvSetName) newUArray = [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, 2, -1, -1] newVArray = [0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 0, 1, 0, 1] for i in range(0, 14): uArray[i] = newUArray[i] vArray[i] = newVArray[i] fnMesh.setUVs(uArray, vArray, uvSetName) self.__files.append(util.expandFileName('polyUvsTest.abc')) MayaCmds.AbcExport(j='-uv -root cube -file ' + self.__files[-1]) # reading test MayaCmds.AbcImport(self.__files[-1], mode='open') MayaCmds.select('cube.map[0:13]', replace=True) uvs = MayaCmds.polyEditUV(query=True) for i in range(0, 14): self.failUnlessAlmostEqual(newUArray[i], uvs[2 * i], 4, 'map[%d].u is not the same' % i) self.failUnlessAlmostEqual(newVArray[i], uvs[2 * i + 1], 4, 'map[%d].v is not the same' % i)
def changeAlembicVersion(self, iAObj=None, applicationObject=None): '''Change the version of Alembic defined in *iAObj* and *applicationObject* ''' ftNode = mc.listConnections(applicationObject, type='ftrackAssetNode') if not ftNode: return ftNode = ftNode[0] shapes = mc.listConnections(ftNode, sh=True, d=True, s=False, type='shape') root_nodes = [] for shape in shapes: results = self._getAlembicRoots(iAObj, shape) root_nodes += results # Remove duplicates. root_nodes = ' '.join(list(set(root_nodes))) reparent_node = '_'.join( [iAObj.assetType.upper(), iAObj.assetName, 'AST']) mc.AbcImport(iAObj.filePath, mode='import', connect=root_nodes, reparent=reparent_node) return True
def importAlembicData(prefix, filePath): import sgBFunction_base sgBFunction_base.autoLoadPlugin('AbcExport') beforeTopNodes = sgBFunction_dag.getTopTransformNodes() cmds.AbcImport(filePath, mode='import') afterTopNodes = sgBFunction_dag.getTopTransformNodes() fnTargets = [] for afterTopNode in afterTopNodes: if afterTopNode in beforeTopNodes: continue children = cmds.listRelatives(afterTopNode, c=1, ad=1, f=1, type='transform') if not children: children = [] children.append(afterTopNode) for child in children: fnTarget = om.MFnTransform(sgBFunction_dag.getMDagPath(child)) fnTargets.append(fnTarget) for target in fnTargets: targetName = target.name() fullName = target.fullPathName() cmds.rename(fullName, prefix + targetName)
def _fetchAlembicCaches(self, pathToFxPublishFolder): rePathToAlembiCaches = r'%s/alembic_anim/%s' % (pathToFxPublishFolder.split('fx')[0], pathToFxPublishFolder.split('fx')[-1]) if os.path.isdir(rePathToAlembiCaches): for each in os.listdir(rePathToAlembiCaches): abcNode = '%s/%s' % (rePathToAlembiCaches, each) debug(app = self, method = '_fetchAlembicCaches', message = 'abcNode %s' % abcNode, verbose = False) cmds.AbcImport(abcNode, reparent = "|ABC_ANIM_CACHES_hrc", setToStartFrame = True)
def testThreeFrameRanges(self): self.createXformNode() # Export 3 frame ranges: [1,3], [10,11], [110, 200] __builtins__['framesList'] = [] self.__files.append(util.expandFileName('testThreeFrameRanges.abc')) MayaCmds.AbcExport(j='-fr 1 3 -fr 10 11 -fr 110 200 -root test -pfc framesList.append(#FRAME#) -file ' + self.__files[-1]) referenceList = [] for i in range(1, 4): referenceList.append(i) for i in range(10, 12): referenceList.append(i) for i in range(110, 201): referenceList.append(i) self.failUnlessEqual(framesList, referenceList) # Import MayaCmds.AbcImport(self.__files[-1], mode='open') # Test sampling points self.failUnlessXformValuesEqual([(1, 10), (3, 20), (10, 20), (11, 10), (110, 20), (200, 10)]) # Test not-sampled points self.failUnlessXformValuesEqual([(7, 20), (60.5, 15)]) # lerp
def import_abcgeom(self): # import alembic alembic_node = cmds.AbcImport(self.asset_path, mode="import", recreateAllColorSets=True) trans_node = cmds.listConnections(alembic_node, type="mesh")[0] mesh_node = cmds.listRelatives(trans_node, type="mesh")[0] # need test if all color sets can be imported from aiUserDataColor cmds.setAttr('{}.allColorSets'.format(alembic_node), 1) current_color = cmds.polyColorSet(trans_node, query=True, currentColorSet=True)[0] # need to test: allColorSet=True # create shader surface_name = '{}_geom'.format(trans_node) # create surface shader surface_name = core.createArnoldNode('aiStandardSurface', name=surface_name) cmds.sets(trans_node, edit=True, forceElement='{}SG'.format(surface_name)) # import color if self.import_color: cmds.setAttr('{trans}|{mesh}.aiExportColors'.format(trans=trans_node, mesh=mesh_node), 1) color_name = '{0}_{1}'.format(surface_name, current_color) # import particle color color_name = core.createArnoldNode('aiUserDataColor', name=color_name) cmds.setAttr('{}.colorAttrName'.format(color_name), current_color, type='string') if self.color_channel == 'baseColor': cmds.connectAttr('{}.outColor'.format(color_name), '{}.baseColor'.format(surface_name)) elif self.color_channel == 'emitColor': cmds.connectAttr('{}.outColor'.format(color_name), '{}.emissionColor'.format(surface_name)) cmds.setAttr('{}.emission'.format(surface_name), 1) # set opacity if self.import_opacity: cmds.setAttr('{trans}|{mesh}.aiOpaque'.format(trans=trans_node, mesh=mesh_node), 0)
def testStaticIKRW(self): name = createJoints() MayaCmds.ikHandle(sj=name, ee='joint4') MayaCmds.move(-1.040057, -7.278225, 6.498725, r=True) # write to file self.__files.append(util.expandFileName('testStaticIK.abc')) MayaCmds.AbcExport(j='-root %s -f %s' % (name, self.__files[-1])) MayaCmds.select(name) MayaCmds.group(name='original') # read from file MayaCmds.AbcImport(self.__files[-1], mode='import') # make sure the translate and rotation are the same nodes1 = [ "|original|joint1", "|original|joint1|joint2", "|original|joint1|joint2|joint3", "|original|joint1|joint2|joint3|joint4" ] nodes2 = [ "|joint1", "|joint1|joint2", "|joint1|joint2|joint3", "|joint1|joint2|joint3|joint4" ] for i in range(0, 4): self.failUnlessAlmostEqual(MayaCmds.getAttr(nodes1[i] + '.tx'), MayaCmds.getAttr(nodes2[i] + '.tx'), 4) self.failUnlessAlmostEqual(MayaCmds.getAttr(nodes1[i] + '.ty'), MayaCmds.getAttr(nodes2[i] + '.ty'), 4) self.failUnlessAlmostEqual(MayaCmds.getAttr(nodes1[i] + '.tz'), MayaCmds.getAttr(nodes2[i] + '.tz'), 4)
def verifyProps(self, root, nodeName, wfgAndMoblur): # write to files if wfgAndMoblur: # reset __files so we wont try to tear down files that dont exist self.__files = [self.__files[0]] MayaCmds.AbcExport(j='-atp SPT_ -fr 1 24 -wfg -frs -0.25 -frs 0.0 -frs 0.25 -root %s -file %s' % (root, self.__files[0])) else: MayaCmds.AbcExport(j='-atp SPT_ -fr 1 14 -root %s -file %s' % (root, self.__files[1])) MayaCmds.AbcExport(j='-atp SPT_ -fr 15 24 -root %s -file %s' % (root, self.__files[2])) subprocess.call(self.__abcStitcher + self.__files) # read file and verify data MayaCmds.AbcImport(self.__files[0], mode='open') t = 1 # frame 1 MayaCmds.currentTime(t, update=True) self.failUnlessEqual(0, MayaCmds.getAttr(nodeName + '.SPT_int8'), '%s.SPT_int8 != 0 at frame %d' % (nodeName, t)) self.failUnlessEqual(100, MayaCmds.getAttr(nodeName + '.SPT_int16'), '%s.SPT_int16 != 100 at frame %d' % (nodeName, t)) self.failUnlessEqual(1000, MayaCmds.getAttr(nodeName + '.SPT_int32'), '%s.SPT_int32 != 1000 at frame %d' % (nodeName, t)) self.failUnlessAlmostEqual(0.57777777, MayaCmds.getAttr(nodeName + '.SPT_float'), 4, '%s.SPT_float != 0.57777777 at frame %d' % (nodeName, t)) self.failUnlessAlmostEqual(5.045643545457, MayaCmds.getAttr(nodeName + '.SPT_double'), 7, '%s.SPT_double != 5.045643545457 at frame %d' % (nodeName, t)) t = 12 # frame 12 MayaCmds.currentTime(t, update=True) self.failUnlessEqual(8, MayaCmds.getAttr(nodeName + '.SPT_int8'), '%s.SPT_int8 != 8 at frame %d' % (nodeName, t)) self.failUnlessEqual(16, MayaCmds.getAttr(nodeName + '.SPT_int16'), '%s.SPT_int16 != 16 at frame %d' % (nodeName, t)) self.failUnlessEqual(32, MayaCmds.getAttr(nodeName + '.SPT_int32'), '%s.SPT_int32 != 32 at frame %d' % (nodeName, t)) self.failUnlessAlmostEqual(3.141592654, MayaCmds.getAttr(nodeName + '.SPT_float'), 4, '%s.SPT_float != 3.141592654 at frame %d' % (nodeName, t)) self.failUnlessAlmostEqual(3.1415926547, MayaCmds.getAttr(nodeName + '.SPT_double'), 7, '%s.SPT_double != 3.141592654 at frame %d' % (nodeName, t)) t = 24 # frame 24 MayaCmds.currentTime(t, update=True) self.failUnlessEqual(0, MayaCmds.getAttr(nodeName + '.SPT_int8'), '%s.SPT_int8 != 0 at frame %d' % (nodeName, t)) self.failUnlessEqual(100, MayaCmds.getAttr(nodeName + '.SPT_int16'), '%s.SPT_int16 != 100 at frame %d' % (nodeName, t)) self.failUnlessEqual(1000, MayaCmds.getAttr(nodeName + '.SPT_int32'), '%s.SPT_int32 != 1000 at frame %d' % (nodeName, t)) self.failUnlessAlmostEqual(0.57777777, MayaCmds.getAttr(nodeName + '.SPT_float'), 4, '%s.SPT_float != 0.57777777 at frame %d' % (nodeName, t)) self.failUnlessAlmostEqual(5.045643545457, MayaCmds.getAttr(nodeName + '.SPT_double'), 7, '%s.SPT_double != 5.045643545457 at frame %d' % (nodeName, t))
def testAnimWholeFrameGeoCameraReadWrite(self): name = createCamera() MayaCmds.currentTime(1, update=True) MayaCmds.setKeyframe(name[1], attribute='horizontalFilmAperture') MayaCmds.setKeyframe(name[1], attribute='focalLength') MayaCmds.setKeyframe(name[1], attribute='focusDistance') MayaCmds.setKeyframe(name[1], attribute='shutterAngle') MayaCmds.currentTime(24, update=True) MayaCmds.setKeyframe(name[1], attribute='horizontalFilmAperture', value=0.95) MayaCmds.setKeyframe(name[1], attribute='focalLength', value=40) MayaCmds.setKeyframe(name[1], attribute='focusDistance', value=5.4) MayaCmds.setKeyframe(name[1], attribute='shutterAngle', value=174.94) self.__files.append( util.expandFileName('testAnimWFGCameraReadWrite.abc')) # write to files MayaCmds.AbcExport( j='-fr 1 24 -frs -0.25 -frs 0.0 -frs 0.25 -wfg -root %s -file %s' % (name[0], self.__files[-1])) # read from file MayaCmds.AbcImport(self.__files[-1], mode='import') camList = MayaCmds.ls(type='camera') for t in range(1, 25): MayaCmds.currentTime(t, update=True) if not util.compareCamera(camList[0], camList[1]): self.fail('%s and %s are not the same at frame %d' % (camList[0], camList[1], t))
def testWholeFrameGeo(self): self.createXformNode() self.createCubeNode() # Export [2, 4]{-0.2, 0, 0.2}:2 [10, 10]{-0.5, 0, 0.5} -wfg # i.e. xform: 1.8, 2, 2.2, 3.8, 4, 4.2, 9.5, 10, 10.5 # geometry: 2, 4, 10 __builtins__['framesList'] = [] self.__files.append(util.expandFileName('testWholeFrameGeos.abc')) MayaCmds.AbcExport(j='-fr 2 4 -s 2 -frs -0.2 -frs 0 -frs 0.2 -fr 10 10 -frs -0.5 -frs 0 -frs 0.5 -wfg -root test -pfc framesList.append(#FRAME#) -file ' + self.__files[-1]) self.failUnlessEqual(framesList, [1.8, 2, 2.2, 3.8, 4, 4.2, 9.5, 10, 10.5]) # Import MayaCmds.AbcImport(self.__files[-1], mode='open') # Test sampling xform points self.failUnlessXformValuesEqual([(1.8, 14), (2, 15), (2.2, 16), (3.8, 20), (4, 20), (4.2, 20), (9.5, 20), (10, 20), (10.5, 15)]) # Test not-sampled xform points self.failUnlessXformValuesEqual([(2.8, 17.5), (3, 18), (3.2, 18.5)]) # lerp # Test sampling mesh points self.failUnlessCubeWidthEqual([(2, 20), (4, 20), (10, 20)]) # Test not-sampled cube points # No subsample for the cube self.failUnlessCubeWidthEqual([(2.2, 20), (3.8, 20), (4.2, 20)])
def testStep(self): self.createXformNode() # Export [1, 10]:5 [100, 200]:10 __builtins__['framesList'] = [] self.__files.append(util.expandFileName('testStepRanges.abc')) MayaCmds.AbcExport( j='-fr 0 10 -s 5 -fr 100 200 -s 10 -root test -pfc framesList.append(#FRAME#) -file ' + self.__files[-1]) referenceList = [] for i in range(0, 11, 5): referenceList.append(i) for i in range(100, 201, 10): referenceList.append(i) self.failUnlessEqual(framesList, referenceList) # Import MayaCmds.AbcImport(self.__files[-1], mode='open') # Test sampling points self.failUnlessXformValuesEqual([(0, 10), (5, 20), (10, 20), (100, 20), (110, 20), (200, 10)]) # Test not-sampled points self.failUnlessXformValuesEqual([(2.5, 15)]) # lerp
def testStaticVisibility(self): poly1 = MayaCmds.polyPlane(sx=2, sy=2, w=1, h=1, ch=0)[0] group1 = MayaCmds.group() group2 = MayaCmds.createNode("transform") MayaCmds.select(group1, group2) group3 = MayaCmds.group() group4 = (MayaCmds.duplicate(group1, rr=1))[0] group5 = MayaCmds.group() MayaCmds.select(group3, group5) root = MayaCmds.group(name='root') MayaCmds.setAttr(group1 + '.visibility', 0) MayaCmds.setAttr(group2 + '.visibility', 0) MayaCmds.setAttr(group5 + '.visibility', 0) self.__files.append(util.expandFileName('staticVisibilityTest.abc')) MayaCmds.AbcExport(j='-wv -root %s -file %s' % (root, self.__files[-1])) MayaCmds.AbcImport(self.__files[-1], m='open') self.failIf(MayaCmds.getAttr(group1 + '.visibility')) self.failIf(MayaCmds.getAttr(group2 + '.visibility')) self.failIf(MayaCmds.getAttr(group5 + '.visibility')) self.failUnless(MayaCmds.getAttr(group1 + '|' + poly1 + '.visibility')) self.failUnless(MayaCmds.getAttr(group4 + '|' + poly1 + '.visibility')) self.failUnless(MayaCmds.getAttr(group3 + '.visibility')) self.failUnless(MayaCmds.getAttr(group4 + '.visibility')) self.failUnless(MayaCmds.getAttr(root + '.visibility'))
def _importSingleCache(self, folderPath, parentGrp, cacheName): """ Function to import the alembics and parent them to the right group @param folderPath: Path to the folder for the caches to import @param parentGrp: The name of the group to parent the alembics to. @type folderPath: String @type parentGrp: String """ try: findLatest = max(os.listdir(folderPath)) except: findLatest = [] if findLatest: try: cmds.AbcImport('%s/%s' % (folderPath, findLatest), reparent = parentGrp, setToStartFrame = True) self._createSets() except RuntimeError: cmds.warning('Failed to import cache! %s/%s' % (folderPath, findLatest)) ## Now add the version number to the grp versionNumber = findLatest.split('.')[-2].split('v')[-1] self._addVersionTag('%s' % cacheName, versionNumber) else: cmds.warning('Nothing published for %s !' % cacheName)
def verifyProps(self, nodeName, fileName): MayaCmds.AbcImport(fileName, mode='open') self.failUnlessEqual(8, MayaCmds.getAttr(nodeName+'.SPT_int8')) self.failUnlessEqual(16, MayaCmds.getAttr(nodeName+'.SPT_int16')) self.failUnlessEqual(32, MayaCmds.getAttr(nodeName+'.SPT_int32')) self.failUnlessAlmostEqual(3.2654, MayaCmds.getAttr(nodeName+'.SPT_float'), 4) self.failUnlessAlmostEqual(0.15724757, MayaCmds.getAttr(nodeName+'.SPT_double'), 7) self.failUnlessEqual('vtx', MayaCmds.getAttr(nodeName+'.SPT_double_AbcGeomScope')) self.failUnlessEqual('empty', MayaCmds.getAttr(nodeName+'.SPT_string')) self.failUnlessEqual(0, MayaCmds.attributeQuery( 'SPT_string_AbcGeomScope', node=nodeName, exists=True)) self.failUnlessEqual([6, 7, 8, 9, 10], MayaCmds.getAttr(nodeName+'.SPT_int32_array')) self.failUnlessEqual(["string1", "string2", "string3"], MayaCmds.getAttr(nodeName+'.SPT_string_array')) self.failUnlessEqual([1.1, 2.2, 3.3, 4.4, 5.5], MayaCmds.getAttr(nodeName+'.SPT_double_array')) self.failUnlessEqual([(1.0, 1.0, 0.0), (2.0, 2.0, 0.0), (3.0, 3.0, 0.0)], MayaCmds.getAttr(nodeName+'.SPT_vector_array')) self.failUnlessEqual('normal2', MayaCmds.getAttr(nodeName+'.SPT_vector_array_AbcType')) self.failUnlessEqual([(2.0, 4.0, 6.0, 1.0), (20.0, 40.0, 60.0, 1.0)], MayaCmds.getAttr(nodeName+'.SPT_point_array'))
def testSubD(self): trans = MayaCmds.polyPlane(n='plane', sx=1, sy=1, ch=False)[0] shape = MayaCmds.pickWalk(d='down')[0] MayaCmds.addAttr(attributeType='bool', defaultValue=1, keyable=True, longName='SubDivisionMesh') MayaCmds.select(trans + '.vtx[0:3]', r=True) MayaCmds.move(0, 1, 0, r=True) MayaCmds.currentTime(1, update=True) MayaCmds.setKeyframe() MayaCmds.currentTime(2, update=True) MayaCmds.move(0, 5, 0, r=True) MayaCmds.setKeyframe() self.__files.append(util.expandFileName('testSubDInterpolation.abc')) MayaCmds.AbcExport(j='-fr 1 2 -root %s -file %s' % (trans, self.__files[-1])) MayaCmds.AbcImport(self.__files[-1], mode='open') MayaCmds.currentTime(1.004, update=True) ty = MayaCmds.getAttr(shape + '.vt[0]')[0][1] self.failUnlessAlmostEqual(1.02, ty) setTime = MayaCmds.currentTime(1.422, update=True) alpha = (setTime - 1) / (2 - 1) ty = MayaCmds.getAttr(shape + '.vt[0]')[0][1] self.failUnlessAlmostEqual(ty, (1 - alpha) * 1.0 + alpha * 6.0, 3)
def import_abc(abc_file): load_plugin() if os.path.isfile(abc_file): mc.AbcImport(abc_file, mode='import') print "[OF] info: abc import successful" else: print "[OF] info: %s is not an exist file" % abc_file
def testAnimIKRW(self): name = createJoints() handleName = MayaCmds.ikHandle(sj=name, ee='joint4')[0] MayaCmds.currentTime(1, update=True) MayaCmds.setKeyframe(handleName, breakdown=0, hierarchy='none', controlPoints=False, shape=False) MayaCmds.currentTime(16, update=True) MayaCmds.move(-1.040057, -7.278225, 6.498725, r=True) MayaCmds.setKeyframe(handleName, breakdown=0, hierarchy='none', controlPoints=False, shape=False) self.__files.append(util.expandFileName('testAnimIKRW.abc')) self.__files.append(util.expandFileName('testAnimIKRW01_08.abc')) self.__files.append(util.expandFileName('testAnimIKRW09-16.abc')) # write to files MayaCmds.AbcExport(j='-fr 1 8 -root %s -f %s' % (name, self.__files[-2])) MayaCmds.AbcExport(j='-fr 9 16 -root %s -f %s' % (name, self.__files[-1])) MayaCmds.select(name) MayaCmds.group(name='original') subprocess.call(self.__abcStitcher + self.__files[-3:]) # read from file MayaCmds.AbcImport(self.__files[-3], mode='import') # make sure the translate and rotation are the same nodes1 = ["|original|joint1", "|original|joint1|joint2", "|original|joint1|joint2|joint3", "|original|joint1|joint2|joint3|joint4"] nodes2 = ["|joint1", "|joint1|joint2", "|joint1|joint2|joint3", "|joint1|joint2|joint3|joint4"] for t in range(1, 25): MayaCmds.currentTime(t, update=True) for i in range(0, 4): self.failUnlessAlmostEqual(MayaCmds.getAttr(nodes1[i]+'.tx'), MayaCmds.getAttr(nodes2[i]+'.tx'), 4) self.failUnlessAlmostEqual(MayaCmds.getAttr(nodes1[i]+'.ty'), MayaCmds.getAttr(nodes2[i]+'.ty'), 4) self.failUnlessAlmostEqual(MayaCmds.getAttr(nodes1[i]+'.tz'), MayaCmds.getAttr(nodes2[i]+'.tz'), 4)