Воспитание нескольких объектов по их последнему номеру, Maya Python
В настоящее время я работаю над сценарием для создания простой буровой установки.
У меня есть переменная, чтобы определить количество суставов, которые я хочу. У меня также есть переменная для количества групп / контроллеров, которые я хочу. Эти суммы могут варьироваться, поэтому сценарий будет полу-динамическим.
Итак, в итоге я получаю пару суставов (joint1, joint2, joint3, ... и т. Д.) И пару групп (group1, group2, group3 и т. Д.).
Моя проблема в том, что я не знаю, как бы я поставил родителей "group1" в "joint1" и "group2" с "joint2" и т. Д. Все за один раз. Так как я хочу иметь возможность изменять количество соединений и групп, я не могу это жестко закодировать.
Любая помощь будет оценена:)
2 ответа
Может ли что-то подобное помочь вам?
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 воспитание детей
# 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])
@ Пример 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", если у вас нет числового суффикса)