Advance WebGPU volume and bounded workflows
This commit is contained in:
@@ -79,11 +79,13 @@ const curve = before.nonMeshData.find((data) => data.type === "CURVE");
|
||||
const surface = before.nonMeshData.find((data) => data.type === "SURFACE");
|
||||
const font = before.nonMeshData.find((data) => data.type === "FONT");
|
||||
const metaball = before.nonMeshData.find((data) => data.type === "METABALL");
|
||||
const volume = before.nonMeshData.find((data) => data.type === "VOLUME");
|
||||
assert.ok(curve?.controlPoints?.length && curve.splineOffsets?.length);
|
||||
assert.ok(surface?.controlPoints?.length && surface.splineOffsets?.length);
|
||||
assert.deepEqual(surface.splineDimensions, [{ u: 4, v: 4, orderU: 4, orderV: 4 }]);
|
||||
assert.equal(surface.pointWeights?.length, 16);
|
||||
assert.ok(font?.text && metaball?.elements?.length);
|
||||
assert.ok(volume?.sourcePath && volume?.volumeProperties);
|
||||
assert.equal(before.vfonts?.length, 2);
|
||||
assert.ok(before.vfonts.every((resource) => resource.packed && resource.id.startsWith("vfont:")));
|
||||
assert.ok(font.fontLinks);
|
||||
@@ -93,6 +95,27 @@ assert.equal(curve.handleTypes?.length, 6);
|
||||
assert.equal(curve.handlePoints?.length, 18);
|
||||
assert.deepEqual(curve.handlePointIndices, [4, 5, 6]);
|
||||
|
||||
const volumeProperties = {
|
||||
displayDensity: 1.75,
|
||||
interpolation: "NEAREST",
|
||||
stepSize: 0.125,
|
||||
velocityGrid: "velocity",
|
||||
velocityScale: 1.5,
|
||||
};
|
||||
const volumeSourcePath = "//assets/volumes/generated-smoke.vdb";
|
||||
reject(engine, handle, { type: "setVolumeProperties", dataId: volume.id, ...volumeProperties, sourcePath: "../outside.vdb" }, "NON_MESH_PROPERTY_INVALID");
|
||||
command(engine, handle, { type: "setVolumeProperties", dataId: volume.id, ...volumeProperties, sourcePath: volumeSourcePath });
|
||||
let changedVolume = snapshot(engine, handle).nonMeshData.find((data) => data.id === volume.id);
|
||||
assert.equal(changedVolume.sourcePath, volumeSourcePath);
|
||||
assert.deepEqual(changedVolume.volumeProperties, volumeProperties);
|
||||
assert.equal(engine._web_engine_undo(handle), 0, engine.UTF8ToString(engine._web_engine_last_error_message()));
|
||||
changedVolume = snapshot(engine, handle).nonMeshData.find((data) => data.id === volume.id);
|
||||
assert.equal(changedVolume.sourcePath, volume.sourcePath);
|
||||
assert.deepEqual(changedVolume.volumeProperties, volume.volumeProperties);
|
||||
assert.equal(engine._web_engine_redo(handle), 0, engine.UTF8ToString(engine._web_engine_last_error_message()));
|
||||
changedVolume = snapshot(engine, handle).nonMeshData.find((data) => data.id === volume.id);
|
||||
assert.deepEqual(changedVolume.volumeProperties, volumeProperties);
|
||||
|
||||
command(engine, handle, { type: "renameId", id: curve.id, name: "WebCurveRenamed" });
|
||||
const renamedCurve = snapshot(engine, handle).nonMeshData.find((data) => data.type === "CURVE" && data.name === "WebCurveRenamed");
|
||||
assert.equal(renamedCurve?.id, "curve:WebCurveRenamed");
|
||||
@@ -284,6 +307,9 @@ engine._web_engine_destroy(handle);
|
||||
const reopened = engine._web_engine_create();
|
||||
open(engine, reopened, saved);
|
||||
const roundtripped = snapshot(engine, reopened);
|
||||
const reopenedVolume = roundtripped.nonMeshData.find((data) => data.id === volume.id);
|
||||
assert.equal(reopenedVolume.sourcePath, volumeSourcePath);
|
||||
assert.deepEqual(reopenedVolume.volumeProperties, volumeProperties);
|
||||
close(roundtripped.nonMeshData.find((data) => data.id === curveId).controlPoints[0], curvePoints[0], "reopened curve point");
|
||||
assert.deepEqual(roundtripped.nonMeshData.find((data) => data.id === surface.id).splineDimensions, surfaceDimensions);
|
||||
assert.equal(roundtripped.nonMeshData.find((data) => data.id === surface.id).pointCount, 20);
|
||||
@@ -310,4 +336,4 @@ close(createdAfterReopen.handlePoints[1], twoSplineHandlePoints[1], "reopened bu
|
||||
command(engine, reopened, { type: "deleteNonMeshData", dataId: createdAfterReopen.id });
|
||||
assert.equal(snapshot(engine, reopened).nonMeshData.some((data) => data.id === createdAfterReopen.id), false);
|
||||
engine._web_engine_destroy(reopened);
|
||||
console.log("nonmesh-roundtrip-ok types=CURVE,SURFACE,FONT,METABALL multispline-create-delete-bulk-handle-cyclic-surface-2d-topology-font-links=passed undo-redo=passed save-reopen=passed");
|
||||
console.log("nonmesh-roundtrip-ok types=CURVE,SURFACE,FONT,METABALL,VOLUME multispline-create-delete-bulk-handle-cyclic-surface-2d-topology-font-links-volume-properties=passed undo-redo=passed save-reopen=passed");
|
||||
|
||||
Reference in New Issue
Block a user