#python #while-loop #maya
#питон #пока-цикл #майя #python #цикл while #maya
Вопрос:
Я создал цикл while для изучения Maya python. Это работает хорошо, но это избыточно, и я думаю, что должен быть способ сократить их лучше или сделать так, чтобы это выглядело хорошо. Можете ли вы, ребята, дать мне совет о том, что я должен сделать? Как вы думаете, использование другой функции def было бы лучше, чем эта?
def addWalls(self, length, width, floorNum, bboxScale):
# count variables
count = 1
floorCount = 1
# length loop
while count < length:
# Adding floors on wall
while floorCount < floorNum:
cmds.duplicate(instanceLeaf=True)
cmds.xform(relative=True, translation=[0, 0, bboxScale[2]])
floorCount = 1
floorCount = 1
# Adding next wall
cmds.duplicate(instanceLeaf=True)
cmds.xform(relative=True, translation=[0, -bboxScale[1], -bboxScale[2] * (floorNum - 1)])
count = 1
# Final adding floors
if count == length:
while floorCount < floorNum:
cmds.duplicate(instanceLeaf=True)
cmds.xform(relative=True, translation=[0, 0, bboxScale[2]])
floorCount = 1
floorCount = 1
Комментарии:
1. Вы могли бы поместить строку «cmds.duplicate …» и следующие две в блок «if count < длина». Затем удалите линии после этого и отрегулируйте первое условие while.
Ответ №1:
Когда я запускаю ваш скрипт, он создает сетку объектов, подобных этой:
Итак, если все, что нужно сделать, это создать сетку объектов, тогда ваше предположение верно, нет смысла использовать while
цикл. На самом деле это действительно легко сделать с помощью 2 for
циклов, которые представляют ширину и высоту «стены»:
import maya.cmds as cmds
spacing = 5
width_count = 15
height_count = 15
for z in range(width_count):
for y in range(height_count):
cmds.duplicate(instanceLeaf=True)
cmds.xform(ws=True, t=[0, y * spacing, z * spacing])
Это даст тот же результат с гораздо более коротким и читаемым скриптом. Если вы хотите большей гибкости, это потребует только простых настроек.
Комментарии:
1. О, понятно, я думал, что могу использовать цикл for только для списка. Большое вам спасибо!!!! Я чувствую себя намного лучше и учусь у вас: D
2. распечатайте
range(width_count)
и посмотрите, что это вам даст 😉3. О, я вижу, цифры превращаются в список : D
4. Подлый маленький негодяй!