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