less copy protection, more size visualization
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 

81 Zeilen
2.4 KiB

  1. import bpy
  2. from mathutils import Vector, Euler
  3. from math import pi
  4. import json
  5. import os
  6. import pathlib
  7. GROUP_NAME = "Test"
  8. GROUP_KIND = "objects"
  9. path_info = pathlib.Path(bpy.data.filepath).parent.joinpath("macrovision-directory.txt")
  10. config_path = pathlib.Path(open(path_info).read())
  11. json_path = config_path.joinpath("config.json")
  12. config = json.load(open(json_path.resolve(), encoding="utf-8"))
  13. parent_workdir = config["work-directory"]
  14. workdir = pathlib.Path(parent_workdir).joinpath(GROUP_NAME)
  15. c = bpy.data.objects["cam"]
  16. c.data.type = "ORTHO"
  17. bpy.data.scenes["Scene"].render.resolution_x = 1000
  18. bpy.data.scenes["Scene"].render.resolution_y = 1000
  19. bpy.data.scenes["Scene"].render.film_transparent = True
  20. bpy.data.scenes["Scene"].view_settings.view_transform = "Raw"
  21. bpy.data.worlds["World"].node_tree.nodes["Background"].inputs[1].default_value = 0
  22. a
  23. objects = []
  24. for object in bpy.data.collections["Macrovision"].objects:
  25. if object.type == "MESH":
  26. objects.append(object)
  27. all_data = {}
  28. all_data["name"] = GROUP_NAME
  29. all_data["kind"] = GROUP_KIND
  30. all_data["forms"] = []
  31. os.makedirs(workdir, exist_ok=True)
  32. for selected in objects:
  33. for object in bpy.data.collections["Macrovision"].objects:
  34. object.hide_render = True
  35. selected.hide_render = False
  36. bpy.ops.object.transform_apply( rotation = True )
  37. data = {}
  38. data["name"] = selected.name
  39. data["views"] = []
  40. b = selected
  41. for angles in [[0, 1, 2, "Front"], [1, 1, 2, "Side"], [0, 0, 1, "Top"]]:
  42. local_bbox_center = 0.125 * sum((Vector(box) for box in b.bound_box), Vector())
  43. global_bbox_center = b.matrix_world @ local_bbox_center
  44. c.location = global_bbox_center
  45. c.data.ortho_scale = max(b.dimensions) * 1.1
  46. c.rotation_euler = Euler([angles[1] * pi / 2, 0, angles[0] * pi / 2])
  47. rot = c.rotation_euler.to_matrix()
  48. rot.invert()
  49. c.location = c.location + Vector([0, 0, 3]) @ rot
  50. data["views"].append({
  51. "name": angles[3],
  52. "height": b.dimensions[angles[2]]
  53. })
  54. #s.rotation_euler = c.rotation_euler
  55. filename = f"{b.name}-{angles[3]}.png"
  56. bpy.context.scene.render.filepath = workdir.joinpath(filename).resolve().__str__()
  57. bpy.ops.render.render(write_still = True)
  58. all_data["forms"].append(data)
  59. with open(workdir.joinpath("data.json"), "w") as file:
  60. json.dump(all_data, file)