传递set in maya

#coding:utf-8

import maya.cmds as cmds
import math
import datetime
import pymel.core as pm

UVS_OpenFlag = [1]
UVS_matchingConditions = [1, 0, 0, 0]
UVS_transformOption = [0, 1]
orgOBJ = []
TargetOBJ = []
UVS_sourTF = ‘UVS_sourTF’
UVS_TargetTF = ‘UVS_TargetTF’

def UV_Shader_TransfWin():
global UVS_OpenFlag
global UVS_matchingConditions
global UVS_transformOption
global orgOBJ
global TargetOBJ

cmds.window('UV_Shader_TransfWin', t='Batch Transform UV&Shader')
cmds.columnLayout('UVS_MainCL', adj=1, p='UV_Shader_TransfWin')
cmds.frameLayout('UVS_FirstFrame', p='UVS_MainCL', l='匹配条件'.decode('utf-8').encode('gbk'), bs='etchedOut')
cmds.rowLayout('First_row', nc=2, cw2=(120, 350), p='UVS_FirstFrame')
cmds.checkBox('VEF_CB', l='Vertex  Edge  Face', v=UVS_matchingConditions[0], p='First_row', w=120, cc='UVS_matchingConditions[0] = cmds.checkBox("VEF_CB",q = 1,v = 1)')
cmds.rowLayout('Thr_row', nc=3, cw3=(100, 100, 150), p='First_row')
cmds.checkBox('BB_CB', l='BoundingBox', p='Thr_row', w=100, v=UVS_matchingConditions[1], cc='UVS_matchingConditions[1] = cmds.checkBox("BB_CB",q = 1,v = 1)')
cmds.checkBox('Pos_CB', l='Position', p='Thr_row', w=100, v=UVS_matchingConditions[2], cc='UVS_matchingConditions[2] = cmds.checkBox("Pos_CB",q = 1,v = 1)')
cmds.checkBox('Name_CB', l='Name Without Prefix', p='Thr_row', w=150, v=UVS_matchingConditions[3], cc='UVS_matchingConditions[3] = cmds.checkBox("Name_CB",q = 1,v = 1)')
cmds.frameLayout('UVS_SecFrame', p='UVS_MainCL', l='传递选项'.decode('utf-8').encode('gbk'), bs='etchedOut')
cmds.rowLayout('Fourth_row', nc=2, cw2=(100, 100), p='UVS_SecFrame')
cmds.checkBox('UV_CB', l='UV', v=UVS_transformOption[0], p='Fourth_row', w=100, cc='UVS_transformOption[0] = cmds.checkBox("UV_CB",q = 1,v = 1)')
cmds.checkBox('Shader_CB', l='Shader', v=UVS_transformOption[1], p='Fourth_row', w=100, cc='UVS_transformOption[1] = cmds.checkBox("Shader_CB",q = 1,v = 1)')
cmds.separator(p='UVS_MainCL')
cmds.progressBar('UVS_prgBar', maxValue=100, h=10, p='UVS_MainCL')
cmds.separator(p='UVS_MainCL')
cmds.text('UVS_returnInfo', p='UVS_MainCL', l='')
cmds.separator(p='UVS_MainCL')
cmds.rowLayout('source_row', nc=5, cw5=(150, 30, 30, 30, 520), p='UVS_MainCL')
cmds.button(l='导入原始物体>>'.decode('utf-8').encode('gbk'), c=UVS_importObjects(0), bgc=[0.2, 0.2, 0.2], w=150, p='source_row')
cmds.button(l=u'+', c=UVS_addRemoveObjects(1,1), bgc=[0.2, 0.2, 0.2], w=30, p='source_row')
cmds.button(l=u'-', c=UVS_addRemoveObjects(0,1), bgc=[0.2, 0.2, 0.2], w=30, p='source_row')
cmds.text('UVS_sourNum', p='source_row', l=str(len(orgOBJ)), w=30, bgc=[0.2, 0.2, 0.2])
cmds.textField(UVS_sourTF, ed=0, p='source_row', tx=str(orgOBJ), w=520)
cmds.separator(p='UVS_MainCL')
cmds.rowLayout('Target_row', nc=5, cw5=(150, 30, 30, 30, 520), p='UVS_MainCL')
cmds.button(l='导入目标物体>>'.decode('utf-8').encode('gbk'), c=UVS_importObjects(1), bgc=[0.5, 0, 0], w=150, p='Target_row')
cmds.button(l=u'+', c=UVS_addRemoveObjects(1,0), bgc=[0.5, 0, 0], w=30, p='Target_row')
cmds.button(l=u'-', c=UVS_addRemoveObjects(0,0), bgc=[0.5, 0, 0], w=30, p='Target_row')
cmds.text('UVS_TargetNum', l=str(len(TargetOBJ)), p='Target_row', w=30, bgc=[0.5, 0, 0])
cmds.textField(UVS_TargetTF, ed=0, tx=str(TargetOBJ), p='Target_row', w=520)
cmds.separator(p='UVS_MainCL')
cmds.setParent( '..' ) 
cmds.button(p='UVS_MainCL', l='开始传递'.decode('utf-8').encode('gbk'), c=UVS_startTransfom)
cmds.button(p='UVS_MainCL', l='检查重命名'.decode('utf-8').encode('gbk'), c=check_the_rename)
cmds.button(p='UVS_MainCL', l='清理UV历史'.decode('utf-8').encode('gbk'), c=chearUVHistory)
cmds.showWindow('UV_Shader_TransfWin')

def UVS_addRemoveObjects(UVS_editMode, UVS_ObjectType_AR,*args):
getSelOBJ = cmds.ls(sl=1)
screenObj = cmds.filterExpand(sm=12)
if UVS_ObjectType_AR == 1:
if UVS_editMode == 1:
for i in screenObj:
if i not in orgOBJ:
orgOBJ.append(i)
elif UVS_editMode == 0:
for i in screenObj:
if i in orgOBJ:
orgOBJ.remove(i)
cmds.textField(‘UVS_sourTF’, e=1, tx=str(orgOBJ))
cmds.text(‘UVS_sourNum’, e=1, l=str(len(orgOBJ)))
elif UVS_ObjectType_AR == 0:
if UVS_editMode == 1:
for i in screenObj:
if i not in TargetOBJ:
TargetOBJ.append(i)
elif UVS_editMode == 0:
for i in screenObj:
if i in TargetOBJ:
TargetOBJ.remove(i)
cmds.textField(‘UVS_TargetTF’, e=1, tx=str(TargetOBJ))
cmds.text(‘UVS_TargetNum’, e=1, l=str(len(TargetOBJ)))

def UVS_importObjects(UVS_objectType,*args):
getSelOBJ = cmds.ls(sl=1)
screenObj = cmds.filterExpand(sm=12)
print(screenObj)
if UVS_objectType == 1:
cmds.textField(‘UVS_TargetTF’, e=1, tx=str(screenObj))
if screenObj == None:
cmds.text(‘UVS_TargetNum’, e=1, l=‘0’)
else :

        cmds.text('UVS_TargetNum', e=1, l=str(len(screenObj)))
        TargetOBJ[:] = []
        if screenObj != None:
            for i in screenObj:
                TargetOBJ.append(i)
else:
    cmds.textField('UVS_sourTF', e=1, tx=str(screenObj))
    if screenObj == None:
        cmds.text('UVS_sourNum', e=1, l='0')

    else :
        cmds.text('UVS_sourNum', e=1, l=str(len(screenObj)))
        orgOBJ[:] = []
        if screenObj != None:
            for i in screenObj:
                orgOBJ.append(i)

def UVS_startTransfom(*args):
global UVS_OpenFlag
global UVS_matchingConditions
global UVS_transformOption
global orgOBJ
global TargetOBJ

cmds.progressBar('UVS_prgBar', e=1, pr=0)
DupShader(orgOBJ)
cmds.text('UVS_returnInfo', e=1, bgc=[0, 0, 0], l='')
getTime = datetime.datetime(2011, 11, 01)
startTime = getTime.today()
# p = 1.0
prgValues = 0
prgValue = (1.0 / len(orgOBJ)) * 100.0
for i in orgOBJ:


    if UVS_matchingConditions[0]:
        getOrgVerts = cmds.polyEvaluate(i, v=1)
        getOrgEdges = cmds.polyEvaluate(i, e=1)
        getOrgFaces = cmds.polyEvaluate(i, f=1)

    if UVS_matchingConditions[1]:
        getOrgVerts = cmds.polyEvaluate(i, v=1)
        getOrgBB = cmds.xform(i, q=1, bb=1, ws=1)
        cacuOrgBBx = getOrgBB[3] - getOrgBB[0]
        cacuOrgBBy = getOrgBB[4] - getOrgBB[1]
        cacuOrgBBz = getOrgBB[5] - getOrgBB[2]
        cacuOrgBBx_m = (getOrgBB[0] + getOrgBB[3]) / 2.0
        cacuOrgBBy_m = (getOrgBB[1] + getOrgBB[4]) / 2.0
        cacuOrgBBz_m = (getOrgBB[2] + getOrgBB[5]) / 2.0

    for k in TargetOBJ:
        checkValue = 1
        if UVS_matchingConditions[0] and checkValue:
            getTargetVerts = cmds.polyEvaluate(k, v=1)
            getTargetEdges = cmds.polyEvaluate(k, e=1)
            getTargetFaces = cmds.polyEvaluate(k, f=1)
            if getOrgVerts != getTargetVerts or getOrgEdges != getTargetEdges or getOrgFaces != getTargetFaces:
                checkValue = 0
            else:
                checkValue = 1

        if UVS_matchingConditions[1] and checkValue:
            getTargetBB = cmds.xform(k, q=1, bb=1, ws=1)
            cacuTargetBBx = getTargetBB[3] - getTargetBB[0]
            cacuTargetBBy = getTargetBB[4] - getTargetBB[1]
            cacuTargetBBz = getTargetBB[5] - getTargetBB[2]
            if abs(cacuOrgBBx - cacuTargetBBx) > 0.001 or abs(cacuOrgBBy - cacuTargetBBy) > 0.001 or abs(cacuOrgBBz - cacuTargetBBz) > 0.001:
                checkValue = 0
            else:
                checkValue = 1
                Num = 0
                Orgdis = 0
                for p in xrange(getOrgVerts):
                    orgPointPos = cmds.pointPosition((i + '.vtx[' + str(p) + ']'), w=1)
                    if (abs(orgPointPos[0] - cacuOrgBBx_m) > 0.01 or cacuTargetBBx < 0.01) and (abs(orgPointPos[1] - cacuOrgBBy_m) > 0.01 or cacuTargetBBy < 0.01) and (abs(orgPointPos[2] - cacuOrgBBz_m) > 0.01 or cacuTargetBBz < 0.01):
                        Num = p
                        Orgdis = datatypes.length(datatypes.Array([orgPointPos[idx] - getOrgBB[idx] for idx in xrange(3)]))
                        break

                cacuTargetBBx_m = (getTargetBB[0] + getTargetBB[3]) / 2.0
                cacuTargetBBy_m = (getTargetBB[1] + getTargetBB[4]) / 2.0
                cacuTargetBBz_m = (getTargetBB[2] + getTargetBB[5]) / 2.0
                TargetPos = cmds.pointPosition((k + '.vtx[' + str(Num) + ']'), w=1)

                Targetdis = datatypes.length(datatypes.Array([TargetPos[idx] - getTargetBB[idx] for idx in xrange(3)]))
                if abs(Orgdis - Targetdis) > 0.001:
                    checkValue = 0
                else:
                    checkValue = 1

        if UVS_matchingConditions[2] and checkValue:
            getOrgPos = cmds.xform(i, q=1, ws=1, piv=1)
            getTargetPos = cmds.xform(k, q=1, ws=1, piv=1)
            if math.floor(getOrgPos[0]) != math.floor(getTargetPos[0]) or math.floor(getOrgPos[1]) != math.floor(getTargetPos[1]) or math.floor(getOrgPos[2]) != math.floor(getTargetPos[2]):
                checkValue = 0
            else:
                checkValue = 1 and checkValue

        if UVS_matchingConditions[3] and checkValue:
            splitTargetName = k.split(':')[-1]
            splitTargetNameAgain = splitTargetName.split('|')[-1]
            splitOrgName = i.split(':')[-1]
            splitOrgNameAgain = splitOrgName.split('|')[-1]
            if splitOrgNameAgain != splitTargetNameAgain:
                checkValue = 0
            else:
                checkValue = 1

        if checkValue:
            # print k
            if UVS_transformOption[0] == 1:
                cmds.polyTransfer(k, uv=1, ao=i)
                # try:
                    # cmds.bakePartialHistory( k,ppt=True )
                # except Exception,e:
                    # print '%s can not delete transfor history'%k
                # cmds.bakePartialHistory( k,ppt=True )
            if UVS_transformOption[1] == 1:
                getSGs = cmds.listConnections(cmds.listRelatives(i, shapes=1, f=1)[0], destination=1, source=0, plugs=0, s=1, type="shadingEngine")
                if len(getSGs) == 0:
                    print 'error'
                elif len(getSGs) == 1:
                    cmds.sets(cmds.listRelatives(k, shapes=1, f=1)[0], fe=getSGs[0])
                else:
                    for m in getSGs[0:]:
                        UVS_assignShaderToObj(i, k, m)
    prgValues += prgValue
    cmds.progressBar('UVS_prgBar', e=1, pr=math.ceil(prgValues))
    # p = p + 1
endTime = getTime.today()
espTime = str(endTime - startTime)
showInfo = u'%s' % espTime
cmds.text('UVS_returnInfo', e=1, bgc=[0.5, 0.7, 1.0], l=showInfo)

def UVS_assignShaderToObj(sourceObject, TargetObject, sourceSG):
getObjects = cmds.sets(sourceSG, q=1)
facesForShadering = []
try:
for m in getObjects:
if m.split(’.’)[0] == sourceObject:
facesForShadering.append(TargetObject + ‘.’ + m.split(’.’)[1])
if len(facesForShadering) > 0:
cmds.sets(facesForShadering, fe=sourceSG)
except TypeError:
pass

def DupShader(reObj):

allMat = []
for i in reObj:
    shadingGroups = cmds.listConnections(cmds.listRelatives(i, shapes=1, f=1)[0], destination=1, source=0, plugs=0, s=1, type="shadingEngine")
    shaders = cmds.ls(cmds.listConnections(shadingGroups), materials=1)
    for j in shaders:

        if cmds.referenceQuery(j, isNodeReferenced=1):
            allMat = list(set(allMat) | set(shaders))


delMat = [u'lambert1', u'particleCloud1']
allMat = list(set(allMat) - set(delMat))
# print(allMat)
for i in allMat:

    cmds.hyperShade(o=i)
    if len(cmds.ls(sl=1)) > 0:
        newShader = cmds.duplicate(i, upstreamNodes=1)
        cmds.hyperShade(a=newShader[0])
cmds.select(cl=1)

def check_the_rename(*args):
gate = cmds.ls(sl=True )
cmds.select(hi=True )
a = cmds.ls(sl=True)
print a
l = []
for i in a:
if i.find("|") != -1:
l.append(i)
for i in a:
if i.find("? != -1:
l.append(i)
print l
cmds.select(l)

def chearUVHistory(*args):
gate = cmds.ls(sl=True )
cmds.select(hi=True )
sel = cmds.ls(sl=True,type=“mesh”)

cmds.select(cl=True)
cmds.group( em=True, name='clear_up_grp' )

for i in sel:
    l = []
    sc = []
    judge = 0

    textureNode = cmds.connectionInfo("%s.inMesh"%i,sfd=True)
    a = 0
    while a < 30:
        node = textureNode.split(".")[0]
        gl = cmds.ls(node,showType=True)
        print gl
        try:
            if gl[1] == 'blendShape':
                judge = 1
            if gl[1] == 'polyColorPerVertex' or gl[1] == 'polyTransfer' or gl[1] == 'deleteUVSet' or gl[1] == 'transferAttributes' or gl[1] == 'polyTweakUV':
                l.append(gl[0])
                l = set(l)
                l = list(l)
            elif gl[1] == 'blendShape' or gl[1] == 'skinCluster' or gl[1] == 'sculpt' or gl[1] == 'nonLinear' or gl[1] == "ffd":
                sc.append(gl[0])
                sc = set(sc)
                sc = list(sc)              
            try:
                textureNode = cmds.connectionInfo("%s.inputPolymesh"%node,sfd=True)
            except:
                try:
                    textureNode = cmds.connectionInfo("%s.inputGeometry"%node,sfd=True)
                except:
                    try:
                        textureNode = cmds.connectionInfo("%s.input[0].inputGeometry"%node,sfd=True)
                    except:
                        textureNode = cmds.connectionInfo("%s.inMesh"%i,sfd=True)
        except:
            pass
        a += 1
    t = cmds.pickWalk(i,d='up')
    if judge == 0:
        cmds.select(t)
        pm.runtime.BakeNonDefHistory()
    elif judge == 1:
        if len(l) == 0:
            pass
        else:
            for s in sc:
                cmds.setAttr("%s.envelope"%s,0)
            dl = cmds.duplicate(rr=True)
            for s in sc:
                cmds.setAttr("%s.envelope"%s,1)
            cmds.select(l)
            cmds.delete()
            cmds.blendShape(t[0],dl[0],n="%s_blendshape"%t[0])
            cmds.setAttr("%s_blendshape.%s"%(t[0],t[0]),1)
            cmds.parent(t[0],'clear_up_grp')
            cmds.rename(t[0],"%s_backup"%t[0])
            cmds.rename(dl[0],t[0])

def main():
if cmds.window(‘UV_Shader_TransfWin’,exists=True):
cmds.deleteUI(‘UV_Shader_TransfWin’,window=True)

if cmds.window('UV_Shader_TransfWin', q=1, ex=1) == 1:
    cmds.showWindow('UV_Shader_TransfWin')
else:
    try:
        len(UVS_OpenFlag)
    except:
        UVS_OpenFlag = [1]
        UVS_matchingConditions = [1, 0, 0, 0]
        UVS_transformOption = [0, 1]
        orgOBJ = []
        TargetOBJ = []
    finally:
        UV_Shader_TransfWin()

if name==‘main’:
main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值