OpenMAYA API(Python或C++):给定带有DAG名称或路径的字符串,得到MDagPath

2024-05-16 19:24:17 发布

您现在位置:Python中文网/ 问答频道 /正文

测试用例:
玛雅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,因为“import pymel.core as pm”会导致系统出错。这是Autodesk论坛的一个问题。目前,我的目标是学习使用openmayaapi。


Tags: 方法nameimportasresult平面omgiterator
1条回答
网友
1楼 · 发布于 2024-05-16 19:24:17

不需要使用全局选择列表,您可以创建一个mselection列表,仅用于获取dag:

def DagNode ( xform ):
    selectionList = OpenMaya.MSelectionList()
    try:
        selectionList.add( xform )
    except:
        return None
    dagPath = OpenMaya.MDagPath()
    selectionList.getDagPath( 0, dagPath )
    return dagPath

相关问题 更多 >