@danielsimonjr/sciengjs 0.5.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/README.md +3 -3
  2. package/THIRD_PARTY_NOTICES.md +9 -5
  3. package/assets/licenses/MIT-three.txt +21 -0
  4. package/assets/three.BufferGeometryUtils.js +1523 -0
  5. package/assets/three.GLTFLoader.js +5006 -0
  6. package/assets/three.OrbitControls.js +1985 -0
  7. package/assets/three.SkeletonUtils.js +496 -0
  8. package/assets/three.core.js +61162 -0
  9. package/assets/three.module.js +19537 -0
  10. package/dist/browser/pinned.d.ts +23 -0
  11. package/dist/browser/pinned.js +18 -0
  12. package/dist/browser/pinned.js.map +1 -1
  13. package/dist/browser/render.d.ts +9 -1
  14. package/dist/browser/render.js +17 -3
  15. package/dist/browser/render.js.map +1 -1
  16. package/dist/config.d.ts +4 -0
  17. package/dist/config.js +10 -1
  18. package/dist/config.js.map +1 -1
  19. package/dist/core.js +4 -0
  20. package/dist/core.js.map +1 -1
  21. package/dist/html/backend-md.d.ts +3 -0
  22. package/dist/html/backend-md.js +52 -0
  23. package/dist/html/backend-md.js.map +1 -0
  24. package/dist/html/convert.d.ts +35 -0
  25. package/dist/html/convert.js +434 -0
  26. package/dist/html/convert.js.map +1 -0
  27. package/dist/html/fetch-image.d.ts +28 -0
  28. package/dist/html/fetch-image.js +178 -0
  29. package/dist/html/fetch-image.js.map +1 -0
  30. package/dist/html/images.d.ts +11 -0
  31. package/dist/html/images.js +53 -0
  32. package/dist/html/images.js.map +1 -0
  33. package/dist/html/index.d.ts +2 -0
  34. package/dist/html/index.js +3 -0
  35. package/dist/html/index.js.map +1 -0
  36. package/dist/html/md.d.ts +23 -0
  37. package/dist/html/md.js +72 -0
  38. package/dist/html/md.js.map +1 -0
  39. package/dist/mesh/backend-glb.d.ts +25 -0
  40. package/dist/mesh/backend-glb.js +74 -0
  41. package/dist/mesh/backend-glb.js.map +1 -0
  42. package/dist/mesh/backend-html.d.ts +6 -0
  43. package/dist/mesh/backend-html.js +12 -0
  44. package/dist/mesh/backend-html.js.map +1 -0
  45. package/dist/mesh/backend-png.d.ts +6 -0
  46. package/dist/mesh/backend-png.js +35 -0
  47. package/dist/mesh/backend-png.js.map +1 -0
  48. package/dist/mesh/glb.d.ts +9 -0
  49. package/dist/mesh/glb.js +163 -0
  50. package/dist/mesh/glb.js.map +1 -0
  51. package/dist/mesh/index.d.ts +5 -0
  52. package/dist/mesh/index.js +5 -0
  53. package/dist/mesh/index.js.map +1 -0
  54. package/dist/mesh/pinned-three.d.ts +6 -0
  55. package/dist/mesh/pinned-three.js +21 -0
  56. package/dist/mesh/pinned-three.js.map +1 -0
  57. package/dist/mesh/read.d.ts +27 -0
  58. package/dist/mesh/read.js +56 -0
  59. package/dist/mesh/read.js.map +1 -0
  60. package/dist/mesh/viewer-script.d.ts +6 -0
  61. package/dist/mesh/viewer-script.js +207 -0
  62. package/dist/mesh/viewer-script.js.map +1 -0
  63. package/dist/mesh/viewer.d.ts +14 -0
  64. package/dist/mesh/viewer.js +39 -0
  65. package/dist/mesh/viewer.js.map +1 -0
  66. package/dist/registry.js +10 -0
  67. package/dist/registry.js.map +1 -1
  68. package/dist/version.d.ts +1 -1
  69. package/dist/version.js +1 -1
  70. package/dist/worker/entry.js +1 -1
  71. package/dist/worker/entry.js.map +1 -1
  72. package/dist/worker/protocol.d.ts +11 -1
  73. package/dist/worker/run.js +1 -1
  74. package/dist/worker/run.js.map +1 -1
  75. package/package.json +14 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinned-three.js","sourceRoot":"","sources":["../../src/mesh/pinned-three.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,IAAI,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,WAAW,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,IAAI,oBAAoB,IAAI,oBAAoB,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACxG,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,27 @@
1
+ /** The CAD input formats that occt-import-js reads. */
2
+ export type CadFormat = "step" | "iges" | "brep";
3
+ /** The linear units that the STEP and IGES readers accept. The default is millimeter. */
4
+ export type LinearUnit = "millimeter" | "meter";
5
+ /** One face of a mesh. The triangles first to last (inclusive) belong to the face. */
6
+ export interface CadFace {
7
+ first: number;
8
+ last: number;
9
+ /** The RGB colour in the range 0 to 1, or null when the face has no colour. */
10
+ color: [number, number, number] | null;
11
+ }
12
+ /** One mesh of a CAD file, as flat arrays. */
13
+ export interface CadMesh {
14
+ name: string;
15
+ /** Vertex positions, three values per vertex. */
16
+ positions: Float32Array;
17
+ /** Vertex normals, three values per vertex, or undefined when the reader gives none. */
18
+ normals: Float32Array | undefined;
19
+ /** Triangle vertex indices, three per triangle. */
20
+ indices: Uint32Array;
21
+ faces: CadFace[];
22
+ }
23
+ /**
24
+ * Reads a STEP, IGES or BREP file to meshes. The linear unit applies to STEP and IGES only.
25
+ * A file that the reader does not accept rejects with E_INPUT.
26
+ */
27
+ export declare function readCad(format: CadFormat, bytes: Uint8Array, linearUnit?: LinearUnit): Promise<CadMesh[]>;
@@ -0,0 +1,56 @@
1
+ import { RenderError } from "../errors.js";
2
+ /** The name of each reader function, by input format. */
3
+ const READER = {
4
+ step: "ReadStepFile",
5
+ iges: "ReadIgesFile",
6
+ brep: "ReadBrepFile",
7
+ };
8
+ /** The one WASM module of this process. It loads once and is shared by every read. */
9
+ let occtPromise;
10
+ /** Loads the WASM module once. A failed load clears the cache so that a later read tries again. */
11
+ function loadOcct() {
12
+ if (occtPromise === undefined) {
13
+ const started = import("occt-import-js").then((mod) => mod.default({ print: () => { }, printErr: () => { } }));
14
+ occtPromise = started;
15
+ started.catch(() => {
16
+ if (occtPromise === started)
17
+ occtPromise = undefined;
18
+ });
19
+ }
20
+ return occtPromise;
21
+ }
22
+ /** Converts one mesh of the reader to flat typed arrays. */
23
+ function toCadMesh(mesh) {
24
+ return {
25
+ name: mesh.name,
26
+ positions: Float32Array.from(mesh.attributes.position.array),
27
+ normals: mesh.attributes.normal === undefined ? undefined : Float32Array.from(mesh.attributes.normal.array),
28
+ indices: Uint32Array.from(mesh.index.array),
29
+ faces: mesh.brep_faces.map((f) => ({
30
+ first: f.first,
31
+ last: f.last,
32
+ color: f.color === null ? null : [f.color[0], f.color[1], f.color[2]],
33
+ })),
34
+ };
35
+ }
36
+ /**
37
+ * Reads a STEP, IGES or BREP file to meshes. The linear unit applies to STEP and IGES only.
38
+ * A file that the reader does not accept rejects with E_INPUT.
39
+ */
40
+ export async function readCad(format, bytes, linearUnit = "millimeter") {
41
+ const occt = await loadOcct();
42
+ const read = occt[READER[format]];
43
+ const params = format === "brep" ? null : { linearUnit };
44
+ let result;
45
+ try {
46
+ result = read(bytes, params);
47
+ }
48
+ catch (error) {
49
+ throw new RenderError("E_INPUT", `the ${format} reader failed: ${error instanceof Error ? error.message : String(error)}`);
50
+ }
51
+ if (!result.success) {
52
+ throw new RenderError("E_INPUT", `the ${format} reader did not accept the file`);
53
+ }
54
+ return result.meshes.map(toCadMesh);
55
+ }
56
+ //# sourceMappingURL=read.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/mesh/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * The module script of the viewer page. The page builder replaces three markers before it writes the page:
3
+ * the two import addresses, the glb text and the flag that shows the panel. The script reports its result in
4
+ * window.__sciengDone, so the browser stage waits for the first drawn frame.
5
+ */
6
+ export declare const VIEWER_SCRIPT = "\nimport * as THREE from \"three\";\nimport { OrbitControls } from \"@@ORBIT@@\";\nimport { GLTFLoader } from \"@@GLTF@@\";\n\nconst GLB_BASE64 = \"@@GLB@@\";\nconst SHOW_CONTROLS = @@CONTROLS@@;\nconst AXIS_KEYS = [\"x\", \"y\", \"z\"];\n\nfunction fail(err) {\n window.__sciengDone = { ok: false, internal: true, message: String((err && err.message) || err) };\n}\n\ntry {\n const renderer = new THREE.WebGLRenderer({ antialias: true });\n renderer.setSize(window.innerWidth, window.innerHeight);\n renderer.setPixelRatio(window.devicePixelRatio || 1);\n renderer.domElement.style.display = \"block\";\n document.body.appendChild(renderer.domElement);\n\n const scene = new THREE.Scene();\n scene.background = new THREE.Color(0xf2f4f7);\n scene.add(new THREE.HemisphereLight(0xffffff, 0x8d939b, 1.2));\n const keyLight = new THREE.DirectionalLight(0xffffff, 2.0);\n keyLight.position.set(1.0, 2.0, 1.5);\n scene.add(keyLight);\n const fillLight = new THREE.DirectionalLight(0xffffff, 0.7);\n fillLight.position.set(-1.5, 0.8, -1.2);\n scene.add(fillLight);\n\n const camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.1, 1000);\n camera.position.set(3.0, 2.0, 4.0);\n\n // The controls fire the change event inside update, so render must not call update.\n function render() {\n renderer.render(scene, camera);\n }\n\n const controls = new OrbitControls(camera, renderer.domElement);\n controls.enableDamping = false;\n controls.addEventListener(\"change\", render);\n\n window.addEventListener(\"resize\", function () {\n camera.aspect = window.innerWidth / window.innerHeight;\n camera.updateProjectionMatrix();\n renderer.setSize(window.innerWidth, window.innerHeight);\n render();\n });\n\n // The plane keeps the part of the model with a coordinate below its value.\n const sectionPlanes = [\n new THREE.Plane(new THREE.Vector3(-1, 0, 0), 0),\n new THREE.Plane(new THREE.Vector3(0, -1, 0), 0),\n new THREE.Plane(new THREE.Vector3(0, 0, -1), 0)\n ];\n const sectionEnabled = [false, false, false];\n const sectionFraction = [0.5, 0.5, 0.5];\n let modelBox = null;\n const parts = [];\n\n function setSection(axis, enabled, fraction) {\n if (!modelBox) return;\n const axisIndex = axis | 0;\n if (axisIndex < 0 || axisIndex > 2) return;\n sectionEnabled[axisIndex] = !!enabled;\n if (fraction !== undefined && fraction !== null) {\n const parsed = Number(fraction);\n if (isFinite(parsed)) sectionFraction[axisIndex] = parsed;\n }\n const axisMin = modelBox.min[AXIS_KEYS[axisIndex]];\n const axisMax = modelBox.max[AXIS_KEYS[axisIndex]];\n sectionPlanes[axisIndex].constant = axisMin + sectionFraction[axisIndex] * (axisMax - axisMin);\n const activePlanes = [];\n for (let k = 0; k < 3; k++) {\n if (sectionEnabled[k]) activePlanes.push(sectionPlanes[k]);\n }\n renderer.clippingPlanes = activePlanes;\n }\n\n function setExplode(f) {\n const amount = Number(f);\n if (!isFinite(amount)) return;\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n part.object.position.copy(part.base).addScaledVector(part.dir, amount * 1.5);\n }\n }\n\n function buildControlsPanel() {\n const panel = document.createElement(\"div\");\n panel.id = \"sciengjs-controls\";\n panel.style.cssText =\n \"position:fixed;top:10px;left:10px;padding:10px;background:#fff;color:#222;font:12px system-ui,Arial,sans-serif;\" +\n \"border-radius:6px;box-shadow:0 1px 4px rgba(0,0,0,.25);z-index:1000\";\n\n function range(value) {\n const input = document.createElement(\"input\");\n input.type = \"range\";\n input.min = \"0\";\n input.max = \"1\";\n input.step = \"0.01\";\n input.value = value;\n input.style.width = \"140px\";\n return input;\n }\n\n const explodeRow = document.createElement(\"div\");\n const explodeLabel = document.createElement(\"label\");\n explodeLabel.textContent = \"Exploded \";\n const explodeInput = range(\"0\");\n explodeInput.id = \"sciengjs-explode\";\n explodeInput.addEventListener(\"input\", function () {\n setExplode(parseFloat(explodeInput.value));\n render();\n });\n explodeLabel.appendChild(explodeInput);\n explodeRow.appendChild(explodeLabel);\n panel.appendChild(explodeRow);\n\n const axisNames = [\"X\", \"Y\", \"Z\"];\n for (let i = 0; i < axisNames.length; i++) {\n const row = document.createElement(\"div\");\n const label = document.createElement(\"label\");\n const checkbox = document.createElement(\"input\");\n checkbox.type = \"checkbox\";\n checkbox.id = \"sciengjs-section-\" + axisNames[i].toLowerCase();\n label.appendChild(checkbox);\n label.appendChild(document.createTextNode(\" Section \" + axisNames[i] + \" \"));\n const slider = range(\"0.5\");\n const update = function () {\n setSection(i, checkbox.checked, parseFloat(slider.value));\n render();\n };\n checkbox.addEventListener(\"change\", update);\n slider.addEventListener(\"input\", update);\n row.appendChild(label);\n row.appendChild(slider);\n panel.appendChild(row);\n }\n document.body.appendChild(panel);\n }\n\n window.__sciengViewer = { setExplode, setSection, render, scene, camera, renderer };\n\n const binary = atob(GLB_BASE64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n\n new GLTFLoader().parse(\n bytes.buffer,\n \"\",\n function (gltf) {\n try {\n const model = gltf.scene;\n model.traverse(function (object) {\n if (!object.isMesh) return;\n if (!object.geometry.attributes.normal) object.geometry.computeVertexNormals();\n const materials = Array.isArray(object.material) ? object.material : [object.material];\n for (const material of materials) material.side = THREE.DoubleSide;\n });\n scene.add(model);\n model.updateMatrixWorld(true);\n\n const box = new THREE.Box3().setFromObject(model);\n const centre = box.getCenter(new THREE.Vector3());\n const boxSize = box.getSize(new THREE.Vector3());\n let size = Math.max(boxSize.x, boxSize.y, boxSize.z);\n if (!isFinite(size) || size <= 0) size = 1;\n modelBox = box;\n\n camera.position.set(centre.x + 0.95 * size, centre.y + 0.7 * size, centre.z + 0.95 * size);\n camera.near = size / 1000;\n camera.far = size * 100;\n camera.updateProjectionMatrix();\n controls.target.copy(centre);\n camera.lookAt(centre);\n controls.update();\n\n for (const child of model.children) {\n const dir = new THREE.Vector3(0, 0, 0);\n const childBox = new THREE.Box3().setFromObject(child);\n if (!childBox.isEmpty()) {\n dir.copy(childBox.getCenter(new THREE.Vector3())).sub(centre);\n if (dir.length() < 1e-9) dir.set(0, 0, 0);\n }\n parts.push({ object: child, base: child.position.clone(), dir: dir });\n }\n\n if (SHOW_CONTROLS) buildControlsPanel();\n render();\n window.__sciengDone = { ok: true, svg: \"\" };\n } catch (err) {\n fail(err);\n }\n },\n fail\n );\n} catch (err) {\n fail(err);\n}\n";
@@ -0,0 +1,207 @@
1
+ /**
2
+ * The module script of the viewer page. The page builder replaces three markers before it writes the page:
3
+ * the two import addresses, the glb text and the flag that shows the panel. The script reports its result in
4
+ * window.__sciengDone, so the browser stage waits for the first drawn frame.
5
+ */
6
+ export const VIEWER_SCRIPT = `
7
+ import * as THREE from "three";
8
+ import { OrbitControls } from "@@ORBIT@@";
9
+ import { GLTFLoader } from "@@GLTF@@";
10
+
11
+ const GLB_BASE64 = "@@GLB@@";
12
+ const SHOW_CONTROLS = @@CONTROLS@@;
13
+ const AXIS_KEYS = ["x", "y", "z"];
14
+
15
+ function fail(err) {
16
+ window.__sciengDone = { ok: false, internal: true, message: String((err && err.message) || err) };
17
+ }
18
+
19
+ try {
20
+ const renderer = new THREE.WebGLRenderer({ antialias: true });
21
+ renderer.setSize(window.innerWidth, window.innerHeight);
22
+ renderer.setPixelRatio(window.devicePixelRatio || 1);
23
+ renderer.domElement.style.display = "block";
24
+ document.body.appendChild(renderer.domElement);
25
+
26
+ const scene = new THREE.Scene();
27
+ scene.background = new THREE.Color(0xf2f4f7);
28
+ scene.add(new THREE.HemisphereLight(0xffffff, 0x8d939b, 1.2));
29
+ const keyLight = new THREE.DirectionalLight(0xffffff, 2.0);
30
+ keyLight.position.set(1.0, 2.0, 1.5);
31
+ scene.add(keyLight);
32
+ const fillLight = new THREE.DirectionalLight(0xffffff, 0.7);
33
+ fillLight.position.set(-1.5, 0.8, -1.2);
34
+ scene.add(fillLight);
35
+
36
+ const camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.1, 1000);
37
+ camera.position.set(3.0, 2.0, 4.0);
38
+
39
+ // The controls fire the change event inside update, so render must not call update.
40
+ function render() {
41
+ renderer.render(scene, camera);
42
+ }
43
+
44
+ const controls = new OrbitControls(camera, renderer.domElement);
45
+ controls.enableDamping = false;
46
+ controls.addEventListener("change", render);
47
+
48
+ window.addEventListener("resize", function () {
49
+ camera.aspect = window.innerWidth / window.innerHeight;
50
+ camera.updateProjectionMatrix();
51
+ renderer.setSize(window.innerWidth, window.innerHeight);
52
+ render();
53
+ });
54
+
55
+ // The plane keeps the part of the model with a coordinate below its value.
56
+ const sectionPlanes = [
57
+ new THREE.Plane(new THREE.Vector3(-1, 0, 0), 0),
58
+ new THREE.Plane(new THREE.Vector3(0, -1, 0), 0),
59
+ new THREE.Plane(new THREE.Vector3(0, 0, -1), 0)
60
+ ];
61
+ const sectionEnabled = [false, false, false];
62
+ const sectionFraction = [0.5, 0.5, 0.5];
63
+ let modelBox = null;
64
+ const parts = [];
65
+
66
+ function setSection(axis, enabled, fraction) {
67
+ if (!modelBox) return;
68
+ const axisIndex = axis | 0;
69
+ if (axisIndex < 0 || axisIndex > 2) return;
70
+ sectionEnabled[axisIndex] = !!enabled;
71
+ if (fraction !== undefined && fraction !== null) {
72
+ const parsed = Number(fraction);
73
+ if (isFinite(parsed)) sectionFraction[axisIndex] = parsed;
74
+ }
75
+ const axisMin = modelBox.min[AXIS_KEYS[axisIndex]];
76
+ const axisMax = modelBox.max[AXIS_KEYS[axisIndex]];
77
+ sectionPlanes[axisIndex].constant = axisMin + sectionFraction[axisIndex] * (axisMax - axisMin);
78
+ const activePlanes = [];
79
+ for (let k = 0; k < 3; k++) {
80
+ if (sectionEnabled[k]) activePlanes.push(sectionPlanes[k]);
81
+ }
82
+ renderer.clippingPlanes = activePlanes;
83
+ }
84
+
85
+ function setExplode(f) {
86
+ const amount = Number(f);
87
+ if (!isFinite(amount)) return;
88
+ for (let i = 0; i < parts.length; i++) {
89
+ const part = parts[i];
90
+ part.object.position.copy(part.base).addScaledVector(part.dir, amount * 1.5);
91
+ }
92
+ }
93
+
94
+ function buildControlsPanel() {
95
+ const panel = document.createElement("div");
96
+ panel.id = "sciengjs-controls";
97
+ panel.style.cssText =
98
+ "position:fixed;top:10px;left:10px;padding:10px;background:#fff;color:#222;font:12px system-ui,Arial,sans-serif;" +
99
+ "border-radius:6px;box-shadow:0 1px 4px rgba(0,0,0,.25);z-index:1000";
100
+
101
+ function range(value) {
102
+ const input = document.createElement("input");
103
+ input.type = "range";
104
+ input.min = "0";
105
+ input.max = "1";
106
+ input.step = "0.01";
107
+ input.value = value;
108
+ input.style.width = "140px";
109
+ return input;
110
+ }
111
+
112
+ const explodeRow = document.createElement("div");
113
+ const explodeLabel = document.createElement("label");
114
+ explodeLabel.textContent = "Exploded ";
115
+ const explodeInput = range("0");
116
+ explodeInput.id = "sciengjs-explode";
117
+ explodeInput.addEventListener("input", function () {
118
+ setExplode(parseFloat(explodeInput.value));
119
+ render();
120
+ });
121
+ explodeLabel.appendChild(explodeInput);
122
+ explodeRow.appendChild(explodeLabel);
123
+ panel.appendChild(explodeRow);
124
+
125
+ const axisNames = ["X", "Y", "Z"];
126
+ for (let i = 0; i < axisNames.length; i++) {
127
+ const row = document.createElement("div");
128
+ const label = document.createElement("label");
129
+ const checkbox = document.createElement("input");
130
+ checkbox.type = "checkbox";
131
+ checkbox.id = "sciengjs-section-" + axisNames[i].toLowerCase();
132
+ label.appendChild(checkbox);
133
+ label.appendChild(document.createTextNode(" Section " + axisNames[i] + " "));
134
+ const slider = range("0.5");
135
+ const update = function () {
136
+ setSection(i, checkbox.checked, parseFloat(slider.value));
137
+ render();
138
+ };
139
+ checkbox.addEventListener("change", update);
140
+ slider.addEventListener("input", update);
141
+ row.appendChild(label);
142
+ row.appendChild(slider);
143
+ panel.appendChild(row);
144
+ }
145
+ document.body.appendChild(panel);
146
+ }
147
+
148
+ window.__sciengViewer = { setExplode, setSection, render, scene, camera, renderer };
149
+
150
+ const binary = atob(GLB_BASE64);
151
+ const bytes = new Uint8Array(binary.length);
152
+ for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
153
+
154
+ new GLTFLoader().parse(
155
+ bytes.buffer,
156
+ "",
157
+ function (gltf) {
158
+ try {
159
+ const model = gltf.scene;
160
+ model.traverse(function (object) {
161
+ if (!object.isMesh) return;
162
+ if (!object.geometry.attributes.normal) object.geometry.computeVertexNormals();
163
+ const materials = Array.isArray(object.material) ? object.material : [object.material];
164
+ for (const material of materials) material.side = THREE.DoubleSide;
165
+ });
166
+ scene.add(model);
167
+ model.updateMatrixWorld(true);
168
+
169
+ const box = new THREE.Box3().setFromObject(model);
170
+ const centre = box.getCenter(new THREE.Vector3());
171
+ const boxSize = box.getSize(new THREE.Vector3());
172
+ let size = Math.max(boxSize.x, boxSize.y, boxSize.z);
173
+ if (!isFinite(size) || size <= 0) size = 1;
174
+ modelBox = box;
175
+
176
+ camera.position.set(centre.x + 0.95 * size, centre.y + 0.7 * size, centre.z + 0.95 * size);
177
+ camera.near = size / 1000;
178
+ camera.far = size * 100;
179
+ camera.updateProjectionMatrix();
180
+ controls.target.copy(centre);
181
+ camera.lookAt(centre);
182
+ controls.update();
183
+
184
+ for (const child of model.children) {
185
+ const dir = new THREE.Vector3(0, 0, 0);
186
+ const childBox = new THREE.Box3().setFromObject(child);
187
+ if (!childBox.isEmpty()) {
188
+ dir.copy(childBox.getCenter(new THREE.Vector3())).sub(centre);
189
+ if (dir.length() < 1e-9) dir.set(0, 0, 0);
190
+ }
191
+ parts.push({ object: child, base: child.position.clone(), dir: dir });
192
+ }
193
+
194
+ if (SHOW_CONTROLS) buildControlsPanel();
195
+ render();
196
+ window.__sciengDone = { ok: true, svg: "" };
197
+ } catch (err) {
198
+ fail(err);
199
+ }
200
+ },
201
+ fail
202
+ );
203
+ } catch (err) {
204
+ fail(err);
205
+ }
206
+ `;
207
+ //# sourceMappingURL=viewer-script.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewer-script.js","sourceRoot":"","sources":["../../src/mesh/viewer-script.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwM5B,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** The options of a viewer page. */
2
+ export interface ViewerOptions {
3
+ /** The page title. */
4
+ title?: string;
5
+ /** True shows the panel with the section and exploded view controls. A png render hides the panel. */
6
+ controls?: boolean;
7
+ }
8
+ /**
9
+ * A page that views one glTF binary. The page embeds the glb as base64 text and loads the pinned Three.js modules
10
+ * from their exact URLs. An import map maps the name three to the pinned URL and holds the integrity value of every
11
+ * module. A modulepreload link with the same integrity value starts each download. The page draws one frame and then
12
+ * sets window.__sciengDone, so the browser stage knows when to take the screenshot.
13
+ */
14
+ export declare function viewerPageHtml(glb: Uint8Array, options?: ViewerOptions): string;
@@ -0,0 +1,39 @@
1
+ import { THREE_MAIN_URL, THREE_MODULES } from "../browser/pinned.js";
2
+ import { VIEWER_SCRIPT } from "./viewer-script.js";
3
+ const PAGE_STYLE = "html,body{margin:0;height:100%;overflow:hidden;background:#f2f4f7}";
4
+ /** Escapes text for an HTML element body. */
5
+ function escapeHtmlText(text) {
6
+ return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
7
+ }
8
+ /** The pinned module with a path inside the three package. */
9
+ function moduleOf(path) {
10
+ const found = THREE_MODULES.find((m) => m.path === path);
11
+ if (found === undefined)
12
+ throw new Error(`the pinned module ${path} is missing`);
13
+ return found;
14
+ }
15
+ /**
16
+ * A page that views one glTF binary. The page embeds the glb as base64 text and loads the pinned Three.js modules
17
+ * from their exact URLs. An import map maps the name three to the pinned URL and holds the integrity value of every
18
+ * module. A modulepreload link with the same integrity value starts each download. The page draws one frame and then
19
+ * sets window.__sciengDone, so the browser stage knows when to take the screenshot.
20
+ */
21
+ export function viewerPageHtml(glb, options = {}) {
22
+ const orbit = moduleOf("examples/jsm/controls/OrbitControls.js");
23
+ const loader = moduleOf("examples/jsm/loaders/GLTFLoader.js");
24
+ const integrity = {};
25
+ for (const m of THREE_MODULES)
26
+ integrity[m.url] = m.sri;
27
+ const importMap = JSON.stringify({ imports: { three: THREE_MAIN_URL }, integrity }).replace(/</g, "\u003c");
28
+ const preload = THREE_MODULES.map((m) => `<link rel="modulepreload" href="${m.url}" integrity="${m.sri}" crossorigin="anonymous">`).join("");
29
+ const script = VIEWER_SCRIPT.replace("@@ORBIT@@", orbit.url)
30
+ .replace("@@GLTF@@", loader.url)
31
+ .replace("@@GLB@@", Buffer.from(glb).toString("base64"))
32
+ .replace("@@CONTROLS@@", options.controls === false ? "false" : "true");
33
+ return ('<!DOCTYPE html><html><head><meta charset="utf-8">' +
34
+ '<meta name="viewport" content="width=device-width, initial-scale=1">' +
35
+ `<title>${escapeHtmlText(options.title ?? "model")}</title><style>${PAGE_STYLE}</style>` +
36
+ `<script type="importmap">${importMap}</script>${preload}</head><body>` +
37
+ `<script type="module">${script}</script></body></html>`);
38
+ }
39
+ //# sourceMappingURL=viewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viewer.js","sourceRoot":"","sources":["../../src/mesh/viewer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAUnD,MAAM,UAAU,GAAG,oEAAoE,CAAC;AAExF,6CAA6C;AAC7C,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACjF,CAAC;AAED,8DAA8D;AAC9D,SAAS,QAAQ,CAAC,IAAY;IAC5B,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IACzD,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,aAAa,CAAC,CAAC;IACjF,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,GAAe,EAAE,OAAO,GAAkB,EAAE;IACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,wCAAwC,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,QAAQ,CAAC,oCAAoC,CAAC,CAAC;IAC9D,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,aAAa;QAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC5G,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAC/B,CAAC,CAAC,EAAE,EAAE,CAAC,mCAAmC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,GAAG,4BAA4B,CACjG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC;SACzD,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC;SAC/B,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SACvD,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1E,OAAO,CACL,mDAAmD;QACnD,sEAAsE;QACtE,UAAU,cAAc,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,kBAAkB,UAAU,UAAU;QACxF,4BAA4B,SAAS,YAAY,OAAO,eAAe;QACvE,yBAAyB,MAAM,yBAAyB,CACzD,CAAC;AACJ,CAAC"}
package/dist/registry.js CHANGED
@@ -21,6 +21,16 @@ export const DEFAULT_REGISTRY = {
21
21
  "mermaid:pdf": { backend: "mermaid/browser/chromium", moduleUrl: backendUrl("mermaid/backend-pdf") },
22
22
  "html:png": { backend: "browser/chromium", moduleUrl: backendUrl("browser/backend-png") },
23
23
  "html:pdf": { backend: "browser/chromium", moduleUrl: backendUrl("browser/backend-pdf") },
24
+ "html:md": { backend: "html/md", moduleUrl: backendUrl("html/backend-md") },
25
+ "step:glb": { backend: "mesh/occt+glb", moduleUrl: backendUrl("mesh/backend-glb") },
26
+ "iges:glb": { backend: "mesh/occt+glb", moduleUrl: backendUrl("mesh/backend-glb") },
27
+ "brep:glb": { backend: "mesh/occt+glb", moduleUrl: backendUrl("mesh/backend-glb") },
28
+ "step:html": { backend: "mesh/occt+viewer", moduleUrl: backendUrl("mesh/backend-html") },
29
+ "iges:html": { backend: "mesh/occt+viewer", moduleUrl: backendUrl("mesh/backend-html") },
30
+ "brep:html": { backend: "mesh/occt+viewer", moduleUrl: backendUrl("mesh/backend-html") },
31
+ "step:png": { backend: "mesh/occt+viewer+browser/chromium", moduleUrl: backendUrl("mesh/backend-png") },
32
+ "iges:png": { backend: "mesh/occt+viewer+browser/chromium", moduleUrl: backendUrl("mesh/backend-png") },
33
+ "brep:png": { backend: "mesh/occt+viewer+browser/chromium", moduleUrl: backendUrl("mesh/backend-png") },
24
34
  };
25
35
  /** Builds the registry key of a pair. */
26
36
  export function registryKey(type, format) {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAazC,iHAAiH;AACjH,SAAS,UAAU,CAAC,IAAY;IAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,OAAO,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,SAAS,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC;AAED,kCAAkC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAa;IACxC,SAAS,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAE;IAC/E,SAAS,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,SAAS,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAE;IAC5F,UAAU,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,CAAC,kBAAkB,CAAC,EAAE;IAClF,UAAU,EAAE,EAAE,OAAO,EAAE,2BAA2B,EAAE,SAAS,EAAE,UAAU,CAAC,kBAAkB,CAAC,EAAE;IAC/F,UAAU,EAAE,EAAE,OAAO,EAAE,+BAA+B,EAAE,SAAS,EAAE,UAAU,CAAC,kBAAkB,CAAC,EAAE;IACnG,UAAU,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,kBAAkB,CAAC,EAAE;IAC9E,UAAU,EAAE,EAAE,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,UAAU,CAAC,kBAAkB,CAAC,EAAE;IAC3F,WAAW,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAE;IACnF,aAAa,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,UAAU,CAAC,qBAAqB,CAAC,EAAE;IAC1F,aAAa,EAAE,EAAE,OAAO,EAAE,6BAA6B,EAAE,SAAS,EAAE,UAAU,CAAC,qBAAqB,CAAC,EAAE;IACvG,SAAS,EAAE,EAAE,OAAO,EAAE,4BAA4B,EAAE,SAAS,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAE;IAChG,aAAa,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE,SAAS,EAAE,UAAU,CAAC,qBAAqB,CAAC,EAAE;IACpG,UAAU,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,CAAC,qBAAqB,CAAC,EAAE;IACzF,UAAU,EAAE,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,CAAC,qBAAqB,CAAC,EAAE;CAC1F,CAAC;AAEF,yCAAyC;AACzC,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAc;IACtD,OAAO,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const ENGINE_VERSION = "0.5.1";
1
+ export declare const ENGINE_VERSION = "0.7.0";
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
1
  // Generated by scripts/prepare-build.mjs from package.json. Do not edit this file by hand.
2
- export const ENGINE_VERSION = "0.5.1";
2
+ export const ENGINE_VERSION = "0.7.0";
3
3
  //# sourceMappingURL=version.js.map
@@ -19,7 +19,7 @@ async function run(job) {
19
19
  throw new RenderError("E_INTERNAL", `backend module ${job.moduleUrl} exports no render function`);
20
20
  }
21
21
  const out = await mod.render(job.request);
22
- return { ok: true, bytes: out.bytes, warnings: out.warnings ?? [], backend: out.backend };
22
+ return { ok: true, bytes: out.bytes, warnings: out.warnings ?? [], backend: out.backend, assets: out.assets };
23
23
  }
24
24
  catch (err) {
25
25
  if (isRenderError(err)) {
@@ -1 +1 @@
1
- {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/worker/entry.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAwB,MAAM,cAAc,CAAC;AAGpG;;;GAGG;AACH,KAAK,UAAU,GAAG,CAAC,GAAc;IAC/B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,kCAAC,GAAG,CAAC,SAAS,EAAC,CAAuF,CAAC;QAChI,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,kBAAkB,GAAG,CAAC,SAAS,6BAA6B,CAAC,CAAC;QACpG,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IAC5F,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;QACjG,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IACpD,CAAC;AACH,CAAC;AAED,MAAM,GAAG,GAAG,UAAuB,CAAC;AACpC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAE,kBAAwC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACrF,OAAO,CAAC,IAAI,GAAG,YAAsC,CAAC;AACxD,CAAC;AACD,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/worker/entry.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,aAAa,EAAwB,MAAM,cAAc,CAAC;AAGpG;;;GAGG;AACH,KAAK,UAAU,GAAG,CAAC,GAAc;IAC/B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,kCAAC,GAAG,CAAC,SAAS,EAAC,CAAuF,CAAC;QAChI,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACrC,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,kBAAkB,GAAG,CAAC,SAAS,6BAA6B,CAAC,CAAC;QACpG,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IAChH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;QACjG,CAAC;QACD,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IACpD,CAAC;AACH,CAAC;AAED,MAAM,GAAG,GAAG,UAAuB,CAAC;AACpC,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAE,kBAAwC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACrF,OAAO,CAAC,IAAI,GAAG,YAAsC,CAAC;AACxD,CAAC;AACD,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC"}
@@ -1,4 +1,5 @@
1
- import type { InputType, OutputFormat, RenderOptions } from "../types.ts";
1
+ import type { NetworkPolicy } from "../config.ts";
2
+ import type { InputType, OutputFormat, RenderAsset, RenderOptions } from "../types.ts";
2
3
  /** The configuration values that a backend reads. */
3
4
  export interface BackendSettings {
4
5
  /** The memory limit of one render, in megabytes. */
@@ -11,6 +12,12 @@ export interface BackendSettings {
11
12
  browser: string | undefined;
12
13
  /** The time limit of one render, in milliseconds. A browser backend cleans up inside this limit. */
13
14
  timeoutMs: number;
15
+ /** The network rule of the configuration. The html to md stage reads it for remote images. */
16
+ allowNetwork: NetworkPolicy;
17
+ /** The time limit of one remote image download, in milliseconds. */
18
+ imageTimeoutMs: number;
19
+ /** The size limit of one remote image body, in bytes. */
20
+ maxImageBytes: number;
14
21
  }
15
22
  /** What the worker receives: one render request and the backend module that serves it. */
16
23
  export interface WorkerJob {
@@ -30,6 +37,8 @@ export interface BackendOutput {
30
37
  warnings?: string[];
31
38
  /** The backend name of this output, when it differs from the registry entry (a route chosen per source). */
32
39
  backend?: string;
40
+ /** Extra files of the render, for example the images of an html to md render. */
41
+ assets?: RenderAsset[];
33
42
  }
34
43
  /** The one message that a worker sends back. */
35
44
  export type WorkerMessage = {
@@ -37,6 +46,7 @@ export type WorkerMessage = {
37
46
  bytes: Uint8Array;
38
47
  warnings: string[];
39
48
  backend?: string;
49
+ assets?: RenderAsset[];
40
50
  } | {
41
51
  ok: false;
42
52
  code: string;
@@ -120,7 +120,7 @@ export function runInWorker(job, limits) {
120
120
  worker.once("message", (msg) => {
121
121
  settle(() => {
122
122
  if (msg.ok) {
123
- resolve({ bytes: msg.bytes, warnings: msg.warnings, backend: msg.backend });
123
+ resolve({ bytes: msg.bytes, warnings: msg.warnings, backend: msg.backend, assets: msg.assets });
124
124
  }
125
125
  else {
126
126
  const code = msg.code;
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/worker/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/worker/run.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danielsimonjr/sciengjs",
3
- "version": "0.5.1",
3
+ "version": "0.7.0",
4
4
  "private": false,
5
5
  "description": "A local rendering engine for science and engineering diagrams, documents and models",
6
6
  "license": "MIT",
@@ -37,6 +37,14 @@
37
37
  "types": "./dist/plot/index.d.ts",
38
38
  "default": "./dist/plot/index.js"
39
39
  },
40
+ "./html": {
41
+ "types": "./dist/html/index.d.ts",
42
+ "default": "./dist/html/index.js"
43
+ },
44
+ "./mesh": {
45
+ "types": "./dist/mesh/index.d.ts",
46
+ "default": "./dist/mesh/index.js"
47
+ },
40
48
  "./package.json": "./package.json"
41
49
  },
42
50
  "files": [
@@ -52,7 +60,7 @@
52
60
  "test": "bun test",
53
61
  "smoke": "node test/smoke/smoke.mjs",
54
62
  "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
55
- "test:node": "node --test test/node/worker.node.mjs test/node/eval-render.node.mjs test/node/worker-execargv.node.mjs test/node/math.node.mjs"
63
+ "test:node": "node --test test/node/worker.node.mjs test/node/eval-render.node.mjs test/node/worker-execargv.node.mjs test/node/math.node.mjs test/node/mesh.node.mjs"
56
64
  },
57
65
  "keywords": [
58
66
  "graphviz",
@@ -80,11 +88,14 @@
80
88
  "@types/node": "^22",
81
89
  "mermaid": "11.17.2",
82
90
  "plotly.js-dist-min": "4.2.0",
91
+ "three": "0.187.0",
83
92
  "typescript": "^7.0.2"
84
93
  },
85
94
  "dependencies": {
86
95
  "@mathjax/src": "4.1.3",
87
96
  "@resvg/resvg-wasm": "2.6.2",
88
- "@viz-js/viz": "3.31.0"
97
+ "@viz-js/viz": "3.31.0",
98
+ "occt-import-js": "0.0.23",
99
+ "parse5": "8.1.0"
89
100
  }
90
101
  }