Complete Smooth modifier gap
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:16:16 -04:00
parent 59c151f45d
commit 7fdf4ab027
17 changed files with 404 additions and 12 deletions

View File

@@ -1121,6 +1121,7 @@ const genericModifierTasks = {
"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" },
"M16-GAP-00094": { type: "SMOOTH", stem: "WebGapSmooth", nextTask: "M16-GAP-00095" },
};
if (genericModifierTasks[task]) {
const config = genericModifierTasks[task];
@@ -1149,6 +1150,12 @@ if (genericModifierTasks[task]) {
if (config.type === "EDGE_SPLIT") {
assert.ok(Math.abs(modifier.parameters.splitAngle - desktop.modifier.modifier.splitAngle) < 1e-5);
}
if (config.type === "SMOOTH") {
assert.ok(Math.abs(modifier.parameters.factor - desktop.modifier.modifier.factor) < 1e-5);
assert.equal(modifier.parameters.repeat, desktop.modifier.modifier.iterations);
assert.equal(modifier.parameters.vertexGroup, desktop.modifier.modifier.vertexGroup);
assert.equal(modifier.parameters.smoothFlags, desktop.modifier.modifier.smoothFlags);
}
const saved = output(engine, handle, engine._web_engine_save_blend, true); const reopened = engine._web_engine_create(); open(engine, reopened, saved); const reopenedSnapshot = snapshot(engine, reopened); const reopenedHolder = mesh ? reopenedSnapshot.meshes?.find((value) => value.id === mesh.id) : reopenedSnapshot.nodes?.find((value) => value.id === node.id); assert.deepEqual(reopenedHolder?.modifierStack, holder.modifierStack);
const malformed = new Uint8Array([0x42,0x4c,0x45,0x4e,0x44,0x45,0x52]); const pointer = engine._malloc(malformed.byteLength); let result; try { engine.HEAPU8.set(malformed, pointer); result = engine._web_engine_open_blend(handle, pointer, malformed.byteLength); } finally { engine._free(pointer); } assert.notEqual(result, 0); assert.deepEqual(snapshot(engine, handle), before); engine._web_engine_destroy(handle); engine._web_engine_destroy(reopened);
const report = { schemaVersion: 1, task, operation: `${config.type}_MODIFIER_LOCAL_EXACT`, fixture: { path: path.relative(root, fixture).replaceAll(path.sep, "/"), sha256: desktop.fixtureSha256 }, desktop: { status: "EXACT", report: path.relative(root, desktopPath).replaceAll(path.sep, "/"), saveReopen: desktop.saveReopen }, wasm: { status: "EXACT", objectId: node?.id, meshId: mesh?.id, modifier }, saveReopen: "EXACT", negative: { malformedBlend: "REJECTED_WITHOUT_MAIN_MUTATION" }, nextTask: config.nextTask };

View File

@@ -46,6 +46,16 @@ def report(task, modifier_type, object_name):
value["modifier"]["textureMapping"] = {"GLOBAL": 1, "LOCAL": 2, "OBJECT": 3, "UV": 4}.get(modifier.texture_coords, 1)
if modifier_type == "EDGE_SPLIT":
value["modifier"]["splitAngle"] = float(modifier.split_angle)
if modifier_type == "SMOOTH":
value["modifier"]["factor"] = float(modifier.factor)
value["modifier"]["iterations"] = int(modifier.iterations)
value["modifier"]["vertexGroup"] = modifier.vertex_group
value["modifier"]["smoothFlags"] = (
(1 if modifier.invert_vertex_group else 0)
| (2 if modifier.use_x else 0)
| (4 if modifier.use_y else 0)
| (8 if modifier.use_z else 0)
)
return value

View File

@@ -0,0 +1,36 @@
#!/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-00094.py -- OUTPUT")
bpy.ops.wm.read_factory_settings(use_empty=True)
mesh = bpy.data.meshes.new("WebGapSmoothMesh")
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("WebGapSmoothObject", mesh)
bpy.context.scene.collection.objects.link(obj)
group = obj.vertex_groups.new(name="WebGapSmoothWeights")
group.add([0, 1], 1.0, "REPLACE")
modifier = obj.modifiers.new(name="WebGapSmooth", type="SMOOTH")
modifier.factor = 0.375
modifier.iterations = 3
modifier.vertex_group = group.name
modifier.invert_vertex_group = True
modifier.use_x = True
modifier.use_y = False
modifier.use_z = True
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
)