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)







©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容