|  | 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"] = ["Chicago"]
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)
 |