OpenMaya API (python или C ++): если задана строка с именем или путем DAG, получите MDagPath

0

Прецедент:
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.

Теги:
maya

1 ответ

6
Лучший ответ

Вам не нужно использовать глобальный список выбора, вы можете создать список MSelectionList только для получения дага:

def DagNode ( xform ):
    selectionList = OpenMaya.MSelectionList()
    try:
        selectionList.add( xform )
    except:
        return None
    dagPath = OpenMaya.MDagPath()
    selectionList.getDagPath( 0, dagPath )
    return dagPath
  • 0
    Спасибо - вот чего мне не хватало: я не понимал, на что способен класс MSelectionList. Я не знал, что вы могли бы создать такой запрос. Самое главное, я не знал о методе add, который принимал строковый аргумент. Как вы узнали это? Рекомендовать учебники, сайты, книги?
  • 1
    Я точно не помню, думаю, что взял это с сайта Райана Троубриджа. Tech-artists.org и группа Google "Python внутри Maya" являются хорошими ресурсами
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню