вы можете значительно упростить свой код и использовать только несколько команд
import maya.cmds as mc
verts = mc.ls(os=True)
src = 'pCone1'
base_name = 'fancy_cone'
for i, vert in enumerate(verts):
dup = mc.duplicate(src, n='%s_%s' %(base_name, i))[0]
mc.xform(dup, ws=True, t=mc.xform(vert, q=True, ws=True, t=True))
имейте в виду несколько предостережений:
1) это предполагает, что стержень вашего исходного конуса находится на кончике с кончиком в начале координат... поэтому требуется настроить этот исходный конус так, как вы хотите, как если бы исходная точка была вершиной, которую вы будете привязывать это к. Это также было бы полезно, если объект, к которому вы «закрепляете», вращается (нет необходимости выполнять какие-либо векторные вычисления, чтобы определить позиционное смещение таким образом)
2) использовать orderedSelection (os) в команде ls, вы должны убедиться, что отслеживание порядка выбора включено в ваших настройках Maya в подразделе выбора — таким образом вы можете выбрать вершины, которые вы хотите, в том порядке, в котором вы хотите, чтобы они были созданы (сверху вниз, снизу вверх, как угодно) вместо порядка индекса вершины
Это также должно быть значительно быстрее - отслеживая любые созданные объекты, вам фактически не нужно ничего выбирать, и вы можете напрямую манипулировать объектами. Я также поместил все это в один цикл без каких-либо вызовов функций, что было бы быстрее (хотя вы, вероятно, не заметите этого, если не сделаете их LOOOOOOT).
Однако, в зависимости от ваших потребностей, вы можете использовать функцию привязки в нескольких местах; Тем не менее, я бы посоветовал избегать дублирования на случай, если возникнут ситуации, которые вы хотите снять без дублирования.
Что-то вроде этого (с учетом тех же предостережений, что и выше):
import maya.cmds as mc
def snapToVertex(vertex, object):
pos = mc.xform(vertex, q=True, ws=True, t=True)
mc.xform(object, ws=True, t=pos) # combine to single line if prefered
def processTask():
verts = mc.ls(os=True)
src = 'pCone1'
base_name = 'fancy_cone'
for i, vert in enumerate(verts):
dup = mc.duplicate(src, n='%s_%s' %(base_name, i))[0]
snapToVertex(vert, dup)
processTask()
person
silent_sight
schedule
08.06.2017