Files
workinf_Blender_Wasm/tools/web/generate-modifier-cycle-fixture.py
2026-08-12 04:47:48 -04:00

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]))