Прецедент:
Maya 2014, Новая сцена, создайте многоугольник. Результатом является плоскость с именем "pPlane1".
Если я знаю имя объекта, здесь "pPlane1", я хочу экземпляр OpenMaya (OM) MDagPath, чтобы передать его другим методам OM.
Это работает (python), но требует изменения выбора и кажется громоздким:
import maya.OpenMaya as om # Version 1
from maya.OpenMaya import MGlobal as omg
# Returns [dagPath]. If none, returns [].
def GetDag(name):
omg.clearSelectionList()
omg.selectByName(name)
selectionList = om.MSelectionList()
omg.getActiveSelectionList(selectionList)
#
iterator = om.MItSelectionList( selectionList, om.MFn.kDagNode )
dagPath = om.MDagPath()
result = []
if not iterator.isDone():
iterator.getDagPath( dagPath )
result = [dagPath]
return result
# ---------- Testing ----------
name = "pPlane1"
result = GetDag(name)
if len(result) > 0:
dagPath = result[0]
...
Есть ли более простой способ? Упустил ли я некоторый класс или метод в ОМ?
ПРИМЕЧАНИЕ. Я не использую pymel, потому что "import pymel.core as pm" приводит к ошибке в моей системе. Это вопрос для форумов Autodesk. На данный момент моя цель - научиться использовать API OpenMaya.
Вам не нужно использовать глобальный список выбора, вы можете создать список MSelectionList только для получения дага:
def DagNode ( xform ):
selectionList = OpenMaya.MSelectionList()
try:
selectionList.add( xform )
except:
return None
dagPath = OpenMaya.MDagPath()
selectionList.getDagPath( 0, dagPath )
return dagPath