@nebula-spatial/viewer 0.4.2 → 0.4.3

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,266 +0,0 @@
1
- import { Mesh as F, MeshPhongMaterial as m, MeshLambertMaterial as D, MeshStandardMaterial as L, Color as A, Quaternion as w, Vector3 as B, Group as E, LoaderUtils as C, Box3 as N } from "three";
2
- import { DRACOLoader as v } from "three/examples/jsm/loaders/DRACOLoader.js";
3
- import { FBXLoader as G } from "three/examples/jsm/loaders/FBXLoader.js";
4
- import { GLTFLoader as _ } from "three/examples/jsm/loaders/GLTFLoader.js";
5
- import { S as R, d as O } from "./stage-D-Q_zul6.js";
6
- const b = "Kaydara FBX Binary \0", X = /(?:^|[\r\n])\s*P:\s*"UpAxis"\s*,\s*"int"\s*,\s*"Integer"\s*,\s*""\s*,\s*(-?\d+)/i, z = /(?:^|[\r\n])\s*P:\s*"UpAxisSign"\s*,\s*"int"\s*,\s*"Integer"\s*,\s*""\s*,\s*(-?\d+)/i;
7
- function V(e) {
8
- try {
9
- const n = new Uint8Array(e), r = q(n) ? Y(e) : W(new TextDecoder().decode(n));
10
- return !r || r.sign !== 1 ? null : r.axis === 1 ? "y" : r.axis === 2 ? "z" : null;
11
- } catch {
12
- return null;
13
- }
14
- }
15
- function q(e) {
16
- if (e.byteLength < b.length) return !1;
17
- for (let n = 0; n < b.length; n += 1)
18
- if (e[n] !== b.charCodeAt(n)) return !1;
19
- return !0;
20
- }
21
- function W(e) {
22
- var t, i;
23
- const n = Number.parseInt(((t = X.exec(e)) == null ? void 0 : t[1]) ?? "", 10);
24
- if (!Number.isInteger(n)) return null;
25
- const r = (i = z.exec(e)) == null ? void 0 : i[1], s = r === void 0 ? 1 : Number.parseInt(r, 10);
26
- return Number.isInteger(s) ? { axis: n, sign: s } : null;
27
- }
28
- function Y(e) {
29
- const n = new DataView(e);
30
- if (n.byteLength < 27) return null;
31
- const r = n.getUint32(23, !0) >= 7500;
32
- let s = 27;
33
- for (; s < n.byteLength; ) {
34
- const t = T(n, s, r, !1);
35
- if (!t) break;
36
- if (t.name === "GlobalSettings") return P(n, t.childrenOffset, t.endOffset, r);
37
- s = t.endOffset;
38
- }
39
- return null;
40
- }
41
- function P(e, n, r, s) {
42
- let t = n, i = null, l = 1;
43
- for (; t < r; ) {
44
- const a = T(e, t, s, !0);
45
- if (!a) break;
46
- if (a.name === "P") {
47
- const [u, , , , o] = a.properties;
48
- u === "UpAxis" && typeof o == "number" && (i = o), u === "UpAxisSign" && typeof o == "number" && (l = o);
49
- }
50
- if (a.childrenOffset < a.endOffset) {
51
- const u = P(e, a.childrenOffset, a.endOffset, s);
52
- u && (i ?? (i = u.axis), l = u.sign);
53
- }
54
- t = a.endOffset;
55
- }
56
- return i === null ? null : { axis: i, sign: l };
57
- }
58
- function T(e, n, r, s) {
59
- const t = r ? 25 : 13;
60
- if (n + t > e.byteLength) return null;
61
- const i = M(e, n, r), l = M(e, n + (r ? 8 : 4), r), a = M(e, n + (r ? 16 : 8), r), u = e.getUint8(n + (r ? 24 : 12));
62
- if (i === 0) return null;
63
- const o = n + t, c = o + u, f = c + a;
64
- if (i > e.byteLength || f > i) return null;
65
- const d = new TextDecoder().decode(new Uint8Array(e.buffer, e.byteOffset + o, u)), p = [];
66
- if (s) {
67
- let h = c;
68
- for (let y = 0; y < l; y += 1) {
69
- const g = $(e, h);
70
- if (p.push(g.value), h = g.nextOffset, h > f) return null;
71
- }
72
- }
73
- return { name: d, endOffset: i, childrenOffset: f, properties: p };
74
- }
75
- function M(e, n, r) {
76
- if (!r) return e.getUint32(n, !0);
77
- const s = e.getBigUint64(n, !0);
78
- if (s > BigInt(Number.MAX_SAFE_INTEGER)) throw new Error("FBX offset exceeds the safe integer range.");
79
- return Number(s);
80
- }
81
- function $(e, n) {
82
- const r = String.fromCharCode(e.getUint8(n));
83
- switch (r) {
84
- case "Y":
85
- return { value: e.getInt16(n + 1, !0), nextOffset: n + 3 };
86
- case "C":
87
- return { value: e.getUint8(n + 1) !== 0, nextOffset: n + 2 };
88
- case "I":
89
- return { value: e.getInt32(n + 1, !0), nextOffset: n + 5 };
90
- case "F":
91
- return { value: e.getFloat32(n + 1, !0), nextOffset: n + 5 };
92
- case "D":
93
- return { value: e.getFloat64(n + 1, !0), nextOffset: n + 9 };
94
- case "L":
95
- return { value: Number(e.getBigInt64(n + 1, !0)), nextOffset: n + 9 };
96
- case "S":
97
- case "R": {
98
- const s = e.getUint32(n + 1, !0), t = n + 5, i = new Uint8Array(e.buffer, e.byteOffset + t, s);
99
- return { value: r === "S" ? new TextDecoder().decode(i) : i, nextOffset: t + s };
100
- }
101
- case "f":
102
- case "d":
103
- case "l":
104
- case "i":
105
- case "b":
106
- case "c": {
107
- const s = e.getUint32(n + 9, !0);
108
- return { value: null, nextOffset: n + 13 + s };
109
- }
110
- default:
111
- throw new Error(`Unsupported FBX property type: ${r}`);
112
- }
113
- }
114
- function j(e) {
115
- const n = /* @__PURE__ */ new Map();
116
- e.traverse((r) => {
117
- r instanceof F && (Array.isArray(r.material) ? r.material = r.material.map((s) => S(s, n)) : r.material = S(r.material, n));
118
- });
119
- for (const [r, s] of n)
120
- r !== s && r.dispose();
121
- }
122
- function S(e, n) {
123
- var i, l, a;
124
- const r = n.get(e);
125
- if (r) return r;
126
- if (!(e instanceof m) && !(e instanceof D))
127
- return n.set(e, e), e;
128
- const s = e instanceof m ? e : null, t = new L({
129
- name: e.name,
130
- color: ((i = e.color) == null ? void 0 : i.clone()) ?? new A(16777215),
131
- map: e.map,
132
- emissive: ((l = e.emissive) == null ? void 0 : l.clone()) ?? new A(0),
133
- emissiveMap: e.emissiveMap,
134
- emissiveIntensity: e.emissiveIntensity,
135
- normalMap: e.normalMap,
136
- normalMapType: e.normalMapType,
137
- normalScale: (a = e.normalScale) == null ? void 0 : a.clone(),
138
- bumpMap: e.bumpMap,
139
- bumpScale: e.bumpScale,
140
- displacementMap: e.displacementMap,
141
- displacementScale: e.displacementScale,
142
- displacementBias: e.displacementBias,
143
- aoMap: e.aoMap,
144
- aoMapIntensity: e.aoMapIntensity,
145
- alphaMap: e.alphaMap,
146
- opacity: e.opacity,
147
- transparent: e.transparent,
148
- alphaTest: e.alphaTest,
149
- side: e.side,
150
- depthTest: e.depthTest,
151
- depthWrite: e.depthWrite,
152
- vertexColors: e.vertexColors,
153
- wireframe: e.wireframe,
154
- flatShading: e.flatShading,
155
- metalness: 0,
156
- // Approximate the Blinn-Phong exponent as perceptual roughness. This keeps
157
- // glossy FBX materials glossy without pretending they carry metalness data.
158
- roughness: s ? Math.min(1, Math.max(0.04, Math.sqrt(2 / (s.shininess + 2)))) : 1
159
- });
160
- return t.userData = { ...e.userData }, t.visible = e.visible, t.toneMapped = e.toneMapped, t.clippingPlanes = e.clippingPlanes, t.clipIntersection = e.clipIntersection, t.clipShadows = e.clipShadows, t.polygonOffset = e.polygonOffset, t.polygonOffsetFactor = e.polygonOffsetFactor, t.polygonOffsetUnits = e.polygonOffsetUnits, t.dithering = e.dithering, t.needsUpdate = !0, n.set(e, t), t;
161
- }
162
- const k = new w().setFromAxisAngle(new B(1, 0, 0), Math.PI / 2), Q = new w();
163
- function U(e) {
164
- return e === "fbx" ? "y" : "z";
165
- }
166
- function K(e) {
167
- return e === "y" ? k : Q;
168
- }
169
- function I(e, n) {
170
- const r = K(n);
171
- return r.equals(e.quaternion) ? !1 : (e.quaternion.copy(r), e.updateMatrixWorld(!0), !0);
172
- }
173
- function re(e, n) {
174
- let r = !1, s = null, t = null, i = "z", l;
175
- const a = () => {
176
- r = !0;
177
- }, u = (async () => {
178
- i = n.options.upAxis ?? U(n.format);
179
- let o = null;
180
- try {
181
- if (r || n.signal.aborted) throw x();
182
- const c = e.url ?? await e.resolve(e.entryPath ?? "");
183
- if (o = new E(), o.name = "viewer-model-root", n.format === "fbx") {
184
- const d = await fetch(c, { signal: n.signal });
185
- if (!d.ok) throw new Error(`FBX request failed: ${d.status} ${d.statusText}`);
186
- const p = await d.arrayBuffer();
187
- i = n.options.upAxis ?? V(p) ?? U(n.format), o.add(new G().parse(p, C.extractUrlBase(c))), j(o);
188
- } else {
189
- const d = new v(), p = new _();
190
- try {
191
- n.options.dracoDecoderPath && d.setDecoderPath(n.options.dracoDecoderPath), p.setDRACOLoader(d);
192
- const h = await p.loadAsync(c), y = h.scenes.filter((g) => g !== h.scene);
193
- if (o.add(h.scene), r || n.signal.aborted) {
194
- for (const g of y) o.add(g);
195
- throw x();
196
- }
197
- } finally {
198
- d.dispose();
199
- }
200
- }
201
- if (r || n.signal.aborted) throw x();
202
- I(o, i), Z(o);
203
- const f = new R(o, n.options.simulationTheme, void 0, "model");
204
- s = o, t = f, o = null;
205
- } finally {
206
- o && O(o);
207
- }
208
- })();
209
- return u.catch(() => {
210
- }), {
211
- id: `model-${Math.random().toString(36).slice(2)}`,
212
- opened: u,
213
- get root() {
214
- return (t == null ? void 0 : t.root) ?? null;
215
- },
216
- getFitBounds() {
217
- return (t == null ? void 0 : t.getModelBounds()) ?? null;
218
- },
219
- beforeRender(o, c, f) {
220
- return t == null ? void 0 : t.beforeRender(o, c, f);
221
- },
222
- capabilities: { canPlay: !1, canPause: !1, canReset: !1, hasPhysics: !1, canReorientUpAxis: !0, canToggleGround: !0 },
223
- // Session presentation overrides are only consulted for `interactionMode`
224
- // and `fitPolicy`; the UI group comes from the loader descriptor. Keep the
225
- // two in sync so the override never reads as a contradictory value.
226
- presentation: { preferredViewMode: "3d", interactionMode: "object", uiProfile: "model", fitPolicy: "fit-on-ready" },
227
- getUpAxis() {
228
- return s ? i : null;
229
- },
230
- setTheme(o) {
231
- t == null || t.setTheme(o);
232
- },
233
- setGroundVisible(o) {
234
- t == null || t.setGroundVisible(o);
235
- },
236
- getGroundVisible() {
237
- return (t == null ? void 0 : t.getGroundVisible()) ?? !0;
238
- },
239
- setUpAxis(o) {
240
- if (r || !s || !t || !I(s, o)) return;
241
- i = o, t.reseatGround();
242
- const c = t.getModelBounds();
243
- n.requestRender(), n.fit(c, { padding: 1.15 });
244
- },
245
- beginDispose: a,
246
- dispose() {
247
- return a(), l ?? (l = u.catch(() => {
248
- }).then(() => {
249
- t == null || t.dispose(), t = null, s && O(s), s = null;
250
- })), l;
251
- }
252
- };
253
- }
254
- function Z(e) {
255
- e.updateMatrixWorld(!0);
256
- const n = new N().setFromObject(e);
257
- if (n.isEmpty()) throw new Error("模型不包含可显示的几何内容。");
258
- const r = n.getSize(new B()), s = Math.max(r.x, r.y, r.z);
259
- if (!Number.isFinite(s) || s <= 0) throw new Error("模型尺寸无效。");
260
- }
261
- function x() {
262
- return Object.assign(new Error("Model load aborted."), { name: "AbortError", code: "E_ABORTED" });
263
- }
264
- export {
265
- re as createModelSession
266
- };