@vertexvis/viewer 0.13.1 → 0.13.2-canary.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.
- package/dist/cjs/{browser.esm-31b03292.js → browser.esm-075810bf.js} +1 -1
- package/dist/cjs/{bundle.esm-dc0a8361.js → bundle.esm-618a5fe9.js} +80 -28
- package/dist/cjs/{config-90ee43d5.js → config-fb124bac.js} +2 -2
- package/dist/cjs/{cursors-ad2fd395.js → cursors-d71f6a74.js} +1 -1
- package/dist/cjs/{dom-dd265f48.js → dom-57ef84e9.js} +1 -1
- package/dist/cjs/{entities-aa59890e.js → entities-90f1347a.js} +3 -3
- package/dist/cjs/index.cjs.js +14 -12
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{mapper-f6e6cafe.js → mapper-80ee2957.js} +2 -2
- package/dist/cjs/{markup-fb1553b1.js → markup-7f7de5f2.js} +2 -2
- package/dist/cjs/{measurement-aba1e0e8.js → measurement-f1ae9248.js} +2 -2
- package/dist/cjs/{model-4ec0c36e.js → model-55abd9ab.js} +1 -1
- package/dist/cjs/{overlays-40c6cbc7.js → overlays-68e8eff2.js} +2 -2
- package/dist/cjs/{png-decoder-27d25eed.js → png-decoder-076131d8.js} +1 -1
- package/dist/cjs/{results-bc325974.js → results-e9496869.js} +1 -1
- package/dist/cjs/{scene-d420fd26.js → scene-92728420.js} +188 -90
- package/dist/cjs/{streamAttributes-d6236448.js → streamAttributes-81eb52f2.js} +1508 -43
- package/dist/cjs/{utils-545b1865.js → utils-463cd52e.js} +1 -1
- package/dist/cjs/{utils-f80be307.js → utils-6397efca.js} +1 -1
- package/dist/cjs/vertex-scene-tree-search_3.cjs.entry.js +1 -1
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +1 -1
- package/dist/cjs/vertex-scene-tree.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-dom-element_3.cjs.entry.js +8 -7
- package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-markup.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +20 -15
- package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +6 -6
- package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +10 -10
- package/dist/cjs/vertex-viewer-measurement-tool.cjs.entry.js +5 -5
- package/dist/cjs/vertex-viewer-measurements.cjs.entry.js +8 -8
- package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +3 -3
- package/dist/cjs/vertex-viewer.cjs.entry.js +287 -80
- package/dist/cjs/viewer.cjs.js +1 -1
- package/dist/cjs/{viewport-8c39089f.js → viewport-54b1389d.js} +34 -2
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.css +1 -1
- package/dist/collection/components/viewer/viewer.js +68 -4
- package/dist/collection/components/viewer-dom-renderer/renderer2d.js +1 -1
- package/dist/collection/components/viewer-dom-renderer/renderer3d.js +4 -2
- package/dist/collection/components/viewer-dom-renderer/viewer-dom-renderer.js +5 -6
- package/dist/collection/components/viewer-measurement-distance/hitTest.js +9 -4
- package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance.js +5 -5
- package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js +3 -3
- package/dist/collection/index.js +2 -2
- package/dist/collection/lib/errors.js +8 -1
- package/dist/collection/lib/interactions/index.js +3 -1
- package/dist/collection/lib/interactions/interactionApi.js +4 -25
- package/dist/collection/lib/interactions/interactionApiOrthographic.js +136 -0
- package/dist/collection/lib/interactions/interactionApiPerspective.js +51 -0
- package/dist/collection/lib/interactions/multiTouchInteractionHandler.js +3 -2
- package/dist/collection/lib/mappers/frameStreaming.js +27 -5
- package/dist/collection/lib/rendering/matrices.js +13 -4
- package/dist/collection/lib/rendering/vectors.js +7 -0
- package/dist/collection/lib/scenes/__mocks__/mocks.js +2 -2
- package/dist/collection/lib/scenes/camera.js +163 -83
- package/dist/collection/lib/scenes/mapper.js +3 -2
- package/dist/collection/lib/scenes/scene.js +22 -9
- package/dist/collection/lib/types/clippingPlanes.js +48 -20
- package/dist/collection/lib/types/depthBuffer.js +32 -3
- package/dist/collection/lib/types/frame.js +133 -24
- package/dist/collection/lib/types/frameCamera.js +87 -6
- package/dist/collection/lib/types/viewport.js +34 -2
- package/dist/collection/testing/fixtures.js +28 -15
- package/dist/collection/testing/viewer.js +5 -3
- package/dist/custom-elements/index.js +2135 -283
- package/dist/esm/{browser.esm-59e914f6.js → browser.esm-e72d80ad.js} +1 -1
- package/dist/esm/{bundle.esm-d899b2d5.js → bundle.esm-8ceccb91.js} +80 -29
- package/dist/esm/{config-604c644e.js → config-fb7cd8ff.js} +2 -2
- package/dist/esm/{cursors-a7ec4adb.js → cursors-fc2deed7.js} +1 -1
- package/dist/esm/{dom-780d25be.js → dom-2cd18856.js} +1 -1
- package/dist/esm/{entities-759d97cd.js → entities-78557270.js} +3 -3
- package/dist/esm/index.js +12 -12
- package/dist/esm/index.mjs +12 -12
- package/dist/esm/loader.js +1 -1
- package/dist/esm/loader.mjs +1 -1
- package/dist/esm/{mapper-4b815e31.js → mapper-da36de17.js} +2 -2
- package/dist/esm/{markup-1d177b4a.js → markup-c313d99c.js} +2 -2
- package/dist/esm/{measurement-12cdbf5c.js → measurement-544b69d5.js} +2 -2
- package/dist/esm/{model-e5a4f00f.js → model-2a34b443.js} +1 -1
- package/dist/esm/{overlays-1919b192.js → overlays-354e275c.js} +2 -2
- package/dist/esm/{png-decoder-3f1fa486.js → png-decoder-07de80d1.js} +1 -1
- package/dist/esm/{results-994bdb50.js → results-4d0c3568.js} +1 -1
- package/dist/esm/{scene-2c2460d5.js → scene-2bfcce74.js} +188 -90
- package/dist/esm/{streamAttributes-d623bb60.js → streamAttributes-d0b384b3.js} +1502 -44
- package/dist/esm/{utils-83a19677.js → utils-3ea0acdd.js} +1 -1
- package/dist/esm/{utils-5e57bf24.js → utils-e0941c61.js} +1 -1
- package/dist/esm/vertex-scene-tree-search_3.entry.js +1 -1
- package/dist/esm/vertex-scene-tree-table-cell.entry.js +1 -1
- package/dist/esm/vertex-scene-tree.entry.js +4 -4
- package/dist/esm/vertex-viewer-dom-element_3.entry.js +8 -7
- package/dist/esm/vertex-viewer-markup-arrow_3.entry.js +3 -3
- package/dist/esm/vertex-viewer-markup-tool.entry.js +4 -4
- package/dist/esm/vertex-viewer-markup.entry.js +4 -4
- package/dist/esm/vertex-viewer-measurement-details.entry.js +3 -3
- package/dist/esm/vertex-viewer-measurement-distance.entry.js +20 -15
- package/dist/esm/vertex-viewer-measurement-line_2.entry.js +6 -6
- package/dist/esm/vertex-viewer-measurement-precise.entry.js +10 -10
- package/dist/esm/vertex-viewer-measurement-tool.entry.js +5 -5
- package/dist/esm/vertex-viewer-measurements.entry.js +8 -8
- package/dist/esm/vertex-viewer-view-cube.entry.js +3 -3
- package/dist/esm/vertex-viewer.entry.js +287 -80
- package/dist/esm/viewer.js +1 -1
- package/dist/esm/{viewport-01c886ea.js → viewport-5cc7b128.js} +34 -2
- package/dist/types/components/scene-tree-table-cell/scene-tree-table-cell.d.ts +1 -1
- package/dist/types/components/viewer/viewer.d.ts +8 -0
- package/dist/types/components/viewer-dom-renderer/renderer2d.d.ts +2 -2
- package/dist/types/components/viewer-dom-renderer/renderer3d.d.ts +3 -3
- package/dist/types/components/viewer-dom-renderer/viewer-dom-renderer.d.ts +2 -2
- package/dist/types/components/viewer-measurement-distance/hitTest.d.ts +3 -2
- package/dist/types/components/viewer-measurement-distance/utils.d.ts +2 -2
- package/dist/types/components/viewer-measurement-distance/viewer-measurement-distance.d.ts +2 -2
- package/dist/types/components/viewer-measurement-overlays/viewer-measurement-overlays-components.d.ts +2 -2
- package/dist/types/components/viewer-measurement-overlays/viewer-measurement-overlays.d.ts +2 -2
- package/dist/types/components.d.ts +15 -7
- package/dist/types/index.d.ts +1 -1
- package/dist/types/lib/errors.d.ts +3 -0
- package/dist/types/lib/interactions/index.d.ts +2 -0
- package/dist/types/lib/interactions/interactionApi.d.ts +34 -26
- package/dist/types/lib/interactions/interactionApiOrthographic.d.ts +35 -0
- package/dist/types/lib/interactions/interactionApiPerspective.d.ts +21 -0
- package/dist/types/lib/mappers/frameStreaming.d.ts +2 -0
- package/dist/types/lib/rendering/vectors.d.ts +2 -0
- package/dist/types/lib/scenes/__mocks__/mocks.d.ts +2 -2
- package/dist/types/lib/scenes/camera.d.ts +101 -38
- package/dist/types/lib/scenes/scene.d.ts +1 -1
- package/dist/types/lib/types/clippingPlanes.d.ts +3 -1
- package/dist/types/lib/types/depthBuffer.d.ts +28 -6
- package/dist/types/lib/types/frame.d.ts +80 -11
- package/dist/types/lib/types/frameCamera.d.ts +22 -3
- package/dist/types/lib/types/viewport.d.ts +24 -4
- package/dist/types/testing/fixtures.d.ts +8 -5
- package/dist/viewer/index.esm.js +1 -1
- package/dist/viewer/{p-f8d01b8a.entry.js → p-0a189e62.entry.js} +1 -1
- package/dist/viewer/{p-e07377fa.entry.js → p-1ca95f9a.entry.js} +1 -1
- package/dist/viewer/{p-d00e9203.js → p-3561d910.js} +1 -1
- package/dist/viewer/p-388a43f7.js +4 -0
- package/dist/viewer/{p-3810c24d.js → p-3f0f83ad.js} +1 -1
- package/dist/viewer/{p-8decee06.entry.js → p-41028d3b.entry.js} +1 -1
- package/dist/viewer/{p-439220c6.js → p-487e054a.js} +1 -1
- package/dist/viewer/p-49d36e94.entry.js +4 -0
- package/dist/viewer/{p-da2f4a56.js → p-5b342e97.js} +1 -1
- package/dist/viewer/p-661f0612.js +18 -0
- package/dist/viewer/{p-364ce21c.js → p-69058178.js} +1 -1
- package/dist/viewer/{p-353cfc7a.entry.js → p-73a5eacc.entry.js} +1 -1
- package/dist/viewer/p-77be081a.js +4 -0
- package/dist/viewer/{p-a0df0e0c.js → p-809d09d9.js} +1 -1
- package/dist/viewer/{p-d90f2f6d.entry.js → p-858bd2c7.entry.js} +1 -1
- package/dist/viewer/{p-25eaab00.entry.js → p-89b66838.entry.js} +1 -1
- package/dist/viewer/p-a93a63a9.js +4 -0
- package/dist/viewer/{p-df292b56.entry.js → p-b043b076.entry.js} +1 -1
- package/dist/viewer/{p-915d95ad.entry.js → p-b0ac6b3c.entry.js} +1 -1
- package/dist/viewer/{p-fec1a8d0.entry.js → p-b7624ff2.entry.js} +1 -1
- package/dist/viewer/{p-f7cb7e59.js → p-b8774c9c.js} +1 -1
- package/dist/viewer/{p-67446e35.js → p-bcb66f97.js} +1 -1
- package/dist/viewer/p-bcde5521.entry.js +4 -0
- package/dist/viewer/{p-7cad9bf4.js → p-d1584404.js} +1 -1
- package/dist/viewer/p-d32b54cb.js +4 -0
- package/dist/viewer/{p-f755af5a.entry.js → p-d3a20af4.entry.js} +1 -1
- package/dist/viewer/{p-c62cb926.entry.js → p-d9f99f4d.entry.js} +1 -1
- package/dist/viewer/p-e38458da.js +4 -0
- package/dist/viewer/{p-301660cf.js → p-e75bba97.js} +2 -2
- package/dist/viewer/{p-6e80f8b0.entry.js → p-ebd55df7.entry.js} +1 -1
- package/dist/viewer/{p-671c113c.entry.js → p-f0411993.entry.js} +1 -1
- package/dist/viewer/{p-2cefb1b0.js → p-fa9a0bed.js} +1 -1
- package/dist/viewer/p-ffdeb08c.js +4 -0
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +8 -8
- package/dist/viewer/p-081e6873.js +0 -4
- package/dist/viewer/p-085e908a.js +0 -4
- package/dist/viewer/p-0aba71fd.js +0 -18
- package/dist/viewer/p-3f6ac74f.js +0 -4
- package/dist/viewer/p-423410be.js +0 -4
- package/dist/viewer/p-432267bc.entry.js +0 -4
- package/dist/viewer/p-4985fad5.js +0 -4
- package/dist/viewer/p-e2297df2.entry.js +0 -4
- package/dist/viewer/p-fe11d694.js +0 -4
|
@@ -6,15 +6,15 @@
|
|
|
6
6
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
7
7
|
|
|
8
8
|
const index = require('./index-e100709a.js');
|
|
9
|
-
const bundle_esm = require('./bundle.esm-
|
|
10
|
-
const streamAttributes = require('./streamAttributes-
|
|
11
|
-
const browser_esm = require('./browser.esm-
|
|
9
|
+
const bundle_esm = require('./bundle.esm-618a5fe9.js');
|
|
10
|
+
const streamAttributes = require('./streamAttributes-81eb52f2.js');
|
|
11
|
+
const browser_esm = require('./browser.esm-075810bf.js');
|
|
12
12
|
const index$1 = require('./index-3bc6bac0.js');
|
|
13
|
-
const config = require('./config-
|
|
14
|
-
const cursors = require('./cursors-
|
|
15
|
-
const dom = require('./dom-
|
|
16
|
-
const scene = require('./scene-
|
|
17
|
-
const viewport = require('./viewport-
|
|
13
|
+
const config = require('./config-fb124bac.js');
|
|
14
|
+
const cursors = require('./cursors-d71f6a74.js');
|
|
15
|
+
const dom = require('./dom-57ef84e9.js');
|
|
16
|
+
const scene = require('./scene-92728420.js');
|
|
17
|
+
const viewport = require('./viewport-54b1389d.js');
|
|
18
18
|
require('./_commonjsHelpers-537d719a.js');
|
|
19
19
|
|
|
20
20
|
/**
|
|
@@ -273,52 +273,6 @@ class FlyToPartKeyInteraction {
|
|
|
273
273
|
}
|
|
274
274
|
}
|
|
275
275
|
|
|
276
|
-
class FlyToPositionKeyInteraction {
|
|
277
|
-
constructor(stream, configProvider, imageScaleProvider, sceneProvider) {
|
|
278
|
-
this.stream = stream;
|
|
279
|
-
this.configProvider = configProvider;
|
|
280
|
-
this.imageScaleProvider = imageScaleProvider;
|
|
281
|
-
this.sceneProvider = sceneProvider;
|
|
282
|
-
}
|
|
283
|
-
predicate(e) {
|
|
284
|
-
return e.altKey && e.shiftKey;
|
|
285
|
-
}
|
|
286
|
-
async fn(e) {
|
|
287
|
-
var _a, _b;
|
|
288
|
-
const scale = this.imageScaleProvider();
|
|
289
|
-
const hitResult = await this.stream.hitItems({
|
|
290
|
-
point: bundle_esm.point.scale(e.position, (scale === null || scale === void 0 ? void 0 : scale.x) || 1, (scale === null || scale === void 0 ? void 0 : scale.y) || 1),
|
|
291
|
-
}, true);
|
|
292
|
-
if (((_a = hitResult.hitItems) === null || _a === void 0 ? void 0 : _a.hits) != null &&
|
|
293
|
-
hitResult.hitItems.hits.length > 0 &&
|
|
294
|
-
hitResult.hitItems.hits[0].hitPoint != null) {
|
|
295
|
-
const camera = this.sceneProvider().camera();
|
|
296
|
-
const hit = hitResult.hitItems.hits[0];
|
|
297
|
-
if (hit.hitPoint != null &&
|
|
298
|
-
hit.hitPoint.x != null &&
|
|
299
|
-
hit.hitPoint.y != null &&
|
|
300
|
-
hit.hitPoint.z != null) {
|
|
301
|
-
await this.stream.flyTo({
|
|
302
|
-
camera: camera
|
|
303
|
-
.update({
|
|
304
|
-
lookAt: bundle_esm.vector3.create(hit.hitPoint.x, hit.hitPoint.y, hit.hitPoint.z),
|
|
305
|
-
})
|
|
306
|
-
.toFrameCamera(),
|
|
307
|
-
animation: {
|
|
308
|
-
duration: streamAttributes.toProtoDuration(this.configProvider().animation.durationMs),
|
|
309
|
-
},
|
|
310
|
-
});
|
|
311
|
-
}
|
|
312
|
-
else {
|
|
313
|
-
console.debug(`No hit position found for fly to position [position={x: ${e.position.x}, y: ${e.position.y}}, hit-id={${(_b = hit.itemId) === null || _b === void 0 ? void 0 : _b.hex}}]`);
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
else {
|
|
317
|
-
console.debug(`No hit results found for fly to position [position={x: ${e.position.x}, y: ${e.position.y}}]`);
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
|
|
322
276
|
/**
|
|
323
277
|
* The `InteractionApi` provides methods that API developers can use to modify
|
|
324
278
|
* the internal state of an interaction.
|
|
@@ -526,27 +480,6 @@ class InteractionApi {
|
|
|
526
480
|
return camera;
|
|
527
481
|
});
|
|
528
482
|
}
|
|
529
|
-
/**
|
|
530
|
-
* Performs a pan operation of the scene's camera, and requests a new image
|
|
531
|
-
* for the updated scene.
|
|
532
|
-
*
|
|
533
|
-
* @param delta A position delta `{x, y}` in the 2D coordinate space of the
|
|
534
|
-
* viewer.
|
|
535
|
-
*/
|
|
536
|
-
async panCameraByDelta(delta) {
|
|
537
|
-
return this.transformCamera(({ camera, viewport }) => {
|
|
538
|
-
const vv = camera.viewVector();
|
|
539
|
-
const u = bundle_esm.vector3.normalize(camera.up);
|
|
540
|
-
const v = bundle_esm.vector3.normalize(vv);
|
|
541
|
-
const d = bundle_esm.vector3.magnitude(vv) * Math.tan(camera.fovY);
|
|
542
|
-
const epsilonX = (delta.x * d) / viewport.width;
|
|
543
|
-
const epsilonY = (delta.y / viewport.width) * d;
|
|
544
|
-
const xvec = bundle_esm.vector3.cross(u, v);
|
|
545
|
-
const yvec = bundle_esm.vector3.cross(v, xvec);
|
|
546
|
-
const offset = bundle_esm.vector3.add(bundle_esm.vector3.scale(epsilonX, xvec), bundle_esm.vector3.scale(epsilonY, yvec));
|
|
547
|
-
return camera.moveBy(offset);
|
|
548
|
-
});
|
|
549
|
-
}
|
|
550
483
|
/**
|
|
551
484
|
* Performs a view all operation for the scene's bounding box, and requests a
|
|
552
485
|
* new image for the updated scene.
|
|
@@ -605,8 +538,8 @@ class InteractionApi {
|
|
|
605
538
|
return updated.update({
|
|
606
539
|
// Scale the lookAt point to the same length as the distance to the
|
|
607
540
|
// center of the bounding box to maintain zoom and pan behavior.
|
|
608
|
-
lookAt: bundle_esm.vector3.add(bundle_esm.vector3.scale(camera.
|
|
609
|
-
bundle_esm.vector3.magnitude(updated.viewVector
|
|
541
|
+
lookAt: bundle_esm.vector3.add(bundle_esm.vector3.scale(Math.abs(camera.signedDistanceToBoundingBoxCenter()) /
|
|
542
|
+
bundle_esm.vector3.magnitude(updated.viewVector), updated.viewVector), updated.position),
|
|
610
543
|
});
|
|
611
544
|
});
|
|
612
545
|
}
|
|
@@ -619,7 +552,7 @@ class InteractionApi {
|
|
|
619
552
|
*/
|
|
620
553
|
async zoomCamera(delta) {
|
|
621
554
|
return this.transformCamera(({ camera, viewport }) => {
|
|
622
|
-
const vv = camera.viewVector
|
|
555
|
+
const vv = camera.viewVector;
|
|
623
556
|
const v = bundle_esm.vector3.normalize(vv);
|
|
624
557
|
const distance = bundle_esm.vector3.magnitude(vv);
|
|
625
558
|
const epsilon = (3 * distance * delta) / viewport.height;
|
|
@@ -740,6 +673,235 @@ class InteractionApi {
|
|
|
740
673
|
}
|
|
741
674
|
}
|
|
742
675
|
|
|
676
|
+
class InteractionApiOrthographic extends InteractionApi {
|
|
677
|
+
constructor(stream, cursors, getConfig, getScene, getFrame, getViewport, tapEmitter, doubleTapEmitter, longPressEmitter, interactionStartedEmitter, interactionFinishedEmitter) {
|
|
678
|
+
super(stream, cursors, getConfig, getScene, getFrame, getViewport, tapEmitter, doubleTapEmitter, longPressEmitter, interactionStartedEmitter, interactionFinishedEmitter);
|
|
679
|
+
}
|
|
680
|
+
/**
|
|
681
|
+
* Performs a pan operation of the scene's camera, and requests a new image
|
|
682
|
+
* for the updated scene.
|
|
683
|
+
*
|
|
684
|
+
* @param delta A position delta `{x, y}` in the 2D coordinate space of the
|
|
685
|
+
* viewer.
|
|
686
|
+
*/
|
|
687
|
+
async panCameraByDelta(delta) {
|
|
688
|
+
return this.transformCamera(({ camera, viewport }) => {
|
|
689
|
+
const viewVector = camera.viewVector;
|
|
690
|
+
const normalizedUpVector = bundle_esm.vector3.normalize(camera.up);
|
|
691
|
+
const normalizedViewVector = bundle_esm.vector3.normalize(viewVector);
|
|
692
|
+
const d = bundle_esm.vector3.magnitude(viewVector) * Math.tan(camera.fovHeight);
|
|
693
|
+
const epsilonX = (delta.x * d) / viewport.width;
|
|
694
|
+
const epsilonY = (delta.y / viewport.width) * d;
|
|
695
|
+
const xvec = bundle_esm.vector3.cross(normalizedUpVector, normalizedViewVector);
|
|
696
|
+
const yvec = bundle_esm.vector3.cross(normalizedViewVector, xvec);
|
|
697
|
+
const offset = bundle_esm.vector3.add(bundle_esm.vector3.scale(epsilonX, xvec), bundle_esm.vector3.scale(epsilonY, yvec));
|
|
698
|
+
return camera.moveBy(offset);
|
|
699
|
+
});
|
|
700
|
+
}
|
|
701
|
+
/**
|
|
702
|
+
* Moves the camera's position and look at to the given screen coordinate.
|
|
703
|
+
*
|
|
704
|
+
* If the screen coordinate intersects with an object, the camera will track
|
|
705
|
+
* the hit point so the mouse position is always under the mouse.
|
|
706
|
+
*
|
|
707
|
+
* If the screen coordinate doesn't intersect with an object, then ???.
|
|
708
|
+
*
|
|
709
|
+
* @param screenPt A point in screen coordinates.
|
|
710
|
+
*/
|
|
711
|
+
async panCameraToScreenPoint(screenPt) {
|
|
712
|
+
return this.transformCamera(({ camera, frame, viewport }) => {
|
|
713
|
+
// Capture the starting state of the pan.
|
|
714
|
+
if (this.panData == null) {
|
|
715
|
+
const startingCamera = camera.toFrameCamera();
|
|
716
|
+
const direction = startingCamera.direction;
|
|
717
|
+
const ray = viewport.transformPointToOrthographicRay(screenPt, frame.image, startingCamera);
|
|
718
|
+
const hitPlane = bundle_esm.plane.fromNormalAndCoplanarPoint(direction, camera.lookAt);
|
|
719
|
+
const hitPt = bundle_esm.ray.intersectPlane(ray, hitPlane);
|
|
720
|
+
if (hitPt == null) {
|
|
721
|
+
console.warn('Cannot determine fallback for pan. Ray does not intersect plane.');
|
|
722
|
+
return camera;
|
|
723
|
+
}
|
|
724
|
+
this.panData = { hitPt, hitPlane, startingCamera };
|
|
725
|
+
}
|
|
726
|
+
if (this.panData != null) {
|
|
727
|
+
const { hitPt, hitPlane, startingCamera } = this.panData;
|
|
728
|
+
// Use a ray that originates at the screen and intersects with the hit
|
|
729
|
+
// plane to determine the move distance.
|
|
730
|
+
const ray = viewport.transformPointToOrthographicRay(screenPt, frame.image, startingCamera);
|
|
731
|
+
const movePt = bundle_esm.ray.intersectPlane(ray, hitPlane);
|
|
732
|
+
if (movePt != null) {
|
|
733
|
+
const delta = bundle_esm.vector3.subtract(hitPt, movePt);
|
|
734
|
+
return camera.update({
|
|
735
|
+
lookAt: bundle_esm.vector3.add(startingCamera.lookAt, delta),
|
|
736
|
+
});
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
return camera;
|
|
740
|
+
});
|
|
741
|
+
}
|
|
742
|
+
async zoomCameraToPoint(point, delta) {
|
|
743
|
+
return this.transformCamera(({ camera, viewport, frame, depthBuffer }) => {
|
|
744
|
+
if (this.orthographicZoomData == null ||
|
|
745
|
+
bundle_esm.point.distance(point, this.orthographicZoomData.startingScreenPt) > 2) {
|
|
746
|
+
const frameCam = camera.toFrameCamera();
|
|
747
|
+
const dir = frameCam.direction;
|
|
748
|
+
const ray = viewport.transformPointToOrthographicRay(point, frame.image, frameCam);
|
|
749
|
+
const fallbackPlane = bundle_esm.plane.fromNormalAndCoplanarPoint(dir, frameCam.lookAt);
|
|
750
|
+
const fallbackPt = bundle_esm.ray.intersectPlane(ray, fallbackPlane);
|
|
751
|
+
if (fallbackPt == null) {
|
|
752
|
+
console.warn('Cannot determine fallback point for zoom. Ray does not intersect plane.');
|
|
753
|
+
return camera;
|
|
754
|
+
}
|
|
755
|
+
const hitPt = depthBuffer != null
|
|
756
|
+
? this.getWorldPoint(point, depthBuffer, fallbackPt)
|
|
757
|
+
: fallbackPt;
|
|
758
|
+
const hitPlane = bundle_esm.plane.fromNormalAndCoplanarPoint(dir, hitPt);
|
|
759
|
+
this.orthographicZoomData = {
|
|
760
|
+
hitPt,
|
|
761
|
+
hitPlane,
|
|
762
|
+
startingScreenPt: point,
|
|
763
|
+
};
|
|
764
|
+
}
|
|
765
|
+
if (this.orthographicZoomData != null) {
|
|
766
|
+
const { hitPt, hitPlane } = this.orthographicZoomData;
|
|
767
|
+
const relativeDelta = 2 * (camera.fovHeight / viewport.height) * delta;
|
|
768
|
+
const fovHeight = Math.max(1, camera.fovHeight - relativeDelta);
|
|
769
|
+
const projectedLookAt = bundle_esm.plane.projectPoint(hitPlane, camera.lookAt);
|
|
770
|
+
const diff = bundle_esm.vector3.scale((camera.fovHeight - fovHeight) / camera.fovHeight, bundle_esm.vector3.subtract(hitPt, projectedLookAt));
|
|
771
|
+
return camera.update({
|
|
772
|
+
lookAt: bundle_esm.vector3.add(camera.lookAt, diff),
|
|
773
|
+
fovHeight: Math.max(1, camera.fovHeight - relativeDelta),
|
|
774
|
+
});
|
|
775
|
+
}
|
|
776
|
+
return camera;
|
|
777
|
+
});
|
|
778
|
+
}
|
|
779
|
+
getWorldPoint(point, depthBuffer, fallbackPoint) {
|
|
780
|
+
const viewport = this.getViewport();
|
|
781
|
+
const framePt = viewport.transformPointToFrame(point, depthBuffer);
|
|
782
|
+
const hasDepth = depthBuffer.hitTest(framePt);
|
|
783
|
+
return hasDepth
|
|
784
|
+
? viewport.transformPointToOrthographicWorldSpace(point, depthBuffer)
|
|
785
|
+
: fallbackPoint;
|
|
786
|
+
}
|
|
787
|
+
async transformCamera(t) {
|
|
788
|
+
var _a;
|
|
789
|
+
if (this.isInteracting()) {
|
|
790
|
+
const scene = this.getScene();
|
|
791
|
+
const viewport = this.getViewport();
|
|
792
|
+
const frame = this.getFrame();
|
|
793
|
+
const depthBuffer = await (frame === null || frame === void 0 ? void 0 : frame.depthBuffer());
|
|
794
|
+
this.currentCamera =
|
|
795
|
+
this.currentCamera != null && viewport != null && frame != null
|
|
796
|
+
? t({
|
|
797
|
+
camera: this.currentCamera,
|
|
798
|
+
viewport,
|
|
799
|
+
scale: scene.scale(),
|
|
800
|
+
boundingBox: scene.boundingBox(),
|
|
801
|
+
frame,
|
|
802
|
+
depthBuffer,
|
|
803
|
+
})
|
|
804
|
+
: undefined;
|
|
805
|
+
await ((_a = this.currentCamera) === null || _a === void 0 ? void 0 : _a.render());
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
class InteractionApiPerspective extends InteractionApi {
|
|
811
|
+
constructor(stream, cursors, getConfig, getScene, getFrame, getViewport, tapEmitter, doubleTapEmitter, longPressEmitter, interactionStartedEmitter, interactionFinishedEmitter) {
|
|
812
|
+
super(stream, cursors, getConfig, getScene, getFrame, getViewport, tapEmitter, doubleTapEmitter, longPressEmitter, interactionStartedEmitter, interactionFinishedEmitter);
|
|
813
|
+
}
|
|
814
|
+
/**
|
|
815
|
+
* Performs a pan operation of the scene's camera, and requests a new image
|
|
816
|
+
* for the updated scene.
|
|
817
|
+
*
|
|
818
|
+
* @param delta A position delta `{x, y}` in the 2D coordinate space of the
|
|
819
|
+
* viewer.
|
|
820
|
+
*/
|
|
821
|
+
async panCameraByDelta(delta) {
|
|
822
|
+
return this.transformCamera(({ camera, viewport }) => {
|
|
823
|
+
var _a;
|
|
824
|
+
const vv = camera.viewVector;
|
|
825
|
+
const u = bundle_esm.vector3.normalize(camera.up);
|
|
826
|
+
const v = bundle_esm.vector3.normalize(vv);
|
|
827
|
+
const d = bundle_esm.vector3.magnitude(vv) * Math.tan((_a = camera.fovY) !== null && _a !== void 0 ? _a : 45);
|
|
828
|
+
const epsilonX = (delta.x * d) / viewport.width;
|
|
829
|
+
const epsilonY = (delta.y / viewport.width) * d;
|
|
830
|
+
const xvec = bundle_esm.vector3.cross(u, v);
|
|
831
|
+
const yvec = bundle_esm.vector3.cross(v, xvec);
|
|
832
|
+
const offset = bundle_esm.vector3.add(bundle_esm.vector3.scale(epsilonX, xvec), bundle_esm.vector3.scale(epsilonY, yvec));
|
|
833
|
+
return camera.moveBy(offset);
|
|
834
|
+
});
|
|
835
|
+
}
|
|
836
|
+
async transformCamera(t) {
|
|
837
|
+
var _a;
|
|
838
|
+
if (this.isInteracting()) {
|
|
839
|
+
const scene = this.getScene();
|
|
840
|
+
const viewport = this.getViewport();
|
|
841
|
+
const frame = this.getFrame();
|
|
842
|
+
const depthBuffer = await (frame === null || frame === void 0 ? void 0 : frame.depthBuffer());
|
|
843
|
+
this.currentCamera =
|
|
844
|
+
this.currentCamera != null && viewport != null && frame != null
|
|
845
|
+
? t({
|
|
846
|
+
camera: this.currentCamera,
|
|
847
|
+
viewport,
|
|
848
|
+
scale: scene.scale(),
|
|
849
|
+
boundingBox: scene.boundingBox(),
|
|
850
|
+
frame,
|
|
851
|
+
depthBuffer,
|
|
852
|
+
})
|
|
853
|
+
: undefined;
|
|
854
|
+
await ((_a = this.currentCamera) === null || _a === void 0 ? void 0 : _a.render());
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
class FlyToPositionKeyInteraction {
|
|
860
|
+
constructor(stream, configProvider, imageScaleProvider, sceneProvider) {
|
|
861
|
+
this.stream = stream;
|
|
862
|
+
this.configProvider = configProvider;
|
|
863
|
+
this.imageScaleProvider = imageScaleProvider;
|
|
864
|
+
this.sceneProvider = sceneProvider;
|
|
865
|
+
}
|
|
866
|
+
predicate(e) {
|
|
867
|
+
return e.altKey && e.shiftKey;
|
|
868
|
+
}
|
|
869
|
+
async fn(e) {
|
|
870
|
+
var _a, _b;
|
|
871
|
+
const scale = this.imageScaleProvider();
|
|
872
|
+
const hitResult = await this.stream.hitItems({
|
|
873
|
+
point: bundle_esm.point.scale(e.position, (scale === null || scale === void 0 ? void 0 : scale.x) || 1, (scale === null || scale === void 0 ? void 0 : scale.y) || 1),
|
|
874
|
+
}, true);
|
|
875
|
+
if (((_a = hitResult.hitItems) === null || _a === void 0 ? void 0 : _a.hits) != null &&
|
|
876
|
+
hitResult.hitItems.hits.length > 0 &&
|
|
877
|
+
hitResult.hitItems.hits[0].hitPoint != null) {
|
|
878
|
+
const camera = this.sceneProvider().camera();
|
|
879
|
+
const hit = hitResult.hitItems.hits[0];
|
|
880
|
+
if (hit.hitPoint != null &&
|
|
881
|
+
hit.hitPoint.x != null &&
|
|
882
|
+
hit.hitPoint.y != null &&
|
|
883
|
+
hit.hitPoint.z != null) {
|
|
884
|
+
await this.stream.flyTo({
|
|
885
|
+
camera: camera
|
|
886
|
+
.update({
|
|
887
|
+
lookAt: bundle_esm.vector3.create(hit.hitPoint.x, hit.hitPoint.y, hit.hitPoint.z),
|
|
888
|
+
})
|
|
889
|
+
.toFrameCamera(),
|
|
890
|
+
animation: {
|
|
891
|
+
duration: streamAttributes.toProtoDuration(this.configProvider().animation.durationMs),
|
|
892
|
+
},
|
|
893
|
+
});
|
|
894
|
+
}
|
|
895
|
+
else {
|
|
896
|
+
console.debug(`No hit position found for fly to position [position={x: ${e.position.x}, y: ${e.position.y}}, hit-id={${(_b = hit.itemId) === null || _b === void 0 ? void 0 : _b.hex}}]`);
|
|
897
|
+
}
|
|
898
|
+
}
|
|
899
|
+
else {
|
|
900
|
+
console.debug(`No hit results found for fly to position [position={x: ${e.position.x}, y: ${e.position.y}}]`);
|
|
901
|
+
}
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
|
|
743
905
|
const SCROLL_WHEEL_DELTA_PERCENTAGES = [0.2, 0.15, 0.25, 0.25, 0.15];
|
|
744
906
|
const DEFAULT_FONT_SIZE = 16;
|
|
745
907
|
const DEFAULT_LINE_HEIGHT = 1.2;
|
|
@@ -1221,7 +1383,8 @@ class MultiTouchInteractionHandler {
|
|
|
1221
1383
|
(_b = this.interactionApi) === null || _b === void 0 ? void 0 : _b.zoomCamera(zoom);
|
|
1222
1384
|
(_c = this.interactionApi) === null || _c === void 0 ? void 0 : _c.panCameraByDelta(delta);
|
|
1223
1385
|
// Setting a minimum angle to prevent wobbling
|
|
1224
|
-
|
|
1386
|
+
console.log(Math.abs(angle));
|
|
1387
|
+
if (Math.abs(angle) > 0.5) {
|
|
1225
1388
|
(_d = this.interactionApi) === null || _d === void 0 ? void 0 : _d.twistCamera(angle);
|
|
1226
1389
|
}
|
|
1227
1390
|
}
|
|
@@ -2272,6 +2435,11 @@ let Viewer = class {
|
|
|
2272
2435
|
* the viewer. Enabled by default.
|
|
2273
2436
|
*/
|
|
2274
2437
|
this.cameraControls = true;
|
|
2438
|
+
/**
|
|
2439
|
+
* The type of camera model to represent the scene with. Can be either
|
|
2440
|
+
* `perspective` or `orthographic`, and defaults to `perspective`.
|
|
2441
|
+
*/
|
|
2442
|
+
this.cameraType = 'perspective';
|
|
2275
2443
|
/**
|
|
2276
2444
|
* Enables or disables the default keyboard shortcut interactions provided by
|
|
2277
2445
|
* the viewer. Enabled by default, requires `cameraControls` being enabled.
|
|
@@ -2561,6 +2729,11 @@ let Viewer = class {
|
|
|
2561
2729
|
(_b = this.baseInteractionHandler) === null || _b === void 0 ? void 0 : _b.setPrimaryInteractionType('rotate');
|
|
2562
2730
|
}
|
|
2563
2731
|
}
|
|
2732
|
+
handleCameraTypeChanged(updatedCameraType, previousCameraType) {
|
|
2733
|
+
if (updatedCameraType !== previousCameraType) {
|
|
2734
|
+
this.updateCameraType();
|
|
2735
|
+
}
|
|
2736
|
+
}
|
|
2564
2737
|
/**
|
|
2565
2738
|
* @ignore
|
|
2566
2739
|
*/
|
|
@@ -2807,7 +2980,9 @@ let Viewer = class {
|
|
|
2807
2980
|
this.frame !== frame) {
|
|
2808
2981
|
const canvas = this.canvasElement.getContext('2d');
|
|
2809
2982
|
if (canvas != null) {
|
|
2983
|
+
const previousFrame = this.frame;
|
|
2810
2984
|
this.frame = frame;
|
|
2985
|
+
this.updateInteractionApi(previousFrame);
|
|
2811
2986
|
const data = {
|
|
2812
2987
|
canvas,
|
|
2813
2988
|
canvasDimensions,
|
|
@@ -2843,7 +3018,9 @@ let Viewer = class {
|
|
|
2843
3018
|
if (this.stream == null) {
|
|
2844
3019
|
throw new scene.ComponentInitializationError('Cannot create interaction API. Component has not been initialized.');
|
|
2845
3020
|
}
|
|
2846
|
-
return
|
|
3021
|
+
return this.frame == null || this.frame.scene.camera.isPerspective()
|
|
3022
|
+
? new InteractionApiPerspective(this.stream, this.stateMap.cursorManager, () => this.getResolvedConfig().interactions, () => this.createScene(), () => this.frame, () => this.viewport, this.tap, this.doubletap, this.longpress, this.interactionStarted, this.interactionFinished)
|
|
3023
|
+
: new InteractionApiOrthographic(this.stream, this.stateMap.cursorManager, () => this.getResolvedConfig().interactions, () => this.createScene(), () => this.frame, () => this.viewport, this.tap, this.doubletap, this.longpress, this.interactionStarted, this.interactionFinished);
|
|
2847
3024
|
}
|
|
2848
3025
|
handleCursorChanged() {
|
|
2849
3026
|
window.requestAnimationFrame(() => {
|
|
@@ -2903,6 +3080,35 @@ let Viewer = class {
|
|
|
2903
3080
|
var _a;
|
|
2904
3081
|
(_a = this.stream) === null || _a === void 0 ? void 0 : _a.update({ streamAttributes: this.getStreamAttributes() });
|
|
2905
3082
|
}
|
|
3083
|
+
updateInteractionApi(previousFrame) {
|
|
3084
|
+
if (previousFrame != null && this.frame != null) {
|
|
3085
|
+
const hasChangedFromPerspective = previousFrame.scene.camera.isPerspective() &&
|
|
3086
|
+
this.frame.scene.camera.isOrthographic();
|
|
3087
|
+
const hasChangedFromOrthographic = previousFrame.scene.camera.isOrthographic() &&
|
|
3088
|
+
this.frame.scene.camera.isPerspective();
|
|
3089
|
+
if (hasChangedFromPerspective || hasChangedFromOrthographic) {
|
|
3090
|
+
this.interactionApi = this.createInteractionApi();
|
|
3091
|
+
this.interactionHandlers.forEach((handler) => this.initializeInteractionHandler(handler));
|
|
3092
|
+
}
|
|
3093
|
+
}
|
|
3094
|
+
}
|
|
3095
|
+
updateCameraType() {
|
|
3096
|
+
var _a, _b;
|
|
3097
|
+
if (this.frame != null) {
|
|
3098
|
+
if (this.cameraType === 'orthographic' &&
|
|
3099
|
+
this.frame.scene.camera.isPerspective()) {
|
|
3100
|
+
(_a = this.stream) === null || _a === void 0 ? void 0 : _a.replaceCamera({
|
|
3101
|
+
camera: streamAttributes.toProtobuf(streamAttributes.toOrthographic(this.frame.scene.camera, this.frame.scene.boundingBox)),
|
|
3102
|
+
});
|
|
3103
|
+
}
|
|
3104
|
+
else if (this.cameraType === 'perspective' &&
|
|
3105
|
+
this.frame.scene.camera.isOrthographic()) {
|
|
3106
|
+
(_b = this.stream) === null || _b === void 0 ? void 0 : _b.replaceCamera({
|
|
3107
|
+
camera: streamAttributes.toProtobuf(streamAttributes.toPerspective(this.frame.scene.camera)),
|
|
3108
|
+
});
|
|
3109
|
+
}
|
|
3110
|
+
}
|
|
3111
|
+
}
|
|
2906
3112
|
getDepthBufferStreamAttributesValue() {
|
|
2907
3113
|
var _a;
|
|
2908
3114
|
const depthBuffer = (_a = this.depthBuffers) !== null && _a !== void 0 ? _a : (this.rotateAroundTapPoint ? 'final' : undefined);
|
|
@@ -2943,6 +3149,7 @@ let Viewer = class {
|
|
|
2943
3149
|
static get watchers() { return {
|
|
2944
3150
|
"src": ["handleSrcChanged"],
|
|
2945
3151
|
"rotateAroundTapPoint": ["handleRotateAboutTapPointChanged"],
|
|
3152
|
+
"cameraType": ["handleCameraTypeChanged"],
|
|
2946
3153
|
"depthBuffers": ["handleDepthBuffersChanged"],
|
|
2947
3154
|
"experimentalGhostingOpacity": ["handleExperimentalGhostingOpacityChanged"],
|
|
2948
3155
|
"featureLines": ["handleFeatureLinesChanged"],
|
package/dist/cjs/viewer.cjs.js
CHANGED
|
@@ -74,5 +74,5 @@ const patchDynamicImport = (base, orgScriptElm) => {
|
|
|
74
74
|
|
|
75
75
|
patchBrowser().then(options => {
|
|
76
76
|
appGlobals.globalScripts();
|
|
77
|
-
return index.bootstrapLazy([["vertex-viewer-default-toolbar.cjs",[[1,"vertex-viewer-default-toolbar",{"viewer":[16],"placement":[1],"direction":[1],"animationsDisabled":[4,"animations-disabled"],"animationMs":[2,"animation-ms"]}]]],["vertex-scene-tree.cjs",[[1,"vertex-scene-tree",{"overScanCount":[2,"over-scan-count"],"viewerSelector":[1,"viewer-selector"],"viewer":[1040],"rowData":[16],"config":[16],"configEnv":[1,"config-env"],"controller":[1040],"filterOnMetadata":[1028,"filter-on-metadata"],"metadataKeys":[16],"rows":[32],"totalRows":[32],"stateMap":[32],"connectionErrorDetails":[32],"attemptingRetry":[32],"invalidateRows":[64],"scrollToIndex":[64],"scrollToItem":[64],"expandAll":[64],"collapseAll":[64],"expandItem":[64],"collapseItem":[64],"toggleExpandItem":[64],"toggleItemVisibility":[64],"hideItem":[64],"showItem":[64],"selectItem":[64],"deselectItem":[64],"getRowAtIndex":[64],"getRowForEvent":[64],"getRowAtClientY":[64],"filterItems":[64],"fetchMetadataKeys":[64]},[[0,"search","handleSearch"]]]]],["vertex-viewer-measurement-tool.cjs",[[1,"vertex-viewer-measurement-tool",{"distanceTemplateId":[1,"distance-template-id"],"tool":[1],"units":[1],"fractionalDigits":[2,"fractional-digits"],"disabled":[4],"viewer":[16],"isMeasuring":[1540,"is-measuring"],"snapDistance":[2,"snap-distance"],"stateMap":[32]}]]],["vertex-viewer-markup.cjs",[[1,"vertex-viewer-markup",{"arrowTemplateId":[1,"arrow-template-id"],"circleTemplateId":[1,"circle-template-id"],"freeformTemplateId":[1,"freeform-template-id"],"tool":[1],"disabled":[4],"viewer":[16],"selectedMarkupId":[1025,"selected-markup-id"],"selectNew":[4,"select-new"],"toSelectMarkupId":[32],"pointerDownPosition":[32],"addMarkup":[64],"removeMarkup":[64],"getMarkupElements":[64],"getMarkupElement":[64]},[[0,"markupEnd","handleMarkupEnd"],[1,"pointerdown","handleMarkupPointerDown"]]]]],["vertex-viewer-markup-tool.cjs",[[1,"vertex-viewer-markup-tool",{"arrowTemplateId":[1,"arrow-template-id"],"circleTemplateId":[1,"circle-template-id"],"freeformTemplateId":[1,"freeform-template-id"],"tool":[1],"disabled":[4],"viewer":[16],"stateMap":[32],"reset":[64]}]]],["vertex-viewer-measurements.cjs",[[1,"vertex-viewer-measurements",{"distanceTemplateId":[1,"distance-template-id"],"tool":[1],"units":[1],"fractionalDigits":[2,"fractional-digits"],"disabled":[4],"viewer":[16],"selectedMeasurementId":[1025,"selected-measurement-id"],"snapDistance":[2,"snap-distance"],"showAxisReferenceLines":[4,"show-axis-reference-lines"],"measurementModel":[16],"addMeasurement":[64],"removeMeasurement":[64],"getMeasurementElement":[64],"getMeasurementElements":[64]},[[0,"measureEnd","handleMeasureEnd"],[1,"pointerdown","handleMeasurementPointerDown"]]]]],["vertex-viewer-view-cube.cjs",[[1,"vertex-viewer-view-cube",{"xPositiveLabel":[1,"x-positive-label"],"xNegativeLabel":[1,"x-negative-label"],"yPositiveLabel":[1,"y-positive-label"],"yNegativeLabel":[1,"y-negative-label"],"zPositiveLabel":[1,"z-positive-label"],"zNegativeLabel":[1,"z-negative-label"],"standardViewsOff":[4,"standard-views-off"],"animationDuration":[2,"animation-duration"],"triadOff":[4,"triad-off"],"worldOrientation":[1040],"camera":[1040],"viewer":[16],"boxLength":[32],"triadPosition":[32]}]]],["vertex-viewer-measurement-precise.cjs",[[1,"vertex-viewer-measurement-precise",{"measurementModel":[16],"measurementOverlays":[16],"measurementController":[1040],"measurableEntityTypes":[16],"viewer":[16],"configEnv":[1,"config-env"],"config":[16],"overlays":[32]}]]],["vertex-scene-tree-table-cell.cjs",[[1,"vertex-scene-tree-table-cell",{"node":[16],"tree":[16],"value":[1],"placeholder":[1],"hoveredNodeId":[1,"hovered-node-id"],"expandToggle":[4,"expand-toggle"],"visibilityToggle":[4,"visibility-toggle"],"interactionsDisabled":[4,"interactions-disabled"],"recurseParentSelectionDisabled":[4,"recurse-parent-selection-disabled"]}]]],["vertex-scene-tree-table-column.cjs",[[1,"vertex-scene-tree-table-column",{"initialWidth":[2,"initial-width"],"minWidth":[2,"min-width"],"maxWidth":[2,"max-width"]}]]],["vertex-scene-tree-table-header.cjs",[[1,"vertex-scene-tree-table-header"]]],["vertex-scene-tree-table-resize-divider.cjs",[[1,"vertex-scene-tree-table-resize-divider",{"dragging":[32]}]]],["vertex-scene-tree-toolbar-group.cjs",[[1,"vertex-scene-tree-toolbar-group"]]],["vertex-viewer.cjs",[[1,"vertex-viewer",{"src":[1],"clientId":[1,"client-id"],"deviceId":[1,"device-id"],"config":[1],"configEnv":[1,"config-env"],"resolvedConfig":[1040],"cameraControls":[4,"camera-controls"],"keyboardControls":[4,"keyboard-controls"],"rotateAroundTapPoint":[4,"rotate-around-tap-point"],"token":[1025],"depthBuffers":[1,"depth-buffers"],"experimentalGhostingOpacity":[2,"experimental-ghosting-opacity"],"featureLines":[16],"featureHighlighting":[16],"featureMaps":[1,"feature-maps"],"selectionMaterial":[1,"selection-material"],"resizeDebounce":[2,"resize-debounce"],"frame":[1040],"stream":[1040],"stencilBuffer":[1040],"viewport":[1040],"dimensions":[32],"hostDimensions":[32],"errorMessage":[32],"cursor":[32],"stateMap":[32],"dispatchFrameDrawn":[64],"registerInteractionHandler":[64],"registerTapKeyInteraction":[64],"getInteractionTarget":[64],"addCursor":[64],"getInteractionHandlers":[64],"getBaseInteractionHandler":[64],"getJwt":[64],"load":[64],"unload":[64],"scene":[64],"isSceneReady":[64]},[[0,"tap","handleTapEvent"]]]]],["vertex-viewer-measurement-details.cjs",[[1,"vertex-viewer-measurement-details",{"measurementModel":[16],"measurementOverlays":[16],"measurementOutcome":[1040],"distanceUnits":[1,"distance-units"],"angleUnits":[1,"angle-units"],"fractionalDigits":[2,"fractional-digits"],"distanceFormatter":[16],"angleFormatter":[16],"areaFormatter":[16],"resultTypes":[16],"overlay":[32],"distanceMeasurementUnits":[32],"angleMeasurementUnits":[32],"areaMeasurementUnits":[32]}]]],["vertex-viewer-measurement-distance.cjs",[[1,"vertex-viewer-measurement-distance",{"start":[1040],"startJson":[1,"start-json"],"end":[1040],"endJson":[1,"end-json"],"distance":[1026],"showAxisReferenceLines":[4,"show-axis-reference-lines"],"snapDistance":[2,"snap-distance"],"units":[1],"fractionalDigits":[2,"fractional-digits"],"labelFormatter":[16],"anchorLabelOffset":[2,"anchor-label-offset"],"lineCapLength":[2,"line-cap-length"],"mode":[513],"interactingAnchor":[1537,"interacting-anchor"],"invalid":[1540],"camera":[16],"hitProvider":[16],"indicatorPt":[1040],"viewer":[16],"measurementModel":[16],"viewport":[32],"elementBounds":[32],"interactionCount":[32],"internalCamera":[32],"invalidateStateCounter":[32],"stateMap":[32],"measurementUnits":[32],"computeElementMetrics":[64]}]]],["vertex-scene-tree-search_3.cjs",[[1,"vertex-scene-tree-search",{"debounce":[2],"disabled":[4],"placeholder":[1],"value":[1025],"focused":[32],"setFocus":[64]}],[1,"vertex-scene-tree-table-layout",{"tree":[16],"controller":[16],"rows":[16],"totalRows":[2,"total-rows"],"rowHeight":[1026,"row-height"],"overScanCount":[2,"over-scan-count"],"rowData":[16],"layoutOffset":[1026,"layout-offset"],"scrollOffset":[1026,"scroll-offset"],"layoutHeight":[1026,"layout-height"],"layoutWidth":[1026,"layout-width"],"viewportStartIndex":[1026,"viewport-start-index"],"viewportEndIndex":[1026,"viewport-end-index"],"columnGridLayout":[32],"columnGridFixedLayout":[32],"hoveredNodeId":[32],"isComputingCellHeight":[32],"lastDividerPointerPosition":[32],"resizingColumnIndex":[32],"stateMap":[32],"scrollToPosition":[64]}],[1,"vertex-scene-tree-toolbar"]]],["vertex-viewer-button_3.cjs",[[1,"vertex-viewer-toolbar",{"placement":[1],"direction":[1]}],[1,"vertex-viewer-button"],[1,"vertex-viewer-toolbar-group",{"direction":[1]}]]],["vertex-viewer-dom-element_3.cjs",[[1,"vertex-viewer-dom-element",{"position":[1040],"positionJson":[1,"position"],"rotation":[1040],"rotationJson":[1,"rotation"],"quaternion":[1040],"quaternionJson":[1,"quaternion"],"scale":[1040],"scaleJson":[1,"scale"],"matrix":[1040],"occlusionOff":[4,"occlusion-off"],"occluded":[516],"billboardOff":[4,"billboard-off"],"interactionsOff":[516,"interactions-off"]}],[1,"vertex-viewer-dom-group",{"position":[1040],"positionJson":[1,"position"],"rotation":[1040],"rotationJson":[1,"rotation"],"quaternion":[1040],"quaternionJson":[1,"quaternion"],"scale":[1040],"scaleJson":[1,"scale"],"matrix":[1040]}],[1,"vertex-viewer-dom-renderer",{"drawMode":[1,"draw-mode"],"viewer":[16],"camera":[1040],"depthBuffer":[1040],"viewport":[32],"invalidateFrameCounter":[32]},[[0,"propertyChange","handlePropertyChange"]]]]],["vertex-viewer-icon.cjs",[[1,"vertex-viewer-icon",{"name":[1],"size":[1]}]]],["vertex-viewer-layer.cjs",[[1,"vertex-viewer-layer",{"stretchOff":[516,"stretch-off"]}]]],["vertex-viewer-markup-arrow_3.cjs",[[1,"vertex-viewer-markup-arrow",{"start":[1040],"startJson":[1,"start"],"end":[1040],"endJson":[1,"end"],"mode":[513],"viewer":[16],"elementBounds":[32],"editAnchor":[32],"dispose":[64]}],[1,"vertex-viewer-markup-circle",{"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"elementBounds":[32],"startPosition":[32],"editAnchor":[32],"resizeBounds":[32],"dispose":[64]}],[1,"vertex-viewer-markup-freeform",{"points":[1040],"pointsJson":[1,"points"],"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"elementBounds":[32],"resizeStartPosition":[32],"editAnchor":[32],"resizeBounds":[32],"resizePoints":[32],"screenPoints":[32],"dispose":[64]}]]],["vertex-viewer-measurement-line_2.cjs",[[1,"vertex-viewer-measurement-overlays",{"measurementOverlays":[16],"camera":[1040],"viewer":[16],"overlays":[32]}],[1,"vertex-viewer-measurement-line",{"start":[16],"end":[16],"capLength":[2,"cap-length"],"pointerEvents":[1,"pointer-events"]}]]]], options);
|
|
77
|
+
return index.bootstrapLazy([["vertex-viewer-default-toolbar.cjs",[[1,"vertex-viewer-default-toolbar",{"viewer":[16],"placement":[1],"direction":[1],"animationsDisabled":[4,"animations-disabled"],"animationMs":[2,"animation-ms"]}]]],["vertex-scene-tree.cjs",[[1,"vertex-scene-tree",{"overScanCount":[2,"over-scan-count"],"viewerSelector":[1,"viewer-selector"],"viewer":[1040],"rowData":[16],"config":[16],"configEnv":[1,"config-env"],"controller":[1040],"filterOnMetadata":[1028,"filter-on-metadata"],"metadataKeys":[16],"rows":[32],"totalRows":[32],"stateMap":[32],"connectionErrorDetails":[32],"attemptingRetry":[32],"invalidateRows":[64],"scrollToIndex":[64],"scrollToItem":[64],"expandAll":[64],"collapseAll":[64],"expandItem":[64],"collapseItem":[64],"toggleExpandItem":[64],"toggleItemVisibility":[64],"hideItem":[64],"showItem":[64],"selectItem":[64],"deselectItem":[64],"getRowAtIndex":[64],"getRowForEvent":[64],"getRowAtClientY":[64],"filterItems":[64],"fetchMetadataKeys":[64]},[[0,"search","handleSearch"]]]]],["vertex-viewer-measurement-tool.cjs",[[1,"vertex-viewer-measurement-tool",{"distanceTemplateId":[1,"distance-template-id"],"tool":[1],"units":[1],"fractionalDigits":[2,"fractional-digits"],"disabled":[4],"viewer":[16],"isMeasuring":[1540,"is-measuring"],"snapDistance":[2,"snap-distance"],"stateMap":[32]}]]],["vertex-viewer-markup.cjs",[[1,"vertex-viewer-markup",{"arrowTemplateId":[1,"arrow-template-id"],"circleTemplateId":[1,"circle-template-id"],"freeformTemplateId":[1,"freeform-template-id"],"tool":[1],"disabled":[4],"viewer":[16],"selectedMarkupId":[1025,"selected-markup-id"],"selectNew":[4,"select-new"],"toSelectMarkupId":[32],"pointerDownPosition":[32],"addMarkup":[64],"removeMarkup":[64],"getMarkupElements":[64],"getMarkupElement":[64]},[[0,"markupEnd","handleMarkupEnd"],[1,"pointerdown","handleMarkupPointerDown"]]]]],["vertex-viewer-markup-tool.cjs",[[1,"vertex-viewer-markup-tool",{"arrowTemplateId":[1,"arrow-template-id"],"circleTemplateId":[1,"circle-template-id"],"freeformTemplateId":[1,"freeform-template-id"],"tool":[1],"disabled":[4],"viewer":[16],"stateMap":[32],"reset":[64]}]]],["vertex-viewer-measurements.cjs",[[1,"vertex-viewer-measurements",{"distanceTemplateId":[1,"distance-template-id"],"tool":[1],"units":[1],"fractionalDigits":[2,"fractional-digits"],"disabled":[4],"viewer":[16],"selectedMeasurementId":[1025,"selected-measurement-id"],"snapDistance":[2,"snap-distance"],"showAxisReferenceLines":[4,"show-axis-reference-lines"],"measurementModel":[16],"addMeasurement":[64],"removeMeasurement":[64],"getMeasurementElement":[64],"getMeasurementElements":[64]},[[0,"measureEnd","handleMeasureEnd"],[1,"pointerdown","handleMeasurementPointerDown"]]]]],["vertex-viewer-view-cube.cjs",[[1,"vertex-viewer-view-cube",{"xPositiveLabel":[1,"x-positive-label"],"xNegativeLabel":[1,"x-negative-label"],"yPositiveLabel":[1,"y-positive-label"],"yNegativeLabel":[1,"y-negative-label"],"zPositiveLabel":[1,"z-positive-label"],"zNegativeLabel":[1,"z-negative-label"],"standardViewsOff":[4,"standard-views-off"],"animationDuration":[2,"animation-duration"],"triadOff":[4,"triad-off"],"worldOrientation":[1040],"camera":[1040],"viewer":[16],"boxLength":[32],"triadPosition":[32]}]]],["vertex-viewer-measurement-precise.cjs",[[1,"vertex-viewer-measurement-precise",{"measurementModel":[16],"measurementOverlays":[16],"measurementController":[1040],"measurableEntityTypes":[16],"viewer":[16],"configEnv":[1,"config-env"],"config":[16],"overlays":[32]}]]],["vertex-scene-tree-table-cell.cjs",[[1,"vertex-scene-tree-table-cell",{"node":[16],"tree":[16],"value":[1],"placeholder":[1],"hoveredNodeId":[1,"hovered-node-id"],"expandToggle":[4,"expand-toggle"],"visibilityToggle":[4,"visibility-toggle"],"interactionsDisabled":[4,"interactions-disabled"],"recurseParentSelectionDisabled":[4,"recurse-parent-selection-disabled"]}]]],["vertex-scene-tree-table-column.cjs",[[1,"vertex-scene-tree-table-column",{"initialWidth":[2,"initial-width"],"minWidth":[2,"min-width"],"maxWidth":[2,"max-width"]}]]],["vertex-scene-tree-table-header.cjs",[[1,"vertex-scene-tree-table-header"]]],["vertex-scene-tree-table-resize-divider.cjs",[[1,"vertex-scene-tree-table-resize-divider",{"dragging":[32]}]]],["vertex-scene-tree-toolbar-group.cjs",[[1,"vertex-scene-tree-toolbar-group"]]],["vertex-viewer.cjs",[[1,"vertex-viewer",{"src":[1],"clientId":[1,"client-id"],"deviceId":[1,"device-id"],"config":[1],"configEnv":[1,"config-env"],"resolvedConfig":[1040],"cameraControls":[4,"camera-controls"],"cameraType":[1,"camera-type"],"keyboardControls":[4,"keyboard-controls"],"rotateAroundTapPoint":[4,"rotate-around-tap-point"],"token":[1025],"depthBuffers":[1,"depth-buffers"],"experimentalGhostingOpacity":[2,"experimental-ghosting-opacity"],"featureLines":[16],"featureHighlighting":[16],"featureMaps":[1,"feature-maps"],"selectionMaterial":[1,"selection-material"],"resizeDebounce":[2,"resize-debounce"],"frame":[1040],"stream":[1040],"stencilBuffer":[1040],"viewport":[1040],"dimensions":[32],"hostDimensions":[32],"errorMessage":[32],"cursor":[32],"stateMap":[32],"dispatchFrameDrawn":[64],"registerInteractionHandler":[64],"registerTapKeyInteraction":[64],"getInteractionTarget":[64],"addCursor":[64],"getInteractionHandlers":[64],"getBaseInteractionHandler":[64],"getJwt":[64],"load":[64],"unload":[64],"scene":[64],"isSceneReady":[64]},[[0,"tap","handleTapEvent"]]]]],["vertex-viewer-measurement-details.cjs",[[1,"vertex-viewer-measurement-details",{"measurementModel":[16],"measurementOverlays":[16],"measurementOutcome":[1040],"distanceUnits":[1,"distance-units"],"angleUnits":[1,"angle-units"],"fractionalDigits":[2,"fractional-digits"],"distanceFormatter":[16],"angleFormatter":[16],"areaFormatter":[16],"resultTypes":[16],"overlay":[32],"distanceMeasurementUnits":[32],"angleMeasurementUnits":[32],"areaMeasurementUnits":[32]}]]],["vertex-viewer-measurement-distance.cjs",[[1,"vertex-viewer-measurement-distance",{"start":[1040],"startJson":[1,"start-json"],"end":[1040],"endJson":[1,"end-json"],"distance":[1026],"showAxisReferenceLines":[4,"show-axis-reference-lines"],"snapDistance":[2,"snap-distance"],"units":[1],"fractionalDigits":[2,"fractional-digits"],"labelFormatter":[16],"anchorLabelOffset":[2,"anchor-label-offset"],"lineCapLength":[2,"line-cap-length"],"mode":[513],"interactingAnchor":[1537,"interacting-anchor"],"invalid":[1540],"camera":[16],"hitProvider":[16],"indicatorPt":[1040],"viewer":[16],"measurementModel":[16],"viewport":[32],"elementBounds":[32],"interactionCount":[32],"internalCamera":[32],"invalidateStateCounter":[32],"stateMap":[32],"measurementUnits":[32],"computeElementMetrics":[64]}]]],["vertex-scene-tree-search_3.cjs",[[1,"vertex-scene-tree-search",{"debounce":[2],"disabled":[4],"placeholder":[1],"value":[1025],"focused":[32],"setFocus":[64]}],[1,"vertex-scene-tree-table-layout",{"tree":[16],"controller":[16],"rows":[16],"totalRows":[2,"total-rows"],"rowHeight":[1026,"row-height"],"overScanCount":[2,"over-scan-count"],"rowData":[16],"layoutOffset":[1026,"layout-offset"],"scrollOffset":[1026,"scroll-offset"],"layoutHeight":[1026,"layout-height"],"layoutWidth":[1026,"layout-width"],"viewportStartIndex":[1026,"viewport-start-index"],"viewportEndIndex":[1026,"viewport-end-index"],"columnGridLayout":[32],"columnGridFixedLayout":[32],"hoveredNodeId":[32],"isComputingCellHeight":[32],"lastDividerPointerPosition":[32],"resizingColumnIndex":[32],"stateMap":[32],"scrollToPosition":[64]}],[1,"vertex-scene-tree-toolbar"]]],["vertex-viewer-button_3.cjs",[[1,"vertex-viewer-toolbar",{"placement":[1],"direction":[1]}],[1,"vertex-viewer-button"],[1,"vertex-viewer-toolbar-group",{"direction":[1]}]]],["vertex-viewer-dom-element_3.cjs",[[1,"vertex-viewer-dom-element",{"position":[1040],"positionJson":[1,"position"],"rotation":[1040],"rotationJson":[1,"rotation"],"quaternion":[1040],"quaternionJson":[1,"quaternion"],"scale":[1040],"scaleJson":[1,"scale"],"matrix":[1040],"occlusionOff":[4,"occlusion-off"],"occluded":[516],"billboardOff":[4,"billboard-off"],"interactionsOff":[516,"interactions-off"]}],[1,"vertex-viewer-dom-group",{"position":[1040],"positionJson":[1,"position"],"rotation":[1040],"rotationJson":[1,"rotation"],"quaternion":[1040],"quaternionJson":[1,"quaternion"],"scale":[1040],"scaleJson":[1,"scale"],"matrix":[1040]}],[1,"vertex-viewer-dom-renderer",{"drawMode":[1,"draw-mode"],"viewer":[16],"camera":[1040],"depthBuffer":[1040],"viewport":[32],"invalidateFrameCounter":[32]},[[0,"propertyChange","handlePropertyChange"]]]]],["vertex-viewer-icon.cjs",[[1,"vertex-viewer-icon",{"name":[1],"size":[1]}]]],["vertex-viewer-layer.cjs",[[1,"vertex-viewer-layer",{"stretchOff":[516,"stretch-off"]}]]],["vertex-viewer-markup-arrow_3.cjs",[[1,"vertex-viewer-markup-arrow",{"start":[1040],"startJson":[1,"start"],"end":[1040],"endJson":[1,"end"],"mode":[513],"viewer":[16],"elementBounds":[32],"editAnchor":[32],"dispose":[64]}],[1,"vertex-viewer-markup-circle",{"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"elementBounds":[32],"startPosition":[32],"editAnchor":[32],"resizeBounds":[32],"dispose":[64]}],[1,"vertex-viewer-markup-freeform",{"points":[1040],"pointsJson":[1,"points"],"bounds":[1040],"boundsJson":[1,"bounds"],"mode":[513],"viewer":[16],"elementBounds":[32],"resizeStartPosition":[32],"editAnchor":[32],"resizeBounds":[32],"resizePoints":[32],"screenPoints":[32],"dispose":[64]}]]],["vertex-viewer-measurement-line_2.cjs",[[1,"vertex-viewer-measurement-overlays",{"measurementOverlays":[16],"camera":[1040],"viewer":[16],"overlays":[32]}],[1,"vertex-viewer-measurement-line",{"start":[16],"end":[16],"capLength":[2,"cap-length"],"pointerEvents":[1,"pointer-events"]}]]]], options);
|
|
78
78
|
});
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
const bundle_esm = require('./bundle.esm-
|
|
6
|
+
const bundle_esm = require('./bundle.esm-618a5fe9.js');
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* A `Viewport` represents the drawing area in the viewer.
|
|
@@ -75,7 +75,7 @@ class Viewport {
|
|
|
75
75
|
return bundle_esm.point.scale(pt, 1 / scaleX, 1 / scaleY);
|
|
76
76
|
}
|
|
77
77
|
/**
|
|
78
|
-
* Transforms a point in viewport coordinates to a point in world space
|
|
78
|
+
* Transforms a point in viewport coordinates to a point in perspective world space
|
|
79
79
|
* coordinates. This method expects a depth buffer in order to compute a value
|
|
80
80
|
* for the Z axis.
|
|
81
81
|
*
|
|
@@ -90,6 +90,21 @@ class Viewport {
|
|
|
90
90
|
const ray = this.transformPointToRay(pt, depthBuffer, depthBuffer.camera);
|
|
91
91
|
return depthBuffer.getWorldPoint(depthPt, ray, fallbackNormalizedDepth);
|
|
92
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Transforms a point in viewport coordinates to a point in orthographic world space
|
|
95
|
+
* coordinates. This method expects a depth buffer in order to compute a value
|
|
96
|
+
* for the Z axis.
|
|
97
|
+
*
|
|
98
|
+
* @param pt A point in viewport coordinates.
|
|
99
|
+
* @param depthBuffer A depth buffer for computing the Z axis.
|
|
100
|
+
* @param fallbackNormalizedDepth A fallback value if the depth is the max
|
|
101
|
+
* depth value, or cannot be determined.
|
|
102
|
+
*/
|
|
103
|
+
transformPointToOrthographicWorldSpace(pt, depthBuffer, fallbackNormalizedDepth) {
|
|
104
|
+
const depthPt = this.transformPointToFrame(pt, depthBuffer);
|
|
105
|
+
const ray = this.transformPointToOrthographicRay(pt, depthBuffer, depthBuffer.camera);
|
|
106
|
+
return depthBuffer.getOrthographicWorldPoint(depthPt, ray, fallbackNormalizedDepth);
|
|
107
|
+
}
|
|
93
108
|
/**
|
|
94
109
|
* Transforms a point in viewport coordinates to a ray. The returned ray will
|
|
95
110
|
* have an origin that is at the position of the camera with a direction that
|
|
@@ -107,6 +122,23 @@ class Viewport {
|
|
|
107
122
|
const direction = bundle_esm.vector3.normalize(bundle_esm.vector3.subtract(world, origin));
|
|
108
123
|
return bundle_esm.ray.create({ origin, direction });
|
|
109
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Transforms a point in viewport coordinates to a ray. The returned ray will
|
|
127
|
+
* have an origin that is at the world point of viewport coordinate with a direction that
|
|
128
|
+
* is pointing into world space away from the camera.
|
|
129
|
+
*
|
|
130
|
+
* @param pt A point in viewport coordinates.
|
|
131
|
+
* @param image An image of a frame.
|
|
132
|
+
* @param camera A camera used to determine orientation of the scene.
|
|
133
|
+
*/
|
|
134
|
+
transformPointToOrthographicRay(pt, image, camera) {
|
|
135
|
+
const ndc = this.transformScreenPointToNdc(pt, image);
|
|
136
|
+
const world = bundle_esm.vector3.transformNdcToWorldSpace(bundle_esm.vector3.create(ndc.x, ndc.y, 0.5), camera.worldMatrix, camera.projectionMatrixInverse);
|
|
137
|
+
return bundle_esm.ray.create({
|
|
138
|
+
origin: world,
|
|
139
|
+
direction: bundle_esm.vector3.normalize(camera.viewVector),
|
|
140
|
+
});
|
|
141
|
+
}
|
|
110
142
|
/**
|
|
111
143
|
* Maps a screen point to normalized device coordinates (NDC). A screen point
|
|
112
144
|
* at 0,0 represents the top-left of the viewport.
|
|
@@ -89,11 +89,11 @@ button {
|
|
|
89
89
|
display: flex;
|
|
90
90
|
align-items: center;
|
|
91
91
|
justify-content: center;
|
|
92
|
-
visibility: hidden;
|
|
93
92
|
width: 24px;
|
|
94
93
|
height: 24px;
|
|
95
94
|
}
|
|
96
95
|
|
|
96
|
+
:host(:not([is-hovered]):not([is-partial]):not([is-hidden])) .visibility-btn,
|
|
97
97
|
:host([is-hidden]) .visibility-btn,
|
|
98
98
|
:host([is-partial]) .visibility-btn,
|
|
99
99
|
:host([is-hovered]) .visibility-btn {
|