Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenMaya API(python或C+;+;):给定带有DAG名称或路径的字符串,获取MDagPath_C++_Python_Maya - Fatal编程技术网

C++ OpenMaya API(python或C+;+;):给定带有DAG名称或路径的字符串,获取MDagPath

C++ OpenMaya API(python或C+;+;):给定带有DAG名称或路径的字符串,获取MDagPath,c++,python,maya,C++,Python,Maya,测试用例: Maya 2014,新场景,创建多边形平面。 结果是一个名为“pPlane1”的平面 如果我知道一个对象的名称,这里是“pPlane1”,我需要一个OpenMaya(OM)MDagPath实例,这样我就可以将它传递给其他OM方法 这是可行的(python),但需要修改选择,而且似乎很麻烦: import maya.OpenMaya as om # Version 1 from maya.OpenMaya import MGlobal as omg # Returns

测试用例:
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,因为“将pymel.core作为pm导入”会导致系统出错。这是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

谢谢-这就是我所缺少的:我不明白MSelectionList类能做什么。我不知道你可以创建这样的查询。最重要的是,我不知道接受字符串参数的add方法。你是怎么知道的?推荐教程、网站、书籍?我记不清了,我想我是从Ryan Trowbridge的网站上找到的。Tech-artists.org和谷歌集团“maya内部python”都很好resources@ToolmakerStevemaya api手册示例以及手册条目本身中也提到了它。即使它们是c,您也可以从该资源中了解如何以更通用的方式使用maya。我的意思是,我15分钟前不能使用maya.OpenMayaRender。但是现在我做了,并且已经准备好了一个基本的光线跟踪器。注意:我尝试添加一个对本文代码的更改,将selectionList.getDagPath包装在try/except中并返回None。这修复了我遇到的一个异常,并且符合theodox的意图(注意,他对selectionList.add中的异常执行了完全相同的操作。这个简单、正确且必要的更改被@Adi_Inbar、Huangism和1_CR拒绝。我只能假设他们中没有一个是有经验的MAYA python程序员。(还有两位经验丰富的程序员,德文·库米勒和皮尔逊·索纳塔·普托批准了这项计划,但这还不足以让它生效。谢谢大家。)