I guess you could use something like this:
def main():
import arcpy
fc_out = r'C:\GeoNet\RectangleBlocks\data.gdb\result01'
sr = arcpy.SpatialReference(2276)
x_start = 2523853.5
y_start = 7124354.1
rect_width = 10.0
rect_height = 5.0
num_blocks_h = 6
num_blocks_v = 5
num_rect_in_block_h = 4
num_rect_in_block_v = 8
spacing_h = 3.0
spacing_v = 3.0
rectangles = []
for block_h in range(num_blocks_h):
for block_v in range(num_blocks_v):
for rect_h in range(num_rect_in_block_h):
for rect_v in range(num_rect_in_block_v):
x_min = x_start + block_h * spacing_h + block_h * num_rect_in_block_h * rect_width + rect_h * rect_width
y_min = y_start + block_v * spacing_v + block_v * num_rect_in_block_v * rect_height + rect_v * rect_height
x_max = x_min + rect_width
y_max = y_min + rect_height
rectangle = CreateRactangle(x_min, y_min, x_max, y_max, sr)
rectangles.append(rectangle)
arcpy.CopyFeatures_management(rectangles, fc_out)
def CreateRactangle(x_min, y_min, x_max, y_max, sr):
coords = [[x_min, y_min], [x_min, y_max], [x_max, y_max],
[x_max, y_min], [x_min, y_min]]
return arcpy.Polygon(arcpy.Array([arcpy.Point(*coord) for coord in coords]), sr)
if __name__ == '__main__':
main()
Which results in:
