import pathlib import sys import bpy def main(output_path): bpy.ops.wm.read_factory_settings(use_empty=True) mask = bpy.data.masks.new("WebMask") layer = mask.layers.new(name="WebMaskLayer") layer.alpha = 0.625 layer.hide_select = True spline = layer.splines.new() spline.use_cyclic = True spline.use_fill = False spline.points.add(2) values = [ ((0.1, 0.2), (0.0, 0.2), (0.2, 0.2), "ALIGNED", 0.25, True), ((0.5, 0.7), (0.4, 0.7), (0.6, 0.7), "VECTOR", 0.5, False), ((0.8, 0.3), (0.7, 0.3), (0.9, 0.3), "FREE", 0.75, True), ] for point, value in zip(spline.points, values): co, left, right, handle_type, weight, selected = value point.co = co point.handle_left = left point.handle_right = right point.handle_type = handle_type point.weight = weight point.select = selected editable_layer = mask.layers.new(name="WebEditableLayer") editable_spline = editable_layer.splines.new() editable_spline.points.add(1) editable_values = [ ((0.2, 0.2), (0.1, 0.2), (0.35, 0.4)), ((0.8, 0.2), (0.65, 0.4), (0.9, 0.2)), ] for point, (co, left, right) in zip(editable_spline.points, editable_values): point.co = co point.handle_left = left point.handle_right = right point.handle_type = "FREE" path = pathlib.Path(output_path).resolve() path.parent.mkdir(parents=True, exist_ok=True) bpy.ops.wm.save_as_mainfile(filepath=str(path), compress=False) print(f"mask-fixture-generated path={path} points={len(spline.points)}") if __name__ == "__main__": arguments = sys.argv[sys.argv.index("--") + 1:] if len(arguments) != 1: raise SystemExit("usage: blender -b --python generate-mask-fixture.py -- output.blend") main(arguments[0])