#coding=UTF-8
import re
import os
import maya.OpenMaya as OpenMaya
import maya.cmds as cmds
import maya.mel as mm
import xlrd
class check_in:
def init(self):
# self.project = project
# self.seq = seq
# self.shot = shot
# self.s_frame = start_frame
# self.e_frame = end_frame
self.regdit = r'^\b[a-zA-Z]+\d*$'
#self.lay_regdit = r'^\b[a-zA-Z]+\d*$'
self.error = []
# def outlinesCheck(self,*args):
# #大纲模型部分
# cmds.select(all=True)
# b = cmds.ls(sl=True)
# t = []
# for i in b:
# if i[-3:] == 'all':
# t.append(i)
# cmds.select(t)
# sel = cmds.ls(sl=True)
# l = []
# if len(sel) == 1:
# for i in sel:
# spl = i.split('_')
# if spl[0] == 'pipilu' and spl[-1] == 'all':
# dn = cmds.pickWalk(i,d='down')
# l = l + dn
# a = 0
# while a < 10:
# rg = cmds.pickWalk(d='right')
# l = l + rg
# a += 1
# l = set(l)
# l = list(l)
# print l
# for gl in l:
# if gl.split('_')[-1] == 'mod':
# pass
# elif gl.split('_')[-1] == 'rig':
# pass
# elif gl.split('_')[-1] == 'other':
# pass
# elif gl.split('_')[-1] == 'other_grp':
# pass
# else:
# self.error.append('缺少正确的内部组命名')
# else:
# self.error.append('缺少正确的组命名')
# else:
# self.error.append('大纲未整理')
# print "outlinesCheck complete"
def cleanup(self,*args):
#检查模型面
try:
cmds.select(all=True)
cmd = r'polyCleanupArgList 3 { "0","2","1","0","1","0","1","0","0","1e-005","0","1e-005","0","1e-005","0","1","1" }'
result = mm.eval(cmd)
if result==[]:
pass
else:
self.error.append('模型有五边面或非法面')
print "cleanup complete"
except:
pass
def check_face_shade(self,*args):
#检查面材质,或模型有无材质
try:
cmds.select(all=True)
cmds.select(hi=True )
a = cmds.ls(sl=True,type="mesh")
g = cmds.pickWalk(a,d="up")
l = []
for i in g:
getSGs = cmds.listConnections(cmds.listRelatives(i, shapes=1, f=1)[0], destination=1, source=0, plugs=0, s=1, type="shadingEngine")
if len(getSGs) == 1:
pass
else:
self.error.append('模型有面材质或无材质')
for ig in getSGs:
if ig == 'initialShadingGroup':
self.error.append('还有模型是lamber1材质')
print "check_face_shade complete"
except:
pass
def layers(self,*args):
renderLayer = cmds.ls(type='renderLayer')
aniLayer = cmds.ls(type='animLayer')
dispLayer = cmds.ls(type='displayLayer')
check_layer = []
#print "1:",renderLayer,"2",aniLayer,"3:",dispLayer
renderLayer.remove('defaultRenderLayer')
dispLayer.remove('defaultLayer')
try:
dispLayer.remove('gaoguang')
except:
pass
for re in renderLayer:
try:
cmds.delete(re)
except:
pass
for al in aniLayer:
try:
cmds.delete(al)
except:
pass
for dp in dispLayer:
try:
cmds.delete(dp)
except:
pass
if len(renderLayer) != 0:
self.error.append('有多余的渲染层,多余前缀名,打开Namescape删除')
if len(aniLayer) != 0:
self.error.append('有多余的动画层')
if len(dispLayer) != 0:
self.error.append('有多余的layer层,多余前缀名,打开Namescape删除')
print "layers complete"
def Map_path_Check(self,*args):
files = cmds.ls(type="file")
for fi in files:
ps = cmds.getAttr("%s.fileTextureName"%fi)
if ps.startswith('X:/PIPILU/Season01') == True:
pass
else:
self.error.append('%s贴图路径不正确'%ps)
if os.path.exists(ps) == True:
pass
else:
self.error.append('%s文件不存在'%ps)
def cameras(self,*args):
sqcam = []
cam = cmds.ls(ca = True)
for item in cam:
if item.startswith("cam_sq") or item.startswith("cam_ep"):
srctm = cmds.pickWalk(item,d="up")
for ig in srctm:
sqcam.append(ig)
try:
cmds.rename(item,"%sShape"%ig)
except:
pass
if len(sqcam) == 0:
self.error.append('缺少正确的摄像机命名')
elif len(sqcam) > 1:
self.error.append('有多余的摄像机')
print "cameras complete"
def refereceName(self,*args):
rl = cmds.ls(rf=True)
ts = ''
item = ""
for i in rl:
try:
if cmds.referenceQuery(i,isLoaded=True ) == False:
fg = cmds.referenceQuery(i,filename=True )
cmds.file(fg,loadReferenceDepth="asPrefs",loadReference=i)
except RuntimeError:
pass
try:
nazl = cmds.referenceQuery(i,namespace=True )[1:]
if type(nazl[-1]) == int:
try:
a = int(nazl[-3])
ng = nazl[0:-3]
except:
try:
a = int(nazl[-2])
ng = nazl[0:-2]
except:
try:
a = int(nazl[-1])
ng = nazl[0:-1]
except:
ng = nazl
else:
ng = nazl
fileName = cmds.referenceQuery(i,filename=True)
fn = fileName.split("/")[-1]
ft = fn.split(".")[0]
fg = ft.split("_")
if fg[3] == "RD":
na = fg[2]
elif fg[4] == "RD":
na = fg[2]+"_"+fg[3]
elif fg[5] == "RD":
na = fg[2]+"_"+fg[3]+"_"+fg[4]
if ng == na:
pass
else:
self.error.append('有不正确的参考命名')
cmds.file(fileName,e=True,namespace=na)
except:
pass
print "refereceName complete"
def checkFrames(self,*args):
patha = cmds.file(sceneName=True,q=True)
cmds.currentUnit( time='pal' )
filea = patha.split("/")[-1]
pafi = filea.split(".")[0]
try:
ep = pafi.split("_")[0][-4:]
pgpg = pafi.split("_")[1]
except:
pass
print ep
try:
self.xls(ep)
except:
cmds.warning( "使用正确的文件命名".decode('utf-8').encode('gbk') )
get_end_frame = cmds.playbackOptions(q=True,max=True)
# cmds.playbackOptions( min=101)
# cmds.playbackOptions( max=100+self.xlrddic[pgpg])
def xls(self,ep):
#xls文件生成字典
data = xlrd.open_workbook('X:/PIPILU/Season01/PA/%s.xlsx'%ep) # 打开xls文件
table = data.sheets()[0] # 打开第一张表
nrows = table.nrows # 获取表的行数
ncols = table.ncols # 获取表的列数
for i in range(ncols): # 循环逐列打印
t = table.col_values(i)[0]
if t == u'Shot': # 镜头号
scxlrd = table.col_values(i)[1:]
elif t == u'帧数': #结束帧
maxxlrd = table.col_values(i)[1:]
s = 0
self.xlrddic = {}
while s < len(scxlrd):
self.xlrddic[scxlrd[s]] = maxxlrd[s]
s += 1
def clearShape(self,*args):
try:
nodes = cmds.ls(type='transform')
for node in nodes:
shapes = cmds.listRelatives(node,s=1,f=1,ni=1)
if shapes!=None and len(shapes)>1:
shapes.pop(0)
cmds.delete(shapes)
except:
self.error.append('清理多余shape节点出错')
print "clearShape complete"
def deleteUnknow(self,*args):
try:
allUnknow = cmds.ls(dep=True)
if allUnknow:
for n in allUnknow:
try:
node_type = cmds.nodeType(n)
# TODO: No object matches name: rmanFinalGlobals
# so use try and except to catch this
except:
pass
else:
if( node_type == 'unknown' ):
try:
cmds.lockNode(n, l=False)
cmds.delete(n)
except Exception:
cmds.error('can not delete%s' % n)
except:
self.error.append('清理垃圾节点出错')
print "deleteUnknow complete"
def deletelights(self,*args):
cmds.select("defaultLightSet",r=True,ne=True)
cmds.pickWalk(d="down")
try:
cmds.delete()
except:
pass
print "deletelights complete"
def outlinesCheckrig(self,*args):
cmds.select(all=True)
cmds.DeleteHistory()
print "outlinesCheckrig complete"
def makeIdentityCenterPivot(self,*args):
try:
mnl = cmds.ls(type=('mesh','nurbsSurface'))
sl = cmds.pickWalk(mnl,d="up")
cmds.select(sl)
cmds.makeIdentity(apply=True,t=1,r=1,s=1,n=0,pn=1,jointOrient=0)
cmds.CenterPivot()
cmds.select(cl=True)
except:
self.error.append('有被锁定的模型或关联复制')
print "makeIdentityCenterPivot complete"
def check_the_rename(self,*args):
cmds.select(all=True)
b = cmds.ls(sl=True)
t = []
for i in b:
if i[-3:] == 'all':
t.append(i)
cmds.select(t)
cmds.select(hi=True )
a = cmds.ls(sl=True)
l = []
for i in a:
if i.find("|") != -1:
l.append(i)
for i in a:
if i.find(":") != -1:
l.append(i)
if len(l) == 0:
cmds.select(cl=True)
else:
cmds.select(l)
self.error.append('选中物体为重命名物体')
print "check_the_rename complete"
def Modify_Shape_Name(self,*args):
s=0
cmds.select(all=True)
cmds.select(hi=True )
a = cmds.ls(sl=True,type="mesh")
b = cmds.pickWalk(a,d="up")
for i in a:
cmds.rename(i,"%sShape"%b[s])
s=s+1
print "Modify_Shape_Name complete"
def deleteTurtle(self,*args):
tbl = ["TurtleRenderOptions","TurtleUIOptions","TurtleBakeLayerManager","TurtleDefaultBakeLayer"]
for i in tbl:
try:
cmds.lockNode(i,lock=False)
cmds.delete(i)
except:
pass
print "deleteTurtle complete"
def deleteWin(self,*args):
wins = cmds.lsUI(wnd=True)
if wins:
for x in wins :
try:
if (cmds.window(x, q=True, vis=True) and x != 'MayaWindow') :
# print x
# remove scriptEditor will cause maya crash ,so set scriptEditorPanel1Window vis to false
if x != 'scriptEditorPanel1Window' :
try:
cmds.deleteUI(x, window=True)
except:
cmds.error('delete window %s error' % x)
else:
# close scriptEditor
cmds.window(x, e=True, vis=False)
except Exception:
pass
print "deleteWin complete"
def checkUV(self,*args):
objs = cmds.ls(type='mesh')
for obj in objs:
auv = cmds.polyUVSet(obj, q=1, auv=1)
if len(auv)>1:
self.error.append(('%s存在多个UVSet'%obj))
print "checkUV complete"
def checkNormals(self,*args):
self.error.append('仔细检查法线是否正确')
print "checkNormals complete"
def checkHypershade(self,*args):
mm.eval('hyperShadePanelMenuCommand("hyperShadePanel1", "deleteUnusedNodes");')
print "checkHypershade complete"
def oneandfour(self,*args):
mm.eval('DisplayWireframe')
print "oneandfour complete"
def one_c(self,*args):
cmds.select(all=True)
cmds.displaySmoothness(divisionsU=0,divisionsV=0,pointsWire=4,pointsShaded=1,polygonObject=1)