@solid-labs/fab-one-widget 0.1.10 → 0.1.12
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.
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { createContext as
|
|
3
|
-
import { useFrame as
|
|
4
|
-
import { Html as
|
|
1
|
+
import { jsxs as F, jsx as i, Fragment as Oe } from "react/jsx-runtime";
|
|
2
|
+
import { createContext as Zn, Component as Kn, useCallback as re, useMemo as j, useState as E, memo as Un, useEffect as ne, useRef as le, forwardRef as Jn, createElement as en } from "react";
|
|
3
|
+
import { useFrame as an, useThree as cn, Canvas as Qn } from "@react-three/fiber";
|
|
4
|
+
import { Html as Xe, Line as fe, OrbitControls as dn } from "@react-three/drei";
|
|
5
5
|
import * as O from "three";
|
|
6
|
-
import { Plane as
|
|
7
|
-
import { create as
|
|
8
|
-
import { OBJLoader as
|
|
9
|
-
import { STLLoader as
|
|
10
|
-
import { MeshBVH as
|
|
11
|
-
let
|
|
6
|
+
import { Plane as ut, Vector3 as C, Box3 as fn, Line3 as un, Raycaster as qn } from "three";
|
|
7
|
+
import { create as eo } from "zustand";
|
|
8
|
+
import { OBJLoader as pn } from "three/examples/jsm/loaders/OBJLoader.js";
|
|
9
|
+
import { STLLoader as to } from "three/examples/jsm/loaders/STLLoader.js";
|
|
10
|
+
import { MeshBVH as pt } from "three-mesh-bvh";
|
|
11
|
+
let mr, ct, ir, Cn;
|
|
12
12
|
let __tla = (async () => {
|
|
13
|
-
const
|
|
13
|
+
const no = {
|
|
14
14
|
showDragDrop: true,
|
|
15
15
|
showStartOver: true,
|
|
16
16
|
showDebug: true,
|
|
@@ -19,7 +19,7 @@ let __tla = (async () => {
|
|
|
19
19
|
showNavigation: true,
|
|
20
20
|
showToolbar: false,
|
|
21
21
|
showSaveButton: true
|
|
22
|
-
},
|
|
22
|
+
}, oo = {
|
|
23
23
|
showDragDrop: false,
|
|
24
24
|
showStartOver: false,
|
|
25
25
|
showDebug: false,
|
|
@@ -28,7 +28,7 @@ let __tla = (async () => {
|
|
|
28
28
|
showNavigation: false,
|
|
29
29
|
showToolbar: false,
|
|
30
30
|
showSaveButton: false
|
|
31
|
-
},
|
|
31
|
+
}, ro = Zn(no), Dt = eo((e, r) => ({
|
|
32
32
|
landmarkPoints: [],
|
|
33
33
|
isAligned: false,
|
|
34
34
|
isCut: false,
|
|
@@ -64,13 +64,13 @@ let __tla = (async () => {
|
|
|
64
64
|
isAligned: false,
|
|
65
65
|
isCut: false
|
|
66
66
|
})
|
|
67
|
-
})),
|
|
67
|
+
})), io = 0.45, ht = 3, _t = 1e-3, dt = 25.4, so = [
|
|
68
68
|
0.25,
|
|
69
69
|
-0.25,
|
|
70
70
|
0.5,
|
|
71
71
|
-0.5
|
|
72
72
|
];
|
|
73
|
-
function
|
|
73
|
+
function lo(e) {
|
|
74
74
|
var _a;
|
|
75
75
|
const r = e.match(/^v\s+\S+\s+\S+\s+\S+(.*)$/m);
|
|
76
76
|
if (!r || !((_a = r[1]) == null ? void 0 : _a.trim().includes(" "))) return null;
|
|
@@ -90,68 +90,68 @@ let __tla = (async () => {
|
|
|
90
90
|
colors: new Float32Array(l)
|
|
91
91
|
} : null;
|
|
92
92
|
}
|
|
93
|
-
function
|
|
93
|
+
function ao(e, r, t, o) {
|
|
94
94
|
const l = e.getAttribute("position"), s = l.count, c = new Float32Array(s * 3), a = r.length / 3;
|
|
95
95
|
let n = 1 / 0, h = 1 / 0, d = 1 / 0, u = -1 / 0, p = -1 / 0, g = -1 / 0;
|
|
96
96
|
for (let k = 0; k < a; k++) {
|
|
97
97
|
const B = r[k * 3] * o, $ = r[k * 3 + 1] * o, N = r[k * 3 + 2] * o;
|
|
98
98
|
B < n && (n = B), B > u && (u = B), $ < h && (h = $), $ > p && (p = $), N < d && (d = N), N > g && (g = N);
|
|
99
99
|
}
|
|
100
|
-
const M = (n + u) * 0.5, f = (h + p) * 0.5, m = (d + g) * 0.5, x = u - n + 1e-6, S = p - h + 1e-6, I = g - d + 1e-6,
|
|
100
|
+
const M = (n + u) * 0.5, f = (h + p) * 0.5, m = (d + g) * 0.5, x = u - n + 1e-6, S = p - h + 1e-6, I = g - d + 1e-6, P = x * 0.5, L = S * 0.5, b = I * 0.5, z = Math.min(128, Math.max(16, Math.round(Math.cbrt(a)))), y = x / z, D = S / z, w = I / z, A = /* @__PURE__ */ new Map();
|
|
101
101
|
for (let k = 0; k < a; k++) {
|
|
102
|
-
const B = r[k * 3] * o - M, $ = r[k * 3 + 1] * o - f, N = r[k * 3 + 2] * o - m, U = Math.min(z - 1, Math.max(0, Math.floor((B +
|
|
103
|
-
let ie = A.get(
|
|
104
|
-
ie || (ie = [], A.set(
|
|
102
|
+
const B = r[k * 3] * o - M, $ = r[k * 3 + 1] * o - f, N = r[k * 3 + 2] * o - m, U = Math.min(z - 1, Math.max(0, Math.floor((B + P) / y))), be = Math.min(z - 1, Math.max(0, Math.floor(($ + L) / D))), ae = Math.min(z - 1, Math.max(0, Math.floor((N + b) / w))), ue = U * z * z + be * z + ae;
|
|
103
|
+
let ie = A.get(ue);
|
|
104
|
+
ie || (ie = [], A.set(ue, ie)), ie.push(k);
|
|
105
105
|
}
|
|
106
106
|
for (let k = 0; k < s; k++) {
|
|
107
|
-
const B = l.getX(k), $ = l.getY(k), N = l.getZ(k), U = Math.min(z - 1, Math.max(0, Math.floor((B +
|
|
108
|
-
let
|
|
109
|
-
for (let J = 0; J <= z &&
|
|
110
|
-
for (let Y = -J; Y <= J; Y++) for (let
|
|
111
|
-
if (J > 0 && Math.abs(Y) < J && Math.abs(
|
|
112
|
-
const
|
|
113
|
-
if (
|
|
114
|
-
const H = A.get(
|
|
107
|
+
const B = l.getX(k), $ = l.getY(k), N = l.getZ(k), U = Math.min(z - 1, Math.max(0, Math.floor((B + P) / y))), be = Math.min(z - 1, Math.max(0, Math.floor(($ + L) / D))), ae = Math.min(z - 1, Math.max(0, Math.floor((N + b) / w)));
|
|
108
|
+
let ue = 1 / 0, ie = 0;
|
|
109
|
+
for (let J = 0; J <= z && ue > 0; J++) {
|
|
110
|
+
for (let Y = -J; Y <= J; Y++) for (let he = -J; he <= J; he++) for (let Z = -J; Z <= J; Z++) {
|
|
111
|
+
if (J > 0 && Math.abs(Y) < J && Math.abs(he) < J && Math.abs(Z) < J) continue;
|
|
112
|
+
const ge = U + Y, me = be + he, pe = ae + Z;
|
|
113
|
+
if (ge < 0 || ge >= z || me < 0 || me >= z || pe < 0 || pe >= z) continue;
|
|
114
|
+
const H = A.get(ge * z * z + me * z + pe);
|
|
115
115
|
if (H) for (const q of H) {
|
|
116
116
|
const xe = r[q * 3] * o - M, Ce = r[q * 3 + 1] * o - f, we = r[q * 3 + 2] * o - m, oe = (B - xe) ** 2 + ($ - Ce) ** 2 + (N - we) ** 2;
|
|
117
|
-
oe <
|
|
117
|
+
oe < ue && (ue = oe, ie = q);
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
|
-
if (
|
|
120
|
+
if (ue < 1 / 0) break;
|
|
121
121
|
}
|
|
122
122
|
c[k * 3] = t[ie * 3], c[k * 3 + 1] = t[ie * 3 + 1], c[k * 3 + 2] = t[ie * 3 + 2];
|
|
123
123
|
}
|
|
124
124
|
e.setAttribute("color", new O.Float32BufferAttribute(c, 3));
|
|
125
125
|
}
|
|
126
|
-
const
|
|
126
|
+
const tn = {
|
|
127
127
|
debug: 0,
|
|
128
128
|
info: 1,
|
|
129
129
|
warn: 2,
|
|
130
130
|
error: 3
|
|
131
131
|
};
|
|
132
|
-
let
|
|
133
|
-
const
|
|
132
|
+
let hn = "warn", gn = null;
|
|
133
|
+
const de = {
|
|
134
134
|
setLevel(e) {
|
|
135
|
-
|
|
135
|
+
hn = e;
|
|
136
136
|
},
|
|
137
137
|
setHandler(e) {
|
|
138
|
-
|
|
138
|
+
gn = e;
|
|
139
139
|
},
|
|
140
140
|
debug(e, r, t) {
|
|
141
|
-
|
|
141
|
+
at("debug", e, r, t);
|
|
142
142
|
},
|
|
143
143
|
info(e, r, t) {
|
|
144
|
-
|
|
144
|
+
at("info", e, r, t);
|
|
145
145
|
},
|
|
146
146
|
warn(e, r, t) {
|
|
147
|
-
|
|
147
|
+
at("warn", e, r, t);
|
|
148
148
|
},
|
|
149
149
|
error(e, r, t) {
|
|
150
|
-
|
|
150
|
+
at("error", e, r, t);
|
|
151
151
|
}
|
|
152
152
|
};
|
|
153
|
-
function
|
|
154
|
-
if (
|
|
153
|
+
function at(e, r, t, o) {
|
|
154
|
+
if (tn[e] < tn[hn]) return;
|
|
155
155
|
const l = `[${r}]`, s = o !== void 0 ? [
|
|
156
156
|
l,
|
|
157
157
|
t,
|
|
@@ -174,9 +174,9 @@ let __tla = (async () => {
|
|
|
174
174
|
console.error(...s);
|
|
175
175
|
break;
|
|
176
176
|
}
|
|
177
|
-
|
|
177
|
+
gn == null ? void 0 : gn(e, r, t, o);
|
|
178
178
|
}
|
|
179
|
-
function
|
|
179
|
+
function ft(e) {
|
|
180
180
|
const r = e.getAttribute("position"), t = new Float32Array(r.array), o = e.getIndex();
|
|
181
181
|
if (o) return {
|
|
182
182
|
positions: t,
|
|
@@ -189,32 +189,32 @@ let __tla = (async () => {
|
|
|
189
189
|
indices: s
|
|
190
190
|
};
|
|
191
191
|
}
|
|
192
|
-
function
|
|
192
|
+
function mn(e, r) {
|
|
193
193
|
const t = new O.BufferGeometry();
|
|
194
194
|
return t.setAttribute("position", new O.Float32BufferAttribute(e, 3)), t.setIndex(new O.BufferAttribute(r, 1)), t.computeVertexNormals(), t;
|
|
195
195
|
}
|
|
196
|
-
async function
|
|
196
|
+
async function co(e, r, t) {
|
|
197
197
|
try {
|
|
198
|
-
const o =
|
|
198
|
+
const o = lo(e);
|
|
199
199
|
t == null ? void 0 : t("Parsing mesh...");
|
|
200
|
-
const s = new
|
|
200
|
+
const s = new pn().parse(e);
|
|
201
201
|
let c = null;
|
|
202
202
|
if (s.traverse((x) => {
|
|
203
203
|
x.isMesh && !c && (c = x.geometry);
|
|
204
204
|
}), !c) return null;
|
|
205
|
-
const { positions: a, indices: n } =
|
|
206
|
-
if (a.length < 9 || n.length < 3) return
|
|
207
|
-
for (let x = 0; x < Math.min(a.length, 300); x++) if (!isFinite(a[x])) return
|
|
205
|
+
const { positions: a, indices: n } = ft(c);
|
|
206
|
+
if (a.length < 9 || n.length < 3) return de.warn("wasm", `Mesh too small: positions=${a.length} indices=${n.length}`), null;
|
|
207
|
+
for (let x = 0; x < Math.min(a.length, 300); x++) if (!isFinite(a[x])) return de.error("wasm", `Invalid position data: NaN/Infinity at index ${x}`), null;
|
|
208
208
|
const h = a.length / 3;
|
|
209
|
-
for (let x = 0; x < Math.min(n.length, 300); x++) if (n[x] >= h) return
|
|
209
|
+
for (let x = 0; x < Math.min(n.length, 300); x++) if (n[x] >= h) return de.error("wasm", `Out-of-bounds index: ${n[x]} >= ${h}`), null;
|
|
210
210
|
t == null ? void 0 : t("Processing mesh (WASM)...");
|
|
211
211
|
const d = r.preprocess_mesh(a, n, 10, 1e-4, 500), u = d.positions(), p = d.indices(), g = d.unit_converted(), M = d.detected_unit(), f = d.log();
|
|
212
|
-
if (
|
|
212
|
+
if (de.debug("wasm", "preprocess result", f), u.length === 0) return null;
|
|
213
213
|
t == null ? void 0 : t("Building geometry...");
|
|
214
|
-
const m =
|
|
214
|
+
const m = mn(u, p);
|
|
215
215
|
if (o) {
|
|
216
216
|
const x = g ? 1e3 : 1;
|
|
217
|
-
|
|
217
|
+
ao(m, o.positions, o.colors, x);
|
|
218
218
|
}
|
|
219
219
|
return {
|
|
220
220
|
geometry: m,
|
|
@@ -223,18 +223,18 @@ let __tla = (async () => {
|
|
|
223
223
|
detectedUnit: M
|
|
224
224
|
};
|
|
225
225
|
} catch (o) {
|
|
226
|
-
return
|
|
226
|
+
return de.error("wasm", "Processing failed", o), null;
|
|
227
227
|
}
|
|
228
228
|
}
|
|
229
|
-
function
|
|
230
|
-
const t = new
|
|
229
|
+
function fo(e) {
|
|
230
|
+
const t = new pn().parse(e);
|
|
231
231
|
let o = null;
|
|
232
232
|
return t.traverse((l) => {
|
|
233
233
|
l.isMesh && !o && (o = l.geometry);
|
|
234
234
|
}), o;
|
|
235
235
|
}
|
|
236
|
-
async function
|
|
237
|
-
const r = await e.arrayBuffer(), l = new
|
|
236
|
+
async function Lt(e) {
|
|
237
|
+
const r = await e.arrayBuffer(), l = new to().parse(r).getAttribute("position");
|
|
238
238
|
if (!l || l.count === 0) throw new Error("Empty STL geometry");
|
|
239
239
|
const s = [];
|
|
240
240
|
for (let c = 0; c < l.count; c++) s.push(`v ${l.getX(c)} ${l.getY(c)} ${l.getZ(c)}`);
|
|
@@ -242,25 +242,25 @@ let __tla = (async () => {
|
|
|
242
242
|
return s.join(`
|
|
243
243
|
`);
|
|
244
244
|
}
|
|
245
|
-
function
|
|
245
|
+
function uo(e, r) {
|
|
246
246
|
const t = 1 / r;
|
|
247
247
|
return `${Math.round(e.x * t)}_${Math.round(e.y * t)}_${Math.round(e.z * t)}`;
|
|
248
248
|
}
|
|
249
|
-
function
|
|
249
|
+
function po(e, r) {
|
|
250
250
|
if (!e.length) return [];
|
|
251
251
|
const t = [];
|
|
252
252
|
for (const o of e) (t.length === 0 || t[t.length - 1].distanceTo(o) > r) && t.push(o.clone());
|
|
253
253
|
return t.length > 2 && t[0].distanceTo(t[t.length - 1]) > r && t.push(t[0].clone()), t;
|
|
254
254
|
}
|
|
255
|
-
function
|
|
255
|
+
function Ke(e) {
|
|
256
256
|
let r = 0;
|
|
257
257
|
for (let t = 0; t < e.length - 1; t++) r += e[t].distanceTo(e[t + 1]);
|
|
258
258
|
return r;
|
|
259
259
|
}
|
|
260
|
-
function
|
|
260
|
+
function xn(e, r = 1e-3, t = false) {
|
|
261
261
|
if (!e.length) return [];
|
|
262
262
|
const o = /* @__PURE__ */ new Map(), l = (u) => {
|
|
263
|
-
const p =
|
|
263
|
+
const p = uo(u, r);
|
|
264
264
|
let g = o.get(p);
|
|
265
265
|
return g || (g = u.clone(), o.set(p, g)), g;
|
|
266
266
|
}, s = e.map((u) => ({
|
|
@@ -285,13 +285,13 @@ let __tla = (async () => {
|
|
|
285
285
|
s.splice(f, 1), g = true;
|
|
286
286
|
}
|
|
287
287
|
}
|
|
288
|
-
const M =
|
|
288
|
+
const M = po(p, r);
|
|
289
289
|
M.length > 1 && c.push(M);
|
|
290
290
|
}
|
|
291
291
|
if (!c.length) return [];
|
|
292
292
|
if (t) {
|
|
293
|
-
c.sort((g, M) =>
|
|
294
|
-
const u =
|
|
293
|
+
c.sort((g, M) => Ke(M) - Ke(g));
|
|
294
|
+
const u = Ke(c[0]), p = c.filter((g) => Ke(g) >= u * 0.3);
|
|
295
295
|
return p[p.length - 1] ?? c[0];
|
|
296
296
|
}
|
|
297
297
|
const a = c.filter((u) => u.length >= 3 && u[0].distanceTo(u[u.length - 1]) < r * 10), n = a.length > 0 ? a : c;
|
|
@@ -306,8 +306,8 @@ let __tla = (async () => {
|
|
|
306
306
|
}
|
|
307
307
|
return h;
|
|
308
308
|
}
|
|
309
|
-
function
|
|
310
|
-
const l = new
|
|
309
|
+
function nn(e, r, t, o = false) {
|
|
310
|
+
const l = new ut(new C(0, 1, 0), -t), s = [], c = new fn();
|
|
311
311
|
c.setFromBufferAttribute(r.getAttribute("position"));
|
|
312
312
|
const a = {
|
|
313
313
|
linePoints: [],
|
|
@@ -315,7 +315,7 @@ let __tla = (async () => {
|
|
|
315
315
|
rightmostPoint: new C(0, t, 0)
|
|
316
316
|
};
|
|
317
317
|
if (!l.intersectsBox(c)) return a;
|
|
318
|
-
const n = new
|
|
318
|
+
const n = new un(), h = new C();
|
|
319
319
|
e.shapecast({
|
|
320
320
|
intersectsBounds: (f) => l.intersectsBox(f),
|
|
321
321
|
intersectsTriangle: (f) => {
|
|
@@ -326,12 +326,12 @@ let __tla = (async () => {
|
|
|
326
326
|
});
|
|
327
327
|
}
|
|
328
328
|
});
|
|
329
|
-
const d =
|
|
329
|
+
const d = xn(s, _t, o);
|
|
330
330
|
if (d.length < 2) return a;
|
|
331
|
-
const u =
|
|
331
|
+
const u = Ke(d);
|
|
332
332
|
let p = -1 / 0, g = new C(0, t, 0);
|
|
333
333
|
for (const f of d) f.x > p && (p = f.x, g = f.clone());
|
|
334
|
-
const M = d.length > 2 && d[0].distanceTo(d[d.length - 1]) <
|
|
334
|
+
const M = d.length > 2 && d[0].distanceTo(d[d.length - 1]) < _t * 10;
|
|
335
335
|
return {
|
|
336
336
|
linePoints: d,
|
|
337
337
|
lineLength: u,
|
|
@@ -339,22 +339,22 @@ let __tla = (async () => {
|
|
|
339
339
|
isClosed: M
|
|
340
340
|
};
|
|
341
341
|
}
|
|
342
|
-
function
|
|
343
|
-
const l =
|
|
342
|
+
function Ye(e, r, t, o = false) {
|
|
343
|
+
const l = nn(e, r, t, o);
|
|
344
344
|
if (l.isClosed && l.linePoints.length >= 3) return l;
|
|
345
|
-
|
|
345
|
+
de.debug("slice", `y=${t.toFixed(2)} failed (pts=${l.linePoints.length}, closed=${l.isClosed}), retrying...`);
|
|
346
346
|
let s = l;
|
|
347
|
-
for (const c of
|
|
348
|
-
const a =
|
|
349
|
-
if (a.isClosed && a.linePoints.length >= 3) return
|
|
347
|
+
for (const c of so) {
|
|
348
|
+
const a = nn(e, r, t + c, o);
|
|
349
|
+
if (a.isClosed && a.linePoints.length >= 3) return de.debug("slice", `y=${t.toFixed(2)} recovered with offset ${c > 0 ? "+" : ""}${c}mm (pts=${a.linePoints.length}, len=${a.lineLength.toFixed(1)}mm)`), a;
|
|
350
350
|
a.linePoints.length > s.linePoints.length && (s = a);
|
|
351
351
|
}
|
|
352
|
-
return
|
|
352
|
+
return de.warn("slice", `y=${t.toFixed(2)} all retries exhausted (pts=${s.linePoints.length}, closed=${s.isClosed})`), s;
|
|
353
353
|
}
|
|
354
|
-
function
|
|
355
|
-
const l = new
|
|
354
|
+
function ho(e, r, t, o) {
|
|
355
|
+
const l = new ut().setFromNormalAndCoplanarPoint(o.clone().normalize(), t), s = new fn();
|
|
356
356
|
if (s.setFromBufferAttribute(r.getAttribute("position")), !l.intersectsBox(s)) return 0;
|
|
357
|
-
const c = [], a = new
|
|
357
|
+
const c = [], a = new un(), n = new C();
|
|
358
358
|
e.shapecast({
|
|
359
359
|
intersectsBounds: (d) => l.intersectsBox(d),
|
|
360
360
|
intersectsTriangle: (d) => {
|
|
@@ -365,15 +365,15 @@ let __tla = (async () => {
|
|
|
365
365
|
});
|
|
366
366
|
}
|
|
367
367
|
});
|
|
368
|
-
const h =
|
|
369
|
-
return
|
|
368
|
+
const h = xn(c, _t);
|
|
369
|
+
return Ke(h);
|
|
370
370
|
}
|
|
371
|
-
function
|
|
372
|
-
return new
|
|
373
|
-
maxLeafTris:
|
|
371
|
+
function yn(e) {
|
|
372
|
+
return new pt(e, {
|
|
373
|
+
maxLeafTris: ht
|
|
374
374
|
});
|
|
375
375
|
}
|
|
376
|
-
function
|
|
376
|
+
function go(e, r, t, o) {
|
|
377
377
|
const l = e.getIndex(), s = l ? l.count / 3 : 0;
|
|
378
378
|
if (s < 10) return {
|
|
379
379
|
valid: false,
|
|
@@ -388,9 +388,9 @@ let __tla = (async () => {
|
|
|
388
388
|
valid: false,
|
|
389
389
|
reason: `Height too large (${c.toFixed(1)}mm > 1000mm)`
|
|
390
390
|
};
|
|
391
|
-
const a = new
|
|
392
|
-
maxLeafTris:
|
|
393
|
-
}), n =
|
|
391
|
+
const a = new pt(e, {
|
|
392
|
+
maxLeafTris: ht
|
|
393
|
+
}), n = Ye(a, e, r);
|
|
394
394
|
if (n.lineLength === 0) return {
|
|
395
395
|
valid: false,
|
|
396
396
|
reason: "No circumference at green point \u2014 mesh may be empty at that height"
|
|
@@ -400,7 +400,7 @@ let __tla = (async () => {
|
|
|
400
400
|
valid: true,
|
|
401
401
|
reason: ""
|
|
402
402
|
};
|
|
403
|
-
const d =
|
|
403
|
+
const d = Ye(a, e, h);
|
|
404
404
|
if (n.lineLength > 0 && d.lineLength > 0) {
|
|
405
405
|
const p = n.lineLength / d.lineLength;
|
|
406
406
|
if (p < 0.5) return {
|
|
@@ -410,7 +410,7 @@ let __tla = (async () => {
|
|
|
410
410
|
}
|
|
411
411
|
const u = r - o * 2;
|
|
412
412
|
if (u > t) {
|
|
413
|
-
const p =
|
|
413
|
+
const p = Ye(a, e, u);
|
|
414
414
|
if (d.lineLength > 0 && p.lineLength > 0) {
|
|
415
415
|
const g = d.lineLength / p.lineLength;
|
|
416
416
|
if (g < 0.5) return {
|
|
@@ -425,7 +425,7 @@ let __tla = (async () => {
|
|
|
425
425
|
};
|
|
426
426
|
}
|
|
427
427
|
const Fe = "pipeline";
|
|
428
|
-
function
|
|
428
|
+
function mo(e, r, t, o) {
|
|
429
429
|
var _a, _b, _c, _d;
|
|
430
430
|
const l = e.geometry.clone(), s = r.map((a) => ({
|
|
431
431
|
...a
|
|
@@ -434,16 +434,16 @@ let __tla = (async () => {
|
|
|
434
434
|
let a = e.geometry, n = s.map((H) => new C(H.position.x, H.position.y, H.position.z));
|
|
435
435
|
const h = n[0], d = n[1];
|
|
436
436
|
if (!c) {
|
|
437
|
-
o.onStatus("Aligning mesh (JS fallback)..."),
|
|
437
|
+
o.onStatus("Aligning mesh (JS fallback)..."), de.warn(Fe, "WASM not available, using JS fallback alignment");
|
|
438
438
|
const H = new C(0, 1, 0), q = new C().subVectors(d, h).normalize(), xe = q.dot(H), Ce = new C().crossVectors(q, H);
|
|
439
439
|
if (Ce.length() > 1e-4) {
|
|
440
440
|
Ce.normalize();
|
|
441
441
|
const X = new O.Quaternion().setFromAxisAngle(Ce, Math.acos(Math.min(1, Math.max(-1, xe))));
|
|
442
|
-
a.applyMatrix4(new O.Matrix4().makeRotationFromQuaternion(X)), n = n.map((
|
|
442
|
+
a.applyMatrix4(new O.Matrix4().makeRotationFromQuaternion(X)), n = n.map((Pe) => Pe.clone().applyQuaternion(X));
|
|
443
443
|
}
|
|
444
444
|
if (n[0].y > n[1].y) {
|
|
445
445
|
const X = new O.Quaternion().setFromAxisAngle(new C(1, 0, 0), Math.PI);
|
|
446
|
-
a.applyMatrix4(new O.Matrix4().makeRotationFromQuaternion(X)), n = n.map((
|
|
446
|
+
a.applyMatrix4(new O.Matrix4().makeRotationFromQuaternion(X)), n = n.map((Pe) => Pe.clone().applyQuaternion(X));
|
|
447
447
|
}
|
|
448
448
|
const we = n[0].clone();
|
|
449
449
|
a.translate(-we.x, -we.y, -we.z), n = n.map((X) => new C(X.x - we.x, X.y - we.y, X.z - we.z)), a.computeVertexNormals(), a.computeBoundingBox();
|
|
@@ -469,12 +469,12 @@ let __tla = (async () => {
|
|
|
469
469
|
x: X.x,
|
|
470
470
|
y: X.y,
|
|
471
471
|
z: X.z
|
|
472
|
-
}))), o.setAligned(true), o.setCut(true), o.setAdjustedStartY(null), o.setAdjustedEndY(null), o.setOriginalEndY(n[1].y + 2 *
|
|
472
|
+
}))), o.setAligned(true), o.setCut(true), o.setAdjustedStartY(null), o.setAdjustedEndY(null), o.setOriginalEndY(n[1].y + 2 * dt);
|
|
473
473
|
const V = new C();
|
|
474
474
|
a.computeBoundingBox(), a.boundingBox.getSize(V), o.setModelSize(Math.max(V.x, V.y, V.z)), l.dispose();
|
|
475
475
|
return;
|
|
476
476
|
}
|
|
477
|
-
const { positions: u, indices: p } =
|
|
477
|
+
const { positions: u, indices: p } = ft(a), g = new Float32Array([
|
|
478
478
|
h.x,
|
|
479
479
|
h.y,
|
|
480
480
|
h.z
|
|
@@ -485,21 +485,21 @@ let __tla = (async () => {
|
|
|
485
485
|
]);
|
|
486
486
|
o.onStatus("Detecting shell type...");
|
|
487
487
|
const f = c.detect_shell(u, p, M, 40), m = f.is_double_shell(), x = f.surface_normal();
|
|
488
|
-
|
|
488
|
+
de.info(Fe, `Shell: ${m ? "DOUBLE" : "SINGLE"}`, f.details()), (_a = o.setDoubleShell) == null ? void 0 : _a.call(o, m), o.onStatus("Finding cross-section plane...");
|
|
489
489
|
const S = new Float32Array([
|
|
490
490
|
x[0],
|
|
491
491
|
x[1],
|
|
492
492
|
x[2]
|
|
493
|
-
]), I = c.find_min_cross_section(u, p, M, S, 10),
|
|
494
|
-
|
|
495
|
-
const
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
]), b = c.align_to_origin(u, g, M,
|
|
493
|
+
]), I = c.find_min_cross_section(u, p, M, S, 10), P = I.plane_normal();
|
|
494
|
+
de.info(Fe, "Cross-section found", I.details()), o.onStatus("Aligning mesh...");
|
|
495
|
+
const L = new Float32Array([
|
|
496
|
+
P[0],
|
|
497
|
+
P[1],
|
|
498
|
+
P[2]
|
|
499
|
+
]), b = c.align_to_origin(u, g, M, L);
|
|
500
500
|
let z = b.positions(), y = b.mpt(), D = b.origin();
|
|
501
501
|
const w = b.transform();
|
|
502
|
-
|
|
502
|
+
de.info(Fe, "Alignment complete", b.details());
|
|
503
503
|
const A = [
|
|
504
504
|
w[3],
|
|
505
505
|
w[4],
|
|
@@ -511,37 +511,37 @@ let __tla = (async () => {
|
|
|
511
511
|
w[10],
|
|
512
512
|
w[11]
|
|
513
513
|
], k = new Float32Array([
|
|
514
|
-
A[0] *
|
|
515
|
-
A[3] *
|
|
516
|
-
A[6] *
|
|
514
|
+
A[0] * P[0] + A[1] * P[1] + A[2] * P[2],
|
|
515
|
+
A[3] * P[0] + A[4] * P[1] + A[5] * P[2],
|
|
516
|
+
A[6] * P[0] + A[7] * P[1] + A[8] * P[2]
|
|
517
517
|
]);
|
|
518
518
|
o.onStatus("Generating measurement points...");
|
|
519
519
|
const B = c.subdivide_origin_to_plane(new Float32Array(D), new Float32Array(y), k);
|
|
520
|
-
|
|
520
|
+
de.debug(Fe, `Subdivide: ${B.count()} pts, spacing=${B.spacing().toFixed(1)}mm`);
|
|
521
521
|
const $ = B.points(), N = B.count(), U = 2, be = 1, ae = [];
|
|
522
522
|
for (let H = U; H < N - be; H++) ae.push($[H * 3 + 1]);
|
|
523
523
|
o.onStatus("Computing cross-sections...");
|
|
524
|
-
let
|
|
524
|
+
let ue = [];
|
|
525
525
|
if (ae.length >= 2) {
|
|
526
526
|
const q = (m ? c.batch_cross_sections_y_inner.bind(c) : c.batch_cross_sections_y.bind(c))(z, p, new Float32Array(ae), 10);
|
|
527
|
-
|
|
527
|
+
de.debug(Fe, "Batch (subdivision)", q.details());
|
|
528
528
|
const xe = q.all_loop_points(), Ce = q.offsets(), we = q.circumferences();
|
|
529
529
|
for (let oe = 0; oe < Ce.length - 1; oe++) {
|
|
530
530
|
const V = Ce[oe], X = Ce[oe + 1];
|
|
531
531
|
if (X <= V || we[oe] <= 0) continue;
|
|
532
|
-
const
|
|
533
|
-
if (
|
|
534
|
-
let
|
|
535
|
-
for (let ze = V; ze < X; ze += 3)
|
|
536
|
-
|
|
532
|
+
const Pe = (X - V) / 3;
|
|
533
|
+
if (Pe < 3) continue;
|
|
534
|
+
let Le = 0, Ge = 0, se = 0;
|
|
535
|
+
for (let ze = V; ze < X; ze += 3) Le += xe[ze], Ge += xe[ze + 1], se += xe[ze + 2];
|
|
536
|
+
ue.push(Le / Pe, Ge / Pe, se / Pe);
|
|
537
537
|
}
|
|
538
538
|
}
|
|
539
|
-
if (
|
|
539
|
+
if (ue.length >= 6) {
|
|
540
540
|
o.onStatus("Refining alignment...");
|
|
541
|
-
const H = c.refine_alignment(new Float32Array(
|
|
542
|
-
|
|
541
|
+
const H = c.refine_alignment(new Float32Array(ue), z, new Float32Array(D), new Float32Array(y));
|
|
542
|
+
de.info(Fe, "Refinement complete", H.details()), z = H.positions(), y = H.mpt(), D = H.origin();
|
|
543
543
|
}
|
|
544
|
-
const ie = a.getAttribute("color"), J =
|
|
544
|
+
const ie = a.getAttribute("color"), J = mn(z, p);
|
|
545
545
|
ie && J.setAttribute("color", ie), a.dispose(), a = J, e.geometry = a, a.computeVertexNormals(), a.computeBoundingBox(), n[0] = new C(D[0], D[1], D[2]), n[1] = new C(y[0], y[1], y[2]), o.onStatus("Setting blue point...");
|
|
546
546
|
const Y = new C(n[0].x, n[0].y, n[0].z);
|
|
547
547
|
n.push(Y), o.addLandmarkPoint({
|
|
@@ -566,10 +566,10 @@ let __tla = (async () => {
|
|
|
566
566
|
y: H.y,
|
|
567
567
|
z: H.z
|
|
568
568
|
}))), o.setAligned(true);
|
|
569
|
-
const
|
|
570
|
-
|
|
569
|
+
const he = a.boundingBox, Z = new C();
|
|
570
|
+
he.getSize(Z), o.setModelSize(Math.max(Z.x, Z.y, Z.z)), o.setCut(true), o.setAdjustedStartY(null), o.setAdjustedEndY(null), o.setOriginalEndY(n[1].y + 2 * dt), o.onStatus("Computing final measurements...");
|
|
571
571
|
{
|
|
572
|
-
const H =
|
|
572
|
+
const H = ft(a), q = n[1].y, xe = n[0].y;
|
|
573
573
|
let Ce = 1 / 0, we = -1 / 0;
|
|
574
574
|
const oe = H.positions;
|
|
575
575
|
for (let se = 1; se < oe.length; se += 3) oe[se] < Ce && (Ce = oe[se]), oe[se] > we && (we = oe[se]);
|
|
@@ -580,27 +580,27 @@ let __tla = (async () => {
|
|
|
580
580
|
ze < we - 1 && X.push(ze);
|
|
581
581
|
}
|
|
582
582
|
for (let se = q - V; se > xe; se -= V) X.push(se);
|
|
583
|
-
X.sort((se, ze) => se - ze),
|
|
584
|
-
const
|
|
585
|
-
|
|
586
|
-
const
|
|
583
|
+
X.sort((se, ze) => se - ze), de.info(Fe, `Horizontal slices: ${X.length} Y planes, range ${(_b = X[0]) == null ? void 0 : _b.toFixed(1)} \u2192 ${(_c = X[X.length - 1]) == null ? void 0 : _c.toFixed(1)} mm`);
|
|
584
|
+
const Le = (m ? c.batch_cross_sections_y_inner.bind(c) : c.batch_cross_sections_y.bind(c))(H.positions, H.indices, new Float32Array(X), 10);
|
|
585
|
+
de.info(Fe, `Horizontal slices (${m ? "inner" : "outer"}): ${Le.count()}/${X.length} valid`), de.debug(Fe, "Slice details", Le.details());
|
|
586
|
+
const Ge = {
|
|
587
587
|
yValues: X,
|
|
588
|
-
circumferences: Array.from(
|
|
589
|
-
allLoopPoints: new Float32Array(
|
|
590
|
-
offsets: new Uint32Array(
|
|
588
|
+
circumferences: Array.from(Le.circumferences()),
|
|
589
|
+
allLoopPoints: new Float32Array(Le.all_loop_points()),
|
|
590
|
+
offsets: new Uint32Array(Le.offsets()),
|
|
591
591
|
mptY: q,
|
|
592
592
|
originY: xe
|
|
593
593
|
};
|
|
594
|
-
(_d = o.setWasmSlices) == null ? void 0 : _d.call(o,
|
|
594
|
+
(_d = o.setWasmSlices) == null ? void 0 : _d.call(o, Ge);
|
|
595
595
|
}
|
|
596
596
|
o.onStatus("Validating results...");
|
|
597
|
-
const
|
|
598
|
-
|
|
597
|
+
const ge = n[1].y, me = n[0].y, pe = go(a, ge, me, t);
|
|
598
|
+
pe.valid || de.warn(Fe, `Validation: ${pe.reason}`), o.setClippedReferenceGeometry ? (l.computeVertexNormals(), o.setClippedReferenceGeometry(l)) : l.dispose();
|
|
599
599
|
} catch (a) {
|
|
600
|
-
|
|
600
|
+
de.error(Fe, "Processing failed", a), o.setError(a instanceof Error ? a.message : "Failed to process mesh."), l.dispose();
|
|
601
601
|
}
|
|
602
602
|
}
|
|
603
|
-
class
|
|
603
|
+
class xo extends Kn {
|
|
604
604
|
constructor() {
|
|
605
605
|
super(...arguments), this.state = {
|
|
606
606
|
error: null
|
|
@@ -619,7 +619,7 @@ let __tla = (async () => {
|
|
|
619
619
|
console.error("[ErrorBoundary] Caught error:", r, t.componentStack);
|
|
620
620
|
}
|
|
621
621
|
render() {
|
|
622
|
-
return this.state.error ? this.props.fallback ? this.props.fallback(this.state.error, this.reset) :
|
|
622
|
+
return this.state.error ? this.props.fallback ? this.props.fallback(this.state.error, this.reset) : F("div", {
|
|
623
623
|
style: {
|
|
624
624
|
display: "flex",
|
|
625
625
|
flexDirection: "column",
|
|
@@ -667,7 +667,7 @@ let __tla = (async () => {
|
|
|
667
667
|
}) : this.props.children;
|
|
668
668
|
}
|
|
669
669
|
}
|
|
670
|
-
const
|
|
670
|
+
const yo = ({ message: e, onDismiss: r }) => F("div", {
|
|
671
671
|
style: {
|
|
672
672
|
position: "absolute",
|
|
673
673
|
top: 16,
|
|
@@ -684,7 +684,7 @@ let __tla = (async () => {
|
|
|
684
684
|
gap: 12
|
|
685
685
|
},
|
|
686
686
|
children: [
|
|
687
|
-
|
|
687
|
+
F("div", {
|
|
688
688
|
style: {
|
|
689
689
|
flex: 1
|
|
690
690
|
},
|
|
@@ -720,7 +720,7 @@ let __tla = (async () => {
|
|
|
720
720
|
children: "x"
|
|
721
721
|
})
|
|
722
722
|
]
|
|
723
|
-
}),
|
|
723
|
+
}), on = ({ message: e }) => F("div", {
|
|
724
724
|
style: {
|
|
725
725
|
position: "absolute",
|
|
726
726
|
top: 0,
|
|
@@ -758,7 +758,7 @@ let __tla = (async () => {
|
|
|
758
758
|
})
|
|
759
759
|
]
|
|
760
760
|
});
|
|
761
|
-
function
|
|
761
|
+
function bo(e, r, t, o) {
|
|
762
762
|
const l = new C().subVectors(t, r), s = new C().subVectors(o, r), c = new C().subVectors(e, r), a = l.dot(l), n = l.dot(s), h = l.dot(c), d = s.dot(s), u = s.dot(c), p = 1 / (a * d - n * n), g = (d * h - n * u) * p, M = (a * u - n * h) * p;
|
|
763
763
|
return {
|
|
764
764
|
u: 1 - g - M,
|
|
@@ -766,8 +766,8 @@ let __tla = (async () => {
|
|
|
766
766
|
w: M
|
|
767
767
|
};
|
|
768
768
|
}
|
|
769
|
-
const
|
|
770
|
-
const { addLandmarkPoint: c, landmarkPoints: a } =
|
|
769
|
+
const wo = ({ mesh: e, maxPoints: r = 2, meshColor: t = "#c8c8c8", meshOpacity: o = 1, frontFaceOnly: l = false, doubleShellTransparency: s = false }) => {
|
|
770
|
+
const { addLandmarkPoint: c, landmarkPoints: a } = Dt(), n = re((g) => {
|
|
771
771
|
if (a.length >= r) return;
|
|
772
772
|
g.stopPropagation();
|
|
773
773
|
const M = g.intersections[0], f = M == null ? void 0 : M.faceIndex;
|
|
@@ -783,9 +783,9 @@ let __tla = (async () => {
|
|
|
783
783
|
f * 3 + 1,
|
|
784
784
|
f * 3 + 2
|
|
785
785
|
];
|
|
786
|
-
const I = m.getAttribute("position"),
|
|
787
|
-
|
|
788
|
-
const z = M.point, y =
|
|
786
|
+
const I = m.getAttribute("position"), P = new C().fromBufferAttribute(I, S[0]), L = new C().fromBufferAttribute(I, S[1]), b = new C().fromBufferAttribute(I, S[2]);
|
|
787
|
+
P.applyMatrix4(e.matrixWorld), L.applyMatrix4(e.matrixWorld), b.applyMatrix4(e.matrixWorld);
|
|
788
|
+
const z = M.point, y = bo(z, P, L, b), D = {
|
|
789
789
|
faceIndex: f,
|
|
790
790
|
vertexIndices: S,
|
|
791
791
|
position: {
|
|
@@ -826,9 +826,9 @@ let __tla = (async () => {
|
|
|
826
826
|
material: p,
|
|
827
827
|
renderOrder: s ? 0 : void 0
|
|
828
828
|
});
|
|
829
|
-
},
|
|
829
|
+
}, So = ({ point: e, index: r, markerSize: t, color: o, label: l }) => {
|
|
830
830
|
const [s, c] = E(false);
|
|
831
|
-
return
|
|
831
|
+
return F("mesh", {
|
|
832
832
|
position: [
|
|
833
833
|
e.position.x,
|
|
834
834
|
e.position.y,
|
|
@@ -847,7 +847,7 @@ let __tla = (async () => {
|
|
|
847
847
|
i("meshBasicMaterial", {
|
|
848
848
|
color: o
|
|
849
849
|
}),
|
|
850
|
-
s && i(
|
|
850
|
+
s && i(Xe, {
|
|
851
851
|
center: true,
|
|
852
852
|
style: {
|
|
853
853
|
pointerEvents: "none"
|
|
@@ -868,8 +868,8 @@ let __tla = (async () => {
|
|
|
868
868
|
})
|
|
869
869
|
]
|
|
870
870
|
}, r);
|
|
871
|
-
},
|
|
872
|
-
const { landmarkPoints: t } =
|
|
871
|
+
}, vo = ({ modelSize: e, labels: r }) => {
|
|
872
|
+
const { landmarkPoints: t } = Dt(), o = e * 0.02, l = [
|
|
873
873
|
"#44ff44",
|
|
874
874
|
"#ff4444",
|
|
875
875
|
"#4444ff"
|
|
@@ -878,8 +878,8 @@ let __tla = (async () => {
|
|
|
878
878
|
"Origin",
|
|
879
879
|
"Cut Plane"
|
|
880
880
|
];
|
|
881
|
-
return i(
|
|
882
|
-
children: t.map((a, n) => i(
|
|
881
|
+
return i(Oe, {
|
|
882
|
+
children: t.map((a, n) => i(So, {
|
|
883
883
|
point: a,
|
|
884
884
|
index: n,
|
|
885
885
|
markerSize: o,
|
|
@@ -888,28 +888,28 @@ let __tla = (async () => {
|
|
|
888
888
|
}, n))
|
|
889
889
|
});
|
|
890
890
|
};
|
|
891
|
-
function
|
|
892
|
-
return j(() => e ? new
|
|
893
|
-
maxLeafTris:
|
|
891
|
+
function bn(e) {
|
|
892
|
+
return j(() => e ? new pt(e, {
|
|
893
|
+
maxLeafTris: ht
|
|
894
894
|
}) : null, [
|
|
895
895
|
e
|
|
896
896
|
]);
|
|
897
897
|
}
|
|
898
|
-
const
|
|
898
|
+
const rn = (e, r) => {
|
|
899
899
|
const t = Math.abs(e - r);
|
|
900
900
|
return t <= 7 ? "#8BC34A" : t <= 20 ? "#FFC107" : "#FF5722";
|
|
901
|
-
},
|
|
902
|
-
if (e <= 7) return
|
|
901
|
+
}, sn = new O.Color("#8BC34A"), ln = new O.Color("#FFC107"), Co = new O.Color("#FF5722"), Mo = (e) => {
|
|
902
|
+
if (e <= 7) return sn.clone();
|
|
903
903
|
if (e <= 20) {
|
|
904
904
|
const t = (e - 7) / 13;
|
|
905
|
-
return
|
|
905
|
+
return sn.clone().lerp(ln, t);
|
|
906
906
|
}
|
|
907
907
|
const r = Math.min((e - 20) / 20, 1);
|
|
908
|
-
return
|
|
909
|
-
},
|
|
908
|
+
return ln.clone().lerp(Co, r);
|
|
909
|
+
}, zo = (e, r) => {
|
|
910
910
|
const t = e.length, o = new Float32Array(t * 2 * 3), l = new Float32Array(t * 2 * 3), s = [];
|
|
911
911
|
for (let n = 0; n < t; n++) {
|
|
912
|
-
const h = e[n], d = r[n], u = h.distanceTo(d), p =
|
|
912
|
+
const h = e[n], d = r[n], u = h.distanceTo(d), p = Mo(u);
|
|
913
913
|
if (o[n * 6] = h.x, o[n * 6 + 1] = h.y, o[n * 6 + 2] = h.z, l[n * 6] = p.r, l[n * 6 + 1] = p.g, l[n * 6 + 2] = p.b, o[n * 6 + 3] = d.x, o[n * 6 + 4] = d.y, o[n * 6 + 5] = d.z, l[n * 6 + 3] = p.r, l[n * 6 + 4] = p.g, l[n * 6 + 5] = p.b, n < t - 1) {
|
|
914
914
|
const g = n * 2, M = g + 1, f = (n + 1) * 2, m = f + 1;
|
|
915
915
|
s.push(g, M, f, M, m, f);
|
|
@@ -926,8 +926,8 @@ let __tla = (async () => {
|
|
|
926
926
|
depthWrite: false
|
|
927
927
|
});
|
|
928
928
|
return new O.Mesh(c, a);
|
|
929
|
-
},
|
|
930
|
-
const p = j(() => d && u != null ? null :
|
|
929
|
+
}, Ao = ({ bvh: e, geometry: r, yPosition: t, color: o = "#00ff00", labelX: l, onDataChange: s, displayUnit: c = "mm", useInnerSurface: a = false, formValue: n, lineWidth: h = 1.5, wasmLoopPoints: d, wasmCircumference: u }) => {
|
|
930
|
+
const p = j(() => d && u != null ? null : Ye(e, r, t, a), [
|
|
931
931
|
e,
|
|
932
932
|
r,
|
|
933
933
|
t,
|
|
@@ -936,13 +936,13 @@ let __tla = (async () => {
|
|
|
936
936
|
u
|
|
937
937
|
]), g = d ?? (p == null ? void 0 : p.linePoints) ?? [], M = u ?? (p == null ? void 0 : p.lineLength) ?? 0, f = j(() => {
|
|
938
938
|
if (n == null || M <= 0 || g.length < 2) return null;
|
|
939
|
-
const I = n / M,
|
|
940
|
-
return g.map((b) => new C(
|
|
939
|
+
const I = n / M, P = g.reduce((b, z) => b + z.x, 0) / g.length, L = g.reduce((b, z) => b + z.z, 0) / g.length;
|
|
940
|
+
return g.map((b) => new C(P + (b.x - P) * I, b.y, L + (b.z - L) * I));
|
|
941
941
|
}, [
|
|
942
942
|
g,
|
|
943
943
|
M,
|
|
944
944
|
n
|
|
945
|
-
]), m = j(() => !f || g.length < 2 ? null :
|
|
945
|
+
]), m = j(() => !f || g.length < 2 ? null : zo(g, f), [
|
|
946
946
|
g,
|
|
947
947
|
f
|
|
948
948
|
]);
|
|
@@ -954,13 +954,13 @@ let __tla = (async () => {
|
|
|
954
954
|
const x = le(null), S = j(() => {
|
|
955
955
|
const I = new O.BufferGeometry();
|
|
956
956
|
I.setAttribute("position", new O.Float32BufferAttribute(new Float32Array(6), 3));
|
|
957
|
-
const
|
|
957
|
+
const P = new O.LineBasicMaterial({
|
|
958
958
|
color: 6710886,
|
|
959
959
|
depthTest: false,
|
|
960
960
|
depthWrite: false,
|
|
961
961
|
transparent: true
|
|
962
962
|
});
|
|
963
|
-
return new O.Line(I,
|
|
963
|
+
return new O.Line(I, P);
|
|
964
964
|
}, []);
|
|
965
965
|
return ne(() => () => {
|
|
966
966
|
S.geometry.dispose(), S.material.dispose();
|
|
@@ -976,14 +976,14 @@ let __tla = (async () => {
|
|
|
976
976
|
M,
|
|
977
977
|
t,
|
|
978
978
|
s
|
|
979
|
-
]),
|
|
979
|
+
]), an(({ camera: I }) => {
|
|
980
980
|
if (!x.current || g.length < 2) return;
|
|
981
|
-
const
|
|
982
|
-
I.getWorldDirection(
|
|
983
|
-
const
|
|
984
|
-
if (
|
|
985
|
-
|
|
986
|
-
const b = new C().crossVectors(
|
|
981
|
+
const P = new C();
|
|
982
|
+
I.getWorldDirection(P);
|
|
983
|
+
const L = new C(P.x, 0, P.z);
|
|
984
|
+
if (L.lengthSq() < 1e-8) return;
|
|
985
|
+
L.normalize();
|
|
986
|
+
const b = new C().crossVectors(L, new C(0, 1, 0)).normalize();
|
|
987
987
|
let z = -1 / 0, y = g[0];
|
|
988
988
|
for (const k of g) {
|
|
989
989
|
const B = b.x * k.x + b.z * k.z;
|
|
@@ -993,10 +993,10 @@ let __tla = (async () => {
|
|
|
993
993
|
x.current.position.copy(w);
|
|
994
994
|
const A = S.geometry.getAttribute("position");
|
|
995
995
|
A.setXYZ(0, y.x, y.y, y.z), A.setXYZ(1, w.x, w.y, w.z), A.needsUpdate = true;
|
|
996
|
-
}), g.length < 2 ? null :
|
|
996
|
+
}), g.length < 2 ? null : F("group", {
|
|
997
997
|
renderOrder: 10,
|
|
998
998
|
children: [
|
|
999
|
-
i(
|
|
999
|
+
i(fe, {
|
|
1000
1000
|
points: g,
|
|
1001
1001
|
color: o,
|
|
1002
1002
|
lineWidth: h,
|
|
@@ -1009,9 +1009,9 @@ let __tla = (async () => {
|
|
|
1009
1009
|
object: m,
|
|
1010
1010
|
renderOrder: 10
|
|
1011
1011
|
}),
|
|
1012
|
-
f && n != null && i(
|
|
1012
|
+
f && n != null && i(fe, {
|
|
1013
1013
|
points: f,
|
|
1014
|
-
color:
|
|
1014
|
+
color: rn(M, n),
|
|
1015
1015
|
lineWidth: 2.5,
|
|
1016
1016
|
dashed: true,
|
|
1017
1017
|
dashSize: 2,
|
|
@@ -1028,7 +1028,7 @@ let __tla = (async () => {
|
|
|
1028
1028
|
}),
|
|
1029
1029
|
i("group", {
|
|
1030
1030
|
ref: x,
|
|
1031
|
-
children: i(
|
|
1031
|
+
children: i(Xe, {
|
|
1032
1032
|
zIndexRange: [
|
|
1033
1033
|
100,
|
|
1034
1034
|
0
|
|
@@ -1037,7 +1037,7 @@ let __tla = (async () => {
|
|
|
1037
1037
|
pointerEvents: "none",
|
|
1038
1038
|
transform: "translateY(-50%)"
|
|
1039
1039
|
},
|
|
1040
|
-
children:
|
|
1040
|
+
children: F("div", {
|
|
1041
1041
|
style: {
|
|
1042
1042
|
display: "flex",
|
|
1043
1043
|
alignItems: "stretch",
|
|
@@ -1047,7 +1047,7 @@ let __tla = (async () => {
|
|
|
1047
1047
|
whiteSpace: "nowrap"
|
|
1048
1048
|
},
|
|
1049
1049
|
children: [
|
|
1050
|
-
|
|
1050
|
+
F("div", {
|
|
1051
1051
|
style: {
|
|
1052
1052
|
display: "flex",
|
|
1053
1053
|
alignItems: "center",
|
|
@@ -1078,8 +1078,8 @@ let __tla = (async () => {
|
|
|
1078
1078
|
]
|
|
1079
1079
|
}),
|
|
1080
1080
|
n != null && M > 0 && (() => {
|
|
1081
|
-
const I = M - n,
|
|
1082
|
-
return
|
|
1081
|
+
const I = M - n, P = I > 0.5 ? "\u25B2" : I < -0.5 ? "\u25BC" : "", L = rn(M, n);
|
|
1082
|
+
return F("div", {
|
|
1083
1083
|
style: {
|
|
1084
1084
|
display: "flex",
|
|
1085
1085
|
alignItems: "center",
|
|
@@ -1090,18 +1090,18 @@ let __tla = (async () => {
|
|
|
1090
1090
|
borderLeft: "1px solid rgba(255,255,255,0.12)"
|
|
1091
1091
|
},
|
|
1092
1092
|
children: [
|
|
1093
|
-
|
|
1093
|
+
P && i("span", {
|
|
1094
1094
|
style: {
|
|
1095
1095
|
fontSize: 10,
|
|
1096
|
-
color:
|
|
1096
|
+
color: L,
|
|
1097
1097
|
lineHeight: 1
|
|
1098
1098
|
},
|
|
1099
|
-
children:
|
|
1099
|
+
children: P
|
|
1100
1100
|
}),
|
|
1101
|
-
|
|
1101
|
+
F("span", {
|
|
1102
1102
|
style: {
|
|
1103
1103
|
fontSize: 13,
|
|
1104
|
-
color:
|
|
1104
|
+
color: L,
|
|
1105
1105
|
fontFamily: "monospace",
|
|
1106
1106
|
fontWeight: 600
|
|
1107
1107
|
},
|
|
@@ -1110,7 +1110,7 @@ let __tla = (async () => {
|
|
|
1110
1110
|
c === "inch" ? (I / 25.4).toFixed(2) : I.toFixed(1)
|
|
1111
1111
|
]
|
|
1112
1112
|
}),
|
|
1113
|
-
|
|
1113
|
+
F("span", {
|
|
1114
1114
|
style: {
|
|
1115
1115
|
fontSize: 11,
|
|
1116
1116
|
color: "rgba(255,255,255,0.4)",
|
|
@@ -1130,8 +1130,8 @@ let __tla = (async () => {
|
|
|
1130
1130
|
})
|
|
1131
1131
|
]
|
|
1132
1132
|
});
|
|
1133
|
-
},
|
|
1134
|
-
const p = le(/* @__PURE__ */ new Map()), g = e.geometry, M =
|
|
1133
|
+
}, ko = Un(Ao), Fo = ({ mesh: e, startY: r, endY: t, spacing: o, modelSize: l, onMeasurementsChange: s, reverseOrder: c = false, displayUnit: a = "mm", useInnerSurface: n = false, formMeasurements: h, originY: d, wasmSlices: u }) => {
|
|
1134
|
+
const p = le(/* @__PURE__ */ new Map()), g = e.geometry, M = bn(g), f = j(() => {
|
|
1135
1135
|
if (u) {
|
|
1136
1136
|
let z = [
|
|
1137
1137
|
...u.yValues
|
|
@@ -1145,10 +1145,10 @@ let __tla = (async () => {
|
|
|
1145
1145
|
}
|
|
1146
1146
|
return c ? z.sort((y, D) => D - y) : z.sort((y, D) => y - D), z;
|
|
1147
1147
|
}
|
|
1148
|
-
const
|
|
1149
|
-
if (c) for (let b = t; b >= r; b -= o)
|
|
1150
|
-
else for (let b = r; b <= t; b += o)
|
|
1151
|
-
return
|
|
1148
|
+
const L = [];
|
|
1149
|
+
if (c) for (let b = t; b >= r; b -= o) L.push(b);
|
|
1150
|
+
else for (let b = r; b <= t; b += o) L.push(b);
|
|
1151
|
+
return L;
|
|
1152
1152
|
}, [
|
|
1153
1153
|
r,
|
|
1154
1154
|
t,
|
|
@@ -1157,22 +1157,22 @@ let __tla = (async () => {
|
|
|
1157
1157
|
u
|
|
1158
1158
|
]), m = j(() => {
|
|
1159
1159
|
if (!u) return null;
|
|
1160
|
-
const
|
|
1160
|
+
const L = /* @__PURE__ */ new Map(), { allLoopPoints: b, offsets: z, yValues: y } = u;
|
|
1161
1161
|
for (let D = 0; D < z.length - 1; D++) {
|
|
1162
1162
|
const w = z[D], A = z[D + 1];
|
|
1163
1163
|
if (A <= w) continue;
|
|
1164
1164
|
const k = [];
|
|
1165
1165
|
for (let B = w; B < A; B += 3) k.push(new C(b[B], b[B + 1], b[B + 2]));
|
|
1166
|
-
k.length >= 3 &&
|
|
1166
|
+
k.length >= 3 && L.set(y[D], k);
|
|
1167
1167
|
}
|
|
1168
|
-
return
|
|
1168
|
+
return L;
|
|
1169
1169
|
}, [
|
|
1170
1170
|
u
|
|
1171
1171
|
]), x = j(() => {
|
|
1172
1172
|
if (!u) return null;
|
|
1173
|
-
const
|
|
1174
|
-
for (let b = 0; b < u.yValues.length; b++)
|
|
1175
|
-
return
|
|
1173
|
+
const L = /* @__PURE__ */ new Map();
|
|
1174
|
+
for (let b = 0; b < u.yValues.length; b++) L.set(u.yValues[b], u.circumferences[b]);
|
|
1175
|
+
return L;
|
|
1176
1176
|
}, [
|
|
1177
1177
|
u
|
|
1178
1178
|
]);
|
|
@@ -1182,12 +1182,12 @@ let __tla = (async () => {
|
|
|
1182
1182
|
f
|
|
1183
1183
|
]), ne(() => {
|
|
1184
1184
|
if (!x || !s) return;
|
|
1185
|
-
const
|
|
1185
|
+
const L = f.filter((b) => (x.get(b) ?? 0) > 0).map((b) => ({
|
|
1186
1186
|
yPosition: b,
|
|
1187
1187
|
originalValue: x.get(b) ?? 0,
|
|
1188
1188
|
modifiedValue: null
|
|
1189
1189
|
}));
|
|
1190
|
-
s(
|
|
1190
|
+
s(L);
|
|
1191
1191
|
}, [
|
|
1192
1192
|
x,
|
|
1193
1193
|
f,
|
|
@@ -1195,9 +1195,9 @@ let __tla = (async () => {
|
|
|
1195
1195
|
]);
|
|
1196
1196
|
const S = [
|
|
1197
1197
|
"#5B9BD5"
|
|
1198
|
-
], I = l *
|
|
1198
|
+
], I = l * io, P = re((L) => {
|
|
1199
1199
|
if (x) return;
|
|
1200
|
-
p.current.set(
|
|
1200
|
+
p.current.set(L.yPosition, L);
|
|
1201
1201
|
const b = Array.from(p.current.values()).sort((z, y) => c ? y.yPosition - z.yPosition : z.yPosition - y.yPosition);
|
|
1202
1202
|
s == null ? void 0 : s(b);
|
|
1203
1203
|
}, [
|
|
@@ -1205,44 +1205,44 @@ let __tla = (async () => {
|
|
|
1205
1205
|
c,
|
|
1206
1206
|
x
|
|
1207
1207
|
]);
|
|
1208
|
-
return M ? i(
|
|
1209
|
-
children: f.map((
|
|
1208
|
+
return M ? i(Oe, {
|
|
1209
|
+
children: f.map((L, b) => i(ko, {
|
|
1210
1210
|
bvh: M,
|
|
1211
1211
|
geometry: g,
|
|
1212
|
-
yPosition:
|
|
1213
|
-
color: d != null && Math.abs(
|
|
1212
|
+
yPosition: L,
|
|
1213
|
+
color: d != null && Math.abs(L - d) < o * 0.5 ? "#44ff44" : S[b % S.length],
|
|
1214
1214
|
labelX: I,
|
|
1215
|
-
onDataChange:
|
|
1215
|
+
onDataChange: P,
|
|
1216
1216
|
displayUnit: a,
|
|
1217
1217
|
useInnerSurface: n,
|
|
1218
1218
|
formValue: h == null ? void 0 : h[b],
|
|
1219
|
-
lineWidth: d != null && Math.abs(
|
|
1220
|
-
wasmLoopPoints: m == null ? void 0 : m.get(
|
|
1221
|
-
wasmCircumference: x == null ? void 0 : x.get(
|
|
1222
|
-
},
|
|
1219
|
+
lineWidth: d != null && Math.abs(L - d) < o * 0.5 ? 4 : 1.5,
|
|
1220
|
+
wasmLoopPoints: m == null ? void 0 : m.get(L),
|
|
1221
|
+
wasmCircumference: x == null ? void 0 : x.get(L)
|
|
1222
|
+
}, L))
|
|
1223
1223
|
}) : null;
|
|
1224
|
-
},
|
|
1224
|
+
}, Po = ({ mesh: e, greenY: r, modelSize: t, displayUnit: o = "mm", bottomY: l }) => {
|
|
1225
1225
|
var _a;
|
|
1226
1226
|
const s = e.geometry;
|
|
1227
1227
|
s.computeBoundingBox();
|
|
1228
1228
|
const c = l ?? ((_a = s.boundingBox) == null ? void 0 : _a.min.y) ?? 0, a = r - c, n = t * 0.4, h = t * 0.03, d = le(null);
|
|
1229
|
-
|
|
1229
|
+
an(({ camera: S }) => {
|
|
1230
1230
|
if (!d.current) return;
|
|
1231
1231
|
const I = new C();
|
|
1232
1232
|
S.getWorldDirection(I);
|
|
1233
|
-
const
|
|
1234
|
-
if (
|
|
1235
|
-
|
|
1236
|
-
const
|
|
1237
|
-
d.current.position.set(
|
|
1233
|
+
const P = new C(I.x, 0, I.z);
|
|
1234
|
+
if (P.lengthSq() < 1e-8) return;
|
|
1235
|
+
P.normalize();
|
|
1236
|
+
const L = new C().crossVectors(new C(0, 1, 0), P).normalize();
|
|
1237
|
+
d.current.position.set(L.x * n, 0, L.z * n);
|
|
1238
1238
|
const b = S.position.x - d.current.position.x, z = S.position.z - d.current.position.z;
|
|
1239
1239
|
d.current.rotation.y = Math.atan2(b, z);
|
|
1240
1240
|
});
|
|
1241
1241
|
const u = new C(0, r, 0), p = new C(0, c, 0), g = new C(0, (r + c) / 2, 0), M = new C(-h, r, 0), f = new C(h, r, 0), m = new C(-h, c, 0), x = new C(h, c, 0);
|
|
1242
|
-
return
|
|
1242
|
+
return F("group", {
|
|
1243
1243
|
ref: d,
|
|
1244
1244
|
children: [
|
|
1245
|
-
i(
|
|
1245
|
+
i(fe, {
|
|
1246
1246
|
points: [
|
|
1247
1247
|
u,
|
|
1248
1248
|
p
|
|
@@ -1250,7 +1250,7 @@ let __tla = (async () => {
|
|
|
1250
1250
|
color: "#888888",
|
|
1251
1251
|
lineWidth: 1.5
|
|
1252
1252
|
}),
|
|
1253
|
-
i(
|
|
1253
|
+
i(fe, {
|
|
1254
1254
|
points: [
|
|
1255
1255
|
M,
|
|
1256
1256
|
f
|
|
@@ -1258,7 +1258,7 @@ let __tla = (async () => {
|
|
|
1258
1258
|
color: "#888888",
|
|
1259
1259
|
lineWidth: 1.5
|
|
1260
1260
|
}),
|
|
1261
|
-
i(
|
|
1261
|
+
i(fe, {
|
|
1262
1262
|
points: [
|
|
1263
1263
|
m,
|
|
1264
1264
|
x
|
|
@@ -1268,7 +1268,7 @@ let __tla = (async () => {
|
|
|
1268
1268
|
}),
|
|
1269
1269
|
i("mesh", {
|
|
1270
1270
|
position: g,
|
|
1271
|
-
children: i(
|
|
1271
|
+
children: i(Xe, {
|
|
1272
1272
|
center: true,
|
|
1273
1273
|
style: {
|
|
1274
1274
|
pointerEvents: "none"
|
|
@@ -1277,7 +1277,7 @@ let __tla = (async () => {
|
|
|
1277
1277
|
0,
|
|
1278
1278
|
0
|
|
1279
1279
|
],
|
|
1280
|
-
children:
|
|
1280
|
+
children: F("div", {
|
|
1281
1281
|
style: {
|
|
1282
1282
|
padding: "4px 8px",
|
|
1283
1283
|
backgroundColor: "rgba(0, 0, 0, 0.7)",
|
|
@@ -1300,8 +1300,8 @@ let __tla = (async () => {
|
|
|
1300
1300
|
})
|
|
1301
1301
|
]
|
|
1302
1302
|
});
|
|
1303
|
-
},
|
|
1304
|
-
const { set: h, size: d, camera: u, invalidate: p } =
|
|
1303
|
+
}, Lo = ({ modelSize: e, isAligned: r, isCut: t, mesh: o, viewMode: l, sliceY: s, landmarkCount: c = 0, measurementGeometry: a, resetCameraToFrontRef: n }) => {
|
|
1304
|
+
const { set: h, size: d, camera: u, invalidate: p } = cn(), g = le(false), M = le(l), f = le(new C()), m = le(null), x = le(c), S = le(r), I = le(t), P = le(a), L = le(0), b = re(() => {
|
|
1305
1305
|
if (!o || e <= 0) return null;
|
|
1306
1306
|
const y = a ?? o.geometry;
|
|
1307
1307
|
y.computeBoundingBox();
|
|
@@ -1310,7 +1310,7 @@ let __tla = (async () => {
|
|
|
1310
1310
|
const A = new C();
|
|
1311
1311
|
D.getSize(A), f.current.copy(A);
|
|
1312
1312
|
const k = d.width / d.height, B = Math.max(A.y, A.x / k) * 1.6, $ = B * k, N = w.y - A.y * 0.05;
|
|
1313
|
-
|
|
1313
|
+
L.current = N;
|
|
1314
1314
|
const U = new O.OrthographicCamera(-$ / 2, $ / 2, B / 2, -B / 2, 0.1, e * 10);
|
|
1315
1315
|
return U.position.set(0, N, e * 2), U.lookAt(0, N, 0), U;
|
|
1316
1316
|
}, [
|
|
@@ -1363,8 +1363,8 @@ let __tla = (async () => {
|
|
|
1363
1363
|
u,
|
|
1364
1364
|
z
|
|
1365
1365
|
]), ne(() => {
|
|
1366
|
-
const y = S.current !== r, D = I.current !== t, w = !
|
|
1367
|
-
if (S.current = r, I.current = t,
|
|
1366
|
+
const y = S.current !== r, D = I.current !== t, w = !P.current && !!a;
|
|
1367
|
+
if (S.current = r, I.current = t, P.current = a, !y && !D && !w || !r || l !== "3D") return;
|
|
1368
1368
|
const A = b();
|
|
1369
1369
|
A && h({
|
|
1370
1370
|
camera: A
|
|
@@ -1384,20 +1384,20 @@ let __tla = (async () => {
|
|
|
1384
1384
|
m.current = u;
|
|
1385
1385
|
const D = o.geometry, w = D.getAttribute("position"), A = w.array, k = e * 0.15;
|
|
1386
1386
|
let B = 1 / 0, $ = -1 / 0, N = 1 / 0, U = -1 / 0, be = false;
|
|
1387
|
-
for (let
|
|
1388
|
-
const H = A[
|
|
1387
|
+
for (let pe = 0; pe < w.count; pe++) if (Math.abs(A[pe * 3 + 1] - s) < k) {
|
|
1388
|
+
const H = A[pe * 3], q = A[pe * 3 + 2];
|
|
1389
1389
|
H < B && (B = H), H > $ && ($ = H), q < N && (N = q), q > U && (U = q), be = true;
|
|
1390
1390
|
}
|
|
1391
1391
|
if (!be) {
|
|
1392
1392
|
D.computeBoundingBox();
|
|
1393
|
-
const
|
|
1394
|
-
B =
|
|
1393
|
+
const pe = D.boundingBox;
|
|
1394
|
+
B = pe.min.x, $ = pe.max.x, N = pe.min.z, U = pe.max.z;
|
|
1395
1395
|
}
|
|
1396
|
-
const ae = (B + $) / 2,
|
|
1397
|
-
let Z,
|
|
1398
|
-
Y /
|
|
1399
|
-
const me = new O.OrthographicCamera(-Z / 2, Z / 2,
|
|
1400
|
-
me.position.set(ae, s + e * 2,
|
|
1396
|
+
const ae = (B + $) / 2, ue = (N + U) / 2, ie = d.width / d.height, J = 1.4, Y = ($ - B) * J, he = (U - N) * J;
|
|
1397
|
+
let Z, ge;
|
|
1398
|
+
Y / he > ie ? (Z = Y, ge = Y / ie) : (ge = he, Z = he * ie);
|
|
1399
|
+
const me = new O.OrthographicCamera(-Z / 2, Z / 2, ge / 2, -ge / 2, 0.1, e * 10);
|
|
1400
|
+
me.position.set(ae, s + e * 2, ue), me.up.set(0, 0, -1), me.lookAt(ae, s, ue), h({
|
|
1401
1401
|
camera: me
|
|
1402
1402
|
});
|
|
1403
1403
|
} else if (y === "2D") if (m.current) h({
|
|
@@ -1428,17 +1428,17 @@ let __tla = (async () => {
|
|
|
1428
1428
|
const D = o.geometry, w = D.getAttribute("position"), A = w.array, k = e * 0.15;
|
|
1429
1429
|
let B = 1 / 0, $ = -1 / 0, N = 1 / 0, U = -1 / 0, be = false;
|
|
1430
1430
|
for (let Z = 0; Z < w.count; Z++) if (Math.abs(A[Z * 3 + 1] - s) < k) {
|
|
1431
|
-
const
|
|
1432
|
-
|
|
1431
|
+
const ge = A[Z * 3], me = A[Z * 3 + 2];
|
|
1432
|
+
ge < B && (B = ge), ge > $ && ($ = ge), me < N && (N = me), me > U && (U = me), be = true;
|
|
1433
1433
|
}
|
|
1434
1434
|
if (!be) {
|
|
1435
1435
|
D.computeBoundingBox();
|
|
1436
1436
|
const Z = D.boundingBox;
|
|
1437
1437
|
B = Z.min.x, $ = Z.max.x, N = Z.min.z, U = Z.max.z;
|
|
1438
1438
|
}
|
|
1439
|
-
const ae = d.width / d.height,
|
|
1440
|
-
let Y,
|
|
1441
|
-
ie / J > ae ? (Y = ie,
|
|
1439
|
+
const ae = d.width / d.height, ue = 1.4, ie = ($ - B) * ue, J = (U - N) * ue;
|
|
1440
|
+
let Y, he;
|
|
1441
|
+
ie / J > ae ? (Y = ie, he = ie / ae) : (he = J, Y = J * ae), y.left = -Y / 2, y.right = Y / 2, y.top = he / 2, y.bottom = -he / 2;
|
|
1442
1442
|
} else {
|
|
1443
1443
|
const D = f.current, w = d.width / d.height, A = Math.max(D.y, D.x / w) * 1.6, k = A * w;
|
|
1444
1444
|
y.left = -k / 2, y.right = k / 2, y.top = A / 2, y.bottom = -A / 2;
|
|
@@ -1452,12 +1452,12 @@ let __tla = (async () => {
|
|
|
1452
1452
|
l,
|
|
1453
1453
|
o
|
|
1454
1454
|
]), null;
|
|
1455
|
-
},
|
|
1455
|
+
}, Io = ({ mesh: e, isDragging: r }) => {
|
|
1456
1456
|
var _a;
|
|
1457
1457
|
const t = e.geometry;
|
|
1458
1458
|
t.computeBoundingBox();
|
|
1459
1459
|
const o = new C();
|
|
1460
|
-
return (_a = t.boundingBox) == null ? void 0 : _a.getCenter(o), i(
|
|
1460
|
+
return (_a = t.boundingBox) == null ? void 0 : _a.getCenter(o), i(dn, {
|
|
1461
1461
|
enableDamping: false,
|
|
1462
1462
|
enablePan: false,
|
|
1463
1463
|
minPolarAngle: Math.PI * 0.15,
|
|
@@ -1471,7 +1471,7 @@ let __tla = (async () => {
|
|
|
1471
1471
|
o.z
|
|
1472
1472
|
]
|
|
1473
1473
|
});
|
|
1474
|
-
},
|
|
1474
|
+
}, _o = ({ wasAutoScaled: e, onDismiss: r }) => F("div", {
|
|
1475
1475
|
style: {
|
|
1476
1476
|
position: "absolute",
|
|
1477
1477
|
bottom: 16,
|
|
@@ -1512,7 +1512,7 @@ let __tla = (async () => {
|
|
|
1512
1512
|
children: "X"
|
|
1513
1513
|
})
|
|
1514
1514
|
]
|
|
1515
|
-
}),
|
|
1515
|
+
}), Do = ({ isDoubleShell: e, onDismiss: r }) => F("div", {
|
|
1516
1516
|
style: {
|
|
1517
1517
|
position: "absolute",
|
|
1518
1518
|
bottom: 68,
|
|
@@ -1553,7 +1553,7 @@ let __tla = (async () => {
|
|
|
1553
1553
|
children: "X"
|
|
1554
1554
|
})
|
|
1555
1555
|
]
|
|
1556
|
-
}),
|
|
1556
|
+
}), Bo = ({ steps: e, currentStep: r, accentColor: t = "rgb(12, 67, 173)" }) => i("div", {
|
|
1557
1557
|
style: {
|
|
1558
1558
|
backgroundColor: "#fff",
|
|
1559
1559
|
borderBottom: "1px solid #e0e0e0",
|
|
@@ -1564,12 +1564,12 @@ let __tla = (async () => {
|
|
|
1564
1564
|
},
|
|
1565
1565
|
children: e.map((o, l) => {
|
|
1566
1566
|
const s = o.number < r, c = o.number === r;
|
|
1567
|
-
return
|
|
1567
|
+
return F("div", {
|
|
1568
1568
|
style: {
|
|
1569
1569
|
display: "contents"
|
|
1570
1570
|
},
|
|
1571
1571
|
children: [
|
|
1572
|
-
|
|
1572
|
+
F("div", {
|
|
1573
1573
|
style: {
|
|
1574
1574
|
display: "flex",
|
|
1575
1575
|
alignItems: "center",
|
|
@@ -1617,25 +1617,25 @@ let __tla = (async () => {
|
|
|
1617
1617
|
]
|
|
1618
1618
|
}, o.number);
|
|
1619
1619
|
})
|
|
1620
|
-
}),
|
|
1621
|
-
const c = e.geometry, a = j(() => new
|
|
1622
|
-
maxLeafTris:
|
|
1620
|
+
}), Ro = ({ mesh: e, upperY: r, originY: t, modelSize: o, meshColor: l = "#c8c8c8", displayUnit: s = "mm" }) => {
|
|
1621
|
+
const c = e.geometry, a = j(() => new pt(c, {
|
|
1622
|
+
maxLeafTris: ht
|
|
1623
1623
|
}), [
|
|
1624
1624
|
c
|
|
1625
|
-
]), n = j(() =>
|
|
1625
|
+
]), n = j(() => Ye(a, c, t), [
|
|
1626
1626
|
a,
|
|
1627
1627
|
c,
|
|
1628
1628
|
t
|
|
1629
|
-
]), h = j(() => new
|
|
1629
|
+
]), h = j(() => new ut(new C(0, -1, 0), r), [
|
|
1630
1630
|
r
|
|
1631
1631
|
]), { mlLine: d, apLine: u, mlWidth: p, apWidth: g } = j(() => {
|
|
1632
1632
|
let m = null, x = null, S = 0, I = 0;
|
|
1633
1633
|
if (n.linePoints.length >= 2) {
|
|
1634
|
-
let
|
|
1635
|
-
for (const y of n.linePoints) y.x <
|
|
1634
|
+
let P = n.linePoints[0], L = n.linePoints[0], b = n.linePoints[0], z = n.linePoints[0];
|
|
1635
|
+
for (const y of n.linePoints) y.x < P.x && (P = y), y.x > L.x && (L = y), y.z < b.z && (b = y), y.z > z.z && (z = y);
|
|
1636
1636
|
m = [
|
|
1637
|
-
new C(
|
|
1638
|
-
new C(
|
|
1637
|
+
new C(P.x, t, P.z),
|
|
1638
|
+
new C(L.x, t, L.z)
|
|
1639
1639
|
], x = [
|
|
1640
1640
|
new C(b.x, t, b.z),
|
|
1641
1641
|
new C(z.x, t, z.z)
|
|
@@ -1651,7 +1651,7 @@ let __tla = (async () => {
|
|
|
1651
1651
|
n,
|
|
1652
1652
|
t
|
|
1653
1653
|
]), M = (m) => s === "inch" ? (m / 25.4).toFixed(2) : m.toFixed(1), f = s === "inch" ? "in" : "mm";
|
|
1654
|
-
return
|
|
1654
|
+
return F(Oe, {
|
|
1655
1655
|
children: [
|
|
1656
1656
|
i("mesh", {
|
|
1657
1657
|
geometry: e.geometry,
|
|
@@ -1666,7 +1666,7 @@ let __tla = (async () => {
|
|
|
1666
1666
|
]
|
|
1667
1667
|
})
|
|
1668
1668
|
}),
|
|
1669
|
-
n.linePoints.length >= 2 && i(
|
|
1669
|
+
n.linePoints.length >= 2 && i(fe, {
|
|
1670
1670
|
points: n.linePoints,
|
|
1671
1671
|
color: "#00ff00",
|
|
1672
1672
|
lineWidth: 3,
|
|
@@ -1674,9 +1674,9 @@ let __tla = (async () => {
|
|
|
1674
1674
|
depthWrite: false,
|
|
1675
1675
|
transparent: true
|
|
1676
1676
|
}),
|
|
1677
|
-
d &&
|
|
1677
|
+
d && F(Oe, {
|
|
1678
1678
|
children: [
|
|
1679
|
-
i(
|
|
1679
|
+
i(fe, {
|
|
1680
1680
|
points: d,
|
|
1681
1681
|
color: "#ff8800",
|
|
1682
1682
|
lineWidth: 2,
|
|
@@ -1684,7 +1684,7 @@ let __tla = (async () => {
|
|
|
1684
1684
|
depthWrite: false,
|
|
1685
1685
|
transparent: true
|
|
1686
1686
|
}),
|
|
1687
|
-
i(
|
|
1687
|
+
i(Xe, {
|
|
1688
1688
|
position: [
|
|
1689
1689
|
d[0].x,
|
|
1690
1690
|
t,
|
|
@@ -1701,7 +1701,7 @@ let __tla = (async () => {
|
|
|
1701
1701
|
backgroundColor: "rgba(0,0,0,0.75)",
|
|
1702
1702
|
borderRadius: 3
|
|
1703
1703
|
},
|
|
1704
|
-
children:
|
|
1704
|
+
children: F("span", {
|
|
1705
1705
|
style: {
|
|
1706
1706
|
fontSize: 12,
|
|
1707
1707
|
color: "#ff8800",
|
|
@@ -1718,9 +1718,9 @@ let __tla = (async () => {
|
|
|
1718
1718
|
})
|
|
1719
1719
|
]
|
|
1720
1720
|
}),
|
|
1721
|
-
u &&
|
|
1721
|
+
u && F(Oe, {
|
|
1722
1722
|
children: [
|
|
1723
|
-
i(
|
|
1723
|
+
i(fe, {
|
|
1724
1724
|
points: u,
|
|
1725
1725
|
color: "#ff00ff",
|
|
1726
1726
|
lineWidth: 2,
|
|
@@ -1728,7 +1728,7 @@ let __tla = (async () => {
|
|
|
1728
1728
|
depthWrite: false,
|
|
1729
1729
|
transparent: true
|
|
1730
1730
|
}),
|
|
1731
|
-
i(
|
|
1731
|
+
i(Xe, {
|
|
1732
1732
|
position: [
|
|
1733
1733
|
Math.max(u[0].x, u[1].x) + o * 0.02,
|
|
1734
1734
|
t,
|
|
@@ -1745,7 +1745,7 @@ let __tla = (async () => {
|
|
|
1745
1745
|
backgroundColor: "rgba(0,0,0,0.75)",
|
|
1746
1746
|
borderRadius: 3
|
|
1747
1747
|
},
|
|
1748
|
-
children:
|
|
1748
|
+
children: F("span", {
|
|
1749
1749
|
style: {
|
|
1750
1750
|
fontSize: 12,
|
|
1751
1751
|
color: "#ff00ff",
|
|
@@ -1764,19 +1764,19 @@ let __tla = (async () => {
|
|
|
1764
1764
|
})
|
|
1765
1765
|
]
|
|
1766
1766
|
});
|
|
1767
|
-
},
|
|
1768
|
-
const [p, g] = E(false), [M, f] = E(false), { camera: m, gl: x } =
|
|
1767
|
+
}, Wo = ({ mesh: e, yPosition: r, onYChange: t, minY: o, maxY: l, modelSize: s, color: c, hoverColor: a, dragColor: n, label: h, onDragStart: d, onDragEnd: u }) => {
|
|
1768
|
+
const [p, g] = E(false), [M, f] = E(false), { camera: m, gl: x } = cn(), S = le(0), I = e.geometry, P = bn(I), L = j(() => P ? Ye(P, I, r) : {
|
|
1769
1769
|
linePoints: [],
|
|
1770
1770
|
lineLength: 0,
|
|
1771
1771
|
rightmostPoint: new C()
|
|
1772
1772
|
}, [
|
|
1773
|
-
|
|
1773
|
+
P,
|
|
1774
1774
|
I,
|
|
1775
1775
|
r
|
|
1776
1776
|
]), b = re((A, k) => {
|
|
1777
|
-
const B = x.domElement.getBoundingClientRect(), $ = (A - B.left) / B.width * 2 - 1, N = -((k - B.top) / B.height) * 2 + 1, U = new
|
|
1777
|
+
const B = x.domElement.getBoundingClientRect(), $ = (A - B.left) / B.width * 2 - 1, N = -((k - B.top) / B.height) * 2 + 1, U = new qn();
|
|
1778
1778
|
U.setFromCamera(new O.Vector2($, N), m);
|
|
1779
|
-
const be = new
|
|
1779
|
+
const be = new ut(new C(0, 0, 1), 0), ae = new C();
|
|
1780
1780
|
return U.ray.intersectPlane(be, ae), ae ? ae.y : r;
|
|
1781
1781
|
}, [
|
|
1782
1782
|
m,
|
|
@@ -1805,13 +1805,13 @@ let __tla = (async () => {
|
|
|
1805
1805
|
x,
|
|
1806
1806
|
u
|
|
1807
1807
|
]);
|
|
1808
|
-
if (
|
|
1808
|
+
if (L.linePoints.length < 2) return null;
|
|
1809
1809
|
const w = p ? n : M ? a : c;
|
|
1810
|
-
return
|
|
1810
|
+
return F("group", {
|
|
1811
1811
|
renderOrder: 10,
|
|
1812
1812
|
children: [
|
|
1813
|
-
i(
|
|
1814
|
-
points:
|
|
1813
|
+
i(fe, {
|
|
1814
|
+
points: L.linePoints,
|
|
1815
1815
|
color: w,
|
|
1816
1816
|
lineWidth: p ? 6 : M ? 5 : 4,
|
|
1817
1817
|
depthTest: false,
|
|
@@ -1830,11 +1830,11 @@ let __tla = (async () => {
|
|
|
1830
1830
|
}),
|
|
1831
1831
|
(M || p) && i("mesh", {
|
|
1832
1832
|
position: [
|
|
1833
|
-
|
|
1833
|
+
L.rightmostPoint.x + s * 0.15,
|
|
1834
1834
|
r,
|
|
1835
1835
|
0
|
|
1836
1836
|
],
|
|
1837
|
-
children: i(
|
|
1837
|
+
children: i(Xe, {
|
|
1838
1838
|
center: true,
|
|
1839
1839
|
children: i("div", {
|
|
1840
1840
|
style: {
|
|
@@ -1853,17 +1853,17 @@ let __tla = (async () => {
|
|
|
1853
1853
|
]
|
|
1854
1854
|
});
|
|
1855
1855
|
};
|
|
1856
|
-
function
|
|
1856
|
+
function Eo(e, r) {
|
|
1857
1857
|
if (e == null) return {};
|
|
1858
1858
|
var t = {}, o = Object.keys(e), l, s;
|
|
1859
1859
|
for (s = 0; s < o.length; s++) l = o[s], !(r.indexOf(l) >= 0) && (t[l] = e[l]);
|
|
1860
1860
|
return t;
|
|
1861
1861
|
}
|
|
1862
|
-
var
|
|
1862
|
+
var To = [
|
|
1863
1863
|
"color"
|
|
1864
|
-
],
|
|
1865
|
-
var t = e.color, o = t === void 0 ? "currentColor" : t, l =
|
|
1866
|
-
return
|
|
1864
|
+
], Oo = Jn(function(e, r) {
|
|
1865
|
+
var t = e.color, o = t === void 0 ? "currentColor" : t, l = Eo(e, To);
|
|
1866
|
+
return en("svg", Object.assign({
|
|
1867
1867
|
width: "15",
|
|
1868
1868
|
height: "15",
|
|
1869
1869
|
viewBox: "0 0 15 15",
|
|
@@ -1871,20 +1871,20 @@ let __tla = (async () => {
|
|
|
1871
1871
|
xmlns: "http://www.w3.org/2000/svg"
|
|
1872
1872
|
}, l, {
|
|
1873
1873
|
ref: r
|
|
1874
|
-
}),
|
|
1874
|
+
}), en("path", {
|
|
1875
1875
|
d: "M7.5 2C7.77614 2 8 2.22386 8 2.5L8 11.2929L11.1464 8.14645C11.3417 7.95118 11.6583 7.95118 11.8536 8.14645C12.0488 8.34171 12.0488 8.65829 11.8536 8.85355L7.85355 12.8536C7.75979 12.9473 7.63261 13 7.5 13C7.36739 13 7.24021 12.9473 7.14645 12.8536L3.14645 8.85355C2.95118 8.65829 2.95118 8.34171 3.14645 8.14645C3.34171 7.95118 3.65829 7.95118 3.85355 8.14645L7 11.2929L7 2.5C7 2.22386 7.22386 2 7.5 2Z",
|
|
1876
1876
|
fill: o,
|
|
1877
1877
|
fillRule: "evenodd",
|
|
1878
1878
|
clipRule: "evenodd"
|
|
1879
1879
|
}));
|
|
1880
1880
|
});
|
|
1881
|
-
const
|
|
1881
|
+
const $o = [
|
|
1882
1882
|
"Scan doesn't load properly",
|
|
1883
1883
|
"Takes too long",
|
|
1884
1884
|
"I don't want to",
|
|
1885
1885
|
"I want a second opinion",
|
|
1886
1886
|
"I measured from IT"
|
|
1887
|
-
],
|
|
1887
|
+
], Ne = {
|
|
1888
1888
|
padding: "8px 20px",
|
|
1889
1889
|
borderRadius: 4,
|
|
1890
1890
|
fontSize: 14,
|
|
@@ -1893,7 +1893,7 @@ let __tla = (async () => {
|
|
|
1893
1893
|
fontFamily: "system-ui, sans-serif",
|
|
1894
1894
|
letterSpacing: "0.4px",
|
|
1895
1895
|
lineHeight: "36px"
|
|
1896
|
-
},
|
|
1896
|
+
}, It = {
|
|
1897
1897
|
width: "100%",
|
|
1898
1898
|
padding: "10px 12px",
|
|
1899
1899
|
fontSize: 15,
|
|
@@ -1902,7 +1902,7 @@ let __tla = (async () => {
|
|
|
1902
1902
|
outline: "none",
|
|
1903
1903
|
boxSizing: "border-box",
|
|
1904
1904
|
fontFamily: "system-ui, sans-serif"
|
|
1905
|
-
},
|
|
1905
|
+
}, Ho = ({ amputationType: e, spacingInches: r, scanMeasurements: t, scanFrontalHeight: o, onSave: l, onSkip: s }) => {
|
|
1906
1906
|
const c = e === "AK" ? "IT" : "MPT", a = r, n = e === "AK" ? 18 : 9, h = j(() => {
|
|
1907
1907
|
const w = [];
|
|
1908
1908
|
for (let A = 2; A >= 1; A -= a) w.push(`${A}\u2033 above ${c}`);
|
|
@@ -1913,7 +1913,7 @@ let __tla = (async () => {
|
|
|
1913
1913
|
a,
|
|
1914
1914
|
c,
|
|
1915
1915
|
n
|
|
1916
|
-
]), [d, u] = E({}), [p, g] = E(""), [M, f] = E(false), [m, x] = E(false), [S, I] = E(null), [
|
|
1916
|
+
]), [d, u] = E({}), [p, g] = E(""), [M, f] = E(false), [m, x] = E(false), [S, I] = E(null), [P, L] = E(""), b = j(() => {
|
|
1917
1917
|
const w = p !== "" && !isNaN(parseFloat(p)), A = h.some((k) => {
|
|
1918
1918
|
const B = d[k];
|
|
1919
1919
|
return B != null && B !== "" && !isNaN(parseFloat(B));
|
|
@@ -1956,8 +1956,8 @@ let __tla = (async () => {
|
|
|
1956
1956
|
f(false), x(true);
|
|
1957
1957
|
}, []);
|
|
1958
1958
|
if (m) {
|
|
1959
|
-
const w = S != null && (S !== "Other" ||
|
|
1960
|
-
w && s(S === "Other" ? `Other: ${
|
|
1959
|
+
const w = S != null && (S !== "Other" || P.trim() !== ""), A = () => {
|
|
1960
|
+
w && s(S === "Other" ? `Other: ${P.trim()}` : S);
|
|
1961
1961
|
};
|
|
1962
1962
|
return i("div", {
|
|
1963
1963
|
style: {
|
|
@@ -1972,7 +1972,7 @@ let __tla = (async () => {
|
|
|
1972
1972
|
zIndex: 9999,
|
|
1973
1973
|
fontFamily: "system-ui, sans-serif"
|
|
1974
1974
|
},
|
|
1975
|
-
children:
|
|
1975
|
+
children: F("div", {
|
|
1976
1976
|
style: {
|
|
1977
1977
|
backgroundColor: "#fff",
|
|
1978
1978
|
borderRadius: 12,
|
|
@@ -1980,7 +1980,7 @@ let __tla = (async () => {
|
|
|
1980
1980
|
boxShadow: "0 24px 38px 3px rgba(0,0,0,0.14)"
|
|
1981
1981
|
},
|
|
1982
1982
|
children: [
|
|
1983
|
-
|
|
1983
|
+
F("div", {
|
|
1984
1984
|
style: {
|
|
1985
1985
|
padding: "24px 24px 0"
|
|
1986
1986
|
},
|
|
@@ -2003,7 +2003,7 @@ let __tla = (async () => {
|
|
|
2003
2003
|
})
|
|
2004
2004
|
]
|
|
2005
2005
|
}),
|
|
2006
|
-
|
|
2006
|
+
F("div", {
|
|
2007
2007
|
style: {
|
|
2008
2008
|
padding: "20px 24px",
|
|
2009
2009
|
display: "flex",
|
|
@@ -2012,9 +2012,9 @@ let __tla = (async () => {
|
|
|
2012
2012
|
},
|
|
2013
2013
|
children: [
|
|
2014
2014
|
[
|
|
2015
|
-
|
|
2015
|
+
...$o,
|
|
2016
2016
|
"Other"
|
|
2017
|
-
].map((k) =>
|
|
2017
|
+
].map((k) => F("label", {
|
|
2018
2018
|
style: {
|
|
2019
2019
|
display: "flex",
|
|
2020
2020
|
alignItems: "center",
|
|
@@ -2030,7 +2030,7 @@ let __tla = (async () => {
|
|
|
2030
2030
|
name: "skip-reason",
|
|
2031
2031
|
checked: S === k,
|
|
2032
2032
|
onChange: () => {
|
|
2033
|
-
I(k), k !== "Other" &&
|
|
2033
|
+
I(k), k !== "Other" && L("");
|
|
2034
2034
|
},
|
|
2035
2035
|
style: {
|
|
2036
2036
|
accentColor: "rgb(12, 67, 173)",
|
|
@@ -2053,13 +2053,13 @@ let __tla = (async () => {
|
|
|
2053
2053
|
autoFocus: true,
|
|
2054
2054
|
type: "text",
|
|
2055
2055
|
placeholder: "Please describe...",
|
|
2056
|
-
value:
|
|
2057
|
-
onChange: (k) =>
|
|
2056
|
+
value: P,
|
|
2057
|
+
onChange: (k) => L(k.target.value),
|
|
2058
2058
|
onKeyDown: (k) => {
|
|
2059
2059
|
k.key === "Enter" && A();
|
|
2060
2060
|
},
|
|
2061
2061
|
style: {
|
|
2062
|
-
...
|
|
2062
|
+
...It,
|
|
2063
2063
|
marginTop: 8,
|
|
2064
2064
|
marginLeft: 40,
|
|
2065
2065
|
width: "calc(100% - 40px)",
|
|
@@ -2068,7 +2068,7 @@ let __tla = (async () => {
|
|
|
2068
2068
|
})
|
|
2069
2069
|
]
|
|
2070
2070
|
}),
|
|
2071
|
-
|
|
2071
|
+
F("div", {
|
|
2072
2072
|
style: {
|
|
2073
2073
|
display: "flex",
|
|
2074
2074
|
justifyContent: "flex-end",
|
|
@@ -2079,10 +2079,10 @@ let __tla = (async () => {
|
|
|
2079
2079
|
children: [
|
|
2080
2080
|
i("button", {
|
|
2081
2081
|
onClick: () => {
|
|
2082
|
-
x(false), I(null),
|
|
2082
|
+
x(false), I(null), L("");
|
|
2083
2083
|
},
|
|
2084
2084
|
style: {
|
|
2085
|
-
...
|
|
2085
|
+
...Ne,
|
|
2086
2086
|
backgroundColor: "#fff",
|
|
2087
2087
|
border: "1px solid #ddd",
|
|
2088
2088
|
color: "#666"
|
|
@@ -2093,7 +2093,7 @@ let __tla = (async () => {
|
|
|
2093
2093
|
onClick: A,
|
|
2094
2094
|
disabled: !w,
|
|
2095
2095
|
style: {
|
|
2096
|
-
...
|
|
2096
|
+
...Ne,
|
|
2097
2097
|
backgroundColor: w ? "rgb(12, 67, 173)" : "#e0e0e0",
|
|
2098
2098
|
border: "none",
|
|
2099
2099
|
color: w ? "#fff" : "#9e9e9e",
|
|
@@ -2120,7 +2120,7 @@ let __tla = (async () => {
|
|
|
2120
2120
|
zIndex: 9999,
|
|
2121
2121
|
fontFamily: "system-ui, sans-serif"
|
|
2122
2122
|
},
|
|
2123
|
-
children:
|
|
2123
|
+
children: F("div", {
|
|
2124
2124
|
style: {
|
|
2125
2125
|
backgroundColor: "#fff",
|
|
2126
2126
|
borderRadius: 8,
|
|
@@ -2146,7 +2146,7 @@ let __tla = (async () => {
|
|
|
2146
2146
|
},
|
|
2147
2147
|
children: "Your measurements will be submitted without comparing to the scan. Are you sure?"
|
|
2148
2148
|
}),
|
|
2149
|
-
|
|
2149
|
+
F("div", {
|
|
2150
2150
|
style: {
|
|
2151
2151
|
display: "flex",
|
|
2152
2152
|
justifyContent: "flex-end",
|
|
@@ -2156,7 +2156,7 @@ let __tla = (async () => {
|
|
|
2156
2156
|
i("button", {
|
|
2157
2157
|
onClick: () => f(false),
|
|
2158
2158
|
style: {
|
|
2159
|
-
...
|
|
2159
|
+
...Ne,
|
|
2160
2160
|
backgroundColor: "#fff",
|
|
2161
2161
|
border: "1px solid #bdbdbd",
|
|
2162
2162
|
color: "#333"
|
|
@@ -2166,7 +2166,7 @@ let __tla = (async () => {
|
|
|
2166
2166
|
i("button", {
|
|
2167
2167
|
onClick: D,
|
|
2168
2168
|
style: {
|
|
2169
|
-
...
|
|
2169
|
+
...Ne,
|
|
2170
2170
|
backgroundColor: "rgb(12, 67, 173)",
|
|
2171
2171
|
border: "none",
|
|
2172
2172
|
color: "#fff"
|
|
@@ -2177,7 +2177,7 @@ let __tla = (async () => {
|
|
|
2177
2177
|
})
|
|
2178
2178
|
]
|
|
2179
2179
|
})
|
|
2180
|
-
}) :
|
|
2180
|
+
}) : F("div", {
|
|
2181
2181
|
style: {
|
|
2182
2182
|
position: "fixed",
|
|
2183
2183
|
inset: 0,
|
|
@@ -2195,7 +2195,7 @@ let __tla = (async () => {
|
|
|
2195
2195
|
borderBottom: "1px solid #e0e0e0",
|
|
2196
2196
|
flexShrink: 0
|
|
2197
2197
|
},
|
|
2198
|
-
children:
|
|
2198
|
+
children: F("div", {
|
|
2199
2199
|
style: {
|
|
2200
2200
|
display: "flex",
|
|
2201
2201
|
alignItems: "center",
|
|
@@ -2204,9 +2204,9 @@ let __tla = (async () => {
|
|
|
2204
2204
|
gap: 12
|
|
2205
2205
|
},
|
|
2206
2206
|
children: [
|
|
2207
|
-
|
|
2207
|
+
F("div", {
|
|
2208
2208
|
children: [
|
|
2209
|
-
|
|
2209
|
+
F("div", {
|
|
2210
2210
|
style: {
|
|
2211
2211
|
fontSize: 22,
|
|
2212
2212
|
fontWeight: 600,
|
|
@@ -2217,7 +2217,7 @@ let __tla = (async () => {
|
|
|
2217
2217
|
" Measurements"
|
|
2218
2218
|
]
|
|
2219
2219
|
}),
|
|
2220
|
-
|
|
2220
|
+
F("div", {
|
|
2221
2221
|
style: {
|
|
2222
2222
|
fontSize: 13,
|
|
2223
2223
|
color: "rgba(0,0,0,0.54)",
|
|
@@ -2235,7 +2235,7 @@ let __tla = (async () => {
|
|
|
2235
2235
|
i("button", {
|
|
2236
2236
|
onClick: y,
|
|
2237
2237
|
style: {
|
|
2238
|
-
...
|
|
2238
|
+
...Ne,
|
|
2239
2239
|
backgroundColor: "#fff",
|
|
2240
2240
|
border: "2px solid rgb(12, 67, 173)",
|
|
2241
2241
|
color: "rgb(12, 67, 173)",
|
|
@@ -2243,7 +2243,7 @@ let __tla = (async () => {
|
|
|
2243
2243
|
padding: "6px 16px",
|
|
2244
2244
|
fontSize: 13
|
|
2245
2245
|
},
|
|
2246
|
-
children:
|
|
2246
|
+
children: F("span", {
|
|
2247
2247
|
style: {
|
|
2248
2248
|
marginRight: 8,
|
|
2249
2249
|
display: "flex",
|
|
@@ -2251,7 +2251,7 @@ let __tla = (async () => {
|
|
|
2251
2251
|
gap: 4
|
|
2252
2252
|
},
|
|
2253
2253
|
children: [
|
|
2254
|
-
i(
|
|
2254
|
+
i(Oo, {
|
|
2255
2255
|
style: {
|
|
2256
2256
|
width: 16,
|
|
2257
2257
|
height: 16
|
|
@@ -2264,7 +2264,7 @@ let __tla = (async () => {
|
|
|
2264
2264
|
]
|
|
2265
2265
|
})
|
|
2266
2266
|
}),
|
|
2267
|
-
|
|
2267
|
+
F("div", {
|
|
2268
2268
|
style: {
|
|
2269
2269
|
flex: 1,
|
|
2270
2270
|
minHeight: 0,
|
|
@@ -2289,9 +2289,9 @@ let __tla = (async () => {
|
|
|
2289
2289
|
gap: "12px 20px",
|
|
2290
2290
|
marginBottom: 28
|
|
2291
2291
|
},
|
|
2292
|
-
children: h.map((w, A) =>
|
|
2292
|
+
children: h.map((w, A) => F("div", {
|
|
2293
2293
|
children: [
|
|
2294
|
-
|
|
2294
|
+
F("label", {
|
|
2295
2295
|
style: {
|
|
2296
2296
|
display: "block",
|
|
2297
2297
|
fontSize: 12,
|
|
@@ -2319,7 +2319,7 @@ let __tla = (async () => {
|
|
|
2319
2319
|
[w]: k.target.value
|
|
2320
2320
|
})),
|
|
2321
2321
|
style: {
|
|
2322
|
-
...
|
|
2322
|
+
...It,
|
|
2323
2323
|
padding: "8px 10px",
|
|
2324
2324
|
fontSize: 14,
|
|
2325
2325
|
borderColor: d[w] ? "rgb(12, 67, 173)" : "#ccc"
|
|
@@ -2344,9 +2344,9 @@ let __tla = (async () => {
|
|
|
2344
2344
|
gridTemplateColumns: "repeat(auto-fill, minmax(180px, 1fr))",
|
|
2345
2345
|
gap: "12px 20px"
|
|
2346
2346
|
},
|
|
2347
|
-
children:
|
|
2347
|
+
children: F("div", {
|
|
2348
2348
|
children: [
|
|
2349
|
-
|
|
2349
|
+
F("label", {
|
|
2350
2350
|
style: {
|
|
2351
2351
|
display: "block",
|
|
2352
2352
|
fontSize: 12,
|
|
@@ -2370,7 +2370,7 @@ let __tla = (async () => {
|
|
|
2370
2370
|
value: p,
|
|
2371
2371
|
onChange: (w) => g(w.target.value),
|
|
2372
2372
|
style: {
|
|
2373
|
-
...
|
|
2373
|
+
...It,
|
|
2374
2374
|
padding: "8px 10px",
|
|
2375
2375
|
fontSize: 14,
|
|
2376
2376
|
borderColor: p ? "rgb(12, 67, 173)" : "#ccc"
|
|
@@ -2382,7 +2382,7 @@ let __tla = (async () => {
|
|
|
2382
2382
|
})
|
|
2383
2383
|
]
|
|
2384
2384
|
}),
|
|
2385
|
-
|
|
2385
|
+
F("div", {
|
|
2386
2386
|
style: {
|
|
2387
2387
|
padding: "12px 24px",
|
|
2388
2388
|
backgroundColor: "#fff",
|
|
@@ -2398,7 +2398,7 @@ let __tla = (async () => {
|
|
|
2398
2398
|
i("button", {
|
|
2399
2399
|
onClick: () => f(true),
|
|
2400
2400
|
style: {
|
|
2401
|
-
...
|
|
2401
|
+
...Ne,
|
|
2402
2402
|
backgroundColor: "#fff",
|
|
2403
2403
|
border: "1px solid #bdbdbd",
|
|
2404
2404
|
color: "#666",
|
|
@@ -2411,7 +2411,7 @@ let __tla = (async () => {
|
|
|
2411
2411
|
onClick: z,
|
|
2412
2412
|
disabled: !b,
|
|
2413
2413
|
style: {
|
|
2414
|
-
...
|
|
2414
|
+
...Ne,
|
|
2415
2415
|
backgroundColor: b ? "rgb(12, 67, 173)" : "#e0e0e0",
|
|
2416
2416
|
border: "none",
|
|
2417
2417
|
color: b ? "#fff" : "#9e9e9e",
|
|
@@ -2426,18 +2426,18 @@ let __tla = (async () => {
|
|
|
2426
2426
|
]
|
|
2427
2427
|
});
|
|
2428
2428
|
};
|
|
2429
|
-
function
|
|
2429
|
+
function wn(e, r, t) {
|
|
2430
2430
|
const o = e.getAttribute("position"), l = t - r;
|
|
2431
2431
|
if (l < 1) return null;
|
|
2432
2432
|
const s = 30, c = l / s, a = [];
|
|
2433
2433
|
for (let m = 0; m < s; m++) {
|
|
2434
2434
|
const x = r + m * c, S = r + (m + 1) * c;
|
|
2435
|
-
let I = 0,
|
|
2435
|
+
let I = 0, P = 0, L = 0, b = 0;
|
|
2436
2436
|
for (let z = 0; z < o.count; z++) {
|
|
2437
2437
|
const y = o.getY(z);
|
|
2438
|
-
y >= x && y < S && (I += o.getX(z),
|
|
2438
|
+
y >= x && y < S && (I += o.getX(z), P += y, L += o.getZ(z), b++);
|
|
2439
2439
|
}
|
|
2440
|
-
b > 20 && a.push(new C(I / b,
|
|
2440
|
+
b > 20 && a.push(new C(I / b, P / b, L / b));
|
|
2441
2441
|
}
|
|
2442
2442
|
if (a.length < 5) return null;
|
|
2443
2443
|
const n = new C();
|
|
@@ -2450,13 +2450,13 @@ let __tla = (async () => {
|
|
|
2450
2450
|
}
|
|
2451
2451
|
let f = new C(0.01, 1, 0.01).normalize();
|
|
2452
2452
|
for (let m = 0; m < 30; m++) {
|
|
2453
|
-
const x = h * f.x + d * f.y + u * f.z, S = d * f.x + p * f.y + g * f.z, I = u * f.x + g * f.y + M * f.z,
|
|
2454
|
-
if (
|
|
2455
|
-
f =
|
|
2453
|
+
const x = h * f.x + d * f.y + u * f.z, S = d * f.x + p * f.y + g * f.z, I = u * f.x + g * f.y + M * f.z, P = new C(x, S, I), L = P.length();
|
|
2454
|
+
if (L < 1e-10 || (P.divideScalar(L), f.distanceTo(P) < 1e-8)) break;
|
|
2455
|
+
f = P;
|
|
2456
2456
|
}
|
|
2457
2457
|
return f.y < 0 && f.negate(), f;
|
|
2458
2458
|
}
|
|
2459
|
-
const
|
|
2459
|
+
const Vo = {
|
|
2460
2460
|
pcaAxes: true,
|
|
2461
2461
|
obb: true,
|
|
2462
2462
|
obbAxis: true,
|
|
@@ -2466,12 +2466,12 @@ let __tla = (async () => {
|
|
|
2466
2466
|
landmarkAxis: true,
|
|
2467
2467
|
iterativePCA: false,
|
|
2468
2468
|
fullRegionPCA: true
|
|
2469
|
-
},
|
|
2469
|
+
}, jo = [
|
|
2470
2470
|
"#ff4444",
|
|
2471
2471
|
"#44cc44",
|
|
2472
2472
|
"#4488ff"
|
|
2473
2473
|
];
|
|
2474
|
-
function
|
|
2474
|
+
function Sn(e) {
|
|
2475
2475
|
const r = e.getAttribute("position"), t = r.count, o = new C();
|
|
2476
2476
|
for (let f = 0; f < t; f++) o.x += r.getX(f), o.y += r.getY(f), o.z += r.getZ(f);
|
|
2477
2477
|
o.divideScalar(t);
|
|
@@ -2501,7 +2501,7 @@ let __tla = (async () => {
|
|
|
2501
2501
|
for (let f = 0; f < 3; f++) {
|
|
2502
2502
|
let m = new C(1 + f * 0.1, 1 - f * 0.1, 0.5 + f * 0.3).normalize(), x = 0;
|
|
2503
2503
|
for (let S = 0; S < 100; S++) {
|
|
2504
|
-
const I = p[0][0] * m.x + p[0][1] * m.y + p[0][2] * m.z,
|
|
2504
|
+
const I = p[0][0] * m.x + p[0][1] * m.y + p[0][2] * m.z, P = p[1][0] * m.x + p[1][1] * m.y + p[1][2] * m.z, L = p[2][0] * m.x + p[2][1] * m.y + p[2][2] * m.z, b = new C(I, P, L);
|
|
2505
2505
|
if (x = b.length(), x < 1e-12) break;
|
|
2506
2506
|
if (b.divideScalar(x), m.distanceTo(b) < 1e-10) {
|
|
2507
2507
|
m = b;
|
|
@@ -2511,16 +2511,16 @@ let __tla = (async () => {
|
|
|
2511
2511
|
}
|
|
2512
2512
|
d.push(m.clone()), u.push(x);
|
|
2513
2513
|
for (let S = 0; S < 3; S++) for (let I = 0; I < 3; I++) {
|
|
2514
|
-
const
|
|
2514
|
+
const P = [
|
|
2515
2515
|
m.x,
|
|
2516
2516
|
m.y,
|
|
2517
2517
|
m.z
|
|
2518
|
-
][S],
|
|
2518
|
+
][S], L = [
|
|
2519
2519
|
m.x,
|
|
2520
2520
|
m.y,
|
|
2521
2521
|
m.z
|
|
2522
2522
|
][I];
|
|
2523
|
-
p[S][I] -= x *
|
|
2523
|
+
p[S][I] -= x * P * L;
|
|
2524
2524
|
}
|
|
2525
2525
|
}
|
|
2526
2526
|
const g = new C();
|
|
@@ -2535,7 +2535,7 @@ let __tla = (async () => {
|
|
|
2535
2535
|
let m = 1 / 0, x = -1 / 0;
|
|
2536
2536
|
const S = d[f];
|
|
2537
2537
|
for (let I = 0; I < t; I++) {
|
|
2538
|
-
const
|
|
2538
|
+
const P = r.getX(I) - g.x, L = r.getY(I) - g.y, b = r.getZ(I) - g.z, z = P * S.x + L * S.y + b * S.z;
|
|
2539
2539
|
z < m && (m = z), z > x && (x = z);
|
|
2540
2540
|
}
|
|
2541
2541
|
M[f] = (x - m) / 2;
|
|
@@ -2547,22 +2547,22 @@ let __tla = (async () => {
|
|
|
2547
2547
|
halfExtents: M
|
|
2548
2548
|
};
|
|
2549
2549
|
}
|
|
2550
|
-
function
|
|
2550
|
+
function No({ pca: e }) {
|
|
2551
2551
|
return i("group", {
|
|
2552
2552
|
children: e.axes.map((r, t) => {
|
|
2553
2553
|
const o = e.center.clone().addScaledVector(r, e.halfExtents[t]), l = e.center.clone().addScaledVector(r, -e.halfExtents[t]);
|
|
2554
|
-
return i(
|
|
2554
|
+
return i(fe, {
|
|
2555
2555
|
points: [
|
|
2556
2556
|
l,
|
|
2557
2557
|
o
|
|
2558
2558
|
],
|
|
2559
|
-
color:
|
|
2559
|
+
color: jo[t],
|
|
2560
2560
|
lineWidth: 2
|
|
2561
2561
|
}, t);
|
|
2562
2562
|
})
|
|
2563
2563
|
});
|
|
2564
2564
|
}
|
|
2565
|
-
function
|
|
2565
|
+
function Yo({ pca: e }) {
|
|
2566
2566
|
const r = j(() => {
|
|
2567
2567
|
const { center: t, axes: o, halfExtents: l } = e, s = [];
|
|
2568
2568
|
for (let a = -1; a <= 1; a += 2) for (let n = -1; n <= 1; n += 2) for (let h = -1; h <= 1; h += 2) s.push(t.clone().addScaledVector(o[0], a * l[0]).addScaledVector(o[1], n * l[1]).addScaledVector(o[2], h * l[2]));
|
|
@@ -2623,7 +2623,7 @@ let __tla = (async () => {
|
|
|
2623
2623
|
e
|
|
2624
2624
|
]);
|
|
2625
2625
|
return i("group", {
|
|
2626
|
-
children: r.map((t, o) => i(
|
|
2626
|
+
children: r.map((t, o) => i(fe, {
|
|
2627
2627
|
points: t,
|
|
2628
2628
|
color: "#ffaa00",
|
|
2629
2629
|
lineWidth: 1,
|
|
@@ -2632,7 +2632,7 @@ let __tla = (async () => {
|
|
|
2632
2632
|
}, o))
|
|
2633
2633
|
});
|
|
2634
2634
|
}
|
|
2635
|
-
function
|
|
2635
|
+
function Xo({ redPoint: e, greenPoint: r }) {
|
|
2636
2636
|
const t = j(() => new C().subVectors(r, e).normalize(), [
|
|
2637
2637
|
e,
|
|
2638
2638
|
r
|
|
@@ -2642,9 +2642,9 @@ let __tla = (async () => {
|
|
|
2642
2642
|
}, [
|
|
2643
2643
|
t
|
|
2644
2644
|
]), l = o < 1 ? "#44ff44" : o < 5 ? "#ffcc00" : "#ff4444";
|
|
2645
|
-
return
|
|
2645
|
+
return F("group", {
|
|
2646
2646
|
children: [
|
|
2647
|
-
i(
|
|
2647
|
+
i(fe, {
|
|
2648
2648
|
points: [
|
|
2649
2649
|
e,
|
|
2650
2650
|
r
|
|
@@ -2652,7 +2652,7 @@ let __tla = (async () => {
|
|
|
2652
2652
|
color: l,
|
|
2653
2653
|
lineWidth: 3
|
|
2654
2654
|
}),
|
|
2655
|
-
|
|
2655
|
+
F("mesh", {
|
|
2656
2656
|
position: e,
|
|
2657
2657
|
children: [
|
|
2658
2658
|
i("sphereGeometry", {
|
|
@@ -2667,7 +2667,7 @@ let __tla = (async () => {
|
|
|
2667
2667
|
})
|
|
2668
2668
|
]
|
|
2669
2669
|
}),
|
|
2670
|
-
|
|
2670
|
+
F("mesh", {
|
|
2671
2671
|
position: r,
|
|
2672
2672
|
children: [
|
|
2673
2673
|
i("sphereGeometry", {
|
|
@@ -2685,13 +2685,13 @@ let __tla = (async () => {
|
|
|
2685
2685
|
]
|
|
2686
2686
|
});
|
|
2687
2687
|
}
|
|
2688
|
-
function
|
|
2688
|
+
function Go({ geometry: e, redY: r, greenY: t, modelSize: o }) {
|
|
2689
2689
|
const s = o * 0.15, c = j(() => {
|
|
2690
2690
|
const a = [];
|
|
2691
2691
|
let n = t - 10;
|
|
2692
2692
|
const h = new C(0, 1, 0);
|
|
2693
2693
|
for (; n > r; ) {
|
|
2694
|
-
const d = Math.min(n, t), u = Math.max(n, t), p =
|
|
2694
|
+
const d = Math.min(n, t), u = Math.max(n, t), p = wn(e, d, u);
|
|
2695
2695
|
if (p) {
|
|
2696
2696
|
const g = p.dot(h), M = Math.acos(Math.min(1, Math.abs(g))) * 180 / Math.PI;
|
|
2697
2697
|
a.push({
|
|
@@ -2712,9 +2712,9 @@ let __tla = (async () => {
|
|
|
2712
2712
|
return i("group", {
|
|
2713
2713
|
children: c.map((a, n) => {
|
|
2714
2714
|
const h = (a.regionMin + a.regionMax) / 2, d = new C(0, h, 0), u = d.clone().addScaledVector(a.axis, s), p = d.clone().addScaledVector(a.axis, -s), g = n / Math.max(1, c.length - 1), M = a.angleDeg < 0.5 ? `hsl(${120 - g * 120}, 80%, 60%)` : `hsl(${40 - a.angleDeg * 2}, 90%, 55%)`;
|
|
2715
|
-
return
|
|
2715
|
+
return F("group", {
|
|
2716
2716
|
children: [
|
|
2717
|
-
i(
|
|
2717
|
+
i(fe, {
|
|
2718
2718
|
points: [
|
|
2719
2719
|
p,
|
|
2720
2720
|
u
|
|
@@ -2724,7 +2724,7 @@ let __tla = (async () => {
|
|
|
2724
2724
|
transparent: true,
|
|
2725
2725
|
opacity: 0.7
|
|
2726
2726
|
}),
|
|
2727
|
-
i(
|
|
2727
|
+
i(fe, {
|
|
2728
2728
|
points: [
|
|
2729
2729
|
new C(-s * 0.3, a.regionMin, 0),
|
|
2730
2730
|
new C(s * 0.3, a.regionMin, 0)
|
|
@@ -2739,9 +2739,9 @@ let __tla = (async () => {
|
|
|
2739
2739
|
})
|
|
2740
2740
|
});
|
|
2741
2741
|
}
|
|
2742
|
-
function
|
|
2742
|
+
function Zo({ geometry: e, redY: r, greenY: t, modelSize: o }) {
|
|
2743
2743
|
const l = j(() => {
|
|
2744
|
-
const u =
|
|
2744
|
+
const u = wn(e, r, t);
|
|
2745
2745
|
if (!u) return null;
|
|
2746
2746
|
const p = u.dot(new C(0, 1, 0)), g = Math.acos(Math.min(1, Math.abs(p))) * 180 / Math.PI;
|
|
2747
2747
|
return {
|
|
@@ -2756,7 +2756,7 @@ let __tla = (async () => {
|
|
|
2756
2756
|
if (!l) return null;
|
|
2757
2757
|
const s = (r + t) / 2, c = new C(0, s, 0), a = o * 0.4, n = c.clone().addScaledVector(l.axis, a), h = c.clone().addScaledVector(l.axis, -a), d = l.angleDeg < 0.5 ? "#00ffff" : l.angleDeg < 2 ? "#ffcc00" : "#ff6600";
|
|
2758
2758
|
return i("group", {
|
|
2759
|
-
children: i(
|
|
2759
|
+
children: i(fe, {
|
|
2760
2760
|
points: [
|
|
2761
2761
|
h,
|
|
2762
2762
|
n
|
|
@@ -2769,9 +2769,9 @@ let __tla = (async () => {
|
|
|
2769
2769
|
})
|
|
2770
2770
|
});
|
|
2771
2771
|
}
|
|
2772
|
-
function
|
|
2772
|
+
function Ko({ pca: e, modelSize: r }) {
|
|
2773
2773
|
const t = e.axes[0], o = r * 0.6, l = e.center.clone().addScaledVector(t, o), s = e.center.clone().addScaledVector(t, -o);
|
|
2774
|
-
return i(
|
|
2774
|
+
return i(fe, {
|
|
2775
2775
|
points: [
|
|
2776
2776
|
s,
|
|
2777
2777
|
l
|
|
@@ -2783,20 +2783,20 @@ let __tla = (async () => {
|
|
|
2783
2783
|
gapSize: 2
|
|
2784
2784
|
});
|
|
2785
2785
|
}
|
|
2786
|
-
function
|
|
2786
|
+
function Uo({ geometry: e, redY: r, greenY: t, modelSize: o, measurementGeometry: l }) {
|
|
2787
2787
|
const s = j(() => {
|
|
2788
|
-
const d = l ?? e, u =
|
|
2788
|
+
const d = l ?? e, u = yn(d), p = new C(0, 1, 0), g = 5, f = t + 3 * 25.4, m = [];
|
|
2789
2789
|
for (let y = r + g; y < f; y += g) {
|
|
2790
|
-
const D =
|
|
2790
|
+
const D = ho(u, d, new C(0, y, 0), p);
|
|
2791
2791
|
D > 0 && m.push({
|
|
2792
2792
|
y,
|
|
2793
2793
|
circ: D
|
|
2794
2794
|
});
|
|
2795
2795
|
}
|
|
2796
2796
|
if (m.length < 5) return null;
|
|
2797
|
-
const x = t - r, S = r + x * 0.3, I = r + x * 0.7,
|
|
2798
|
-
if (
|
|
2799
|
-
const
|
|
2797
|
+
const x = t - r, S = r + x * 0.3, I = r + x * 0.7, P = m.filter((y) => y.y >= S && y.y <= I);
|
|
2798
|
+
if (P.length < 3) return null;
|
|
2799
|
+
const L = P.map((y) => y.circ).sort((y, D) => y - D), b = L[Math.floor(L.length / 2)], z = Math.max(...m.map((y) => y.circ));
|
|
2800
2800
|
return {
|
|
2801
2801
|
circumferences: m,
|
|
2802
2802
|
baseline: b,
|
|
@@ -2809,11 +2809,11 @@ let __tla = (async () => {
|
|
|
2809
2809
|
]);
|
|
2810
2810
|
if (!s) return null;
|
|
2811
2811
|
const { circumferences: c, baseline: a, maxCirc: n } = s, h = o * 0.3 / n;
|
|
2812
|
-
return
|
|
2812
|
+
return F("group", {
|
|
2813
2813
|
children: [
|
|
2814
2814
|
c.map(({ y: d, circ: u }, p) => {
|
|
2815
2815
|
const g = u / a, M = g > 1.6 ? "#ff4444" : g > 1.3 ? "#ffcc00" : "#22cc66", f = u * h;
|
|
2816
|
-
return i(
|
|
2816
|
+
return i(fe, {
|
|
2817
2817
|
points: [
|
|
2818
2818
|
new C(-f, d, 0),
|
|
2819
2819
|
new C(f, d, 0)
|
|
@@ -2826,9 +2826,9 @@ let __tla = (async () => {
|
|
|
2826
2826
|
}),
|
|
2827
2827
|
(() => {
|
|
2828
2828
|
const d = a * 1.6 * h, u = c[0].y, p = c[c.length - 1].y;
|
|
2829
|
-
return
|
|
2829
|
+
return F(Oe, {
|
|
2830
2830
|
children: [
|
|
2831
|
-
i(
|
|
2831
|
+
i(fe, {
|
|
2832
2832
|
points: [
|
|
2833
2833
|
new C(-d, u, 0),
|
|
2834
2834
|
new C(-d, p, 0)
|
|
@@ -2841,7 +2841,7 @@ let __tla = (async () => {
|
|
|
2841
2841
|
transparent: true,
|
|
2842
2842
|
opacity: 0.4
|
|
2843
2843
|
}),
|
|
2844
|
-
i(
|
|
2844
|
+
i(fe, {
|
|
2845
2845
|
points: [
|
|
2846
2846
|
new C(d, u, 0),
|
|
2847
2847
|
new C(d, p, 0)
|
|
@@ -2860,13 +2860,13 @@ let __tla = (async () => {
|
|
|
2860
2860
|
]
|
|
2861
2861
|
});
|
|
2862
2862
|
}
|
|
2863
|
-
function
|
|
2863
|
+
function Jo({ componentDebug: e }) {
|
|
2864
2864
|
return i("group", {
|
|
2865
2865
|
children: e.geometries.map((r, t) => {
|
|
2866
2866
|
const o = e.colors[t] ?? "#888888", l = t === e.innerIdx;
|
|
2867
2867
|
r.computeBoundingBox();
|
|
2868
2868
|
const s = new C();
|
|
2869
|
-
return r.boundingBox.getCenter(s),
|
|
2869
|
+
return r.boundingBox.getCenter(s), F("group", {
|
|
2870
2870
|
children: [
|
|
2871
2871
|
i("mesh", {
|
|
2872
2872
|
geometry: r,
|
|
@@ -2894,7 +2894,7 @@ let __tla = (async () => {
|
|
|
2894
2894
|
}),
|
|
2895
2895
|
i("group", {
|
|
2896
2896
|
position: s,
|
|
2897
|
-
children: i(
|
|
2897
|
+
children: i(Xe, {
|
|
2898
2898
|
center: true,
|
|
2899
2899
|
style: {
|
|
2900
2900
|
pointerEvents: "none"
|
|
@@ -2924,7 +2924,7 @@ let __tla = (async () => {
|
|
|
2924
2924
|
})
|
|
2925
2925
|
});
|
|
2926
2926
|
}
|
|
2927
|
-
function
|
|
2927
|
+
function Qo({ geometry: e, aoData: r }) {
|
|
2928
2928
|
const t = j(() => {
|
|
2929
2929
|
const o = e.toNonIndexed(), l = o.getAttribute("position"), s = r.length, c = l.count, a = new Float32Array(c * 3);
|
|
2930
2930
|
for (let n = 0; n < s && n * 3 + 2 < c; n++) {
|
|
@@ -2953,8 +2953,8 @@ let __tla = (async () => {
|
|
|
2953
2953
|
})
|
|
2954
2954
|
});
|
|
2955
2955
|
}
|
|
2956
|
-
function
|
|
2957
|
-
const a = e.geometry, n = j(() => a.getAttribute("position") ?
|
|
2956
|
+
function qo({ mesh: e, layers: r, landmarkPoints: t, componentDebug: o, aoData: l, aoGeometry: s, measurementGeometry: c }) {
|
|
2957
|
+
const a = e.geometry, n = j(() => a.getAttribute("position") ? Sn(a) : null, [
|
|
2958
2958
|
a
|
|
2959
2959
|
]), h = j(() => !t || t.length < 2 ? null : {
|
|
2960
2960
|
red: new C(t[1].position.x, t[1].position.y, t[1].position.z),
|
|
@@ -2962,26 +2962,26 @@ let __tla = (async () => {
|
|
|
2962
2962
|
}, [
|
|
2963
2963
|
t
|
|
2964
2964
|
]);
|
|
2965
|
-
return
|
|
2965
|
+
return F("group", {
|
|
2966
2966
|
children: [
|
|
2967
|
-
r.pcaAxes && n && i(
|
|
2967
|
+
r.pcaAxes && n && i(No, {
|
|
2968
2968
|
pca: n
|
|
2969
2969
|
}),
|
|
2970
|
-
r.obb && n && i(
|
|
2970
|
+
r.obb && n && i(Yo, {
|
|
2971
2971
|
pca: n
|
|
2972
2972
|
}),
|
|
2973
|
-
r.obbAxis && n && i(
|
|
2973
|
+
r.obbAxis && n && i(Ko, {
|
|
2974
2974
|
pca: n,
|
|
2975
2975
|
modelSize: n.halfExtents[0] ? Math.max(...n.halfExtents) * 2 : 100
|
|
2976
2976
|
}),
|
|
2977
|
-
r.shellComponents && o && i(
|
|
2977
|
+
r.shellComponents && o && i(Jo, {
|
|
2978
2978
|
componentDebug: o
|
|
2979
2979
|
}),
|
|
2980
|
-
r.ambientOcclusion && l && l.length > 0 && i(
|
|
2980
|
+
r.ambientOcclusion && l && l.length > 0 && i(Qo, {
|
|
2981
2981
|
geometry: s ?? a,
|
|
2982
2982
|
aoData: l
|
|
2983
2983
|
}),
|
|
2984
|
-
r.circumferenceScan && h && i(
|
|
2984
|
+
r.circumferenceScan && h && i(Uo, {
|
|
2985
2985
|
geometry: a,
|
|
2986
2986
|
redY: h.red.y,
|
|
2987
2987
|
greenY: h.green.y,
|
|
@@ -2999,17 +2999,17 @@ let __tla = (async () => {
|
|
|
2999
2999
|
depthWrite: false
|
|
3000
3000
|
})
|
|
3001
3001
|
}),
|
|
3002
|
-
r.landmarkAxis && h && i(
|
|
3002
|
+
r.landmarkAxis && h && i(Xo, {
|
|
3003
3003
|
redPoint: h.red,
|
|
3004
3004
|
greenPoint: h.green
|
|
3005
3005
|
}),
|
|
3006
|
-
r.iterativePCA && h && i(
|
|
3006
|
+
r.iterativePCA && h && i(Go, {
|
|
3007
3007
|
geometry: a,
|
|
3008
3008
|
redY: h.red.y,
|
|
3009
3009
|
greenY: h.green.y,
|
|
3010
3010
|
modelSize: (n == null ? void 0 : n.halfExtents[0]) ? Math.max(...n.halfExtents) * 2 : 100
|
|
3011
3011
|
}),
|
|
3012
|
-
r.fullRegionPCA && h && i(
|
|
3012
|
+
r.fullRegionPCA && h && i(Zo, {
|
|
3013
3013
|
geometry: a,
|
|
3014
3014
|
redY: h.red.y,
|
|
3015
3015
|
greenY: h.green.y,
|
|
@@ -3018,10 +3018,10 @@ let __tla = (async () => {
|
|
|
3018
3018
|
]
|
|
3019
3019
|
});
|
|
3020
3020
|
}
|
|
3021
|
-
function
|
|
3021
|
+
function er({ mesh: e }) {
|
|
3022
3022
|
const r = e.geometry, t = j(() => {
|
|
3023
3023
|
if (!r.getAttribute("position")) return null;
|
|
3024
|
-
const s =
|
|
3024
|
+
const s = Sn(r), c = s.axes[0], a = s.halfExtents[0] * 1.3;
|
|
3025
3025
|
return {
|
|
3026
3026
|
axis: c,
|
|
3027
3027
|
center: s.center,
|
|
@@ -3032,7 +3032,7 @@ let __tla = (async () => {
|
|
|
3032
3032
|
]);
|
|
3033
3033
|
if (!t) return null;
|
|
3034
3034
|
const o = t.center.clone().addScaledVector(t.axis, t.halfLen), l = t.center.clone().addScaledVector(t.axis, -t.halfLen);
|
|
3035
|
-
return i(
|
|
3035
|
+
return i(fe, {
|
|
3036
3036
|
points: [
|
|
3037
3037
|
l,
|
|
3038
3038
|
o
|
|
@@ -3048,7 +3048,7 @@ let __tla = (async () => {
|
|
|
3048
3048
|
renderOrder: 999
|
|
3049
3049
|
});
|
|
3050
3050
|
}
|
|
3051
|
-
const
|
|
3051
|
+
const vn = [
|
|
3052
3052
|
{
|
|
3053
3053
|
key: "pcaAxes",
|
|
3054
3054
|
label: "PCA Axes (full mesh)",
|
|
@@ -3104,11 +3104,11 @@ let __tla = (async () => {
|
|
|
3104
3104
|
color: "#00ffff",
|
|
3105
3105
|
group: "Alignment"
|
|
3106
3106
|
}
|
|
3107
|
-
],
|
|
3108
|
-
...new Set(
|
|
3107
|
+
], tr = [
|
|
3108
|
+
...new Set(vn.map((e) => e.group))
|
|
3109
3109
|
];
|
|
3110
|
-
function
|
|
3111
|
-
return
|
|
3110
|
+
function nr({ layers: e, onToggleLayer: r, isDoubleShell: t }) {
|
|
3111
|
+
return F("div", {
|
|
3112
3112
|
style: {
|
|
3113
3113
|
position: "absolute",
|
|
3114
3114
|
top: 16,
|
|
@@ -3136,9 +3136,9 @@ let __tla = (async () => {
|
|
|
3136
3136
|
},
|
|
3137
3137
|
children: "Debug Layers"
|
|
3138
3138
|
}),
|
|
3139
|
-
|
|
3140
|
-
const l =
|
|
3141
|
-
return l.length === 0 ? null :
|
|
3139
|
+
tr.map((o) => {
|
|
3140
|
+
const l = vn.filter((s) => s.group === o && !(s.hideWhenDoubleShell && t));
|
|
3141
|
+
return l.length === 0 ? null : F("div", {
|
|
3142
3142
|
children: [
|
|
3143
3143
|
i("div", {
|
|
3144
3144
|
style: {
|
|
@@ -3152,7 +3152,7 @@ let __tla = (async () => {
|
|
|
3152
3152
|
},
|
|
3153
3153
|
children: o
|
|
3154
3154
|
}),
|
|
3155
|
-
l.map(({ key: s, label: c, color: a }) =>
|
|
3155
|
+
l.map(({ key: s, label: c, color: a }) => F("label", {
|
|
3156
3156
|
style: {
|
|
3157
3157
|
display: "flex",
|
|
3158
3158
|
alignItems: "center",
|
|
@@ -3197,48 +3197,48 @@ let __tla = (async () => {
|
|
|
3197
3197
|
]
|
|
3198
3198
|
});
|
|
3199
3199
|
}
|
|
3200
|
-
const
|
|
3201
|
-
const [n, h] = E(null), [d, u] = E(0), [p, g] = E(false), [M, f] = E(false), [m, x] = E(""), [S, I] = E("3D"), [
|
|
3202
|
-
if (
|
|
3203
|
-
const v = (await import("./html2canvas.esm-Dmi1NfiH.js")).default, _ =
|
|
3200
|
+
const or = ({ config: e, spacingType: r, scanUrl: t, formMeasurements: o, onComplete: l, isDebugUser: s = false, onAnalyticsEvent: c, wasmModule: a }) => {
|
|
3201
|
+
const [n, h] = E(null), [d, u] = E(0), [p, g] = E(false), [M, f] = E(false), [m, x] = E(""), [S, I] = E("3D"), [P, L] = E(r === "AK" ? 2 : 1), [b, z] = E(false), [y, D] = E(null), [w, A] = E(r ?? null), [k, B] = E("mm"), [$, N] = E(false), [U, be] = E(""), [ae, ue] = E(false), [ie, J] = E(false), [Y, he] = E(false), [Z, ge] = E(false), [me, pe] = E(null), [H, q] = E(null), [xe, Ce] = E(null), [we, oe] = E(false), [V, X] = E([]), [Pe, Le] = E(null), [Ge, se] = E(null), [ze, Bt] = E(null), [gt, Mn] = E(null), [zn, Rt] = E(false), [Wt, An] = E(null), [mt, _e] = E(null), [Re, kn] = E(false), [Et, Fn] = E(Vo), [$e, Tt] = E("obj"), [Ae, xt] = E(o), [nt, Ot] = E(true), [$t, yt] = E(false), [Ht, Pn] = E(false), [Ie, ot] = E(false), [bt, Ln] = E(null), [Vt] = E("#c8c8c8"), [In] = E(1), [Ze, _n] = E(false), [wt, jt] = E([]), rt = le(null), He = le(null), St = le(false), Dn = le(null), vt = le(null), Ct = le(null), Ue = re(async () => {
|
|
3202
|
+
if (Ct.current) try {
|
|
3203
|
+
const v = (await import("./html2canvas.esm-Dmi1NfiH.js")).default, _ = Ct.current, W = 2, R = async (K = false) => {
|
|
3204
3204
|
const te = await v(_, {
|
|
3205
3205
|
backgroundColor: null,
|
|
3206
3206
|
useCORS: true,
|
|
3207
3207
|
scale: W,
|
|
3208
|
-
ignoreElements: (
|
|
3209
|
-
var _a;
|
|
3210
|
-
return ((_a =
|
|
3208
|
+
ignoreElements: (et) => {
|
|
3209
|
+
var _a, _b;
|
|
3210
|
+
return ((_a = et.style) == null ? void 0 : _a.zIndex) === "10" || ((_b = et.hasAttribute) == null ? void 0 : _b.call(et, "data-finalizing-overlay"));
|
|
3211
3211
|
}
|
|
3212
|
-
}), Q = _.getBoundingClientRect(), ke = Q.width,
|
|
3213
|
-
let ve, Me, ye,
|
|
3212
|
+
}), Q = _.getBoundingClientRect(), ke = Q.width, We = Q.height;
|
|
3213
|
+
let ve, Me, ye, Te;
|
|
3214
3214
|
if (K) {
|
|
3215
|
-
const
|
|
3216
|
-
let
|
|
3217
|
-
for (let
|
|
3218
|
-
const
|
|
3219
|
-
|
|
3215
|
+
const De = te.getContext("2d").getImageData(0, 0, te.width, te.height).data;
|
|
3216
|
+
let Be = te.width, Ee = te.height, tt = 0, lt = 0;
|
|
3217
|
+
for (let Ve = 0; Ve < te.height; Ve++) for (let je = 0; je < te.width; je++) {
|
|
3218
|
+
const Gn = (Ve * te.width + je) * 4;
|
|
3219
|
+
De[Gn + 3] > 20 && (je < Be && (Be = je), je > tt && (tt = je), Ve < Ee && (Ee = Ve), Ve > lt && (lt = Ve));
|
|
3220
3220
|
}
|
|
3221
|
-
|
|
3221
|
+
tt <= Be && (Be = 0, Ee = 0, tt = te.width, lt = te.height), ve = Be / W, Me = Ee / W, ye = tt / W, Te = lt / W;
|
|
3222
3222
|
} else {
|
|
3223
|
-
const
|
|
3224
|
-
ve = 1 / 0, Me = 1 / 0, ye = -1 / 0,
|
|
3225
|
-
const
|
|
3226
|
-
if (
|
|
3227
|
-
const
|
|
3228
|
-
|
|
3229
|
-
}), ve === 1 / 0 && (ve = 0, Me = 0, ye = ke,
|
|
3223
|
+
const et = _.querySelectorAll("[style*='pointer-events: none']");
|
|
3224
|
+
ve = 1 / 0, Me = 1 / 0, ye = -1 / 0, Te = -1 / 0, et.forEach((Pt) => {
|
|
3225
|
+
const De = Pt.getBoundingClientRect();
|
|
3226
|
+
if (De.width === 0 || De.height === 0) return;
|
|
3227
|
+
const Be = De.left - Q.left, Ee = De.top - Q.top;
|
|
3228
|
+
Be < ve && (ve = Be), Ee < Me && (Me = Ee), Be + De.width > ye && (ye = Be + De.width), Ee + De.height > Te && (Te = Ee + De.height);
|
|
3229
|
+
}), ve === 1 / 0 && (ve = 0, Me = 0, ye = ke, Te = We);
|
|
3230
3230
|
}
|
|
3231
|
-
const
|
|
3232
|
-
ve = Math.max(0, ve -
|
|
3233
|
-
const
|
|
3234
|
-
return
|
|
3231
|
+
const Qt = Math.max(ke, We) * 0.03, qt = Math.max(ke, We) * 0.06;
|
|
3232
|
+
ve = Math.max(0, ve - Qt), Me = Math.max(0, Me - qt), ye = Math.min(ke, ye + Qt), Te = Math.min(We, Te + qt);
|
|
3233
|
+
const kt = (ye - ve) * W, Ft = (Te - Me) * W, Yn = Math.max(0, ve * W), Xn = Math.max(0, Me * W), st = document.createElement("canvas");
|
|
3234
|
+
return st.width = Math.round(kt), st.height = Math.round(Ft), st.getContext("2d").drawImage(te, Math.round(Yn), Math.round(Xn), Math.round(kt), Math.round(Ft), 0, 0, Math.round(kt), Math.round(Ft)), st.toDataURL("image/png");
|
|
3235
3235
|
};
|
|
3236
|
-
|
|
3237
|
-
const
|
|
3238
|
-
I("2D"), await new Promise((K) => setTimeout(K,
|
|
3236
|
+
vt.current && vt.current(), await new Promise((K) => setTimeout(K, 100)), await new Promise((K) => requestAnimationFrame(() => requestAnimationFrame(K)));
|
|
3237
|
+
const ce = await R();
|
|
3238
|
+
I("2D"), await new Promise((K) => setTimeout(K, 200)), await new Promise((K) => requestAnimationFrame(() => requestAnimationFrame(K)));
|
|
3239
3239
|
const G = await R(true);
|
|
3240
3240
|
return I("3D"), {
|
|
3241
|
-
frontal_view_png:
|
|
3241
|
+
frontal_view_png: ce,
|
|
3242
3242
|
side_view_png: G
|
|
3243
3243
|
};
|
|
3244
3244
|
} catch {
|
|
@@ -3246,17 +3246,17 @@ let __tla = (async () => {
|
|
|
3246
3246
|
}
|
|
3247
3247
|
}, []), Se = re((v) => {
|
|
3248
3248
|
const _ = /* @__PURE__ */ new Date(), W = `${String(_.getHours()).padStart(2, "0")}:${String(_.getMinutes()).padStart(2, "0")}:${String(_.getSeconds()).padStart(2, "0")}.${String(_.getMilliseconds()).padStart(3, "0")}`;
|
|
3249
|
-
|
|
3249
|
+
jt((R) => [
|
|
3250
3250
|
...R.slice(-200),
|
|
3251
3251
|
`[${W}] ${v}`
|
|
3252
3252
|
]);
|
|
3253
|
-
}, []), { landmarkPoints: T, clearLandmarkPoints:
|
|
3253
|
+
}, []), { landmarkPoints: T, clearLandmarkPoints: Bn, addLandmarkPoint: Nt, removeLandmarkPoint: Yt, updateLandmarkPositions: Xt, setAligned: Gt, isAligned: ee, setCut: Zt, isCut: Mt, reset: Kt } = Dt();
|
|
3254
3254
|
ne(() => {
|
|
3255
|
-
|
|
3255
|
+
Kt();
|
|
3256
3256
|
}, [
|
|
3257
|
-
|
|
3257
|
+
Kt
|
|
3258
3258
|
]);
|
|
3259
|
-
const
|
|
3259
|
+
const it = P * dt;
|
|
3260
3260
|
ne(() => {
|
|
3261
3261
|
if (!s || T.length === 0) return;
|
|
3262
3262
|
const v = T[T.length - 1];
|
|
@@ -3272,37 +3272,37 @@ let __tla = (async () => {
|
|
|
3272
3272
|
s,
|
|
3273
3273
|
Se
|
|
3274
3274
|
]), ne(() => {
|
|
3275
|
-
s &&
|
|
3275
|
+
s && Mt && Se("STATE: mesh cut");
|
|
3276
3276
|
}, [
|
|
3277
|
-
|
|
3277
|
+
Mt,
|
|
3278
3278
|
s,
|
|
3279
3279
|
Se
|
|
3280
3280
|
]), ne(() => {
|
|
3281
|
-
|
|
3281
|
+
rt.current && (rt.current.scrollTop = rt.current.scrollHeight);
|
|
3282
3282
|
}, [
|
|
3283
|
-
|
|
3283
|
+
wt
|
|
3284
3284
|
]);
|
|
3285
|
-
const
|
|
3285
|
+
const Ut = j(() => xe ? new O.Mesh(xe) : null, [
|
|
3286
3286
|
xe
|
|
3287
3287
|
]);
|
|
3288
3288
|
ne(() => {
|
|
3289
|
-
o &&
|
|
3289
|
+
o && xt(o);
|
|
3290
3290
|
}, [
|
|
3291
3291
|
o
|
|
3292
3292
|
]), ne(() => {
|
|
3293
|
-
o ||
|
|
3293
|
+
o || xt(void 0);
|
|
3294
3294
|
}, [
|
|
3295
|
-
|
|
3295
|
+
P
|
|
3296
3296
|
]);
|
|
3297
|
-
const
|
|
3297
|
+
const zt = le(false);
|
|
3298
3298
|
ne(() => {
|
|
3299
|
-
if (!ee || V.length === 0 ||
|
|
3300
|
-
|
|
3299
|
+
if (!ee || V.length === 0 || zt.current || !c) return;
|
|
3300
|
+
zt.current = true;
|
|
3301
3301
|
const v = T.length >= 3 ? Math.abs(T[2].position.y - T[0].position.y) : null;
|
|
3302
3302
|
c("dimensions_calculated", {
|
|
3303
3303
|
spacing_type: w,
|
|
3304
3304
|
source_unit: "mm",
|
|
3305
|
-
file_format:
|
|
3305
|
+
file_format: $e,
|
|
3306
3306
|
measurement_source: "scan_derived",
|
|
3307
3307
|
is_double_wall: Y,
|
|
3308
3308
|
is_unit_converted: false,
|
|
@@ -3318,29 +3318,29 @@ let __tla = (async () => {
|
|
|
3318
3318
|
ee,
|
|
3319
3319
|
V
|
|
3320
3320
|
]), ne(() => {
|
|
3321
|
-
a !== void 0 && (
|
|
3321
|
+
a !== void 0 && (He.current = a), _n(true);
|
|
3322
3322
|
}, [
|
|
3323
3323
|
a
|
|
3324
3324
|
]);
|
|
3325
|
-
const
|
|
3325
|
+
const Je = re((v, _) => {
|
|
3326
3326
|
v.computeBoundingBox();
|
|
3327
3327
|
const W = v.boundingBox, R = new C();
|
|
3328
3328
|
W.getCenter(R), v.translate(-R.x, -R.y, -R.z), v.computeBoundingBox();
|
|
3329
|
-
const
|
|
3330
|
-
|
|
3329
|
+
const ce = v.boundingBox, G = new C();
|
|
3330
|
+
ce.getSize(G), u(Math.max(G.x, G.y, G.z));
|
|
3331
3331
|
const K = new O.Mesh(v, new O.MeshStandardMaterial({
|
|
3332
3332
|
color: 8947848,
|
|
3333
3333
|
side: O.DoubleSide
|
|
3334
3334
|
}));
|
|
3335
|
-
h(K),
|
|
3336
|
-
}, []),
|
|
3337
|
-
|
|
3335
|
+
h(K), ue(_), J(true), ge(false), St.current = false;
|
|
3336
|
+
}, []), Qe = re(async (v, _) => {
|
|
3337
|
+
_e(null);
|
|
3338
3338
|
const W = _.toLowerCase(), R = W.endsWith(".stl");
|
|
3339
3339
|
if (!W.endsWith(".obj") && !R) {
|
|
3340
|
-
|
|
3340
|
+
_e("Unsupported file format. Please use OBJ or STL.");
|
|
3341
3341
|
return;
|
|
3342
3342
|
}
|
|
3343
|
-
|
|
3343
|
+
Tt(R ? "stl" : "obj"), f(true), x("Processing file..."), Se(`FILE_LOAD: ${_} (${R ? "STL" : "OBJ"})`);
|
|
3344
3344
|
try {
|
|
3345
3345
|
let G;
|
|
3346
3346
|
if (R) if (x("Converting STL..."), v instanceof ArrayBuffer) {
|
|
@@ -3349,41 +3349,41 @@ let __tla = (async () => {
|
|
|
3349
3349
|
]), ke = new File([
|
|
3350
3350
|
Q
|
|
3351
3351
|
], _);
|
|
3352
|
-
G = await
|
|
3352
|
+
G = await Lt(ke);
|
|
3353
3353
|
} else {
|
|
3354
3354
|
const Q = new Blob([
|
|
3355
3355
|
v
|
|
3356
3356
|
]), ke = new File([
|
|
3357
3357
|
Q
|
|
3358
3358
|
], _);
|
|
3359
|
-
G = await
|
|
3359
|
+
G = await Lt(ke);
|
|
3360
3360
|
}
|
|
3361
3361
|
else G = typeof v == "string" ? v : new TextDecoder().decode(v);
|
|
3362
|
-
const K = performance.now(), te =
|
|
3362
|
+
const K = performance.now(), te = He.current ? await co(G, He.current, (Q) => {
|
|
3363
3363
|
x(Q), Se(`PREPROCESS: ${Q}`);
|
|
3364
3364
|
}) : null;
|
|
3365
|
-
if (te) Se(`PREPROCESS: done in ${(performance.now() - K).toFixed(0)}ms \u2014 unit=${te.detectedUnit}, scaled=${te.wasScaled}`), e.showAmputationModal && !r ? (D(te), z(true)) :
|
|
3365
|
+
if (te) Se(`PREPROCESS: done in ${(performance.now() - K).toFixed(0)}ms \u2014 unit=${te.detectedUnit}, scaled=${te.wasScaled}`), e.showAmputationModal && !r ? (D(te), z(true)) : Je(te.geometry, te.wasScaled);
|
|
3366
3366
|
else {
|
|
3367
3367
|
x("Using fallback loader...");
|
|
3368
|
-
const Q =
|
|
3368
|
+
const Q = fo(G);
|
|
3369
3369
|
Q ? e.showAmputationModal && !r ? (D({
|
|
3370
3370
|
geometry: Q,
|
|
3371
3371
|
wasScaled: false
|
|
3372
|
-
}), z(true)) :
|
|
3372
|
+
}), z(true)) : Je(Q, false) : _e("Failed to parse the mesh.");
|
|
3373
3373
|
}
|
|
3374
3374
|
} catch (G) {
|
|
3375
|
-
|
|
3375
|
+
_e(G instanceof Error ? G.message : "Failed to process the mesh file.");
|
|
3376
3376
|
} finally {
|
|
3377
3377
|
f(false), x("");
|
|
3378
3378
|
}
|
|
3379
3379
|
}, [
|
|
3380
|
-
|
|
3380
|
+
Ze,
|
|
3381
3381
|
e.showAmputationModal,
|
|
3382
3382
|
r,
|
|
3383
|
-
|
|
3383
|
+
Je
|
|
3384
3384
|
]);
|
|
3385
3385
|
ne(() => {
|
|
3386
|
-
if (!t || !
|
|
3386
|
+
if (!t || !Ze) return;
|
|
3387
3387
|
(async () => {
|
|
3388
3388
|
f(true), x("Loading scan...");
|
|
3389
3389
|
try {
|
|
@@ -3392,77 +3392,77 @@ let __tla = (async () => {
|
|
|
3392
3392
|
const R = new URL(t).pathname.split("/").pop() || "scan.obj";
|
|
3393
3393
|
if (R.toLowerCase().endsWith(".stl")) {
|
|
3394
3394
|
const G = await _.arrayBuffer();
|
|
3395
|
-
await
|
|
3395
|
+
await Qe(G, R);
|
|
3396
3396
|
} else {
|
|
3397
3397
|
const G = await _.text();
|
|
3398
|
-
await
|
|
3398
|
+
await Qe(G, R);
|
|
3399
3399
|
}
|
|
3400
3400
|
} catch (_) {
|
|
3401
|
-
|
|
3401
|
+
_e(_ instanceof Error ? _.message : "Failed to load scan from URL."), f(false), x("");
|
|
3402
3402
|
}
|
|
3403
3403
|
})();
|
|
3404
3404
|
}, [
|
|
3405
3405
|
t,
|
|
3406
|
-
|
|
3406
|
+
Ze
|
|
3407
3407
|
]);
|
|
3408
|
-
const
|
|
3408
|
+
const Rn = re((v) => {
|
|
3409
3409
|
v.preventDefault(), g(true);
|
|
3410
|
-
}, []),
|
|
3410
|
+
}, []), Wn = re((v) => {
|
|
3411
3411
|
v.preventDefault(), g(false);
|
|
3412
|
-
}, []),
|
|
3413
|
-
if (v.preventDefault(), g(false), !
|
|
3414
|
-
|
|
3412
|
+
}, []), En = re(async (v) => {
|
|
3413
|
+
if (v.preventDefault(), g(false), !Ze) {
|
|
3414
|
+
_e("WASM module is still loading. Please wait.");
|
|
3415
3415
|
return;
|
|
3416
3416
|
}
|
|
3417
3417
|
const _ = v.dataTransfer.files[0];
|
|
3418
3418
|
if (!_) return;
|
|
3419
3419
|
const W = _.name.toLowerCase();
|
|
3420
3420
|
if (!W.endsWith(".obj") && !W.endsWith(".stl")) {
|
|
3421
|
-
|
|
3421
|
+
_e("Please drop an OBJ or STL file.");
|
|
3422
3422
|
return;
|
|
3423
3423
|
}
|
|
3424
3424
|
if (W.endsWith(".stl")) {
|
|
3425
|
-
|
|
3425
|
+
Tt("stl"), f(true), x("Converting STL...");
|
|
3426
3426
|
try {
|
|
3427
|
-
const R = await
|
|
3428
|
-
await
|
|
3427
|
+
const R = await Lt(_);
|
|
3428
|
+
await Qe(R, _.name.replace(/\.stl$/i, ".obj"));
|
|
3429
3429
|
} catch (R) {
|
|
3430
|
-
|
|
3430
|
+
_e(R instanceof Error ? R.message : "Failed to process STL file."), f(false), x("");
|
|
3431
3431
|
}
|
|
3432
3432
|
} else {
|
|
3433
3433
|
const R = await _.text();
|
|
3434
|
-
await
|
|
3434
|
+
await Qe(R, _.name);
|
|
3435
3435
|
}
|
|
3436
3436
|
}, [
|
|
3437
|
-
|
|
3438
|
-
|
|
3439
|
-
]),
|
|
3440
|
-
A(v),
|
|
3437
|
+
Ze,
|
|
3438
|
+
Qe
|
|
3439
|
+
]), Tn = re((v) => {
|
|
3440
|
+
A(v), L(v === "AK" ? 2 : 1), z(false), y && (Je(y.geometry, y.wasScaled), D(null)), c == null ? void 0 : c("file_loaded", {
|
|
3441
3441
|
spacing_type: v,
|
|
3442
|
-
file_format:
|
|
3442
|
+
file_format: $e,
|
|
3443
3443
|
is_double_wall: false
|
|
3444
3444
|
});
|
|
3445
3445
|
}, [
|
|
3446
3446
|
y,
|
|
3447
|
-
|
|
3447
|
+
Je,
|
|
3448
3448
|
c,
|
|
3449
|
-
|
|
3449
|
+
$e
|
|
3450
3450
|
]);
|
|
3451
3451
|
ne(() => {
|
|
3452
|
-
if (!n || T.length !== 1 ||
|
|
3453
|
-
|
|
3454
|
-
const v = T[0], _ =
|
|
3452
|
+
if (!n || T.length !== 1 || !He.current || St.current) return;
|
|
3453
|
+
St.current = true;
|
|
3454
|
+
const v = T[0], _ = He.current, W = n.geometry, { positions: R, indices: ce } = ft(W), G = new Float32Array([
|
|
3455
3455
|
v.position.x,
|
|
3456
3456
|
v.position.y,
|
|
3457
3457
|
v.position.z
|
|
3458
|
-
]), K = _.detect_shell(R,
|
|
3459
|
-
Se(`SHELL_DETECT: ${Q ? "DOUBLE" : "SINGLE"} \u2014 ${te}`), Q && (
|
|
3458
|
+
]), K = _.detect_shell(R, ce, G, 40), te = K.details(), Q = K.is_double_shell();
|
|
3459
|
+
Se(`SHELL_DETECT: ${Q ? "DOUBLE" : "SINGLE"} \u2014 ${te}`), Q && (he(true), oe(true), Se(`SHELL_DETECT: double shell, thickness=${K.thickness().toFixed(1)}mm`));
|
|
3460
3460
|
}, [
|
|
3461
3461
|
n,
|
|
3462
3462
|
T,
|
|
3463
3463
|
Se
|
|
3464
3464
|
]);
|
|
3465
|
-
const
|
|
3465
|
+
const On = re(() => {
|
|
3466
3466
|
if (!n || T.length < 2) return;
|
|
3467
3467
|
N(true), be("Please wait..."), Se("PIPELINE: starting processing pipeline...");
|
|
3468
3468
|
const v = performance.now();
|
|
@@ -3472,56 +3472,56 @@ let __tla = (async () => {
|
|
|
3472
3472
|
T[0],
|
|
3473
3473
|
...T.slice(2)
|
|
3474
3474
|
];
|
|
3475
|
-
|
|
3475
|
+
mo(n, _, dt, {
|
|
3476
3476
|
onStatus: (W) => {
|
|
3477
3477
|
be(W), Se(`PIPELINE: ${W}`);
|
|
3478
3478
|
},
|
|
3479
|
-
addLandmarkPoint:
|
|
3480
|
-
removeLandmarkPoint:
|
|
3479
|
+
addLandmarkPoint: Nt,
|
|
3480
|
+
removeLandmarkPoint: Yt,
|
|
3481
3481
|
updateLandmarkPositions: (W) => {
|
|
3482
3482
|
const R = [
|
|
3483
3483
|
W[1],
|
|
3484
3484
|
W[0],
|
|
3485
3485
|
...W.slice(2)
|
|
3486
3486
|
];
|
|
3487
|
-
|
|
3487
|
+
Xt(R);
|
|
3488
3488
|
},
|
|
3489
|
-
setAligned:
|
|
3490
|
-
setCut:
|
|
3489
|
+
setAligned: Gt,
|
|
3490
|
+
setCut: Zt,
|
|
3491
3491
|
setModelSize: u,
|
|
3492
|
-
setOriginalEndY:
|
|
3492
|
+
setOriginalEndY: Mn,
|
|
3493
3493
|
setAdjustedStartY: se,
|
|
3494
|
-
setAdjustedEndY:
|
|
3495
|
-
setError:
|
|
3494
|
+
setAdjustedEndY: Bt,
|
|
3495
|
+
setError: _e,
|
|
3496
3496
|
setDoubleShell: (W) => {
|
|
3497
|
-
|
|
3497
|
+
he(W), oe(true);
|
|
3498
3498
|
},
|
|
3499
3499
|
setAoData: (W, R) => {
|
|
3500
|
-
|
|
3500
|
+
pe(W), q(R ?? null);
|
|
3501
3501
|
},
|
|
3502
|
-
setInnerShellExtracted:
|
|
3502
|
+
setInnerShellExtracted: ge,
|
|
3503
3503
|
setMeasurementGeometry: Ce,
|
|
3504
|
-
setWasmSlices:
|
|
3505
|
-
wasmModule:
|
|
3506
|
-
}), Se(`PIPELINE: completed in ${(performance.now() - v).toFixed(0)}ms`),
|
|
3504
|
+
setWasmSlices: Le,
|
|
3505
|
+
wasmModule: He.current ?? void 0
|
|
3506
|
+
}), Se(`PIPELINE: completed in ${(performance.now() - v).toFixed(0)}ms`), zt.current = false, N(false);
|
|
3507
3507
|
}, 50);
|
|
3508
3508
|
}, [
|
|
3509
3509
|
n,
|
|
3510
3510
|
T,
|
|
3511
|
+
Xt,
|
|
3512
|
+
Gt,
|
|
3511
3513
|
Nt,
|
|
3512
3514
|
Yt,
|
|
3513
|
-
|
|
3514
|
-
jt,
|
|
3515
|
-
Xt,
|
|
3515
|
+
Zt,
|
|
3516
3516
|
Z
|
|
3517
|
-
]),
|
|
3517
|
+
]), Jt = le(false);
|
|
3518
3518
|
ne(() => {
|
|
3519
|
-
ee && V.length > 0 && !
|
|
3519
|
+
ee && V.length > 0 && !Jt.current && (Jt.current = true, yt(true));
|
|
3520
3520
|
}, [
|
|
3521
3521
|
ee,
|
|
3522
3522
|
V.length
|
|
3523
3523
|
]);
|
|
3524
|
-
const
|
|
3524
|
+
const qe = j(() => {
|
|
3525
3525
|
var _a;
|
|
3526
3526
|
if (!n || T.length < 3) return 0;
|
|
3527
3527
|
if (Y) return Math.abs(T[0].position.y - T[2].position.y);
|
|
@@ -3533,101 +3533,118 @@ let __tla = (async () => {
|
|
|
3533
3533
|
n,
|
|
3534
3534
|
T,
|
|
3535
3535
|
Y
|
|
3536
|
-
]),
|
|
3537
|
-
|
|
3538
|
-
}, []),
|
|
3539
|
-
if (!l || !n || !w)
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3547
|
-
|
|
3548
|
-
|
|
3549
|
-
|
|
3550
|
-
|
|
3551
|
-
|
|
3552
|
-
|
|
3553
|
-
|
|
3554
|
-
|
|
3555
|
-
|
|
3556
|
-
|
|
3557
|
-
|
|
3558
|
-
|
|
3536
|
+
]), $n = re((v) => {
|
|
3537
|
+
Ln(v), xt(v.circumferences), yt(false), Ot(true), Pn(true);
|
|
3538
|
+
}, []), Hn = re(async (v) => {
|
|
3539
|
+
if (!(!l || !n || !w)) {
|
|
3540
|
+
yt(false), ot(true);
|
|
3541
|
+
try {
|
|
3542
|
+
const _ = await Promise.race([
|
|
3543
|
+
Ue(),
|
|
3544
|
+
new Promise((W) => setTimeout(() => W(void 0), 8e3))
|
|
3545
|
+
]);
|
|
3546
|
+
l({
|
|
3547
|
+
spacingType: w,
|
|
3548
|
+
sourceUnit: "mm",
|
|
3549
|
+
fileFormat: $e,
|
|
3550
|
+
measurementSource: "form_provided",
|
|
3551
|
+
isDoubleWall: Y,
|
|
3552
|
+
isUnitConverted: false,
|
|
3553
|
+
formMeasurements: Ae,
|
|
3554
|
+
scanMeasurements: V,
|
|
3555
|
+
frontalHeight: qe,
|
|
3556
|
+
transverseML: 0,
|
|
3557
|
+
transverseAP: 0,
|
|
3558
|
+
scanUrl: t,
|
|
3559
|
+
decision: "skip",
|
|
3560
|
+
skipReason: v,
|
|
3561
|
+
screenshots: _
|
|
3562
|
+
});
|
|
3563
|
+
} finally {
|
|
3564
|
+
ot(false);
|
|
3565
|
+
}
|
|
3566
|
+
}
|
|
3559
3567
|
}, [
|
|
3560
3568
|
l,
|
|
3561
3569
|
n,
|
|
3562
3570
|
w,
|
|
3563
|
-
|
|
3571
|
+
$e,
|
|
3564
3572
|
Y,
|
|
3565
3573
|
Ae,
|
|
3566
3574
|
V,
|
|
3567
|
-
|
|
3575
|
+
qe,
|
|
3568
3576
|
t,
|
|
3569
|
-
|
|
3570
|
-
]),
|
|
3571
|
-
if (!l || !n || V.length === 0 || !w)
|
|
3572
|
-
|
|
3573
|
-
if (T.length >= 2) {
|
|
3574
|
-
const ge = n.geometry, K = T[0].position.y;
|
|
3577
|
+
Ue
|
|
3578
|
+
]), At = re(async (v) => {
|
|
3579
|
+
if (!(!l || !n || V.length === 0 || !w)) {
|
|
3580
|
+
ot(true);
|
|
3575
3581
|
try {
|
|
3576
|
-
|
|
3577
|
-
if (
|
|
3578
|
-
|
|
3579
|
-
|
|
3580
|
-
|
|
3582
|
+
let _ = 0, W = 0;
|
|
3583
|
+
if (T.length >= 2) {
|
|
3584
|
+
const ce = n.geometry, K = T[0].position.y;
|
|
3585
|
+
try {
|
|
3586
|
+
const te = yn(ce), Q = Ye(te, ce, K);
|
|
3587
|
+
if (Q.linePoints.length >= 2) {
|
|
3588
|
+
let ke = Q.linePoints[0], We = Q.linePoints[0], ve = Q.linePoints[0], Me = Q.linePoints[0];
|
|
3589
|
+
for (const ye of Q.linePoints) ye.x < ke.x && (ke = ye), ye.x > We.x && (We = ye), ye.z < ve.z && (ve = ye), ye.z > Me.z && (Me = ye);
|
|
3590
|
+
_ = new C(ke.x, K, ke.z).distanceTo(new C(We.x, K, We.z)), W = new C(ve.x, K, ve.z).distanceTo(new C(Me.x, K, Me.z));
|
|
3591
|
+
}
|
|
3592
|
+
} catch {
|
|
3593
|
+
}
|
|
3581
3594
|
}
|
|
3582
|
-
|
|
3595
|
+
const R = await Promise.race([
|
|
3596
|
+
Ue(),
|
|
3597
|
+
new Promise((ce) => setTimeout(() => ce(void 0), 8e3))
|
|
3598
|
+
]);
|
|
3599
|
+
l({
|
|
3600
|
+
spacingType: w,
|
|
3601
|
+
sourceUnit: "mm",
|
|
3602
|
+
fileFormat: $e,
|
|
3603
|
+
measurementSource: v === "use_form_measurements" ? "form_provided" : "scan_derived",
|
|
3604
|
+
isDoubleWall: Y,
|
|
3605
|
+
isUnitConverted: false,
|
|
3606
|
+
formMeasurements: Ae,
|
|
3607
|
+
scanMeasurements: V,
|
|
3608
|
+
frontalHeight: (bt == null ? void 0 : bt.frontalHeight) ?? qe,
|
|
3609
|
+
transverseML: _,
|
|
3610
|
+
transverseAP: W,
|
|
3611
|
+
scanUrl: t,
|
|
3612
|
+
decision: v,
|
|
3613
|
+
userEnteredMeasurements: bt ?? void 0,
|
|
3614
|
+
screenshots: R
|
|
3615
|
+
});
|
|
3616
|
+
} finally {
|
|
3617
|
+
ot(false);
|
|
3583
3618
|
}
|
|
3584
3619
|
}
|
|
3585
|
-
const R = await Ke();
|
|
3586
|
-
l({
|
|
3587
|
-
spacingType: w,
|
|
3588
|
-
sourceUnit: "mm",
|
|
3589
|
-
fileFormat: Oe,
|
|
3590
|
-
measurementSource: v === "use_form_measurements" ? "form_provided" : "scan_derived",
|
|
3591
|
-
isDoubleWall: Y,
|
|
3592
|
-
isUnitConverted: false,
|
|
3593
|
-
formMeasurements: Ae,
|
|
3594
|
-
scanMeasurements: V,
|
|
3595
|
-
frontalHeight: (xt == null ? void 0 : xt.frontalHeight) ?? Qe,
|
|
3596
|
-
transverseML: _,
|
|
3597
|
-
transverseAP: W,
|
|
3598
|
-
scanUrl: t,
|
|
3599
|
-
decision: v,
|
|
3600
|
-
userEnteredMeasurements: xt ?? void 0,
|
|
3601
|
-
screenshots: R
|
|
3602
|
-
});
|
|
3603
3620
|
}, [
|
|
3604
3621
|
l,
|
|
3605
3622
|
n,
|
|
3606
3623
|
V,
|
|
3607
3624
|
w,
|
|
3608
3625
|
T,
|
|
3609
|
-
|
|
3626
|
+
$e,
|
|
3610
3627
|
Y,
|
|
3611
3628
|
Ae,
|
|
3612
3629
|
t,
|
|
3613
|
-
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
]),
|
|
3630
|
+
bt,
|
|
3631
|
+
qe,
|
|
3632
|
+
Ue
|
|
3633
|
+
]), Vn = j(() => {
|
|
3617
3634
|
if (!Ae || V.length === 0) return false;
|
|
3618
3635
|
const v = Math.min(Ae.length, V.length);
|
|
3619
3636
|
if (v === 0) return false;
|
|
3620
3637
|
for (let _ = 0; _ < v; _++) {
|
|
3621
3638
|
const W = Ae[_], R = V[_];
|
|
3622
3639
|
if (!R || W == null || W === 0) continue;
|
|
3623
|
-
const
|
|
3624
|
-
if (Math.abs(
|
|
3640
|
+
const ce = R.modifiedValue ?? R.originalValue;
|
|
3641
|
+
if (Math.abs(ce - W) > 7) return false;
|
|
3625
3642
|
}
|
|
3626
3643
|
return true;
|
|
3627
3644
|
}, [
|
|
3628
3645
|
Ae,
|
|
3629
3646
|
V
|
|
3630
|
-
]),
|
|
3647
|
+
]), jn = Ht ? 5 : ee && $t || ee ? 4 : n ? T.length === 0 ? 2 : 3 : 1, Nn = [
|
|
3631
3648
|
{
|
|
3632
3649
|
label: "Load File",
|
|
3633
3650
|
number: 1
|
|
@@ -3649,10 +3666,10 @@ let __tla = (async () => {
|
|
|
3649
3666
|
number: 5
|
|
3650
3667
|
}
|
|
3651
3668
|
];
|
|
3652
|
-
return
|
|
3669
|
+
return F(ro.Provider, {
|
|
3653
3670
|
value: e,
|
|
3654
3671
|
children: [
|
|
3655
|
-
|
|
3672
|
+
F("div", {
|
|
3656
3673
|
style: {
|
|
3657
3674
|
flex: 1,
|
|
3658
3675
|
display: "flex",
|
|
@@ -3681,11 +3698,11 @@ let __tla = (async () => {
|
|
|
3681
3698
|
}
|
|
3682
3699
|
})
|
|
3683
3700
|
}),
|
|
3684
|
-
i(
|
|
3685
|
-
steps:
|
|
3686
|
-
currentStep:
|
|
3701
|
+
i(Bo, {
|
|
3702
|
+
steps: Nn,
|
|
3703
|
+
currentStep: jn
|
|
3687
3704
|
}),
|
|
3688
|
-
|
|
3705
|
+
F("div", {
|
|
3689
3706
|
style: {
|
|
3690
3707
|
flex: 1,
|
|
3691
3708
|
display: "flex",
|
|
@@ -3693,17 +3710,17 @@ let __tla = (async () => {
|
|
|
3693
3710
|
minHeight: 0
|
|
3694
3711
|
},
|
|
3695
3712
|
children: [
|
|
3696
|
-
|
|
3697
|
-
ref:
|
|
3713
|
+
F("div", {
|
|
3714
|
+
ref: Ct,
|
|
3698
3715
|
style: {
|
|
3699
3716
|
flex: 1,
|
|
3700
3717
|
position: "relative",
|
|
3701
3718
|
minHeight: 0,
|
|
3702
3719
|
overflow: "hidden"
|
|
3703
3720
|
},
|
|
3704
|
-
onDragOver: e.showDragDrop ?
|
|
3705
|
-
onDragLeave: e.showDragDrop ?
|
|
3706
|
-
onDrop: e.showDragDrop ?
|
|
3721
|
+
onDragOver: e.showDragDrop ? Rn : void 0,
|
|
3722
|
+
onDragLeave: e.showDragDrop ? Wn : void 0,
|
|
3723
|
+
onDrop: e.showDragDrop ? En : void 0,
|
|
3707
3724
|
children: [
|
|
3708
3725
|
e.showDragDrop && !n && !M && i("div", {
|
|
3709
3726
|
style: {
|
|
@@ -3716,7 +3733,7 @@ let __tla = (async () => {
|
|
|
3716
3733
|
justifyContent: "center",
|
|
3717
3734
|
pointerEvents: "none"
|
|
3718
3735
|
},
|
|
3719
|
-
children:
|
|
3736
|
+
children: Ze ? i("div", {
|
|
3720
3737
|
style: {
|
|
3721
3738
|
fontSize: 18,
|
|
3722
3739
|
color: "#aaa",
|
|
@@ -3724,7 +3741,7 @@ let __tla = (async () => {
|
|
|
3724
3741
|
fontFamily: "system-ui, sans-serif"
|
|
3725
3742
|
},
|
|
3726
3743
|
children: "Drag & Drop Files Here"
|
|
3727
|
-
}) :
|
|
3744
|
+
}) : F("div", {
|
|
3728
3745
|
style: {
|
|
3729
3746
|
textAlign: "center"
|
|
3730
3747
|
},
|
|
@@ -3754,7 +3771,7 @@ let __tla = (async () => {
|
|
|
3754
3771
|
]
|
|
3755
3772
|
})
|
|
3756
3773
|
}),
|
|
3757
|
-
!e.showDragDrop && !n && !M && !
|
|
3774
|
+
!e.showDragDrop && !n && !M && !mt && i("div", {
|
|
3758
3775
|
style: {
|
|
3759
3776
|
position: "absolute",
|
|
3760
3777
|
inset: 0,
|
|
@@ -3762,7 +3779,7 @@ let __tla = (async () => {
|
|
|
3762
3779
|
alignItems: "center",
|
|
3763
3780
|
justifyContent: "center"
|
|
3764
3781
|
},
|
|
3765
|
-
children:
|
|
3782
|
+
children: F("div", {
|
|
3766
3783
|
style: {
|
|
3767
3784
|
textAlign: "center"
|
|
3768
3785
|
},
|
|
@@ -3792,7 +3809,7 @@ let __tla = (async () => {
|
|
|
3792
3809
|
]
|
|
3793
3810
|
})
|
|
3794
3811
|
}),
|
|
3795
|
-
n && !ee && T.length === 0 &&
|
|
3812
|
+
n && !ee && T.length === 0 && F("div", {
|
|
3796
3813
|
style: {
|
|
3797
3814
|
position: "absolute",
|
|
3798
3815
|
top: 16,
|
|
@@ -3824,7 +3841,7 @@ let __tla = (async () => {
|
|
|
3824
3841
|
w === "AK" ? "IT" : "MPT"
|
|
3825
3842
|
]
|
|
3826
3843
|
}),
|
|
3827
|
-
n && !ee && T.length === 1 &&
|
|
3844
|
+
n && !ee && T.length === 1 && F("div", {
|
|
3828
3845
|
style: {
|
|
3829
3846
|
position: "absolute",
|
|
3830
3847
|
top: 16,
|
|
@@ -3855,15 +3872,15 @@ let __tla = (async () => {
|
|
|
3855
3872
|
"Click mesh to set Origin"
|
|
3856
3873
|
]
|
|
3857
3874
|
}),
|
|
3858
|
-
M && i(
|
|
3875
|
+
M && i(on, {
|
|
3859
3876
|
message: m || "Processing mesh..."
|
|
3860
3877
|
}),
|
|
3861
|
-
$ && i(
|
|
3878
|
+
$ && i(on, {
|
|
3862
3879
|
message: U
|
|
3863
3880
|
}),
|
|
3864
|
-
|
|
3865
|
-
message:
|
|
3866
|
-
onDismiss: () =>
|
|
3881
|
+
mt && i(yo, {
|
|
3882
|
+
message: mt,
|
|
3883
|
+
onDismiss: () => _e(null)
|
|
3867
3884
|
}),
|
|
3868
3885
|
e.showAmputationModal && b && i("div", {
|
|
3869
3886
|
style: {
|
|
@@ -3877,7 +3894,7 @@ let __tla = (async () => {
|
|
|
3877
3894
|
justifyContent: "center",
|
|
3878
3895
|
zIndex: 20
|
|
3879
3896
|
},
|
|
3880
|
-
children:
|
|
3897
|
+
children: F("div", {
|
|
3881
3898
|
style: {
|
|
3882
3899
|
backgroundColor: "#fff",
|
|
3883
3900
|
borderRadius: 4,
|
|
@@ -3886,7 +3903,7 @@ let __tla = (async () => {
|
|
|
3886
3903
|
fontFamily: "system-ui, sans-serif"
|
|
3887
3904
|
},
|
|
3888
3905
|
children: [
|
|
3889
|
-
|
|
3906
|
+
F("div", {
|
|
3890
3907
|
style: {
|
|
3891
3908
|
padding: "24px 24px 20px"
|
|
3892
3909
|
},
|
|
@@ -3916,7 +3933,7 @@ let __tla = (async () => {
|
|
|
3916
3933
|
children: [
|
|
3917
3934
|
"AK",
|
|
3918
3935
|
"BK"
|
|
3919
|
-
].map((v) =>
|
|
3936
|
+
].map((v) => F("label", {
|
|
3920
3937
|
onClick: () => A(v),
|
|
3921
3938
|
style: {
|
|
3922
3939
|
flex: 1,
|
|
@@ -3952,7 +3969,7 @@ let __tla = (async () => {
|
|
|
3952
3969
|
},
|
|
3953
3970
|
children: v
|
|
3954
3971
|
}),
|
|
3955
|
-
|
|
3972
|
+
F("span", {
|
|
3956
3973
|
style: {
|
|
3957
3974
|
fontSize: 13,
|
|
3958
3975
|
color: "rgba(0,0,0,0.54)"
|
|
@@ -3967,7 +3984,7 @@ let __tla = (async () => {
|
|
|
3967
3984
|
})
|
|
3968
3985
|
]
|
|
3969
3986
|
}),
|
|
3970
|
-
|
|
3987
|
+
F("div", {
|
|
3971
3988
|
style: {
|
|
3972
3989
|
display: "flex",
|
|
3973
3990
|
justifyContent: "flex-end",
|
|
@@ -3996,7 +4013,7 @@ let __tla = (async () => {
|
|
|
3996
4013
|
children: "Cancel"
|
|
3997
4014
|
}),
|
|
3998
4015
|
i("button", {
|
|
3999
|
-
onClick: () => w &&
|
|
4016
|
+
onClick: () => w && Tn(w),
|
|
4000
4017
|
disabled: !w,
|
|
4001
4018
|
style: {
|
|
4002
4019
|
padding: "6px 16px",
|
|
@@ -4028,8 +4045,8 @@ let __tla = (async () => {
|
|
|
4028
4045
|
zIndex: 10
|
|
4029
4046
|
}
|
|
4030
4047
|
}),
|
|
4031
|
-
i(
|
|
4032
|
-
children:
|
|
4048
|
+
i(xo, {
|
|
4049
|
+
children: F(Qn, {
|
|
4033
4050
|
camera: {
|
|
4034
4051
|
position: [
|
|
4035
4052
|
0,
|
|
@@ -4039,14 +4056,14 @@ let __tla = (async () => {
|
|
|
4039
4056
|
},
|
|
4040
4057
|
style: {
|
|
4041
4058
|
display: n ? "block" : "none",
|
|
4042
|
-
backgroundColor:
|
|
4059
|
+
backgroundColor: Re ? "#070611" : void 0
|
|
4043
4060
|
},
|
|
4044
4061
|
gl: {
|
|
4045
4062
|
localClippingEnabled: true,
|
|
4046
4063
|
preserveDrawingBuffer: true
|
|
4047
4064
|
},
|
|
4048
4065
|
scene: {
|
|
4049
|
-
background:
|
|
4066
|
+
background: Re ? new O.Color("#070611") : null
|
|
4050
4067
|
},
|
|
4051
4068
|
children: [
|
|
4052
4069
|
i("ambientLight", {
|
|
@@ -4076,15 +4093,15 @@ let __tla = (async () => {
|
|
|
4076
4093
|
],
|
|
4077
4094
|
intensity: 0.2
|
|
4078
4095
|
}),
|
|
4079
|
-
n && S === "3D" && i(
|
|
4096
|
+
n && S === "3D" && i(wo, {
|
|
4080
4097
|
mesh: n,
|
|
4081
4098
|
maxPoints: 2,
|
|
4082
|
-
meshColor:
|
|
4083
|
-
meshOpacity:
|
|
4099
|
+
meshColor: Vt,
|
|
4100
|
+
meshOpacity: Re ? 0.3 : In,
|
|
4084
4101
|
frontFaceOnly: Z,
|
|
4085
4102
|
doubleShellTransparency: Y && ee
|
|
4086
4103
|
}),
|
|
4087
|
-
n && S === "3D" && i(
|
|
4104
|
+
n && S === "3D" && i(vo, {
|
|
4088
4105
|
modelSize: d,
|
|
4089
4106
|
labels: [
|
|
4090
4107
|
w === "AK" ? "IT" : "MPT",
|
|
@@ -4092,94 +4109,94 @@ let __tla = (async () => {
|
|
|
4092
4109
|
"Cut Plane"
|
|
4093
4110
|
]
|
|
4094
4111
|
}),
|
|
4095
|
-
i(
|
|
4112
|
+
i(Lo, {
|
|
4096
4113
|
modelSize: d,
|
|
4097
4114
|
isAligned: ee,
|
|
4098
|
-
isCut:
|
|
4115
|
+
isCut: Mt,
|
|
4099
4116
|
mesh: n,
|
|
4100
4117
|
viewMode: S,
|
|
4101
|
-
sliceY: ee && T.length >= 2 ? ze ??
|
|
4118
|
+
sliceY: ee && T.length >= 2 ? ze ?? gt ?? T[0].position.y : void 0,
|
|
4102
4119
|
landmarkCount: T.length,
|
|
4103
4120
|
measurementGeometry: xe,
|
|
4104
|
-
resetCameraToFrontRef:
|
|
4121
|
+
resetCameraToFrontRef: vt
|
|
4105
4122
|
}),
|
|
4106
|
-
!ee && i(
|
|
4123
|
+
!ee && i(dn, {
|
|
4107
4124
|
enableDamping: false
|
|
4108
4125
|
}),
|
|
4109
|
-
ee && V.length > 0 && n && S === "3D" && i(
|
|
4126
|
+
ee && V.length > 0 && n && S === "3D" && i(Io, {
|
|
4110
4127
|
mesh: n,
|
|
4111
|
-
isDragging:
|
|
4128
|
+
isDragging: zn
|
|
4112
4129
|
}),
|
|
4113
4130
|
n && ee && T.length >= 3 && (() => {
|
|
4114
4131
|
const _ = n.geometry.getIndex();
|
|
4115
4132
|
if (!_ || _.count < 30) return null;
|
|
4116
|
-
const W = T[2], R = T[0],
|
|
4117
|
-
return S === "2D" ? i(
|
|
4118
|
-
mesh:
|
|
4133
|
+
const W = T[2], R = T[0], ce = Ge ?? W.position.y, G = ze ?? gt ?? R.position.y;
|
|
4134
|
+
return S === "2D" ? i(Ro, {
|
|
4135
|
+
mesh: Ut ?? n,
|
|
4119
4136
|
upperY: G,
|
|
4120
4137
|
originY: R.position.y,
|
|
4121
4138
|
modelSize: d,
|
|
4122
|
-
meshColor:
|
|
4139
|
+
meshColor: Vt,
|
|
4123
4140
|
displayUnit: k
|
|
4124
|
-
}) :
|
|
4141
|
+
}) : F(Oe, {
|
|
4125
4142
|
children: [
|
|
4126
|
-
i(
|
|
4127
|
-
mesh:
|
|
4128
|
-
startY:
|
|
4143
|
+
i(Fo, {
|
|
4144
|
+
mesh: Ut ?? n,
|
|
4145
|
+
startY: ce,
|
|
4129
4146
|
endY: G,
|
|
4130
|
-
spacing:
|
|
4147
|
+
spacing: it,
|
|
4131
4148
|
modelSize: d,
|
|
4132
4149
|
onMeasurementsChange: X,
|
|
4133
4150
|
reverseOrder: true,
|
|
4134
4151
|
displayUnit: k,
|
|
4135
4152
|
useInnerSurface: Y && !Z,
|
|
4136
|
-
formMeasurements:
|
|
4137
|
-
originY:
|
|
4138
|
-
wasmSlices:
|
|
4153
|
+
formMeasurements: nt ? Ae : void 0,
|
|
4154
|
+
originY: Wt ?? R.position.y,
|
|
4155
|
+
wasmSlices: Pe
|
|
4139
4156
|
}),
|
|
4140
|
-
i(
|
|
4157
|
+
i(Po, {
|
|
4141
4158
|
mesh: n,
|
|
4142
4159
|
greenY: R.position.y,
|
|
4143
4160
|
modelSize: d,
|
|
4144
4161
|
displayUnit: k,
|
|
4145
4162
|
bottomY: Y ? W.position.y : void 0
|
|
4146
4163
|
}),
|
|
4147
|
-
i(
|
|
4164
|
+
i(Wo, {
|
|
4148
4165
|
mesh: n,
|
|
4149
|
-
yPosition:
|
|
4166
|
+
yPosition: Wt ?? R.position.y,
|
|
4150
4167
|
onYChange: (K) => {
|
|
4151
|
-
|
|
4168
|
+
An(K), Le(null);
|
|
4152
4169
|
const te = K - R.position.y;
|
|
4153
|
-
|
|
4170
|
+
Bt((gt ?? R.position.y + it * 2) + te);
|
|
4154
4171
|
},
|
|
4155
|
-
minY: R.position.y -
|
|
4156
|
-
maxY: R.position.y +
|
|
4172
|
+
minY: R.position.y - it,
|
|
4173
|
+
maxY: R.position.y + it,
|
|
4157
4174
|
modelSize: d,
|
|
4158
4175
|
color: "#44ff44",
|
|
4159
4176
|
hoverColor: "#88ff88",
|
|
4160
4177
|
dragColor: "#ffffff",
|
|
4161
4178
|
label: w === "AK" ? "IT" : "MPT",
|
|
4162
|
-
onDragStart: () =>
|
|
4163
|
-
onDragEnd: () =>
|
|
4179
|
+
onDragStart: () => Rt(true),
|
|
4180
|
+
onDragEnd: () => Rt(false)
|
|
4164
4181
|
})
|
|
4165
4182
|
]
|
|
4166
4183
|
});
|
|
4167
4184
|
})(),
|
|
4168
|
-
n && ee && S === "3D" &&
|
|
4185
|
+
n && ee && S === "3D" && Re && i(er, {
|
|
4169
4186
|
mesh: n
|
|
4170
4187
|
}),
|
|
4171
|
-
n && e.showDebug &&
|
|
4188
|
+
n && e.showDebug && Re && S === "3D" && i(qo, {
|
|
4172
4189
|
mesh: n,
|
|
4173
4190
|
modelSize: d,
|
|
4174
|
-
layers:
|
|
4191
|
+
layers: Et,
|
|
4175
4192
|
landmarkPoints: T,
|
|
4176
4193
|
componentDebug: null,
|
|
4177
4194
|
aoData: me,
|
|
4178
4195
|
aoGeometry: H,
|
|
4179
4196
|
measurementGeometry: xe
|
|
4180
4197
|
}),
|
|
4181
|
-
i(
|
|
4182
|
-
screenshotFnRef:
|
|
4198
|
+
i(rr, {
|
|
4199
|
+
screenshotFnRef: Dn,
|
|
4183
4200
|
mesh: n,
|
|
4184
4201
|
modelSize: d,
|
|
4185
4202
|
measurementGeometry: xe
|
|
@@ -4187,7 +4204,7 @@ let __tla = (async () => {
|
|
|
4187
4204
|
]
|
|
4188
4205
|
})
|
|
4189
4206
|
}),
|
|
4190
|
-
n &&
|
|
4207
|
+
n && F("div", {
|
|
4191
4208
|
style: {
|
|
4192
4209
|
position: "absolute",
|
|
4193
4210
|
top: 16,
|
|
@@ -4215,7 +4232,7 @@ let __tla = (async () => {
|
|
|
4215
4232
|
children: "Start Over"
|
|
4216
4233
|
}),
|
|
4217
4234
|
!ee && T.length >= 1 && i("button", {
|
|
4218
|
-
onClick:
|
|
4235
|
+
onClick: Bn,
|
|
4219
4236
|
style: {
|
|
4220
4237
|
padding: "6px 16px",
|
|
4221
4238
|
borderRadius: 4,
|
|
@@ -4233,15 +4250,15 @@ let __tla = (async () => {
|
|
|
4233
4250
|
})
|
|
4234
4251
|
]
|
|
4235
4252
|
}),
|
|
4236
|
-
e.showDebug &&
|
|
4237
|
-
layers:
|
|
4238
|
-
onToggleLayer: (v) =>
|
|
4253
|
+
e.showDebug && Re && n && S === "3D" && i(nr, {
|
|
4254
|
+
layers: Et,
|
|
4255
|
+
onToggleLayer: (v) => Fn((_) => ({
|
|
4239
4256
|
..._,
|
|
4240
4257
|
[v]: !_[v]
|
|
4241
4258
|
})),
|
|
4242
4259
|
isDoubleShell: Y
|
|
4243
4260
|
}),
|
|
4244
|
-
ee && V.length > 0 &&
|
|
4261
|
+
ee && V.length > 0 && F("div", {
|
|
4245
4262
|
style: {
|
|
4246
4263
|
position: "absolute",
|
|
4247
4264
|
top: 16,
|
|
@@ -4251,7 +4268,7 @@ let __tla = (async () => {
|
|
|
4251
4268
|
zIndex: 10
|
|
4252
4269
|
},
|
|
4253
4270
|
children: [
|
|
4254
|
-
|
|
4271
|
+
F("div", {
|
|
4255
4272
|
style: {
|
|
4256
4273
|
display: "flex",
|
|
4257
4274
|
borderRadius: 6,
|
|
@@ -4291,7 +4308,7 @@ let __tla = (async () => {
|
|
|
4291
4308
|
})
|
|
4292
4309
|
]
|
|
4293
4310
|
}),
|
|
4294
|
-
|
|
4311
|
+
F("div", {
|
|
4295
4312
|
style: {
|
|
4296
4313
|
display: "flex",
|
|
4297
4314
|
borderRadius: 6,
|
|
@@ -4331,7 +4348,7 @@ let __tla = (async () => {
|
|
|
4331
4348
|
})
|
|
4332
4349
|
]
|
|
4333
4350
|
}),
|
|
4334
|
-
e.showSpacingToggle && S === "3D" &&
|
|
4351
|
+
e.showSpacingToggle && S === "3D" && F("div", {
|
|
4335
4352
|
style: {
|
|
4336
4353
|
display: "flex",
|
|
4337
4354
|
borderRadius: 6,
|
|
@@ -4341,13 +4358,13 @@ let __tla = (async () => {
|
|
|
4341
4358
|
},
|
|
4342
4359
|
children: [
|
|
4343
4360
|
i("button", {
|
|
4344
|
-
onClick: () =>
|
|
4361
|
+
onClick: () => L(1),
|
|
4345
4362
|
style: {
|
|
4346
4363
|
padding: "6px 14px",
|
|
4347
4364
|
fontSize: 13,
|
|
4348
|
-
fontWeight:
|
|
4349
|
-
backgroundColor:
|
|
4350
|
-
color:
|
|
4365
|
+
fontWeight: P === 1 ? 600 : 400,
|
|
4366
|
+
backgroundColor: P === 1 ? "rgb(12, 67, 173)" : "#fff",
|
|
4367
|
+
color: P === 1 ? "#fff" : "#666",
|
|
4351
4368
|
border: "none",
|
|
4352
4369
|
cursor: "pointer",
|
|
4353
4370
|
fontFamily: "system-ui, sans-serif"
|
|
@@ -4355,13 +4372,13 @@ let __tla = (async () => {
|
|
|
4355
4372
|
children: '1"'
|
|
4356
4373
|
}),
|
|
4357
4374
|
i("button", {
|
|
4358
|
-
onClick: () =>
|
|
4375
|
+
onClick: () => L(2),
|
|
4359
4376
|
style: {
|
|
4360
4377
|
padding: "6px 14px",
|
|
4361
4378
|
fontSize: 13,
|
|
4362
|
-
fontWeight:
|
|
4363
|
-
backgroundColor:
|
|
4364
|
-
color:
|
|
4379
|
+
fontWeight: P === 2 ? 600 : 400,
|
|
4380
|
+
backgroundColor: P === 2 ? "rgb(12, 67, 173)" : "#fff",
|
|
4381
|
+
color: P === 2 ? "#fff" : "#666",
|
|
4365
4382
|
border: "none",
|
|
4366
4383
|
borderLeft: "1px solid #ccc",
|
|
4367
4384
|
cursor: "pointer",
|
|
@@ -4380,13 +4397,13 @@ let __tla = (async () => {
|
|
|
4380
4397
|
boxShadow: "0 2px 8px rgba(0,0,0,0.1)"
|
|
4381
4398
|
},
|
|
4382
4399
|
children: i("button", {
|
|
4383
|
-
onClick: () =>
|
|
4400
|
+
onClick: () => Ot((v) => !v),
|
|
4384
4401
|
style: {
|
|
4385
4402
|
padding: "6px 14px",
|
|
4386
4403
|
fontSize: 13,
|
|
4387
|
-
fontWeight:
|
|
4388
|
-
backgroundColor:
|
|
4389
|
-
color:
|
|
4404
|
+
fontWeight: nt ? 600 : 400,
|
|
4405
|
+
backgroundColor: nt ? "rgb(12, 67, 173)" : "#fff",
|
|
4406
|
+
color: nt ? "#fff" : "#666",
|
|
4390
4407
|
border: "none",
|
|
4391
4408
|
cursor: "pointer",
|
|
4392
4409
|
fontFamily: "system-ui, sans-serif"
|
|
@@ -4404,11 +4421,11 @@ let __tla = (async () => {
|
|
|
4404
4421
|
},
|
|
4405
4422
|
children: i("button", {
|
|
4406
4423
|
onClick: async () => {
|
|
4407
|
-
const v = await
|
|
4424
|
+
const v = await Ue();
|
|
4408
4425
|
if (!v) return;
|
|
4409
|
-
const _ = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10), W = (R,
|
|
4426
|
+
const _ = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10), W = (R, ce) => {
|
|
4410
4427
|
const G = document.createElement("a");
|
|
4411
|
-
G.href = R, G.download =
|
|
4428
|
+
G.href = R, G.download = ce, G.click();
|
|
4412
4429
|
};
|
|
4413
4430
|
W(v.frontal_view_png, `measurements_front_${_}.png`), await new Promise((R) => setTimeout(R, 300)), W(v.side_view_png, `measurements_transverse_${_}.png`);
|
|
4414
4431
|
},
|
|
@@ -4434,13 +4451,13 @@ let __tla = (async () => {
|
|
|
4434
4451
|
boxShadow: "0 2px 8px rgba(0,0,0,0.1)"
|
|
4435
4452
|
},
|
|
4436
4453
|
children: i("button", {
|
|
4437
|
-
onClick: () =>
|
|
4454
|
+
onClick: () => kn((v) => !v),
|
|
4438
4455
|
style: {
|
|
4439
4456
|
padding: "6px 14px",
|
|
4440
4457
|
fontSize: 13,
|
|
4441
|
-
fontWeight:
|
|
4442
|
-
backgroundColor:
|
|
4443
|
-
color:
|
|
4458
|
+
fontWeight: Re ? 600 : 400,
|
|
4459
|
+
backgroundColor: Re ? "#e65100" : "#fff",
|
|
4460
|
+
color: Re ? "#fff" : "#666",
|
|
4444
4461
|
border: "none",
|
|
4445
4462
|
cursor: "pointer",
|
|
4446
4463
|
fontFamily: "system-ui, sans-serif"
|
|
@@ -4450,17 +4467,54 @@ let __tla = (async () => {
|
|
|
4450
4467
|
})
|
|
4451
4468
|
]
|
|
4452
4469
|
}),
|
|
4453
|
-
n && ie && i(
|
|
4470
|
+
n && ie && i(_o, {
|
|
4454
4471
|
wasAutoScaled: ae,
|
|
4455
4472
|
onDismiss: () => J(false)
|
|
4456
4473
|
}),
|
|
4457
|
-
n && we && ee && i(
|
|
4474
|
+
n && we && ee && i(Do, {
|
|
4458
4475
|
isDoubleShell: Y,
|
|
4459
4476
|
onDismiss: () => oe(false)
|
|
4460
4477
|
})
|
|
4461
4478
|
]
|
|
4462
4479
|
}),
|
|
4463
|
-
|
|
4480
|
+
Ie && F("div", {
|
|
4481
|
+
"data-finalizing-overlay": true,
|
|
4482
|
+
style: {
|
|
4483
|
+
position: "absolute",
|
|
4484
|
+
inset: 0,
|
|
4485
|
+
backgroundColor: "#fff",
|
|
4486
|
+
display: "flex",
|
|
4487
|
+
flexDirection: "column",
|
|
4488
|
+
alignItems: "center",
|
|
4489
|
+
justifyContent: "center",
|
|
4490
|
+
zIndex: 50
|
|
4491
|
+
},
|
|
4492
|
+
children: [
|
|
4493
|
+
i("div", {
|
|
4494
|
+
style: {
|
|
4495
|
+
width: 32,
|
|
4496
|
+
height: 32,
|
|
4497
|
+
border: "3px solid #e0e0e0",
|
|
4498
|
+
borderTopColor: "rgb(12, 67, 173)",
|
|
4499
|
+
borderRadius: "50%",
|
|
4500
|
+
animation: "gm-spin 0.8s linear infinite"
|
|
4501
|
+
}
|
|
4502
|
+
}),
|
|
4503
|
+
i("p", {
|
|
4504
|
+
style: {
|
|
4505
|
+
marginTop: 12,
|
|
4506
|
+
fontSize: 14,
|
|
4507
|
+
color: "#555",
|
|
4508
|
+
fontFamily: "system-ui, sans-serif"
|
|
4509
|
+
},
|
|
4510
|
+
children: "Generating screenshots and preparing data\u2026"
|
|
4511
|
+
}),
|
|
4512
|
+
i("style", {
|
|
4513
|
+
children: "@keyframes gm-spin { to { transform: rotate(360deg) } }"
|
|
4514
|
+
})
|
|
4515
|
+
]
|
|
4516
|
+
}),
|
|
4517
|
+
F("div", {
|
|
4464
4518
|
style: {
|
|
4465
4519
|
padding: "12px 24px",
|
|
4466
4520
|
backgroundColor: "#fff",
|
|
@@ -4473,7 +4527,7 @@ let __tla = (async () => {
|
|
|
4473
4527
|
},
|
|
4474
4528
|
children: [
|
|
4475
4529
|
n && !ee && T.length >= 2 && i("button", {
|
|
4476
|
-
onClick:
|
|
4530
|
+
onClick: On,
|
|
4477
4531
|
style: {
|
|
4478
4532
|
padding: "6px 16px",
|
|
4479
4533
|
borderRadius: 4,
|
|
@@ -4489,35 +4543,37 @@ let __tla = (async () => {
|
|
|
4489
4543
|
},
|
|
4490
4544
|
children: "Next \xBB"
|
|
4491
4545
|
}),
|
|
4492
|
-
ee &&
|
|
4493
|
-
|
|
4546
|
+
ee && Ht && (Vn ? i("button", {
|
|
4547
|
+
disabled: Ie,
|
|
4548
|
+
onClick: () => At("continue"),
|
|
4494
4549
|
style: {
|
|
4495
4550
|
padding: "6px 16px",
|
|
4496
4551
|
borderRadius: 4,
|
|
4497
4552
|
fontSize: 14,
|
|
4498
4553
|
fontWeight: 500,
|
|
4499
|
-
backgroundColor: "rgb(12, 67, 173)",
|
|
4554
|
+
backgroundColor: Ie ? "#9e9e9e" : "rgb(12, 67, 173)",
|
|
4500
4555
|
border: "none",
|
|
4501
4556
|
color: "#fff",
|
|
4502
|
-
cursor: "pointer",
|
|
4557
|
+
cursor: Ie ? "not-allowed" : "pointer",
|
|
4503
4558
|
fontFamily: "system-ui, sans-serif",
|
|
4504
4559
|
letterSpacing: "0.4px",
|
|
4505
4560
|
lineHeight: "36px"
|
|
4506
4561
|
},
|
|
4507
4562
|
children: "Continue"
|
|
4508
|
-
}) :
|
|
4563
|
+
}) : F(Oe, {
|
|
4509
4564
|
children: [
|
|
4510
4565
|
i("button", {
|
|
4511
|
-
|
|
4566
|
+
disabled: Ie,
|
|
4567
|
+
onClick: () => At("use_form_measurements"),
|
|
4512
4568
|
style: {
|
|
4513
4569
|
padding: "6px 16px",
|
|
4514
4570
|
borderRadius: 4,
|
|
4515
4571
|
fontSize: 14,
|
|
4516
4572
|
fontWeight: 500,
|
|
4517
|
-
backgroundColor: "rgb(12, 67, 173)",
|
|
4573
|
+
backgroundColor: Ie ? "#9e9e9e" : "rgb(12, 67, 173)",
|
|
4518
4574
|
border: "none",
|
|
4519
4575
|
color: "#fff",
|
|
4520
|
-
cursor: "pointer",
|
|
4576
|
+
cursor: Ie ? "not-allowed" : "pointer",
|
|
4521
4577
|
fontFamily: "system-ui, sans-serif",
|
|
4522
4578
|
letterSpacing: "0.4px",
|
|
4523
4579
|
lineHeight: "36px"
|
|
@@ -4525,16 +4581,17 @@ let __tla = (async () => {
|
|
|
4525
4581
|
children: "Set to Measurements"
|
|
4526
4582
|
}),
|
|
4527
4583
|
i("button", {
|
|
4528
|
-
|
|
4584
|
+
disabled: Ie,
|
|
4585
|
+
onClick: () => At("use_scan"),
|
|
4529
4586
|
style: {
|
|
4530
4587
|
padding: "6px 16px",
|
|
4531
4588
|
borderRadius: 4,
|
|
4532
4589
|
fontSize: 14,
|
|
4533
4590
|
fontWeight: 500,
|
|
4534
|
-
backgroundColor: "#fff",
|
|
4591
|
+
backgroundColor: Ie ? "#e0e0e0" : "#fff",
|
|
4535
4592
|
border: "1px solid #bdbdbd",
|
|
4536
|
-
color: "#333",
|
|
4537
|
-
cursor: "pointer",
|
|
4593
|
+
color: Ie ? "#999" : "#333",
|
|
4594
|
+
cursor: Ie ? "not-allowed" : "pointer",
|
|
4538
4595
|
fontFamily: "system-ui, sans-serif",
|
|
4539
4596
|
letterSpacing: "0.4px",
|
|
4540
4597
|
lineHeight: "36px"
|
|
@@ -4547,7 +4604,7 @@ let __tla = (async () => {
|
|
|
4547
4604
|
})
|
|
4548
4605
|
]
|
|
4549
4606
|
}),
|
|
4550
|
-
s &&
|
|
4607
|
+
s && wt.length > 0 && F("div", {
|
|
4551
4608
|
style: {
|
|
4552
4609
|
height: 120,
|
|
4553
4610
|
flexShrink: 0,
|
|
@@ -4560,7 +4617,7 @@ let __tla = (async () => {
|
|
|
4560
4617
|
flexDirection: "column"
|
|
4561
4618
|
},
|
|
4562
4619
|
children: [
|
|
4563
|
-
|
|
4620
|
+
F("div", {
|
|
4564
4621
|
style: {
|
|
4565
4622
|
display: "flex",
|
|
4566
4623
|
alignItems: "center",
|
|
@@ -4580,21 +4637,21 @@ let __tla = (async () => {
|
|
|
4580
4637
|
},
|
|
4581
4638
|
children: "GALILEO DEBUG"
|
|
4582
4639
|
}),
|
|
4583
|
-
|
|
4640
|
+
F("div", {
|
|
4584
4641
|
style: {
|
|
4585
4642
|
display: "flex",
|
|
4586
4643
|
gap: 8,
|
|
4587
4644
|
alignItems: "center"
|
|
4588
4645
|
},
|
|
4589
4646
|
children: [
|
|
4590
|
-
|
|
4647
|
+
F("span", {
|
|
4591
4648
|
style: {
|
|
4592
4649
|
color: "#484f58",
|
|
4593
4650
|
fontSize: 9
|
|
4594
4651
|
},
|
|
4595
4652
|
children: [
|
|
4596
4653
|
"WASM ",
|
|
4597
|
-
|
|
4654
|
+
He.current ? "v2" : "N/A",
|
|
4598
4655
|
" | ",
|
|
4599
4656
|
T.length,
|
|
4600
4657
|
" pts | ",
|
|
@@ -4605,7 +4662,7 @@ let __tla = (async () => {
|
|
|
4605
4662
|
]
|
|
4606
4663
|
}),
|
|
4607
4664
|
i("button", {
|
|
4608
|
-
onClick: () =>
|
|
4665
|
+
onClick: () => jt([]),
|
|
4609
4666
|
style: {
|
|
4610
4667
|
background: "none",
|
|
4611
4668
|
border: "1px solid #30363d",
|
|
@@ -4622,18 +4679,18 @@ let __tla = (async () => {
|
|
|
4622
4679
|
]
|
|
4623
4680
|
}),
|
|
4624
4681
|
i("div", {
|
|
4625
|
-
ref:
|
|
4682
|
+
ref: rt,
|
|
4626
4683
|
style: {
|
|
4627
4684
|
flex: 1,
|
|
4628
4685
|
overflowY: "auto",
|
|
4629
4686
|
padding: "4px 10px",
|
|
4630
4687
|
lineHeight: 1.6
|
|
4631
4688
|
},
|
|
4632
|
-
children:
|
|
4633
|
-
const W = v.includes("ERROR") || v.includes("failed"), R = v.includes("warning") || v.includes("WARN"),
|
|
4689
|
+
children: wt.map((v, _) => {
|
|
4690
|
+
const W = v.includes("ERROR") || v.includes("failed"), R = v.includes("warning") || v.includes("WARN"), ce = v.includes("PIPELINE:"), G = v.includes("STATE:");
|
|
4634
4691
|
return i("div", {
|
|
4635
4692
|
style: {
|
|
4636
|
-
color: W ? "#f85149" : R ? "#d29922" :
|
|
4693
|
+
color: W ? "#f85149" : R ? "#d29922" : ce ? "#58a6ff" : G ? "#3fb950" : "#8b949e",
|
|
4637
4694
|
whiteSpace: "pre"
|
|
4638
4695
|
},
|
|
4639
4696
|
children: v
|
|
@@ -4644,25 +4701,25 @@ let __tla = (async () => {
|
|
|
4644
4701
|
})
|
|
4645
4702
|
]
|
|
4646
4703
|
}),
|
|
4647
|
-
ee &&
|
|
4704
|
+
ee && $t && w && i(Ho, {
|
|
4648
4705
|
amputationType: w,
|
|
4649
|
-
spacingInches:
|
|
4706
|
+
spacingInches: P,
|
|
4650
4707
|
scanMeasurements: V,
|
|
4651
|
-
scanFrontalHeight:
|
|
4652
|
-
onSave:
|
|
4653
|
-
onSkip:
|
|
4708
|
+
scanFrontalHeight: qe,
|
|
4709
|
+
onSave: $n,
|
|
4710
|
+
onSkip: Hn
|
|
4654
4711
|
})
|
|
4655
4712
|
]
|
|
4656
4713
|
});
|
|
4657
4714
|
};
|
|
4658
|
-
function
|
|
4715
|
+
function rr({ screenshotFnRef: e }) {
|
|
4659
4716
|
return ne(() => {
|
|
4660
4717
|
e.current = null;
|
|
4661
4718
|
}, [
|
|
4662
4719
|
e
|
|
4663
4720
|
]), null;
|
|
4664
4721
|
}
|
|
4665
|
-
|
|
4722
|
+
Cn = function(e) {
|
|
4666
4723
|
const r = e === "AK" ? 2 : 1, t = [];
|
|
4667
4724
|
for (let o = 2; o >= 1; o -= r) t.push(`${o}_above`);
|
|
4668
4725
|
t.push("at_ref");
|
|
@@ -4681,40 +4738,40 @@ let __tla = (async () => {
|
|
|
4681
4738
|
]) t.push(`${o}_below`);
|
|
4682
4739
|
return t;
|
|
4683
4740
|
};
|
|
4684
|
-
|
|
4685
|
-
const t =
|
|
4741
|
+
ct = function(e, r) {
|
|
4742
|
+
const t = Cn(r), o = {};
|
|
4686
4743
|
for (let l = 0; l < Math.min(e.length, t.length); l++) {
|
|
4687
4744
|
const s = e[l];
|
|
4688
4745
|
s != null && !isNaN(s) && (o[t[l]] = s);
|
|
4689
4746
|
}
|
|
4690
4747
|
return o;
|
|
4691
4748
|
};
|
|
4692
|
-
|
|
4749
|
+
ir = function(e, r) {
|
|
4693
4750
|
if (!e) return;
|
|
4694
|
-
const o =
|
|
4751
|
+
const o = Cn(r).map((l) => {
|
|
4695
4752
|
const s = e[l];
|
|
4696
4753
|
return s ?? void 0;
|
|
4697
4754
|
});
|
|
4698
4755
|
if (!o.every((l) => l == null)) return o;
|
|
4699
4756
|
};
|
|
4700
|
-
|
|
4701
|
-
const o = j(() =>
|
|
4757
|
+
mr = ({ request: e, onComplete: r, wasmModule: t }) => {
|
|
4758
|
+
const o = j(() => ir(e.form_measurements, e.spacing_type), [
|
|
4702
4759
|
e.form_measurements,
|
|
4703
4760
|
e.spacing_type
|
|
4704
4761
|
]), l = (s) => {
|
|
4705
4762
|
var _a, _b;
|
|
4706
|
-
const c = s.scanMeasurements.map((f) => +(f.modifiedValue ?? f.originalValue).toFixed(1)), a =
|
|
4763
|
+
const c = s.scanMeasurements.map((f) => +(f.modifiedValue ?? f.originalValue).toFixed(1)), a = ct(c, e.spacing_type);
|
|
4707
4764
|
let n, h;
|
|
4708
4765
|
if (s.formMeasurements) {
|
|
4709
|
-
n =
|
|
4766
|
+
n = ct(s.formMeasurements, e.spacing_type);
|
|
4710
4767
|
const f = s.scanMeasurements.map((m, x) => {
|
|
4711
4768
|
var _a2;
|
|
4712
4769
|
const S = (_a2 = s.formMeasurements) == null ? void 0 : _a2[x];
|
|
4713
4770
|
return S == null || isNaN(S) ? null : +((m.modifiedValue ?? m.originalValue) - S).toFixed(1);
|
|
4714
4771
|
});
|
|
4715
|
-
h =
|
|
4772
|
+
h = ct(f, e.spacing_type);
|
|
4716
4773
|
}
|
|
4717
|
-
const d = s.userEnteredMeasurements ?
|
|
4774
|
+
const d = s.userEnteredMeasurements ? ct(s.userEnteredMeasurements.circumferences, e.spacing_type) : void 0, u = s.decision === "use_scan" || s.decision === "continue", p = u ? a : d ?? n ?? a, g = u ? +s.frontalHeight.toFixed(1) : +(((_a = s.userEnteredMeasurements) == null ? void 0 : _a.frontalHeight) ?? s.frontalHeight).toFixed(1), M = {
|
|
4718
4775
|
spacing_type: e.spacing_type,
|
|
4719
4776
|
source_unit: "mm",
|
|
4720
4777
|
file_format: s.fileFormat,
|
|
@@ -4746,8 +4803,8 @@ let __tla = (async () => {
|
|
|
4746
4803
|
height: "100%",
|
|
4747
4804
|
display: "flex"
|
|
4748
4805
|
},
|
|
4749
|
-
children: i(
|
|
4750
|
-
config:
|
|
4806
|
+
children: i(or, {
|
|
4807
|
+
config: oo,
|
|
4751
4808
|
spacingType: e.spacing_type,
|
|
4752
4809
|
scanUrl: e.scan_url,
|
|
4753
4810
|
formMeasurements: o,
|
|
@@ -4758,9 +4815,9 @@ let __tla = (async () => {
|
|
|
4758
4815
|
};
|
|
4759
4816
|
})();
|
|
4760
4817
|
export {
|
|
4761
|
-
|
|
4818
|
+
mr as G,
|
|
4762
4819
|
__tla,
|
|
4763
|
-
|
|
4764
|
-
|
|
4765
|
-
|
|
4820
|
+
ct as a,
|
|
4821
|
+
ir as c,
|
|
4822
|
+
Cn as g
|
|
4766
4823
|
};
|