import bpy from mathutils import Vector, Euler from math import pi import json buildings = bpy.data.objects["map"].children c = bpy.data.objects["cam"] #s = bpy.data.objects["sun"] selected = bpy.context.selected_objects[0] data = {} data["name"] = selected.name data["place"] = ["Vancouver"] data["views"] = {} for b in buildings: pick = b.name == data["name"] if not pick: b.hide_render = True else: b.hide_render = False b = selected for angles in [[0, 1, 2, "North"], [0.5, 1, 2, "Northwest"], [1, 1, 2, "West"], [0, 0, 1, "North (Top)"], [1, 0, 0, "West (Top)"]]: local_bbox_center = 0.125 * sum((Vector(box) for box in b.bound_box), Vector()) global_bbox_center = b.matrix_world @ local_bbox_center c.location = global_bbox_center c.data.ortho_scale = max(b.dimensions) * 1.1 c.rotation_euler = Euler([angles[1] * pi / 2, 0, angles[0] * pi / 2]) rot = c.rotation_euler.to_matrix() rot.invert() c.location = c.location + Vector([0, 0, 10000]) @ rot data["views"][angles[3]] = b.dimensions[angles[2]] #s.rotation_euler = c.rotation_euler bpy.context.scene.render.filepath = f"C:/Users/hausss/Desktop/osm/{data['name']}-{angles[3]}.png" bpy.ops.render.render(write_still = True) with open(f"C:/Users/hausss/Desktop/osm/{data['name']}-data.json", "w") as file: json.dump(data, file)