Advance M16 modifier parity and context governance
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

This commit is contained in:
mes123456
2026-08-20 10:01:24 -04:00
parent 01028d1ad5
commit 59c151f45d
157 changed files with 6459 additions and 48 deletions

View File

@@ -1103,6 +1103,24 @@ const genericModifierTasks = {
"M16-GAP-00073": { type: "LAPLACIANDEFORM", stem: "WebGapLaplacianDeform", nextTask: "M16-GAP-00074" },
"M16-GAP-00074": { type: "LAPLACIANSMOOTH", stem: "WebGapLaplacianSmooth", nextTask: "M16-GAP-00075" },
"M16-GAP-00075": { type: "LATTICE", stem: "WebGapLatticeModifier", nextTask: "M16-GAP-00076" },
"M16-GAP-00076": { type: "LINEART", stem: "WebGapLineart", objectName: "GreasePencilObject", nextTask: "M16-GAP-00077" },
"M16-GAP-00077": { type: "MASK", stem: "WebGapMask", nextTask: "M16-GAP-00078" },
"M16-GAP-00078": { type: "MESH_CACHE", stem: "WebGapMeshCache", nextTask: "M16-GAP-00079" },
"M16-GAP-00079": { type: "MESH_DEFORM", stem: "WebGapMeshDeform", nextTask: "M16-GAP-00080" },
"M16-GAP-00080": { type: "MESH_SEQUENCE_CACHE", stem: "WebGapMeshSequenceCache", nextTask: "M16-GAP-00081" },
"M16-GAP-00081": { type: "MESH_TO_VOLUME", stem: "WebGapMeshToVolume", nextTask: "M16-GAP-00082" },
"M16-GAP-00082": { type: "MIRROR", stem: "WebGapMirror", nextTask: "M16-GAP-00083" },
"M16-GAP-00083": { type: "MULTIRES", stem: "WebGapMultires", nextTask: "M16-GAP-00084" },
"M16-GAP-00084": { type: "NODES", stem: "WebGapNodes", nextTask: "M16-GAP-00085" },
"M16-GAP-00085": { type: "NORMAL_EDIT", stem: "WebGapNormalEdit", nextTask: "M16-GAP-00086" },
"M16-GAP-00086": { type: "OCEAN", stem: "WebGapOcean", nextTask: "M16-GAP-00087" },
"M16-GAP-00087": { type: "PARTICLE_INSTANCE", stem: "WebGapParticleInstance", nextTask: "M16-GAP-00088" },
"M16-GAP-00088": { type: "PARTICLE_SYSTEM", stem: "WebGapParticleSystem", nextTask: "M16-GAP-00089" },
"M16-GAP-00089": { type: "REMESH", stem: "WebGapRemesh", nextTask: "M16-GAP-00090" },
"M16-GAP-00090": { type: "SCREW", stem: "WebGapScrew", nextTask: "M16-GAP-00091" },
"M16-GAP-00091": { type: "SHRINKWRAP", stem: "WebGapShrinkwrap", nextTask: "M16-GAP-00092" },
"M16-GAP-00092": { type: "SIMPLE_DEFORM", stem: "WebGapSimpleDeform", nextTask: "M16-GAP-00093" },
"M16-GAP-00093": { type: "SKIN", stem: "WebGapSkin", nextTask: "M16-GAP-00094" },
};
if (genericModifierTasks[task]) {
const config = genericModifierTasks[task];

View File

@@ -0,0 +1,13 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00076.py -- OUTPUT")
source = pathlib.Path(__file__).resolve().parents[3] / "tests/files/web/modifier_grease_pencil_scene.blend"
bpy.ops.wm.open_mainfile(filepath=str(source), load_ui=False)
bpy.ops.wm.save_as_mainfile(filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True)

View File

@@ -0,0 +1,30 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00077.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapMaskMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapMaskObject", mesh)
bpy.context.scene.collection.objects.link(obj)
group = obj.vertex_groups.new(name="WebGapMaskGroup")
group.add([0, 1], 1.0, "REPLACE")
modifier = obj.modifiers.new(name="WebGapMask", type="MASK")
modifier.vertex_group = group.name
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00078.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapMeshCacheMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapMeshCacheObject", mesh)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapMeshCache", type="MESH_CACHE")
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00079.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapMeshDeformMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapMeshDeformObject", mesh)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapMeshDeform", type="MESH_DEFORM")
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00080.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapMeshSequenceCacheMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapMeshSequenceCacheObject", mesh)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapMeshSequenceCache", type="MESH_SEQUENCE_CACHE")
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,22 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00081.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
volume = bpy.data.volumes.new("WebGapMeshToVolumeData")
obj = bpy.data.objects.new("WebGapMeshToVolumeObject", volume)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapMeshToVolume", type="MESH_TO_VOLUME")
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,29 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00082.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapMirrorMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapMirrorObject", mesh)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapMirror", type="MIRROR")
modifier.use_axis[0] = True
modifier.use_axis[1] = False
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00083.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapMultiresMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapMultiresObject", mesh)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapMultires", type="MULTIRES")
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00084.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapNodesMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapNodesObject", mesh)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapNodes", type="NODES")
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00085.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapNormalEditMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapNormalEditObject", mesh)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapNormalEdit", type="NORMAL_EDIT")
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00086.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapOceanMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapOceanObject", mesh)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapOcean", type="OCEAN")
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00087.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapParticleInstanceMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapParticleInstanceObject", mesh)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapParticleInstance", type="PARTICLE_INSTANCE")
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,25 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00088.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapParticleSystemMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapParticleSystemObject", mesh)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapParticleSystem", type="PARTICLE_SYSTEM")
modifier.show_viewport = True
modifier.show_render = False
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00089.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapRemeshMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapRemeshObject", mesh)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapRemesh", type="REMESH")
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00090.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapScrewMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapScrewObject", mesh)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapScrew", type="SCREW")
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00091.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapShrinkwrapMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapShrinkwrapObject", mesh)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapShrinkwrap", type="SHRINKWRAP")
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00092.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapSimpleDeformMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapSimpleDeformObject", mesh)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapSimpleDeform", type="SIMPLE_DEFORM")
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)

View File

@@ -0,0 +1,27 @@
#!/usr/bin/env python3
import pathlib
import sys
import bpy
if __name__ == "__main__":
arguments = sys.argv[sys.argv.index("--") + 1:]
if len(arguments) != 1:
raise SystemExit("usage: blender -b --python M16-GAP-00093.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapSkinMesh")
mesh.from_pydata(
[(-1.0, -1.0, 0.0), (1.0, -1.0, 0.0), (1.0, 1.0, 0.0), (-1.0, 1.0, 0.0)],
[],
[(0, 1, 2, 3)],
)
obj = bpy.data.objects.new("WebGapSkinObject", mesh)
bpy.context.scene.collection.objects.link(obj)
modifier = obj.modifiers.new(name="WebGapSkin", type="SKIN")
modifier.show_viewport = True
modifier.show_render = False
bpy.context.view_layer.objects.active = obj
obj.select_set(True)
bpy.ops.wm.save_as_mainfile(
filepath=str(pathlib.Path(arguments[0]).resolve()), check_existing=False, compress=True
)