Complete Smooth modifier gap
This commit is contained in:
@@ -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 };
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
36
tools/web/generated/M16-GAP-00094.py
Normal file
36
tools/web/generated/M16-GAP-00094.py
Normal 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
|
||||
)
|
||||
Reference in New Issue
Block a user