Создание простой иерархической структуры в Maya с использованием mel / python - PullRequest
1 голос
/ 20 января 2010

Итак, я хочу создать очень простую структуру из узлов группы и локатора в Maya, которая затем будет экспортирована для использования на моем игровом уровне.

например.

Group_Root
  group_parent
    - group1
      - locator1
    - group2
      - locator2
    - group3

В файле только один Group_Root, есть много group_parents (каждый с уникальным именем) Однако все group_parent имеют одинаковые имена трех подгрупп («group1», «group2», «group3»), и все group1 имеют локатор под названием locator1

Что у меня пока есть:

group_parent = c.group( em=True, name="group_parent", parent="Group_Root")
modes =  ["group1", "group2", "group3"]
for mode in modes:
    mode_group = c.group( em=True, n=mode, parent=group_parent )
    if mode == "group1":
            s = c.spaceLocator(name="locator1")
            c.parent( mode_group ) 
    elif mode == "group3":
            s = c.spaceLocator(name="locator2")
            c.parent( mode_group )

Однако я получаю эту ошибку в "c.parent (mode_group)"

# Ошибка: объект group1 недействителен

Предположительно, потому что существует более одного узла с именем "group1", поэтому он не знает, какой из них является родительским.

Есть идеи, как мне это сделать с полными путями? например "Group_Root | group_parent | group1"

Ответы [ 3 ]

0 голосов
/ 23 марта 2011

Имена могут быть немного раздражающими с MEL. В общем, хорошей практикой является никогда не доверять имени, которое является тем, что вы указываете.

Это хороший пример того, как * не делать вещи:

group -n myGroup1 circle1 sphere1;

.. потому что это никоим образом не может привести к чему-то с именем "group1". Лучший способ сделать это - запустить команду и записать результат в строковую переменную, например:

string $result = `group -n myGroup circle1 sphere1`;

Затем используйте $ result для ссылки на результирующую группу. Это все равно будет работать, даже если группа в конечном итоге будет называться «myGroup23».

Я не уверен, как это выглядит в Python, поскольку я в основном знаком с прямым MEL, но должны применяться те же принципы.

Еще одна вещь, на которую стоит обратить внимание - это функциональность пространства имен (namespace и namespaceInfo), которую можно использовать для определения нового пространства имен для уникальной группы верхнего уровня под рукой.

Надеюсь, это поможет

0 голосов
/ 06 октября 2012

Я предполагаю, что прошло более двух лет, вы уже поняли это ... но для потомков было две проблемы - во-первых, вы были на месте с необходимостью абсолютных путей, но былтакже небольшая ошибка в том, как вы применяли вызов maya.cmds.parent ().Я только что немного переписал, чтобы проиллюстрировать - в основном вы можете использовать тот факт, что когда вы создаете вещи, они выбираются по умолчанию, а maya.cmds.ls () достаточно умен, чтобы вернуть вам то, что вам нужно .. Ergo:

c.group( em=True, name="group_parent", parent="Group_Root")
group_parent = c.ls(sl=True)[0]

modes =  ["group1" , "group2", "group3"]
for mode in modes:
    c.group( em=True, n=mode, parent=group_parent )
    mode_group = c.ls(sl=True)[0]
    if mode == "group1":
            c.spaceLocator(name="locator1")
            s = c.ls(sl=True)[0]
            # maya.cmds.parent() with something selected will actually
            # parent the specified object to the selected object. 
            # You don't want that.


            # We might as well use the explicit syntax to be sure 
            # (parent everything specified to the last item in the list)
            c.parent( s, mode_group ) 
    elif mode == "group3":
            c.spaceLocator(name="locator2")
            s = c.ls(sl=True)[0]
            c.parent( s, mode_group )
0 голосов
/ 20 января 2010

Вы видели Переполнение VFX ?Это вопросы и ответы для визуальных эффектов, поэтому я ожидаю, что некоторые наблюдатели будут хорошо знакомы с Maya / MEL и Python.Тем не менее, это довольно новый, так что пользовательская база все еще мала ...

...