В Maya, есть ли способ через скрипт, чтобы узнать, является ли объект экземпляром или нет? Каждый трюк, который я пробовал до сих пор, не работает. Спасибо!Maya найти, если объект установлен?
ответ
От source:
# Python code
import maya.OpenMaya as om
def getInstances():
instances = []
iterDag = om.MItDag(om.MItDag.kBreadthFirst)
while not iterDag.isDone():
instanced = om.MItDag.isInstanced(iterDag)
if instanced:
instances.append(iterDag.fullPathName())
iterDag.next()
return instances
Edit:
Я просто понял, что я на самом деле не отвечая на ваш вопрос, и просто дать вам все экземпляры в сцене Maya.
Вот другой код, который вы можете использовать, чтобы проверить, если узел является экземпляром:
def pathToDagNode(fullPath):
if not cmds.objExists(fullPath):
return None
else:
selectionList = om.MSelectionList()
selectionList.add(fullPath)
dagPath = om.MDagPath()
selectionList.getDagPath(0, dagPath)
return dagPath
dag_node = pathToDagNode('|your|node|full|path')
print dag_node.isInstanced()
в скрипте:
def is_instanced(shape):
return len (cmds.listRelatives(shape, ap=True) or []) > 1
, если у вас есть преобразование:
def is_instanced_xform(xform):
shape = cmds.listRelatives(xform, s=True)
if not shape:
return False
return len (cmds.listRelatives(shape, ap=True) or []) > 1
Это нужно учитывать иерархии без фигур, но это легко настроить. Спасибо за хороший ответ! –
np - но вы не найдете экземпляры в иерархиях без фигур. Вы можете изменить listRelatives -s на cmds.ls (cmds.listRelatives (ad = True), type = shape) или что-то в этом роде – theodox
Возможно, есть способ сделать это с помощью майя api 2.0, я попытаюсь это выяснить. – DrHaze
Я столкнулся с этой точной [проблемой] (http://stackoverflow.com/questions/20232835/maya-python-api-2-0-has-no-mitdag-so-how-traverse-dag-graph). Поскольку я все еще придерживаюсь Maya 2014, я не могу идти дальше и использовать Maya api 2.0. – DrHaze
Кажется, что это не работает с объектами в верхней части иерархии. Спасибо за это! –