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'))
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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))
Exemplo n.º 4
0
    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))
Exemplo n.º 5
0
    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))
Exemplo n.º 7
0
    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)])
Exemplo n.º 8
0
    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)
Exemplo n.º 10
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)
Exemplo n.º 11
0
    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)
Exemplo n.º 12
0
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)
Exemplo n.º 13
0
    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)
Exemplo n.º 14
0
    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)
Exemplo n.º 15
0
    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
Exemplo n.º 16
0
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)
Exemplo n.º 17
0
	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)
Exemplo n.º 18
0
    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)
Exemplo n.º 20
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)
Exemplo n.º 21
0
    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))
Exemplo n.º 22
0
    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))
Exemplo n.º 23
0
    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)])
Exemplo n.º 24
0
    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
Exemplo n.º 25
0
    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'))
Exemplo n.º 26
0
	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)
Exemplo n.º 27
0
 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)
Exemplo n.º 29
0
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
Exemplo n.º 30
0
    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)