Я пытаюсь сделать while loop
в Python, чтобы найти следующий элемент в цепочке в Autodesk Maya. Он циклически перемещается по иерархии объектов, пока не найдет объект с определенным атрибутом. В настоящее время он сначала проверяет, не имеет ли текущий объект родительский элемент, а затем проверяет, имеет ли он атрибут parent
, если он не будет входить в while loop
и распечатает заявление.Effective While Loop для следующего объекта в цепочке
Если у объекта есть родительский объект, он будет запускать while loop
до тех пор, пока объект имеет родительский объект. Код ниже перечислен родитель этого выбранного объекта:
while pm.listRelatives(pm.ls(sl = True), p = True):
Тогда это будет проверить, является ли текущий объект имеет атрибут, если он не будет выбрать следующий объект вверх по иерархии до тех пор, пока не произойдет, если он доходит до конца, он выйдет из цикла. Что мне интересно, есть ли более эффективный способ сделать это? Предпочтительно способ иметь один while loop
с условием, которое будет работать, даже если оно не может найти объект, следующий в цепочке.
import pymel.core as pm
if not pm.listRelatives(pm.ls(sl = True)[ 0 ], p = True):
if pm.attributeQuery('parent', n = pm.ls(sl = True, tl = True)[ 0 ], ex = True) == 1:
print 'found parent on no parent ' + pm.ls(sl = True, tl = True)[ 0 ]
else:
while pm.listRelatives(pm.ls(sl = True), p = True):
if pm.attributeQuery('parent', n = pm.ls(sl = True, tl = True)[ 0 ], ex = True) == 1:
print 'found parent on selected ' + pm.ls(sl = True, tl = True)[ 0 ]
break
else:
print 'parent not found'
pm.select(pm.listRelatives(pm.ls(sl = True, tl = True), p = True))
Я немного смущен. В чем смысл «listRelative»? Находят ли они «родителя» элемента или что-то еще? Какова связь между этим родителем и атрибутом «parent»? – Blckknght