#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)
playBlastClass
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 黑色的海岛上悬着一轮又大又圆的明月,毫不嫌弃地把温柔的月色照在这寸草不生的小岛上。一个少年白衣白发,悠闲自如地倚坐...