import maya.cmds as cmds import random ##Created by Isabella Clements Leedeman 2024 ###Script def create_brick_wall( width, height, wall_width, wall_height, brick_spacing, row_offset, col_offset, row_offset_every_other, random_rotation_range, bevel_width, randomness_control ): num_bricks_width = int(wall_width / width) num_bricks_height = int(wall_height / height) brick_wall_group = cmds.group(empty=True, name="brickWallGroup") for j in range(num_bricks_height): row_group = cmds.group(empty=True, name="row_{}".format(j + 1), parent=brick_wall_group) for i in range(num_bricks_width): x_pos = i * (width + brick_spacing) + col_offset y_pos = j * (height + brick_spacing) + row_offset if j % 2 == 1: x_pos += row_offset_every_other if (i % 2 == 1 and j % 2 == 0) or (i % 2 == 0 and j % 2 == 1): randomized_width = width + random.uniform(-randomness_control, randomness_control) randomized_height = height + random.uniform(-randomness_control, randomness_control) else: randomized_width = width randomized_height = height brick = cmds.polyCube( width=randomized_width, height=randomized_height, depth=1, name="brick#" )[0] rotation_value = random.uniform(-random_rotation_range, random_rotation_range) cmds.rotate(0, rotation_value, 0, brick) cmds.move(x_pos, y_pos, 0, brick) cmds.polyBevel(brick + ".e[*]", offset=bevel_width) cmds.parent(brick, row_group) return brick_wall_group ###UI def create_brick_wall_gui(): window_name = "brickWallWindow" if cmds.window(window_name, exists=True): cmds.deleteUI(window_name, window=True) cmds.window(window_name, title="Brick Wall Generator", sizeable=True) cmds.columnLayout(adjustableColumn=True) ####Brick size width_slider = cmds.floatSliderGrp( label="Brick Width", field=True, minValue=0.1, maxValue=10.0, value=2.0 ) height_slider = cmds.floatSliderGrp( label="Brick Height", field=True, minValue=0.1, maxValue=10.0, value=1.5 ) ####Wall size wall_width_slider = cmds.floatSliderGrp( label="Wall Width", field=True, minValue=1.0, maxValue=200.0, value=50.0 ) wall_height_slider = cmds.floatSliderGrp( label="Wall Height", field=True, minValue=1.0, maxValue=200.0, value=20.0 ) ####Spacing & offsets brick_spacing_slider = cmds.floatSliderGrp( label="Brick Spacing", field=True, minValue=0.0, maxValue=2.0, value=0.2 ) row_offset_slider = cmds.floatSliderGrp( label="Row Offset", field=True, minValue=-5.0, maxValue=5.0, value=0.0 ) col_offset_slider = cmds.floatSliderGrp( label="Column Offset", field=True, minValue=-5.0, maxValue=5.0, value=0.0 ) row_offset_every_other_slider = cmds.floatSliderGrp( label="Alt Row X Offset", field=True, minValue=0.0, maxValue=10.0, value=1.0 ) ####Randomness random_rotation_slider = cmds.floatSliderGrp( label="Random Rotation (Y)", field=True, minValue=0.0, maxValue=45.0, value=5.0 ) randomness_slider = cmds.floatSliderGrp( label="Size Randomness", field=True, minValue=0.0, maxValue=2.0, value=0.3 ) ####Geometry bevel_slider = cmds.floatSliderGrp( label="Bevel Width", field=True, minValue=0.0, maxValue=1.0, value=0.1 ) #####Button cmds.button( label="Create Brick Wall", height=40, command=lambda x: create_brick_wall( cmds.floatSliderGrp(width_slider, q=True, value=True), cmds.floatSliderGrp(height_slider, q=True, value=True), cmds.floatSliderGrp(wall_width_slider, q=True, value=True), cmds.floatSliderGrp(wall_height_slider, q=True, value=True), cmds.floatSliderGrp(brick_spacing_slider, q=True, value=True), cmds.floatSliderGrp(row_offset_slider, q=True, value=True), cmds.floatSliderGrp(col_offset_slider, q=True, value=True), cmds.floatSliderGrp(row_offset_every_other_slider, q=True, value=True), cmds.floatSliderGrp(random_rotation_slider, q=True, value=True), cmds.floatSliderGrp(bevel_slider, q=True, value=True), cmds.floatSliderGrp(randomness_slider, q=True, value=True) ) ) cmds.showWindow(window_name) create_brick_wall_gui()