56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
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])
|