three-slicer-viewer 0.2.5

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.
@@ -0,0 +1,302 @@
1
+ import { strToU8 as V, zipSync as I, zlibSync as z } from "three/examples/jsm/libs/fflate.module.js";
2
+ let $ = !0;
3
+ function it(t) {
4
+ $ = !!t;
5
+ }
6
+ const O = {
7
+ info: (...t) => {
8
+ $ && console.info(...t);
9
+ },
10
+ warn: (...t) => {
11
+ $ && console.warn(...t);
12
+ },
13
+ error: (...t) => {
14
+ $ && console.error(...t);
15
+ }
16
+ };
17
+ function j(t) {
18
+ const e = [];
19
+ let n = null;
20
+ for (let r = 0; r < t.length; r += 8) {
21
+ const a = t[r], f = t[r + 1], c = t[r + 4], s = t[r + 5];
22
+ n && Math.abs(n.lx - a) < 1e-6 && Math.abs(n.ly - f) < 1e-6 ? (n.pts.push(c, s), n.lx = c, n.ly = s) : (n = { pts: [a, f, c, s], lx: c, ly: s }, e.push(n));
23
+ }
24
+ return e.map((r) => r.pts);
25
+ }
26
+ function R(t, e, n, r, a, f) {
27
+ const c = new Array(n).fill(null);
28
+ for (const l of t) {
29
+ const i = l.length / 2;
30
+ for (let o = 0; o < i; o++) {
31
+ const d = (o + 1) % i;
32
+ let u = r(l[o * 2], l[o * 2 + 1]), p = a(l[o * 2], l[o * 2 + 1]), x = r(l[d * 2], l[d * 2 + 1]), w = a(l[d * 2], l[d * 2 + 1]);
33
+ if (p === w) continue;
34
+ if (p > w) {
35
+ const y = u;
36
+ u = x, x = y;
37
+ const _ = p;
38
+ p = w, w = _;
39
+ }
40
+ const b = Math.max(0, Math.ceil(p - 0.5));
41
+ if (b >= n || w < 0.5) continue;
42
+ const m = { x: u + (b + 0.5 - p) / (w - p) * (x - u), dx: (x - u) / (w - p), yEnd: w };
43
+ (c[b] ??= []).push(m);
44
+ }
45
+ }
46
+ const s = [];
47
+ for (let l = 0; l < n; l++) {
48
+ const i = l + 0.5;
49
+ c[l] && s.push(...c[l]);
50
+ for (let o = s.length - 1; o >= 0; o--) s[o].yEnd <= i && s.splice(o, 1);
51
+ s.sort((o, d) => o.x - d.x);
52
+ for (let o = 0; o + 1 < s.length; o += 2) {
53
+ const d = Math.max(0, Math.ceil(s[o].x - 0.5)), u = Math.min(e - 1, Math.floor(s[o + 1].x - 0.5));
54
+ u >= d && f(l, d, u);
55
+ }
56
+ for (const o of s) o.x += o.dx;
57
+ }
58
+ }
59
+ function X(t, e, n = 1) {
60
+ const { px: r, py: a } = e, f = j(t), c = new Uint8Array(r * a);
61
+ if (n <= 1)
62
+ return R(
63
+ f,
64
+ r,
65
+ a,
66
+ (i, o) => e.map(i, o)[0],
67
+ (i, o) => e.map(i, o)[1],
68
+ (i, o, d) => {
69
+ c.fill(255, i * r + o, i * r + d + 1);
70
+ }
71
+ ), c;
72
+ const s = new Uint16Array(r * a);
73
+ R(
74
+ f,
75
+ r * n,
76
+ a * n,
77
+ (i, o) => e.map(i, o)[0] * n,
78
+ (i, o) => e.map(i, o)[1] * n,
79
+ (i, o, d) => {
80
+ const u = i / n | 0;
81
+ for (let p = o; p <= d; p++) s[u * r + (p / n | 0)]++;
82
+ }
83
+ );
84
+ const l = n * n;
85
+ for (let i = 0; i < s.length; i++) c[i] = Math.round(s[i] * 255 / l);
86
+ return c;
87
+ }
88
+ const Y = new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]), G = (() => {
89
+ const t = new Uint32Array(256);
90
+ for (let e = 0; e < 256; e++) {
91
+ let n = e;
92
+ for (let r = 0; r < 8; r++) n = n & 1 ? 3988292384 ^ n >>> 1 : n >>> 1;
93
+ t[e] = n >>> 0;
94
+ }
95
+ return t;
96
+ })(), W = (t) => {
97
+ let e = 4294967295;
98
+ for (let n = 0; n < t.length; n++) e = G[(e ^ t[n]) & 255] ^ e >>> 8;
99
+ return (e ^ 4294967295) >>> 0;
100
+ }, E = (t, e) => {
101
+ const n = new Uint8Array(12 + e.length), r = new DataView(n.buffer);
102
+ r.setUint32(0, e.length);
103
+ for (let f = 0; f < 4; f++) n[4 + f] = t.charCodeAt(f);
104
+ n.set(e, 8);
105
+ const a = n.subarray(4, 8 + e.length);
106
+ return r.setUint32(8 + e.length, W(a)), n;
107
+ }, H = async (t) => {
108
+ const e = new CompressionStream("deflate"), n = [], r = (async () => {
109
+ const l = e.readable.getReader();
110
+ for (; ; ) {
111
+ const { value: i, done: o } = await l.read();
112
+ if (o) break;
113
+ n.push(i);
114
+ }
115
+ })(), a = e.writable.getWriter();
116
+ await a.write(t), await a.close(), await r;
117
+ let f = 0;
118
+ for (const l of n) f += l.length;
119
+ const c = new Uint8Array(f);
120
+ let s = 0;
121
+ for (const l of n)
122
+ c.set(l, s), s += l.length;
123
+ return c;
124
+ };
125
+ async function Z(t, e, n, r = {}) {
126
+ if (t.length !== e * n) throw new Error(`gray8: ${t.length} bytes for ${e}x${n}`);
127
+ const a = new Uint8Array(13), f = new DataView(a.buffer);
128
+ f.setUint32(0, e), f.setUint32(4, n), a[8] = 8, a[9] = 0;
129
+ const c = new Uint8Array(n * (1 + e));
130
+ for (let u = 0; u < n; u++) c.set(t.subarray(u * e, (u + 1) * e), u * (1 + e) + 1);
131
+ const s = typeof CompressionStream < "u" ? await H(c) : r.deflate ? r.deflate(c) : (() => {
132
+ throw new Error("gray8: no CompressionStream and no deflate fallback injected");
133
+ })(), l = [Y, E("IHDR", a), E("IDAT", s), E("IEND", new Uint8Array(0))];
134
+ let i = 0;
135
+ for (const u of l) i += u.length;
136
+ const o = new Uint8Array(i);
137
+ let d = 0;
138
+ for (const u of l)
139
+ o.set(u, d), d += u.length;
140
+ return o;
141
+ }
142
+ function q(t) {
143
+ const e = Number(t.display_width) > 0 ? Number(t.display_width) : 120.96, n = Number(t.display_height) > 0 ? Number(t.display_height) : 68.04, r = Number(t.display_pixels_x) > 0 ? Math.round(Number(t.display_pixels_x)) : 2560, a = Number(t.display_pixels_y) > 0 ? Math.round(Number(t.display_pixels_y)) : 1440, f = t.display_mirror_x !== !1, c = t.display_mirror_y === !0, s = (t.display_orientation ?? "portrait") !== "landscape", l = r / e, i = a / n, o = (u) => (f ? e / 2 - u : u + e / 2) * l, d = (u) => (c ? n / 2 - u : u + n / 2) * i;
144
+ return s ? {
145
+ px: a,
146
+ py: r,
147
+ mirrorX: f,
148
+ portrait: s,
149
+ // canvas columns run along the display's y axis, rows along the (mirrored) x axis
150
+ map: (u, p) => [d(p), o(u)]
151
+ } : {
152
+ px: r,
153
+ py: a,
154
+ mirrorX: f,
155
+ portrait: s,
156
+ map: (u, p) => [o(u), d(p)]
157
+ };
158
+ }
159
+ function J(t, e, n) {
160
+ const r = e.length / 8;
161
+ if (!r) return 0;
162
+ let a = 0;
163
+ t.beginPath();
164
+ let f = NaN, c = NaN;
165
+ for (let s = 0; s < r; s++) {
166
+ const l = e[s * 8], i = e[s * 8 + 1], o = e[s * 8 + 4], d = e[s * 8 + 5];
167
+ (l !== f || i !== c) && (t.moveTo(...n.map(l, i)), a++), t.lineTo(...n.map(o, d)), f = o, c = d;
168
+ }
169
+ return t.fill("evenodd"), a;
170
+ }
171
+ const K = (t) => String(t ?? "");
172
+ function Q({ params: t, stats: e, jobName: n, timestamp: r }) {
173
+ const a = String(t.material_print_speed ?? "fast"), f = {
174
+ action: "print",
175
+ jobDir: n,
176
+ expTime: t.exposure_time,
177
+ expTimeFirst: t.initial_exposure_time,
178
+ expUserProfile: a === "slow" ? 1 : a === "fast" ? 0 : 2,
179
+ fileCreationTimestamp: r ?? "",
180
+ hollow: t.hollowing_enable ? 1 : 0,
181
+ layerHeight: t.layer_height,
182
+ materialName: t.sla_material_settings_id ?? "",
183
+ numFade: t.faded_layers,
184
+ numFast: e.layers,
185
+ numSlow: 0,
186
+ printProfile: t.sla_print_settings_id ?? "",
187
+ printTime: Number(e.time_estimate ?? 0).toFixed(6),
188
+ printerModel: t.printer_model ?? "",
189
+ printerProfile: t.printer_settings_id ?? "",
190
+ printerVariant: t.printer_variant ?? "",
191
+ prusaSlicerVersion: "three-slicer",
192
+ usedMaterial: Number(e.resin_ml ?? 0).toFixed(6)
193
+ };
194
+ return Object.keys(f).sort().map((c) => `${c} = ${K(f[c])}`).join(`
195
+ `) + `
196
+ `;
197
+ }
198
+ const T = (t, e) => `${t}${String(e).padStart(5, "0")}.png`, tt = "Metadata/threeslicer_roles.bin", et = "Metadata/threeslicer_scene.bin";
199
+ function nt({ modelSTL: t, supportMesh: e, padMesh: n, lift: r = 0 }) {
200
+ const a = t instanceof Uint8Array ? t : new Uint8Array(t ?? 0), f = e instanceof Float32Array ? e : new Float32Array(e ?? 0), c = n instanceof Float32Array ? n : new Float32Array(n ?? 0), s = new Uint8Array(12 + a.length + 4 + f.length * 4 + 4 + c.length * 4), l = new DataView(s.buffer);
201
+ s.set([84, 83, 83, 49], 0), l.setFloat32(4, r, !0);
202
+ let i = 8;
203
+ l.setUint32(i, a.length, !0), i += 4, s.set(a, i), i += a.length;
204
+ for (const o of [f, c]) {
205
+ l.setUint32(i, o.length, !0), i += 4;
206
+ for (let d = 0; d < o.length; d++)
207
+ l.setFloat32(i, o[d], !0), i += 4;
208
+ }
209
+ return s;
210
+ }
211
+ function ot(t) {
212
+ const e = t.map(({ paths: c }) => {
213
+ const s = [];
214
+ for (let l = 0; l + 7 < c.length; l += 8) {
215
+ const i = c[l + 3] & 15;
216
+ if (i === 5 || i === 6) for (let o = 0; o < 8; o++) s.push(c[l + o]);
217
+ }
218
+ return s;
219
+ }), n = 8 + e.reduce((c, s) => c + 4 + s.length * 4, 0), r = new Uint8Array(n), a = new DataView(r.buffer);
220
+ r.set([84, 83, 82, 49], 0), a.setUint32(4, e.length, !0);
221
+ let f = 8;
222
+ for (const c of e) {
223
+ a.setUint32(f, c.length, !0), f += 4;
224
+ for (const s of c)
225
+ a.setFloat32(f, s, !0), f += 4;
226
+ }
227
+ return r;
228
+ }
229
+ function rt({ layers: t, params: e, makeWorker: n, workerCount: r, onProgress: a, aa: f = 1 }) {
230
+ return new Promise((c, s) => {
231
+ const l = new Array(t.length), i = new Array(r).fill(0);
232
+ let o = 0, d = !1;
233
+ const u = [], p = (x) => {
234
+ d = !0, u.forEach((w) => w.terminate()), s(x);
235
+ };
236
+ for (let x = 0; x < r; x++) {
237
+ const w = [], b = [];
238
+ for (let y = x; y < t.length; y += r)
239
+ w.push(y), b.push(t[y].paths);
240
+ const m = n();
241
+ u.push(m), m.onerror = (y) => p(new Error("SL1 encode worker: " + (y?.message || "failed"))), m.onmessage = ({ data: y }) => {
242
+ if (!d) {
243
+ if (y.progress != null) {
244
+ i[x] = y.progress, a?.(i.reduce((_, U) => _ + U, 0), t.length);
245
+ return;
246
+ }
247
+ y.indices.forEach((_, U) => {
248
+ l[_] = y.pngs[U];
249
+ }), m.terminate(), ++o === r && c(l);
250
+ }
251
+ }, m.postMessage({ indices: w, paths: b, params: e, aa: f });
252
+ }
253
+ });
254
+ }
255
+ async function lt({ layers: t, params: e, stats: n, jobName: r = "plate", timestamp: a, makeCanvas: f, onProgress: c, scene: s = null, makeWorker: l = null, workerCount: i = 0, aa: o = 1, gpuRaster: d = null }) {
256
+ const u = f ?? null, p = q(e), x = {}, w = l && typeof Worker < "u" && t.length > 1 ? {
257
+ makeWorker: l,
258
+ workerCount: Math.max(1, Math.min(i > 0 ? i : 4, t.length))
259
+ } : null, b = () => performance.now(), m = { canvas: 0, clear: 0, draw: 0, encode: 0, read: 0 }, y = (h, g) => {
260
+ const v = b();
261
+ return m[h] += v - g, v;
262
+ };
263
+ let _ = 0, U = 0;
264
+ const B = async (h) => {
265
+ let g = b();
266
+ if (!u) {
267
+ const P = d ? await d(t[h].paths, p, o, t[h], h) : X(t[h].paths, p, o);
268
+ g = y("draw", g);
269
+ const D = await Z(P, p.px, p.py, { deflate: z });
270
+ return y("encode", g), _ += D.length, D;
271
+ }
272
+ const v = u(p.px, p.py), S = v.getContext("2d");
273
+ g = y("canvas", g), S.fillStyle = "#000", S.fillRect(0, 0, p.px, p.py), g = y("clear", g), S.fillStyle = "#fff", U += J(S, t[h].paths, p), g = y("draw", g);
274
+ const L = await v.convertToBlob({ type: "image/png" });
275
+ g = y("encode", g);
276
+ const C = new Uint8Array(await L.arrayBuffer());
277
+ return y("read", g), _ += C.length, C;
278
+ }, F = b();
279
+ if (w) {
280
+ const h = await rt({ layers: t, params: e, onProgress: c, aa: o, ...w });
281
+ for (let g = 0; g < t.length; g++)
282
+ x[T(r, g)] = [h[g], { level: 0 }], _ += h[g].length;
283
+ } else
284
+ for (let h = 0; h < t.length; h++)
285
+ x[T(r, h)] = [await B(h), { level: 0 }], h & 31 || c?.(h, t.length);
286
+ const M = b();
287
+ x["config.ini"] = V(Q({ params: e, stats: n, jobName: r, timestamp: a })), x[tt] = [ot(t), { level: 6 }], s && (x[et] = [nt(s), { level: 6 }]);
288
+ const N = b(), k = I(x), A = (h) => h.toFixed(0);
289
+ return O.info(`[vp-prof] sl1 build: ${t.length} layers ${p.px}x${p.py},` + (w ? ` raster ${A(M - F)}ms (${w.workerCount} workers),` : ` ${U} loops, raster ${A(M - F)}ms (canvas ${A(m.canvas)} + clear ${A(m.clear)} + draw ${A(m.draw)} + encode ${A(m.encode)} + read ${A(m.read)}),`) + ` sidecar ${A(N - M)}ms, zip ${A(b() - N)}ms -> ${(k.byteLength / 1e6).toFixed(1)}MB (png ${(_ / 1e6).toFixed(1)}MB)`), k;
290
+ }
291
+ export {
292
+ et as S,
293
+ tt as a,
294
+ j as b,
295
+ it as c,
296
+ J as d,
297
+ Z as e,
298
+ O as l,
299
+ lt as m,
300
+ X as r,
301
+ q as s
302
+ };
@@ -0,0 +1,176 @@
1
+ const U = new Int8Array(8), W = new Int8Array(8), G = new Int8Array(8);
2
+ for (let t = 0; t < 8; t++)
3
+ U[t] = t & 1, W[t] = t >> 1 & 1, G[t] = t >> 2 & 1;
4
+ const T = [], rt = [];
5
+ for (let t = 0; t < 8; t++) for (let l = t + 1; l < 8; l++)
6
+ Math.abs(U[t] - U[l]) + Math.abs(W[t] - W[l]) + Math.abs(G[t] - G[l]) === 1 && (T.push(t), rt.push(l));
7
+ const ot = 127.5, q = (t) => t > ot, x = (t) => {
8
+ const l = [];
9
+ let A = new t(1048576), r = 0, m = 0;
10
+ return {
11
+ push3(u, C, h) {
12
+ r + 3 > A.length && (l.push(A.subarray(0, r)), m += r, A = new t(1 << 20), r = 0), A[r++] = u, A[r++] = C, A[r++] = h;
13
+ },
14
+ concat() {
15
+ l.push(A.subarray(0, r)), m += r;
16
+ const u = new t(m);
17
+ let C = 0;
18
+ for (const h of l)
19
+ u.set(h, C), C += h.length;
20
+ return u;
21
+ }
22
+ };
23
+ }, ct = { 0: [0.68, 0.238, 0.023], 5: [0.328, 0.188, 0.687], 6: [0.434, 0.352, 0.144] };
24
+ function ht(t, l, A, r, m, u, C, h) {
25
+ const b = t + 1, a = l + 1;
26
+ let o = new Int32Array(b * a).fill(-1), i = new Int32Array(b * a).fill(-1);
27
+ const N = null;
28
+ let F = N, w = N, H = null, P = null, J = null, d = null, at = 0;
29
+ const tt = x(Float32Array), Y = x(Uint32Array), et = x(Float32Array);
30
+ let nt = 0, Q = !1;
31
+ const S = (g, c, n) => !g || c < 0 || n < 0 || c >= t || n >= l ? 0 : g[c + t * n], O = new Float64Array(8);
32
+ function lt(g, c, n, R, s, k, y, p) {
33
+ const e = c + 1 + b * (n + 1), M = g[e];
34
+ if (M >= 0) return M;
35
+ O[0] = S(s, c, n), O[1] = S(s, c + 1, n), O[2] = S(s, c, n + 1), O[3] = S(s, c + 1, n + 1), O[4] = S(k, c, n), O[5] = S(k, c + 1, n), O[6] = S(k, c, n + 1), O[7] = S(k, c + 1, n + 1);
36
+ let z = 0, f = 0, I = 0, v = 0;
37
+ for (let E = 0; E < T.length; E++) {
38
+ const B = T[E], L = rt[E];
39
+ if (q(O[B]) === q(O[L])) continue;
40
+ const X = Math.min(1, Math.max(0, (ot - O[B]) / (O[L] - O[B])));
41
+ z += U[B] + X * (U[L] - U[B]), f += W[B] + X * (W[L] - W[B]), I += G[B] + X * (G[L] - G[B]), v++;
42
+ }
43
+ const K = v ? z / v : 0.5, j = v ? f / v : 0.5, D = v ? I / v : 0.5;
44
+ if (tt.push3(u + (c + K + 0.5) * A, C + (n + j + 0.5) * r, h + (R + D + 0.5) * m), Q) {
45
+ let E = 0;
46
+ for (let L = 0; L < 8; L++) {
47
+ if (!q(O[L])) continue;
48
+ const X = S(G[L] ? p : y, c + U[L], n + W[L]);
49
+ if (X === 5) {
50
+ E = 5;
51
+ break;
52
+ }
53
+ X === 6 && (E = 6);
54
+ }
55
+ const B = ct[E];
56
+ et.push3(B[0], B[1], B[2]);
57
+ }
58
+ return g[e] = nt, nt++;
59
+ }
60
+ const Z = (g, c, n) => c === N || n < 0 || n >= l ? t : g ? g[n * 2] : 0, _ = (g, c, n) => c === N || n < 0 || n >= l ? -1 : g ? g[n * 2 + 1] : t - 1;
61
+ function V(g, c, n) {
62
+ const R = at++, s = (e, M) => lt(o, e, M, R - 1, F, w, H, P), k = (e, M) => lt(i, e, M, R, w, g, P, c), y = (e, M, z, f, I) => {
63
+ I ? (Y.push3(f, z, M), Y.push3(f, M, e)) : (Y.push3(e, M, z), Y.push3(e, z, f));
64
+ };
65
+ for (let e = 0; e < l; e++) {
66
+ const M = Math.min(Z(J, F, e), Z(d, w, e)), z = Math.max(_(J, F, e), _(d, w, e));
67
+ for (let f = M; f <= z; f++) {
68
+ const I = q(S(F, f, e)), v = q(S(w, f, e));
69
+ I !== v && y(s(f - 1, e - 1), s(f, e - 1), s(f, e), s(f - 1, e), !I);
70
+ }
71
+ }
72
+ for (let e = 0; e < l; e++) {
73
+ const M = Z(d, w, e), z = _(d, w, e);
74
+ for (let f = M - 1; f <= z; f++) {
75
+ const I = q(S(w, f, e)), v = q(S(w, f + 1, e));
76
+ I !== v && y(s(f, e - 1), s(f, e), k(f, e), k(f, e - 1), !I);
77
+ }
78
+ }
79
+ for (let e = -1; e < l; e++) {
80
+ const M = Math.min(Z(d, w, e), Z(d, w, e + 1)), z = Math.max(_(d, w, e), _(d, w, e + 1));
81
+ for (let f = M; f <= z; f++) {
82
+ const I = q(S(w, f, e)), v = q(S(w, f, e + 1));
83
+ I !== v && y(s(f - 1, e), k(f - 1, e), k(f, e), s(f, e), !I);
84
+ }
85
+ }
86
+ const p = o;
87
+ o = i, i = p.fill(-1);
88
+ }
89
+ let $ = !1;
90
+ return {
91
+ // Slices arrive bottom-up. Layer s can only be processed once s+1 is known (its cells' upper corners live
92
+ // there), so the first slice just primes the window and every later push runs the step one layer behind.
93
+ // `roles` is an optional parallel Uint8Array (0=model, 5=support, 6=pad) that turns on vertex colours;
94
+ // `ranges` the per-row occupancy spans fillSliceFromRGBA returns, which confine the sweep to the model.
95
+ pushSlice(g, c = null, n = null) {
96
+ if (c && (Q = !0), !$) {
97
+ $ = !0, w = g, P = c, d = n;
98
+ return;
99
+ }
100
+ V(g, c), F = w, w = g, H = P, P = c, J = d, d = n;
101
+ },
102
+ finish({ smoothRounds: g = 0, normalRounds: c = 0 } = {}) {
103
+ $ && (V(N, null), F = w, w = N, H = P, P = null, J = d, d = null), V(N, null);
104
+ const n = tt.concat(), R = Y.concat();
105
+ g > 0 && st(n, R, g);
106
+ const s = new Float32Array(n.length);
107
+ for (let k = 0; k < R.length; k += 3) {
108
+ const y = R[k] * 3, p = R[k + 1] * 3, e = R[k + 2] * 3, M = n[p] - n[y], z = n[p + 1] - n[y + 1], f = n[p + 2] - n[y + 2], I = n[e] - n[y], v = n[e + 1] - n[y + 1], K = n[e + 2] - n[y + 2], j = z * K - f * v, D = f * I - M * K, E = M * v - z * I;
109
+ s[y] += j, s[y + 1] += D, s[y + 2] += E, s[p] += j, s[p + 1] += D, s[p + 2] += E, s[e] += j, s[e + 1] += D, s[e + 2] += E;
110
+ }
111
+ return ft(s), c > 0 && ut(s, R, c), { positions: n, indices: R, normals: s, colors: Q ? et.concat() : null };
112
+ }
113
+ };
114
+ }
115
+ function ft(t) {
116
+ for (let l = 0; l < t.length; l += 3) {
117
+ const A = Math.hypot(t[l], t[l + 1], t[l + 2]) || 1;
118
+ t[l] /= A, t[l + 1] /= A, t[l + 2] /= A;
119
+ }
120
+ }
121
+ function ut(t, l, A = 2) {
122
+ const r = new Float32Array(t.length);
123
+ for (let m = 0; m < A; m++) {
124
+ r.fill(0);
125
+ for (let u = 0; u < l.length; u += 3) {
126
+ const C = l[u] * 3, h = l[u + 1] * 3, b = l[u + 2] * 3;
127
+ for (const [a, o] of [[C, h], [h, b], [b, C]])
128
+ r[a] += t[o], r[a + 1] += t[o + 1], r[a + 2] += t[o + 2], r[o] += t[a], r[o + 1] += t[a + 1], r[o + 2] += t[a + 2];
129
+ }
130
+ for (let u = 0; u < t.length; u += 3)
131
+ t[u] += 0.5 * r[u], t[u + 1] += 0.5 * r[u + 1], t[u + 2] += 0.5 * r[u + 2];
132
+ ft(t);
133
+ }
134
+ }
135
+ function st(t, l, A = 4) {
136
+ const r = new Float32Array(t.length), m = new Float32Array(t.length / 3), u = (h, b) => {
137
+ const a = h * 3, o = b * 3, i = Math.abs(t[o + 2] - t[a + 2]) + 0.05 * (Math.abs(t[o] - t[a]) + Math.abs(t[o + 1] - t[a + 1])) + 1e-6;
138
+ r[a] += i * t[o], r[a + 1] += i * t[o + 1], r[a + 2] += i * t[o + 2], r[o] += i * t[a], r[o + 1] += i * t[a + 1], r[o + 2] += i * t[a + 2], m[h] += i, m[b] += i;
139
+ }, C = (h) => {
140
+ r.fill(0), m.fill(0);
141
+ for (let b = 0; b < l.length; b += 3) {
142
+ const a = l[b], o = l[b + 1], i = l[b + 2];
143
+ u(a, o), u(o, i), u(i, a);
144
+ }
145
+ for (let b = 0; b < m.length; b++) {
146
+ const a = m[b];
147
+ if (!a) continue;
148
+ const o = b * 3;
149
+ t[o] += h * (r[o] / a - t[o]), t[o + 1] += h * (r[o + 1] / a - t[o + 1]), t[o + 2] += h * (r[o + 2] / a - t[o + 2]);
150
+ }
151
+ };
152
+ for (let h = 0; h < A; h++)
153
+ C(0.5), C(-0.53);
154
+ }
155
+ function bt(t, l, A, r, m) {
156
+ const u = new Uint32Array(l.buffer, l.byteOffset, l.byteLength >> 2), C = new Int32Array(r * 2);
157
+ for (let h = 0; h < r; h++) {
158
+ const b = r - 1 - h, a = h * A * 4 >> 2, o = A * (b + r * m);
159
+ let i = A, N = -1;
160
+ for (let F = 0; F < A; F++) {
161
+ const w = u[a + F];
162
+ if (w === 0) {
163
+ t[o + F] = 0;
164
+ continue;
165
+ }
166
+ const H = w >> 8 & 255;
167
+ t[o + F] = H, H && (F < i && (i = F), F > N && (N = F));
168
+ }
169
+ C[b * 2] = i, C[b * 2 + 1] = N;
170
+ }
171
+ return C;
172
+ }
173
+ export {
174
+ bt as f,
175
+ ht as m
176
+ };
@@ -0,0 +1,24 @@
1
+ import { m as c } from "./sla_reconstruct-CXkYhux2.js";
2
+ let e = null, o = { nets: 0, finish: 0 };
3
+ self.onmessage = (m) => {
4
+ const s = m.data;
5
+ try {
6
+ if (s.init) {
7
+ e = c(s.nx, s.ny, s.sx, s.sy, s.sz, s.ox, s.oy, s.oz), o = { nets: 0, finish: 0 };
8
+ return;
9
+ }
10
+ if (s.slice) {
11
+ const n = performance.now();
12
+ e.pushSlice(s.slice, s.roles, s.ranges), o.nets += performance.now() - n;
13
+ return;
14
+ }
15
+ if (s.finish) {
16
+ const n = performance.now(), { positions: i, indices: t, normals: f, colors: r } = e.finish({ smoothRounds: s.smoothRounds ?? 2, normalRounds: s.normalRounds ?? 0 });
17
+ o.finish = performance.now() - n, e = null;
18
+ const a = [i.buffer, t.buffer, f.buffer];
19
+ r && a.push(r.buffer), self.postMessage({ positions: i, indices: t, normals: f, colors: r, timings: o, producerTimings: s.producerTimings, spin: s.spin }, a);
20
+ }
21
+ } catch (n) {
22
+ self.postMessage({ error: String(n?.message || n) });
23
+ }
24
+ };
@@ -0,0 +1,73 @@
1
+ import { f as D } from "./sla_reconstruct-CXkYhux2.js";
2
+ import { d as H } from "./sl1_write-CvrNejbW.js";
3
+ let i = 6;
4
+ const M = (u, k) => {
5
+ const m = [];
6
+ for (let l = 0; l + 7 < u.length; l += 8) if ((u[l + 3] & 15) === k) for (let e = 0; e < 8; e++) m.push(u[l + e]);
7
+ return m;
8
+ };
9
+ self.onmessage = async (u) => {
10
+ const { indices: k, pngs: m, rolePaths: l, nx: e, ny: r, matrix: w, scale: d, width: B, height: O, batch: A } = u.data;
11
+ A > 0 && (i = A);
12
+ try {
13
+ const s = { decode: 0, draw: 0, read: 0, roles: 0, fill: 0 };
14
+ let n = 0;
15
+ const y = new OffscreenCanvas(e, r * i).getContext("2d", { willReadFrequently: !0 }), f = (l ? new OffscreenCanvas(e, r * i) : null)?.getContext("2d", { willReadFrequently: !0 }), F = (a) => {
16
+ const o = [];
17
+ for (let p = 0; p < i && a + p < m.length; p++) {
18
+ const g = a + p;
19
+ o.push(createImageBitmap(new Blob([m[g]], { type: "image/png" })).then((S) => (m[g] = null, S)));
20
+ }
21
+ return o;
22
+ };
23
+ let I = F(0);
24
+ for (let a = 0; a < m.length; a += i) {
25
+ n = performance.now();
26
+ const o = await Promise.all(I);
27
+ s.decode += performance.now() - n, I = F(a + i), n = performance.now(), y.setTransform(1, 0, 0, 1, 0, 0), y.clearRect(0, 0, e, r * i);
28
+ for (let t = 0; t < o.length; t++)
29
+ y.setTransform(
30
+ w[0] * d,
31
+ w[1] * d,
32
+ w[2] * d,
33
+ w[3] * d,
34
+ w[4] * d,
35
+ w[5] * d + t * r
36
+ ), y.drawImage(o[t], 0, 0), o[t].close?.();
37
+ s.draw += performance.now() - n, n = performance.now();
38
+ const p = y.getImageData(0, 0, e, r * o.length).data;
39
+ s.read += performance.now() - n, n = performance.now();
40
+ let g = null;
41
+ if (f && l.slice(a, a + o.length).some((t) => t && t.length)) {
42
+ f.setTransform(1, 0, 0, 1, 0, 0), f.clearRect(0, 0, e, r * i);
43
+ for (let t = 0; t < o.length; t++) {
44
+ const h = l[a + t] ?? new Float32Array(0), b = t * r, c = { map: (C, v) => [(C + B / 2) / B * e, (O / 2 - v) / O * r + b] };
45
+ f.fillStyle = "#00f", H(f, M(h, 6), c), f.fillStyle = "#f00", H(f, M(h, 5), c);
46
+ }
47
+ g = f.getImageData(0, 0, e, r * o.length).data, s.roles += performance.now() - n, n = performance.now();
48
+ }
49
+ n = performance.now();
50
+ for (let t = 0; t < o.length; t++) {
51
+ const h = new Uint8Array(e * r), b = D(h, p.subarray(t * e * r * 4, (t + 1) * e * r * 4), e, r, 0);
52
+ let c = null;
53
+ if (g) {
54
+ c = new Uint8Array(e * r);
55
+ const v = t * e * r * 4;
56
+ for (let R = 0; R < r; R++) {
57
+ const j = v + R * e * 4, q = e * (r - 1 - R);
58
+ for (let x = 0; x < e; x++) {
59
+ const T = j + x * 4;
60
+ c[q + x] = g[T] > 127 ? 5 : g[T + 2] > 127 ? 6 : 0;
61
+ }
62
+ }
63
+ }
64
+ const C = [h.buffer, b.buffer];
65
+ c && C.push(c.buffer), self.postMessage({ index: k[a + t], slice: h, ranges: b, roles: c }, C);
66
+ }
67
+ s.fill += performance.now() - n;
68
+ }
69
+ self.postMessage({ done: !0, timings: s });
70
+ } catch (s) {
71
+ self.postMessage({ error: String(s?.message || s) });
72
+ }
73
+ };