84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
import json
|
|
import os
|
|
import sys
|
|
|
|
import bpy
|
|
|
|
|
|
def mesh_object(name, x):
|
|
mesh = bpy.data.meshes.new(f"{name}Mesh")
|
|
mesh.from_pydata(
|
|
[(-1, -1, -1), (1, -1, -1), (1, 1, -1), (-1, 1, -1),
|
|
(-1, -1, 1), (1, -1, 1), (1, 1, 1), (-1, 1, 1)],
|
|
[],
|
|
[(0, 1, 2, 3), (4, 7, 6, 5), (0, 4, 5, 1),
|
|
(1, 5, 6, 2), (2, 6, 7, 3), (4, 0, 3, 7)],
|
|
)
|
|
obj = bpy.data.objects.new(name, mesh)
|
|
obj.location.x = x
|
|
bpy.context.scene.collection.objects.link(obj)
|
|
return obj
|
|
|
|
|
|
def main(output_dir):
|
|
bpy.ops.wm.read_factory_settings(use_empty=True)
|
|
cycle_a = mesh_object("CycleA", -3)
|
|
cycle_b = mesh_object("CycleB", 3)
|
|
missing = mesh_object("MissingTarget", 0)
|
|
ordered = mesh_object("OrderedStack", 0)
|
|
ordered.location.y = 4
|
|
|
|
shrink_a = cycle_a.modifiers.new("Cycle A to B", "SHRINKWRAP")
|
|
shrink_a.target = cycle_b
|
|
shrink_a.show_viewport = True
|
|
shrink_a.show_render = False
|
|
shrink_a.show_in_editmode = True
|
|
shrink_a.show_on_cage = False
|
|
|
|
shrink_b = cycle_b.modifiers.new("Cycle B to A", "SHRINKWRAP")
|
|
shrink_b.target = cycle_a
|
|
shrink_b.show_viewport = True
|
|
shrink_b.show_render = True
|
|
shrink_b.show_in_editmode = False
|
|
shrink_b.show_on_cage = True
|
|
|
|
missing.modifiers.new("Missing Lattice Target", "LATTICE")
|
|
|
|
mirror = ordered.modifiers.new("Ordered Mirror", "MIRROR")
|
|
mirror.show_viewport = True
|
|
mirror.show_render = True
|
|
mirror.show_in_editmode = True
|
|
mirror.show_on_cage = True
|
|
bevel = ordered.modifiers.new("Ordered Bevel", "BEVEL")
|
|
bevel.width = 0.1
|
|
bevel.segments = 2
|
|
bevel.show_viewport = False
|
|
bevel.show_render = True
|
|
bevel.show_in_editmode = False
|
|
bevel.show_on_cage = False
|
|
|
|
scene = bpy.context.scene
|
|
scene.frame_start = 1
|
|
scene.frame_end = 10
|
|
output_path = os.path.join(output_dir, "modifier_dependency_cycle.blend")
|
|
bpy.ops.wm.save_as_mainfile(filepath=output_path)
|
|
|
|
golden = {
|
|
"taskId": "N-002",
|
|
"blenderVersion": bpy.app.version_string,
|
|
"fixture": os.path.basename(output_path),
|
|
"cycleObjects": ["CycleA", "CycleB"],
|
|
"missingTarget": {"object": "MissingTarget", "modifier": "Missing Lattice Target"},
|
|
"orderedStack": {"object": "OrderedStack", "modifiers": ["Ordered Mirror", "Ordered Bevel"]},
|
|
}
|
|
golden_dir = os.path.join(os.path.dirname(output_dir), "..", "golden", "N-002")
|
|
os.makedirs(golden_dir, exist_ok=True)
|
|
with open(os.path.join(golden_dir, "modifier_dependency_cycle.json"), "w", encoding="utf-8") as handle:
|
|
json.dump(golden, handle, indent=2, sort_keys=True)
|
|
handle.write("\n")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
args = sys.argv[sys.argv.index("--") + 1:]
|
|
main(os.path.abspath(args[0]))
|