@solid-labs/fab-one-widget 1.0.8 → 1.0.10
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 F, jsx as i, Fragment as
|
|
2
|
-
import { createContext as
|
|
3
|
-
import { useFrame as
|
|
4
|
-
import { Html as
|
|
5
|
-
import * as
|
|
6
|
-
import { Plane as
|
|
7
|
-
import { create as
|
|
8
|
-
import { OBJLoader as
|
|
9
|
-
import { STLLoader as
|
|
10
|
-
import { MeshBVH as
|
|
11
|
-
let
|
|
1
|
+
import { jsxs as F, jsx as i, Fragment as Be } from "react/jsx-runtime";
|
|
2
|
+
import { createContext as oo, Component as ro, useCallback as J, useMemo as j, useState as W, memo as io, useEffect as q, useRef as se, forwardRef as so, createElement as en } from "react";
|
|
3
|
+
import { useFrame as cn, useThree as dn, Canvas as lo } from "@react-three/fiber";
|
|
4
|
+
import { Html as He, Line as ce, OrbitControls as fn } from "@react-three/drei";
|
|
5
|
+
import * as O from "three";
|
|
6
|
+
import { Plane as ut, Vector3 as z, Box3 as un, Line3 as pn, Raycaster as ao } from "three";
|
|
7
|
+
import { create as co } from "zustand";
|
|
8
|
+
import { OBJLoader as hn } from "three/examples/jsm/loaders/OBJLoader.js";
|
|
9
|
+
import { STLLoader as fo } from "three/examples/jsm/loaders/STLLoader.js";
|
|
10
|
+
import { MeshBVH as pt } from "three-mesh-bvh";
|
|
11
|
+
let kr, ct, mr, zn;
|
|
12
12
|
let __tla = (async () => {
|
|
13
|
-
const
|
|
13
|
+
const uo = {
|
|
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
|
+
}, po = {
|
|
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
|
+
}, ho = oo(uo), Bt = co((t, 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
|
+
})), go = 0.45, ht = 3, Rt = 1e-3, dt = 25.4, mo = [
|
|
68
68
|
0.25,
|
|
69
69
|
-0.25,
|
|
70
70
|
0.5,
|
|
71
71
|
-0.5
|
|
72
72
|
];
|
|
73
|
-
function
|
|
73
|
+
function xo(t) {
|
|
74
74
|
var _a;
|
|
75
75
|
const r = t.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(s)
|
|
91
91
|
} : null;
|
|
92
92
|
}
|
|
93
|
-
function
|
|
93
|
+
function bo(t, r, n, o) {
|
|
94
94
|
const s = t.getAttribute("position"), a = s.count, c = new Float32Array(a * 3), l = r.length / 3;
|
|
95
95
|
let e = 1 / 0, m = 1 / 0, d = 1 / 0, f = -1 / 0, u = -1 / 0, x = -1 / 0;
|
|
96
96
|
for (let D = 0; D < l; D++) {
|
|
97
|
-
const E = r[D * 3] * o, V = r[D * 3 + 1] * o,
|
|
98
|
-
E < e && (e = E), E > f && (f = E), V < m && (m = V), V > u && (u = V),
|
|
97
|
+
const E = r[D * 3] * o, V = r[D * 3 + 1] * o, G = r[D * 3 + 2] * o;
|
|
98
|
+
E < e && (e = E), E > f && (f = E), V < m && (m = V), V > u && (u = V), G < d && (d = G), G > x && (x = G);
|
|
99
99
|
}
|
|
100
|
-
const S = (e + f) * 0.5, p = (m + u) * 0.5, g = (d + x) * 0.5, b = f - e + 1e-6, A = u - m + 1e-6, P = x - d + 1e-6, v = b * 0.5, k = A * 0.5, w = P * 0.5, M = Math.min(128, Math.max(16, Math.round(Math.cbrt(l)))), h = b / M, C = A / M, L = P / M,
|
|
100
|
+
const S = (e + f) * 0.5, p = (m + u) * 0.5, g = (d + x) * 0.5, b = f - e + 1e-6, A = u - m + 1e-6, P = x - d + 1e-6, v = b * 0.5, k = A * 0.5, w = P * 0.5, M = Math.min(128, Math.max(16, Math.round(Math.cbrt(l)))), h = b / M, C = A / M, L = P / M, I = /* @__PURE__ */ new Map();
|
|
101
101
|
for (let D = 0; D < l; D++) {
|
|
102
|
-
const E = r[D * 3] * o - S, V = r[D * 3 + 1] * o - p,
|
|
103
|
-
let
|
|
104
|
-
|
|
102
|
+
const E = r[D * 3] * o - S, V = r[D * 3 + 1] * o - p, G = r[D * 3 + 2] * o - g, Q = Math.min(M - 1, Math.max(0, Math.floor((E + v) / h))), xe = Math.min(M - 1, Math.max(0, Math.floor((V + k) / C))), le = Math.min(M - 1, Math.max(0, Math.floor((G + w) / L))), de = Q * M * M + xe * M + le;
|
|
103
|
+
let re = I.get(de);
|
|
104
|
+
re || (re = [], I.set(de, re)), re.push(D);
|
|
105
105
|
}
|
|
106
106
|
for (let D = 0; D < a; D++) {
|
|
107
|
-
const E = s.getX(D), V = s.getY(D),
|
|
108
|
-
let
|
|
109
|
-
for (let
|
|
110
|
-
for (let X = -
|
|
111
|
-
if (
|
|
112
|
-
const
|
|
113
|
-
if (
|
|
114
|
-
const H =
|
|
115
|
-
if (H) for (const
|
|
116
|
-
const
|
|
117
|
-
|
|
107
|
+
const E = s.getX(D), V = s.getY(D), G = s.getZ(D), Q = Math.min(M - 1, Math.max(0, Math.floor((E + v) / h))), xe = Math.min(M - 1, Math.max(0, Math.floor((V + k) / C))), le = Math.min(M - 1, Math.max(0, Math.floor((G + w) / L)));
|
|
108
|
+
let de = 1 / 0, re = 0;
|
|
109
|
+
for (let ee = 0; ee <= M && de > 0; ee++) {
|
|
110
|
+
for (let X = -ee; X <= ee; X++) for (let fe = -ee; fe <= ee; fe++) for (let Z = -ee; Z <= ee; Z++) {
|
|
111
|
+
if (ee > 0 && Math.abs(X) < ee && Math.abs(fe) < ee && Math.abs(Z) < ee) continue;
|
|
112
|
+
const ue = Q + X, ge = xe + fe, pe = le + Z;
|
|
113
|
+
if (ue < 0 || ue >= M || ge < 0 || ge >= M || pe < 0 || pe >= M) continue;
|
|
114
|
+
const H = I.get(ue * M * M + ge * M + pe);
|
|
115
|
+
if (H) for (const ne of H) {
|
|
116
|
+
const me = r[ne * 3] * o - S, ye = r[ne * 3 + 1] * o - p, be = r[ne * 3 + 2] * o - g, oe = (E - me) ** 2 + (V - ye) ** 2 + (G - be) ** 2;
|
|
117
|
+
oe < de && (de = oe, re = ne);
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
|
-
if (
|
|
120
|
+
if (de < 1 / 0) break;
|
|
121
121
|
}
|
|
122
|
-
c[D * 3] = n[
|
|
122
|
+
c[D * 3] = n[re * 3], c[D * 3 + 1] = n[re * 3 + 1], c[D * 3 + 2] = n[re * 3 + 2];
|
|
123
123
|
}
|
|
124
|
-
t.setAttribute("color", new
|
|
124
|
+
t.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 gn = "warn", mn = null;
|
|
133
|
+
const ae = {
|
|
134
134
|
setLevel(t) {
|
|
135
|
-
|
|
135
|
+
gn = t;
|
|
136
136
|
},
|
|
137
137
|
setHandler(t) {
|
|
138
|
-
|
|
138
|
+
mn = t;
|
|
139
139
|
},
|
|
140
140
|
debug(t, r, n) {
|
|
141
|
-
|
|
141
|
+
lt("debug", t, r, n);
|
|
142
142
|
},
|
|
143
143
|
info(t, r, n) {
|
|
144
|
-
|
|
144
|
+
lt("info", t, r, n);
|
|
145
145
|
},
|
|
146
146
|
warn(t, r, n) {
|
|
147
|
-
|
|
147
|
+
lt("warn", t, r, n);
|
|
148
148
|
},
|
|
149
149
|
error(t, r, n) {
|
|
150
|
-
|
|
150
|
+
lt("error", t, r, n);
|
|
151
151
|
}
|
|
152
152
|
};
|
|
153
|
-
function
|
|
154
|
-
if (
|
|
153
|
+
function lt(t, r, n, o) {
|
|
154
|
+
if (tn[t] < tn[gn]) return;
|
|
155
155
|
const s = `[${r}]`, a = o !== void 0 ? [
|
|
156
156
|
s,
|
|
157
157
|
n,
|
|
@@ -174,9 +174,9 @@ let __tla = (async () => {
|
|
|
174
174
|
console.error(...a);
|
|
175
175
|
break;
|
|
176
176
|
}
|
|
177
|
-
|
|
177
|
+
mn == null ? void 0 : mn(t, r, n, o);
|
|
178
178
|
}
|
|
179
|
-
function
|
|
179
|
+
function ft(t) {
|
|
180
180
|
const r = t.getAttribute("position"), n = new Float32Array(r.array), o = t.getIndex();
|
|
181
181
|
if (o) return {
|
|
182
182
|
positions: n,
|
|
@@ -189,32 +189,32 @@ let __tla = (async () => {
|
|
|
189
189
|
indices: a
|
|
190
190
|
};
|
|
191
191
|
}
|
|
192
|
-
function
|
|
193
|
-
const n = new
|
|
194
|
-
return n.setAttribute("position", new
|
|
192
|
+
function xn(t, r) {
|
|
193
|
+
const n = new O.BufferGeometry();
|
|
194
|
+
return n.setAttribute("position", new O.Float32BufferAttribute(t, 3)), n.setIndex(new O.BufferAttribute(r, 1)), n.computeVertexNormals(), n;
|
|
195
195
|
}
|
|
196
|
-
async function
|
|
196
|
+
async function yo(t, r, n) {
|
|
197
197
|
try {
|
|
198
|
-
const o =
|
|
198
|
+
const o = xo(t);
|
|
199
199
|
n == null ? void 0 : n("Parsing mesh...");
|
|
200
|
-
const a = new
|
|
200
|
+
const a = new hn().parse(t);
|
|
201
201
|
let c = null;
|
|
202
202
|
if (a.traverse((b) => {
|
|
203
203
|
b.isMesh && !c && (c = b.geometry);
|
|
204
204
|
}), !c) return null;
|
|
205
|
-
const { positions: l, indices: e } =
|
|
206
|
-
if (l.length < 9 || e.length < 3) return
|
|
207
|
-
for (let b = 0; b < Math.min(l.length, 300); b++) if (!isFinite(l[b])) return
|
|
205
|
+
const { positions: l, indices: e } = ft(c);
|
|
206
|
+
if (l.length < 9 || e.length < 3) return ae.warn("wasm", `Mesh too small: positions=${l.length} indices=${e.length}`), null;
|
|
207
|
+
for (let b = 0; b < Math.min(l.length, 300); b++) if (!isFinite(l[b])) return ae.error("wasm", `Invalid position data: NaN/Infinity at index ${b}`), null;
|
|
208
208
|
const m = l.length / 3;
|
|
209
|
-
for (let b = 0; b < Math.min(e.length, 300); b++) if (e[b] >= m) return
|
|
209
|
+
for (let b = 0; b < Math.min(e.length, 300); b++) if (e[b] >= m) return ae.error("wasm", `Out-of-bounds index: ${e[b]} >= ${m}`), null;
|
|
210
210
|
n == null ? void 0 : n("Processing mesh (WASM)...");
|
|
211
211
|
const d = r.preprocess_mesh(l, e, 10, 1e-4, 500), f = d.positions(), u = d.indices(), x = d.unit_converted(), S = d.detected_unit(), p = d.log();
|
|
212
|
-
if (
|
|
212
|
+
if (ae.debug("wasm", "preprocess result", p), f.length === 0) return null;
|
|
213
213
|
n == null ? void 0 : n("Building geometry...");
|
|
214
|
-
const g =
|
|
214
|
+
const g = xn(f, u);
|
|
215
215
|
if (o) {
|
|
216
216
|
const b = x ? 1e3 : 1;
|
|
217
|
-
|
|
217
|
+
bo(g, o.positions, o.colors, b);
|
|
218
218
|
}
|
|
219
219
|
return {
|
|
220
220
|
geometry: g,
|
|
@@ -223,18 +223,18 @@ let __tla = (async () => {
|
|
|
223
223
|
detectedUnit: S
|
|
224
224
|
};
|
|
225
225
|
} catch (o) {
|
|
226
|
-
return
|
|
226
|
+
return ae.error("wasm", "Processing failed", o), null;
|
|
227
227
|
}
|
|
228
228
|
}
|
|
229
|
-
function
|
|
230
|
-
const n = new
|
|
229
|
+
function wo(t) {
|
|
230
|
+
const n = new hn().parse(t);
|
|
231
231
|
let o = null;
|
|
232
232
|
return n.traverse((s) => {
|
|
233
233
|
s.isMesh && !o && (o = s.geometry);
|
|
234
234
|
}), o;
|
|
235
235
|
}
|
|
236
|
-
async function
|
|
237
|
-
const r = await t.arrayBuffer(), s = new
|
|
236
|
+
async function _t(t) {
|
|
237
|
+
const r = await t.arrayBuffer(), s = new fo().parse(r).getAttribute("position");
|
|
238
238
|
if (!s || s.count === 0) throw new Error("Empty STL geometry");
|
|
239
239
|
const a = [];
|
|
240
240
|
for (let c = 0; c < s.count; c++) a.push(`v ${s.getX(c)} ${s.getY(c)} ${s.getZ(c)}`);
|
|
@@ -242,25 +242,25 @@ let __tla = (async () => {
|
|
|
242
242
|
return a.join(`
|
|
243
243
|
`);
|
|
244
244
|
}
|
|
245
|
-
function
|
|
245
|
+
function So(t, r) {
|
|
246
246
|
const n = 1 / r;
|
|
247
247
|
return `${Math.round(t.x * n)}_${Math.round(t.y * n)}_${Math.round(t.z * n)}`;
|
|
248
248
|
}
|
|
249
|
-
function
|
|
249
|
+
function vo(t, r) {
|
|
250
250
|
if (!t.length) return [];
|
|
251
251
|
const n = [];
|
|
252
252
|
for (const o of t) (n.length === 0 || n[n.length - 1].distanceTo(o) > r) && n.push(o.clone());
|
|
253
253
|
return n.length > 2 && n[0].distanceTo(n[n.length - 1]) > r && n.push(n[0].clone()), n;
|
|
254
254
|
}
|
|
255
|
-
function
|
|
255
|
+
function Ye(t) {
|
|
256
256
|
let r = 0;
|
|
257
257
|
for (let n = 0; n < t.length - 1; n++) r += t[n].distanceTo(t[n + 1]);
|
|
258
258
|
return r;
|
|
259
259
|
}
|
|
260
|
-
function
|
|
260
|
+
function bn(t, r = 1e-3, n = false) {
|
|
261
261
|
if (!t.length) return [];
|
|
262
262
|
const o = /* @__PURE__ */ new Map(), s = (f) => {
|
|
263
|
-
const u =
|
|
263
|
+
const u = So(f, r);
|
|
264
264
|
let x = o.get(u);
|
|
265
265
|
return x || (x = f.clone(), o.set(u, x)), x;
|
|
266
266
|
}, a = t.map((f) => ({
|
|
@@ -285,13 +285,13 @@ let __tla = (async () => {
|
|
|
285
285
|
a.splice(p, 1), x = true;
|
|
286
286
|
}
|
|
287
287
|
}
|
|
288
|
-
const S =
|
|
288
|
+
const S = vo(u, r);
|
|
289
289
|
S.length > 1 && c.push(S);
|
|
290
290
|
}
|
|
291
291
|
if (!c.length) return [];
|
|
292
292
|
if (n) {
|
|
293
|
-
c.sort((x, S) =>
|
|
294
|
-
const f =
|
|
293
|
+
c.sort((x, S) => Ye(S) - Ye(x));
|
|
294
|
+
const f = Ye(c[0]), u = c.filter((x) => Ye(x) >= f * 0.3);
|
|
295
295
|
return u[u.length - 1] ?? c[0];
|
|
296
296
|
}
|
|
297
297
|
const l = c.filter((f) => f.length >= 3 && f[0].distanceTo(f[f.length - 1]) < r * 10), e = l.length > 0 ? l : c;
|
|
@@ -306,8 +306,8 @@ let __tla = (async () => {
|
|
|
306
306
|
}
|
|
307
307
|
return m;
|
|
308
308
|
}
|
|
309
|
-
function
|
|
310
|
-
const s = new
|
|
309
|
+
function nn(t, r, n, o = false) {
|
|
310
|
+
const s = new ut(new z(0, 1, 0), -n), a = [], c = new un();
|
|
311
311
|
c.setFromBufferAttribute(r.getAttribute("position"));
|
|
312
312
|
const l = {
|
|
313
313
|
linePoints: [],
|
|
@@ -315,7 +315,7 @@ let __tla = (async () => {
|
|
|
315
315
|
rightmostPoint: new z(0, n, 0)
|
|
316
316
|
};
|
|
317
317
|
if (!s.intersectsBox(c)) return l;
|
|
318
|
-
const e = new
|
|
318
|
+
const e = new pn(), m = new z();
|
|
319
319
|
t.shapecast({
|
|
320
320
|
intersectsBounds: (p) => s.intersectsBox(p),
|
|
321
321
|
intersectsTriangle: (p) => {
|
|
@@ -326,12 +326,12 @@ let __tla = (async () => {
|
|
|
326
326
|
});
|
|
327
327
|
}
|
|
328
328
|
});
|
|
329
|
-
const d =
|
|
329
|
+
const d = bn(a, Rt, o);
|
|
330
330
|
if (d.length < 2) return l;
|
|
331
|
-
const f =
|
|
331
|
+
const f = Ye(d);
|
|
332
332
|
let u = -1 / 0, x = new z(0, n, 0);
|
|
333
333
|
for (const p of d) p.x > u && (u = p.x, x = p.clone());
|
|
334
|
-
const S = d.length > 2 && d[0].distanceTo(d[d.length - 1]) <
|
|
334
|
+
const S = d.length > 2 && d[0].distanceTo(d[d.length - 1]) < Rt * 10;
|
|
335
335
|
return {
|
|
336
336
|
linePoints: d,
|
|
337
337
|
lineLength: f,
|
|
@@ -339,22 +339,22 @@ let __tla = (async () => {
|
|
|
339
339
|
isClosed: S
|
|
340
340
|
};
|
|
341
341
|
}
|
|
342
|
-
function
|
|
343
|
-
const s =
|
|
342
|
+
function $e(t, r, n, o = false) {
|
|
343
|
+
const s = nn(t, r, n, o);
|
|
344
344
|
if (s.isClosed && s.linePoints.length >= 3) return s;
|
|
345
|
-
|
|
345
|
+
ae.debug("slice", `y=${n.toFixed(2)} failed (pts=${s.linePoints.length}, closed=${s.isClosed}), retrying...`);
|
|
346
346
|
let a = s;
|
|
347
|
-
for (const c of
|
|
348
|
-
const l =
|
|
349
|
-
if (l.isClosed && l.linePoints.length >= 3) return
|
|
347
|
+
for (const c of mo) {
|
|
348
|
+
const l = nn(t, r, n + c, o);
|
|
349
|
+
if (l.isClosed && l.linePoints.length >= 3) return ae.debug("slice", `y=${n.toFixed(2)} recovered with offset ${c > 0 ? "+" : ""}${c}mm (pts=${l.linePoints.length}, len=${l.lineLength.toFixed(1)}mm)`), l;
|
|
350
350
|
l.linePoints.length > a.linePoints.length && (a = l);
|
|
351
351
|
}
|
|
352
|
-
return
|
|
352
|
+
return ae.warn("slice", `y=${n.toFixed(2)} all retries exhausted (pts=${a.linePoints.length}, closed=${a.isClosed})`), a;
|
|
353
353
|
}
|
|
354
|
-
function
|
|
355
|
-
const s = new
|
|
354
|
+
function Co(t, r, n, o) {
|
|
355
|
+
const s = new ut().setFromNormalAndCoplanarPoint(o.clone().normalize(), n), a = new un();
|
|
356
356
|
if (a.setFromBufferAttribute(r.getAttribute("position")), !s.intersectsBox(a)) return 0;
|
|
357
|
-
const c = [], l = new
|
|
357
|
+
const c = [], l = new pn(), e = new z();
|
|
358
358
|
t.shapecast({
|
|
359
359
|
intersectsBounds: (d) => s.intersectsBox(d),
|
|
360
360
|
intersectsTriangle: (d) => {
|
|
@@ -365,15 +365,15 @@ let __tla = (async () => {
|
|
|
365
365
|
});
|
|
366
366
|
}
|
|
367
367
|
});
|
|
368
|
-
const m =
|
|
369
|
-
return
|
|
368
|
+
const m = bn(c, Rt);
|
|
369
|
+
return Ye(m);
|
|
370
370
|
}
|
|
371
|
-
function
|
|
372
|
-
return new
|
|
373
|
-
maxLeafTris:
|
|
371
|
+
function Wt(t) {
|
|
372
|
+
return new pt(t, {
|
|
373
|
+
maxLeafTris: ht
|
|
374
374
|
});
|
|
375
375
|
}
|
|
376
|
-
function
|
|
376
|
+
function zo(t, r, n, o) {
|
|
377
377
|
const s = t.getIndex(), a = s ? s.count / 3 : 0;
|
|
378
378
|
if (a < 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 l = new
|
|
392
|
-
maxLeafTris:
|
|
393
|
-
}), e =
|
|
391
|
+
const l = new pt(t, {
|
|
392
|
+
maxLeafTris: ht
|
|
393
|
+
}), e = $e(l, t, r);
|
|
394
394
|
if (e.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 = $e(l, t, m);
|
|
404
404
|
if (e.lineLength > 0 && d.lineLength > 0) {
|
|
405
405
|
const u = e.lineLength / d.lineLength;
|
|
406
406
|
if (u < 0.5) return {
|
|
@@ -410,7 +410,7 @@ let __tla = (async () => {
|
|
|
410
410
|
}
|
|
411
411
|
const f = r - o * 2;
|
|
412
412
|
if (f > n) {
|
|
413
|
-
const u =
|
|
413
|
+
const u = $e(l, t, f);
|
|
414
414
|
if (d.lineLength > 0 && u.lineLength > 0) {
|
|
415
415
|
const x = d.lineLength / u.lineLength;
|
|
416
416
|
if (x < 0.5) return {
|
|
@@ -424,8 +424,8 @@ let __tla = (async () => {
|
|
|
424
424
|
reason: ""
|
|
425
425
|
};
|
|
426
426
|
}
|
|
427
|
-
const
|
|
428
|
-
function
|
|
427
|
+
const Fe = "pipeline";
|
|
428
|
+
function Mo(t, r, n, o) {
|
|
429
429
|
var _a, _b, _c, _d;
|
|
430
430
|
const s = t.geometry.clone(), a = r.map((l) => ({
|
|
431
431
|
...l
|
|
@@ -434,21 +434,21 @@ let __tla = (async () => {
|
|
|
434
434
|
let l = t.geometry, e = a.map((H) => new z(H.position.x, H.position.y, H.position.z));
|
|
435
435
|
const m = e[0], d = e[1];
|
|
436
436
|
if (!c) {
|
|
437
|
-
o.onStatus("Aligning mesh (JS fallback)..."),
|
|
438
|
-
const H = new z(0, 1, 0),
|
|
437
|
+
o.onStatus("Aligning mesh (JS fallback)..."), ae.warn(Fe, "WASM not available, using JS fallback alignment");
|
|
438
|
+
const H = new z(0, 1, 0), ne = new z().subVectors(d, m).normalize(), me = ne.dot(H), ye = new z().crossVectors(ne, H);
|
|
439
439
|
if (ye.length() > 1e-4) {
|
|
440
440
|
ye.normalize();
|
|
441
|
-
const
|
|
442
|
-
l.applyMatrix4(new
|
|
441
|
+
const Y = new O.Quaternion().setFromAxisAngle(ye, Math.acos(Math.min(1, Math.max(-1, me))));
|
|
442
|
+
l.applyMatrix4(new O.Matrix4().makeRotationFromQuaternion(Y)), e = e.map((Le) => Le.clone().applyQuaternion(Y));
|
|
443
443
|
}
|
|
444
444
|
if (e[0].y > e[1].y) {
|
|
445
|
-
const
|
|
446
|
-
l.applyMatrix4(new
|
|
445
|
+
const Y = new O.Quaternion().setFromAxisAngle(new z(1, 0, 0), Math.PI);
|
|
446
|
+
l.applyMatrix4(new O.Matrix4().makeRotationFromQuaternion(Y)), e = e.map((Le) => Le.clone().applyQuaternion(Y));
|
|
447
447
|
}
|
|
448
|
-
const
|
|
449
|
-
l.translate(-
|
|
450
|
-
const
|
|
451
|
-
e.push(
|
|
448
|
+
const be = e[0].clone();
|
|
449
|
+
l.translate(-be.x, -be.y, -be.z), e = e.map((Y) => new z(Y.x - be.x, Y.y - be.y, Y.z - be.z)), l.computeVertexNormals(), l.computeBoundingBox();
|
|
450
|
+
const oe = new z(e[0].x, e[0].y, e[0].z);
|
|
451
|
+
e.push(oe), o.addLandmarkPoint({
|
|
452
452
|
faceIndex: -1,
|
|
453
453
|
vertexIndices: [
|
|
454
454
|
0,
|
|
@@ -456,25 +456,25 @@ let __tla = (async () => {
|
|
|
456
456
|
2
|
|
457
457
|
],
|
|
458
458
|
position: {
|
|
459
|
-
x:
|
|
460
|
-
y:
|
|
461
|
-
z:
|
|
459
|
+
x: oe.x,
|
|
460
|
+
y: oe.y,
|
|
461
|
+
z: oe.z
|
|
462
462
|
},
|
|
463
463
|
barycentricCoords: {
|
|
464
464
|
u: 0.33,
|
|
465
465
|
v: 0.33,
|
|
466
466
|
w: 0.34
|
|
467
467
|
}
|
|
468
|
-
}), o.updateLandmarkPositions(e.map((
|
|
469
|
-
x:
|
|
470
|
-
y:
|
|
471
|
-
z:
|
|
472
|
-
}))), o.setAligned(true), o.setCut(true), o.setAdjustedStartY(null), o.setAdjustedEndY(null), o.setOriginalEndY(e[1].y + 2 *
|
|
468
|
+
}), o.updateLandmarkPositions(e.map((Y) => ({
|
|
469
|
+
x: Y.x,
|
|
470
|
+
y: Y.y,
|
|
471
|
+
z: Y.z
|
|
472
|
+
}))), o.setAligned(true), o.setCut(true), o.setAdjustedStartY(null), o.setAdjustedEndY(null), o.setOriginalEndY(e[1].y + 2 * dt);
|
|
473
473
|
const N = new z();
|
|
474
474
|
l.computeBoundingBox(), l.boundingBox.getSize(N), o.setModelSize(Math.max(N.x, N.y, N.z)), s.dispose();
|
|
475
475
|
return;
|
|
476
476
|
}
|
|
477
|
-
const { positions: f, indices: u } =
|
|
477
|
+
const { positions: f, indices: u } = ft(l), x = new Float32Array([
|
|
478
478
|
m.x,
|
|
479
479
|
m.y,
|
|
480
480
|
m.z
|
|
@@ -485,13 +485,13 @@ let __tla = (async () => {
|
|
|
485
485
|
]);
|
|
486
486
|
o.onStatus("Detecting shell type...");
|
|
487
487
|
const p = c.detect_shell(f, u, S, 40), g = p.is_double_shell(), b = p.surface_normal();
|
|
488
|
-
|
|
488
|
+
ae.info(Fe, `Shell: ${g ? "DOUBLE" : "SINGLE"}`, p.details()), (_a = o.setDoubleShell) == null ? void 0 : _a.call(o, g), o.onStatus("Finding cross-section plane...");
|
|
489
489
|
const A = new Float32Array([
|
|
490
490
|
b[0],
|
|
491
491
|
b[1],
|
|
492
492
|
b[2]
|
|
493
493
|
]), P = c.find_min_cross_section(f, u, S, A, 10), v = P.plane_normal();
|
|
494
|
-
|
|
494
|
+
ae.info(Fe, "Cross-section found", P.details()), o.onStatus("Aligning mesh...");
|
|
495
495
|
const k = new Float32Array([
|
|
496
496
|
v[0],
|
|
497
497
|
v[1],
|
|
@@ -499,8 +499,8 @@ let __tla = (async () => {
|
|
|
499
499
|
]), w = c.align_to_origin(f, x, S, k);
|
|
500
500
|
let M = w.positions(), h = w.mpt(), C = w.origin();
|
|
501
501
|
const L = w.transform();
|
|
502
|
-
|
|
503
|
-
const
|
|
502
|
+
ae.info(Fe, "Alignment complete", w.details());
|
|
503
|
+
const I = [
|
|
504
504
|
L[3],
|
|
505
505
|
L[4],
|
|
506
506
|
L[5],
|
|
@@ -511,38 +511,38 @@ let __tla = (async () => {
|
|
|
511
511
|
L[10],
|
|
512
512
|
L[11]
|
|
513
513
|
], D = new Float32Array([
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
514
|
+
I[0] * v[0] + I[1] * v[1] + I[2] * v[2],
|
|
515
|
+
I[3] * v[0] + I[4] * v[1] + I[5] * v[2],
|
|
516
|
+
I[6] * v[0] + I[7] * v[1] + I[8] * v[2]
|
|
517
517
|
]);
|
|
518
518
|
o.onStatus("Generating measurement points...");
|
|
519
519
|
const E = c.subdivide_origin_to_plane(new Float32Array(C), new Float32Array(h), D);
|
|
520
|
-
|
|
521
|
-
const V = E.points(),
|
|
522
|
-
for (let H = Q; H <
|
|
520
|
+
ae.debug(Fe, `Subdivide: ${E.count()} pts, spacing=${E.spacing().toFixed(1)}mm`);
|
|
521
|
+
const V = E.points(), G = E.count(), Q = 2, xe = 1, le = [];
|
|
522
|
+
for (let H = Q; H < G - xe; H++) le.push(V[H * 3 + 1]);
|
|
523
523
|
o.onStatus("Computing cross-sections...");
|
|
524
|
-
let
|
|
525
|
-
if (
|
|
526
|
-
const
|
|
527
|
-
|
|
528
|
-
const
|
|
529
|
-
for (let
|
|
530
|
-
const N = ye[
|
|
531
|
-
if (
|
|
532
|
-
const
|
|
533
|
-
if (
|
|
534
|
-
let
|
|
535
|
-
for (let
|
|
536
|
-
|
|
524
|
+
let de = [];
|
|
525
|
+
if (le.length >= 2) {
|
|
526
|
+
const ne = (g ? c.batch_cross_sections_y_inner.bind(c) : c.batch_cross_sections_y.bind(c))(M, u, new Float32Array(le), 10);
|
|
527
|
+
ae.debug(Fe, "Batch (subdivision)", ne.details());
|
|
528
|
+
const me = ne.all_loop_points(), ye = ne.offsets(), be = ne.circumferences();
|
|
529
|
+
for (let oe = 0; oe < ye.length - 1; oe++) {
|
|
530
|
+
const N = ye[oe], Y = ye[oe + 1];
|
|
531
|
+
if (Y <= N || be[oe] <= 0) continue;
|
|
532
|
+
const Le = (Y - N) / 3;
|
|
533
|
+
if (Le < 3) continue;
|
|
534
|
+
let ke = 0, je = 0, ie = 0;
|
|
535
|
+
for (let Ae = N; Ae < Y; Ae += 3) ke += me[Ae], je += me[Ae + 1], ie += me[Ae + 2];
|
|
536
|
+
de.push(ke / Le, je / Le, ie / Le);
|
|
537
537
|
}
|
|
538
538
|
}
|
|
539
|
-
if (
|
|
539
|
+
if (de.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(de), M, new Float32Array(C), new Float32Array(h));
|
|
542
|
+
ae.info(Fe, "Refinement complete", H.details()), M = H.positions(), h = H.mpt(), C = H.origin();
|
|
543
543
|
}
|
|
544
|
-
const
|
|
545
|
-
|
|
544
|
+
const re = l.getAttribute("color"), ee = xn(M, u);
|
|
545
|
+
re && ee.setAttribute("color", re), l.dispose(), l = ee, t.geometry = l, l.computeVertexNormals(), l.computeBoundingBox(), e[0] = new z(C[0], C[1], C[2]), e[1] = new z(h[0], h[1], h[2]), o.onStatus("Setting blue point...");
|
|
546
546
|
const X = new z(e[0].x, e[0].y, e[0].z);
|
|
547
547
|
e.push(X), o.addLandmarkPoint({
|
|
548
548
|
faceIndex: -1,
|
|
@@ -566,41 +566,41 @@ let __tla = (async () => {
|
|
|
566
566
|
y: H.y,
|
|
567
567
|
z: H.z
|
|
568
568
|
}))), o.setAligned(true);
|
|
569
|
-
const
|
|
570
|
-
|
|
569
|
+
const fe = l.boundingBox, Z = new z();
|
|
570
|
+
fe.getSize(Z), o.setModelSize(Math.max(Z.x, Z.y, Z.z)), o.setCut(true), o.setAdjustedStartY(null), o.setAdjustedEndY(null), o.setOriginalEndY(e[1].y + 2 * dt), o.onStatus("Computing final measurements...");
|
|
571
571
|
{
|
|
572
|
-
const H =
|
|
573
|
-
let ye = 1 / 0,
|
|
574
|
-
const
|
|
575
|
-
for (let
|
|
576
|
-
const N = 25.4,
|
|
577
|
-
|
|
578
|
-
for (let
|
|
579
|
-
const
|
|
580
|
-
|
|
572
|
+
const H = ft(l), ne = e[1].y, me = e[0].y;
|
|
573
|
+
let ye = 1 / 0, be = -1 / 0;
|
|
574
|
+
const oe = H.positions;
|
|
575
|
+
for (let ie = 1; ie < oe.length; ie += 3) oe[ie] < ye && (ye = oe[ie]), oe[ie] > be && (be = oe[ie]);
|
|
576
|
+
const N = 25.4, Y = [];
|
|
577
|
+
Y.push(ne);
|
|
578
|
+
for (let ie = 1; ie <= 2; ie++) {
|
|
579
|
+
const Ae = ne + ie * N;
|
|
580
|
+
Ae < be - 1 && Y.push(Ae);
|
|
581
581
|
}
|
|
582
|
-
for (let
|
|
583
|
-
|
|
584
|
-
const
|
|
585
|
-
|
|
586
|
-
const
|
|
587
|
-
yValues:
|
|
588
|
-
circumferences: Array.from(
|
|
589
|
-
allLoopPoints: new Float32Array(
|
|
590
|
-
offsets: new Uint32Array(
|
|
591
|
-
mptY:
|
|
592
|
-
originY:
|
|
582
|
+
for (let ie = ne - N; ie > me; ie -= N) Y.push(ie);
|
|
583
|
+
Y.sort((ie, Ae) => ie - Ae), ae.info(Fe, `Horizontal slices: ${Y.length} Y planes, range ${(_b = Y[0]) == null ? void 0 : _b.toFixed(1)} \u2192 ${(_c = Y[Y.length - 1]) == null ? void 0 : _c.toFixed(1)} mm`);
|
|
584
|
+
const ke = (g ? c.batch_cross_sections_y_inner.bind(c) : c.batch_cross_sections_y.bind(c))(H.positions, H.indices, new Float32Array(Y), 10);
|
|
585
|
+
ae.info(Fe, `Horizontal slices (${g ? "inner" : "outer"}): ${ke.count()}/${Y.length} valid`), ae.debug(Fe, "Slice details", ke.details());
|
|
586
|
+
const je = {
|
|
587
|
+
yValues: Y,
|
|
588
|
+
circumferences: Array.from(ke.circumferences()),
|
|
589
|
+
allLoopPoints: new Float32Array(ke.all_loop_points()),
|
|
590
|
+
offsets: new Uint32Array(ke.offsets()),
|
|
591
|
+
mptY: ne,
|
|
592
|
+
originY: me
|
|
593
593
|
};
|
|
594
|
-
(_d = o.setWasmSlices) == null ? void 0 : _d.call(o,
|
|
594
|
+
(_d = o.setWasmSlices) == null ? void 0 : _d.call(o, je);
|
|
595
595
|
}
|
|
596
596
|
o.onStatus("Validating results...");
|
|
597
|
-
const
|
|
598
|
-
|
|
597
|
+
const ue = e[1].y, ge = e[0].y, pe = zo(l, ue, ge, n);
|
|
598
|
+
pe.valid || ae.warn(Fe, `Validation: ${pe.reason}`), o.setClippedReferenceGeometry ? (s.computeVertexNormals(), o.setClippedReferenceGeometry(s)) : s.dispose();
|
|
599
599
|
} catch (l) {
|
|
600
|
-
|
|
600
|
+
ae.error(Fe, "Processing failed", l), o.setError(l instanceof Error ? l.message : "Failed to process mesh."), s.dispose();
|
|
601
601
|
}
|
|
602
602
|
}
|
|
603
|
-
class
|
|
603
|
+
class Ao extends ro {
|
|
604
604
|
constructor() {
|
|
605
605
|
super(...arguments), this.state = {
|
|
606
606
|
error: null
|
|
@@ -667,7 +667,7 @@ let __tla = (async () => {
|
|
|
667
667
|
}) : this.props.children;
|
|
668
668
|
}
|
|
669
669
|
}
|
|
670
|
-
const
|
|
670
|
+
const ko = ({ message: t, onDismiss: r }) => F("div", {
|
|
671
671
|
style: {
|
|
672
672
|
position: "absolute",
|
|
673
673
|
top: 16,
|
|
@@ -720,7 +720,7 @@ let __tla = (async () => {
|
|
|
720
720
|
children: "x"
|
|
721
721
|
})
|
|
722
722
|
]
|
|
723
|
-
}),
|
|
723
|
+
}), on = ({ message: t }) => 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 Fo(t, r, n, o) {
|
|
762
762
|
const s = new z().subVectors(n, r), a = new z().subVectors(o, r), c = new z().subVectors(t, r), l = s.dot(s), e = s.dot(a), m = s.dot(c), d = a.dot(a), f = a.dot(c), u = 1 / (l * d - e * e), x = (d * m - e * f) * u, S = (l * f - e * m) * u;
|
|
763
763
|
return {
|
|
764
764
|
u: 1 - x - S,
|
|
@@ -766,8 +766,8 @@ let __tla = (async () => {
|
|
|
766
766
|
w: S
|
|
767
767
|
};
|
|
768
768
|
}
|
|
769
|
-
const
|
|
770
|
-
const { addLandmarkPoint: c, landmarkPoints: l } =
|
|
769
|
+
const Lo = ({ mesh: t, maxPoints: r = 2, meshColor: n = "#c8c8c8", meshOpacity: o = 1, frontFaceOnly: s = false, doubleShellTransparency: a = false }) => {
|
|
770
|
+
const { addLandmarkPoint: c, landmarkPoints: l } = Bt(), e = J((x) => {
|
|
771
771
|
if (l.length >= r) return;
|
|
772
772
|
x.stopPropagation();
|
|
773
773
|
const S = x.intersections[0], p = S == null ? void 0 : S.faceIndex;
|
|
@@ -785,7 +785,7 @@ let __tla = (async () => {
|
|
|
785
785
|
];
|
|
786
786
|
const P = g.getAttribute("position"), v = new z().fromBufferAttribute(P, A[0]), k = new z().fromBufferAttribute(P, A[1]), w = new z().fromBufferAttribute(P, A[2]);
|
|
787
787
|
v.applyMatrix4(t.matrixWorld), k.applyMatrix4(t.matrixWorld), w.applyMatrix4(t.matrixWorld);
|
|
788
|
-
const M = S.point, h =
|
|
788
|
+
const M = S.point, h = Fo(M, v, k, w), C = {
|
|
789
789
|
faceIndex: p,
|
|
790
790
|
vertexIndices: A,
|
|
791
791
|
position: {
|
|
@@ -803,9 +803,9 @@ let __tla = (async () => {
|
|
|
803
803
|
r
|
|
804
804
|
]), m = j(() => !!t.geometry.getAttribute("color"), [
|
|
805
805
|
t
|
|
806
|
-
]), d = a ? Math.min(o, 0.65) : o, f = d < 1, u = j(() => new
|
|
806
|
+
]), d = a ? Math.min(o, 0.65) : o, f = d < 1, u = j(() => new O.MeshStandardMaterial({
|
|
807
807
|
color: m ? "#ffffff" : n,
|
|
808
|
-
side: s ?
|
|
808
|
+
side: s ? O.FrontSide : O.DoubleSide,
|
|
809
809
|
roughness: 0.6,
|
|
810
810
|
metalness: 0.1,
|
|
811
811
|
transparent: f,
|
|
@@ -826,8 +826,8 @@ let __tla = (async () => {
|
|
|
826
826
|
material: u,
|
|
827
827
|
renderOrder: a ? 0 : void 0
|
|
828
828
|
});
|
|
829
|
-
},
|
|
830
|
-
const [a, c] =
|
|
829
|
+
}, Po = ({ point: t, index: r, markerSize: n, color: o, label: s }) => {
|
|
830
|
+
const [a, c] = W(false);
|
|
831
831
|
return F("mesh", {
|
|
832
832
|
position: [
|
|
833
833
|
t.position.x,
|
|
@@ -847,7 +847,7 @@ let __tla = (async () => {
|
|
|
847
847
|
i("meshBasicMaterial", {
|
|
848
848
|
color: o
|
|
849
849
|
}),
|
|
850
|
-
a && i(
|
|
850
|
+
a && i(He, {
|
|
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: n } =
|
|
871
|
+
}, Io = ({ modelSize: t, labels: r }) => {
|
|
872
|
+
const { landmarkPoints: n } = Bt(), o = t * 0.02, s = [
|
|
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: n.map((l, e) => i(
|
|
881
|
+
return i(Be, {
|
|
882
|
+
children: n.map((l, e) => i(Po, {
|
|
883
883
|
point: l,
|
|
884
884
|
index: e,
|
|
885
885
|
markerSize: o,
|
|
@@ -888,46 +888,46 @@ let __tla = (async () => {
|
|
|
888
888
|
}, e))
|
|
889
889
|
});
|
|
890
890
|
};
|
|
891
|
-
function
|
|
892
|
-
return j(() => t ? new
|
|
893
|
-
maxLeafTris:
|
|
891
|
+
function yn(t) {
|
|
892
|
+
return j(() => t ? new pt(t, {
|
|
893
|
+
maxLeafTris: ht
|
|
894
894
|
}) : null, [
|
|
895
895
|
t
|
|
896
896
|
]);
|
|
897
897
|
}
|
|
898
|
-
const
|
|
898
|
+
const rn = (t, r) => {
|
|
899
899
|
const n = Math.abs(t - r);
|
|
900
900
|
return n <= 7 ? "#8BC34A" : n <= 20 ? "#FFC107" : "#FF5722";
|
|
901
|
-
},
|
|
902
|
-
if (t <= 7) return
|
|
901
|
+
}, sn = new O.Color("#8BC34A"), ln = new O.Color("#FFC107"), _o = new O.Color("#FF5722"), Do = (t) => {
|
|
902
|
+
if (t <= 7) return sn.clone();
|
|
903
903
|
if (t <= 20) {
|
|
904
904
|
const n = (t - 7) / 13;
|
|
905
|
-
return
|
|
905
|
+
return sn.clone().lerp(ln, n);
|
|
906
906
|
}
|
|
907
907
|
const r = Math.min((t - 20) / 20, 1);
|
|
908
|
-
return
|
|
909
|
-
},
|
|
908
|
+
return ln.clone().lerp(_o, r);
|
|
909
|
+
}, Ro = (t, r) => {
|
|
910
910
|
const n = t.length, o = new Float32Array(n * 2 * 3), s = new Float32Array(n * 2 * 3), a = [];
|
|
911
911
|
for (let e = 0; e < n; e++) {
|
|
912
|
-
const m = t[e], d = r[e], f = m.distanceTo(d), u =
|
|
912
|
+
const m = t[e], d = r[e], f = m.distanceTo(d), u = Do(f);
|
|
913
913
|
if (o[e * 6] = m.x, o[e * 6 + 1] = m.y, o[e * 6 + 2] = m.z, s[e * 6] = u.r, s[e * 6 + 1] = u.g, s[e * 6 + 2] = u.b, o[e * 6 + 3] = d.x, o[e * 6 + 4] = d.y, o[e * 6 + 5] = d.z, s[e * 6 + 3] = u.r, s[e * 6 + 4] = u.g, s[e * 6 + 5] = u.b, e < n - 1) {
|
|
914
914
|
const x = e * 2, S = x + 1, p = (e + 1) * 2, g = p + 1;
|
|
915
915
|
a.push(x, S, p, S, g, p);
|
|
916
916
|
}
|
|
917
917
|
}
|
|
918
|
-
const c = new
|
|
919
|
-
c.setAttribute("position", new
|
|
920
|
-
const l = new
|
|
918
|
+
const c = new O.BufferGeometry();
|
|
919
|
+
c.setAttribute("position", new O.Float32BufferAttribute(o, 3)), c.setAttribute("color", new O.Float32BufferAttribute(s, 3)), c.setIndex(a);
|
|
920
|
+
const l = new O.MeshBasicMaterial({
|
|
921
921
|
vertexColors: true,
|
|
922
922
|
transparent: true,
|
|
923
923
|
opacity: 0.25,
|
|
924
|
-
side:
|
|
924
|
+
side: O.DoubleSide,
|
|
925
925
|
depthTest: false,
|
|
926
926
|
depthWrite: false
|
|
927
927
|
});
|
|
928
|
-
return new
|
|
929
|
-
},
|
|
930
|
-
const u = j(() => d && f != null ? null :
|
|
928
|
+
return new O.Mesh(c, l);
|
|
929
|
+
}, Wo = ({ bvh: t, geometry: r, yPosition: n, color: o = "#00ff00", labelX: s, onDataChange: a, displayUnit: c = "mm", useInnerSurface: l = false, formValue: e, lineWidth: m = 1.5, wasmLoopPoints: d, wasmCircumference: f }) => {
|
|
930
|
+
const u = j(() => d && f != null ? null : $e(t, r, n, l), [
|
|
931
931
|
t,
|
|
932
932
|
r,
|
|
933
933
|
n,
|
|
@@ -942,31 +942,31 @@ let __tla = (async () => {
|
|
|
942
942
|
x,
|
|
943
943
|
S,
|
|
944
944
|
e
|
|
945
|
-
]), g = j(() => !p || x.length < 2 ? null :
|
|
945
|
+
]), g = j(() => !p || x.length < 2 ? null : Ro(x, p), [
|
|
946
946
|
x,
|
|
947
947
|
p
|
|
948
948
|
]);
|
|
949
|
-
|
|
949
|
+
q(() => () => {
|
|
950
950
|
g && (g.geometry.dispose(), g.material.dispose());
|
|
951
951
|
}, [
|
|
952
952
|
g
|
|
953
953
|
]);
|
|
954
|
-
const b =
|
|
955
|
-
const P = new
|
|
956
|
-
P.setAttribute("position", new
|
|
957
|
-
const v = new
|
|
954
|
+
const b = se(null), A = j(() => {
|
|
955
|
+
const P = new O.BufferGeometry();
|
|
956
|
+
P.setAttribute("position", new O.Float32BufferAttribute(new Float32Array(6), 3));
|
|
957
|
+
const v = new O.LineBasicMaterial({
|
|
958
958
|
color: 6710886,
|
|
959
959
|
depthTest: false,
|
|
960
960
|
depthWrite: false,
|
|
961
961
|
transparent: true
|
|
962
962
|
});
|
|
963
|
-
return new
|
|
963
|
+
return new O.Line(P, v);
|
|
964
964
|
}, []);
|
|
965
|
-
return
|
|
965
|
+
return q(() => () => {
|
|
966
966
|
A.geometry.dispose(), A.material.dispose();
|
|
967
967
|
}, [
|
|
968
968
|
A
|
|
969
|
-
]),
|
|
969
|
+
]), q(() => {
|
|
970
970
|
S > 0 && (a == null ? void 0 : a({
|
|
971
971
|
yPosition: n,
|
|
972
972
|
originalValue: S,
|
|
@@ -976,7 +976,7 @@ let __tla = (async () => {
|
|
|
976
976
|
S,
|
|
977
977
|
n,
|
|
978
978
|
a
|
|
979
|
-
]),
|
|
979
|
+
]), cn(({ camera: P }) => {
|
|
980
980
|
if (!b.current || x.length < 2) return;
|
|
981
981
|
const v = new z();
|
|
982
982
|
P.getWorldDirection(v);
|
|
@@ -991,12 +991,12 @@ let __tla = (async () => {
|
|
|
991
991
|
}
|
|
992
992
|
const C = s * 0.35, L = new z(h.x + w.x * C, n, h.z + w.z * C);
|
|
993
993
|
b.current.position.copy(L);
|
|
994
|
-
const
|
|
995
|
-
|
|
994
|
+
const I = A.geometry.getAttribute("position");
|
|
995
|
+
I.setXYZ(0, h.x, h.y, h.z), I.setXYZ(1, L.x, L.y, L.z), I.needsUpdate = true;
|
|
996
996
|
}), x.length < 2 ? null : F("group", {
|
|
997
997
|
renderOrder: 10,
|
|
998
998
|
children: [
|
|
999
|
-
i(
|
|
999
|
+
i(ce, {
|
|
1000
1000
|
points: x,
|
|
1001
1001
|
color: o,
|
|
1002
1002
|
lineWidth: m,
|
|
@@ -1009,9 +1009,9 @@ let __tla = (async () => {
|
|
|
1009
1009
|
object: g,
|
|
1010
1010
|
renderOrder: 10
|
|
1011
1011
|
}),
|
|
1012
|
-
p && e != null && e !== 0 && i(
|
|
1012
|
+
p && e != null && e !== 0 && i(ce, {
|
|
1013
1013
|
points: p,
|
|
1014
|
-
color:
|
|
1014
|
+
color: rn(S, e),
|
|
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: b,
|
|
1031
|
-
children: i(
|
|
1031
|
+
children: i(He, {
|
|
1032
1032
|
zIndexRange: [
|
|
1033
1033
|
100,
|
|
1034
1034
|
0
|
|
@@ -1078,7 +1078,7 @@ let __tla = (async () => {
|
|
|
1078
1078
|
]
|
|
1079
1079
|
}),
|
|
1080
1080
|
e != null && e !== 0 && S > 0 && (() => {
|
|
1081
|
-
const P = S - e, v = P > 0.5 ? "\u25B2" : P < -0.5 ? "\u25BC" : "", k =
|
|
1081
|
+
const P = S - e, v = P > 0.5 ? "\u25B2" : P < -0.5 ? "\u25BC" : "", k = rn(S, e);
|
|
1082
1082
|
return F("div", {
|
|
1083
1083
|
style: {
|
|
1084
1084
|
display: "flex",
|
|
@@ -1130,8 +1130,8 @@ let __tla = (async () => {
|
|
|
1130
1130
|
})
|
|
1131
1131
|
]
|
|
1132
1132
|
});
|
|
1133
|
-
},
|
|
1134
|
-
const u =
|
|
1133
|
+
}, Bo = io(Wo), Eo = ({ mesh: t, startY: r, endY: n, spacing: o, modelSize: s, onMeasurementsChange: a, reverseOrder: c = false, displayUnit: l = "mm", useInnerSurface: e = false, formMeasurements: m, originY: d, wasmSlices: f }) => {
|
|
1134
|
+
const u = se(/* @__PURE__ */ new Map()), x = t.geometry, S = yn(x), p = j(() => {
|
|
1135
1135
|
if (f) {
|
|
1136
1136
|
let M = [
|
|
1137
1137
|
...f.yValues
|
|
@@ -1159,10 +1159,10 @@ let __tla = (async () => {
|
|
|
1159
1159
|
if (!f) return null;
|
|
1160
1160
|
const k = /* @__PURE__ */ new Map(), { allLoopPoints: w, offsets: M, yValues: h } = f;
|
|
1161
1161
|
for (let C = 0; C < M.length - 1; C++) {
|
|
1162
|
-
const L = M[C],
|
|
1163
|
-
if (
|
|
1162
|
+
const L = M[C], I = M[C + 1];
|
|
1163
|
+
if (I <= L) continue;
|
|
1164
1164
|
const D = [];
|
|
1165
|
-
for (let E = L; E <
|
|
1165
|
+
for (let E = L; E < I; E += 3) D.push(new z(w[E], w[E + 1], w[E + 2]));
|
|
1166
1166
|
D.length >= 3 && k.set(h[C], D);
|
|
1167
1167
|
}
|
|
1168
1168
|
return k;
|
|
@@ -1176,11 +1176,11 @@ let __tla = (async () => {
|
|
|
1176
1176
|
}, [
|
|
1177
1177
|
f
|
|
1178
1178
|
]);
|
|
1179
|
-
|
|
1179
|
+
q(() => {
|
|
1180
1180
|
u.current.clear();
|
|
1181
1181
|
}, [
|
|
1182
1182
|
p
|
|
1183
|
-
]),
|
|
1183
|
+
]), q(() => {
|
|
1184
1184
|
if (!b || !a) return;
|
|
1185
1185
|
const k = p.filter((w) => (b.get(w) ?? 0) > 0).map((w) => ({
|
|
1186
1186
|
yPosition: w,
|
|
@@ -1195,7 +1195,7 @@ let __tla = (async () => {
|
|
|
1195
1195
|
]);
|
|
1196
1196
|
const A = [
|
|
1197
1197
|
"#5B9BD5"
|
|
1198
|
-
], P = s *
|
|
1198
|
+
], P = s * go, v = J((k) => {
|
|
1199
1199
|
if (b) return;
|
|
1200
1200
|
u.current.set(k.yPosition, k);
|
|
1201
1201
|
const w = Array.from(u.current.values()).sort((M, h) => c ? h.yPosition - M.yPosition : M.yPosition - h.yPosition);
|
|
@@ -1205,8 +1205,8 @@ let __tla = (async () => {
|
|
|
1205
1205
|
c,
|
|
1206
1206
|
b
|
|
1207
1207
|
]);
|
|
1208
|
-
return S ? i(
|
|
1209
|
-
children: p.map((k, w) => i(
|
|
1208
|
+
return S ? i(Be, {
|
|
1209
|
+
children: p.map((k, w) => i(Bo, {
|
|
1210
1210
|
bvh: S,
|
|
1211
1211
|
geometry: x,
|
|
1212
1212
|
yPosition: k,
|
|
@@ -1221,15 +1221,15 @@ let __tla = (async () => {
|
|
|
1221
1221
|
wasmCircumference: b == null ? void 0 : b.get(k)
|
|
1222
1222
|
}, k))
|
|
1223
1223
|
}) : null;
|
|
1224
|
-
},
|
|
1224
|
+
}, To = (t, r) => {
|
|
1225
1225
|
const n = Math.abs(t - r);
|
|
1226
1226
|
return n <= 7 ? "#4caf50" : n <= 15 ? "#ff9800" : "#f44336";
|
|
1227
|
-
},
|
|
1227
|
+
}, Oo = ({ mesh: t, greenY: r, modelSize: n, displayUnit: o = "mm", bottomY: s, formHeight: a }) => {
|
|
1228
1228
|
var _a;
|
|
1229
1229
|
const c = t.geometry;
|
|
1230
1230
|
c.computeBoundingBox();
|
|
1231
|
-
const l = s ?? ((_a = c.boundingBox) == null ? void 0 : _a.min.y) ?? 0, e = r - l, m = n * 0.4, d = n * 0.03, f =
|
|
1232
|
-
|
|
1231
|
+
const l = s ?? ((_a = c.boundingBox) == null ? void 0 : _a.min.y) ?? 0, e = r - l, m = n * 0.4, d = n * 0.03, f = se(null);
|
|
1232
|
+
cn(({ camera: w }) => {
|
|
1233
1233
|
if (!f.current) return;
|
|
1234
1234
|
const M = new z();
|
|
1235
1235
|
w.getWorldDirection(M);
|
|
@@ -1238,14 +1238,14 @@ let __tla = (async () => {
|
|
|
1238
1238
|
h.normalize();
|
|
1239
1239
|
const C = new z().crossVectors(new z(0, 1, 0), h).normalize();
|
|
1240
1240
|
f.current.position.set(C.x * m, 0, C.z * m);
|
|
1241
|
-
const L = w.position.x - f.current.position.x,
|
|
1242
|
-
f.current.rotation.y = Math.atan2(L,
|
|
1241
|
+
const L = w.position.x - f.current.position.x, I = w.position.z - f.current.position.z;
|
|
1242
|
+
f.current.rotation.y = Math.atan2(L, I);
|
|
1243
1243
|
});
|
|
1244
|
-
const u = new z(0, r, 0), x = new z(0, l, 0), S = new z(0, (r + l) / 2, 0), p = new z(-d, r, 0), g = new z(d, r, 0), b = new z(-d, l, 0), A = new z(d, l, 0), P = a != null && a > 0, v = P ? e - a : 0, k = P ?
|
|
1244
|
+
const u = new z(0, r, 0), x = new z(0, l, 0), S = new z(0, (r + l) / 2, 0), p = new z(-d, r, 0), g = new z(d, r, 0), b = new z(-d, l, 0), A = new z(d, l, 0), P = a != null && a > 0, v = P ? e - a : 0, k = P ? To(e, a) : "#fff";
|
|
1245
1245
|
return F("group", {
|
|
1246
1246
|
ref: f,
|
|
1247
1247
|
children: [
|
|
1248
|
-
i(
|
|
1248
|
+
i(ce, {
|
|
1249
1249
|
points: [
|
|
1250
1250
|
u,
|
|
1251
1251
|
x
|
|
@@ -1253,7 +1253,7 @@ let __tla = (async () => {
|
|
|
1253
1253
|
color: "#888888",
|
|
1254
1254
|
lineWidth: 1.5
|
|
1255
1255
|
}),
|
|
1256
|
-
i(
|
|
1256
|
+
i(ce, {
|
|
1257
1257
|
points: [
|
|
1258
1258
|
p,
|
|
1259
1259
|
g
|
|
@@ -1261,7 +1261,7 @@ let __tla = (async () => {
|
|
|
1261
1261
|
color: "#888888",
|
|
1262
1262
|
lineWidth: 1.5
|
|
1263
1263
|
}),
|
|
1264
|
-
i(
|
|
1264
|
+
i(ce, {
|
|
1265
1265
|
points: [
|
|
1266
1266
|
b,
|
|
1267
1267
|
A
|
|
@@ -1271,7 +1271,7 @@ let __tla = (async () => {
|
|
|
1271
1271
|
}),
|
|
1272
1272
|
i("mesh", {
|
|
1273
1273
|
position: S,
|
|
1274
|
-
children: i(
|
|
1274
|
+
children: i(He, {
|
|
1275
1275
|
center: true,
|
|
1276
1276
|
style: {
|
|
1277
1277
|
pointerEvents: "none"
|
|
@@ -1360,26 +1360,26 @@ let __tla = (async () => {
|
|
|
1360
1360
|
})
|
|
1361
1361
|
]
|
|
1362
1362
|
});
|
|
1363
|
-
},
|
|
1364
|
-
const { set: m, size: d, camera: f, invalidate: u } =
|
|
1363
|
+
}, $o = ({ modelSize: t, isAligned: r, isCut: n, mesh: o, viewMode: s, sliceY: a, landmarkCount: c = 0, measurementGeometry: l, resetCameraToFrontRef: e }) => {
|
|
1364
|
+
const { set: m, size: d, camera: f, invalidate: u } = dn(), x = se(false), S = se(s), p = se(new z()), g = se(null), b = se(c), A = se(r), P = se(n), v = se(l), k = se(0), w = J(() => {
|
|
1365
1365
|
if (!o || t <= 0) return null;
|
|
1366
1366
|
const h = l ?? o.geometry;
|
|
1367
1367
|
h.computeBoundingBox();
|
|
1368
1368
|
const C = h.boundingBox, L = new z();
|
|
1369
1369
|
C.getCenter(L);
|
|
1370
|
-
const
|
|
1371
|
-
C.getSize(
|
|
1372
|
-
const D = d.width / d.height, E = Math.max(
|
|
1373
|
-
k.current =
|
|
1374
|
-
const Q = new
|
|
1375
|
-
return Q.position.set(0,
|
|
1370
|
+
const I = new z();
|
|
1371
|
+
C.getSize(I), p.current.copy(I);
|
|
1372
|
+
const D = d.width / d.height, E = Math.max(I.y, I.x / D) * 1.6, V = E * D, G = L.y - I.y * 0.05;
|
|
1373
|
+
k.current = G;
|
|
1374
|
+
const Q = new O.OrthographicCamera(-V / 2, V / 2, E / 2, -E / 2, 0.1, t * 10);
|
|
1375
|
+
return Q.position.set(0, G, t * 2), Q.lookAt(0, G, 0), Q;
|
|
1376
1376
|
}, [
|
|
1377
1377
|
o,
|
|
1378
1378
|
t,
|
|
1379
1379
|
d,
|
|
1380
1380
|
l
|
|
1381
1381
|
]);
|
|
1382
|
-
|
|
1382
|
+
q(() => {
|
|
1383
1383
|
if (e) return e.current = () => {
|
|
1384
1384
|
const h = w();
|
|
1385
1385
|
h && (m({
|
|
@@ -1395,15 +1395,15 @@ let __tla = (async () => {
|
|
|
1395
1395
|
u
|
|
1396
1396
|
]);
|
|
1397
1397
|
const M = J((h) => {
|
|
1398
|
-
const C = h.position.clone(), L = C.length(),
|
|
1398
|
+
const C = h.position.clone(), L = C.length(), I = Math.atan2(C.x, C.z), D = Math.acos(C.y / L), V = I + 0.02;
|
|
1399
1399
|
h.position.set(L * Math.sin(D) * Math.sin(V), L * Math.cos(D), L * Math.sin(D) * Math.cos(V)), h.lookAt(0, 0, 0), h.updateMatrixWorld(true), u();
|
|
1400
1400
|
}, [
|
|
1401
1401
|
u
|
|
1402
1402
|
]);
|
|
1403
|
-
return
|
|
1403
|
+
return q(() => {
|
|
1404
1404
|
if (t > 0 && !x.current && !r) {
|
|
1405
1405
|
x.current = true;
|
|
1406
|
-
const h = new
|
|
1406
|
+
const h = new O.PerspectiveCamera(50, d.width / d.height, 0.1, t * 10);
|
|
1407
1407
|
h.position.set(t * 0.3, t * 0.2, t * 1.5), h.lookAt(0, 0, 0), m({
|
|
1408
1408
|
camera: h
|
|
1409
1409
|
}), requestAnimationFrame(() => M(h));
|
|
@@ -1414,7 +1414,7 @@ let __tla = (async () => {
|
|
|
1414
1414
|
m,
|
|
1415
1415
|
r,
|
|
1416
1416
|
M
|
|
1417
|
-
]),
|
|
1417
|
+
]), q(() => {
|
|
1418
1418
|
const h = b.current;
|
|
1419
1419
|
b.current = c, h === 0 && c === 1 && !r && requestAnimationFrame(() => M(f));
|
|
1420
1420
|
}, [
|
|
@@ -1422,12 +1422,12 @@ let __tla = (async () => {
|
|
|
1422
1422
|
r,
|
|
1423
1423
|
f,
|
|
1424
1424
|
M
|
|
1425
|
-
]),
|
|
1425
|
+
]), q(() => {
|
|
1426
1426
|
const h = A.current !== r, C = P.current !== n, L = !v.current && !!l;
|
|
1427
1427
|
if (A.current = r, P.current = n, v.current = l, !h && !C && !L || !r || s !== "3D") return;
|
|
1428
|
-
const
|
|
1429
|
-
|
|
1430
|
-
camera:
|
|
1428
|
+
const I = w();
|
|
1429
|
+
I && m({
|
|
1430
|
+
camera: I
|
|
1431
1431
|
});
|
|
1432
1432
|
}, [
|
|
1433
1433
|
r,
|
|
@@ -1436,29 +1436,29 @@ let __tla = (async () => {
|
|
|
1436
1436
|
l,
|
|
1437
1437
|
w,
|
|
1438
1438
|
m
|
|
1439
|
-
]),
|
|
1439
|
+
]), q(() => {
|
|
1440
1440
|
if (S.current === s) return;
|
|
1441
1441
|
const h = S.current;
|
|
1442
1442
|
if (S.current = s, !(!r || !o || t <= 0)) {
|
|
1443
1443
|
if (s === "2D" && a != null) {
|
|
1444
1444
|
g.current = f;
|
|
1445
|
-
const C = o.geometry, L = C.getAttribute("position"),
|
|
1446
|
-
let E = 1 / 0, V = -1 / 0,
|
|
1447
|
-
for (let
|
|
1448
|
-
const H =
|
|
1449
|
-
H < E && (E = H), H > V && (V = H),
|
|
1445
|
+
const C = o.geometry, L = C.getAttribute("position"), I = L.array, D = t * 0.15;
|
|
1446
|
+
let E = 1 / 0, V = -1 / 0, G = 1 / 0, Q = -1 / 0, xe = false;
|
|
1447
|
+
for (let pe = 0; pe < L.count; pe++) if (Math.abs(I[pe * 3 + 1] - a) < D) {
|
|
1448
|
+
const H = I[pe * 3], ne = I[pe * 3 + 2];
|
|
1449
|
+
H < E && (E = H), H > V && (V = H), ne < G && (G = ne), ne > Q && (Q = ne), xe = true;
|
|
1450
1450
|
}
|
|
1451
|
-
if (!
|
|
1451
|
+
if (!xe) {
|
|
1452
1452
|
C.computeBoundingBox();
|
|
1453
|
-
const
|
|
1454
|
-
E =
|
|
1453
|
+
const pe = C.boundingBox;
|
|
1454
|
+
E = pe.min.x, V = pe.max.x, G = pe.min.z, Q = pe.max.z;
|
|
1455
1455
|
}
|
|
1456
|
-
const
|
|
1457
|
-
let Z,
|
|
1458
|
-
X /
|
|
1459
|
-
const
|
|
1460
|
-
|
|
1461
|
-
camera:
|
|
1456
|
+
const le = (E + V) / 2, de = (G + Q) / 2, re = d.width / d.height, ee = 1.4, X = (V - E) * ee, fe = (Q - G) * ee;
|
|
1457
|
+
let Z, ue;
|
|
1458
|
+
X / fe > re ? (Z = X, ue = X / re) : (ue = fe, Z = fe * re);
|
|
1459
|
+
const ge = new O.OrthographicCamera(-Z / 2, Z / 2, ue / 2, -ue / 2, 0.1, t * 10);
|
|
1460
|
+
ge.position.set(le, a + t * 2, de), ge.up.set(0, 0, -1), ge.lookAt(le, a, de), m({
|
|
1461
|
+
camera: ge
|
|
1462
1462
|
});
|
|
1463
1463
|
} else if (h === "2D") if (g.current) m({
|
|
1464
1464
|
camera: g.current
|
|
@@ -1480,28 +1480,28 @@ let __tla = (async () => {
|
|
|
1480
1480
|
m,
|
|
1481
1481
|
f,
|
|
1482
1482
|
w
|
|
1483
|
-
]),
|
|
1483
|
+
]), q(() => {
|
|
1484
1484
|
if (!r || !f || !f.isOrthographicCamera) return;
|
|
1485
1485
|
const h = f;
|
|
1486
1486
|
if (s === "2D") {
|
|
1487
1487
|
if (!o || a == null) return;
|
|
1488
|
-
const C = o.geometry, L = C.getAttribute("position"),
|
|
1489
|
-
let E = 1 / 0, V = -1 / 0,
|
|
1490
|
-
for (let Z = 0; Z < L.count; Z++) if (Math.abs(
|
|
1491
|
-
const
|
|
1492
|
-
|
|
1488
|
+
const C = o.geometry, L = C.getAttribute("position"), I = L.array, D = t * 0.15;
|
|
1489
|
+
let E = 1 / 0, V = -1 / 0, G = 1 / 0, Q = -1 / 0, xe = false;
|
|
1490
|
+
for (let Z = 0; Z < L.count; Z++) if (Math.abs(I[Z * 3 + 1] - a) < D) {
|
|
1491
|
+
const ue = I[Z * 3], ge = I[Z * 3 + 2];
|
|
1492
|
+
ue < E && (E = ue), ue > V && (V = ue), ge < G && (G = ge), ge > Q && (Q = ge), xe = true;
|
|
1493
1493
|
}
|
|
1494
|
-
if (!
|
|
1494
|
+
if (!xe) {
|
|
1495
1495
|
C.computeBoundingBox();
|
|
1496
1496
|
const Z = C.boundingBox;
|
|
1497
|
-
E = Z.min.x, V = Z.max.x,
|
|
1497
|
+
E = Z.min.x, V = Z.max.x, G = Z.min.z, Q = Z.max.z;
|
|
1498
1498
|
}
|
|
1499
|
-
const
|
|
1500
|
-
let X,
|
|
1501
|
-
|
|
1499
|
+
const le = d.width / d.height, de = 1.4, re = (V - E) * de, ee = (Q - G) * de;
|
|
1500
|
+
let X, fe;
|
|
1501
|
+
re / ee > le ? (X = re, fe = re / le) : (fe = ee, X = ee * le), h.left = -X / 2, h.right = X / 2, h.top = fe / 2, h.bottom = -fe / 2;
|
|
1502
1502
|
} else {
|
|
1503
|
-
const C = p.current, L = d.width / d.height,
|
|
1504
|
-
h.left = -D / 2, h.right = D / 2, h.top =
|
|
1503
|
+
const C = p.current, L = d.width / d.height, I = Math.max(C.y, C.x / L) * 1.6, D = I * L;
|
|
1504
|
+
h.left = -D / 2, h.right = D / 2, h.top = I / 2, h.bottom = -I / 2;
|
|
1505
1505
|
}
|
|
1506
1506
|
h.updateProjectionMatrix();
|
|
1507
1507
|
}, [
|
|
@@ -1512,12 +1512,12 @@ let __tla = (async () => {
|
|
|
1512
1512
|
s,
|
|
1513
1513
|
o
|
|
1514
1514
|
]), null;
|
|
1515
|
-
},
|
|
1515
|
+
}, Ho = ({ mesh: t, isDragging: r }) => {
|
|
1516
1516
|
var _a;
|
|
1517
1517
|
const n = t.geometry;
|
|
1518
1518
|
n.computeBoundingBox();
|
|
1519
1519
|
const o = new z();
|
|
1520
|
-
return (_a = n.boundingBox) == null ? void 0 : _a.getCenter(o), i(
|
|
1520
|
+
return (_a = n.boundingBox) == null ? void 0 : _a.getCenter(o), i(fn, {
|
|
1521
1521
|
enableDamping: false,
|
|
1522
1522
|
enablePan: false,
|
|
1523
1523
|
minPolarAngle: Math.PI * 0.15,
|
|
@@ -1531,7 +1531,7 @@ let __tla = (async () => {
|
|
|
1531
1531
|
o.z
|
|
1532
1532
|
]
|
|
1533
1533
|
});
|
|
1534
|
-
},
|
|
1534
|
+
}, jo = ({ wasAutoScaled: t, onDismiss: r }) => F("div", {
|
|
1535
1535
|
style: {
|
|
1536
1536
|
position: "absolute",
|
|
1537
1537
|
bottom: 16,
|
|
@@ -1572,7 +1572,7 @@ let __tla = (async () => {
|
|
|
1572
1572
|
children: "X"
|
|
1573
1573
|
})
|
|
1574
1574
|
]
|
|
1575
|
-
}),
|
|
1575
|
+
}), Vo = ({ isDoubleShell: t, onDismiss: r }) => F("div", {
|
|
1576
1576
|
style: {
|
|
1577
1577
|
position: "absolute",
|
|
1578
1578
|
bottom: 68,
|
|
@@ -1613,7 +1613,7 @@ let __tla = (async () => {
|
|
|
1613
1613
|
children: "X"
|
|
1614
1614
|
})
|
|
1615
1615
|
]
|
|
1616
|
-
}),
|
|
1616
|
+
}), No = ({ steps: t, currentStep: r, accentColor: n = "rgb(12, 67, 173)" }) => i("div", {
|
|
1617
1617
|
style: {
|
|
1618
1618
|
backgroundColor: "#fff",
|
|
1619
1619
|
borderBottom: "1px solid #e0e0e0",
|
|
@@ -1677,16 +1677,16 @@ let __tla = (async () => {
|
|
|
1677
1677
|
]
|
|
1678
1678
|
}, o.number);
|
|
1679
1679
|
})
|
|
1680
|
-
}),
|
|
1681
|
-
const c = t.geometry, l = j(() => new
|
|
1682
|
-
maxLeafTris:
|
|
1680
|
+
}), Yo = ({ mesh: t, upperY: r, originY: n, modelSize: o, meshColor: s = "#c8c8c8", displayUnit: a = "mm" }) => {
|
|
1681
|
+
const c = t.geometry, l = j(() => new pt(c, {
|
|
1682
|
+
maxLeafTris: ht
|
|
1683
1683
|
}), [
|
|
1684
1684
|
c
|
|
1685
|
-
]), e = j(() =>
|
|
1685
|
+
]), e = j(() => $e(l, c, n), [
|
|
1686
1686
|
l,
|
|
1687
1687
|
c,
|
|
1688
1688
|
n
|
|
1689
|
-
]), m = j(() => new
|
|
1689
|
+
]), m = j(() => new ut(new z(0, -1, 0), r), [
|
|
1690
1690
|
r
|
|
1691
1691
|
]), { mlLine: d, apLine: f, mlWidth: u, apWidth: x } = j(() => {
|
|
1692
1692
|
let g = null, b = null, A = 0, P = 0;
|
|
@@ -1711,13 +1711,13 @@ let __tla = (async () => {
|
|
|
1711
1711
|
e,
|
|
1712
1712
|
n
|
|
1713
1713
|
]), S = (g) => a === "inch" ? (g / 25.4).toFixed(2) : g.toFixed(1), p = a === "inch" ? "in" : "mm";
|
|
1714
|
-
return F(
|
|
1714
|
+
return F(Be, {
|
|
1715
1715
|
children: [
|
|
1716
1716
|
i("mesh", {
|
|
1717
1717
|
geometry: t.geometry,
|
|
1718
1718
|
children: i("meshStandardMaterial", {
|
|
1719
1719
|
color: s,
|
|
1720
|
-
side:
|
|
1720
|
+
side: O.DoubleSide,
|
|
1721
1721
|
transparent: true,
|
|
1722
1722
|
opacity: 0.15,
|
|
1723
1723
|
depthWrite: false,
|
|
@@ -1726,7 +1726,7 @@ let __tla = (async () => {
|
|
|
1726
1726
|
]
|
|
1727
1727
|
})
|
|
1728
1728
|
}),
|
|
1729
|
-
e.linePoints.length >= 2 && i(
|
|
1729
|
+
e.linePoints.length >= 2 && i(ce, {
|
|
1730
1730
|
points: e.linePoints,
|
|
1731
1731
|
color: "#00ff00",
|
|
1732
1732
|
lineWidth: 3,
|
|
@@ -1734,9 +1734,9 @@ let __tla = (async () => {
|
|
|
1734
1734
|
depthWrite: false,
|
|
1735
1735
|
transparent: true
|
|
1736
1736
|
}),
|
|
1737
|
-
d && F(
|
|
1737
|
+
d && F(Be, {
|
|
1738
1738
|
children: [
|
|
1739
|
-
i(
|
|
1739
|
+
i(ce, {
|
|
1740
1740
|
points: d,
|
|
1741
1741
|
color: "#ff8800",
|
|
1742
1742
|
lineWidth: 2,
|
|
@@ -1744,7 +1744,7 @@ let __tla = (async () => {
|
|
|
1744
1744
|
depthWrite: false,
|
|
1745
1745
|
transparent: true
|
|
1746
1746
|
}),
|
|
1747
|
-
i(
|
|
1747
|
+
i(He, {
|
|
1748
1748
|
position: [
|
|
1749
1749
|
d[0].x,
|
|
1750
1750
|
n,
|
|
@@ -1778,9 +1778,9 @@ let __tla = (async () => {
|
|
|
1778
1778
|
})
|
|
1779
1779
|
]
|
|
1780
1780
|
}),
|
|
1781
|
-
f && F(
|
|
1781
|
+
f && F(Be, {
|
|
1782
1782
|
children: [
|
|
1783
|
-
i(
|
|
1783
|
+
i(ce, {
|
|
1784
1784
|
points: f,
|
|
1785
1785
|
color: "#ff00ff",
|
|
1786
1786
|
lineWidth: 2,
|
|
@@ -1788,7 +1788,7 @@ let __tla = (async () => {
|
|
|
1788
1788
|
depthWrite: false,
|
|
1789
1789
|
transparent: true
|
|
1790
1790
|
}),
|
|
1791
|
-
i(
|
|
1791
|
+
i(He, {
|
|
1792
1792
|
position: [
|
|
1793
1793
|
Math.max(f[0].x, f[1].x) + o * 0.02,
|
|
1794
1794
|
n,
|
|
@@ -1824,8 +1824,8 @@ let __tla = (async () => {
|
|
|
1824
1824
|
})
|
|
1825
1825
|
]
|
|
1826
1826
|
});
|
|
1827
|
-
},
|
|
1828
|
-
const [u, x] =
|
|
1827
|
+
}, Go = ({ mesh: t, yPosition: r, onYChange: n, minY: o, maxY: s, modelSize: a, color: c, hoverColor: l, dragColor: e, label: m, onDragStart: d, onDragEnd: f }) => {
|
|
1828
|
+
const [u, x] = W(false), [S, p] = W(false), { camera: g, gl: b } = dn(), A = se(0), P = t.geometry, v = yn(P), k = j(() => v ? $e(v, P, r) : {
|
|
1829
1829
|
linePoints: [],
|
|
1830
1830
|
lineLength: 0,
|
|
1831
1831
|
rightmostPoint: new z()
|
|
@@ -1833,25 +1833,25 @@ let __tla = (async () => {
|
|
|
1833
1833
|
v,
|
|
1834
1834
|
P,
|
|
1835
1835
|
r
|
|
1836
|
-
]), w = J((
|
|
1837
|
-
const E = b.domElement.getBoundingClientRect(), V = (
|
|
1838
|
-
Q.setFromCamera(new
|
|
1839
|
-
const
|
|
1840
|
-
return Q.ray.intersectPlane(
|
|
1836
|
+
]), w = J((I, D) => {
|
|
1837
|
+
const E = b.domElement.getBoundingClientRect(), V = (I - E.left) / E.width * 2 - 1, G = -((D - E.top) / E.height) * 2 + 1, Q = new ao();
|
|
1838
|
+
Q.setFromCamera(new O.Vector2(V, G), g);
|
|
1839
|
+
const xe = new ut(new z(0, 0, 1), 0), le = new z();
|
|
1840
|
+
return Q.ray.intersectPlane(xe, le), le ? le.y : r;
|
|
1841
1841
|
}, [
|
|
1842
1842
|
g,
|
|
1843
1843
|
b,
|
|
1844
1844
|
r
|
|
1845
|
-
]), M = J((
|
|
1846
|
-
|
|
1845
|
+
]), M = J((I) => {
|
|
1846
|
+
I.stopPropagation(), x(true), b.domElement.style.cursor = "ns-resize", A.current = r - w(I.clientX, I.clientY), I.target.setPointerCapture(I.pointerId), d == null ? void 0 : d();
|
|
1847
1847
|
}, [
|
|
1848
1848
|
r,
|
|
1849
1849
|
b,
|
|
1850
1850
|
w,
|
|
1851
1851
|
d
|
|
1852
|
-
]), h = J((
|
|
1852
|
+
]), h = J((I) => {
|
|
1853
1853
|
if (!u) return;
|
|
1854
|
-
let D = w(
|
|
1854
|
+
let D = w(I.clientX, I.clientY) + A.current;
|
|
1855
1855
|
D = Math.max(o, Math.min(s, D)), n(D);
|
|
1856
1856
|
}, [
|
|
1857
1857
|
u,
|
|
@@ -1859,8 +1859,8 @@ let __tla = (async () => {
|
|
|
1859
1859
|
n,
|
|
1860
1860
|
o,
|
|
1861
1861
|
s
|
|
1862
|
-
]), C = J((
|
|
1863
|
-
x(false), b.domElement.style.cursor = "auto",
|
|
1862
|
+
]), C = J((I) => {
|
|
1863
|
+
x(false), b.domElement.style.cursor = "auto", I.target.releasePointerCapture(I.pointerId), f == null ? void 0 : f();
|
|
1864
1864
|
}, [
|
|
1865
1865
|
b,
|
|
1866
1866
|
f
|
|
@@ -1870,7 +1870,7 @@ let __tla = (async () => {
|
|
|
1870
1870
|
return F("group", {
|
|
1871
1871
|
renderOrder: 10,
|
|
1872
1872
|
children: [
|
|
1873
|
-
i(
|
|
1873
|
+
i(ce, {
|
|
1874
1874
|
points: k.linePoints,
|
|
1875
1875
|
color: L,
|
|
1876
1876
|
lineWidth: u ? 6 : S ? 5 : 4,
|
|
@@ -1894,7 +1894,7 @@ let __tla = (async () => {
|
|
|
1894
1894
|
r,
|
|
1895
1895
|
0
|
|
1896
1896
|
],
|
|
1897
|
-
children: i(
|
|
1897
|
+
children: i(He, {
|
|
1898
1898
|
center: true,
|
|
1899
1899
|
children: i("div", {
|
|
1900
1900
|
style: {
|
|
@@ -1913,17 +1913,17 @@ let __tla = (async () => {
|
|
|
1913
1913
|
]
|
|
1914
1914
|
});
|
|
1915
1915
|
};
|
|
1916
|
-
function
|
|
1916
|
+
function Xo(t, r) {
|
|
1917
1917
|
if (t == null) return {};
|
|
1918
1918
|
var n = {}, o = Object.keys(t), s, a;
|
|
1919
1919
|
for (a = 0; a < o.length; a++) s = o[a], !(r.indexOf(s) >= 0) && (n[s] = t[s]);
|
|
1920
1920
|
return n;
|
|
1921
1921
|
}
|
|
1922
|
-
var
|
|
1922
|
+
var Zo = [
|
|
1923
1923
|
"color"
|
|
1924
|
-
],
|
|
1925
|
-
var n = t.color, o = n === void 0 ? "currentColor" : n, s =
|
|
1926
|
-
return
|
|
1924
|
+
], Ko = so(function(t, r) {
|
|
1925
|
+
var n = t.color, o = n === void 0 ? "currentColor" : n, s = Xo(t, Zo);
|
|
1926
|
+
return en("svg", Object.assign({
|
|
1927
1927
|
width: "15",
|
|
1928
1928
|
height: "15",
|
|
1929
1929
|
viewBox: "0 0 15 15",
|
|
@@ -1931,20 +1931,20 @@ let __tla = (async () => {
|
|
|
1931
1931
|
xmlns: "http://www.w3.org/2000/svg"
|
|
1932
1932
|
}, s, {
|
|
1933
1933
|
ref: r
|
|
1934
|
-
}),
|
|
1934
|
+
}), en("path", {
|
|
1935
1935
|
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",
|
|
1936
1936
|
fill: o,
|
|
1937
1937
|
fillRule: "evenodd",
|
|
1938
1938
|
clipRule: "evenodd"
|
|
1939
1939
|
}));
|
|
1940
1940
|
});
|
|
1941
|
-
const
|
|
1941
|
+
const qo = [
|
|
1942
1942
|
"Scan doesn't load properly",
|
|
1943
1943
|
"Takes too long",
|
|
1944
1944
|
"I don't want to",
|
|
1945
1945
|
"I want a second opinion",
|
|
1946
1946
|
"I measured from IT"
|
|
1947
|
-
],
|
|
1947
|
+
], at = {
|
|
1948
1948
|
padding: "8px 20px",
|
|
1949
1949
|
borderRadius: 4,
|
|
1950
1950
|
fontSize: 14,
|
|
@@ -1953,7 +1953,7 @@ let __tla = (async () => {
|
|
|
1953
1953
|
fontFamily: "system-ui, sans-serif",
|
|
1954
1954
|
letterSpacing: "0.4px",
|
|
1955
1955
|
lineHeight: "36px"
|
|
1956
|
-
},
|
|
1956
|
+
}, Uo = {
|
|
1957
1957
|
width: "100%",
|
|
1958
1958
|
padding: "10px 12px",
|
|
1959
1959
|
fontSize: 15,
|
|
@@ -1962,8 +1962,8 @@ let __tla = (async () => {
|
|
|
1962
1962
|
outline: "none",
|
|
1963
1963
|
boxSizing: "border-box",
|
|
1964
1964
|
fontFamily: "system-ui, sans-serif"
|
|
1965
|
-
},
|
|
1966
|
-
const [n, o] =
|
|
1965
|
+
}, wn = ({ onSkip: t, onCancel: r }) => {
|
|
1966
|
+
const [n, o] = W("confirm"), [s, a] = W(null), [c, l] = W(""), e = J(() => {
|
|
1967
1967
|
o("reasons");
|
|
1968
1968
|
}, []), m = J(() => {
|
|
1969
1969
|
n === "reasons" ? (o("confirm"), a(null), l("")) : r();
|
|
@@ -2031,7 +2031,7 @@ let __tla = (async () => {
|
|
|
2031
2031
|
},
|
|
2032
2032
|
children: [
|
|
2033
2033
|
[
|
|
2034
|
-
...
|
|
2034
|
+
...qo,
|
|
2035
2035
|
"Other"
|
|
2036
2036
|
].map((u) => F("label", {
|
|
2037
2037
|
style: {
|
|
@@ -2078,7 +2078,7 @@ let __tla = (async () => {
|
|
|
2078
2078
|
u.key === "Enter" && f();
|
|
2079
2079
|
},
|
|
2080
2080
|
style: {
|
|
2081
|
-
...
|
|
2081
|
+
...Uo,
|
|
2082
2082
|
marginTop: 8,
|
|
2083
2083
|
marginLeft: 40,
|
|
2084
2084
|
width: "calc(100% - 40px)",
|
|
@@ -2099,7 +2099,7 @@ let __tla = (async () => {
|
|
|
2099
2099
|
i("button", {
|
|
2100
2100
|
onClick: m,
|
|
2101
2101
|
style: {
|
|
2102
|
-
...
|
|
2102
|
+
...at,
|
|
2103
2103
|
backgroundColor: "#fff",
|
|
2104
2104
|
border: "1px solid #ddd",
|
|
2105
2105
|
color: "#666"
|
|
@@ -2110,7 +2110,7 @@ let __tla = (async () => {
|
|
|
2110
2110
|
onClick: f,
|
|
2111
2111
|
disabled: !d,
|
|
2112
2112
|
style: {
|
|
2113
|
-
...
|
|
2113
|
+
...at,
|
|
2114
2114
|
backgroundColor: d ? "rgb(12, 67, 173)" : "#e0e0e0",
|
|
2115
2115
|
border: "none",
|
|
2116
2116
|
color: d ? "#fff" : "#9e9e9e",
|
|
@@ -2171,7 +2171,7 @@ let __tla = (async () => {
|
|
|
2171
2171
|
i("button", {
|
|
2172
2172
|
onClick: r,
|
|
2173
2173
|
style: {
|
|
2174
|
-
...
|
|
2174
|
+
...at,
|
|
2175
2175
|
backgroundColor: "#fff",
|
|
2176
2176
|
border: "1px solid #bdbdbd",
|
|
2177
2177
|
color: "#333"
|
|
@@ -2181,7 +2181,7 @@ let __tla = (async () => {
|
|
|
2181
2181
|
i("button", {
|
|
2182
2182
|
onClick: e,
|
|
2183
2183
|
style: {
|
|
2184
|
-
...
|
|
2184
|
+
...at,
|
|
2185
2185
|
backgroundColor: "rgb(12, 67, 173)",
|
|
2186
2186
|
border: "none",
|
|
2187
2187
|
color: "#fff"
|
|
@@ -2193,7 +2193,7 @@ let __tla = (async () => {
|
|
|
2193
2193
|
]
|
|
2194
2194
|
})
|
|
2195
2195
|
});
|
|
2196
|
-
},
|
|
2196
|
+
}, Dt = {
|
|
2197
2197
|
padding: "8px 20px",
|
|
2198
2198
|
borderRadius: 4,
|
|
2199
2199
|
fontSize: 14,
|
|
@@ -2202,7 +2202,7 @@ let __tla = (async () => {
|
|
|
2202
2202
|
fontFamily: "system-ui, sans-serif",
|
|
2203
2203
|
letterSpacing: "0.4px",
|
|
2204
2204
|
lineHeight: "36px"
|
|
2205
|
-
},
|
|
2205
|
+
}, an = {
|
|
2206
2206
|
width: "100%",
|
|
2207
2207
|
padding: "10px 12px",
|
|
2208
2208
|
fontSize: 15,
|
|
@@ -2211,7 +2211,7 @@ let __tla = (async () => {
|
|
|
2211
2211
|
outline: "none",
|
|
2212
2212
|
boxSizing: "border-box",
|
|
2213
2213
|
fontFamily: "system-ui, sans-serif"
|
|
2214
|
-
},
|
|
2214
|
+
}, Jo = ({ amputationType: t, spacingInches: r, scanMeasurements: n, scanFrontalHeight: o, onSave: s, onSkip: a, onFormChange: c, onHeightChange: l, initialValues: e, initialFrontalHeight: m }) => {
|
|
2215
2215
|
const d = t === "AK" ? "IT" : "MPT", f = r, u = t === "AK" ? 18 : 9, x = j(() => {
|
|
2216
2216
|
const h = [];
|
|
2217
2217
|
for (let C = 2; C >= 1; C -= f) h.push(`${C}\u2033 above ${d}`);
|
|
@@ -2222,25 +2222,25 @@ let __tla = (async () => {
|
|
|
2222
2222
|
f,
|
|
2223
2223
|
d,
|
|
2224
2224
|
u
|
|
2225
|
-
]), [S, p] =
|
|
2225
|
+
]), [S, p] = W(() => {
|
|
2226
2226
|
if (!e) return {};
|
|
2227
2227
|
const h = {};
|
|
2228
2228
|
return x.forEach((C, L) => {
|
|
2229
2229
|
e[L] != null && e[L] !== 0 && (h[C] = e[L].toFixed(1));
|
|
2230
2230
|
}), h;
|
|
2231
|
-
}), [g, b] =
|
|
2231
|
+
}), [g, b] = W(m && m > 0 ? m.toFixed(1) : ""), [A, P] = W(false), v = j(() => x.map((h) => {
|
|
2232
2232
|
const C = S[h];
|
|
2233
2233
|
return C != null && C !== "" && !isNaN(parseFloat(C)) ? parseFloat(C) : 0;
|
|
2234
2234
|
}), [
|
|
2235
2235
|
x,
|
|
2236
2236
|
S
|
|
2237
2237
|
]);
|
|
2238
|
-
|
|
2238
|
+
q(() => {
|
|
2239
2239
|
c == null ? void 0 : c(v);
|
|
2240
2240
|
}, [
|
|
2241
2241
|
v,
|
|
2242
2242
|
c
|
|
2243
|
-
]),
|
|
2243
|
+
]), q(() => {
|
|
2244
2244
|
const h = g !== "" && !isNaN(parseFloat(g)) ? parseFloat(g) : void 0;
|
|
2245
2245
|
l == null ? void 0 : l(h);
|
|
2246
2246
|
}, [
|
|
@@ -2268,9 +2268,9 @@ let __tla = (async () => {
|
|
|
2268
2268
|
]), M = J(() => {
|
|
2269
2269
|
const h = {};
|
|
2270
2270
|
x.forEach((C, L) => {
|
|
2271
|
-
const
|
|
2272
|
-
if (
|
|
2273
|
-
const D =
|
|
2271
|
+
const I = n[L];
|
|
2272
|
+
if (I) {
|
|
2273
|
+
const D = I.modifiedValue ?? I.originalValue;
|
|
2274
2274
|
h[C] = D.toFixed(1);
|
|
2275
2275
|
}
|
|
2276
2276
|
}), p(h), o > 0 && b(o.toFixed(1));
|
|
@@ -2288,7 +2288,7 @@ let __tla = (async () => {
|
|
|
2288
2288
|
fontFamily: "system-ui, sans-serif"
|
|
2289
2289
|
},
|
|
2290
2290
|
children: [
|
|
2291
|
-
A && i(
|
|
2291
|
+
A && i(wn, {
|
|
2292
2292
|
onSkip: a,
|
|
2293
2293
|
onCancel: () => P(false)
|
|
2294
2294
|
}),
|
|
@@ -2327,7 +2327,7 @@ let __tla = (async () => {
|
|
|
2327
2327
|
i("button", {
|
|
2328
2328
|
onClick: M,
|
|
2329
2329
|
style: {
|
|
2330
|
-
...
|
|
2330
|
+
...Dt,
|
|
2331
2331
|
backgroundColor: "#fff",
|
|
2332
2332
|
border: "2px solid rgb(12, 67, 173)",
|
|
2333
2333
|
color: "rgb(12, 67, 173)",
|
|
@@ -2345,7 +2345,7 @@ let __tla = (async () => {
|
|
|
2345
2345
|
gap: 4
|
|
2346
2346
|
},
|
|
2347
2347
|
children: [
|
|
2348
|
-
i(
|
|
2348
|
+
i(Ko, {
|
|
2349
2349
|
style: {
|
|
2350
2350
|
width: 14,
|
|
2351
2351
|
height: 14
|
|
@@ -2403,12 +2403,12 @@ let __tla = (async () => {
|
|
|
2403
2403
|
type: "number",
|
|
2404
2404
|
step: "0.1",
|
|
2405
2405
|
value: S[h] ?? "",
|
|
2406
|
-
onChange: (L) => p((
|
|
2407
|
-
...
|
|
2406
|
+
onChange: (L) => p((I) => ({
|
|
2407
|
+
...I,
|
|
2408
2408
|
[h]: L.target.value
|
|
2409
2409
|
})),
|
|
2410
2410
|
style: {
|
|
2411
|
-
...
|
|
2411
|
+
...an,
|
|
2412
2412
|
padding: "6px 8px",
|
|
2413
2413
|
fontSize: 13,
|
|
2414
2414
|
borderColor: S[h] ? "rgb(12, 67, 173)" : "#ccc",
|
|
@@ -2451,7 +2451,7 @@ let __tla = (async () => {
|
|
|
2451
2451
|
value: g,
|
|
2452
2452
|
onChange: (h) => b(h.target.value),
|
|
2453
2453
|
style: {
|
|
2454
|
-
...
|
|
2454
|
+
...an,
|
|
2455
2455
|
padding: "6px 8px",
|
|
2456
2456
|
fontSize: 13,
|
|
2457
2457
|
borderColor: g ? "rgb(12, 67, 173)" : "#ccc",
|
|
@@ -2478,7 +2478,7 @@ let __tla = (async () => {
|
|
|
2478
2478
|
onClick: w,
|
|
2479
2479
|
disabled: !k,
|
|
2480
2480
|
style: {
|
|
2481
|
-
...
|
|
2481
|
+
...Dt,
|
|
2482
2482
|
backgroundColor: k ? "rgb(12, 67, 173)" : "#e0e0e0",
|
|
2483
2483
|
border: "none",
|
|
2484
2484
|
color: k ? "#fff" : "#9e9e9e",
|
|
@@ -2492,7 +2492,7 @@ let __tla = (async () => {
|
|
|
2492
2492
|
i("button", {
|
|
2493
2493
|
onClick: () => P(true),
|
|
2494
2494
|
style: {
|
|
2495
|
-
...
|
|
2495
|
+
...Dt,
|
|
2496
2496
|
backgroundColor: "#fff",
|
|
2497
2497
|
border: "1px solid #bdbdbd",
|
|
2498
2498
|
color: "#666",
|
|
@@ -2507,7 +2507,7 @@ let __tla = (async () => {
|
|
|
2507
2507
|
]
|
|
2508
2508
|
});
|
|
2509
2509
|
};
|
|
2510
|
-
function
|
|
2510
|
+
function Sn(t, r, n) {
|
|
2511
2511
|
const o = t.getAttribute("position"), s = n - r;
|
|
2512
2512
|
if (s < 1) return null;
|
|
2513
2513
|
const a = 30, c = s / a, l = [];
|
|
@@ -2537,7 +2537,7 @@ let __tla = (async () => {
|
|
|
2537
2537
|
}
|
|
2538
2538
|
return p.y < 0 && p.negate(), p;
|
|
2539
2539
|
}
|
|
2540
|
-
const
|
|
2540
|
+
const Qo = {
|
|
2541
2541
|
pcaAxes: true,
|
|
2542
2542
|
obb: true,
|
|
2543
2543
|
obbAxis: true,
|
|
@@ -2547,12 +2547,12 @@ let __tla = (async () => {
|
|
|
2547
2547
|
landmarkAxis: true,
|
|
2548
2548
|
iterativePCA: false,
|
|
2549
2549
|
fullRegionPCA: true
|
|
2550
|
-
},
|
|
2550
|
+
}, er = [
|
|
2551
2551
|
"#ff4444",
|
|
2552
2552
|
"#44cc44",
|
|
2553
2553
|
"#4488ff"
|
|
2554
2554
|
];
|
|
2555
|
-
function
|
|
2555
|
+
function vn(t) {
|
|
2556
2556
|
const r = t.getAttribute("position"), n = r.count, o = new z();
|
|
2557
2557
|
for (let p = 0; p < n; p++) o.x += r.getX(p), o.y += r.getY(p), o.z += r.getZ(p);
|
|
2558
2558
|
o.divideScalar(n);
|
|
@@ -2628,22 +2628,22 @@ let __tla = (async () => {
|
|
|
2628
2628
|
halfExtents: S
|
|
2629
2629
|
};
|
|
2630
2630
|
}
|
|
2631
|
-
function
|
|
2631
|
+
function tr({ pca: t }) {
|
|
2632
2632
|
return i("group", {
|
|
2633
2633
|
children: t.axes.map((r, n) => {
|
|
2634
2634
|
const o = t.center.clone().addScaledVector(r, t.halfExtents[n]), s = t.center.clone().addScaledVector(r, -t.halfExtents[n]);
|
|
2635
|
-
return i(
|
|
2635
|
+
return i(ce, {
|
|
2636
2636
|
points: [
|
|
2637
2637
|
s,
|
|
2638
2638
|
o
|
|
2639
2639
|
],
|
|
2640
|
-
color:
|
|
2640
|
+
color: er[n],
|
|
2641
2641
|
lineWidth: 2
|
|
2642
2642
|
}, n);
|
|
2643
2643
|
})
|
|
2644
2644
|
});
|
|
2645
2645
|
}
|
|
2646
|
-
function
|
|
2646
|
+
function nr({ pca: t }) {
|
|
2647
2647
|
const r = j(() => {
|
|
2648
2648
|
const { center: n, axes: o, halfExtents: s } = t, a = [];
|
|
2649
2649
|
for (let l = -1; l <= 1; l += 2) for (let e = -1; e <= 1; e += 2) for (let m = -1; m <= 1; m += 2) a.push(n.clone().addScaledVector(o[0], l * s[0]).addScaledVector(o[1], e * s[1]).addScaledVector(o[2], m * s[2]));
|
|
@@ -2704,7 +2704,7 @@ let __tla = (async () => {
|
|
|
2704
2704
|
t
|
|
2705
2705
|
]);
|
|
2706
2706
|
return i("group", {
|
|
2707
|
-
children: r.map((n, o) => i(
|
|
2707
|
+
children: r.map((n, o) => i(ce, {
|
|
2708
2708
|
points: n,
|
|
2709
2709
|
color: "#ffaa00",
|
|
2710
2710
|
lineWidth: 1,
|
|
@@ -2713,7 +2713,7 @@ let __tla = (async () => {
|
|
|
2713
2713
|
}, o))
|
|
2714
2714
|
});
|
|
2715
2715
|
}
|
|
2716
|
-
function
|
|
2716
|
+
function or({ redPoint: t, greenPoint: r }) {
|
|
2717
2717
|
const n = j(() => new z().subVectors(r, t).normalize(), [
|
|
2718
2718
|
t,
|
|
2719
2719
|
r
|
|
@@ -2725,7 +2725,7 @@ let __tla = (async () => {
|
|
|
2725
2725
|
]), s = o < 1 ? "#44ff44" : o < 5 ? "#ffcc00" : "#ff4444";
|
|
2726
2726
|
return F("group", {
|
|
2727
2727
|
children: [
|
|
2728
|
-
i(
|
|
2728
|
+
i(ce, {
|
|
2729
2729
|
points: [
|
|
2730
2730
|
t,
|
|
2731
2731
|
r
|
|
@@ -2766,13 +2766,13 @@ let __tla = (async () => {
|
|
|
2766
2766
|
]
|
|
2767
2767
|
});
|
|
2768
2768
|
}
|
|
2769
|
-
function
|
|
2769
|
+
function rr({ geometry: t, redY: r, greenY: n, modelSize: o }) {
|
|
2770
2770
|
const a = o * 0.15, c = j(() => {
|
|
2771
2771
|
const l = [];
|
|
2772
2772
|
let e = n - 10;
|
|
2773
2773
|
const m = new z(0, 1, 0);
|
|
2774
2774
|
for (; e > r; ) {
|
|
2775
|
-
const d = Math.min(e, n), f = Math.max(e, n), u =
|
|
2775
|
+
const d = Math.min(e, n), f = Math.max(e, n), u = Sn(t, d, f);
|
|
2776
2776
|
if (u) {
|
|
2777
2777
|
const x = u.dot(m), S = Math.acos(Math.min(1, Math.abs(x))) * 180 / Math.PI;
|
|
2778
2778
|
l.push({
|
|
@@ -2795,7 +2795,7 @@ let __tla = (async () => {
|
|
|
2795
2795
|
const m = (l.regionMin + l.regionMax) / 2, d = new z(0, m, 0), f = d.clone().addScaledVector(l.axis, a), u = d.clone().addScaledVector(l.axis, -a), x = e / Math.max(1, c.length - 1), S = l.angleDeg < 0.5 ? `hsl(${120 - x * 120}, 80%, 60%)` : `hsl(${40 - l.angleDeg * 2}, 90%, 55%)`;
|
|
2796
2796
|
return F("group", {
|
|
2797
2797
|
children: [
|
|
2798
|
-
i(
|
|
2798
|
+
i(ce, {
|
|
2799
2799
|
points: [
|
|
2800
2800
|
u,
|
|
2801
2801
|
f
|
|
@@ -2805,7 +2805,7 @@ let __tla = (async () => {
|
|
|
2805
2805
|
transparent: true,
|
|
2806
2806
|
opacity: 0.7
|
|
2807
2807
|
}),
|
|
2808
|
-
i(
|
|
2808
|
+
i(ce, {
|
|
2809
2809
|
points: [
|
|
2810
2810
|
new z(-a * 0.3, l.regionMin, 0),
|
|
2811
2811
|
new z(a * 0.3, l.regionMin, 0)
|
|
@@ -2820,9 +2820,9 @@ let __tla = (async () => {
|
|
|
2820
2820
|
})
|
|
2821
2821
|
});
|
|
2822
2822
|
}
|
|
2823
|
-
function
|
|
2823
|
+
function ir({ geometry: t, redY: r, greenY: n, modelSize: o }) {
|
|
2824
2824
|
const s = j(() => {
|
|
2825
|
-
const f =
|
|
2825
|
+
const f = Sn(t, r, n);
|
|
2826
2826
|
if (!f) return null;
|
|
2827
2827
|
const u = f.dot(new z(0, 1, 0)), x = Math.acos(Math.min(1, Math.abs(u))) * 180 / Math.PI;
|
|
2828
2828
|
return {
|
|
@@ -2837,7 +2837,7 @@ let __tla = (async () => {
|
|
|
2837
2837
|
if (!s) return null;
|
|
2838
2838
|
const a = (r + n) / 2, c = new z(0, a, 0), l = o * 0.4, e = c.clone().addScaledVector(s.axis, l), m = c.clone().addScaledVector(s.axis, -l), d = s.angleDeg < 0.5 ? "#00ffff" : s.angleDeg < 2 ? "#ffcc00" : "#ff6600";
|
|
2839
2839
|
return i("group", {
|
|
2840
|
-
children: i(
|
|
2840
|
+
children: i(ce, {
|
|
2841
2841
|
points: [
|
|
2842
2842
|
m,
|
|
2843
2843
|
e
|
|
@@ -2850,9 +2850,9 @@ let __tla = (async () => {
|
|
|
2850
2850
|
})
|
|
2851
2851
|
});
|
|
2852
2852
|
}
|
|
2853
|
-
function
|
|
2853
|
+
function sr({ pca: t, modelSize: r }) {
|
|
2854
2854
|
const n = t.axes[0], o = r * 0.6, s = t.center.clone().addScaledVector(n, o), a = t.center.clone().addScaledVector(n, -o);
|
|
2855
|
-
return i(
|
|
2855
|
+
return i(ce, {
|
|
2856
2856
|
points: [
|
|
2857
2857
|
a,
|
|
2858
2858
|
s
|
|
@@ -2864,11 +2864,11 @@ let __tla = (async () => {
|
|
|
2864
2864
|
gapSize: 2
|
|
2865
2865
|
});
|
|
2866
2866
|
}
|
|
2867
|
-
function
|
|
2867
|
+
function lr({ geometry: t, redY: r, greenY: n, modelSize: o, measurementGeometry: s }) {
|
|
2868
2868
|
const a = j(() => {
|
|
2869
|
-
const d = s ?? t, f =
|
|
2869
|
+
const d = s ?? t, f = Wt(d), u = new z(0, 1, 0), x = 5, p = n + 3 * 25.4, g = [];
|
|
2870
2870
|
for (let h = r + x; h < p; h += x) {
|
|
2871
|
-
const C =
|
|
2871
|
+
const C = Co(f, d, new z(0, h, 0), u);
|
|
2872
2872
|
C > 0 && g.push({
|
|
2873
2873
|
y: h,
|
|
2874
2874
|
circ: C
|
|
@@ -2894,7 +2894,7 @@ let __tla = (async () => {
|
|
|
2894
2894
|
children: [
|
|
2895
2895
|
c.map(({ y: d, circ: f }, u) => {
|
|
2896
2896
|
const x = f / l, S = x > 1.6 ? "#ff4444" : x > 1.3 ? "#ffcc00" : "#22cc66", p = f * m;
|
|
2897
|
-
return i(
|
|
2897
|
+
return i(ce, {
|
|
2898
2898
|
points: [
|
|
2899
2899
|
new z(-p, d, 0),
|
|
2900
2900
|
new z(p, d, 0)
|
|
@@ -2907,9 +2907,9 @@ let __tla = (async () => {
|
|
|
2907
2907
|
}),
|
|
2908
2908
|
(() => {
|
|
2909
2909
|
const d = l * 1.6 * m, f = c[0].y, u = c[c.length - 1].y;
|
|
2910
|
-
return F(
|
|
2910
|
+
return F(Be, {
|
|
2911
2911
|
children: [
|
|
2912
|
-
i(
|
|
2912
|
+
i(ce, {
|
|
2913
2913
|
points: [
|
|
2914
2914
|
new z(-d, f, 0),
|
|
2915
2915
|
new z(-d, u, 0)
|
|
@@ -2922,7 +2922,7 @@ let __tla = (async () => {
|
|
|
2922
2922
|
transparent: true,
|
|
2923
2923
|
opacity: 0.4
|
|
2924
2924
|
}),
|
|
2925
|
-
i(
|
|
2925
|
+
i(ce, {
|
|
2926
2926
|
points: [
|
|
2927
2927
|
new z(d, f, 0),
|
|
2928
2928
|
new z(d, u, 0)
|
|
@@ -2941,7 +2941,7 @@ let __tla = (async () => {
|
|
|
2941
2941
|
]
|
|
2942
2942
|
});
|
|
2943
2943
|
}
|
|
2944
|
-
function
|
|
2944
|
+
function ar({ componentDebug: t }) {
|
|
2945
2945
|
return i("group", {
|
|
2946
2946
|
children: t.geometries.map((r, n) => {
|
|
2947
2947
|
const o = t.colors[n] ?? "#888888", s = n === t.innerIdx;
|
|
@@ -2956,7 +2956,7 @@ let __tla = (async () => {
|
|
|
2956
2956
|
color: o,
|
|
2957
2957
|
transparent: true,
|
|
2958
2958
|
opacity: s ? 0.5 : 0.2,
|
|
2959
|
-
side:
|
|
2959
|
+
side: O.DoubleSide,
|
|
2960
2960
|
depthWrite: false,
|
|
2961
2961
|
polygonOffset: true,
|
|
2962
2962
|
polygonOffsetFactor: 1,
|
|
@@ -2975,7 +2975,7 @@ let __tla = (async () => {
|
|
|
2975
2975
|
}),
|
|
2976
2976
|
i("group", {
|
|
2977
2977
|
position: a,
|
|
2978
|
-
children: i(
|
|
2978
|
+
children: i(He, {
|
|
2979
2979
|
center: true,
|
|
2980
2980
|
style: {
|
|
2981
2981
|
pointerEvents: "none"
|
|
@@ -3005,7 +3005,7 @@ let __tla = (async () => {
|
|
|
3005
3005
|
})
|
|
3006
3006
|
});
|
|
3007
3007
|
}
|
|
3008
|
-
function
|
|
3008
|
+
function cr({ geometry: t, aoData: r }) {
|
|
3009
3009
|
const n = j(() => {
|
|
3010
3010
|
const o = t.toNonIndexed(), s = o.getAttribute("position"), a = r.length, c = s.count, l = new Float32Array(c * 3);
|
|
3011
3011
|
for (let e = 0; e < a && e * 3 + 2 < c; e++) {
|
|
@@ -3015,7 +3015,7 @@ let __tla = (async () => {
|
|
|
3015
3015
|
l[S] = d, l[S + 1] = f, l[S + 2] = u;
|
|
3016
3016
|
}
|
|
3017
3017
|
}
|
|
3018
|
-
return o.setAttribute("color", new
|
|
3018
|
+
return o.setAttribute("color", new O.Float32BufferAttribute(l, 3)), o;
|
|
3019
3019
|
}, [
|
|
3020
3020
|
t,
|
|
3021
3021
|
r
|
|
@@ -3029,13 +3029,13 @@ let __tla = (async () => {
|
|
|
3029
3029
|
vertexColors: true,
|
|
3030
3030
|
transparent: true,
|
|
3031
3031
|
opacity: 0.85,
|
|
3032
|
-
side:
|
|
3032
|
+
side: O.DoubleSide,
|
|
3033
3033
|
depthWrite: false
|
|
3034
3034
|
})
|
|
3035
3035
|
});
|
|
3036
3036
|
}
|
|
3037
|
-
function
|
|
3038
|
-
const l = t.geometry, e = j(() => l.getAttribute("position") ?
|
|
3037
|
+
function dr({ mesh: t, layers: r, landmarkPoints: n, componentDebug: o, aoData: s, aoGeometry: a, measurementGeometry: c }) {
|
|
3038
|
+
const l = t.geometry, e = j(() => l.getAttribute("position") ? vn(l) : null, [
|
|
3039
3039
|
l
|
|
3040
3040
|
]), m = j(() => !n || n.length < 2 ? null : {
|
|
3041
3041
|
red: new z(n[1].position.x, n[1].position.y, n[1].position.z),
|
|
@@ -3045,24 +3045,24 @@ let __tla = (async () => {
|
|
|
3045
3045
|
]);
|
|
3046
3046
|
return F("group", {
|
|
3047
3047
|
children: [
|
|
3048
|
-
r.pcaAxes && e && i(
|
|
3048
|
+
r.pcaAxes && e && i(tr, {
|
|
3049
3049
|
pca: e
|
|
3050
3050
|
}),
|
|
3051
|
-
r.obb && e && i(
|
|
3051
|
+
r.obb && e && i(nr, {
|
|
3052
3052
|
pca: e
|
|
3053
3053
|
}),
|
|
3054
|
-
r.obbAxis && e && i(
|
|
3054
|
+
r.obbAxis && e && i(sr, {
|
|
3055
3055
|
pca: e,
|
|
3056
3056
|
modelSize: e.halfExtents[0] ? Math.max(...e.halfExtents) * 2 : 100
|
|
3057
3057
|
}),
|
|
3058
|
-
r.shellComponents && o && i(
|
|
3058
|
+
r.shellComponents && o && i(ar, {
|
|
3059
3059
|
componentDebug: o
|
|
3060
3060
|
}),
|
|
3061
|
-
r.ambientOcclusion && s && s.length > 0 && i(
|
|
3061
|
+
r.ambientOcclusion && s && s.length > 0 && i(cr, {
|
|
3062
3062
|
geometry: a ?? l,
|
|
3063
3063
|
aoData: s
|
|
3064
3064
|
}),
|
|
3065
|
-
r.circumferenceScan && m && i(
|
|
3065
|
+
r.circumferenceScan && m && i(lr, {
|
|
3066
3066
|
geometry: l,
|
|
3067
3067
|
redY: m.red.y,
|
|
3068
3068
|
greenY: m.green.y,
|
|
@@ -3080,17 +3080,17 @@ let __tla = (async () => {
|
|
|
3080
3080
|
depthWrite: false
|
|
3081
3081
|
})
|
|
3082
3082
|
}),
|
|
3083
|
-
r.landmarkAxis && m && i(
|
|
3083
|
+
r.landmarkAxis && m && i(or, {
|
|
3084
3084
|
redPoint: m.red,
|
|
3085
3085
|
greenPoint: m.green
|
|
3086
3086
|
}),
|
|
3087
|
-
r.iterativePCA && m && i(
|
|
3087
|
+
r.iterativePCA && m && i(rr, {
|
|
3088
3088
|
geometry: l,
|
|
3089
3089
|
redY: m.red.y,
|
|
3090
3090
|
greenY: m.green.y,
|
|
3091
3091
|
modelSize: (e == null ? void 0 : e.halfExtents[0]) ? Math.max(...e.halfExtents) * 2 : 100
|
|
3092
3092
|
}),
|
|
3093
|
-
r.fullRegionPCA && m && i(
|
|
3093
|
+
r.fullRegionPCA && m && i(ir, {
|
|
3094
3094
|
geometry: l,
|
|
3095
3095
|
redY: m.red.y,
|
|
3096
3096
|
greenY: m.green.y,
|
|
@@ -3099,10 +3099,10 @@ let __tla = (async () => {
|
|
|
3099
3099
|
]
|
|
3100
3100
|
});
|
|
3101
3101
|
}
|
|
3102
|
-
function
|
|
3102
|
+
function fr({ mesh: t }) {
|
|
3103
3103
|
const r = t.geometry, n = j(() => {
|
|
3104
3104
|
if (!r.getAttribute("position")) return null;
|
|
3105
|
-
const a =
|
|
3105
|
+
const a = vn(r), c = a.axes[0], l = a.halfExtents[0] * 1.3;
|
|
3106
3106
|
return {
|
|
3107
3107
|
axis: c,
|
|
3108
3108
|
center: a.center,
|
|
@@ -3113,7 +3113,7 @@ let __tla = (async () => {
|
|
|
3113
3113
|
]);
|
|
3114
3114
|
if (!n) return null;
|
|
3115
3115
|
const o = n.center.clone().addScaledVector(n.axis, n.halfLen), s = n.center.clone().addScaledVector(n.axis, -n.halfLen);
|
|
3116
|
-
return i(
|
|
3116
|
+
return i(ce, {
|
|
3117
3117
|
points: [
|
|
3118
3118
|
s,
|
|
3119
3119
|
o
|
|
@@ -3129,7 +3129,7 @@ let __tla = (async () => {
|
|
|
3129
3129
|
renderOrder: 999
|
|
3130
3130
|
});
|
|
3131
3131
|
}
|
|
3132
|
-
const
|
|
3132
|
+
const Cn = [
|
|
3133
3133
|
{
|
|
3134
3134
|
key: "pcaAxes",
|
|
3135
3135
|
label: "PCA Axes (full mesh)",
|
|
@@ -3185,10 +3185,10 @@ let __tla = (async () => {
|
|
|
3185
3185
|
color: "#00ffff",
|
|
3186
3186
|
group: "Alignment"
|
|
3187
3187
|
}
|
|
3188
|
-
],
|
|
3189
|
-
...new Set(
|
|
3188
|
+
], ur = [
|
|
3189
|
+
...new Set(Cn.map((t) => t.group))
|
|
3190
3190
|
];
|
|
3191
|
-
function
|
|
3191
|
+
function pr({ layers: t, onToggleLayer: r, isDoubleShell: n }) {
|
|
3192
3192
|
return F("div", {
|
|
3193
3193
|
style: {
|
|
3194
3194
|
position: "absolute",
|
|
@@ -3217,8 +3217,8 @@ let __tla = (async () => {
|
|
|
3217
3217
|
},
|
|
3218
3218
|
children: "Debug Layers"
|
|
3219
3219
|
}),
|
|
3220
|
-
|
|
3221
|
-
const s =
|
|
3220
|
+
ur.map((o) => {
|
|
3221
|
+
const s = Cn.filter((a) => a.group === o && !(a.hideWhenDoubleShell && n));
|
|
3222
3222
|
return s.length === 0 ? null : F("div", {
|
|
3223
3223
|
children: [
|
|
3224
3224
|
i("div", {
|
|
@@ -3278,397 +3278,418 @@ let __tla = (async () => {
|
|
|
3278
3278
|
]
|
|
3279
3279
|
});
|
|
3280
3280
|
}
|
|
3281
|
-
const
|
|
3282
|
-
const [e, m] =
|
|
3283
|
-
if (
|
|
3284
|
-
const y =
|
|
3285
|
-
const
|
|
3286
|
-
if (
|
|
3281
|
+
const hr = ({ config: t, spacingType: r, scanUrl: n, formMeasurements: o, onComplete: s, isDebugUser: a = false, onAnalyticsEvent: c, wasmModule: l }) => {
|
|
3282
|
+
const [e, m] = W(null), [d, f] = W(0), [u, x] = W(false), [S, p] = W(false), [g, b] = W(""), [A, P] = W("3D"), [v, k] = W(r === "AK" ? 2 : 1), [w, M] = W(false), [h, C] = W(null), [L, I] = W(r ?? null), [D, E] = W("mm"), [V, G] = W(false), [Q, xe] = W(""), [le, de] = W(false), [re, ee] = W(false), [X, fe] = W(false), [Z, ue] = W(false), [ge, pe] = W(null), [H, ne] = W(null), [me, ye] = W(null), [be, oe] = W(false), [N, Y] = W([]), [Le, ke] = W(null), [je, ie] = W(null), [Ae, gt] = W(null), [mt, Et] = W(null), [Mn, Tt] = W(false), [xt, Ot] = W(null), [bt, Pe] = W(null), [_e, An] = W(false), [$t, kn] = W(Qo), [Ee, Ht] = W("obj"), [we, yt] = W(o), [Ge, wt] = W(true), [Te, Je] = W(false), [Qe, jt] = W(false), [Ce, et] = W(false), [Fn, St] = W(false), [Xe, Ln] = W(null), [Pn, In] = W(void 0), [_n, Dn] = W(void 0), [Vt] = W("#c8c8c8"), [Rn] = W(1), [Re, Wn] = W(false), [vt, Nt] = W([]), tt = se(null), Oe = se(null), nt = se(false), Bn = se(null), Ct = se(null), zt = se(null), Ze = J(async () => {
|
|
3283
|
+
if (zt.current) try {
|
|
3284
|
+
const y = zt.current, _ = () => {
|
|
3285
|
+
const U = y.querySelector("canvas");
|
|
3286
|
+
if (!U) return;
|
|
3287
|
+
const $ = y.getBoundingClientRect(), he = U.width, ve = U.height, te = he / $.width, ze = ve / $.height, De = document.createElement("canvas");
|
|
3288
|
+
De.width = he, De.height = ve;
|
|
3289
|
+
const Me = De.getContext("2d");
|
|
3290
|
+
return Me.drawImage(U, 0, 0), y.querySelectorAll("[style*='pointer-events']").forEach((Ie) => {
|
|
3291
|
+
const Ut = Ie;
|
|
3292
|
+
if (Ut.hasAttribute("data-finalizing-overlay")) return;
|
|
3293
|
+
const Jt = Ut.querySelectorAll("div[style*='background']");
|
|
3294
|
+
Jt.length !== 0 && Jt.forEach((Lt) => {
|
|
3295
|
+
const Ne = Lt.getBoundingClientRect();
|
|
3296
|
+
if (Ne.width === 0 || Ne.height === 0) return;
|
|
3297
|
+
const Zn = (Ne.left - $.left) * te, Kn = (Ne.top - $.top) * ze, qn = Ne.width * te, Un = Ne.height * ze, Jn = Lt.style.backgroundColor || "rgba(0,0,0,0.75)";
|
|
3298
|
+
Me.fillStyle = Jn;
|
|
3299
|
+
const Qn = 4 * te;
|
|
3300
|
+
Me.beginPath(), Me.roundRect(Zn, Kn, qn, Un, Qn), Me.fill(), Lt.querySelectorAll("span").forEach((Pt) => {
|
|
3301
|
+
const st = Pt.getBoundingClientRect();
|
|
3302
|
+
if (st.width === 0) return;
|
|
3303
|
+
const eo = (st.left - $.left) * te, to = (st.top - $.top) * ze, no = st.height * ze, It = window.getComputedStyle(Pt), Qt = parseFloat(It.fontSize) * ze;
|
|
3304
|
+
Me.font = `${It.fontWeight || "normal"} ${Qt}px monospace`, Me.fillStyle = It.color || "#fff", Me.textBaseline = "top", Me.fillText(Pt.textContent || "", eo, to + (no - Qt) / 2);
|
|
3305
|
+
});
|
|
3306
|
+
});
|
|
3307
|
+
}), De.toDataURL("image/png");
|
|
3287
3308
|
};
|
|
3288
|
-
|
|
3289
|
-
const
|
|
3290
|
-
P("2D"), await new Promise((
|
|
3291
|
-
const
|
|
3292
|
-
return P("3D"), !
|
|
3293
|
-
frontal_view_png:
|
|
3294
|
-
side_view_png:
|
|
3309
|
+
Ct.current && Ct.current(), await new Promise((U) => requestAnimationFrame(() => requestAnimationFrame(U)));
|
|
3310
|
+
const B = _();
|
|
3311
|
+
P("2D"), await new Promise((U) => setTimeout(U, 150)), await new Promise((U) => requestAnimationFrame(() => requestAnimationFrame(U)));
|
|
3312
|
+
const R = _();
|
|
3313
|
+
return P("3D"), !B || !R ? void 0 : {
|
|
3314
|
+
frontal_view_png: B,
|
|
3315
|
+
side_view_png: R
|
|
3295
3316
|
};
|
|
3296
3317
|
} catch {
|
|
3297
3318
|
return;
|
|
3298
3319
|
}
|
|
3299
3320
|
}, []), Se = J((y) => {
|
|
3300
|
-
const
|
|
3301
|
-
|
|
3302
|
-
...
|
|
3321
|
+
const _ = /* @__PURE__ */ new Date(), B = `${String(_.getHours()).padStart(2, "0")}:${String(_.getMinutes()).padStart(2, "0")}:${String(_.getSeconds()).padStart(2, "0")}.${String(_.getMilliseconds()).padStart(3, "0")}`;
|
|
3322
|
+
Nt((R) => [
|
|
3323
|
+
...R.slice(-200),
|
|
3303
3324
|
`[${B}] ${y}`
|
|
3304
3325
|
]);
|
|
3305
|
-
}, []), { landmarkPoints:
|
|
3306
|
-
|
|
3307
|
-
|
|
3326
|
+
}, []), { landmarkPoints: T, clearLandmarkPoints: En, addLandmarkPoint: Yt, removeLandmarkPoint: Gt, updateLandmarkPositions: Xt, setAligned: Zt, isAligned: K, setCut: Kt, isCut: Mt, reset: ot } = Bt();
|
|
3327
|
+
q(() => {
|
|
3328
|
+
ot();
|
|
3308
3329
|
}, [
|
|
3309
|
-
|
|
3330
|
+
ot
|
|
3310
3331
|
]);
|
|
3311
|
-
const
|
|
3312
|
-
|
|
3313
|
-
if (!a ||
|
|
3314
|
-
const y =
|
|
3315
|
-
Se(`LANDMARK[${
|
|
3332
|
+
const rt = v * dt;
|
|
3333
|
+
q(() => {
|
|
3334
|
+
if (!a || T.length === 0) return;
|
|
3335
|
+
const y = T[T.length - 1];
|
|
3336
|
+
Se(`LANDMARK[${T.length - 1}]: placed at (${y.position.x.toFixed(1)}, ${y.position.y.toFixed(1)}, ${y.position.z.toFixed(1)}) face=${y.faceIndex}`);
|
|
3316
3337
|
}, [
|
|
3317
|
-
|
|
3338
|
+
T.length,
|
|
3318
3339
|
a,
|
|
3319
3340
|
Se
|
|
3320
|
-
]),
|
|
3341
|
+
]), q(() => {
|
|
3321
3342
|
a && K && Se("STATE: mesh aligned");
|
|
3322
3343
|
}, [
|
|
3323
3344
|
K,
|
|
3324
3345
|
a,
|
|
3325
3346
|
Se
|
|
3326
|
-
]),
|
|
3327
|
-
a &&
|
|
3347
|
+
]), q(() => {
|
|
3348
|
+
a && Mt && Se("STATE: mesh cut");
|
|
3328
3349
|
}, [
|
|
3329
|
-
|
|
3350
|
+
Mt,
|
|
3330
3351
|
a,
|
|
3331
3352
|
Se
|
|
3332
|
-
]),
|
|
3333
|
-
|
|
3353
|
+
]), q(() => {
|
|
3354
|
+
tt.current && (tt.current.scrollTop = tt.current.scrollHeight);
|
|
3334
3355
|
}, [
|
|
3335
|
-
|
|
3356
|
+
vt
|
|
3336
3357
|
]);
|
|
3337
|
-
const
|
|
3338
|
-
|
|
3358
|
+
const Ve = j(() => me ? new O.Mesh(me) : null, [
|
|
3359
|
+
me
|
|
3339
3360
|
]);
|
|
3340
|
-
|
|
3341
|
-
o &&
|
|
3361
|
+
q(() => {
|
|
3362
|
+
o && yt(o);
|
|
3342
3363
|
}, [
|
|
3343
3364
|
o
|
|
3344
|
-
]),
|
|
3345
|
-
o ||
|
|
3365
|
+
]), q(() => {
|
|
3366
|
+
o || yt(void 0);
|
|
3346
3367
|
}, [
|
|
3347
3368
|
v
|
|
3348
3369
|
]);
|
|
3349
|
-
const
|
|
3350
|
-
|
|
3351
|
-
if (!K || N.length === 0 ||
|
|
3352
|
-
|
|
3353
|
-
const y =
|
|
3370
|
+
const it = se(false);
|
|
3371
|
+
q(() => {
|
|
3372
|
+
if (!K || N.length === 0 || it.current || !c) return;
|
|
3373
|
+
it.current = true;
|
|
3374
|
+
const y = T.length >= 3 ? Math.abs(T[2].position.y - T[0].position.y) : null;
|
|
3354
3375
|
c("dimensions_calculated", {
|
|
3355
3376
|
spacing_type: L,
|
|
3356
3377
|
source_unit: "mm",
|
|
3357
|
-
file_format:
|
|
3378
|
+
file_format: Ee,
|
|
3358
3379
|
measurement_source: "scan_derived",
|
|
3359
3380
|
is_double_wall: X,
|
|
3360
3381
|
is_unit_converted: false,
|
|
3361
|
-
form_measurements: (we == null ? void 0 : we.filter((
|
|
3362
|
-
scan_measurements: N.map((
|
|
3363
|
-
measurement_variance: we ? N.map((
|
|
3364
|
-
const
|
|
3365
|
-
return
|
|
3382
|
+
form_measurements: (we == null ? void 0 : we.filter((_) => _ != null)) ?? null,
|
|
3383
|
+
scan_measurements: N.map((_) => +(_.modifiedValue ?? _.originalValue).toFixed(1)),
|
|
3384
|
+
measurement_variance: we ? N.map((_, B) => {
|
|
3385
|
+
const R = we[B];
|
|
3386
|
+
return R == null ? null : +((_.modifiedValue ?? _.originalValue) - R).toFixed(1);
|
|
3366
3387
|
}) : null,
|
|
3367
3388
|
frontal_height: y !== null ? +y.toFixed(1) : null
|
|
3368
3389
|
});
|
|
3369
3390
|
}, [
|
|
3370
3391
|
K,
|
|
3371
3392
|
N
|
|
3372
|
-
]),
|
|
3373
|
-
l !== void 0 && (
|
|
3393
|
+
]), q(() => {
|
|
3394
|
+
l !== void 0 && (Oe.current = l), l !== void 0 && Wn(true);
|
|
3374
3395
|
}, [
|
|
3375
3396
|
l
|
|
3376
3397
|
]);
|
|
3377
|
-
const
|
|
3398
|
+
const Ke = J((y, _) => {
|
|
3378
3399
|
y.computeBoundingBox();
|
|
3379
|
-
const B = y.boundingBox,
|
|
3380
|
-
B.getCenter(
|
|
3381
|
-
const
|
|
3382
|
-
|
|
3383
|
-
const
|
|
3400
|
+
const B = y.boundingBox, R = new z();
|
|
3401
|
+
B.getCenter(R), y.translate(-R.x, -R.y, -R.z), y.computeBoundingBox();
|
|
3402
|
+
const U = y.boundingBox, $ = new z();
|
|
3403
|
+
U.getSize($), f(Math.max($.x, $.y, $.z));
|
|
3404
|
+
const he = new O.Mesh(y, new O.MeshStandardMaterial({
|
|
3384
3405
|
color: 8947848,
|
|
3385
|
-
side:
|
|
3406
|
+
side: O.DoubleSide
|
|
3386
3407
|
}));
|
|
3387
|
-
m(
|
|
3388
|
-
}, []),
|
|
3389
|
-
|
|
3390
|
-
const B =
|
|
3391
|
-
if (!B.endsWith(".obj") && !
|
|
3392
|
-
|
|
3408
|
+
m(he), de(_), ee(true), ue(false), nt.current = false;
|
|
3409
|
+
}, []), We = J(async (y, _) => {
|
|
3410
|
+
Pe(null);
|
|
3411
|
+
const B = _.toLowerCase(), R = B.endsWith(".stl");
|
|
3412
|
+
if (!B.endsWith(".obj") && !R) {
|
|
3413
|
+
Pe("Unsupported file format. Please use OBJ or STL.");
|
|
3393
3414
|
return;
|
|
3394
3415
|
}
|
|
3395
|
-
|
|
3416
|
+
Ht(R ? "stl" : "obj"), p(true), b("Processing file..."), Se(`FILE_LOAD: ${_} (${R ? "STL" : "OBJ"})`);
|
|
3396
3417
|
try {
|
|
3397
|
-
let
|
|
3398
|
-
if (
|
|
3399
|
-
const
|
|
3418
|
+
let $;
|
|
3419
|
+
if (R) if (b("Converting STL..."), y instanceof ArrayBuffer) {
|
|
3420
|
+
const te = new Blob([
|
|
3400
3421
|
y
|
|
3401
|
-
]),
|
|
3402
|
-
|
|
3403
|
-
],
|
|
3404
|
-
|
|
3422
|
+
]), ze = new File([
|
|
3423
|
+
te
|
|
3424
|
+
], _);
|
|
3425
|
+
$ = await _t(ze);
|
|
3405
3426
|
} else {
|
|
3406
|
-
const
|
|
3427
|
+
const te = new Blob([
|
|
3407
3428
|
y
|
|
3408
|
-
]),
|
|
3409
|
-
|
|
3410
|
-
],
|
|
3411
|
-
|
|
3429
|
+
]), ze = new File([
|
|
3430
|
+
te
|
|
3431
|
+
], _);
|
|
3432
|
+
$ = await _t(ze);
|
|
3412
3433
|
}
|
|
3413
|
-
else
|
|
3414
|
-
const
|
|
3415
|
-
b(
|
|
3434
|
+
else $ = typeof y == "string" ? y : new TextDecoder().decode(y);
|
|
3435
|
+
const he = performance.now(), ve = Oe.current ? await yo($, Oe.current, (te) => {
|
|
3436
|
+
b(te), Se(`PREPROCESS: ${te}`);
|
|
3416
3437
|
}) : null;
|
|
3417
|
-
if (
|
|
3438
|
+
if (ve) Se(`PREPROCESS: done in ${(performance.now() - he).toFixed(0)}ms \u2014 unit=${ve.detectedUnit}, scaled=${ve.wasScaled}`), t.showAmputationModal && !r ? (C(ve), M(true)) : Ke(ve.geometry, ve.wasScaled);
|
|
3418
3439
|
else {
|
|
3419
3440
|
b("Using fallback loader...");
|
|
3420
|
-
const
|
|
3421
|
-
|
|
3422
|
-
geometry:
|
|
3441
|
+
const te = wo($);
|
|
3442
|
+
te ? t.showAmputationModal && !r ? (C({
|
|
3443
|
+
geometry: te,
|
|
3423
3444
|
wasScaled: false
|
|
3424
|
-
}), M(true)) :
|
|
3445
|
+
}), M(true)) : Ke(te, false) : Pe("Failed to parse the mesh.");
|
|
3425
3446
|
}
|
|
3426
|
-
} catch (
|
|
3427
|
-
|
|
3447
|
+
} catch ($) {
|
|
3448
|
+
Pe($ instanceof Error ? $.message : "Failed to process the mesh file.");
|
|
3428
3449
|
} finally {
|
|
3429
3450
|
p(false), b("");
|
|
3430
3451
|
}
|
|
3431
3452
|
}, [
|
|
3432
|
-
|
|
3453
|
+
Re,
|
|
3433
3454
|
t.showAmputationModal,
|
|
3434
3455
|
r,
|
|
3435
|
-
|
|
3456
|
+
Ke
|
|
3436
3457
|
]);
|
|
3437
|
-
|
|
3438
|
-
if (!n || !
|
|
3458
|
+
q(() => {
|
|
3459
|
+
if (!n || !Re) return;
|
|
3439
3460
|
(async () => {
|
|
3440
3461
|
p(true), b("Loading scan...");
|
|
3441
3462
|
try {
|
|
3442
|
-
const
|
|
3443
|
-
if (!
|
|
3444
|
-
const
|
|
3445
|
-
if (
|
|
3446
|
-
const
|
|
3447
|
-
await
|
|
3463
|
+
const _ = await fetch(n);
|
|
3464
|
+
if (!_.ok) throw new Error(`Failed to download scan: ${_.status}`);
|
|
3465
|
+
const R = new URL(n).pathname.split("/").pop() || "scan.obj";
|
|
3466
|
+
if (R.toLowerCase().endsWith(".stl")) {
|
|
3467
|
+
const $ = await _.arrayBuffer();
|
|
3468
|
+
await We($, R);
|
|
3448
3469
|
} else {
|
|
3449
|
-
const
|
|
3450
|
-
await
|
|
3470
|
+
const $ = await _.text();
|
|
3471
|
+
await We($, R);
|
|
3451
3472
|
}
|
|
3452
|
-
} catch (
|
|
3453
|
-
|
|
3473
|
+
} catch (_) {
|
|
3474
|
+
Pe(_ instanceof Error ? _.message : "Failed to load scan from URL."), p(false), b("");
|
|
3454
3475
|
}
|
|
3455
3476
|
})();
|
|
3456
3477
|
}, [
|
|
3457
3478
|
n,
|
|
3458
|
-
|
|
3479
|
+
Re
|
|
3459
3480
|
]);
|
|
3460
|
-
const
|
|
3481
|
+
const Tn = J((y) => {
|
|
3461
3482
|
y.preventDefault(), x(true);
|
|
3462
|
-
}, []),
|
|
3483
|
+
}, []), On = J((y) => {
|
|
3463
3484
|
y.preventDefault(), x(false);
|
|
3464
|
-
}, []),
|
|
3465
|
-
if (y.preventDefault(), x(false), !
|
|
3466
|
-
|
|
3485
|
+
}, []), $n = J(async (y) => {
|
|
3486
|
+
if (y.preventDefault(), x(false), !Re) {
|
|
3487
|
+
Pe("WASM module is still loading. Please wait.");
|
|
3467
3488
|
return;
|
|
3468
3489
|
}
|
|
3469
|
-
const
|
|
3470
|
-
if (!
|
|
3471
|
-
const B =
|
|
3490
|
+
const _ = y.dataTransfer.files[0];
|
|
3491
|
+
if (!_) return;
|
|
3492
|
+
const B = _.name.toLowerCase();
|
|
3472
3493
|
if (!B.endsWith(".obj") && !B.endsWith(".stl")) {
|
|
3473
|
-
|
|
3494
|
+
Pe("Please drop an OBJ or STL file.");
|
|
3474
3495
|
return;
|
|
3475
3496
|
}
|
|
3476
3497
|
if (B.endsWith(".stl")) {
|
|
3477
|
-
|
|
3498
|
+
Ht("stl"), p(true), b("Converting STL...");
|
|
3478
3499
|
try {
|
|
3479
|
-
const
|
|
3480
|
-
await
|
|
3481
|
-
} catch (
|
|
3482
|
-
|
|
3500
|
+
const R = await _t(_);
|
|
3501
|
+
await We(R, _.name.replace(/\.stl$/i, ".obj"));
|
|
3502
|
+
} catch (R) {
|
|
3503
|
+
Pe(R instanceof Error ? R.message : "Failed to process STL file."), p(false), b("");
|
|
3483
3504
|
}
|
|
3484
3505
|
} else {
|
|
3485
|
-
const
|
|
3486
|
-
await
|
|
3506
|
+
const R = await _.text();
|
|
3507
|
+
await We(R, _.name);
|
|
3487
3508
|
}
|
|
3488
3509
|
}, [
|
|
3489
|
-
|
|
3490
|
-
|
|
3491
|
-
]),
|
|
3492
|
-
|
|
3510
|
+
Re,
|
|
3511
|
+
We
|
|
3512
|
+
]), Hn = J((y) => {
|
|
3513
|
+
I(y), k(y === "AK" ? 2 : 1), M(false), h && (Ke(h.geometry, h.wasScaled), C(null)), c == null ? void 0 : c("file_loaded", {
|
|
3493
3514
|
spacing_type: y,
|
|
3494
|
-
file_format:
|
|
3515
|
+
file_format: Ee,
|
|
3495
3516
|
is_double_wall: false
|
|
3496
3517
|
});
|
|
3497
3518
|
}, [
|
|
3498
3519
|
h,
|
|
3499
|
-
|
|
3520
|
+
Ke,
|
|
3500
3521
|
c,
|
|
3501
|
-
|
|
3522
|
+
Ee
|
|
3502
3523
|
]);
|
|
3503
|
-
|
|
3504
|
-
if (!e ||
|
|
3505
|
-
|
|
3506
|
-
const y =
|
|
3524
|
+
q(() => {
|
|
3525
|
+
if (!e || T.length !== 1 || !Oe.current || nt.current) return;
|
|
3526
|
+
nt.current = true;
|
|
3527
|
+
const y = T[0], _ = Oe.current, B = e.geometry, { positions: R, indices: U } = ft(B), $ = new Float32Array([
|
|
3507
3528
|
y.position.x,
|
|
3508
3529
|
y.position.y,
|
|
3509
3530
|
y.position.z
|
|
3510
|
-
]),
|
|
3511
|
-
Se(`SHELL_DETECT: ${
|
|
3531
|
+
]), he = _.detect_shell(R, U, $, 40), ve = he.details(), te = he.is_double_shell();
|
|
3532
|
+
Se(`SHELL_DETECT: ${te ? "DOUBLE" : "SINGLE"} \u2014 ${ve}`), te && (fe(true), oe(true), Se(`SHELL_DETECT: double shell, thickness=${he.thickness().toFixed(1)}mm`));
|
|
3512
3533
|
}, [
|
|
3513
3534
|
e,
|
|
3514
|
-
|
|
3535
|
+
T,
|
|
3515
3536
|
Se
|
|
3516
3537
|
]);
|
|
3517
|
-
const
|
|
3518
|
-
if (!e ||
|
|
3519
|
-
|
|
3538
|
+
const jn = J(() => {
|
|
3539
|
+
if (!e || T.length < 2) return;
|
|
3540
|
+
G(true), xe("Please wait..."), Se("PIPELINE: starting processing pipeline...");
|
|
3520
3541
|
const y = performance.now();
|
|
3521
3542
|
setTimeout(() => {
|
|
3522
|
-
const
|
|
3523
|
-
|
|
3524
|
-
|
|
3525
|
-
...
|
|
3543
|
+
const _ = [
|
|
3544
|
+
T[1],
|
|
3545
|
+
T[0],
|
|
3546
|
+
...T.slice(2)
|
|
3526
3547
|
];
|
|
3527
|
-
|
|
3548
|
+
Mo(e, _, dt, {
|
|
3528
3549
|
onStatus: (B) => {
|
|
3529
|
-
|
|
3550
|
+
xe(B), Se(`PIPELINE: ${B}`);
|
|
3530
3551
|
},
|
|
3531
|
-
addLandmarkPoint:
|
|
3532
|
-
removeLandmarkPoint:
|
|
3552
|
+
addLandmarkPoint: Yt,
|
|
3553
|
+
removeLandmarkPoint: Gt,
|
|
3533
3554
|
updateLandmarkPositions: (B) => {
|
|
3534
|
-
const
|
|
3555
|
+
const R = [
|
|
3535
3556
|
B[1],
|
|
3536
3557
|
B[0],
|
|
3537
3558
|
...B.slice(2)
|
|
3538
3559
|
];
|
|
3539
|
-
|
|
3560
|
+
Xt(R);
|
|
3540
3561
|
},
|
|
3541
|
-
setAligned:
|
|
3542
|
-
setCut:
|
|
3562
|
+
setAligned: Zt,
|
|
3563
|
+
setCut: Kt,
|
|
3543
3564
|
setModelSize: f,
|
|
3544
|
-
setOriginalEndY:
|
|
3545
|
-
setAdjustedStartY:
|
|
3546
|
-
setAdjustedEndY:
|
|
3547
|
-
setError:
|
|
3565
|
+
setOriginalEndY: Et,
|
|
3566
|
+
setAdjustedStartY: ie,
|
|
3567
|
+
setAdjustedEndY: gt,
|
|
3568
|
+
setError: Pe,
|
|
3548
3569
|
setDoubleShell: (B) => {
|
|
3549
|
-
|
|
3570
|
+
fe(B), oe(true);
|
|
3550
3571
|
},
|
|
3551
|
-
setAoData: (B,
|
|
3552
|
-
|
|
3572
|
+
setAoData: (B, R) => {
|
|
3573
|
+
pe(B), ne(R ?? null);
|
|
3553
3574
|
},
|
|
3554
|
-
setInnerShellExtracted:
|
|
3575
|
+
setInnerShellExtracted: ue,
|
|
3555
3576
|
setMeasurementGeometry: ye,
|
|
3556
|
-
setWasmSlices:
|
|
3557
|
-
wasmModule:
|
|
3558
|
-
}), Se(`PIPELINE: completed in ${(performance.now() - y).toFixed(0)}ms`),
|
|
3577
|
+
setWasmSlices: ke,
|
|
3578
|
+
wasmModule: Oe.current ?? void 0
|
|
3579
|
+
}), Se(`PIPELINE: completed in ${(performance.now() - y).toFixed(0)}ms`), it.current = false, G(false);
|
|
3559
3580
|
}, 50);
|
|
3560
3581
|
}, [
|
|
3561
3582
|
e,
|
|
3562
|
-
|
|
3563
|
-
|
|
3564
|
-
|
|
3565
|
-
|
|
3566
|
-
|
|
3567
|
-
|
|
3583
|
+
T,
|
|
3584
|
+
Xt,
|
|
3585
|
+
Zt,
|
|
3586
|
+
Yt,
|
|
3587
|
+
Gt,
|
|
3588
|
+
Kt,
|
|
3568
3589
|
Z
|
|
3569
|
-
]),
|
|
3570
|
-
if (
|
|
3590
|
+
]), At = se(false), Vn = J(async () => {
|
|
3591
|
+
if (ot(), Y([]), ke(null), ye(null), ie(null), gt(null), Ot(null), Et(null), Je(false), jt(false), wt(true), fe(false), ue(false), nt.current = false, At.current = false, it.current = false, P("3D"), n && Re) {
|
|
3571
3592
|
m(null);
|
|
3572
3593
|
try {
|
|
3573
3594
|
const y = await fetch(n);
|
|
3574
3595
|
if (!y.ok) throw new Error(`Failed to download scan: ${y.status}`);
|
|
3575
3596
|
const B = new URL(n).pathname.split("/").pop() || "scan.obj";
|
|
3576
|
-
B.toLowerCase().endsWith(".stl") ? await
|
|
3597
|
+
B.toLowerCase().endsWith(".stl") ? await We(await y.arrayBuffer(), B) : await We(await y.text(), B);
|
|
3577
3598
|
} catch (y) {
|
|
3578
|
-
|
|
3599
|
+
Pe(y instanceof Error ? y.message : "Failed to reload scan.");
|
|
3579
3600
|
}
|
|
3580
3601
|
}
|
|
3581
3602
|
}, [
|
|
3582
3603
|
n,
|
|
3583
|
-
|
|
3584
|
-
|
|
3585
|
-
|
|
3604
|
+
Re,
|
|
3605
|
+
We,
|
|
3606
|
+
ot
|
|
3586
3607
|
]);
|
|
3587
|
-
|
|
3588
|
-
K && N.length > 0 && !
|
|
3608
|
+
q(() => {
|
|
3609
|
+
K && N.length > 0 && !At.current && (At.current = true, Je(true));
|
|
3589
3610
|
}, [
|
|
3590
3611
|
K,
|
|
3591
3612
|
N.length
|
|
3592
3613
|
]);
|
|
3593
|
-
const
|
|
3614
|
+
const qe = j(() => {
|
|
3594
3615
|
var _a;
|
|
3595
|
-
if (!e ||
|
|
3596
|
-
if (X) return Math.abs(
|
|
3616
|
+
if (!e || T.length < 3) return 0;
|
|
3617
|
+
if (X) return Math.abs(T[0].position.y - T[2].position.y);
|
|
3597
3618
|
const y = e.geometry;
|
|
3598
3619
|
y.computeBoundingBox();
|
|
3599
|
-
const
|
|
3600
|
-
return Math.abs(
|
|
3620
|
+
const _ = ((_a = y.boundingBox) == null ? void 0 : _a.min.y) ?? 0;
|
|
3621
|
+
return Math.abs(T[0].position.y - _);
|
|
3601
3622
|
}, [
|
|
3602
3623
|
e,
|
|
3603
|
-
|
|
3624
|
+
T,
|
|
3604
3625
|
X
|
|
3605
|
-
]),
|
|
3606
|
-
|
|
3607
|
-
}, []),
|
|
3626
|
+
]), Nn = J((y) => {
|
|
3627
|
+
Ln(y), yt(y.circumferences), wt(true), jt(true);
|
|
3628
|
+
}, []), qt = J(async (y) => {
|
|
3608
3629
|
if (!s) return;
|
|
3609
|
-
|
|
3610
|
-
const
|
|
3630
|
+
Je(false), St(false), et(true);
|
|
3631
|
+
const _ = e ? await Ze().catch(() => {
|
|
3611
3632
|
}) : void 0;
|
|
3612
3633
|
try {
|
|
3613
3634
|
s({
|
|
3614
3635
|
spacingType: L ?? "BK",
|
|
3615
3636
|
sourceUnit: "mm",
|
|
3616
|
-
fileFormat:
|
|
3637
|
+
fileFormat: Ee,
|
|
3617
3638
|
measurementSource: "form_provided",
|
|
3618
3639
|
isDoubleWall: X,
|
|
3619
3640
|
isUnitConverted: false,
|
|
3620
3641
|
formMeasurements: we,
|
|
3621
3642
|
scanMeasurements: N,
|
|
3622
|
-
frontalHeight:
|
|
3643
|
+
frontalHeight: qe,
|
|
3623
3644
|
transverseML: 0,
|
|
3624
3645
|
transverseAP: 0,
|
|
3625
3646
|
scanUrl: n,
|
|
3626
3647
|
decision: "skip",
|
|
3627
3648
|
skipReason: y,
|
|
3628
|
-
screenshots:
|
|
3649
|
+
screenshots: _
|
|
3629
3650
|
});
|
|
3630
3651
|
} finally {
|
|
3631
|
-
|
|
3652
|
+
et(false);
|
|
3632
3653
|
}
|
|
3633
3654
|
}, [
|
|
3634
3655
|
s,
|
|
3635
3656
|
e,
|
|
3636
3657
|
L,
|
|
3637
|
-
|
|
3658
|
+
Ee,
|
|
3638
3659
|
X,
|
|
3639
3660
|
we,
|
|
3640
3661
|
N,
|
|
3641
|
-
|
|
3662
|
+
qe,
|
|
3642
3663
|
n,
|
|
3643
|
-
|
|
3644
|
-
]),
|
|
3645
|
-
|
|
3664
|
+
Ze
|
|
3665
|
+
]), kt = se(null);
|
|
3666
|
+
q(() => {
|
|
3646
3667
|
if (!e || !K) {
|
|
3647
|
-
|
|
3668
|
+
kt.current = null;
|
|
3648
3669
|
return;
|
|
3649
3670
|
}
|
|
3650
|
-
const y = (
|
|
3651
|
-
|
|
3671
|
+
const y = (Ve ?? e).geometry;
|
|
3672
|
+
kt.current = Wt(y);
|
|
3652
3673
|
}, [
|
|
3653
3674
|
e,
|
|
3654
3675
|
K,
|
|
3655
|
-
|
|
3676
|
+
Ve
|
|
3656
3677
|
]);
|
|
3657
|
-
const
|
|
3678
|
+
const Ft = J(async (y) => {
|
|
3658
3679
|
if (!s || !e || N.length === 0 || !L) return;
|
|
3659
|
-
|
|
3660
|
-
const
|
|
3680
|
+
et(true);
|
|
3681
|
+
const _ = await Ze().catch(() => {
|
|
3661
3682
|
});
|
|
3662
3683
|
try {
|
|
3663
|
-
let B = 0,
|
|
3664
|
-
if (
|
|
3665
|
-
const
|
|
3684
|
+
let B = 0, R = 0;
|
|
3685
|
+
if (T.length >= 2) {
|
|
3686
|
+
const U = (Ve ?? e).geometry, he = T[0].position.y;
|
|
3666
3687
|
try {
|
|
3667
|
-
const
|
|
3668
|
-
if (
|
|
3669
|
-
let
|
|
3670
|
-
for (const Ie of
|
|
3671
|
-
B = new z(
|
|
3688
|
+
const ve = kt.current ?? Wt(U), te = $e(ve, U, he);
|
|
3689
|
+
if (te.linePoints.length >= 2) {
|
|
3690
|
+
let ze = te.linePoints[0], De = te.linePoints[0], Me = te.linePoints[0], Ue = te.linePoints[0];
|
|
3691
|
+
for (const Ie of te.linePoints) Ie.x < ze.x && (ze = Ie), Ie.x > De.x && (De = Ie), Ie.z < Me.z && (Me = Ie), Ie.z > Ue.z && (Ue = Ie);
|
|
3692
|
+
B = new z(ze.x, he, ze.z).distanceTo(new z(De.x, he, De.z)), R = new z(Me.x, he, Me.z).distanceTo(new z(Ue.x, he, Ue.z));
|
|
3672
3693
|
}
|
|
3673
3694
|
} catch {
|
|
3674
3695
|
}
|
|
@@ -3676,52 +3697,52 @@ let __tla = (async () => {
|
|
|
3676
3697
|
s({
|
|
3677
3698
|
spacingType: L,
|
|
3678
3699
|
sourceUnit: "mm",
|
|
3679
|
-
fileFormat:
|
|
3700
|
+
fileFormat: Ee,
|
|
3680
3701
|
measurementSource: y === "use_form_measurements" ? "form_provided" : "scan_derived",
|
|
3681
3702
|
isDoubleWall: X,
|
|
3682
3703
|
isUnitConverted: false,
|
|
3683
3704
|
formMeasurements: we,
|
|
3684
3705
|
scanMeasurements: N,
|
|
3685
|
-
frontalHeight: (
|
|
3706
|
+
frontalHeight: (Xe == null ? void 0 : Xe.frontalHeight) ?? qe,
|
|
3686
3707
|
transverseML: B,
|
|
3687
|
-
transverseAP:
|
|
3708
|
+
transverseAP: R,
|
|
3688
3709
|
scanUrl: n,
|
|
3689
3710
|
decision: y,
|
|
3690
|
-
userEnteredMeasurements:
|
|
3691
|
-
screenshots:
|
|
3711
|
+
userEnteredMeasurements: Xe ?? void 0,
|
|
3712
|
+
screenshots: _
|
|
3692
3713
|
});
|
|
3693
3714
|
} finally {
|
|
3694
|
-
|
|
3715
|
+
et(false);
|
|
3695
3716
|
}
|
|
3696
3717
|
}, [
|
|
3697
3718
|
s,
|
|
3698
3719
|
e,
|
|
3699
|
-
|
|
3720
|
+
Ve,
|
|
3700
3721
|
N,
|
|
3701
3722
|
L,
|
|
3702
|
-
|
|
3703
|
-
|
|
3723
|
+
T,
|
|
3724
|
+
Ee,
|
|
3704
3725
|
X,
|
|
3705
3726
|
we,
|
|
3706
3727
|
n,
|
|
3707
|
-
Ne,
|
|
3708
3728
|
Xe,
|
|
3709
|
-
|
|
3710
|
-
|
|
3729
|
+
qe,
|
|
3730
|
+
Ze
|
|
3731
|
+
]), Yn = j(() => {
|
|
3711
3732
|
if (!we || N.length === 0) return false;
|
|
3712
3733
|
const y = Math.min(we.length, N.length);
|
|
3713
3734
|
if (y === 0) return false;
|
|
3714
|
-
for (let
|
|
3715
|
-
const B = we[
|
|
3716
|
-
if (!
|
|
3717
|
-
const
|
|
3718
|
-
if (Math.abs(
|
|
3735
|
+
for (let _ = 0; _ < y; _++) {
|
|
3736
|
+
const B = we[_], R = N[_];
|
|
3737
|
+
if (!R || B == null || B === 0) continue;
|
|
3738
|
+
const U = R.modifiedValue ?? R.originalValue;
|
|
3739
|
+
if (Math.abs(U - B) > 7) return false;
|
|
3719
3740
|
}
|
|
3720
3741
|
return true;
|
|
3721
3742
|
}, [
|
|
3722
3743
|
we,
|
|
3723
3744
|
N
|
|
3724
|
-
]),
|
|
3745
|
+
]), Gn = Qe ? 5 : K && Te || K ? 4 : e ? T.length === 0 ? 2 : 3 : 1, Xn = [
|
|
3725
3746
|
{
|
|
3726
3747
|
label: "Load File",
|
|
3727
3748
|
number: 1
|
|
@@ -3743,7 +3764,7 @@ let __tla = (async () => {
|
|
|
3743
3764
|
number: 5
|
|
3744
3765
|
}
|
|
3745
3766
|
];
|
|
3746
|
-
return F(
|
|
3767
|
+
return F(ho.Provider, {
|
|
3747
3768
|
value: t,
|
|
3748
3769
|
children: [
|
|
3749
3770
|
F("div", {
|
|
@@ -3775,9 +3796,9 @@ let __tla = (async () => {
|
|
|
3775
3796
|
}
|
|
3776
3797
|
})
|
|
3777
3798
|
}),
|
|
3778
|
-
i(
|
|
3779
|
-
steps:
|
|
3780
|
-
currentStep:
|
|
3799
|
+
i(No, {
|
|
3800
|
+
steps: Xn,
|
|
3801
|
+
currentStep: Gn
|
|
3781
3802
|
}),
|
|
3782
3803
|
F("div", {
|
|
3783
3804
|
style: {
|
|
@@ -3795,37 +3816,37 @@ let __tla = (async () => {
|
|
|
3795
3816
|
minHeight: 0
|
|
3796
3817
|
},
|
|
3797
3818
|
children: [
|
|
3798
|
-
K &&
|
|
3819
|
+
K && Te && L && i("div", {
|
|
3799
3820
|
style: {
|
|
3800
3821
|
width: 340,
|
|
3801
3822
|
flexShrink: 0,
|
|
3802
3823
|
borderRight: "1px solid #e0e0e0",
|
|
3803
3824
|
overflow: "hidden"
|
|
3804
3825
|
},
|
|
3805
|
-
children: i(
|
|
3826
|
+
children: i(Jo, {
|
|
3806
3827
|
amputationType: L,
|
|
3807
3828
|
spacingInches: v,
|
|
3808
3829
|
scanMeasurements: N,
|
|
3809
|
-
scanFrontalHeight:
|
|
3810
|
-
onSave:
|
|
3811
|
-
onSkip:
|
|
3812
|
-
onFormChange:
|
|
3813
|
-
onHeightChange:
|
|
3830
|
+
scanFrontalHeight: qe,
|
|
3831
|
+
onSave: Nn,
|
|
3832
|
+
onSkip: qt,
|
|
3833
|
+
onFormChange: In,
|
|
3834
|
+
onHeightChange: Dn,
|
|
3814
3835
|
initialValues: we,
|
|
3815
|
-
initialFrontalHeight:
|
|
3836
|
+
initialFrontalHeight: Xe == null ? void 0 : Xe.frontalHeight
|
|
3816
3837
|
})
|
|
3817
3838
|
}),
|
|
3818
3839
|
F("div", {
|
|
3819
|
-
ref:
|
|
3840
|
+
ref: zt,
|
|
3820
3841
|
style: {
|
|
3821
3842
|
flex: 1,
|
|
3822
3843
|
position: "relative",
|
|
3823
3844
|
minHeight: 0,
|
|
3824
3845
|
overflow: "hidden"
|
|
3825
3846
|
},
|
|
3826
|
-
onDragOver: t.showDragDrop ?
|
|
3827
|
-
onDragLeave: t.showDragDrop ?
|
|
3828
|
-
onDrop: t.showDragDrop ?
|
|
3847
|
+
onDragOver: t.showDragDrop ? Tn : void 0,
|
|
3848
|
+
onDragLeave: t.showDragDrop ? On : void 0,
|
|
3849
|
+
onDrop: t.showDragDrop ? $n : void 0,
|
|
3829
3850
|
children: [
|
|
3830
3851
|
t.showDragDrop && !e && !S && i("div", {
|
|
3831
3852
|
style: {
|
|
@@ -3838,7 +3859,7 @@ let __tla = (async () => {
|
|
|
3838
3859
|
justifyContent: "center",
|
|
3839
3860
|
pointerEvents: "none"
|
|
3840
3861
|
},
|
|
3841
|
-
children:
|
|
3862
|
+
children: Re ? i("div", {
|
|
3842
3863
|
style: {
|
|
3843
3864
|
fontSize: 18,
|
|
3844
3865
|
color: "#aaa",
|
|
@@ -3876,7 +3897,7 @@ let __tla = (async () => {
|
|
|
3876
3897
|
]
|
|
3877
3898
|
})
|
|
3878
3899
|
}),
|
|
3879
|
-
!t.showDragDrop && !e && !S && !
|
|
3900
|
+
!t.showDragDrop && !e && !S && !bt && i("div", {
|
|
3880
3901
|
style: {
|
|
3881
3902
|
position: "absolute",
|
|
3882
3903
|
inset: 0,
|
|
@@ -3914,7 +3935,7 @@ let __tla = (async () => {
|
|
|
3914
3935
|
]
|
|
3915
3936
|
})
|
|
3916
3937
|
}),
|
|
3917
|
-
e && !K &&
|
|
3938
|
+
e && !K && T.length === 0 && F("div", {
|
|
3918
3939
|
style: {
|
|
3919
3940
|
position: "absolute",
|
|
3920
3941
|
top: 16,
|
|
@@ -3946,7 +3967,7 @@ let __tla = (async () => {
|
|
|
3946
3967
|
L === "AK" ? "IT" : "MPT"
|
|
3947
3968
|
]
|
|
3948
3969
|
}),
|
|
3949
|
-
e && !K &&
|
|
3970
|
+
e && !K && T.length === 1 && F("div", {
|
|
3950
3971
|
style: {
|
|
3951
3972
|
position: "absolute",
|
|
3952
3973
|
top: 16,
|
|
@@ -3977,15 +3998,15 @@ let __tla = (async () => {
|
|
|
3977
3998
|
"Click mesh to set Origin"
|
|
3978
3999
|
]
|
|
3979
4000
|
}),
|
|
3980
|
-
S && i(
|
|
4001
|
+
S && i(on, {
|
|
3981
4002
|
message: g || "Processing mesh..."
|
|
3982
4003
|
}),
|
|
3983
|
-
V && i(
|
|
4004
|
+
V && i(on, {
|
|
3984
4005
|
message: Q
|
|
3985
4006
|
}),
|
|
3986
|
-
|
|
3987
|
-
message:
|
|
3988
|
-
onDismiss: () =>
|
|
4007
|
+
bt && i(ko, {
|
|
4008
|
+
message: bt,
|
|
4009
|
+
onDismiss: () => Pe(null)
|
|
3989
4010
|
}),
|
|
3990
4011
|
t.showAmputationModal && w && i("div", {
|
|
3991
4012
|
style: {
|
|
@@ -4039,7 +4060,7 @@ let __tla = (async () => {
|
|
|
4039
4060
|
"AK",
|
|
4040
4061
|
"BK"
|
|
4041
4062
|
].map((y) => F("label", {
|
|
4042
|
-
onClick: () =>
|
|
4063
|
+
onClick: () => I(y),
|
|
4043
4064
|
style: {
|
|
4044
4065
|
flex: 1,
|
|
4045
4066
|
display: "flex",
|
|
@@ -4057,7 +4078,7 @@ let __tla = (async () => {
|
|
|
4057
4078
|
type: "radio",
|
|
4058
4079
|
name: "ampType",
|
|
4059
4080
|
checked: L === y,
|
|
4060
|
-
onChange: () =>
|
|
4081
|
+
onChange: () => I(y),
|
|
4061
4082
|
style: {
|
|
4062
4083
|
accentColor: "rgb(12, 67, 173)",
|
|
4063
4084
|
marginBottom: 12,
|
|
@@ -4118,7 +4139,7 @@ let __tla = (async () => {
|
|
|
4118
4139
|
children: "Cancel"
|
|
4119
4140
|
}),
|
|
4120
4141
|
i("button", {
|
|
4121
|
-
onClick: () => L &&
|
|
4142
|
+
onClick: () => L && Hn(L),
|
|
4122
4143
|
disabled: !L,
|
|
4123
4144
|
style: {
|
|
4124
4145
|
padding: "6px 16px",
|
|
@@ -4150,8 +4171,8 @@ let __tla = (async () => {
|
|
|
4150
4171
|
zIndex: 10
|
|
4151
4172
|
}
|
|
4152
4173
|
}),
|
|
4153
|
-
i(
|
|
4154
|
-
children: F(
|
|
4174
|
+
i(Ao, {
|
|
4175
|
+
children: F(lo, {
|
|
4155
4176
|
camera: {
|
|
4156
4177
|
position: [
|
|
4157
4178
|
0,
|
|
@@ -4161,14 +4182,14 @@ let __tla = (async () => {
|
|
|
4161
4182
|
},
|
|
4162
4183
|
style: {
|
|
4163
4184
|
display: e ? "block" : "none",
|
|
4164
|
-
backgroundColor:
|
|
4185
|
+
backgroundColor: _e ? "#070611" : void 0
|
|
4165
4186
|
},
|
|
4166
4187
|
gl: {
|
|
4167
4188
|
localClippingEnabled: true,
|
|
4168
4189
|
preserveDrawingBuffer: true
|
|
4169
4190
|
},
|
|
4170
4191
|
scene: {
|
|
4171
|
-
background:
|
|
4192
|
+
background: _e ? new O.Color("#070611") : null
|
|
4172
4193
|
},
|
|
4173
4194
|
children: [
|
|
4174
4195
|
i("ambientLight", {
|
|
@@ -4198,15 +4219,15 @@ let __tla = (async () => {
|
|
|
4198
4219
|
],
|
|
4199
4220
|
intensity: 0.2
|
|
4200
4221
|
}),
|
|
4201
|
-
e && A === "3D" && i(
|
|
4222
|
+
e && A === "3D" && i(Lo, {
|
|
4202
4223
|
mesh: e,
|
|
4203
4224
|
maxPoints: 2,
|
|
4204
|
-
meshColor:
|
|
4205
|
-
meshOpacity:
|
|
4225
|
+
meshColor: Vt,
|
|
4226
|
+
meshOpacity: _e ? 0.3 : Rn,
|
|
4206
4227
|
frontFaceOnly: Z,
|
|
4207
4228
|
doubleShellTransparency: X && K
|
|
4208
4229
|
}),
|
|
4209
|
-
e && A === "3D" && i(
|
|
4230
|
+
e && A === "3D" && i(Io, {
|
|
4210
4231
|
modelSize: d,
|
|
4211
4232
|
labels: [
|
|
4212
4233
|
L === "AK" ? "IT" : "MPT",
|
|
@@ -4214,98 +4235,98 @@ let __tla = (async () => {
|
|
|
4214
4235
|
"Cut Plane"
|
|
4215
4236
|
]
|
|
4216
4237
|
}),
|
|
4217
|
-
i(
|
|
4238
|
+
i($o, {
|
|
4218
4239
|
modelSize: d,
|
|
4219
4240
|
isAligned: K,
|
|
4220
|
-
isCut:
|
|
4241
|
+
isCut: Mt,
|
|
4221
4242
|
mesh: e,
|
|
4222
4243
|
viewMode: A,
|
|
4223
|
-
sliceY: K &&
|
|
4224
|
-
landmarkCount:
|
|
4225
|
-
measurementGeometry:
|
|
4226
|
-
resetCameraToFrontRef:
|
|
4244
|
+
sliceY: K && T.length >= 2 ? Ae ?? mt ?? T[0].position.y : void 0,
|
|
4245
|
+
landmarkCount: T.length,
|
|
4246
|
+
measurementGeometry: me,
|
|
4247
|
+
resetCameraToFrontRef: Ct
|
|
4227
4248
|
}),
|
|
4228
|
-
!K && i(
|
|
4249
|
+
!K && i(fn, {
|
|
4229
4250
|
enableDamping: false
|
|
4230
4251
|
}),
|
|
4231
|
-
K && N.length > 0 && e && A === "3D" && i(
|
|
4252
|
+
K && N.length > 0 && e && A === "3D" && i(Ho, {
|
|
4232
4253
|
mesh: e,
|
|
4233
|
-
isDragging:
|
|
4254
|
+
isDragging: Mn
|
|
4234
4255
|
}),
|
|
4235
|
-
e && K &&
|
|
4236
|
-
const
|
|
4237
|
-
if (!
|
|
4238
|
-
const B =
|
|
4239
|
-
return A === "2D" ? i(
|
|
4240
|
-
mesh:
|
|
4241
|
-
upperY:
|
|
4242
|
-
originY:
|
|
4256
|
+
e && K && T.length >= 3 && (() => {
|
|
4257
|
+
const _ = e.geometry.getIndex();
|
|
4258
|
+
if (!_ || _.count < 30) return null;
|
|
4259
|
+
const B = T[2], R = T[0], U = je ?? B.position.y, $ = Ae ?? mt ?? R.position.y;
|
|
4260
|
+
return A === "2D" ? i(Yo, {
|
|
4261
|
+
mesh: Ve ?? e,
|
|
4262
|
+
upperY: $,
|
|
4263
|
+
originY: R.position.y,
|
|
4243
4264
|
modelSize: d,
|
|
4244
|
-
meshColor:
|
|
4265
|
+
meshColor: Vt,
|
|
4245
4266
|
displayUnit: D
|
|
4246
|
-
}) : F(
|
|
4267
|
+
}) : F(Be, {
|
|
4247
4268
|
children: [
|
|
4248
|
-
i(
|
|
4249
|
-
mesh:
|
|
4250
|
-
startY:
|
|
4251
|
-
endY:
|
|
4252
|
-
spacing:
|
|
4269
|
+
i(Eo, {
|
|
4270
|
+
mesh: Ve ?? e,
|
|
4271
|
+
startY: U,
|
|
4272
|
+
endY: $,
|
|
4273
|
+
spacing: rt,
|
|
4253
4274
|
modelSize: d,
|
|
4254
|
-
onMeasurementsChange:
|
|
4275
|
+
onMeasurementsChange: Y,
|
|
4255
4276
|
reverseOrder: true,
|
|
4256
4277
|
displayUnit: D,
|
|
4257
4278
|
useInnerSurface: X && !Z,
|
|
4258
|
-
formMeasurements:
|
|
4259
|
-
originY:
|
|
4260
|
-
wasmSlices:
|
|
4279
|
+
formMeasurements: Te ? Pn ?? we : Ge ? we : void 0,
|
|
4280
|
+
originY: xt ?? R.position.y,
|
|
4281
|
+
wasmSlices: Le
|
|
4261
4282
|
}),
|
|
4262
|
-
i(
|
|
4283
|
+
i(Oo, {
|
|
4263
4284
|
mesh: e,
|
|
4264
|
-
greenY:
|
|
4285
|
+
greenY: xt ?? R.position.y,
|
|
4265
4286
|
modelSize: d,
|
|
4266
4287
|
displayUnit: D,
|
|
4267
4288
|
bottomY: X ? B.position.y : void 0,
|
|
4268
|
-
formHeight:
|
|
4289
|
+
formHeight: Te ? _n : Ge ? Xe == null ? void 0 : Xe.frontalHeight : void 0
|
|
4269
4290
|
}),
|
|
4270
|
-
i(
|
|
4291
|
+
i(Go, {
|
|
4271
4292
|
mesh: e,
|
|
4272
|
-
yPosition:
|
|
4273
|
-
onYChange: (
|
|
4274
|
-
|
|
4275
|
-
const
|
|
4276
|
-
|
|
4293
|
+
yPosition: xt ?? R.position.y,
|
|
4294
|
+
onYChange: (he) => {
|
|
4295
|
+
Ot(he), ke(null);
|
|
4296
|
+
const ve = he - R.position.y;
|
|
4297
|
+
gt((mt ?? R.position.y + rt * 2) + ve);
|
|
4277
4298
|
},
|
|
4278
|
-
minY:
|
|
4279
|
-
maxY:
|
|
4299
|
+
minY: R.position.y - rt,
|
|
4300
|
+
maxY: R.position.y + rt,
|
|
4280
4301
|
modelSize: d,
|
|
4281
4302
|
color: "#44ff44",
|
|
4282
4303
|
hoverColor: "#88ff88",
|
|
4283
4304
|
dragColor: "#ffffff",
|
|
4284
4305
|
label: L === "AK" ? "IT" : "MPT",
|
|
4285
|
-
onDragStart: () =>
|
|
4286
|
-
onDragEnd: () =>
|
|
4306
|
+
onDragStart: () => Tt(true),
|
|
4307
|
+
onDragEnd: () => Tt(false)
|
|
4287
4308
|
})
|
|
4288
4309
|
]
|
|
4289
4310
|
});
|
|
4290
4311
|
})(),
|
|
4291
|
-
e && K && A === "3D" &&
|
|
4312
|
+
e && K && A === "3D" && _e && i(fr, {
|
|
4292
4313
|
mesh: e
|
|
4293
4314
|
}),
|
|
4294
|
-
e && t.showDebug &&
|
|
4315
|
+
e && t.showDebug && _e && A === "3D" && i(dr, {
|
|
4295
4316
|
mesh: e,
|
|
4296
4317
|
modelSize: d,
|
|
4297
|
-
layers:
|
|
4298
|
-
landmarkPoints:
|
|
4318
|
+
layers: $t,
|
|
4319
|
+
landmarkPoints: T,
|
|
4299
4320
|
componentDebug: null,
|
|
4300
|
-
aoData:
|
|
4321
|
+
aoData: ge,
|
|
4301
4322
|
aoGeometry: H,
|
|
4302
|
-
measurementGeometry:
|
|
4323
|
+
measurementGeometry: me
|
|
4303
4324
|
}),
|
|
4304
|
-
i(
|
|
4305
|
-
screenshotFnRef:
|
|
4325
|
+
i(gr, {
|
|
4326
|
+
screenshotFnRef: Bn,
|
|
4306
4327
|
mesh: e,
|
|
4307
4328
|
modelSize: d,
|
|
4308
|
-
measurementGeometry:
|
|
4329
|
+
measurementGeometry: me
|
|
4309
4330
|
})
|
|
4310
4331
|
]
|
|
4311
4332
|
})
|
|
@@ -4337,8 +4358,8 @@ let __tla = (async () => {
|
|
|
4337
4358
|
},
|
|
4338
4359
|
children: "Start Over"
|
|
4339
4360
|
}),
|
|
4340
|
-
!K &&
|
|
4341
|
-
onClick:
|
|
4361
|
+
!K && T.length >= 1 && i("button", {
|
|
4362
|
+
onClick: En,
|
|
4342
4363
|
style: {
|
|
4343
4364
|
padding: "6px 16px",
|
|
4344
4365
|
borderRadius: 4,
|
|
@@ -4354,8 +4375,8 @@ let __tla = (async () => {
|
|
|
4354
4375
|
},
|
|
4355
4376
|
children: "Reset Points"
|
|
4356
4377
|
}),
|
|
4357
|
-
K && !
|
|
4358
|
-
onClick:
|
|
4378
|
+
K && !Qe && i("button", {
|
|
4379
|
+
onClick: Vn,
|
|
4359
4380
|
style: {
|
|
4360
4381
|
padding: "6px 16px",
|
|
4361
4382
|
borderRadius: 4,
|
|
@@ -4373,11 +4394,11 @@ let __tla = (async () => {
|
|
|
4373
4394
|
})
|
|
4374
4395
|
]
|
|
4375
4396
|
}),
|
|
4376
|
-
t.showDebug &&
|
|
4377
|
-
layers:
|
|
4378
|
-
onToggleLayer: (y) =>
|
|
4379
|
-
...
|
|
4380
|
-
[y]: !
|
|
4397
|
+
t.showDebug && _e && e && A === "3D" && i(pr, {
|
|
4398
|
+
layers: $t,
|
|
4399
|
+
onToggleLayer: (y) => kn((_) => ({
|
|
4400
|
+
..._,
|
|
4401
|
+
[y]: !_[y]
|
|
4381
4402
|
})),
|
|
4382
4403
|
isDoubleShell: X
|
|
4383
4404
|
}),
|
|
@@ -4520,13 +4541,13 @@ let __tla = (async () => {
|
|
|
4520
4541
|
boxShadow: "0 2px 8px rgba(0,0,0,0.1)"
|
|
4521
4542
|
},
|
|
4522
4543
|
children: i("button", {
|
|
4523
|
-
onClick: () =>
|
|
4544
|
+
onClick: () => wt((y) => !y),
|
|
4524
4545
|
style: {
|
|
4525
4546
|
padding: "6px 14px",
|
|
4526
4547
|
fontSize: 13,
|
|
4527
|
-
fontWeight:
|
|
4528
|
-
backgroundColor:
|
|
4529
|
-
color:
|
|
4548
|
+
fontWeight: Ge ? 600 : 400,
|
|
4549
|
+
backgroundColor: Ge ? "rgb(12, 67, 173)" : "#fff",
|
|
4550
|
+
color: Ge ? "#fff" : "#666",
|
|
4530
4551
|
border: "none",
|
|
4531
4552
|
cursor: "pointer",
|
|
4532
4553
|
fontFamily: "system-ui, sans-serif"
|
|
@@ -4544,13 +4565,13 @@ let __tla = (async () => {
|
|
|
4544
4565
|
},
|
|
4545
4566
|
children: i("button", {
|
|
4546
4567
|
onClick: async () => {
|
|
4547
|
-
const y = await
|
|
4568
|
+
const y = await Ze();
|
|
4548
4569
|
if (!y) return;
|
|
4549
|
-
const
|
|
4550
|
-
const
|
|
4551
|
-
|
|
4570
|
+
const _ = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10), B = (R, U) => {
|
|
4571
|
+
const $ = document.createElement("a");
|
|
4572
|
+
$.href = R, $.download = U, $.click();
|
|
4552
4573
|
};
|
|
4553
|
-
B(y.frontal_view_png, `measurements_front_${
|
|
4574
|
+
B(y.frontal_view_png, `measurements_front_${_}.png`), await new Promise((R) => setTimeout(R, 300)), B(y.side_view_png, `measurements_transverse_${_}.png`);
|
|
4554
4575
|
},
|
|
4555
4576
|
style: {
|
|
4556
4577
|
padding: "6px 14px",
|
|
@@ -4574,13 +4595,13 @@ let __tla = (async () => {
|
|
|
4574
4595
|
boxShadow: "0 2px 8px rgba(0,0,0,0.1)"
|
|
4575
4596
|
},
|
|
4576
4597
|
children: i("button", {
|
|
4577
|
-
onClick: () =>
|
|
4598
|
+
onClick: () => An((y) => !y),
|
|
4578
4599
|
style: {
|
|
4579
4600
|
padding: "6px 14px",
|
|
4580
4601
|
fontSize: 13,
|
|
4581
|
-
fontWeight:
|
|
4582
|
-
backgroundColor:
|
|
4583
|
-
color:
|
|
4602
|
+
fontWeight: _e ? 600 : 400,
|
|
4603
|
+
backgroundColor: _e ? "#e65100" : "#fff",
|
|
4604
|
+
color: _e ? "#fff" : "#666",
|
|
4584
4605
|
border: "none",
|
|
4585
4606
|
cursor: "pointer",
|
|
4586
4607
|
fontFamily: "system-ui, sans-serif"
|
|
@@ -4590,19 +4611,19 @@ let __tla = (async () => {
|
|
|
4590
4611
|
})
|
|
4591
4612
|
]
|
|
4592
4613
|
}),
|
|
4593
|
-
e &&
|
|
4594
|
-
wasAutoScaled:
|
|
4595
|
-
onDismiss: () =>
|
|
4614
|
+
e && re && i(jo, {
|
|
4615
|
+
wasAutoScaled: le,
|
|
4616
|
+
onDismiss: () => ee(false)
|
|
4596
4617
|
}),
|
|
4597
|
-
e &&
|
|
4618
|
+
e && be && K && i(Vo, {
|
|
4598
4619
|
isDoubleShell: X,
|
|
4599
|
-
onDismiss: () =>
|
|
4620
|
+
onDismiss: () => oe(false)
|
|
4600
4621
|
})
|
|
4601
4622
|
]
|
|
4602
4623
|
})
|
|
4603
4624
|
]
|
|
4604
4625
|
}),
|
|
4605
|
-
|
|
4626
|
+
Ce && F("div", {
|
|
4606
4627
|
"data-finalizing-overlay": true,
|
|
4607
4628
|
style: {
|
|
4608
4629
|
position: "absolute",
|
|
@@ -4651,9 +4672,9 @@ let __tla = (async () => {
|
|
|
4651
4672
|
flexShrink: 0
|
|
4652
4673
|
},
|
|
4653
4674
|
children: [
|
|
4654
|
-
!
|
|
4655
|
-
disabled:
|
|
4656
|
-
onClick: () =>
|
|
4675
|
+
!Te && s && i("button", {
|
|
4676
|
+
disabled: Ce,
|
|
4677
|
+
onClick: () => St(true),
|
|
4657
4678
|
style: {
|
|
4658
4679
|
padding: "6px 16px",
|
|
4659
4680
|
borderRadius: 4,
|
|
@@ -4661,23 +4682,23 @@ let __tla = (async () => {
|
|
|
4661
4682
|
fontWeight: 500,
|
|
4662
4683
|
backgroundColor: "#fff",
|
|
4663
4684
|
border: "1px solid #bdbdbd",
|
|
4664
|
-
color:
|
|
4665
|
-
cursor:
|
|
4685
|
+
color: Ce ? "#999" : "#666",
|
|
4686
|
+
cursor: Ce ? "not-allowed" : "pointer",
|
|
4666
4687
|
fontFamily: "system-ui, sans-serif",
|
|
4667
4688
|
letterSpacing: "0.4px",
|
|
4668
4689
|
lineHeight: "36px"
|
|
4669
4690
|
},
|
|
4670
4691
|
children: "Have Galileo Check My Measurements"
|
|
4671
4692
|
}),
|
|
4672
|
-
|
|
4693
|
+
Te && i("div", {}),
|
|
4673
4694
|
F("div", {
|
|
4674
4695
|
style: {
|
|
4675
4696
|
display: "flex",
|
|
4676
4697
|
gap: 8
|
|
4677
4698
|
},
|
|
4678
4699
|
children: [
|
|
4679
|
-
e && !K &&
|
|
4680
|
-
onClick:
|
|
4700
|
+
e && !K && T.length >= 2 && i("button", {
|
|
4701
|
+
onClick: jn,
|
|
4681
4702
|
style: {
|
|
4682
4703
|
padding: "6px 16px",
|
|
4683
4704
|
borderRadius: 4,
|
|
@@ -4693,8 +4714,8 @@ let __tla = (async () => {
|
|
|
4693
4714
|
},
|
|
4694
4715
|
children: "Next \xBB"
|
|
4695
4716
|
}),
|
|
4696
|
-
K &&
|
|
4697
|
-
onClick: () =>
|
|
4717
|
+
K && Qe && !Te && i("button", {
|
|
4718
|
+
onClick: () => Je(true),
|
|
4698
4719
|
style: {
|
|
4699
4720
|
padding: "6px 16px",
|
|
4700
4721
|
borderRadius: 4,
|
|
@@ -4710,37 +4731,37 @@ let __tla = (async () => {
|
|
|
4710
4731
|
},
|
|
4711
4732
|
children: "Edit Measurements"
|
|
4712
4733
|
}),
|
|
4713
|
-
K &&
|
|
4714
|
-
disabled:
|
|
4715
|
-
onClick: () =>
|
|
4734
|
+
K && Qe && (Yn ? i("button", {
|
|
4735
|
+
disabled: Ce,
|
|
4736
|
+
onClick: () => Ft("continue"),
|
|
4716
4737
|
style: {
|
|
4717
4738
|
padding: "6px 16px",
|
|
4718
4739
|
borderRadius: 4,
|
|
4719
4740
|
fontSize: 14,
|
|
4720
4741
|
fontWeight: 500,
|
|
4721
|
-
backgroundColor:
|
|
4742
|
+
backgroundColor: Ce ? "#9e9e9e" : "rgb(12, 67, 173)",
|
|
4722
4743
|
border: "none",
|
|
4723
4744
|
color: "#fff",
|
|
4724
|
-
cursor:
|
|
4745
|
+
cursor: Ce ? "not-allowed" : "pointer",
|
|
4725
4746
|
fontFamily: "system-ui, sans-serif",
|
|
4726
4747
|
letterSpacing: "0.4px",
|
|
4727
4748
|
lineHeight: "36px"
|
|
4728
4749
|
},
|
|
4729
4750
|
children: "Continue"
|
|
4730
|
-
}) : F(
|
|
4751
|
+
}) : F(Be, {
|
|
4731
4752
|
children: [
|
|
4732
4753
|
i("button", {
|
|
4733
|
-
disabled:
|
|
4734
|
-
onClick: () =>
|
|
4754
|
+
disabled: Ce,
|
|
4755
|
+
onClick: () => Ft("use_form_measurements"),
|
|
4735
4756
|
style: {
|
|
4736
4757
|
padding: "6px 16px",
|
|
4737
4758
|
borderRadius: 4,
|
|
4738
4759
|
fontSize: 14,
|
|
4739
4760
|
fontWeight: 500,
|
|
4740
|
-
backgroundColor:
|
|
4761
|
+
backgroundColor: Ce ? "#9e9e9e" : "rgb(12, 67, 173)",
|
|
4741
4762
|
border: "none",
|
|
4742
4763
|
color: "#fff",
|
|
4743
|
-
cursor:
|
|
4764
|
+
cursor: Ce ? "not-allowed" : "pointer",
|
|
4744
4765
|
fontFamily: "system-ui, sans-serif",
|
|
4745
4766
|
letterSpacing: "0.4px",
|
|
4746
4767
|
lineHeight: "36px"
|
|
@@ -4748,17 +4769,17 @@ let __tla = (async () => {
|
|
|
4748
4769
|
children: "Set to Measurements"
|
|
4749
4770
|
}),
|
|
4750
4771
|
i("button", {
|
|
4751
|
-
disabled:
|
|
4752
|
-
onClick: () =>
|
|
4772
|
+
disabled: Ce,
|
|
4773
|
+
onClick: () => Ft("use_scan"),
|
|
4753
4774
|
style: {
|
|
4754
4775
|
padding: "6px 16px",
|
|
4755
4776
|
borderRadius: 4,
|
|
4756
4777
|
fontSize: 14,
|
|
4757
4778
|
fontWeight: 500,
|
|
4758
|
-
backgroundColor:
|
|
4779
|
+
backgroundColor: Ce ? "#e0e0e0" : "#fff",
|
|
4759
4780
|
border: "1px solid #bdbdbd",
|
|
4760
|
-
color:
|
|
4761
|
-
cursor:
|
|
4781
|
+
color: Ce ? "#999" : "#333",
|
|
4782
|
+
cursor: Ce ? "not-allowed" : "pointer",
|
|
4762
4783
|
fontFamily: "system-ui, sans-serif",
|
|
4763
4784
|
letterSpacing: "0.4px",
|
|
4764
4785
|
lineHeight: "36px"
|
|
@@ -4773,7 +4794,7 @@ let __tla = (async () => {
|
|
|
4773
4794
|
})
|
|
4774
4795
|
]
|
|
4775
4796
|
}),
|
|
4776
|
-
a &&
|
|
4797
|
+
a && vt.length > 0 && F("div", {
|
|
4777
4798
|
style: {
|
|
4778
4799
|
height: 120,
|
|
4779
4800
|
flexShrink: 0,
|
|
@@ -4820,9 +4841,9 @@ let __tla = (async () => {
|
|
|
4820
4841
|
},
|
|
4821
4842
|
children: [
|
|
4822
4843
|
"WASM ",
|
|
4823
|
-
|
|
4844
|
+
Oe.current ? "v2" : "N/A",
|
|
4824
4845
|
" | ",
|
|
4825
|
-
|
|
4846
|
+
T.length,
|
|
4826
4847
|
" pts | ",
|
|
4827
4848
|
K ? "aligned" : "unaligned",
|
|
4828
4849
|
" | ",
|
|
@@ -4831,7 +4852,7 @@ let __tla = (async () => {
|
|
|
4831
4852
|
]
|
|
4832
4853
|
}),
|
|
4833
4854
|
i("button", {
|
|
4834
|
-
onClick: () =>
|
|
4855
|
+
onClick: () => Nt([]),
|
|
4835
4856
|
style: {
|
|
4836
4857
|
background: "none",
|
|
4837
4858
|
border: "1px solid #30363d",
|
|
@@ -4848,43 +4869,43 @@ let __tla = (async () => {
|
|
|
4848
4869
|
]
|
|
4849
4870
|
}),
|
|
4850
4871
|
i("div", {
|
|
4851
|
-
ref:
|
|
4872
|
+
ref: tt,
|
|
4852
4873
|
style: {
|
|
4853
4874
|
flex: 1,
|
|
4854
4875
|
overflowY: "auto",
|
|
4855
4876
|
padding: "4px 10px",
|
|
4856
4877
|
lineHeight: 1.6
|
|
4857
4878
|
},
|
|
4858
|
-
children:
|
|
4859
|
-
const B = y.includes("ERROR") || y.includes("failed"),
|
|
4879
|
+
children: vt.map((y, _) => {
|
|
4880
|
+
const B = y.includes("ERROR") || y.includes("failed"), R = y.includes("warning") || y.includes("WARN"), U = y.includes("PIPELINE:"), $ = y.includes("STATE:");
|
|
4860
4881
|
return i("div", {
|
|
4861
4882
|
style: {
|
|
4862
|
-
color: B ? "#f85149" :
|
|
4883
|
+
color: B ? "#f85149" : R ? "#d29922" : U ? "#58a6ff" : $ ? "#3fb950" : "#8b949e",
|
|
4863
4884
|
whiteSpace: "pre"
|
|
4864
4885
|
},
|
|
4865
4886
|
children: y
|
|
4866
|
-
},
|
|
4887
|
+
}, _);
|
|
4867
4888
|
})
|
|
4868
4889
|
})
|
|
4869
4890
|
]
|
|
4870
4891
|
})
|
|
4871
4892
|
]
|
|
4872
4893
|
}),
|
|
4873
|
-
|
|
4874
|
-
onSkip:
|
|
4875
|
-
onCancel: () =>
|
|
4894
|
+
Fn && i(wn, {
|
|
4895
|
+
onSkip: qt,
|
|
4896
|
+
onCancel: () => St(false)
|
|
4876
4897
|
})
|
|
4877
4898
|
]
|
|
4878
4899
|
});
|
|
4879
4900
|
};
|
|
4880
|
-
function
|
|
4881
|
-
return
|
|
4901
|
+
function gr({ screenshotFnRef: t }) {
|
|
4902
|
+
return q(() => {
|
|
4882
4903
|
t.current = null;
|
|
4883
4904
|
}, [
|
|
4884
4905
|
t
|
|
4885
4906
|
]), null;
|
|
4886
4907
|
}
|
|
4887
|
-
|
|
4908
|
+
zn = function(t) {
|
|
4888
4909
|
const r = t === "AK" ? 2 : 1, n = [];
|
|
4889
4910
|
for (let o = 2; o >= 1; o -= r) n.push(`${o}_above`);
|
|
4890
4911
|
n.push("at_ref");
|
|
@@ -4903,25 +4924,25 @@ let __tla = (async () => {
|
|
|
4903
4924
|
]) n.push(`${o}_below`);
|
|
4904
4925
|
return n;
|
|
4905
4926
|
};
|
|
4906
|
-
|
|
4907
|
-
const n =
|
|
4927
|
+
ct = function(t, r) {
|
|
4928
|
+
const n = zn(r), o = {};
|
|
4908
4929
|
for (let s = 0; s < Math.min(t.length, n.length); s++) {
|
|
4909
4930
|
const a = t[s];
|
|
4910
4931
|
a != null && !isNaN(a) && (o[n[s]] = a);
|
|
4911
4932
|
}
|
|
4912
4933
|
return o;
|
|
4913
4934
|
};
|
|
4914
|
-
|
|
4935
|
+
mr = function(t, r) {
|
|
4915
4936
|
if (!t) return;
|
|
4916
|
-
const o =
|
|
4937
|
+
const o = zn(r).map((s) => {
|
|
4917
4938
|
const a = t[s];
|
|
4918
4939
|
return a ?? void 0;
|
|
4919
4940
|
});
|
|
4920
4941
|
if (!o.every((s) => s == null)) return o;
|
|
4921
4942
|
};
|
|
4922
|
-
|
|
4923
|
-
const [o, s] =
|
|
4924
|
-
|
|
4943
|
+
kr = ({ request: t, onComplete: r, wasmModule: n }) => {
|
|
4944
|
+
const [o, s] = W(null);
|
|
4945
|
+
q(() => {
|
|
4925
4946
|
if (n != null) return;
|
|
4926
4947
|
let e = false;
|
|
4927
4948
|
const m = async (d) => {
|
|
@@ -4941,23 +4962,23 @@ let __tla = (async () => {
|
|
|
4941
4962
|
}, [
|
|
4942
4963
|
n
|
|
4943
4964
|
]);
|
|
4944
|
-
const a = n !== void 0 ? n : o ?? void 0, c = j(() =>
|
|
4965
|
+
const a = n !== void 0 ? n : o ?? void 0, c = j(() => mr(t.form_measurements, t.spacing_type), [
|
|
4945
4966
|
t.form_measurements,
|
|
4946
4967
|
t.spacing_type
|
|
4947
4968
|
]), l = (e) => {
|
|
4948
4969
|
var _a, _b;
|
|
4949
|
-
const m = e.scanMeasurements.map((A) => +(A.modifiedValue ?? A.originalValue).toFixed(1)), d =
|
|
4970
|
+
const m = e.scanMeasurements.map((A) => +(A.modifiedValue ?? A.originalValue).toFixed(1)), d = ct(m, t.spacing_type);
|
|
4950
4971
|
let f, u;
|
|
4951
4972
|
if (e.formMeasurements) {
|
|
4952
|
-
f =
|
|
4973
|
+
f = ct(e.formMeasurements, t.spacing_type);
|
|
4953
4974
|
const A = e.scanMeasurements.map((P, v) => {
|
|
4954
4975
|
var _a2;
|
|
4955
4976
|
const k = (_a2 = e.formMeasurements) == null ? void 0 : _a2[v];
|
|
4956
4977
|
return k == null || isNaN(k) ? null : +((P.modifiedValue ?? P.originalValue) - k).toFixed(1);
|
|
4957
4978
|
});
|
|
4958
|
-
u =
|
|
4979
|
+
u = ct(A, t.spacing_type);
|
|
4959
4980
|
}
|
|
4960
|
-
const x = e.userEnteredMeasurements ?
|
|
4981
|
+
const x = e.userEnteredMeasurements ? ct(e.userEnteredMeasurements.circumferences, t.spacing_type) : void 0, S = e.decision === "use_scan" || e.decision === "continue", p = S ? d : x ?? f ?? d, g = S ? +e.frontalHeight.toFixed(1) : +(((_a = e.userEnteredMeasurements) == null ? void 0 : _a.frontalHeight) ?? e.frontalHeight).toFixed(1), b = {
|
|
4961
4982
|
spacing_type: t.spacing_type,
|
|
4962
4983
|
source_unit: "mm",
|
|
4963
4984
|
file_format: e.fileFormat,
|
|
@@ -4989,8 +5010,8 @@ let __tla = (async () => {
|
|
|
4989
5010
|
height: "100%",
|
|
4990
5011
|
display: "flex"
|
|
4991
5012
|
},
|
|
4992
|
-
children: i(
|
|
4993
|
-
config:
|
|
5013
|
+
children: i(hr, {
|
|
5014
|
+
config: po,
|
|
4994
5015
|
spacingType: t.spacing_type,
|
|
4995
5016
|
scanUrl: t.scan_url,
|
|
4996
5017
|
formMeasurements: c,
|
|
@@ -5001,9 +5022,9 @@ let __tla = (async () => {
|
|
|
5001
5022
|
};
|
|
5002
5023
|
})();
|
|
5003
5024
|
export {
|
|
5004
|
-
|
|
5025
|
+
kr as G,
|
|
5005
5026
|
__tla,
|
|
5006
|
-
|
|
5007
|
-
|
|
5008
|
-
|
|
5027
|
+
ct as a,
|
|
5028
|
+
mr as c,
|
|
5029
|
+
zn as g
|
|
5009
5030
|
};
|