Воспитание нескольких объектов по их последнему номеру, Maya Python - PullRequest
0 голосов
/ 08 октября 2018

В настоящее время я работаю над сценарием для создания простой буровой установки.

У меня есть переменная для определения количества суставов, которые я хочу.У меня также есть переменная для количества групп / контроллеров, которые я хочу.Эти суммы могут варьироваться, поэтому сценарий будет полу-динамическим.

Итак, в итоге я получаю пару соединений (joint1, joint2, joint3, ... и т. Д.) И пару групп (group1, group2, group3, ... и т. д.).

Моя проблема в том, что я не знаю, как бы я поставил родительские группы "group1" в "joint1" и "group2" с "joint2" и т. д.все за один раз.Так как я хочу иметь возможность изменять количество соединений и групп, я не могу жестко закодировать его.

Любая помощь будет принята с благодарностью:)

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

@ Пример DrWeeny возьмет, какие существующие объекты и существующие суставы, и объединит их вместе.Если вы хотите просто начать с геометрии и автоматически добавлять в нее соединения, вы можете попробовать что-то вроде этого:

import re

def add_joints_to_selected(orient = 'xyz'):
    selection = cmds.ls(sl=True)
    cmds.select(d=True)
    joints = []
    for geo in selection:
        pivot = cmds.xform(geo, q=True, rp=True, ws=True)
        suffix = '0'
        raw_name = re.findall( "\d$", geo)
        if raw_name:
            suffix = raw_name[-1]       
        jnt = cmds.joint(n = "joint_" + suffix, p=pivot)
        cmds.parent(geo, jnt)
        joints.append(jnt)
    if orient:
        cmds.joint(joints[:-1], e=True, oj = orient)

add_joints_to_selected('xyz')  # or add_joints_to_selected(None)

Этот получает точки поворота выбранных узлов и создает соединения для каждого (в порядке их выбора).Если вы поставите совместный ордер, например, «xyz» или «yzx», он выровняет суставы, как если бы вы нарисовали их вручную;в противном случае суставы выровнены по всему миру.Единственный хитрый момент - использование регулярного выражения для извлечения суффиксов из существующих имен узлов (оно возвращается к «0», если у вас нет числового суффикса)

0 голосов
/ 08 октября 2018

Может ли что-то подобное вам помочь?

grp = cmds.ls('group*')
nbs = [int(n.split('group')[-1]) for n in grp]
grpDic = dict(zip(nbs, grp))

joint = cmds.ls('joint*', type='joint')
nbs = [int(n.split('joint')[-1]) for n in joint]
jointDic = dict(zip(nbs, joint))

common = list(set(grpDic.keys())&set(jointDic.keys()))

for i in common:
    cmds.parent(grpDic[i], jointDic[i])

РЕДАКТИРОВАТЬ: включить Nurbs Parenting

# filter by nurbs type    
nurbs_sh = cmds.ls('nurbsCircle*', type='nurbsCurve')
# get the transform node of this nurbs
nurbs_tr = cmds.listRelatives(nurbs_sh, p=1)
nbs = [int(n.split('nurbsCircle')[-1]) for n in nurbs_tr]
curveDic = dict(zip(nbs, nurbs_tr))

common = list(set(grpDic.keys())&set(curveDic.keys()))
# nurbs parent to group
for i in common:
    cmds.parent(curveDic[i], grpDic[i])
...