import bpy import math def material(color): mat = bpy.data.materials.get(color) if mat is None: mat = bpy.data.materials.new(color) rgb = [int(color[i:i+2], 16) / 255 for i in (0, 2, 4)] mat.diffuse_color = rgb + (1,) return mat def box(name, loc, size, color, angle=0): bpy.ops.mesh.primitive_cube_add(size=1, location=loc) obj = bpy.context.object obj.name = name obj.dimensions = size bpy.ops.object.transform_apply(location=False, rotation=False, scale=True) obj.rotation_euler.z = angle obj.data.materials.append(material(color)) bevel = obj.modifiers.new('edge', 'BEVEL') bevel.width = min(0.025, min(size) / 5) bevel.segments = 1 return obj def cylinder(name, loc, radius, depth, color): bpy.ops.mesh.primitive_cylinder_add(vertices=10, radius=radius, depth=depth, location=loc) obj = bpy.context.object obj.name = name obj.data.materials.append(material(color)) return obj box('floor', (0, 0, 0.1), (5.6, 5.6, 0.2), 'e8dfcd', 0) box('wall_back', (0, 2.7, 1.7), (5.6, 0.15, 3), '91aa8a', 0) box('wall_side', (-2.7, 0, 1.7), (0.15, 5.6, 3), '91aa8a', 0) box('trim_back', (0, 2.595, 0.29), (5.2, 0.05, 0.18), 'e8dfcd', 0) box('trim_side', (-2.595, 0, 0.29), (0.05, 5.2, 0.18), 'e8dfcd', 0) box('bed_frame', (-1.15, 0.25, 0.4), (1.6, 2.25, 0.4), '9b704d', -1.5708) box('bed_mattress', (-1.15, 0.25, 0.68), (1.55, 2.15, 0.22), 'e8dfcd', -1.5708) box('bed_headboard', (-1.15, 1.35, 0.88), (1.68, 0.1, 1.25), '9b704d', -1.5708) box('bed_blanket', (-1.15, -0.17, 0.807), (1.57, 1.12, 0.055), 'e2b96b', -1.5708) box('bed_pillow_0', (-1.51, 0.93, 0.86), (0.59, 0.44, 0.16), 'e8dfcd', -1.5708) box('bed_pillow_1', (-0.79, 0.93, 0.86), (0.59, 0.44, 0.16), 'e8dfcd', -1.5708) box('nightstand_body', (0.2, 1.0, 0.46), (0.58, 0.58, 0.52), '9b704d', -1.5708) box('nightstand_door_0', (0.055, 0.695, 0.46), (0.255, 0.035, 0.43), 'e8dfcd', -1.5708) box('nightstand_handle_0', (0.12, 0.66, 0.486), (0.04, 0.04, 0.18), '504945', -1.5708) box('nightstand_door_1', (0.345, 0.695, 0.46), (0.255, 0.035, 0.43), 'e8dfcd', -1.5708) box('nightstand_handle_1', (0.28, 0.66, 0.486), (0.04, 0.04, 0.18), '504945', -1.5708) cylinder('lamp_base', (0.2, 1.0, 0.755), 0.23, 0.07, '514b47') cylinder('lamp_stem', (0.2, 1.0, 0.95), 0.035, 0.46, '514b47') cylinder('lamp_shade', (0.2, 1.0, 1.18), 0.26, 0.35, 'e8dfcd') box('wardrobe_body', (1.75, 1.9, 1.325), (1.15, 0.75, 2.25), '9b704d', -1.5708) box('wardrobe_door_0', (1.4625, 1.51, 1.325), (0.54, 0.035, 2.16), 'e8dfcd', -1.5708) box('wardrobe_handle_0', (1.67, 1.475, 1.4375), (0.04, 0.04, 0.18), '504945', -1.5708) box('wardrobe_door_1', (2.0375, 1.51, 1.325), (0.54, 0.035, 2.16), 'e8dfcd', -1.5708) box('wardrobe_handle_1', (1.83, 1.475, 1.4375), (0.04, 0.04, 0.18), '504945', -1.5708) box('rug', (1.3, -1, 0.22), (1.6, 1.4, 0.04), '91aa8a', -1.5708) cylinder('plant_pot', (2, -1.7, 0.35), 0.19, 0.3, 'e2b96b') cylinder('plant_stem', (2, -1.7, 0.6), 0.035, 0.35, '6d8051') box('plant_leaf_0', (1.89, -1.7, 0.75), (0.25, 0.17, 0.3), '739662', -1.5708) box('plant_leaf_1', (2.11, -1.68, 0.75), (0.25, 0.17, 0.3), '739662', -2.3708) box('plant_leaf_2', (2, -1.6, 0.75), (0.25, 0.17, 0.3), '739662', -3.1708) box('artwork_frame', (0.55, 2.59, 2.2), (0.95, 0.065, 0.7), '9b704d', -1.5708) box('artwork_canvas', (0.55, 2.547, 2.2), (0.83, 0.025, 0.58), 'e8dfcd', -1.5708) box('artwork_shape', (0.62, 2.527, 2.2), (0.37, 0.02, 0.33), 'e2b96b', -1.5708) bpy.context.view_layer.update()