Как использовать itertool с кортежами для перемещения суставов в разные места? - PullRequest
0 голосов
/ 06 ноября 2018

Я только начал изучать Python для фальсификации, и мой университет на самом деле не фокусируется на этом, и я немного запутался с несколькими комбинациями кода, которые я пытаюсь использовать.

Я хочу переместить множество соединений в разные места для каждого из них, и вместо того, чтобы идти cmds.move () 20 раз подряд, я хочу использовать итеримы с кортежами, чтобы сделать мои строки чище.

Это мой маленький кусочек кода на Python:

# import commands from maya package
from maya import cmds

moveTailJoints = {
    'tail_001_jnt': {(0, 2.607, -20.579)},
}

for driver, driven in moveTailJoints.iteritems():
    cmds.move(
        driver.format(),
        driven.format()
    )

Это лучший способ сделать это?

1 Ответ

0 голосов
/ 07 ноября 2018

Добро пожаловать в ТАК!

Несколько вещей: Вам не нужен этот вложенный словарь вокруг значения вашей позиции {(0, 2.607, -20.579)}, так как он не имеет смысла.

Вы можете проходить как объекты, так и позиции, используя встроенный в .items() метод *1007*.

Вы не очень ясно здесь, но я предполагаю, что эти значения положения являются мировыми координатами? Если это так, то вам нужно включить абсолютный флаг в метод cmds.move. Кроме того, вы также можете использовать cmds.xform, чтобы переместить объект в положение в мировом пространстве.

import maya.cmds as cmds

moveTailJoints = {
    'tail_001_jnt':(0, 1, 0),
    'tail_002_jnt':(0, 2, 0),
    'tail_003_jnt':(0, 3, 0),
    'tail_004_jnt':(0, 4, 0)   
}

for obj, pos in moveTailJoints.items():
    tx, ty, tz = pos
    cmds.move(tx, ty, tz, obj, a=True)

Ознакомьтесь с документацией Maya для получения дополнительных примеров использования команд:

http://help.autodesk.com/view/MAYAUL/2018/ENU/?guid=__CommandsPython_index_html

...