Search code examples
pythonwhile-loopmaya

Cleaning While Loop for Maya Python Study


I made a while loop for Maya python study. It works well, but it is redundant and I think there must be a way to shorten them better or make it looks good. Can you guys give me a suggestion about what I should do? Do you think using another def function would be better than this?

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

Solution

  • When I run your script it creates a grid of objects like this: enter image description here

    So if all it needs to do is make a grid of objects then your assumption is right, it makes no sense using a while loop. In fact it's really easy to do it with 2 for loops that represent the "wall's" width and height:

    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])
    

    It will yield the same result with a much shorter and readable script. If you want more flexibility in there it would only take simple tweaks.