playBlastClass

#coding=UTF-8
import maya.cmds as mc
import os
import json
import animTrans
class customPB():
    def __init__(self):
        self.data = {}
        self.debugMess = {}
        self.data['curPath'] = 'C:\\Users\\Administrator\\Documents\\maya\\2017\\scripts\\PlayBlast\\output'
        self.dataPath = self.data['curPath'] + '\\data\\tempdata.txt'
        self.debugPath = self.data['curPath'] + '\\data\\debug.txt'
        self.data['fileNam'] = self.getfNam()
        self.data['forceOW'] = True
        self.data['format'] = 'qt'
        self.data['compression'] = 'H.264'
        self.data['frame'] = self.getFrame(0)
        self.data['framePadding'] = 4
        self.data['percent'] = 100
        self.data['quality'] = 70
        self.data['clearCach'] = True
        self.data['startTime'] = self.getFrame(1)
        self.data['endTime'] = self.getFrame(2)
        self.data['camList'] = self.getCamList()
        self.data['currentCam'] = None

        self.data['isdebug'] = False
        self.data['isPB'] = False
        self.data['countConst'] = True
        self.refPath = []      #JMref  fullPathName
        self.refGMList = []    #GM refnode name
        self.data['refList'] = self.analyScane()  # refnode name




    def analyScane(self):
        '''
        self.refPath中记录了初始简模ref的带路径 长名
        return的temprefList则包含的是ref node的名字
        '''
        tempList = []
        temprefList = mc.ls(type='reference')
        for i in temprefList:
            if i.startswith('JS'):
                tempList.append(i)
                tempRefPath = mc.referenceQuery(i,filename=True)
                self.refPath.append(tempRefPath)

        return tempList
    def saveData(self,ind):
        if ind == 0:
            try:
                with open(self.dataPath,'w') as fout:
                    json.dump(self.data,fout)
            except:
                print('数据写入出错')

        elif ind == 1:
            try:
                with open(self.debugPath,'w') as fout:
                    json.dump(self.debugMess,fout)
            except:
                print('debug信息写入出错')

    def getData(self):
        try:
            with open(self.dataPath,'r') as fin:
                data = json.load(fin)
        except:
            print('数据读取出错')
        tempList = data.keys()
        for i in range(len(tempList)):
            if data[tempList[i]] and data[tempList[i]] != self.data[tempList[i]]:
                self.data[tempList[i]] = data[tempList[i]]
        del self.refPath[:]
        for i in self.data['refList']:
            tempRefPath = mc.referenceQuery(i,filename=True)
            self.refPath.append(tempRefPath)
    def execute(self): 

        if self.refPath:
            ind = 0
            for i in self.refPath:
                GMpath = self.JmToGm(i)
                tempGMnode = self.cutNam(GMpath)
                GMNS = tempGMnode[:-3] + str(ind)
                self.refGMList.append(GMNS+'RN')
                mc.file(GMpath,r=True,ns=GMNS)
                ind += 1

        #u'JS_HZ_hongpiyi_RigFace_GMRN1'        refList include   JS_HZ_hongpiyi_RigFace_JMRN
        self.refList1 = []
        self.refList2 = []
        self.refList1.extend(self.data['refList'])
        self.refList2.extend(self.refGMList)

        for i in range(len(self.data['refList'])):
            self.refList1[i] = animTrans.BindConData()
            self.refList2[i] = animTrans.BindConData()
            self.refList1[i].isdebug = self.data['isdebug']
            self.refList2[i].isdebug = self.data['isdebug']
            self.refList1[i].iskey = True
            self.refList1[i].countConst = self.data['countConst']
            self.refList2[i].countConst = self.data['countConst']
            self.refList1[i].objfilter(self.data['refList'][i])
            self.refList2[i].objfilter(self.refGMList[i])
            self.refList1[i].transData(self.refList2[i])
            self.refList1[i].preTrans(self.refList2[i])
            self.refList1[i].unloadRef(self.data['refList'][i])

        if self.data['isPB']:
            self.playblast()

    def getfNam(self):
        FNam = mc.file(sn=True,shn=True,query=True)
        return FNam[:-3]


    def getFrame(self,ind):
        if ind == 0:
            return mc.currentTime(query=True)
        elif ind == 1:
            return mc.playbackOptions(query=True,minTime=True)
        elif ind == 2:
            return mc.playbackOptions(query=True,maxTime=True)

    def getCamList(self):
        '''
        获取当前场景中所有摄像机
        '''
        tempCamList = mc.ls(type='camera')

        return tempCamList

    def playblast(self):
        # if self.data['currentCam']:
        #     curcam = self.data['currentCam']
            # mypanel = mc.modelPanel()
            # mc.modelPanel(mypanel,e=True,cam=curcam)
        try:
            mc.playblast(f=self.data['fileNam'],fmt = self.data['format'],c = self.data['compression'],p = self.data['percent'],\
                        qlt = self.data['quality'],st=self.data['startTime'],et=self.data['endTime'],\
                        v=False,fp=self.data['framePadding'],cc=self.data['clearCach'])
        except:
            print('playblast run error')

    def setFileNam(self,name):
        '''
        输入的name 为 带路径的全名
        '''
        self.data['fileNam'] = name
    def setForceOW(self,val=True):
        self.data['forceOW'] = val
    def setFormat(self,val = 'qt'):
        self.data['format'] = val
    def setCompression(self,val='H.264'):
        self.data['compression'] = val
    def setFrame(self,val=0):
        self.data['frame'] = val
    def setFramePadding(self,val=4):
        self.data['framePadding'] = val
    def setPercent(self,val=100):
        self.data['percent'] = val
    def setQuality(self,val=70):
        self.data['quality'] = val
    def setClearCach(self,val=True):
        self.data['clearCach'] = val
    def setStartTime(self,val=0):
        self.data['startTime'] = val
    def setEndTime(self,val=1):
        self.data['endTime'] = val
    def JmToGm(self,jmpath):
        ind = jmpath.rfind('JM')
        gmpath = jmpath[:ind]+'GM.mb'
        return gmpath
    def cutNam(self,oldstr):
        ind = oldstr.rfind('/')
        ind+=1
        return oldstr[ind:]
    def closeMaya(self):
        mc.quit(force=True)

    def saveasMaya(self):
        nam = mc.file(query=True,sn=True)
        newNam = nam[:-3]+'_new'+nam[-3:]
        mc.file(rn=newNam)
        mc.file(s=True)
        mc.quit(force=True)







©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 渐变的面目拼图要我怎么拼? 我是疲乏了还是投降了? 不是不允许自己坠落, 我没有滴水不进的保护膜。 就是害怕变得面...
    闷热当乘凉阅读 4,349评论 0 13
  • 感觉自己有点神经衰弱,总是觉得手机响了;屋外有人走过;每次妈妈不声不响的进房间突然跟我说话,我都会被吓得半死!一整...
    章鱼的拥抱阅读 2,210评论 4 5
  • 夜莺2517阅读 127,761评论 1 9
  • 版本:ios 1.2.1 亮点: 1.app角标可以实时更新天气温度或选择空气质量,建议处女座就不要选了,不然老想...
    我就是沉沉阅读 6,961评论 1 6