@vertexvis/viewer 0.13.2-canary.5 → 0.13.2-canary.8
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/{config-51717484.js → config-fb124bac.js} +1 -1
- package/dist/cjs/{entities-44af4bed.js → entities-90f1347a.js} +2 -2
- package/dist/cjs/index.cjs.js +5 -5
- package/dist/cjs/{mapper-c2984708.js → mapper-80ee2957.js} +1 -1
- package/dist/cjs/{scene-b94ed69f.js → scene-92728420.js} +1 -1
- package/dist/cjs/{streamAttributes-24243bf7.js → streamAttributes-81eb52f2.js} +62 -2
- package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +3 -0
- package/dist/cjs/vertex-scene-tree.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-dom-element_3.cjs.entry.js +6 -5
- package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +12 -7
- package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +4 -4
- package/dist/cjs/vertex-viewer-measurement-tool.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer-measurements.cjs.entry.js +2 -2
- package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +1 -1
- package/dist/cjs/vertex-viewer.cjs.entry.js +27 -32
- package/dist/cjs/{viewport-d2b5a8e7.js → viewport-54b1389d.js} +33 -1
- package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.js +4 -1
- package/dist/collection/components/viewer-dom-renderer/renderer3d.js +4 -2
- package/dist/collection/components/viewer-dom-renderer/viewer-dom-renderer.js +2 -3
- package/dist/collection/components/viewer-measurement-distance/hitTest.js +9 -4
- package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance.js +2 -2
- package/dist/collection/lib/interactions/interactionApiOrthographic.js +22 -29
- package/dist/collection/lib/interactions/multiTouchInteractionHandler.js +3 -2
- package/dist/collection/lib/types/depthBuffer.js +32 -3
- package/dist/collection/lib/types/frame.js +32 -1
- package/dist/collection/lib/types/viewport.js +34 -2
- package/dist/collection/testing/fixtures.js +7 -7
- package/dist/custom-elements/index.js +134 -38
- package/dist/esm/{config-74107d81.js → config-fb7cd8ff.js} +1 -1
- package/dist/esm/{entities-aee9e3b5.js → entities-78557270.js} +2 -2
- package/dist/esm/index.js +5 -5
- package/dist/esm/index.mjs +5 -5
- package/dist/esm/{mapper-8e05e52a.js → mapper-da36de17.js} +1 -1
- package/dist/esm/{scene-1b4f21d2.js → scene-2bfcce74.js} +1 -1
- package/dist/esm/{streamAttributes-aeeb30b7.js → streamAttributes-d0b384b3.js} +63 -3
- package/dist/esm/vertex-scene-tree-table-cell.entry.js +3 -0
- package/dist/esm/vertex-scene-tree.entry.js +2 -2
- package/dist/esm/vertex-viewer-dom-element_3.entry.js +6 -5
- package/dist/esm/vertex-viewer-measurement-details.entry.js +1 -1
- package/dist/esm/vertex-viewer-measurement-distance.entry.js +12 -7
- package/dist/esm/vertex-viewer-measurement-line_2.entry.js +2 -2
- package/dist/esm/vertex-viewer-measurement-precise.entry.js +4 -4
- package/dist/esm/vertex-viewer-measurement-tool.entry.js +1 -1
- package/dist/esm/vertex-viewer-measurements.entry.js +2 -2
- package/dist/esm/vertex-viewer-view-cube.entry.js +1 -1
- package/dist/esm/vertex-viewer.entry.js +27 -32
- package/dist/esm/{viewport-b5cfb917.js → viewport-5cc7b128.js} +33 -1
- package/dist/types/components/scene-tree-table-cell/scene-tree-table-cell.d.ts +1 -1
- package/dist/types/components/viewer-measurement-distance/hitTest.d.ts +3 -2
- package/dist/types/lib/interactions/interactionApiOrthographic.d.ts +3 -2
- package/dist/types/lib/types/depthBuffer.d.ts +24 -2
- package/dist/types/lib/types/frame.d.ts +22 -0
- package/dist/types/lib/types/viewport.d.ts +22 -1
- package/dist/types/testing/fixtures.d.ts +4 -3
- package/dist/viewer/index.esm.js +1 -1
- package/dist/viewer/{p-e24a91d1.entry.js → p-0a189e62.entry.js} +1 -1
- package/dist/viewer/{p-3ab84758.js → p-69058178.js} +1 -1
- package/dist/viewer/{p-bbd34830.entry.js → p-73a5eacc.entry.js} +1 -1
- package/dist/viewer/{p-299ef720.js → p-77be081a.js} +1 -1
- package/dist/viewer/{p-6796ee68.js → p-809d09d9.js} +1 -1
- package/dist/viewer/{p-deed329f.entry.js → p-858bd2c7.entry.js} +1 -1
- package/dist/viewer/{p-60bab172.entry.js → p-89b66838.entry.js} +1 -1
- package/dist/viewer/p-96020463.entry.js +4 -0
- package/dist/viewer/p-a93a63a9.js +4 -0
- package/dist/viewer/{p-d4f82540.entry.js → p-b0ac6b3c.entry.js} +1 -1
- package/dist/viewer/{p-c5792433.js → p-b8774c9c.js} +1 -1
- package/dist/viewer/p-bcde5521.entry.js +4 -0
- package/dist/viewer/{p-a10fa95c.js → p-d32b54cb.js} +1 -1
- package/dist/viewer/{p-fd6ee00f.entry.js → p-d9f99f4d.entry.js} +1 -1
- package/dist/viewer/{p-be1e893e.entry.js → p-ebd55df7.entry.js} +1 -1
- package/dist/viewer/{p-fad89057.entry.js → p-f0411993.entry.js} +1 -1
- package/dist/viewer/p-fd261908.entry.js +4 -0
- package/dist/viewer/viewer.esm.js +1 -1
- package/package.json +7 -7
- package/dist/viewer/p-48fefcfa.js +0 -4
- package/dist/viewer/p-da31a14a.entry.js +0 -4
- package/dist/viewer/p-de82f35a.entry.js +0 -4
- package/dist/viewer/p-fec1a8d0.entry.js +0 -4
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
*/
|
|
4
4
|
'use strict';
|
|
5
5
|
|
|
6
|
-
const mapper = require('./mapper-
|
|
6
|
+
const mapper = require('./mapper-80ee2957.js');
|
|
7
7
|
const grpcWebClient_umd = require('./grpc-web-client.umd-60a79aae.js');
|
|
8
|
-
const streamAttributes = require('./streamAttributes-
|
|
8
|
+
const streamAttributes = require('./streamAttributes-81eb52f2.js');
|
|
9
9
|
const browser_esm = require('./browser.esm-075810bf.js');
|
|
10
10
|
|
|
11
11
|
function requestUnary(caller) {
|
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -5,18 +5,18 @@
|
|
|
5
5
|
|
|
6
6
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
7
7
|
|
|
8
|
-
const scene = require('./scene-
|
|
8
|
+
const scene = require('./scene-92728420.js');
|
|
9
9
|
const cursors = require('./cursors-d71f6a74.js');
|
|
10
|
-
const entities = require('./entities-
|
|
10
|
+
const entities = require('./entities-90f1347a.js');
|
|
11
11
|
const model = require('./model-55abd9ab.js');
|
|
12
12
|
const overlays = require('./overlays-68e8eff2.js');
|
|
13
13
|
const results = require('./results-e9496869.js');
|
|
14
|
-
const streamAttributes = require('./streamAttributes-
|
|
14
|
+
const streamAttributes = require('./streamAttributes-81eb52f2.js');
|
|
15
15
|
const markup = require('./markup-7f7de5f2.js');
|
|
16
|
-
const viewport = require('./viewport-
|
|
16
|
+
const viewport = require('./viewport-54b1389d.js');
|
|
17
17
|
require('./browser.esm-075810bf.js');
|
|
18
18
|
require('./bundle.esm-618a5fe9.js');
|
|
19
|
-
require('./mapper-
|
|
19
|
+
require('./mapper-80ee2957.js');
|
|
20
20
|
require('./_commonjsHelpers-537d719a.js');
|
|
21
21
|
require('./grpc-web-client.umd-60a79aae.js');
|
|
22
22
|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
const _commonjsHelpers = require('./_commonjsHelpers-537d719a.js');
|
|
7
7
|
const grpcWebClient_umd = require('./grpc-web-client.umd-60a79aae.js');
|
|
8
8
|
const browser_esm = require('./browser.esm-075810bf.js');
|
|
9
|
-
const streamAttributes = require('./streamAttributes-
|
|
9
|
+
const streamAttributes = require('./streamAttributes-81eb52f2.js');
|
|
10
10
|
|
|
11
11
|
var uuid_pb = _commonjsHelpers.createCommonjsModule(function (module, exports) {
|
|
12
12
|
/**
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
const browser_esm = require('./browser.esm-075810bf.js');
|
|
7
7
|
const bundle_esm = require('./bundle.esm-618a5fe9.js');
|
|
8
|
-
const streamAttributes = require('./streamAttributes-
|
|
8
|
+
const streamAttributes = require('./streamAttributes-81eb52f2.js');
|
|
9
9
|
|
|
10
10
|
const defaultColor = {
|
|
11
11
|
opacity: 100,
|
|
@@ -36587,7 +36587,7 @@ class DepthBuffer {
|
|
|
36587
36587
|
/**
|
|
36588
36588
|
* Computes the depth from a 2D point within the coordinate space of the depth
|
|
36589
36589
|
* buffer. The returned depth is a value that's between the near and far plane
|
|
36590
|
-
* of the camera.
|
|
36590
|
+
* of the perspective camera.
|
|
36591
36591
|
*
|
|
36592
36592
|
* @param point A 2D point within the viewport.
|
|
36593
36593
|
* @param fallbackNormalizedDepth A fallback value if the depth is the max
|
|
@@ -36599,6 +36599,21 @@ class DepthBuffer {
|
|
|
36599
36599
|
const depth = this.getNormalizedDepthAtPoint(point, fallbackNormalizedDepth);
|
|
36600
36600
|
return depth * (far - near) + near;
|
|
36601
36601
|
}
|
|
36602
|
+
/**
|
|
36603
|
+
* Computes the depth from a 2D point within the coordinate space of the depth
|
|
36604
|
+
* buffer. The returned depth is a value that's between the near and far plane
|
|
36605
|
+
* of the orthographic camera.
|
|
36606
|
+
*
|
|
36607
|
+
* @param point A 2D point within the viewport.
|
|
36608
|
+
* @param fallbackNormalizedDepth A fallback value if the depth is the max
|
|
36609
|
+
* depth value, or cannot be determined.
|
|
36610
|
+
* @returns A depth between the near and far plane.
|
|
36611
|
+
*/
|
|
36612
|
+
getOrthographicDepthAtPoint(point, fallbackNormalizedDepth) {
|
|
36613
|
+
const { near, far } = this.camera;
|
|
36614
|
+
const depth = this.getNormalizedDepthAtPoint(point, fallbackNormalizedDepth);
|
|
36615
|
+
return depth * (far - near) + near / 2;
|
|
36616
|
+
}
|
|
36602
36617
|
/**
|
|
36603
36618
|
* Computes a depth from a 2D point within the coordinate space of the frame.
|
|
36604
36619
|
* The returned depth is a normalized value (`[0, 1]`) between the near and
|
|
@@ -36639,7 +36654,7 @@ class DepthBuffer {
|
|
|
36639
36654
|
return this.getNormalizedDepthAtPoint(point) < 1;
|
|
36640
36655
|
}
|
|
36641
36656
|
/**
|
|
36642
|
-
* Computes a 3D point in world space coordinates from the depth value at the
|
|
36657
|
+
* Computes a 3D point in perspective world space coordinates from the depth value at the
|
|
36643
36658
|
* given pixel and ray.
|
|
36644
36659
|
*
|
|
36645
36660
|
* @param point A pixel to use for reading a depth value.
|
|
@@ -36659,6 +36674,20 @@ class DepthBuffer {
|
|
|
36659
36674
|
(bundle_esm.vector3.magnitude(vv) * bundle_esm.vector3.magnitude(eyeToWorldPt));
|
|
36660
36675
|
return bundle_esm.ray.at(ray, distance / angle);
|
|
36661
36676
|
}
|
|
36677
|
+
/**
|
|
36678
|
+
* Computes a 3D point in orthographic world space coordinates from the depth value at the
|
|
36679
|
+
* given pixel and ray.
|
|
36680
|
+
*
|
|
36681
|
+
* @param point A pixel to use for reading a depth value.
|
|
36682
|
+
* @param ray A ray that specifies the origin and direction.
|
|
36683
|
+
* @param fallbackNormalizedDepth A fallback value if the depth is the max
|
|
36684
|
+
* depth value, or cannot be determined.
|
|
36685
|
+
* @returns A point in world space coordinates.
|
|
36686
|
+
*/
|
|
36687
|
+
getOrthographicWorldPoint(point, ray, fallbackNormalizedDepth) {
|
|
36688
|
+
const distance = this.getOrthographicDepthAtPoint(point, fallbackNormalizedDepth);
|
|
36689
|
+
return bundle_esm.ray.at(ray, distance);
|
|
36690
|
+
}
|
|
36662
36691
|
/**
|
|
36663
36692
|
* Returns `true` if the given point in world space is occluded by any
|
|
36664
36693
|
* geometry.
|
|
@@ -36938,6 +36967,9 @@ class FrameCameraBase {
|
|
|
36938
36967
|
get projectionViewMatrix() {
|
|
36939
36968
|
return this.computeCameraMatrices().projectionViewMatrix;
|
|
36940
36969
|
}
|
|
36970
|
+
get frustumProjectionViewMatrix() {
|
|
36971
|
+
return this.computeCameraMatrices().projectionViewMatrix;
|
|
36972
|
+
}
|
|
36941
36973
|
static fromBoundingBox(camera, boundingBox, aspectRatio) {
|
|
36942
36974
|
const { near, far } = fromBoundingBoxAndLookAtCamera(boundingBox, camera);
|
|
36943
36975
|
if (isOrthographicFrameCamera(camera)) {
|
|
@@ -36947,9 +36979,15 @@ class FrameCameraBase {
|
|
|
36947
36979
|
return new FramePerspectiveCamera(camera.position, camera.lookAt, camera.up, near, far, aspectRatio, 45);
|
|
36948
36980
|
}
|
|
36949
36981
|
}
|
|
36982
|
+
/**
|
|
36983
|
+
* Returns whether this `FrameCameraBase` is an orthographic camera.
|
|
36984
|
+
*/
|
|
36950
36985
|
isOrthographic() {
|
|
36951
36986
|
return false;
|
|
36952
36987
|
}
|
|
36988
|
+
/**
|
|
36989
|
+
* Returns whether this `FrameCameraBase` is a perspective camera.
|
|
36990
|
+
*/
|
|
36953
36991
|
isPerspective() {
|
|
36954
36992
|
return false;
|
|
36955
36993
|
}
|
|
@@ -37010,6 +37048,15 @@ class FramePerspectiveCamera extends FrameCameraBase {
|
|
|
37010
37048
|
this.aspectRatio = aspectRatio;
|
|
37011
37049
|
this.fovY = fovY;
|
|
37012
37050
|
}
|
|
37051
|
+
/**
|
|
37052
|
+
* Converts this `FramePerspectiveCamera` to a `FrameOrthographicCamera` using
|
|
37053
|
+
* the provided `boundingBox` to compute the viewing frustum.
|
|
37054
|
+
*
|
|
37055
|
+
* @param boundingBox The visible bounding box.
|
|
37056
|
+
*/
|
|
37057
|
+
toOrthographic(boundingBox) {
|
|
37058
|
+
return FrameCameraBase.fromBoundingBox(toOrthographic(this, boundingBox), boundingBox, this.aspectRatio);
|
|
37059
|
+
}
|
|
37013
37060
|
isPerspective() {
|
|
37014
37061
|
return true;
|
|
37015
37062
|
}
|
|
@@ -37045,9 +37092,22 @@ class FrameOrthographicCamera extends FrameCameraBase {
|
|
|
37045
37092
|
this.right = this.top * aspectRatio;
|
|
37046
37093
|
this.left = -this.right;
|
|
37047
37094
|
}
|
|
37095
|
+
/**
|
|
37096
|
+
* Converts this `FrameOrthographicCamera` to a `FramePerspectiveCamera` using
|
|
37097
|
+
* the provided `boundingBox` to compute the near and far clipping planes.
|
|
37098
|
+
*
|
|
37099
|
+
* @param boundingBox The visible bounding box.
|
|
37100
|
+
*/
|
|
37101
|
+
toPerspective(boundingBox) {
|
|
37102
|
+
return FrameCameraBase.fromBoundingBox(toPerspective(this), boundingBox, this.aspectRatio);
|
|
37103
|
+
}
|
|
37048
37104
|
isOrthographic() {
|
|
37049
37105
|
return true;
|
|
37050
37106
|
}
|
|
37107
|
+
get frustumProjectionViewMatrix() {
|
|
37108
|
+
const frustumProjectionMatrix = bundle_esm.matrix4.makeFrustum(this.left, this.right, this.top, this.bottom, this.near, this.far);
|
|
37109
|
+
return bundle_esm.matrix4.multiply(frustumProjectionMatrix, this.computeCameraMatrices().viewMatrix);
|
|
37110
|
+
}
|
|
37051
37111
|
computeCameraMatrices() {
|
|
37052
37112
|
if (this.cameraMatrices == null) {
|
|
37053
37113
|
const viewMatrix = bundle_esm.matrix4.makeLookAtView(this.position, this.lookAt, this.up);
|
|
@@ -104,6 +104,9 @@ let SceneTreeTableCell = class {
|
|
|
104
104
|
}) })))), index.h("div", { class: "content" }, this.value != null && this.value.trim() !== '' ? (index.h("slot", null, this.displayValue())) : (index.h("slot", { name: "placeholder" }, this.placeholder))), this.visibilityToggle && (index.h("button", { class: "visibility-btn no-shrink", "data-test-id": 'visibility-btn-' + ((_g = this.node) === null || _g === void 0 ? void 0 : _g.name), onPointerDown: (event) => {
|
|
105
105
|
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
106
106
|
this.toggleVisibility(event);
|
|
107
|
+
}, onTouchStart: (event) => {
|
|
108
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
109
|
+
this.toggleVisibility(event);
|
|
107
110
|
} }, index.h("div", { class: index$1.classnames('icon', {
|
|
108
111
|
'icon-visible': !((_h = this.node) === null || _h === void 0 ? void 0 : _h.partiallyVisible) && ((_j = this.node) === null || _j === void 0 ? void 0 : _j.visible),
|
|
109
112
|
'icon-hidden': !((_k = this.node) === null || _k === void 0 ? void 0 : _k.partiallyVisible) && !((_l = this.node) === null || _l === void 0 ? void 0 : _l.visible),
|
|
@@ -9,10 +9,10 @@ const index = require('./index-e100709a.js');
|
|
|
9
9
|
const bundle_esm = require('./bundle.esm-618a5fe9.js');
|
|
10
10
|
const _commonjsHelpers = require('./_commonjsHelpers-537d719a.js');
|
|
11
11
|
const grpcWebClient_umd = require('./grpc-web-client.umd-60a79aae.js');
|
|
12
|
-
const config = require('./config-
|
|
12
|
+
const config = require('./config-fb124bac.js');
|
|
13
13
|
const browser_esm = require('./browser.esm-075810bf.js');
|
|
14
14
|
const dom = require('./dom-d162f898.js');
|
|
15
|
-
require('./streamAttributes-
|
|
15
|
+
require('./streamAttributes-81eb52f2.js');
|
|
16
16
|
|
|
17
17
|
window.requestIdleCallback =
|
|
18
18
|
window.requestIdleCallback ||
|
|
@@ -7,8 +7,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
7
7
|
|
|
8
8
|
const index = require('./index-e100709a.js');
|
|
9
9
|
const bundle_esm = require('./bundle.esm-618a5fe9.js');
|
|
10
|
-
require('./streamAttributes-
|
|
11
|
-
const viewport = require('./viewport-
|
|
10
|
+
require('./streamAttributes-81eb52f2.js');
|
|
11
|
+
const viewport = require('./viewport-54b1389d.js');
|
|
12
12
|
require('./browser.esm-075810bf.js');
|
|
13
13
|
require('./_commonjsHelpers-537d719a.js');
|
|
14
14
|
|
|
@@ -445,7 +445,9 @@ function getScreenPosition(pt, projectionViewMatrix, viewport) {
|
|
|
445
445
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
446
446
|
const Renderer3d = ({ camera, viewport }, children) => {
|
|
447
447
|
const pMatrix = bundle_esm.matrix4.toObject(camera.projectionMatrix);
|
|
448
|
-
const fovY =
|
|
448
|
+
const fovY = camera.isOrthographic()
|
|
449
|
+
? ((camera.far * 2) / (camera.fovHeight * 2)) * (viewport.height / 2)
|
|
450
|
+
: pMatrix.m22 * (viewport.height / 2);
|
|
449
451
|
const cameraTransform = [
|
|
450
452
|
`translateZ(${fovY}px)`,
|
|
451
453
|
getCameraCssMatrix(camera.viewMatrix),
|
|
@@ -623,11 +625,10 @@ let ViewerDomRenderer = class {
|
|
|
623
625
|
this.invalidateFrame();
|
|
624
626
|
}
|
|
625
627
|
async updatePropsFromViewer() {
|
|
626
|
-
var _a;
|
|
627
628
|
const { frame, depthBuffers } = this.viewer || {};
|
|
628
629
|
this.depthBuffer =
|
|
629
630
|
depthBuffers === 'all' ? await (frame === null || frame === void 0 ? void 0 : frame.depthBuffer()) : undefined;
|
|
630
|
-
this.camera =
|
|
631
|
+
this.camera = frame === null || frame === void 0 ? void 0 : frame.scene.camera;
|
|
631
632
|
}
|
|
632
633
|
get hostEl() { return index.getElement(this); }
|
|
633
634
|
static get watchers() { return {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
7
7
|
|
|
8
8
|
const index = require('./index-e100709a.js');
|
|
9
|
-
const streamAttributes = require('./streamAttributes-
|
|
9
|
+
const streamAttributes = require('./streamAttributes-81eb52f2.js');
|
|
10
10
|
const bundle_esm = require('./bundle.esm-618a5fe9.js');
|
|
11
11
|
const index$1 = require('./index-3bc6bac0.js');
|
|
12
12
|
require('./browser.esm-075810bf.js');
|
|
@@ -10,13 +10,13 @@ const bundle_esm = require('./bundle.esm-618a5fe9.js');
|
|
|
10
10
|
const constants = require('./constants-be2deb55.js');
|
|
11
11
|
const cursors = require('./cursors-d71f6a74.js');
|
|
12
12
|
const dom = require('./dom-57ef84e9.js');
|
|
13
|
-
require('./mapper-
|
|
13
|
+
require('./mapper-80ee2957.js');
|
|
14
14
|
require('./grpc-web-client.umd-60a79aae.js');
|
|
15
|
-
const streamAttributes = require('./streamAttributes-
|
|
15
|
+
const streamAttributes = require('./streamAttributes-81eb52f2.js');
|
|
16
16
|
const model = require('./model-55abd9ab.js');
|
|
17
17
|
const overlays = require('./overlays-68e8eff2.js');
|
|
18
18
|
const results = require('./results-e9496869.js');
|
|
19
|
-
const viewport = require('./viewport-
|
|
19
|
+
const viewport = require('./viewport-54b1389d.js');
|
|
20
20
|
const browser_esm = require('./browser.esm-075810bf.js');
|
|
21
21
|
const utils = require('./utils-463cd52e.js');
|
|
22
22
|
const index$1 = require('./index-3bc6bac0.js');
|
|
@@ -27,10 +27,11 @@ function getMeasurementBoundingClientRect(el) {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
class PointToPointHitTester {
|
|
30
|
-
constructor(stencil, depthBuffer, viewport) {
|
|
30
|
+
constructor(stencil, depthBuffer, viewport, camera) {
|
|
31
31
|
this.stencil = stencil;
|
|
32
32
|
this.depthBuffer = depthBuffer;
|
|
33
33
|
this.viewport = viewport;
|
|
34
|
+
this.camera = camera;
|
|
34
35
|
}
|
|
35
36
|
hitTest(pt) {
|
|
36
37
|
const dpt = this.viewport.transformPointToFrame(pt, this.depthBuffer);
|
|
@@ -55,10 +56,14 @@ class PointToPointHitTester {
|
|
|
55
56
|
transformPointToWorld(pt, { ignoreHitTest = false } = {}) {
|
|
56
57
|
const buffer = this.pickDepthBuffer(pt);
|
|
57
58
|
if (buffer != null) {
|
|
58
|
-
return this.
|
|
59
|
+
return this.camera == null || this.camera.isPerspective()
|
|
60
|
+
? this.viewport.transformPointToWorldSpace(pt, buffer)
|
|
61
|
+
: this.viewport.transformPointToOrthographicWorldSpace(pt, buffer);
|
|
59
62
|
}
|
|
60
63
|
else if (ignoreHitTest) {
|
|
61
|
-
return this.
|
|
64
|
+
return this.camera == null || this.camera.isPerspective()
|
|
65
|
+
? this.viewport.transformPointToWorldSpace(pt, this.depthBuffer)
|
|
66
|
+
: this.viewport.transformPointToOrthographicWorldSpace(pt, this.depthBuffer);
|
|
62
67
|
}
|
|
63
68
|
}
|
|
64
69
|
pickDepthBuffer(pt) {
|
|
@@ -945,7 +950,7 @@ let ViewerMeasurementDistance = class {
|
|
|
945
950
|
getHitTester() {
|
|
946
951
|
const { stencil, depthBuffer } = this.stateMap;
|
|
947
952
|
if (depthBuffer != null) {
|
|
948
|
-
return new PointToPointHitTester(stencil, depthBuffer, this.viewport);
|
|
953
|
+
return new PointToPointHitTester(stencil, depthBuffer, this.viewport, this.internalCamera);
|
|
949
954
|
}
|
|
950
955
|
}
|
|
951
956
|
updateMeasurementPropsFromModel() {
|
|
@@ -7,9 +7,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
7
7
|
|
|
8
8
|
const index = require('./index-e100709a.js');
|
|
9
9
|
const bundle_esm = require('./bundle.esm-618a5fe9.js');
|
|
10
|
-
require('./mapper-
|
|
10
|
+
require('./mapper-80ee2957.js');
|
|
11
11
|
require('./grpc-web-client.umd-60a79aae.js');
|
|
12
|
-
require('./streamAttributes-
|
|
12
|
+
require('./streamAttributes-81eb52f2.js');
|
|
13
13
|
const overlays = require('./overlays-68e8eff2.js');
|
|
14
14
|
const utils = require('./utils-463cd52e.js');
|
|
15
15
|
require('./_commonjsHelpers-537d719a.js');
|
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
7
7
|
|
|
8
8
|
const index = require('./index-e100709a.js');
|
|
9
|
-
const mapper = require('./mapper-
|
|
9
|
+
const mapper = require('./mapper-80ee2957.js');
|
|
10
10
|
const grpcWebClient_umd = require('./grpc-web-client.umd-60a79aae.js');
|
|
11
|
-
const config = require('./config-
|
|
12
|
-
const entities = require('./entities-
|
|
13
|
-
const streamAttributes = require('./streamAttributes-
|
|
11
|
+
const config = require('./config-fb124bac.js');
|
|
12
|
+
const entities = require('./entities-90f1347a.js');
|
|
13
|
+
const streamAttributes = require('./streamAttributes-81eb52f2.js');
|
|
14
14
|
const model = require('./model-55abd9ab.js');
|
|
15
15
|
const overlays = require('./overlays-68e8eff2.js');
|
|
16
16
|
const bundle_esm = require('./bundle.esm-618a5fe9.js');
|
|
@@ -8,7 +8,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
8
8
|
const index = require('./index-e100709a.js');
|
|
9
9
|
const constants = require('./constants-be2deb55.js');
|
|
10
10
|
const templates = require('./templates-e57b3741.js');
|
|
11
|
-
require('./streamAttributes-
|
|
11
|
+
require('./streamAttributes-81eb52f2.js');
|
|
12
12
|
const measurement = require('./measurement-f1ae9248.js');
|
|
13
13
|
const utils = require('./utils-463cd52e.js');
|
|
14
14
|
require('./bundle.esm-618a5fe9.js');
|
|
@@ -7,9 +7,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
7
7
|
|
|
8
8
|
const index = require('./index-e100709a.js');
|
|
9
9
|
const constants = require('./constants-be2deb55.js');
|
|
10
|
-
require('./mapper-
|
|
10
|
+
require('./mapper-80ee2957.js');
|
|
11
11
|
require('./grpc-web-client.umd-60a79aae.js');
|
|
12
|
-
require('./streamAttributes-
|
|
12
|
+
require('./streamAttributes-81eb52f2.js');
|
|
13
13
|
const model = require('./model-55abd9ab.js');
|
|
14
14
|
const results = require('./results-e9496869.js');
|
|
15
15
|
const templates = require('./templates-e57b3741.js');
|
|
@@ -8,7 +8,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
8
8
|
const index = require('./index-e100709a.js');
|
|
9
9
|
const bundle_esm = require('./bundle.esm-618a5fe9.js');
|
|
10
10
|
const stencil = require('./stencil-a664cd10.js');
|
|
11
|
-
const streamAttributes = require('./streamAttributes-
|
|
11
|
+
const streamAttributes = require('./streamAttributes-81eb52f2.js');
|
|
12
12
|
const index$1 = require('./index-3bc6bac0.js');
|
|
13
13
|
require('./browser.esm-075810bf.js');
|
|
14
14
|
require('./_commonjsHelpers-537d719a.js');
|
|
@@ -7,14 +7,14 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
7
7
|
|
|
8
8
|
const index = require('./index-e100709a.js');
|
|
9
9
|
const bundle_esm = require('./bundle.esm-618a5fe9.js');
|
|
10
|
-
const streamAttributes = require('./streamAttributes-
|
|
10
|
+
const streamAttributes = require('./streamAttributes-81eb52f2.js');
|
|
11
11
|
const browser_esm = require('./browser.esm-075810bf.js');
|
|
12
12
|
const index$1 = require('./index-3bc6bac0.js');
|
|
13
|
-
const config = require('./config-
|
|
13
|
+
const config = require('./config-fb124bac.js');
|
|
14
14
|
const cursors = require('./cursors-d71f6a74.js');
|
|
15
15
|
const dom = require('./dom-57ef84e9.js');
|
|
16
|
-
const scene = require('./scene-
|
|
17
|
-
const viewport = require('./viewport-
|
|
16
|
+
const scene = require('./scene-92728420.js');
|
|
17
|
+
const viewport = require('./viewport-54b1389d.js');
|
|
18
18
|
require('./_commonjsHelpers-537d719a.js');
|
|
19
19
|
|
|
20
20
|
/**
|
|
@@ -709,35 +709,25 @@ class InteractionApiOrthographic extends InteractionApi {
|
|
|
709
709
|
* @param screenPt A point in screen coordinates.
|
|
710
710
|
*/
|
|
711
711
|
async panCameraToScreenPoint(screenPt) {
|
|
712
|
-
return this.transformCamera(({ camera, frame, viewport
|
|
712
|
+
return this.transformCamera(({ camera, frame, viewport }) => {
|
|
713
713
|
// Capture the starting state of the pan.
|
|
714
714
|
if (this.panData == null) {
|
|
715
715
|
const startingCamera = camera.toFrameCamera();
|
|
716
716
|
const direction = startingCamera.direction;
|
|
717
|
-
const ray = viewport.
|
|
718
|
-
const
|
|
719
|
-
const
|
|
720
|
-
if (
|
|
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
721
|
console.warn('Cannot determine fallback for pan. Ray does not intersect plane.');
|
|
722
722
|
return camera;
|
|
723
723
|
}
|
|
724
|
-
// TODO: properly support depth buffer in orthographic
|
|
725
|
-
const hitPt = fallback;
|
|
726
|
-
// Create a plane for the hit point that will be used to determine the
|
|
727
|
-
// delta of future mouse movements to the original hit point. Fallback
|
|
728
|
-
// to a plane placed at the look at point, in case there's no hit.
|
|
729
|
-
// const hitPt =
|
|
730
|
-
// depthBuffer != null
|
|
731
|
-
// ? this.getWorldPoint(screenPt, depthBuffer, fallback)
|
|
732
|
-
// : fallback;
|
|
733
|
-
const hitPlane = bundle_esm.plane.fromNormalAndCoplanarPoint(direction, hitPt);
|
|
734
724
|
this.panData = { hitPt, hitPlane, startingCamera };
|
|
735
725
|
}
|
|
736
726
|
if (this.panData != null) {
|
|
737
727
|
const { hitPt, hitPlane, startingCamera } = this.panData;
|
|
738
728
|
// Use a ray that originates at the screen and intersects with the hit
|
|
739
729
|
// plane to determine the move distance.
|
|
740
|
-
const ray = viewport.
|
|
730
|
+
const ray = viewport.transformPointToOrthographicRay(screenPt, frame.image, startingCamera);
|
|
741
731
|
const movePt = bundle_esm.ray.intersectPlane(ray, hitPlane);
|
|
742
732
|
if (movePt != null) {
|
|
743
733
|
const delta = bundle_esm.vector3.subtract(hitPt, movePt);
|
|
@@ -751,25 +741,20 @@ class InteractionApiOrthographic extends InteractionApi {
|
|
|
751
741
|
}
|
|
752
742
|
async zoomCameraToPoint(point, delta) {
|
|
753
743
|
return this.transformCamera(({ camera, viewport, frame, depthBuffer }) => {
|
|
754
|
-
var _a;
|
|
755
744
|
if (this.orthographicZoomData == null ||
|
|
756
745
|
bundle_esm.point.distance(point, this.orthographicZoomData.startingScreenPt) > 2) {
|
|
757
746
|
const frameCam = camera.toFrameCamera();
|
|
758
|
-
const asPerspective = streamAttributes.toPerspective(frameCam);
|
|
759
|
-
const planes = streamAttributes.fromBoundingBoxAndLookAtCamera(frame.scene.boundingBox, asPerspective);
|
|
760
|
-
const perspectiveCam = new streamAttributes.FramePerspectiveCamera(asPerspective.position, asPerspective.lookAt, asPerspective.up, planes.near, planes.far, camera.aspectRatio, (_a = asPerspective.fovY) !== null && _a !== void 0 ? _a : 45);
|
|
761
747
|
const dir = frameCam.direction;
|
|
762
|
-
const ray = viewport.
|
|
748
|
+
const ray = viewport.transformPointToOrthographicRay(point, frame.image, frameCam);
|
|
763
749
|
const fallbackPlane = bundle_esm.plane.fromNormalAndCoplanarPoint(dir, frameCam.lookAt);
|
|
764
750
|
const fallbackPt = bundle_esm.ray.intersectPlane(ray, fallbackPlane);
|
|
765
751
|
if (fallbackPt == null) {
|
|
766
752
|
console.warn('Cannot determine fallback point for zoom. Ray does not intersect plane.');
|
|
767
753
|
return camera;
|
|
768
754
|
}
|
|
769
|
-
const hitPt =
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
// : fallbackPt;
|
|
755
|
+
const hitPt = depthBuffer != null
|
|
756
|
+
? this.getWorldPoint(point, depthBuffer, fallbackPt)
|
|
757
|
+
: fallbackPt;
|
|
773
758
|
const hitPlane = bundle_esm.plane.fromNormalAndCoplanarPoint(dir, hitPt);
|
|
774
759
|
this.orthographicZoomData = {
|
|
775
760
|
hitPt,
|
|
@@ -778,10 +763,11 @@ class InteractionApiOrthographic extends InteractionApi {
|
|
|
778
763
|
};
|
|
779
764
|
}
|
|
780
765
|
if (this.orthographicZoomData != null) {
|
|
781
|
-
const { hitPt } = this.orthographicZoomData;
|
|
766
|
+
const { hitPt, hitPlane } = this.orthographicZoomData;
|
|
782
767
|
const relativeDelta = 2 * (camera.fovHeight / viewport.height) * delta;
|
|
783
768
|
const fovHeight = Math.max(1, camera.fovHeight - relativeDelta);
|
|
784
|
-
const
|
|
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));
|
|
785
771
|
return camera.update({
|
|
786
772
|
lookAt: bundle_esm.vector3.add(camera.lookAt, diff),
|
|
787
773
|
fovHeight: Math.max(1, camera.fovHeight - relativeDelta),
|
|
@@ -790,6 +776,14 @@ class InteractionApiOrthographic extends InteractionApi {
|
|
|
790
776
|
return camera;
|
|
791
777
|
});
|
|
792
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
|
+
}
|
|
793
787
|
async transformCamera(t) {
|
|
794
788
|
var _a;
|
|
795
789
|
if (this.isInteracting()) {
|
|
@@ -1389,7 +1383,8 @@ class MultiTouchInteractionHandler {
|
|
|
1389
1383
|
(_b = this.interactionApi) === null || _b === void 0 ? void 0 : _b.zoomCamera(zoom);
|
|
1390
1384
|
(_c = this.interactionApi) === null || _c === void 0 ? void 0 : _c.panCameraByDelta(delta);
|
|
1391
1385
|
// Setting a minimum angle to prevent wobbling
|
|
1392
|
-
|
|
1386
|
+
console.log(Math.abs(angle));
|
|
1387
|
+
if (Math.abs(angle) > 0.4) {
|
|
1393
1388
|
(_d = this.interactionApi) === null || _d === void 0 ? void 0 : _d.twistCamera(angle);
|
|
1394
1389
|
}
|
|
1395
1390
|
}
|
|
@@ -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.
|
|
@@ -94,6 +94,9 @@ export class SceneTreeTableCell {
|
|
|
94
94
|
this.visibilityToggle && (h("button", { class: "visibility-btn no-shrink", "data-test-id": 'visibility-btn-' + ((_g = this.node) === null || _g === void 0 ? void 0 : _g.name), onPointerDown: (event) => {
|
|
95
95
|
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
96
96
|
this.toggleVisibility(event);
|
|
97
|
+
}, onTouchStart: (event) => {
|
|
98
|
+
event === null || event === void 0 ? void 0 : event.preventDefault();
|
|
99
|
+
this.toggleVisibility(event);
|
|
97
100
|
} },
|
|
98
101
|
h("div", { class: classNames('icon', {
|
|
99
102
|
'icon-visible': !((_h = this.node) === null || _h === void 0 ? void 0 : _h.partiallyVisible) && ((_j = this.node) === null || _j === void 0 ? void 0 : _j.visible),
|
|
@@ -368,4 +371,4 @@ export class SceneTreeTableCell {
|
|
|
368
371
|
}]; }
|
|
369
372
|
static get elementRef() { return "hostEl"; }
|
|
370
373
|
}
|
|
371
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
374
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmUtdHJlZS10YWJsZS1jZWxsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2NlbmUtdHJlZS10YWJsZS1jZWxsL3NjZW5lLXRyZWUtdGFibGUtY2VsbC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxPQUFPLEVBQ1AsS0FBSyxFQUVMLENBQUMsRUFDRCxJQUFJLEVBQ0osSUFBSSxHQUNMLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQztBQVlwQyxNQUFNLE9BQU8sa0JBQWtCO0VBTC9CO0lBMEJFOzs7T0FHRztJQUVJLGdCQUFXLEdBQUcsSUFBSSxDQUFDO0lBc0IxQjs7OztPQUlHO0lBRUkseUJBQW9CLEdBQUcsS0FBSyxDQUFDO0lBRXBDOzs7OztPQUtHO0lBRUksbUNBQThCLEdBQUcsS0FBSyxDQUFDO0lBMkh0QyxpQkFBWSxHQUFHLEdBQVcsRUFBRTtNQUNsQyxNQUFNLElBQUksR0FDUixJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUU7UUFDNUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXO1FBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO01BRWpCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0lBRU0sMEJBQXFCLEdBQUcsQ0FBQyxLQUFtQixFQUFRLEVBQUU7O01BQzVELElBQ0UsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCO1FBQ3ZCLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUNsQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFDMUI7UUFDQSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUksTUFBQSxJQUFJLENBQUMsSUFBSSwwQ0FBRSxRQUFRLENBQUEs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
|