
import bpy
import bmeshdef create_material(name, color, image_path=None):mat = bpy.data.materials.new(name=name)mat.use_nodes = Truebsdf = mat.node_tree.nodes.get("Principled BSDF")if image_path:tex_image = mat.node_tree.nodes.new("ShaderNodeTexImage")tex_image.image = bpy.data.images.load(image_path)mat.node_tree.links.new(bsdf.inputs['Base Color'], tex_image.outputs['Color'])else:bsdf.inputs['Base Color'].default_value = colorreturn matdef create_house():bpy.ops.object.select_all(action='SELECT')bpy.ops.object.delete(use_global=False)bpy.ops.mesh.primitive_cube_add(size=4, location=(0, 0, 2))wall = bpy.context.active_objectwall.name = "Wall"mesh = bpy.data.meshes.new("Roof_Mesh")roof = bpy.data.objects.new("Roof", mesh)bpy.context.collection.objects.link(roof)bm = bmesh.new()b = 2z_base = 4verts = [bm.verts.new((-b, -b, z_base)),bm.verts.new(( b, -b, z_base)),bm.verts.new(( b, b, z_base)),bm.verts.new((-b, b, z_base)),]top = bm.verts.new((0, 0, z_base + 2)) for i in range(4):bm.faces.new([verts[i], verts[(i + 1) % 4], top])bm.faces.new(verts)bm.to_mesh(mesh)bm.free()wall_mat = create_material("Wall_Mat", (0.8, 0.5, 0.3, 1)) roof_mat = create_material("Roof_Mat", (0.2, 0.1, 0.05, 1)) wall.data.materials.append(wall_mat)roof.data.materials.append(roof_mat)create_house()