less copy protection, more size visualization
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 

81 行
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 = "Crackers"
  8. GROUP_KIND = "food"
  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. objects = []
  23. for object in bpy.data.collections["Macrovision"].objects:
  24. if object.type == "MESH" or object.type == "CURVE" or object.type == "SURFACE":
  25. objects.append(object)
  26. all_data = {}
  27. all_data["name"] = GROUP_NAME
  28. all_data["kind"] = GROUP_KIND
  29. all_data["forms"] = []
  30. os.makedirs(workdir, exist_ok=True)
  31. for selected in objects:
  32. for object in bpy.data.collections["Macrovision"].objects:
  33. object.hide_render = True
  34. selected.hide_render = False
  35. bpy.ops.object.transform_apply( rotation = True )
  36. data = {}
  37. data["name"] = selected.name
  38. data["views"] = []
  39. b = selected
  40. for angles in [[0, 1, 2, "Front"], [1, 1, 2, "Side"], [0, 0, 1, "Top"]]:
  41. local_bbox_center = 0.125 * sum((Vector(box) for box in b.bound_box), Vector())
  42. global_bbox_center = b.matrix_world @ local_bbox_center
  43. c.location = global_bbox_center
  44. c.data.ortho_scale = max(b.dimensions) * 1.1
  45. c.rotation_euler = Euler([angles[1] * pi / 2, 0, angles[0] * pi / 2])
  46. rot = c.rotation_euler.to_matrix()
  47. rot.invert()
  48. c.location = c.location + Vector([0, 0, 3]) @ rot
  49. data["views"].append({
  50. "name": angles[3],
  51. "height": b.dimensions[angles[2]]
  52. })
  53. #s.rotation_euler = c.rotation_euler
  54. filename = f"{b.name}-{angles[3]}.png"
  55. bpy.context.scene.render.filepath = workdir.joinpath(filename).resolve().__str__()
  56. bpy.ops.render.render(write_still = True)
  57. all_data["forms"].append(data)
  58. with open(workdir.joinpath("data.json"), "w") as file:
  59. json.dump(all_data, file)