2015年1月8日 星期四

python 小程式 : 安全複製模型面 不影響原本模型的 history 或 名稱




Maya 的 duplicate face 工能雖然不錯用,但複製完模型面之後原本的模型不管是名稱或是 history 都會受影響。名稱會變成 polySurface* ,node history 也同樣會加上polyChipOff,polySeparate 這種 node, 對有rigging 過或 reference 進來的模型都是一種困擾。因此,我前陣子寫下了以下這個小程 (python) 式可以避免這種副作用,複製後遠本那個模型不會受任何影響 !


import pymel.core as pm
import re

def getComponentId(component):
    """get id number from a component (i.e. pCube.vtx[12]) , and return as int (i.e. 12 ) ."""
    tokens = re.split('[\[\]]',str(component))
    
    try:
        return int(tokens[1])
    except (ValueError,IndexError):
        return -1

faces = pm.filterExpand(ex=True,sm=34)

meshNode = pm.ls(faces,o=1)[0]

dupNode = pm.duplicate(meshNode)[0]

idList = [getComponentId(fc) for fc in faces]

pm.select("%s.f[*]"%str(dupNode),r=1)

preStr = str(dupNode)+".f[%d]"

pm.select([preStr%eachId for eachId in idList],d=1)

pm.delete()

1 則留言: