check_mode.py

#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)   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值