2016-10-06 4 views
1

Я пытаюсь переместить выбранный объект в центр объектов, выбранных вершинами.Maya Python - установить объект в центр выделения

Когда я запускаю код, я не получаю никаких ошибок, и почти все работает так, как планировалось. Однако элемент (obj) моего выбранного объекта, похоже, не устанавливается на локатор xform (piv).

import maya.cmds as cmds 

sel = cmds.ls(sl=True) 
print sel 
obj = cmds.ls(*sel, o=True) 
print obj 

selVerts = cmds.ls(sl=True) 
tempClstr = cmds.cluster() 
pos = cmds.xform(tempClstr[1], q=True, ws=True, rp=True) 
loc = cmds.spaceLocator() 
cmds.move(pos[0], pos[1], pos[2]) 
cmds.delete(tempClstr) 

piv = cmds.xform (loc[1], piv=True, q=True, ws=True) 
print piv 
cmds.xform(obj, ws=True, piv=(piv[0], piv[1], piv[2])) 

Нужна помощь по этому быстрому. Любые дополнительные глаза, которые могут определить, что мне не хватает, будут очень признательны.

ответ

2

Я думаю, что основная проблема заключалась в том, что когда вы использовали obj = cmds.ls(*sel, o=True), это было только захват узла формы объекта вместо его преобразования. Вы можете использовать cmds.listRelatives, чтобы получить преобразование фигуры. Вам также не нужно создавать локатор, поскольку кластер уже дает вам позицию.

Это, похоже, работает для меня, хотя вы можете рассмотреть некоторые дополнительные проверки ошибок для части выбора, поскольку она предполагает много.

import maya.cmds as cmds 

sel = cmds.ls(sl=True) 
shapes = cmds.ls(sel, o=True) 
obj = cmds.listRelatives(shapes[0], f=True, parent=True)[0] 

selVerts = cmds.ls(sl=True) 
tempClstr = cmds.cluster() 
piv = cmds.xform(tempClstr[1], q=True, ws=True, rp=True) 
cmds.delete(tempClstr) 

cmds.xform(obj, ws=True, piv=(piv[0], piv[1], piv[2]))