2017年4月26日 星期三

檢查模型的 topology 是否對等 (polyCompare check topology match)

檢查模型的 topology 是否對等 (能不能拿來做 blendshape 等等)
import maya.cmds as mc
from maya.api.OpenMaya import MGlobal
sel = mc.ls(sl=1)
ret = mc.polyCompare(sel,v=1,e=1,fd=1)
if ret != 0:
MGlobal.displayInfo("geos NOT match!")
else:
MGlobal.displayInfo("geos match!")

2016年8月28日 星期日

如何在 import 檔案之前執行一段程式 (How to run a callback before importing scene file)

今天看到 google group 上的一個 thread,關於如何在 maya import 一個檔案之前執行程式 (可以用來做一些 preprocessing, 例如檢查檔案路徑等等)。就先把它貼在這當筆記吧。
'''
source : https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/python_inside_maya/rpO70NI1jc0/I10eDlxZCQAJ
'''
import maya.OpenMaya as om
def catchFileImport(ret, fileObj, *args):
print "Importing:", fileObj.resolvedFullName()
om.MScriptUtil.setBool(ret, True)
mid = om.MSceneMessage.addCheckFileCallback(om.MSceneMessage.kBeforeImportCheck, catchFileImport)

2016年7月12日 星期二

2016年6月22日 星期三

如何把一個 transform 裡存在多個 shapes 的物件獨立出來 (how to separate multiple shapes inside one transform node)


有些工具或外掛會產生出向這種一個 transform 裡存在多個 shapes 的物件。這可能是為了效能關係或其他因素,不過就可能會造成其他一些軟體,工具,或 renderer 無法正常運作。

以下這段小程式可以幫你把這些shapes 拆成"正常"獨立的物件。



import maya.cmds as mc
import pymel.core as pm
def separateShapes(grp=None):
grp = grp or mc.ls(sl=1)[0]
SUFFIX = "_separated_geo"
def getUniqueName(name):
newName = name
idx = 1
while True:
if not mc.objExists(newName):
break
else:
newName = "{0}_{1}".format(name,idx)
idx+=1
return newName
def getAwesomeName(shapeName):
name = str(shapeName).split('|')[-1].split(':')[-1].split('.')[0]
name = name + SUFFIX
return getUniqueName(name)
shapes = mc.ls(grp,dag=1,ni=1,shapes=1)
newTrs = []
with pm.UndoChunk():
for eachShape in shapes:
newName = getAwesomeName(eachShape)
newTr = mc.createNode("transform", name=newName)
mc.parent(eachShape, newTr, shape=True, r=True)
newTrs.append(newTr)
return newTrs
separateShapes()