@nebula-spatial/viewer 0.4.2 → 0.4.4
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.
- package/CHANGELOG.md +47 -0
- package/FBX-MATERIAL-CONVERSION.md +97 -0
- package/README.md +152 -9
- package/dist/assets/types.d.ts +21 -0
- package/dist/{index-C9CW-EyW.js → index-D-o1ODOX.js} +2084 -1452
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/dist/inspection/types.d.ts +99 -0
- package/dist/mjcf-visual-M1lmyjvw.js +63 -0
- package/dist/mujoco-runtime-C29PXDOl.js +258 -0
- package/dist/plugins.d.ts +5 -1
- package/dist/session-Cz6qHYMc.js +676 -0
- package/dist/session-c7xBLA4J.js +964 -0
- package/dist/{stage-D-Q_zul6.js → stage-D113SHD8.js} +140 -120
- package/dist/types.d.ts +2 -0
- package/dist/ui/types.d.ts +2 -0
- package/dist/urdf-session-AP-cMuwd.js +3001 -0
- package/dist/usd-session-CmSdkRw9.js +1192 -0
- package/package.json +4 -2
- package/dist/mujoco-runtime-s85kwjo7.js +0 -208
- package/dist/session-B-qVl3Yy.js +0 -761
- package/dist/session-B2SfkK9o.js +0 -266
- package/dist/usd-session-DCuV_H-Y.js +0 -538
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var a = (
|
|
4
|
-
import * as
|
|
5
|
-
import { V as
|
|
6
|
-
const
|
|
1
|
+
var y = Object.defineProperty;
|
|
2
|
+
var b = (u, e, t) => e in u ? y(u, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : u[e] = t;
|
|
3
|
+
var a = (u, e, t) => b(u, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
+
import * as r from "three";
|
|
5
|
+
import { V as g } from "./index-D-o1ODOX.js";
|
|
6
|
+
const m = 1, M = (
|
|
7
7
|
/* glsl */
|
|
8
8
|
`
|
|
9
9
|
uniform mat4 textureMatrix;
|
|
@@ -19,7 +19,7 @@ const x = 1, b = (
|
|
|
19
19
|
gl_Position = projectionMatrix * mvPosition;
|
|
20
20
|
}
|
|
21
21
|
`
|
|
22
|
-
),
|
|
22
|
+
), w = (
|
|
23
23
|
/* glsl */
|
|
24
24
|
`
|
|
25
25
|
uniform sampler2D tDiffuse;
|
|
@@ -86,38 +86,38 @@ const x = 1, b = (
|
|
|
86
86
|
}
|
|
87
87
|
`
|
|
88
88
|
);
|
|
89
|
-
class
|
|
90
|
-
constructor({ size: t = 20, textureWidth: i = 512, textureHeight:
|
|
91
|
-
const s = new
|
|
92
|
-
type:
|
|
93
|
-
minFilter:
|
|
94
|
-
magFilter:
|
|
95
|
-
format:
|
|
89
|
+
class P extends r.Mesh {
|
|
90
|
+
constructor({ size: t = 20, textureWidth: i = 512, textureHeight: o = 512 } = {}) {
|
|
91
|
+
const s = new r.Matrix4(), l = new r.WebGLRenderTarget(i, o, {
|
|
92
|
+
type: r.HalfFloatType,
|
|
93
|
+
minFilter: r.LinearFilter,
|
|
94
|
+
magFilter: r.LinearFilter,
|
|
95
|
+
format: r.RGBAFormat,
|
|
96
96
|
depthBuffer: !0,
|
|
97
97
|
samples: 0
|
|
98
|
-
}),
|
|
98
|
+
}), n = new r.ShaderMaterial({
|
|
99
99
|
uniforms: {
|
|
100
|
-
tDiffuse: { value:
|
|
100
|
+
tDiffuse: { value: l.texture },
|
|
101
101
|
textureMatrix: { value: s },
|
|
102
|
-
resolution: { value: new
|
|
103
|
-
fineGridColor: { value: new
|
|
104
|
-
coarseGridColor: { value: new
|
|
102
|
+
resolution: { value: new r.Vector2(i, o) },
|
|
103
|
+
fineGridColor: { value: new r.Color(2502702) },
|
|
104
|
+
coarseGridColor: { value: new r.Color(7897726) },
|
|
105
105
|
blurIntensity: { value: 1.7 },
|
|
106
106
|
reflectionMix: { value: 0.07 },
|
|
107
107
|
gridOpacity: { value: 1 },
|
|
108
108
|
gridScale: { value: 0.2 },
|
|
109
|
-
groundCenter: { value: new
|
|
109
|
+
groundCenter: { value: new r.Vector2() },
|
|
110
110
|
maxRadius: { value: t * 0.5 },
|
|
111
111
|
fadeSoftness: { value: t * 0.325 }
|
|
112
112
|
},
|
|
113
|
-
vertexShader:
|
|
114
|
-
fragmentShader:
|
|
113
|
+
vertexShader: M,
|
|
114
|
+
fragmentShader: w,
|
|
115
115
|
transparent: !0,
|
|
116
116
|
depthWrite: !1,
|
|
117
117
|
toneMapped: !0,
|
|
118
118
|
fog: !1
|
|
119
119
|
});
|
|
120
|
-
super(new
|
|
120
|
+
super(new r.PlaneGeometry(t, t), n);
|
|
121
121
|
a(this, "renderTarget");
|
|
122
122
|
a(this, "textureMatrix");
|
|
123
123
|
a(this, "virtualCamera");
|
|
@@ -132,11 +132,11 @@ class w extends o.Mesh {
|
|
|
132
132
|
a(this, "view");
|
|
133
133
|
a(this, "target");
|
|
134
134
|
a(this, "q");
|
|
135
|
-
this.renderTarget =
|
|
135
|
+
this.renderTarget = l, this.textureMatrix = s, this.virtualCamera = new r.PerspectiveCamera(), this.virtualCamera.layers.set(m), this.clipBias = 3e-3, this.frustumCulled = !1, this.renderOrder = 1, this.position.z = 2e-3, this.reflectorPlane = new r.Plane(), this.normal = new r.Vector3(), this.reflectorWorldPosition = new r.Vector3(), this.cameraWorldPosition = new r.Vector3(), this.rotationMatrix = new r.Matrix4(), this.lookAtPosition = new r.Vector3(0, 0, -1), this.clipPlane = new r.Vector4(), this.view = new r.Vector3(), this.target = new r.Vector3(), this.q = new r.Vector4();
|
|
136
136
|
}
|
|
137
|
-
renderReflection(t, i,
|
|
138
|
-
if (this.reflectorWorldPosition.setFromMatrixPosition(this.matrixWorld), this.cameraWorldPosition.setFromMatrixPosition(
|
|
139
|
-
this.view.reflect(this.normal).negate().add(this.reflectorWorldPosition), this.rotationMatrix.extractRotation(
|
|
137
|
+
renderReflection(t, i, o) {
|
|
138
|
+
if (this.reflectorWorldPosition.setFromMatrixPosition(this.matrixWorld), this.cameraWorldPosition.setFromMatrixPosition(o.matrixWorld), this.rotationMatrix.extractRotation(this.matrixWorld), this.normal.set(0, 0, 1).applyMatrix4(this.rotationMatrix), this.view.subVectors(this.reflectorWorldPosition, this.cameraWorldPosition), this.view.dot(this.normal) > 0) return;
|
|
139
|
+
this.view.reflect(this.normal).negate().add(this.reflectorWorldPosition), this.rotationMatrix.extractRotation(o.matrixWorld), this.lookAtPosition.set(0, 0, -1).applyMatrix4(this.rotationMatrix).add(this.cameraWorldPosition), this.target.subVectors(this.reflectorWorldPosition, this.lookAtPosition).reflect(this.normal).negate().add(this.reflectorWorldPosition), this.virtualCamera.position.copy(this.view), this.virtualCamera.up.set(0, 1, 0).applyMatrix4(this.rotationMatrix).reflect(this.normal), this.virtualCamera.lookAt(this.target), this.virtualCamera.near = o.near, this.virtualCamera.far = o.far, this.virtualCamera.updateMatrixWorld(), this.virtualCamera.projectionMatrix.copy(o.projectionMatrix), this.textureMatrix.set(
|
|
140
140
|
0.5,
|
|
141
141
|
0,
|
|
142
142
|
0,
|
|
@@ -166,83 +166,85 @@ class w extends o.Mesh {
|
|
|
166
166
|
-1,
|
|
167
167
|
(1 + s.elements[10]) / s.elements[14]
|
|
168
168
|
), this.clipPlane.multiplyScalar(2 / this.clipPlane.dot(this.q)), s.elements[2] = this.clipPlane.x, s.elements[6] = this.clipPlane.y, s.elements[10] = this.clipPlane.z + 1 - this.clipBias, s.elements[14] = this.clipPlane.w, this.virtualCamera.projectionMatrixInverse.copy(s).invert();
|
|
169
|
-
const
|
|
169
|
+
const l = t.getRenderTarget(), n = t.xr.enabled, c = t.shadowMap.autoUpdate, d = t.shadowMap.enabled;
|
|
170
170
|
try {
|
|
171
171
|
t.xr.enabled = !1, t.shadowMap.enabled = !1, t.shadowMap.autoUpdate = !1, t.setRenderTarget(this.renderTarget), t.state.buffers.depth.setMask(!0), t.clear(), t.render(i, this.virtualCamera);
|
|
172
172
|
} finally {
|
|
173
|
-
t.setRenderTarget(
|
|
173
|
+
t.setRenderTarget(l), t.xr.enabled = n, t.shadowMap.enabled = d, t.shadowMap.autoUpdate = c;
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
176
|
setRenderSize(t, i) {
|
|
177
177
|
this.renderTarget.setSize(t, i), this.material.uniforms.resolution.value.set(t, i);
|
|
178
178
|
}
|
|
179
179
|
// Radius is in world units; the outer 65% fades before the square mesh edge.
|
|
180
|
-
setRadius(t, i,
|
|
181
|
-
this.scale.setScalar(t * 2 / this.geometry.parameters.width), this.position.x =
|
|
180
|
+
setRadius(t, i, o = this.material.uniforms.groundCenter.value) {
|
|
181
|
+
this.scale.setScalar(t * 2 / this.geometry.parameters.width), this.position.x = o.x, this.position.y = o.y, this.material.uniforms.groundCenter.value.set(o.x, o.y), this.material.uniforms.gridScale.value = i, this.material.uniforms.maxRadius.value = t, this.material.uniforms.fadeSoftness.value = t * 0.65;
|
|
182
182
|
}
|
|
183
183
|
}
|
|
184
|
-
const
|
|
184
|
+
const v = {
|
|
185
185
|
light: {
|
|
186
|
-
background:
|
|
186
|
+
background: g.light,
|
|
187
187
|
fineGrid: 5859168,
|
|
188
188
|
coarseGrid: 3427136,
|
|
189
189
|
gridOpacity: 0.85,
|
|
190
190
|
reflectionMix: 0.06
|
|
191
191
|
},
|
|
192
192
|
dark: {
|
|
193
|
-
background:
|
|
193
|
+
background: g.dark,
|
|
194
194
|
fineGrid: 7375236,
|
|
195
195
|
coarseGrid: 5552554,
|
|
196
196
|
gridOpacity: 0.9,
|
|
197
197
|
reflectionMix: 0.06
|
|
198
198
|
}
|
|
199
|
-
},
|
|
199
|
+
}, C = {
|
|
200
200
|
simulation: 0.68,
|
|
201
201
|
model: 1.4
|
|
202
202
|
};
|
|
203
|
-
function
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
const
|
|
208
|
-
|
|
209
|
-
for (const
|
|
210
|
-
if (
|
|
211
|
-
|
|
212
|
-
for (const
|
|
213
|
-
|
|
214
|
-
i.add(d);
|
|
215
|
-
const h = (l = d.source) == null ? void 0 : l.data;
|
|
216
|
-
h && typeof h.close == "function" && r.add(h);
|
|
217
|
-
}
|
|
203
|
+
function x(u, e = []) {
|
|
204
|
+
var l;
|
|
205
|
+
const t = /* @__PURE__ */ new Set(), i = /* @__PURE__ */ new Set(), o = new Set(e), s = /* @__PURE__ */ new Set();
|
|
206
|
+
u.traverse((n) => {
|
|
207
|
+
const c = n;
|
|
208
|
+
c.geometry && t.add(c.geometry);
|
|
209
|
+
for (const d of Array.isArray(c.material) ? c.material : [c.material])
|
|
210
|
+
if (d) {
|
|
211
|
+
i.add(d);
|
|
212
|
+
for (const h of Object.values(d))
|
|
213
|
+
S(h) && o.add(h);
|
|
218
214
|
}
|
|
219
215
|
});
|
|
220
|
-
for (const
|
|
221
|
-
for (const
|
|
222
|
-
for (const
|
|
223
|
-
|
|
216
|
+
for (const n of t) n.dispose();
|
|
217
|
+
for (const n of i) n.dispose();
|
|
218
|
+
for (const n of o) {
|
|
219
|
+
const c = (l = n.source) == null ? void 0 : l.data;
|
|
220
|
+
c && typeof c.close == "function" && s.add(c), n.dispose();
|
|
221
|
+
}
|
|
222
|
+
for (const n of s) n.close();
|
|
224
223
|
}
|
|
225
|
-
function S(
|
|
226
|
-
return !!(
|
|
224
|
+
function S(u) {
|
|
225
|
+
return !!(u && typeof u == "object" && u.isTexture);
|
|
227
226
|
}
|
|
228
|
-
const
|
|
229
|
-
|
|
227
|
+
const V = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
228
|
+
__proto__: null,
|
|
229
|
+
disposeModelResources: x
|
|
230
|
+
}, Symbol.toStringTag, { value: "Module" })), f = 2213822, G = 6000111, R = 6;
|
|
231
|
+
function T(u, e, t) {
|
|
230
232
|
e.updateMatrixWorld();
|
|
231
|
-
const i = new
|
|
232
|
-
return e.getWorldDirection(i).normalize(),
|
|
233
|
+
const i = new r.Vector3();
|
|
234
|
+
return e.getWorldDirection(i).normalize(), u.setFromNormalAndCoplanarPoint(i, t);
|
|
233
235
|
}
|
|
234
|
-
class
|
|
235
|
-
constructor(e, t = "dark", i,
|
|
236
|
-
a(this, "root", new
|
|
237
|
-
a(this, "reflector", new
|
|
236
|
+
class W {
|
|
237
|
+
constructor(e, t = "dark", i, o = "simulation") {
|
|
238
|
+
a(this, "root", new r.Group());
|
|
239
|
+
a(this, "reflector", new P({ size: 100, textureWidth: 256, textureHeight: 256 }));
|
|
238
240
|
a(this, "values");
|
|
239
241
|
a(this, "fog");
|
|
240
|
-
a(this, "raycaster", new
|
|
241
|
-
a(this, "pointer", new
|
|
242
|
-
a(this, "dragPlane", new
|
|
243
|
-
a(this, "dragTarget", new
|
|
244
|
-
a(this, "dragIntersection", new
|
|
245
|
-
a(this, "dragOffset", new
|
|
242
|
+
a(this, "raycaster", new r.Raycaster());
|
|
243
|
+
a(this, "pointer", new r.Vector2());
|
|
244
|
+
a(this, "dragPlane", new r.Plane());
|
|
245
|
+
a(this, "dragTarget", new r.Vector3());
|
|
246
|
+
a(this, "dragIntersection", new r.Vector3());
|
|
247
|
+
a(this, "dragOffset", new r.Vector3());
|
|
246
248
|
a(this, "bodyGroups", /* @__PURE__ */ new Map());
|
|
247
249
|
a(this, "auxiliaries", /* @__PURE__ */ new Set());
|
|
248
250
|
a(this, "forceLine");
|
|
@@ -252,24 +254,36 @@ class F {
|
|
|
252
254
|
a(this, "size", "");
|
|
253
255
|
a(this, "groundVisible");
|
|
254
256
|
a(this, "disposed", !1);
|
|
255
|
-
this.model = e, this.runtime = i, this.presentation =
|
|
256
|
-
const s = this.values,
|
|
257
|
-
if (!Number.isFinite(
|
|
258
|
-
this.root.add(e), this.forceLine = this.createForceLine(), this.root.add(this.forceLine), e.traverse((
|
|
259
|
-
|
|
257
|
+
this.model = e, this.runtime = i, this.presentation = o, this.values = v[t];
|
|
258
|
+
const s = this.values, l = new r.Box3().setFromObject(e), n = Math.max(...l.getSize(new r.Vector3()).toArray());
|
|
259
|
+
if (!Number.isFinite(n) || n <= 0) throw new Error("Empty simulation geometry.");
|
|
260
|
+
this.root.add(e), this.forceLine = this.createForceLine(), this.root.add(this.forceLine), e.traverse((p) => {
|
|
261
|
+
p instanceof r.Mesh && p.layers.enable(m);
|
|
260
262
|
}), this.root.add(this.reflector);
|
|
261
|
-
const
|
|
262
|
-
d.fineGridColor.value.setHex(s.fineGrid), d.coarseGridColor.value.setHex(s.coarseGrid), d.gridOpacity.value = s.gridOpacity, d.reflectionMix.value = s.reflectionMix, this.layoutGround(
|
|
263
|
-
const h =
|
|
264
|
-
this.fog = new
|
|
263
|
+
const c = Math.max(l.getSize(new r.Vector3()).length() * 0.5, 0.02), d = this.reflector.material.uniforms;
|
|
264
|
+
d.fineGridColor.value.setHex(s.fineGrid), d.coarseGridColor.value.setHex(s.coarseGrid), d.gridOpacity.value = s.gridOpacity, d.reflectionMix.value = s.reflectionMix, this.layoutGround(l, c), this.groundVisible = o === "simulation", this.setGroundVisible(this.groundVisible);
|
|
265
|
+
const h = c / Math.sin(r.MathUtils.degToRad(38) / 2) * 1.25;
|
|
266
|
+
this.fog = new r.Fog(s.background, h * 2.5, h * 8);
|
|
267
|
+
}
|
|
268
|
+
setRuntime(e) {
|
|
269
|
+
this.disposed || this.runtime === e || (this.endGrab(), this.runtime = e, this.bodyGroups.clear());
|
|
270
|
+
}
|
|
271
|
+
replaceModel(e, t = !0) {
|
|
272
|
+
this.disposed || e === this.model || (this.endGrab(), this.bodyGroups.clear(), this.model.removeFromParent(), this.model = e, this.root.add(e), e.traverse((i) => {
|
|
273
|
+
i instanceof r.Mesh && i.layers.enable(m);
|
|
274
|
+
}), t && this.reseatGround());
|
|
275
|
+
}
|
|
276
|
+
resetGround() {
|
|
277
|
+
var e;
|
|
278
|
+
this.disposed || (this.reflector.position.z = (((e = this.runtime) == null ? void 0 : e.defaultGroundHeight) ?? 0) + 2e-3);
|
|
265
279
|
}
|
|
266
280
|
setTheme(e) {
|
|
267
281
|
if (this.disposed) return;
|
|
268
|
-
const t = this.values =
|
|
282
|
+
const t = this.values = v[e], i = this.reflector.material.uniforms;
|
|
269
283
|
i.fineGridColor.value.setHex(t.fineGrid), i.coarseGridColor.value.setHex(t.coarseGrid), i.gridOpacity.value = t.gridOpacity, i.reflectionMix.value = t.reflectionMix, this.fog.color.setHex(t.background);
|
|
270
284
|
}
|
|
271
285
|
layoutGround(e, t) {
|
|
272
|
-
this.reflector.setRadius(t * 8, Math.pow(10, Math.floor(Math.log10(Math.max(t, 0.01)))), e.getCenter(new
|
|
286
|
+
this.reflector.setRadius(t * 8, Math.pow(10, Math.floor(Math.log10(Math.max(t, 0.01)))), e.getCenter(new r.Vector3()));
|
|
273
287
|
}
|
|
274
288
|
/**
|
|
275
289
|
* Re-fits the ground disc and reflection to the model's current world bounds.
|
|
@@ -280,18 +294,18 @@ class F {
|
|
|
280
294
|
reseatGround() {
|
|
281
295
|
if (this.disposed) return;
|
|
282
296
|
this.root.updateMatrixWorld(!0);
|
|
283
|
-
const e = new
|
|
284
|
-
e.isEmpty() || this.layoutGround(e, Math.max(e.getSize(new
|
|
297
|
+
const e = new r.Box3().setFromObject(this.model);
|
|
298
|
+
e.isEmpty() || this.layoutGround(e, Math.max(e.getSize(new r.Vector3()).length() * 0.5, 0.02));
|
|
285
299
|
}
|
|
286
300
|
createForceLine() {
|
|
287
|
-
const e = new
|
|
288
|
-
new
|
|
289
|
-
new
|
|
290
|
-
]), t = new
|
|
301
|
+
const e = new r.BufferGeometry().setFromPoints([
|
|
302
|
+
new r.Vector3(),
|
|
303
|
+
new r.Vector3()
|
|
304
|
+
]), t = new r.LineBasicMaterial({
|
|
291
305
|
color: f,
|
|
292
306
|
depthTest: !1,
|
|
293
307
|
transparent: !0
|
|
294
|
-
}), i = new
|
|
308
|
+
}), i = new r.Line(e, t);
|
|
295
309
|
return i.renderOrder = 1e3, i.visible = !1, i;
|
|
296
310
|
}
|
|
297
311
|
findBodyGroup(e) {
|
|
@@ -306,15 +320,15 @@ class F {
|
|
|
306
320
|
getBodyGroup(e) {
|
|
307
321
|
let t = this.bodyGroups.get(e);
|
|
308
322
|
return t || this.model.traverse((i) => {
|
|
309
|
-
var
|
|
310
|
-
((
|
|
323
|
+
var o;
|
|
324
|
+
((o = i.userData) == null ? void 0 : o.bodyId) === e && (t = i, this.bodyGroups.set(e, i));
|
|
311
325
|
}), t;
|
|
312
326
|
}
|
|
313
327
|
pointerRay(e, t, i) {
|
|
314
|
-
const
|
|
328
|
+
const o = i.getBoundingClientRect();
|
|
315
329
|
this.pointer.set(
|
|
316
|
-
(e.clientX -
|
|
317
|
-
-((e.clientY -
|
|
330
|
+
(e.clientX - o.left) / o.width * 2 - 1,
|
|
331
|
+
-((e.clientY - o.top) / o.height) * 2 + 1
|
|
318
332
|
), this.raycaster.setFromCamera(this.pointer, t);
|
|
319
333
|
}
|
|
320
334
|
setForceBoost(e) {
|
|
@@ -324,17 +338,17 @@ class F {
|
|
|
324
338
|
beginGrab(e, t, i) {
|
|
325
339
|
if (!this.runtime || this.disposed) return !1;
|
|
326
340
|
this.pointerRay(e, t, i);
|
|
327
|
-
const
|
|
328
|
-
if (!
|
|
329
|
-
const s = this.findBodyGroup(
|
|
341
|
+
const o = this.raycaster.intersectObject(this.model, !0).find((c) => c.object.isMesh);
|
|
342
|
+
if (!o) return !1;
|
|
343
|
+
const s = this.findBodyGroup(o.object);
|
|
330
344
|
if (!s) return !1;
|
|
331
|
-
const
|
|
332
|
-
this.dragTarget.copy(
|
|
333
|
-
const
|
|
345
|
+
const l = s.worldToLocal(o.point.clone());
|
|
346
|
+
this.dragTarget.copy(o.point), T(this.dragPlane, t, o.point), this.dragOffset.set(0, 0, 0);
|
|
347
|
+
const n = this.root.worldToLocal(o.point.clone());
|
|
334
348
|
return this.bodyGroups.set(s.userData.bodyId, s), this.runtime.beginGrab({
|
|
335
349
|
bodyId: s.userData.bodyId,
|
|
336
|
-
localPoint: [
|
|
337
|
-
target: [
|
|
350
|
+
localPoint: [l.x, l.y, l.z],
|
|
351
|
+
target: [n.x, n.y, n.z]
|
|
338
352
|
}), this.forceBoosted = !1, this.setForceBoost(e.shiftKey), this.forceLine.visible = !0, this.updateForceLine(), this.grabCanvas = i, i != null && i.style && (this.previousCursor = i.style.cursor, i.style.cursor = "grabbing"), !0;
|
|
339
353
|
}
|
|
340
354
|
moveGrab(e, t, i) {
|
|
@@ -344,25 +358,25 @@ class F {
|
|
|
344
358
|
this.dragTarget.copy(this.dragIntersection).add(this.dragOffset);
|
|
345
359
|
else
|
|
346
360
|
return;
|
|
347
|
-
const
|
|
348
|
-
this.runtime.updateGrabTarget([
|
|
361
|
+
const o = this.root.worldToLocal(this.dragTarget.clone());
|
|
362
|
+
this.runtime.updateGrabTarget([o.x, o.y, o.z]), this.updateForceLine();
|
|
349
363
|
}
|
|
350
364
|
endGrab() {
|
|
351
365
|
var e;
|
|
352
366
|
this.runtime && (this.runtime.endGrab(), this.forceBoosted = !1, this.forceLine.visible = !1, this.forceLine.material.color.setHex(f), (e = this.grabCanvas) != null && e.style && (this.grabCanvas.style.cursor = this.previousCursor), this.grabCanvas = null);
|
|
353
367
|
}
|
|
354
368
|
updateForceLine() {
|
|
355
|
-
var
|
|
356
|
-
const e = (
|
|
369
|
+
var n;
|
|
370
|
+
const e = (n = this.runtime) == null ? void 0 : n.grab;
|
|
357
371
|
if (!e) return;
|
|
358
372
|
const t = this.getBodyGroup(e.bodyId);
|
|
359
373
|
if (!t) return;
|
|
360
|
-
const i = new
|
|
361
|
-
|
|
374
|
+
const i = new r.Vector3().fromArray(e.localPoint), o = t.localToWorld(i), s = this.root.worldToLocal(o), l = this.forceLine.geometry.attributes.position;
|
|
375
|
+
l.setXYZ(0, s.x, s.y, s.z), l.setXYZ(1, e.target[0], e.target[1], e.target[2]), l.needsUpdate = !0;
|
|
362
376
|
}
|
|
363
377
|
beforeRender(e, t, i) {
|
|
364
|
-
var n;
|
|
365
|
-
const
|
|
378
|
+
var l, n;
|
|
379
|
+
const o = {
|
|
366
380
|
tone: e.toneMapping,
|
|
367
381
|
exposure: e.toneMappingExposure,
|
|
368
382
|
color: e.outputColorSpace,
|
|
@@ -370,15 +384,17 @@ class F {
|
|
|
370
384
|
fog: t.fog,
|
|
371
385
|
background: t.background
|
|
372
386
|
}, s = () => {
|
|
373
|
-
e.toneMapping =
|
|
387
|
+
e.toneMapping = o.tone, e.toneMappingExposure = o.exposure, e.outputColorSpace = o.color, t.environment = o.environment, t.fog = o.fog, t.background = o.background;
|
|
374
388
|
};
|
|
375
389
|
if (this.disposed) return s;
|
|
376
390
|
try {
|
|
377
|
-
(
|
|
378
|
-
const
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
391
|
+
(l = this.runtime) != null && l.grab && this.updateForceLine();
|
|
392
|
+
const c = (n = this.runtime) == null ? void 0 : n.defaultGroundHeight;
|
|
393
|
+
c !== void 0 && (this.reflector.position.z = c + 2e-3), e.toneMapping = r.ACESFilmicToneMapping, e.toneMappingExposure = C[this.presentation], e.outputColorSpace = r.SRGBColorSpace, t.background = new r.Color(this.values.background), t.fog = this.fog;
|
|
394
|
+
const d = e.getSize(new r.Vector2()), h = `${d.x}:${d.y}`;
|
|
395
|
+
return h !== this.size && (this.size = h, this.reflector.setRenderSize(Math.max(1, Math.floor(d.x * 0.35)), Math.max(1, Math.floor(d.y * 0.35)))), t.updateMatrixWorld(!0), i.updateMatrixWorld(!0), this.groundVisible && i instanceof r.PerspectiveCamera && this.reflector.renderReflection(e, t, i), s;
|
|
396
|
+
} catch (c) {
|
|
397
|
+
throw s(), c;
|
|
382
398
|
}
|
|
383
399
|
}
|
|
384
400
|
/**
|
|
@@ -400,22 +416,26 @@ class F {
|
|
|
400
416
|
attachAuxiliary(e) {
|
|
401
417
|
this.auxiliaries.add(e), this.root.add(e);
|
|
402
418
|
}
|
|
419
|
+
detachAuxiliary(e) {
|
|
420
|
+
this.auxiliaries.delete(e) && e.removeFromParent();
|
|
421
|
+
}
|
|
403
422
|
getModelBounds() {
|
|
404
423
|
this.root.updateMatrixWorld(!0);
|
|
405
|
-
const e = new
|
|
424
|
+
const e = new r.Box3().setFromObject(this.model);
|
|
406
425
|
if (!e.isEmpty()) return e;
|
|
407
|
-
const t = new
|
|
426
|
+
const t = new r.Box3();
|
|
408
427
|
return t.min.set(-5e3, -5e3, -5e3), t.max.set(5e3, 5e3, 5e3), t;
|
|
409
428
|
}
|
|
410
429
|
dispose() {
|
|
411
430
|
if (!this.disposed) {
|
|
412
431
|
this.disposed = !0, this.endGrab(), this.model.removeFromParent();
|
|
413
432
|
for (const e of this.auxiliaries) e.removeFromParent();
|
|
414
|
-
this.auxiliaries.clear(), this.root.removeFromParent(), this.reflector.renderTarget.dispose(),
|
|
433
|
+
this.auxiliaries.clear(), this.root.removeFromParent(), this.reflector.renderTarget.dispose(), x(this.root);
|
|
415
434
|
}
|
|
416
435
|
}
|
|
417
436
|
}
|
|
418
437
|
export {
|
|
419
|
-
|
|
420
|
-
|
|
438
|
+
W as S,
|
|
439
|
+
x as d,
|
|
440
|
+
V as r
|
|
421
441
|
};
|
package/dist/types.d.ts
CHANGED
|
@@ -88,6 +88,8 @@ export interface ViewerFitViewOptions {
|
|
|
88
88
|
viewMode?: ViewerViewMode;
|
|
89
89
|
}
|
|
90
90
|
export interface ViewerPickOptions {
|
|
91
|
+
/** Stop at the nearest intersection when accelerated picking is available. */
|
|
92
|
+
firstHitOnly?: boolean;
|
|
91
93
|
roots?: readonly Object3D[];
|
|
92
94
|
recursive?: boolean;
|
|
93
95
|
includeInvisible?: boolean;
|
package/dist/ui/types.d.ts
CHANGED
|
@@ -33,6 +33,8 @@ export interface ViewerUiOptions {
|
|
|
33
33
|
cad?: ViewerCadUiOptions;
|
|
34
34
|
/** Shared scene controls for model and simulation assets, gated by capabilities. */
|
|
35
35
|
scene?: ViewerSceneUiOptions;
|
|
36
|
+
/** Built-in URDF review workbench. Defaults to true for preset 'auto'. */
|
|
37
|
+
urdf?: boolean;
|
|
36
38
|
}
|
|
37
39
|
export interface ViewerUiTokens {
|
|
38
40
|
accent?: string;
|