less copy protection, more size visualization
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

81 řádky
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 = "Candy"
  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)