测试用例:
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]
...
有没有更简单的方法?我是否忽略了OM中的某些类或方法?
注意:我不使用pymel,因为“以pm导入pymel.core”会导致系统错误。这是Autodesk论坛的一个问题。现在,我的目标是学习使用OpenMaya API。
最佳答案
您不需要使用全局选择列表,可以创建MSelectionList来仅获取dag:
def DagNode ( xform ):
selectionList = OpenMaya.MSelectionList()
try:
selectionList.add( xform )
except:
return None
dagPath = OpenMaya.MDagPath()
selectionList.getDagPath( 0, dagPath )
return dagPath
关于c++ - OpenMaya API(python或C++):给定具有DAG名称或路径的字符串,获取MDagPath,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20151083/