Очистка во время цикла для изучения Maya Python

#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. Подлый маленький негодяй!