Создайте рекурсивную функцию для получения иерархии в Maya

Привет, я пытаюсь получить иерархию файла сцены в Maya в виде словаря. Например, введите здесь описание изображения

Я хочу эти данные как словарь

tree = {"group5": {"group4": {"group3": {"group2": {"group1": {"pSphere1": "pSphere1Shape"}},
                                     "pSphere2": {"pSphere2Shape"}
                                     }
                          }
               },
    "group8": {"group7": {"group6": {"pCube": {"pCube1Shape"}
                                     }
                          }
               }
    }

Любое предложение о том, как получить эти данные?


person pavithira raj p    schedule 29.10.2020    source источник


Ответы (1)


Обычно я не пишу рекурсивные функции, так что я попробовал это для развлечения.

import pymel.core as pm

def getHierarchy(start):
    dict = {}
    startNode = pm.PyNode(start)
    #print dir(startNode)
    children = startNode.getChildren()
    if children:
        for child in children:
            dict[child.name()] = getHierarchy(child.name())
    
    return dict
    

if __name__ == '__main__':
    sel = pm.selected()[0]
    hierarchyDict = { sel.name() : getHierarchy(sel.name())}
    print hierarchyDict

полученные результаты:

{u'group5': {u'group4': {u'group3': {u'group2': {u'group1': {u'pSphere1': {u'pSphereShape1': {}}}, u'pSphere2': {u'pSphereShape2': {}}}}}, u'group8': {u'group7': {u'group6': {u'pCube1': {u'pCubeShape1': {}}}}}}}

кроме вашего интервала между фигурными скобками/новых строк, я заметил, что в вашем примере узлы формы (листья вашего дерева) не похожи на правильный словарь. в этом примере они заканчиваются как ключ к пустому словарю. редактировать: к сожалению, это не включает группу стартовых точек5, я добавлю ее в шаблон, может быть, кто-то может указать, как сделать ее лучше

person mr.matt    schedule 07.12.2020
comment
Да, это именно то, что я искал. Благодарность - person pavithira raj p; 09.12.2020