@vertexvis/viewer 0.10.2-canary.7 → 0.11.0

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.
Files changed (139) hide show
  1. package/dist/cjs/{browser.esm-ae55f058.js → browser.esm-17419694.js} +25 -25
  2. package/dist/cjs/{bundle.esm-c457ad4d.js → bundle.esm-b79513ef.js} +231 -207
  3. package/dist/cjs/{constants-4277684a.js → constants-1d65ed39.js} +1 -1
  4. package/dist/cjs/{cursors-b93b43ef.js → cursors-8aaf500f.js} +1 -1
  5. package/dist/cjs/{dom-cdb50ebc.js → dom-40804039.js} +1 -1
  6. package/dist/cjs/index.cjs.js +8 -7
  7. package/dist/cjs/loader.cjs.js +1 -1
  8. package/dist/cjs/{markup-3dac4cef.js → markup-e84a143f.js} +11 -2
  9. package/dist/cjs/{measurement-b494bf55.js → measurement-4579193b.js} +2 -2
  10. package/dist/cjs/{orientation-42cc9e8d.js → orientation-09d0f3ef.js} +14 -7
  11. package/dist/cjs/{png-decoder-2add73dd.js → png-decoder-97ea96ba.js} +3 -3
  12. package/dist/cjs/{scene-23a0a330.js → scene-4397373a.js} +28524 -2446
  13. package/dist/cjs/{utils-6933381f.js → utils-414e6cfe.js} +2 -2
  14. package/dist/cjs/utils-440f0f7d.js +61 -0
  15. package/dist/cjs/vertex-scene-tree.cjs.entry.js +6 -5
  16. package/dist/cjs/vertex-viewer-dom-element_3.cjs.entry.js +4 -4
  17. package/dist/cjs/{vertex-viewer-markup-arrow_2.cjs.entry.js → vertex-viewer-markup-arrow_3.cjs.entry.js} +267 -4
  18. package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js +43 -9
  19. package/dist/cjs/vertex-viewer-markup.cjs.entry.js +25 -5
  20. package/dist/cjs/vertex-viewer-measurement-distance_2.cjs.entry.js +8 -8
  21. package/dist/cjs/vertex-viewer-measurement-tool.cjs.entry.js +5 -5
  22. package/dist/cjs/vertex-viewer-measurements.cjs.entry.js +5 -5
  23. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +3 -3
  24. package/dist/cjs/vertex-viewer.cjs.entry.js +141 -48
  25. package/dist/cjs/viewer.cjs.js +1 -1
  26. package/dist/cjs/{viewport-e69f8223.js → viewport-fc405a48.js} +31 -7
  27. package/dist/collection/collection-manifest.json +1 -0
  28. package/dist/collection/components/scene-tree/scene-tree.js +3 -2
  29. package/dist/collection/components/viewer/viewer.js +28 -3
  30. package/dist/collection/components/viewer-markup/utils.js +65 -1
  31. package/dist/collection/components/viewer-markup/viewer-markup.js +72 -16
  32. package/dist/collection/components/viewer-markup-circle/utils.js +2 -55
  33. package/dist/collection/components/viewer-markup-circle/viewer-markup-circle.js +4 -4
  34. package/dist/collection/components/viewer-markup-freeform.tsx/utils.js +10 -0
  35. package/dist/collection/components/viewer-markup-freeform.tsx/viewer-markup-freeform.css +157 -0
  36. package/dist/collection/components/viewer-markup-freeform.tsx/viewer-markup-freeform.js +413 -0
  37. package/dist/collection/components/viewer-markup-tool/viewer-markup-tool.js +63 -9
  38. package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance-components.js +1 -1
  39. package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance.js +2 -2
  40. package/dist/collection/lib/cursors.js +1 -1
  41. package/dist/collection/lib/interactions/baseInteractionHandler.js +5 -4
  42. package/dist/collection/lib/interactions/flyToPartKeyInteraction.js +1 -1
  43. package/dist/collection/lib/interactions/interactionApi.js +101 -22
  44. package/dist/collection/lib/interactions/mouseInteractions.js +17 -15
  45. package/dist/collection/lib/interactions/multiTouchInteractionHandler.js +2 -2
  46. package/dist/collection/lib/mappers.js +4 -3
  47. package/dist/collection/lib/scenes/camera.js +8 -2
  48. package/dist/collection/lib/scenes/operations.js +1 -1
  49. package/dist/collection/lib/scenes/scene.js +5 -2
  50. package/dist/collection/lib/types/frame.js +8 -2
  51. package/dist/collection/lib/types/markup.js +9 -1
  52. package/dist/collection/lib/types/stencilBuffer.js +2 -2
  53. package/dist/collection/lib/types/viewport.js +32 -8
  54. package/dist/collection/testing/fixtures.js +2 -1
  55. package/dist/esm/{browser.esm-7dbdf78a.js → browser.esm-e4fb17dc.js} +25 -25
  56. package/dist/esm/{bundle.esm-590d2273.js → bundle.esm-d891316f.js} +232 -208
  57. package/dist/esm/{constants-083f6b2c.js → constants-037e417f.js} +1 -1
  58. package/dist/esm/{cursors-39294365.js → cursors-00835249.js} +1 -1
  59. package/dist/esm/{dom-43682375.js → dom-d0877f90.js} +1 -1
  60. package/dist/esm/index.js +7 -7
  61. package/dist/esm/index.mjs +7 -7
  62. package/dist/esm/loader.js +1 -1
  63. package/dist/esm/loader.mjs +1 -1
  64. package/dist/esm/{markup-3ce3dccd.js → markup-9b29aa94.js} +11 -3
  65. package/dist/esm/{measurement-78bd27fc.js → measurement-8430d5d6.js} +2 -2
  66. package/dist/esm/{orientation-c3e2af18.js → orientation-bb34b652.js} +14 -7
  67. package/dist/esm/{png-decoder-dfb97536.js → png-decoder-c4745070.js} +3 -3
  68. package/dist/esm/{scene-30ac6229.js → scene-72760305.js} +28532 -2454
  69. package/dist/esm/utils-5fe43b8a.js +52 -0
  70. package/dist/esm/{utils-b857bd7c.js → utils-f8e0baf7.js} +2 -2
  71. package/dist/esm/vertex-scene-tree.entry.js +6 -5
  72. package/dist/esm/vertex-viewer-dom-element_3.entry.js +4 -4
  73. package/dist/esm/{vertex-viewer-markup-arrow_2.entry.js → vertex-viewer-markup-arrow_3.entry.js} +267 -5
  74. package/dist/esm/vertex-viewer-markup-tool.entry.js +43 -9
  75. package/dist/esm/vertex-viewer-markup.entry.js +25 -5
  76. package/dist/esm/vertex-viewer-measurement-distance_2.entry.js +8 -8
  77. package/dist/esm/vertex-viewer-measurement-tool.entry.js +5 -5
  78. package/dist/esm/vertex-viewer-measurements.entry.js +5 -5
  79. package/dist/esm/vertex-viewer-view-cube.entry.js +3 -3
  80. package/dist/esm/vertex-viewer.entry.js +141 -48
  81. package/dist/esm/viewer.js +1 -1
  82. package/dist/esm/{viewport-8fea0743.js → viewport-d6f5cd7b.js} +31 -7
  83. package/dist/types/components/viewer/viewer.d.ts +4 -0
  84. package/dist/types/components/viewer-markup/utils.d.ts +8 -0
  85. package/dist/types/components/viewer-markup/viewer-markup.d.ts +13 -6
  86. package/dist/types/components/viewer-markup-circle/utils.d.ts +1 -4
  87. package/dist/types/components/viewer-markup-freeform.tsx/utils.d.ts +3 -0
  88. package/dist/types/components/viewer-markup-freeform.tsx/viewer-markup-freeform.d.ts +116 -0
  89. package/dist/types/components/viewer-markup-tool/viewer-markup-tool.d.ts +13 -1
  90. package/dist/types/components.d.ts +107 -10
  91. package/dist/types/lib/interactions/interactionApi.d.ts +22 -6
  92. package/dist/types/lib/interactions/mouseInteractions.d.ts +7 -6
  93. package/dist/types/lib/scenes/camera.d.ts +5 -1
  94. package/dist/types/lib/scenes/scene.d.ts +1 -1
  95. package/dist/types/lib/types/frame.d.ts +4 -1
  96. package/dist/types/lib/types/markup.d.ts +12 -1
  97. package/dist/types/lib/types/viewport.d.ts +17 -0
  98. package/dist/viewer/index.esm.js +1 -1
  99. package/dist/viewer/p-012fb54f.js +4 -0
  100. package/dist/viewer/{p-3dc15d99.entry.js → p-117324c0.entry.js} +1 -1
  101. package/dist/viewer/{p-1ee75110.entry.js → p-1c772ec1.entry.js} +1 -1
  102. package/dist/viewer/p-1f8a238b.js +4 -0
  103. package/dist/viewer/p-21e8510d.js +4 -0
  104. package/dist/viewer/{p-e3105f9a.entry.js → p-3c2aff67.entry.js} +1 -1
  105. package/dist/viewer/p-5389e9d4.js +4 -0
  106. package/dist/viewer/p-59d075d4.js +17 -0
  107. package/dist/viewer/{p-5b078339.js → p-62c6f482.js} +1 -1
  108. package/dist/viewer/p-640cb5f8.js +18 -0
  109. package/dist/viewer/p-68aaf1f8.entry.js +4 -0
  110. package/dist/viewer/{p-05b2444e.js → p-75682963.js} +1 -1
  111. package/dist/viewer/{p-4183c421.entry.js → p-79c45c02.entry.js} +1 -1
  112. package/dist/viewer/p-835e158e.js +4 -0
  113. package/dist/viewer/p-8c255868.entry.js +4 -0
  114. package/dist/viewer/{p-f4a492e1.js → p-9faabd97.js} +1 -1
  115. package/dist/viewer/p-b122ee39.js +4 -0
  116. package/dist/viewer/p-b36b3d1a.js +4 -0
  117. package/dist/viewer/{p-7c71db57.entry.js → p-bc9e6919.entry.js} +1 -1
  118. package/dist/viewer/{p-f090a3f3.entry.js → p-c818c80e.entry.js} +1 -1
  119. package/dist/viewer/{p-e96bc9a2.js → p-d42a482c.js} +1 -1
  120. package/dist/viewer/p-f43e8cc2.entry.js +4 -0
  121. package/dist/viewer/p-f75436be.entry.js +4 -0
  122. package/dist/viewer/viewer.esm.js +1 -1
  123. package/package.json +18 -16
  124. package/readme.md +6 -6
  125. package/dist/cjs/utils-96f244e1.js +0 -104
  126. package/dist/esm/utils-a550c58f.js +0 -96
  127. package/dist/viewer/p-11bdd2c4.js +0 -4
  128. package/dist/viewer/p-14182324.entry.js +0 -4
  129. package/dist/viewer/p-2768474e.js +0 -4
  130. package/dist/viewer/p-2e11803d.js +0 -4
  131. package/dist/viewer/p-6d4ab5fc.js +0 -17
  132. package/dist/viewer/p-964642c6.js +0 -4
  133. package/dist/viewer/p-9e856d0a.entry.js +0 -4
  134. package/dist/viewer/p-a717d9ff.js +0 -4
  135. package/dist/viewer/p-a9434d8e.entry.js +0 -4
  136. package/dist/viewer/p-af806858.js +0 -4
  137. package/dist/viewer/p-b5c350a7.js +0 -4
  138. package/dist/viewer/p-d912dd24.js +0 -18
  139. package/dist/viewer/p-f6d75616.entry.js +0 -4
@@ -6,15 +6,15 @@
6
6
  Object.defineProperty(exports, '__esModule', { value: true });
7
7
 
8
8
  const index = require('./index-6b9ad5cb.js');
9
- const utils = require('./utils-6933381f.js');
10
- const bundle_esm = require('./bundle.esm-c457ad4d.js');
9
+ const utils = require('./utils-414e6cfe.js');
10
+ const bundle_esm = require('./bundle.esm-b79513ef.js');
11
11
  const index$1 = require('./index-3bc6bac0.js');
12
- const browser_esm = require('./browser.esm-ae55f058.js');
13
- const scene = require('./scene-23a0a330.js');
14
- const orientation = require('./orientation-42cc9e8d.js');
15
- const viewport = require('./viewport-e69f8223.js');
16
- const dom = require('./dom-cdb50ebc.js');
17
- const cursors = require('./cursors-b93b43ef.js');
12
+ const browser_esm = require('./browser.esm-17419694.js');
13
+ const scene = require('./scene-4397373a.js');
14
+ const orientation = require('./orientation-09d0f3ef.js');
15
+ const viewport = require('./viewport-fc405a48.js');
16
+ const dom = require('./dom-40804039.js');
17
+ const cursors = require('./cursors-8aaf500f.js');
18
18
  require('./_commonjsHelpers-537d719a.js');
19
19
 
20
20
  function isPromise(obj) {
@@ -663,13 +663,18 @@ class InteractionApi {
663
663
  var _a;
664
664
  if (this.isInteracting()) {
665
665
  const scene = this.getScene();
666
+ const viewport = this.getViewport();
667
+ const frame = this.getFrame();
668
+ const depthBuffer = await (frame === null || frame === void 0 ? void 0 : frame.depthBuffer());
666
669
  this.currentCamera =
667
- this.currentCamera != null
670
+ this.currentCamera != null && viewport != null && frame != null
668
671
  ? t({
669
672
  camera: this.currentCamera,
670
- viewport: scene.viewport(),
673
+ viewport,
671
674
  scale: scene.scale(),
672
675
  boundingBox: scene.boundingBox(),
676
+ frame,
677
+ depthBuffer,
673
678
  })
674
679
  : undefined;
675
680
  await ((_a = this.currentCamera) === null || _a === void 0 ? void 0 : _a.render());
@@ -694,6 +699,52 @@ class InteractionApi {
694
699
  return camera;
695
700
  });
696
701
  }
702
+ /**
703
+ * Moves the camera's position and look at to the given screen coordinate.
704
+ *
705
+ * If the screen coordinate intersects with an object, the camera will track
706
+ * the hit point so the mouse position is always under the mouse.
707
+ *
708
+ * If the screen coordinate doesn't intersect with an object, then ???.
709
+ *
710
+ * @param screenPt A point in screen coordinates.
711
+ */
712
+ async panCameraToScreenPoint(screenPt) {
713
+ return this.transformCamera(({ camera, frame, viewport, depthBuffer }) => {
714
+ // Capture the starting state of the pan.
715
+ if (this.panData == null) {
716
+ const startingCamera = camera.toFrameCamera();
717
+ const direction = startingCamera.direction;
718
+ const ray = viewport.transformPointToRay(screenPt, frame.image, startingCamera);
719
+ const fallbackPlane = bundle_esm.plane.fromNormalAndCoplanarPoint(direction, camera.lookAt);
720
+ const fallback = bundle_esm.ray.intersectPlane(ray, fallbackPlane);
721
+ if (fallback == null) {
722
+ console.warn('Cannot determine fallback for pan. Ray does not intersect plane.');
723
+ return camera;
724
+ }
725
+ // Create a plane for the hit point that will be used to determine the
726
+ // delta of future mouse movements to the original hit point. Fallback
727
+ // to a plane placed at the look at point, in case there's no hit.
728
+ const hitPt = depthBuffer != null
729
+ ? this.getWorldPoint(screenPt, depthBuffer, fallback)
730
+ : fallback;
731
+ const hitPlane = bundle_esm.plane.fromNormalAndCoplanarPoint(direction, hitPt);
732
+ this.panData = { hitPt, hitPlane, startingCamera };
733
+ }
734
+ if (this.panData != null) {
735
+ const { hitPt, hitPlane, startingCamera } = this.panData;
736
+ // Use a ray that originates at the screen and intersects with the hit
737
+ // plane to determine the move distance.
738
+ const ray = viewport.transformPointToRay(screenPt, frame.image, startingCamera);
739
+ const movePt = bundle_esm.ray.intersectPlane(ray, hitPlane);
740
+ if (movePt != null) {
741
+ const delta = bundle_esm.vector3.subtract(hitPt, movePt);
742
+ return camera.update(startingCamera).moveBy(delta);
743
+ }
744
+ }
745
+ return camera;
746
+ });
747
+ }
697
748
  /**
698
749
  * Performs a pan operation of the scene's camera, and requests a new image
699
750
  * for the updated scene.
@@ -701,7 +752,7 @@ class InteractionApi {
701
752
  * @param delta A position delta `{x, y}` in the 2D coordinate space of the
702
753
  * viewer.
703
754
  */
704
- async panCamera(delta) {
755
+ async panCameraByDelta(delta) {
705
756
  return this.transformCamera(({ camera, viewport }) => {
706
757
  const vv = camera.viewVector();
707
758
  const u = bundle_esm.vector3.normalize(camera.up);
@@ -741,14 +792,12 @@ class InteractionApi {
741
792
  });
742
793
  }
743
794
  async rotateCameraAtPoint(delta, point) {
744
- const frame = this.getFrame();
745
- const depthBuffer = await (frame === null || frame === void 0 ? void 0 : frame.depthBuffer());
746
- return this.transformCamera(({ camera, viewport, boundingBox }) => {
795
+ return this.transformCamera(({ camera, viewport, boundingBox, depthBuffer }) => {
747
796
  if (this.worldRotationPoint == null) {
748
797
  const worldCenter = bundle_esm.boundingBox.center(boundingBox);
749
798
  this.worldRotationPoint =
750
799
  depthBuffer != null
751
- ? this.getWorldRotationPoint(point, depthBuffer, worldCenter)
800
+ ? this.getWorldPoint(point, depthBuffer, worldCenter)
752
801
  : camera.lookAt;
753
802
  }
754
803
  const upVector = bundle_esm.vector3.normalize(camera.up);
@@ -766,8 +815,8 @@ class InteractionApi {
766
815
  const angle = Math.abs(epsilonX) + Math.abs(epsilonY);
767
816
  const updated = camera.rotateAroundAxisAtPoint(angle, this.worldRotationPoint, rotationAxis);
768
817
  return updated.update({
769
- // Scale the lookAt point to the same length as the distance to the center
770
- // of the bounding box to maintain zoom and pan behavior.
818
+ // Scale the lookAt point to the same length as the distance to the
819
+ // center of the bounding box to maintain zoom and pan behavior.
771
820
  lookAt: bundle_esm.vector3.add(bundle_esm.vector3.scale(camera.distanceToBoundingBoxCenter() /
772
821
  bundle_esm.vector3.magnitude(updated.viewVector()), updated.viewVector()), updated.position),
773
822
  });
@@ -780,21 +829,49 @@ class InteractionApi {
780
829
  * @param delta The distance to zoom. Positive values zoom in and negative
781
830
  * values zoom out.
782
831
  */
783
- async zoomCamera(delta, ray) {
832
+ async zoomCamera(delta) {
784
833
  return this.transformCamera(({ camera, viewport }) => {
785
834
  const vv = camera.viewVector();
786
835
  const v = bundle_esm.vector3.normalize(vv);
787
- const vvPlane = bundle_esm.plane.create({
788
- normal: v,
789
- });
790
- const pt = ray != null ? bundle_esm.ray.intersectPlane(ray, vvPlane) : undefined;
791
- const zv = pt != null ? bundle_esm.vector3.subtract(pt, camera.position) : vv;
792
- const direction = bundle_esm.vector3.normalize(zv);
793
- const distance = bundle_esm.vector3.magnitude(zv);
836
+ const distance = bundle_esm.vector3.magnitude(vv);
794
837
  const epsilon = (3 * distance * delta) / viewport.height;
795
- const position = bundle_esm.vector3.add(camera.position, bundle_esm.vector3.scale(epsilon, direction));
796
- const lookAt = bundle_esm.plane.projectPoint(vvPlane, position);
797
- return camera.update({ position, lookAt });
838
+ const position = bundle_esm.vector3.add(camera.position, bundle_esm.vector3.scale(epsilon, v));
839
+ const newCamera = camera.update({ position });
840
+ return newCamera;
841
+ });
842
+ }
843
+ async zoomCameraToPoint(point, delta) {
844
+ return this.transformCamera(({ camera, viewport, frame, depthBuffer }) => {
845
+ const cam = frame.scene.camera;
846
+ const dir = cam.direction;
847
+ const frameCam = camera.toFrameCamera();
848
+ const ray = viewport.transformPointToRay(point, frame.image, frameCam);
849
+ if (this.zoomData == null) {
850
+ const fallbackPlane = bundle_esm.plane.fromNormalAndCoplanarPoint(dir, cam.lookAt);
851
+ const fallbackPt = bundle_esm.ray.intersectPlane(ray, fallbackPlane);
852
+ if (fallbackPt == null) {
853
+ console.warn('Cannot determine fallback point for zoom. Ray does not intersect plane.');
854
+ return camera;
855
+ }
856
+ const hitPt = depthBuffer != null
857
+ ? this.getWorldPoint(point, depthBuffer, fallbackPt)
858
+ : fallbackPt;
859
+ const hitPlane = bundle_esm.plane.fromNormalAndCoplanarPoint(dir, hitPt);
860
+ this.zoomData = { hitPt, hitPlane };
861
+ }
862
+ if (this.zoomData != null) {
863
+ const { hitPt, hitPlane } = this.zoomData;
864
+ const distance = bundle_esm.vector3.distance(camera.position, hitPt);
865
+ const epsilon = (6 * distance * delta) / viewport.height;
866
+ const position = bundle_esm.ray.at(ray, epsilon);
867
+ const lookAt = bundle_esm.plane.projectPoint(hitPlane, position);
868
+ const newCamera = camera.update({ position, lookAt });
869
+ const newDistance = bundle_esm.vector3.distance(position, lookAt);
870
+ if (newDistance >= newCamera.near) {
871
+ return newCamera;
872
+ }
873
+ }
874
+ return camera;
798
875
  });
799
876
  }
800
877
  /**
@@ -804,6 +881,8 @@ class InteractionApi {
804
881
  if (this.isInteracting()) {
805
882
  this.currentCamera = undefined;
806
883
  this.worldRotationPoint = undefined;
884
+ this.panData = undefined;
885
+ this.zoomData = undefined;
807
886
  this.resetLastAngle();
808
887
  this.interactionFinishedEmitter.emit();
809
888
  await this.stream.endInteraction();
@@ -851,7 +930,7 @@ class InteractionApi {
851
930
  isCoarseInputDevice(isTouch) {
852
931
  return isTouch || window.matchMedia('(pointer: coarse)').matches;
853
932
  }
854
- getWorldRotationPoint(point, depthBuffer, fallbackPoint) {
933
+ getWorldPoint(point, depthBuffer, fallbackPoint) {
855
934
  const viewport = this.getViewport();
856
935
  const framePt = viewport.transformPointToFrame(point, depthBuffer);
857
936
  const hasDepth = depthBuffer.isDepthAtFarPlane(framePt);
@@ -1013,7 +1092,9 @@ class BaseInteractionHandler {
1013
1092
  else if (event.buttons === 2) {
1014
1093
  this.draggingInteraction = this.panInteraction;
1015
1094
  }
1016
- if (this.draggingInteraction != null && this.interactionApi != null) {
1095
+ if (this.draggingInteraction != null &&
1096
+ this.interactionApi != null &&
1097
+ this.element != null) {
1017
1098
  // Ensure any scroll wheel interactions have been ended prior to beginning
1018
1099
  // another interaction to prevent the interaction from being ended early.
1019
1100
  this.zoomInteraction.endDrag(event, this.interactionApi);
@@ -1047,12 +1128,11 @@ class BaseInteractionHandler {
1047
1128
  const delta = -this.wheelDeltaToPixels(event.deltaY, event.deltaMode) / 10;
1048
1129
  const rect = this.element.getBoundingClientRect();
1049
1130
  const point = dom.getMouseClientPosition(event, rect);
1050
- const ray = this.interactionApi.getRayFromPoint(point);
1051
1131
  SCROLL_WHEEL_DELTA_PERCENTAGES.forEach((percentage, index) => {
1052
1132
  window.setTimeout(() => {
1053
1133
  if (this.interactionApi != null) {
1054
1134
  const zoomDelta = delta * percentage;
1055
- this.zoomInteraction.zoomOnRay(zoomDelta, ray, this.interactionApi);
1135
+ this.zoomInteraction.zoomToPoint(point, zoomDelta, this.interactionApi);
1056
1136
  }
1057
1137
  }, index * 2);
1058
1138
  });
@@ -1185,32 +1265,34 @@ class ZoomInteraction extends MouseInteraction {
1185
1265
  }
1186
1266
  beginDrag(event, canvasPosition, api, element) {
1187
1267
  if (this.currentPosition == null) {
1188
- this.currentPosition = bundle_esm.point.create(event.screenX, event.screenY);
1189
- const rect = element === null || element === void 0 ? void 0 : element.getBoundingClientRect();
1268
+ this.currentPosition = bundle_esm.point.create(event.clientX, event.clientY);
1269
+ const rect = element.getBoundingClientRect();
1190
1270
  const point = dom.getMouseClientPosition(event, rect);
1191
- this.startRay = api.getRayFromPoint(point);
1271
+ this.startPt = point;
1192
1272
  api.beginInteraction();
1193
1273
  }
1194
1274
  }
1195
1275
  drag(event, api) {
1196
1276
  if (this.currentPosition != null) {
1197
- const position = bundle_esm.point.create(event.screenX, event.screenY);
1277
+ const position = bundle_esm.point.create(event.clientX, event.clientY);
1198
1278
  const delta = bundle_esm.point.subtract(position, this.currentPosition);
1199
- api.zoomCamera(delta.y, this.startRay);
1200
- this.currentPosition = position;
1279
+ if (this.startPt != null) {
1280
+ api.zoomCameraToPoint(this.startPt, delta.y);
1281
+ this.currentPosition = position;
1282
+ }
1201
1283
  }
1202
1284
  }
1203
1285
  endDrag(event, api) {
1204
1286
  super.endDrag(event, api);
1205
1287
  this.stopInteractionTimer();
1206
1288
  this.didTransformBegin = false;
1207
- this.startRay = undefined;
1289
+ this.startPt = undefined;
1208
1290
  }
1209
1291
  zoom(delta, api) {
1210
1292
  this.operateWithTimer(api, () => api.zoomCamera(delta));
1211
1293
  }
1212
- zoomOnRay(delta, ray, api) {
1213
- this.operateWithTimer(api, () => api.zoomCamera(delta, ray));
1294
+ zoomToPoint(pt, delta, api) {
1295
+ this.operateWithTimer(api, () => api.zoomCameraToPoint(pt, delta));
1214
1296
  }
1215
1297
  beginInteraction(api) {
1216
1298
  this.didTransformBegin = true;
@@ -1249,17 +1331,17 @@ class PanInteraction extends MouseInteraction {
1249
1331
  super(...arguments);
1250
1332
  this.type = 'pan';
1251
1333
  }
1252
- beginDrag(event, canvasPosition, api) {
1334
+ beginDrag(event, canvasPosition, api, element) {
1253
1335
  if (this.currentPosition == null) {
1254
1336
  this.currentPosition = bundle_esm.point.create(event.screenX, event.screenY);
1337
+ this.canvasRect = element.getBoundingClientRect();
1255
1338
  api.beginInteraction();
1256
1339
  }
1257
1340
  }
1258
1341
  drag(event, api) {
1259
- if (this.currentPosition != null) {
1260
- const position = bundle_esm.point.create(event.screenX, event.screenY);
1261
- const delta = bundle_esm.point.subtract(position, this.currentPosition);
1262
- api.panCamera(delta);
1342
+ if (this.currentPosition != null && this.canvasRect != null) {
1343
+ const position = dom.getMouseClientPosition(event, this.canvasRect);
1344
+ api.panCameraToScreenPoint(position);
1263
1345
  this.currentPosition = position;
1264
1346
  }
1265
1347
  }
@@ -1311,7 +1393,7 @@ class MultiTouchInteractionHandler {
1311
1393
  const angle = bundle_esm.angle.toDegrees(Math.atan2(bundle_esm.matrix2.determinant(previousToCurrent), bundle_esm.matrix2.dot(previousToCurrent)));
1312
1394
  (_a = this.interactionApi) === null || _a === void 0 ? void 0 : _a.beginInteraction();
1313
1395
  (_b = this.interactionApi) === null || _b === void 0 ? void 0 : _b.zoomCamera(zoom);
1314
- (_c = this.interactionApi) === null || _c === void 0 ? void 0 : _c.panCamera(delta);
1396
+ (_c = this.interactionApi) === null || _c === void 0 ? void 0 : _c.panCameraByDelta(delta);
1315
1397
  (_d = this.interactionApi) === null || _d === void 0 ? void 0 : _d.twistCamera(angle);
1316
1398
  }
1317
1399
  this.currentPosition1 = point1;
@@ -2064,6 +2146,7 @@ const Viewer = class {
2064
2146
  this.tokenExpired = index.createEvent(this, "tokenExpired", 7);
2065
2147
  this.connectionChange = index.createEvent(this, "connectionChange", 7);
2066
2148
  this.sceneReady = index.createEvent(this, "sceneReady", 7);
2149
+ this.sceneChanged = index.createEvent(this, "sceneChanged", 7);
2067
2150
  this.interactionStarted = index.createEvent(this, "interactionStarted", 7);
2068
2151
  this.interactionFinished = index.createEvent(this, "interactionFinished", 7);
2069
2152
  this.sessionidchange = index.createEvent(this, "sessionidchange", 7);
@@ -2465,6 +2548,12 @@ const Viewer = class {
2465
2548
  this.urn = undefined;
2466
2549
  this.stateMap.streamWorldOrientation = undefined;
2467
2550
  }
2551
+ if (this.canvasElement != null) {
2552
+ const context = this.canvasElement.getContext('2d');
2553
+ if (context != null) {
2554
+ context.clearRect(0, 0, this.canvasElement.width, this.canvasElement.height);
2555
+ }
2556
+ }
2468
2557
  }
2469
2558
  /**
2470
2559
  * Returns an object that is used to perform operations on the `Scene` that's
@@ -2527,7 +2616,8 @@ const Viewer = class {
2527
2616
  this.streamId = streamId.hex;
2528
2617
  }
2529
2618
  // Need to parse world orientation.
2530
- this.stateMap.streamWorldOrientation = orientation.mapWorldOrientationOrThrow(worldOrientation);
2619
+ this.stateMap.streamWorldOrientation =
2620
+ orientation.mapWorldOrientationOrThrow(worldOrientation);
2531
2621
  console.debug(`Stream connected [stream-id=${this.streamId}, scene-view-id=${this.sceneViewId}]`);
2532
2622
  await this.waitNextDrawnFrame(15 * 1000);
2533
2623
  this.sceneReady.emit();
@@ -2688,6 +2778,9 @@ const Viewer = class {
2688
2778
  viewport: viewport.Viewport.fromDimensions(this.getCanvasDimensions() || bundle_esm.dimensions.create(0, 0)),
2689
2779
  };
2690
2780
  this.frameReceived.emit(this.frame);
2781
+ if (this.frame.scene.hasChanged) {
2782
+ this.sceneChanged.emit();
2783
+ }
2691
2784
  const drawnFrame = await this.canvasRenderer(data);
2692
2785
  this.dispatchFrameDrawn(drawnFrame);
2693
2786
  }
@@ -68,5 +68,5 @@ const patchDynamicImport = (base, orgScriptElm) => {
68
68
  };
69
69
 
70
70
  patchBrowser().then(options => {
71
- 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],"metadataKeys":[16],"isComputingRowHeight":[32],"rows":[32],"totalRows":[32],"scrollTop":[32],"computedRowHeight":[32],"stateMap":[32],"connectionErrorDetails":[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-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-markup.cjs",[[1,"vertex-viewer-markup",{"arrowTemplateId":[1,"arrow-template-id"],"circleTemplateId":[1,"circle-template-id"],"tool":[1],"disabled":[4],"viewer":[16],"selectedMarkupId":[1025,"selected-markup-id"],"addMarkup":[64],"removeMarkup":[64],"getMarkupElements":[64],"getMarkupElement":[64]},[[0,"markupEnd","handleMarkupEnd"],[0,"markupEditCancel","handleMarkupEditCancel"],[1,"pointerdown","handleMarkupPointerDown"]]]]],["vertex-viewer-markup-tool.cjs",[[1,"vertex-viewer-markup-tool",{"arrowTemplateId":[1,"arrow-template-id"],"circleTemplateId":[1,"circle-template-id"],"tool":[1],"disabled":[4],"viewer":[16],"stateMap":[32]}]]],["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"],"addMeasurement":[64],"removeMeasurement":[64],"getMeasurementElement":[64],"getMeasurementElements":[64]},[[0,"measureEnd","handleMeasureEnd"],[1,"pointerdown","handleMeasurementPointerDown"]]]]],["vertex-scene-tree-row.cjs",[[1,"vertex-scene-tree-row",{"node":[16],"tree":[16],"interactionsDisabled":[4,"interactions-disabled"],"recurseParentSelectionDisabled":[4,"recurse-parent-selection-disabled"]}]]],["vertex-scene-tree-toolbar-group.cjs",[[1,"vertex-scene-tree-toolbar-group"]]],["vertex-viewer.cjs",[[1,"vertex-viewer",{"src":[1],"clientId":[1,"client-id"],"sessionId":[1,"session-id"],"config":[1],"configEnv":[1,"config-env"],"resolvedConfig":[1040],"cameraControls":[4,"camera-controls"],"keyboardControls":[4,"keyboard-controls"],"rotateAroundTapPoint":[4,"rotate-around-tap-point"],"depthBuffers":[1,"depth-buffers"],"experimentalGhostingOpacity":[2,"experimental-ghosting-opacity"],"featureLines":[16],"selectionMaterial":[1,"selection-material"],"frame":[1040],"streamAttributes":[1040],"stream":[1040],"stencilBuffer":[1040],"dimensions":[32],"hostDimensions":[32],"errorMessage":[32],"cursor":[32],"stateMap":[32],"registerCommand":[64],"dispatchFrameDrawn":[64],"registerInteractionHandler":[64],"registerTapKeyInteraction":[64],"getInteractionTarget":[64],"addCursor":[64],"getInteractionHandlers":[64],"getBaseInteractionHandler":[64],"getJwt":[64],"load":[64],"unload":[64],"scene":[64],"isSceneReady":[64],"handleWebSocketClose":[64]},[[0,"tap","handleTapEvent"]]]]],["vertex-scene-tree-search_2.cjs",[[1,"vertex-scene-tree-search",{"debounce":[2],"disabled":[4],"placeholder":[1],"value":[1025],"focused":[32],"setFocus":[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_2.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]}]]],["vertex-viewer-measurement-distance_2.cjs",[[1,"vertex-viewer-measurement-distance",{"start":[1040],"startJson":[1,"start"],"end":[1040],"endJson":[1,"end"],"distance":[1026],"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],"depthBuffer":[16],"viewer":[16],"line":[32],"viewport":[32],"elementBounds":[32],"interactionCount":[32],"internalCamera":[32],"internalDepthBuffer":[32],"invalidateStateCounter":[32],"interactiveStartPoint":[32],"interactiveEndPoint":[32],"stateMap":[32],"computeElementMetrics":[64]}],[1,"vertex-viewer-measurement-line",{"start":[16],"end":[16],"capLength":[2,"cap-length"],"pointerEvents":[1,"pointer-events"]}]]]], options);
71
+ 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],"metadataKeys":[16],"isComputingRowHeight":[32],"rows":[32],"totalRows":[32],"scrollTop":[32],"computedRowHeight":[32],"stateMap":[32],"connectionErrorDetails":[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-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"],"addMarkup":[64],"removeMarkup":[64],"getMarkupElements":[64],"getMarkupElement":[64]},[[0,"markupEnd","handleMarkupEnd"],[0,"markupEditCancel","handleMarkupEditCancel"],[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]}]]],["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-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-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"],"addMeasurement":[64],"removeMeasurement":[64],"getMeasurementElement":[64],"getMeasurementElements":[64]},[[0,"measureEnd","handleMeasureEnd"],[1,"pointerdown","handleMeasurementPointerDown"]]]]],["vertex-scene-tree-row.cjs",[[1,"vertex-scene-tree-row",{"node":[16],"tree":[16],"interactionsDisabled":[4,"interactions-disabled"],"recurseParentSelectionDisabled":[4,"recurse-parent-selection-disabled"]}]]],["vertex-scene-tree-toolbar-group.cjs",[[1,"vertex-scene-tree-toolbar-group"]]],["vertex-viewer.cjs",[[1,"vertex-viewer",{"src":[1],"clientId":[1,"client-id"],"sessionId":[1,"session-id"],"config":[1],"configEnv":[1,"config-env"],"resolvedConfig":[1040],"cameraControls":[4,"camera-controls"],"keyboardControls":[4,"keyboard-controls"],"rotateAroundTapPoint":[4,"rotate-around-tap-point"],"depthBuffers":[1,"depth-buffers"],"experimentalGhostingOpacity":[2,"experimental-ghosting-opacity"],"featureLines":[16],"selectionMaterial":[1,"selection-material"],"frame":[1040],"streamAttributes":[1040],"stream":[1040],"stencilBuffer":[1040],"dimensions":[32],"hostDimensions":[32],"errorMessage":[32],"cursor":[32],"stateMap":[32],"registerCommand":[64],"dispatchFrameDrawn":[64],"registerInteractionHandler":[64],"registerTapKeyInteraction":[64],"getInteractionTarget":[64],"addCursor":[64],"getInteractionHandlers":[64],"getBaseInteractionHandler":[64],"getJwt":[64],"load":[64],"unload":[64],"scene":[64],"isSceneReady":[64],"handleWebSocketClose":[64]},[[0,"tap","handleTapEvent"]]]]],["vertex-scene-tree-search_2.cjs",[[1,"vertex-scene-tree-search",{"debounce":[2],"disabled":[4],"placeholder":[1],"value":[1025],"focused":[32],"setFocus":[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-measurement-distance_2.cjs",[[1,"vertex-viewer-measurement-distance",{"start":[1040],"startJson":[1,"start"],"end":[1040],"endJson":[1,"end"],"distance":[1026],"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],"depthBuffer":[16],"viewer":[16],"line":[32],"viewport":[32],"elementBounds":[32],"interactionCount":[32],"internalCamera":[32],"internalDepthBuffer":[32],"invalidateStateCounter":[32],"interactiveStartPoint":[32],"interactiveEndPoint":[32],"stateMap":[32],"computeElementMetrics":[64]}],[1,"vertex-viewer-measurement-line",{"start":[16],"end":[16],"capLength":[2,"cap-length"],"pointerEvents":[1,"pointer-events"]}]]],["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]}]]]], options);
72
72
  });
@@ -3,7 +3,7 @@
3
3
  */
4
4
  'use strict';
5
5
 
6
- const bundle_esm = require('./bundle.esm-c457ad4d.js');
6
+ const bundle_esm = require('./bundle.esm-b79513ef.js');
7
7
 
8
8
  /**
9
9
  * A `Viewport` represents the drawing area in the viewer.
@@ -104,12 +104,36 @@ class Viewport {
104
104
  * @returns
105
105
  */
106
106
  transformPointToRay(pt, image, camera) {
107
- const { position, lookAt, up, aspectRatio, fovY } = camera;
108
- const framePt = this.transformPointToFrame(pt, image);
109
- const m = bundle_esm.matrix4.position(bundle_esm.matrix4.makeLookAt(position, lookAt, up), bundle_esm.matrix4.makeIdentity());
110
- const normal = bundle_esm.vector3.normalize(bundle_esm.vector3.create((framePt.x / image.frameDimensions.width - 0.5) * aspectRatio, -(framePt.y / image.frameDimensions.height) + 0.5, -0.5 / Math.tan(bundle_esm.angle.toRadians(fovY / 2.0))));
111
- const direction = bundle_esm.vector3.normalize(bundle_esm.vector3.transformMatrix(normal, m));
112
- return bundle_esm.ray.create({ origin: position, direction });
107
+ const ndc = this.transformScreenPointToNdc(pt, image);
108
+ const origin = bundle_esm.vector3.fromMatrixPosition(camera.worldMatrix);
109
+ const world = bundle_esm.vector3.transformNdcToWorldSpace(bundle_esm.vector3.create(ndc.x, ndc.y, 0.5), camera.worldMatrix, camera.projectionMatrixInverse);
110
+ const direction = bundle_esm.vector3.normalize(bundle_esm.vector3.subtract(world, origin));
111
+ return bundle_esm.ray.create({ origin, direction });
112
+ }
113
+ /**
114
+ * Maps a screen point to normalized device coordinates (NDC). A screen point
115
+ * at 0,0 represents the top-left of the viewport.
116
+ *
117
+ * @param screenPt A screen point.
118
+ */
119
+ transformScreenPointToNdc(screenPt, image) {
120
+ const framePt = this.transformPointToFrame(screenPt, image);
121
+ return bundle_esm.point.create((framePt.x / image.frameDimensions.width) * 2 - 1, -(framePt.y / image.frameDimensions.height) * 2 + 1);
122
+ }
123
+ /**
124
+ * Maps a point in screen space to a world point that is coplanar with the
125
+ * camera's near plane.
126
+ *
127
+ * @param screenPt The screen point to transform.
128
+ * @param image An image of frame.
129
+ * @param camera The camera used to map a 2D point to 3D point.
130
+ * @returns A point on the screen in world space.
131
+ */
132
+ transformPointToScreenWorld(screenPt, image, camera) {
133
+ const { direction, near } = camera;
134
+ const ray = this.transformPointToRay(screenPt, image, camera);
135
+ const screen = bundle_esm.plane.create({ normal: direction, constant: near });
136
+ return bundle_esm.ray.intersectPlane(ray, screen);
113
137
  }
114
138
  /**
115
139
  * Computes a rectangle that is scaled correctly to be drawn within the
@@ -9,6 +9,7 @@
9
9
  "./components/viewer-markup-tool/viewer-markup-tool.js",
10
10
  "./components/viewer-markup-arrow/viewer-markup-arrow.js",
11
11
  "./components/viewer-markup-circle/viewer-markup-circle.js",
12
+ "./components/viewer-markup-freeform.tsx/viewer-markup-freeform.js",
12
13
  "./components/viewer-measurement-distance/viewer-measurement-distance.js",
13
14
  "./components/viewer-measurement-tool/viewer-measurement-tool.js",
14
15
  "./components/scene-tree-row/scene-tree-row.js",
@@ -416,7 +416,8 @@ export class SceneTree {
416
416
  (_a = this.stateMap.viewerDisposable) === null || _a === void 0 ? void 0 : _a.dispose();
417
417
  }
418
418
  if (newViewer != null) {
419
- this.stateMap.viewerDisposable = (_b = this.controller) === null || _b === void 0 ? void 0 : _b.connectToViewer(newViewer);
419
+ this.stateMap.viewerDisposable =
420
+ (_b = this.controller) === null || _b === void 0 ? void 0 : _b.connectToViewer(newViewer);
420
421
  }
421
422
  }
422
423
  /**
@@ -1420,4 +1421,4 @@ export class SceneTree {
1420
1421
  "passive": false
1421
1422
  }]; }
1422
1423
  }
1423
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmUtdHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NjZW5lLXRyZWUvc2NlbmUtdHJlZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUNMLFNBQVMsRUFDVCxPQUFPLEVBQ1AsS0FBSyxFQUVMLFdBQVcsRUFDWCxDQUFDLEVBQ0QsSUFBSSxFQUNKLE1BQU0sRUFDTixNQUFNLEVBQ04sSUFBSSxFQUNKLEtBQUssRUFDTCxLQUFLLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFHN0csT0FBTyxFQUFFLFdBQVcsRUFBa0IsTUFBTSxXQUFXLENBQUM7QUFDeEQsT0FBTyxFQUVMLG1CQUFtQixHQUVwQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBVSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV2RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLDBCQUEwQixFQUMxQixXQUFXLEdBQ1osTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUNMLFlBQVksRUFDWixRQUFRLEVBQ1IsVUFBVSxFQUVWLFFBQVEsR0FDVCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFDTCw0QkFBNEIsR0FFN0IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUtoRTs7OztHQUlHO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUE0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QztLQUNyRDtFQUNILENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FDRiJ9
1424
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmUtdHJlZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NjZW5lLXRyZWUvc2NlbmUtdHJlZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUNMLFNBQVMsRUFDVCxPQUFPLEVBQ1AsS0FBSyxFQUVMLFdBQVcsRUFDWCxDQUFDLEVBQ0QsSUFBSSxFQUNKLE1BQU0sRUFDTixNQUFNLEVBQ04sSUFBSSxFQUNKLEtBQUssRUFDTCxLQUFLLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFHN0csT0FBTyxFQUFFLFdBQVcsRUFBa0IsTUFBTSxXQUFXLENBQUM7QUFDeEQsT0FBTyxFQUVMLG1CQUFtQixHQUVwQixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBVSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUV2RCxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLDBCQUEwQixFQUMxQixXQUFXLEdBQ1osTUFBTSxXQUFXLENBQUM7QUFDbkIsT0FBTyxFQUNMLFlBQVksRUFDWixRQUFRLEVBQ1IsVUFBVSxFQUVWLFFBQVEsR0FDVCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdEQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2pELE9BQU8sRUFDTCw0QkFBNEIsR0FFN0IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUtoRTs7OztHQUlHO0FBQ0gsTUFBTSx3QkFBd0IsR0FBRyxFQUFFLENBQUM7QUE0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QUM7S0FDckQ7RUFDSCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBQ0YifQ==