59 lines
2.9 KiB
JavaScript
59 lines
2.9 KiB
JavaScript
#!/usr/bin/env node
|
|
import fs from "node:fs";
|
|
import path from "node:path";
|
|
import { createRequire } from "node:module";
|
|
import { pathToFileURL } from "node:url";
|
|
|
|
const root = "/home/mes123456/FreeCADWasmDev/working/FreeCAD";
|
|
const build = path.join(root, "freecad-source/build-web/configure/bin");
|
|
const mode = process.argv[2] ?? "defects";
|
|
const groups = {
|
|
defects: [
|
|
["Mesh::Curvature", "src/Mod/Mesh/App/FeatureMeshCurvature.h"],
|
|
["Mesh::FixDefects", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
|
|
["Mesh::HarmonizeNormals", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
|
|
["Mesh::FlipNormals", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
|
|
["Mesh::FixNonManifolds", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
|
|
["Mesh::FixDuplicatedFaces", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
|
|
["Mesh::FixDuplicatedPoints", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
|
|
["Mesh::FixDegenerations", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
|
|
],
|
|
second: [
|
|
["Mesh::FixDeformations", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
|
|
["Mesh::FixIndices", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
|
|
["Mesh::FillHoles", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
|
|
["Mesh::RemoveComponents", "src/Mod/Mesh/App/FeatureMeshDefects.h"],
|
|
["Mesh::Export", "src/Mod/Mesh/App/FeatureMeshExport.h"],
|
|
["Mesh::Import", "src/Mod/Mesh/App/FeatureMeshImport.h"],
|
|
["Mesh::SegmentByMesh", "src/Mod/Mesh/App/FeatureMeshSegmentByMesh.h"],
|
|
["Mesh::SetOperations", "src/Mod/Mesh/App/FeatureMeshSetOperations.h"],
|
|
],
|
|
};
|
|
const rows = groups[mode];
|
|
if (!rows) throw new Error(`unknown replay mode: ${mode}`);
|
|
globalThis.__dirname = `${build}${path.sep}`;
|
|
globalThis.require = createRequire(import.meta.url);
|
|
const workerJs = path.join(build, "FreeCADWebMeshRuntimeProbe.worker.js");
|
|
const workerCjs = path.join(build, "FreeCADWebMeshRuntimeProbe.worker.cjs");
|
|
if (!fs.existsSync(workerCjs) && fs.existsSync(workerJs)) fs.copyFileSync(workerJs, workerCjs);
|
|
const loader = await import(pathToFileURL(path.join(build, "FreeCADWebMeshRuntimeProbe.js")));
|
|
const kernel = await loader.default({
|
|
wasmBinary: fs.readFileSync(path.join(build, "FreeCADWebMeshRuntimeProbe.wasm")),
|
|
locateFile: file => file.endsWith(".worker.js") ? workerCjs : path.join(build, file),
|
|
print: () => {},
|
|
printErr: () => {},
|
|
});
|
|
const records = rows.map(([name, sourcePath]) => ({
|
|
apiId: `obj:Mesh:${name}`,
|
|
name,
|
|
family: "geometry-recompute",
|
|
kind: "object",
|
|
sourcePath,
|
|
disposition: "planned",
|
|
}));
|
|
const request = { cmd: "mesh.pythonFamilyBatch", args: { tier: "object-contract", records } };
|
|
const result = JSON.parse(String(kernel.ccall("fc_web_dispatch_json", "string", ["string"], [JSON.stringify(request)])));
|
|
if (!result.ok || result.count !== records.length || result.resourcesReleased !== true) throw new Error(JSON.stringify(result));
|
|
console.log(JSON.stringify({ mode, count: result.count, statuses: result.records.map(record => record.status), resourcesReleased: result.resourcesReleased }));
|
|
process.exit(0);
|