@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.
Files changed (177) hide show
  1. package/dist/cjs/{browser.esm-31b03292.js → browser.esm-075810bf.js} +1 -1
  2. package/dist/cjs/{bundle.esm-dc0a8361.js → bundle.esm-618a5fe9.js} +80 -28
  3. package/dist/cjs/{config-90ee43d5.js → config-fb124bac.js} +2 -2
  4. package/dist/cjs/{cursors-ad2fd395.js → cursors-d71f6a74.js} +1 -1
  5. package/dist/cjs/{dom-dd265f48.js → dom-57ef84e9.js} +1 -1
  6. package/dist/cjs/{entities-aa59890e.js → entities-90f1347a.js} +3 -3
  7. package/dist/cjs/index.cjs.js +14 -12
  8. package/dist/cjs/loader.cjs.js +1 -1
  9. package/dist/cjs/{mapper-f6e6cafe.js → mapper-80ee2957.js} +2 -2
  10. package/dist/cjs/{markup-fb1553b1.js → markup-7f7de5f2.js} +2 -2
  11. package/dist/cjs/{measurement-aba1e0e8.js → measurement-f1ae9248.js} +2 -2
  12. package/dist/cjs/{model-4ec0c36e.js → model-55abd9ab.js} +1 -1
  13. package/dist/cjs/{overlays-40c6cbc7.js → overlays-68e8eff2.js} +2 -2
  14. package/dist/cjs/{png-decoder-27d25eed.js → png-decoder-076131d8.js} +1 -1
  15. package/dist/cjs/{results-bc325974.js → results-e9496869.js} +1 -1
  16. package/dist/cjs/{scene-d420fd26.js → scene-92728420.js} +188 -90
  17. package/dist/cjs/{streamAttributes-d6236448.js → streamAttributes-81eb52f2.js} +1508 -43
  18. package/dist/cjs/{utils-545b1865.js → utils-463cd52e.js} +1 -1
  19. package/dist/cjs/{utils-f80be307.js → utils-6397efca.js} +1 -1
  20. package/dist/cjs/vertex-scene-tree-search_3.cjs.entry.js +1 -1
  21. package/dist/cjs/vertex-scene-tree-table-cell.cjs.entry.js +1 -1
  22. package/dist/cjs/vertex-scene-tree.cjs.entry.js +4 -4
  23. package/dist/cjs/vertex-viewer-dom-element_3.cjs.entry.js +8 -7
  24. package/dist/cjs/vertex-viewer-markup-arrow_3.cjs.entry.js +3 -3
  25. package/dist/cjs/vertex-viewer-markup-tool.cjs.entry.js +4 -4
  26. package/dist/cjs/vertex-viewer-markup.cjs.entry.js +4 -4
  27. package/dist/cjs/vertex-viewer-measurement-details.cjs.entry.js +3 -3
  28. package/dist/cjs/vertex-viewer-measurement-distance.cjs.entry.js +20 -15
  29. package/dist/cjs/vertex-viewer-measurement-line_2.cjs.entry.js +6 -6
  30. package/dist/cjs/vertex-viewer-measurement-precise.cjs.entry.js +10 -10
  31. package/dist/cjs/vertex-viewer-measurement-tool.cjs.entry.js +5 -5
  32. package/dist/cjs/vertex-viewer-measurements.cjs.entry.js +8 -8
  33. package/dist/cjs/vertex-viewer-view-cube.cjs.entry.js +3 -3
  34. package/dist/cjs/vertex-viewer.cjs.entry.js +287 -80
  35. package/dist/cjs/viewer.cjs.js +1 -1
  36. package/dist/cjs/{viewport-8c39089f.js → viewport-54b1389d.js} +34 -2
  37. package/dist/collection/components/scene-tree-table-cell/scene-tree-table-cell.css +1 -1
  38. package/dist/collection/components/viewer/viewer.js +68 -4
  39. package/dist/collection/components/viewer-dom-renderer/renderer2d.js +1 -1
  40. package/dist/collection/components/viewer-dom-renderer/renderer3d.js +4 -2
  41. package/dist/collection/components/viewer-dom-renderer/viewer-dom-renderer.js +5 -6
  42. package/dist/collection/components/viewer-measurement-distance/hitTest.js +9 -4
  43. package/dist/collection/components/viewer-measurement-distance/viewer-measurement-distance.js +5 -5
  44. package/dist/collection/components/viewer-measurement-overlays/viewer-measurement-overlays.js +3 -3
  45. package/dist/collection/index.js +2 -2
  46. package/dist/collection/lib/errors.js +8 -1
  47. package/dist/collection/lib/interactions/index.js +3 -1
  48. package/dist/collection/lib/interactions/interactionApi.js +4 -25
  49. package/dist/collection/lib/interactions/interactionApiOrthographic.js +136 -0
  50. package/dist/collection/lib/interactions/interactionApiPerspective.js +51 -0
  51. package/dist/collection/lib/interactions/multiTouchInteractionHandler.js +3 -2
  52. package/dist/collection/lib/mappers/frameStreaming.js +27 -5
  53. package/dist/collection/lib/rendering/matrices.js +13 -4
  54. package/dist/collection/lib/rendering/vectors.js +7 -0
  55. package/dist/collection/lib/scenes/__mocks__/mocks.js +2 -2
  56. package/dist/collection/lib/scenes/camera.js +163 -83
  57. package/dist/collection/lib/scenes/mapper.js +3 -2
  58. package/dist/collection/lib/scenes/scene.js +22 -9
  59. package/dist/collection/lib/types/clippingPlanes.js +48 -20
  60. package/dist/collection/lib/types/depthBuffer.js +32 -3
  61. package/dist/collection/lib/types/frame.js +133 -24
  62. package/dist/collection/lib/types/frameCamera.js +87 -6
  63. package/dist/collection/lib/types/viewport.js +34 -2
  64. package/dist/collection/testing/fixtures.js +28 -15
  65. package/dist/collection/testing/viewer.js +5 -3
  66. package/dist/custom-elements/index.js +2135 -283
  67. package/dist/esm/{browser.esm-59e914f6.js → browser.esm-e72d80ad.js} +1 -1
  68. package/dist/esm/{bundle.esm-d899b2d5.js → bundle.esm-8ceccb91.js} +80 -29
  69. package/dist/esm/{config-604c644e.js → config-fb7cd8ff.js} +2 -2
  70. package/dist/esm/{cursors-a7ec4adb.js → cursors-fc2deed7.js} +1 -1
  71. package/dist/esm/{dom-780d25be.js → dom-2cd18856.js} +1 -1
  72. package/dist/esm/{entities-759d97cd.js → entities-78557270.js} +3 -3
  73. package/dist/esm/index.js +12 -12
  74. package/dist/esm/index.mjs +12 -12
  75. package/dist/esm/loader.js +1 -1
  76. package/dist/esm/loader.mjs +1 -1
  77. package/dist/esm/{mapper-4b815e31.js → mapper-da36de17.js} +2 -2
  78. package/dist/esm/{markup-1d177b4a.js → markup-c313d99c.js} +2 -2
  79. package/dist/esm/{measurement-12cdbf5c.js → measurement-544b69d5.js} +2 -2
  80. package/dist/esm/{model-e5a4f00f.js → model-2a34b443.js} +1 -1
  81. package/dist/esm/{overlays-1919b192.js → overlays-354e275c.js} +2 -2
  82. package/dist/esm/{png-decoder-3f1fa486.js → png-decoder-07de80d1.js} +1 -1
  83. package/dist/esm/{results-994bdb50.js → results-4d0c3568.js} +1 -1
  84. package/dist/esm/{scene-2c2460d5.js → scene-2bfcce74.js} +188 -90
  85. package/dist/esm/{streamAttributes-d623bb60.js → streamAttributes-d0b384b3.js} +1502 -44
  86. package/dist/esm/{utils-83a19677.js → utils-3ea0acdd.js} +1 -1
  87. package/dist/esm/{utils-5e57bf24.js → utils-e0941c61.js} +1 -1
  88. package/dist/esm/vertex-scene-tree-search_3.entry.js +1 -1
  89. package/dist/esm/vertex-scene-tree-table-cell.entry.js +1 -1
  90. package/dist/esm/vertex-scene-tree.entry.js +4 -4
  91. package/dist/esm/vertex-viewer-dom-element_3.entry.js +8 -7
  92. package/dist/esm/vertex-viewer-markup-arrow_3.entry.js +3 -3
  93. package/dist/esm/vertex-viewer-markup-tool.entry.js +4 -4
  94. package/dist/esm/vertex-viewer-markup.entry.js +4 -4
  95. package/dist/esm/vertex-viewer-measurement-details.entry.js +3 -3
  96. package/dist/esm/vertex-viewer-measurement-distance.entry.js +20 -15
  97. package/dist/esm/vertex-viewer-measurement-line_2.entry.js +6 -6
  98. package/dist/esm/vertex-viewer-measurement-precise.entry.js +10 -10
  99. package/dist/esm/vertex-viewer-measurement-tool.entry.js +5 -5
  100. package/dist/esm/vertex-viewer-measurements.entry.js +8 -8
  101. package/dist/esm/vertex-viewer-view-cube.entry.js +3 -3
  102. package/dist/esm/vertex-viewer.entry.js +287 -80
  103. package/dist/esm/viewer.js +1 -1
  104. package/dist/esm/{viewport-01c886ea.js → viewport-5cc7b128.js} +34 -2
  105. package/dist/types/components/scene-tree-table-cell/scene-tree-table-cell.d.ts +1 -1
  106. package/dist/types/components/viewer/viewer.d.ts +8 -0
  107. package/dist/types/components/viewer-dom-renderer/renderer2d.d.ts +2 -2
  108. package/dist/types/components/viewer-dom-renderer/renderer3d.d.ts +3 -3
  109. package/dist/types/components/viewer-dom-renderer/viewer-dom-renderer.d.ts +2 -2
  110. package/dist/types/components/viewer-measurement-distance/hitTest.d.ts +3 -2
  111. package/dist/types/components/viewer-measurement-distance/utils.d.ts +2 -2
  112. package/dist/types/components/viewer-measurement-distance/viewer-measurement-distance.d.ts +2 -2
  113. package/dist/types/components/viewer-measurement-overlays/viewer-measurement-overlays-components.d.ts +2 -2
  114. package/dist/types/components/viewer-measurement-overlays/viewer-measurement-overlays.d.ts +2 -2
  115. package/dist/types/components.d.ts +15 -7
  116. package/dist/types/index.d.ts +1 -1
  117. package/dist/types/lib/errors.d.ts +3 -0
  118. package/dist/types/lib/interactions/index.d.ts +2 -0
  119. package/dist/types/lib/interactions/interactionApi.d.ts +34 -26
  120. package/dist/types/lib/interactions/interactionApiOrthographic.d.ts +35 -0
  121. package/dist/types/lib/interactions/interactionApiPerspective.d.ts +21 -0
  122. package/dist/types/lib/mappers/frameStreaming.d.ts +2 -0
  123. package/dist/types/lib/rendering/vectors.d.ts +2 -0
  124. package/dist/types/lib/scenes/__mocks__/mocks.d.ts +2 -2
  125. package/dist/types/lib/scenes/camera.d.ts +101 -38
  126. package/dist/types/lib/scenes/scene.d.ts +1 -1
  127. package/dist/types/lib/types/clippingPlanes.d.ts +3 -1
  128. package/dist/types/lib/types/depthBuffer.d.ts +28 -6
  129. package/dist/types/lib/types/frame.d.ts +80 -11
  130. package/dist/types/lib/types/frameCamera.d.ts +22 -3
  131. package/dist/types/lib/types/viewport.d.ts +24 -4
  132. package/dist/types/testing/fixtures.d.ts +8 -5
  133. package/dist/viewer/index.esm.js +1 -1
  134. package/dist/viewer/{p-f8d01b8a.entry.js → p-0a189e62.entry.js} +1 -1
  135. package/dist/viewer/{p-e07377fa.entry.js → p-1ca95f9a.entry.js} +1 -1
  136. package/dist/viewer/{p-d00e9203.js → p-3561d910.js} +1 -1
  137. package/dist/viewer/p-388a43f7.js +4 -0
  138. package/dist/viewer/{p-3810c24d.js → p-3f0f83ad.js} +1 -1
  139. package/dist/viewer/{p-8decee06.entry.js → p-41028d3b.entry.js} +1 -1
  140. package/dist/viewer/{p-439220c6.js → p-487e054a.js} +1 -1
  141. package/dist/viewer/p-49d36e94.entry.js +4 -0
  142. package/dist/viewer/{p-da2f4a56.js → p-5b342e97.js} +1 -1
  143. package/dist/viewer/p-661f0612.js +18 -0
  144. package/dist/viewer/{p-364ce21c.js → p-69058178.js} +1 -1
  145. package/dist/viewer/{p-353cfc7a.entry.js → p-73a5eacc.entry.js} +1 -1
  146. package/dist/viewer/p-77be081a.js +4 -0
  147. package/dist/viewer/{p-a0df0e0c.js → p-809d09d9.js} +1 -1
  148. package/dist/viewer/{p-d90f2f6d.entry.js → p-858bd2c7.entry.js} +1 -1
  149. package/dist/viewer/{p-25eaab00.entry.js → p-89b66838.entry.js} +1 -1
  150. package/dist/viewer/p-a93a63a9.js +4 -0
  151. package/dist/viewer/{p-df292b56.entry.js → p-b043b076.entry.js} +1 -1
  152. package/dist/viewer/{p-915d95ad.entry.js → p-b0ac6b3c.entry.js} +1 -1
  153. package/dist/viewer/{p-fec1a8d0.entry.js → p-b7624ff2.entry.js} +1 -1
  154. package/dist/viewer/{p-f7cb7e59.js → p-b8774c9c.js} +1 -1
  155. package/dist/viewer/{p-67446e35.js → p-bcb66f97.js} +1 -1
  156. package/dist/viewer/p-bcde5521.entry.js +4 -0
  157. package/dist/viewer/{p-7cad9bf4.js → p-d1584404.js} +1 -1
  158. package/dist/viewer/p-d32b54cb.js +4 -0
  159. package/dist/viewer/{p-f755af5a.entry.js → p-d3a20af4.entry.js} +1 -1
  160. package/dist/viewer/{p-c62cb926.entry.js → p-d9f99f4d.entry.js} +1 -1
  161. package/dist/viewer/p-e38458da.js +4 -0
  162. package/dist/viewer/{p-301660cf.js → p-e75bba97.js} +2 -2
  163. package/dist/viewer/{p-6e80f8b0.entry.js → p-ebd55df7.entry.js} +1 -1
  164. package/dist/viewer/{p-671c113c.entry.js → p-f0411993.entry.js} +1 -1
  165. package/dist/viewer/{p-2cefb1b0.js → p-fa9a0bed.js} +1 -1
  166. package/dist/viewer/p-ffdeb08c.js +4 -0
  167. package/dist/viewer/viewer.esm.js +1 -1
  168. package/package.json +8 -8
  169. package/dist/viewer/p-081e6873.js +0 -4
  170. package/dist/viewer/p-085e908a.js +0 -4
  171. package/dist/viewer/p-0aba71fd.js +0 -18
  172. package/dist/viewer/p-3f6ac74f.js +0 -4
  173. package/dist/viewer/p-423410be.js +0 -4
  174. package/dist/viewer/p-432267bc.entry.js +0 -4
  175. package/dist/viewer/p-4985fad5.js +0 -4
  176. package/dist/viewer/p-e2297df2.entry.js +0 -4
  177. package/dist/viewer/p-fe11d694.js +0 -4
@@ -1,7 +1,7 @@
1
1
  import { Point, Ray } from '@vertexvis/geometry';
2
2
  import { Vector3 } from '@vertexvis/geometry';
3
3
  import type { DecodedPng } from 'fast-png';
4
- import { FrameImageLike, FramePerspectiveCamera, ImageAttributesLike } from './frame';
4
+ import { FrameCameraWithMatrices, FrameImageLike, ImageAttributesLike } from './frame';
5
5
  import { Viewport } from './viewport';
6
6
  /**
7
7
  * A `DepthBuffer` represents the depth information for a rendered frame. This
@@ -13,7 +13,7 @@ import { Viewport } from './viewport';
13
13
  * a relative distance between the camera's near and far planes.
14
14
  */
15
15
  export declare class DepthBuffer implements FrameImageLike {
16
- readonly camera: FramePerspectiveCamera;
16
+ readonly camera: FrameCameraWithMatrices;
17
17
  readonly imageAttr: ImageAttributesLike;
18
18
  readonly pixels: Uint16Array;
19
19
  /**
@@ -28,7 +28,7 @@ export declare class DepthBuffer implements FrameImageLike {
28
28
  * @param imageAttr The attributes of the depth buffer image.
29
29
  * @param pixels A 16-bit typed array of depth values.
30
30
  */
31
- constructor(camera: FramePerspectiveCamera, imageAttr: ImageAttributesLike, pixels: Uint16Array);
31
+ constructor(camera: FrameCameraWithMatrices, imageAttr: ImageAttributesLike, pixels: Uint16Array);
32
32
  /**
33
33
  * Creates a `DepthBuffer` from a decoded PNG.
34
34
  *
@@ -38,11 +38,11 @@ export declare class DepthBuffer implements FrameImageLike {
38
38
  * @throws If the PNG is not a single channel, 16-bit image.
39
39
  * @returns A depth buffer.
40
40
  */
41
- static fromPng(png: Pick<DecodedPng, 'data'>, camera: FramePerspectiveCamera, imageAttr: ImageAttributesLike): DepthBuffer;
41
+ static fromPng(png: Pick<DecodedPng, 'data'>, camera: FrameCameraWithMatrices, imageAttr: ImageAttributesLike): DepthBuffer;
42
42
  /**
43
43
  * Computes the depth from a 2D point within the coordinate space of the depth
44
44
  * buffer. The returned depth is a value that's between the near and far plane
45
- * of the camera.
45
+ * of the perspective camera.
46
46
  *
47
47
  * @param point A 2D point within the viewport.
48
48
  * @param fallbackNormalizedDepth A fallback value if the depth is the max
@@ -50,6 +50,17 @@ export declare class DepthBuffer implements FrameImageLike {
50
50
  * @returns A depth between the near and far plane.
51
51
  */
52
52
  getLinearDepthAtPoint(point: Point.Point, fallbackNormalizedDepth?: number): number;
53
+ /**
54
+ * Computes the depth from a 2D point within the coordinate space of the depth
55
+ * buffer. The returned depth is a value that's between the near and far plane
56
+ * of the orthographic camera.
57
+ *
58
+ * @param point A 2D point within the viewport.
59
+ * @param fallbackNormalizedDepth A fallback value if the depth is the max
60
+ * depth value, or cannot be determined.
61
+ * @returns A depth between the near and far plane.
62
+ */
63
+ getOrthographicDepthAtPoint(point: Point.Point, fallbackNormalizedDepth?: number): number;
53
64
  /**
54
65
  * Computes a depth from a 2D point within the coordinate space of the frame.
55
66
  * The returned depth is a normalized value (`[0, 1]`) between the near and
@@ -71,7 +82,7 @@ export declare class DepthBuffer implements FrameImageLike {
71
82
  */
72
83
  hitTest(point: Point.Point): boolean;
73
84
  /**
74
- * Computes a 3D point in world space coordinates from the depth value at the
85
+ * Computes a 3D point in perspective world space coordinates from the depth value at the
75
86
  * given pixel and ray.
76
87
  *
77
88
  * @param point A pixel to use for reading a depth value.
@@ -81,6 +92,17 @@ export declare class DepthBuffer implements FrameImageLike {
81
92
  * @returns A point in world space coordinates.
82
93
  */
83
94
  getWorldPoint(point: Point.Point, ray: Ray.Ray, fallbackNormalizedDepth?: number): Vector3.Vector3;
95
+ /**
96
+ * Computes a 3D point in orthographic world space coordinates from the depth value at the
97
+ * given pixel and ray.
98
+ *
99
+ * @param point A pixel to use for reading a depth value.
100
+ * @param ray A ray that specifies the origin and direction.
101
+ * @param fallbackNormalizedDepth A fallback value if the depth is the max
102
+ * depth value, or cannot be determined.
103
+ * @returns A point in world space coordinates.
104
+ */
105
+ getOrthographicWorldPoint(point: Point.Point, ray: Ray.Ray, fallbackNormalizedDepth?: number): Vector3.Vector3;
84
106
  /**
85
107
  * Returns `true` if the given point in world space is occluded by any
86
108
  * geometry.
@@ -34,40 +34,47 @@ export declare class FrameImage implements FrameImageLike {
34
34
  constructor(imageAttr: ImageAttributesLike, imageBytes: Uint8Array);
35
35
  }
36
36
  export declare class FrameScene {
37
- readonly camera: FramePerspectiveCamera;
37
+ readonly camera: FrameCameraBase;
38
38
  readonly boundingBox: BoundingBox.BoundingBox;
39
39
  readonly crossSection: CrossSectioning.CrossSectioning;
40
40
  readonly worldOrientation: Orientation;
41
41
  readonly hasChanged: boolean;
42
- constructor(camera: FramePerspectiveCamera, boundingBox: BoundingBox.BoundingBox, crossSection: CrossSectioning.CrossSectioning, worldOrientation: Orientation, hasChanged: boolean);
42
+ constructor(camera: FrameCameraBase, boundingBox: BoundingBox.BoundingBox, crossSection: CrossSectioning.CrossSectioning, worldOrientation: Orientation, hasChanged: boolean);
43
43
  }
44
44
  interface FrameCameraMatrices {
45
- readonly worldMatrix: Matrix4.Matrix4;
46
- readonly viewMatrix: Matrix4.Matrix4;
47
45
  readonly projectionMatrix: Matrix4.Matrix4;
48
46
  readonly projectionMatrixInverse: Matrix4.Matrix4;
47
+ readonly worldMatrix: Matrix4.Matrix4;
48
+ readonly viewMatrix: Matrix4.Matrix4;
49
49
  readonly projectionViewMatrix: Matrix4.Matrix4;
50
50
  }
51
- interface FramePerspectiveCameraLike {
51
+ interface FrameCameraLike {
52
52
  readonly position: Vector3.Vector3;
53
53
  readonly lookAt: Vector3.Vector3;
54
54
  readonly up: Vector3.Vector3;
55
55
  readonly near: number;
56
56
  readonly far: number;
57
57
  readonly aspectRatio: number;
58
+ }
59
+ interface FramePerspectiveCameraLike {
58
60
  readonly fovY: number;
59
61
  }
60
- export declare class FramePerspectiveCamera implements FrameCameraMatrices, FramePerspectiveCameraLike {
62
+ interface FrameOrthographicCameraLike {
63
+ readonly fovHeight: number;
64
+ readonly top: number;
65
+ readonly bottom: number;
66
+ readonly right: number;
67
+ readonly left: number;
68
+ }
69
+ export declare class FrameCameraBase implements FrameCameraLike {
61
70
  readonly position: Vector3.Vector3;
62
71
  readonly lookAt: Vector3.Vector3;
63
72
  readonly up: Vector3.Vector3;
64
73
  readonly near: number;
65
74
  readonly far: number;
66
75
  readonly aspectRatio: number;
67
- readonly fovY: number;
68
- private cameraMatrices?;
69
- constructor(position: Vector3.Vector3, lookAt: Vector3.Vector3, up: Vector3.Vector3, near: number, far: number, aspectRatio: number, fovY: number);
70
- static fromBoundingBox(camera: FrameCamera.FrameCamera, boundingBox: BoundingBox.BoundingBox, aspectRatio: number): FramePerspectiveCamera;
76
+ protected cameraMatrices?: FrameCameraMatrices;
77
+ constructor(position: Vector3.Vector3, lookAt: Vector3.Vector3, up: Vector3.Vector3, near: number, far: number, aspectRatio: number);
71
78
  get direction(): Vector3.Vector3;
72
79
  get viewVector(): Vector3.Vector3;
73
80
  get worldMatrix(): Matrix4.Matrix4;
@@ -75,7 +82,16 @@ export declare class FramePerspectiveCamera implements FrameCameraMatrices, Fram
75
82
  get projectionMatrix(): Matrix4.Matrix4;
76
83
  get projectionMatrixInverse(): Matrix4.Matrix4;
77
84
  get projectionViewMatrix(): Matrix4.Matrix4;
78
- private computeCameraMatrices;
85
+ get frustumProjectionViewMatrix(): Matrix4.Matrix4;
86
+ static fromBoundingBox(camera: FrameCamera.FrameCamera, boundingBox: BoundingBox.BoundingBox, aspectRatio: number): FrameCameraBase;
87
+ /**
88
+ * Returns whether this `FrameCameraBase` is an orthographic camera.
89
+ */
90
+ isOrthographic(): this is FrameOrthographicCamera;
91
+ /**
92
+ * Returns whether this `FrameCameraBase` is a perspective camera.
93
+ */
94
+ isPerspective(): this is FramePerspectiveCamera;
79
95
  /**
80
96
  * Checks if the given point, in world space, is behind the near plane
81
97
  * of the camera.
@@ -93,5 +109,58 @@ export declare class FramePerspectiveCamera implements FrameCameraMatrices, Fram
93
109
  * intersect with the near plane.
94
110
  */
95
111
  intersectLineWithNear(line: Line3.Line3): Vector3.Vector3 | undefined;
112
+ protected computeCameraMatrices(): FrameCameraMatrices;
113
+ protected updateCameraMatrices(cameraMatrices: FrameCameraMatrices): FrameCameraMatrices;
114
+ }
115
+ export interface FrameCameraWithMatrices extends FrameCameraBase {
116
+ readonly direction: Vector3.Vector3;
117
+ readonly viewVector: Vector3.Vector3;
118
+ readonly worldMatrix: Matrix4.Matrix4;
119
+ readonly viewMatrix: Matrix4.Matrix4;
120
+ readonly projectionMatrix: Matrix4.Matrix4;
121
+ readonly projectionMatrixInverse: Matrix4.Matrix4;
122
+ readonly projectionViewMatrix: Matrix4.Matrix4;
123
+ }
124
+ export declare class FramePerspectiveCamera extends FrameCameraBase implements FrameCameraWithMatrices, FramePerspectiveCameraLike {
125
+ readonly position: Vector3.Vector3;
126
+ readonly lookAt: Vector3.Vector3;
127
+ readonly up: Vector3.Vector3;
128
+ readonly near: number;
129
+ readonly far: number;
130
+ readonly aspectRatio: number;
131
+ readonly fovY: number;
132
+ constructor(position: Vector3.Vector3, lookAt: Vector3.Vector3, up: Vector3.Vector3, near: number, far: number, aspectRatio: number, fovY?: number);
133
+ /**
134
+ * Converts this `FramePerspectiveCamera` to a `FrameOrthographicCamera` using
135
+ * the provided `boundingBox` to compute the viewing frustum.
136
+ *
137
+ * @param boundingBox The visible bounding box.
138
+ */
139
+ toOrthographic(boundingBox: BoundingBox.BoundingBox): FrameCameraBase;
140
+ isPerspective(): this is FramePerspectiveCamera;
141
+ protected computeCameraMatrices(): FrameCameraMatrices;
142
+ }
143
+ export declare class FrameOrthographicCamera extends FrameCameraBase implements FrameCameraWithMatrices, FrameOrthographicCameraLike {
144
+ readonly lookAt: Vector3.Vector3;
145
+ readonly up: Vector3.Vector3;
146
+ readonly near: number;
147
+ readonly far: number;
148
+ readonly aspectRatio: number;
149
+ readonly fovHeight: number;
150
+ readonly top: number;
151
+ readonly bottom: number;
152
+ readonly right: number;
153
+ readonly left: number;
154
+ constructor(viewVector: Vector3.Vector3, lookAt: Vector3.Vector3, up: Vector3.Vector3, near: number, far: number, aspectRatio: number, fovHeight: number);
155
+ /**
156
+ * Converts this `FrameOrthographicCamera` to a `FramePerspectiveCamera` using
157
+ * the provided `boundingBox` to compute the near and far clipping planes.
158
+ *
159
+ * @param boundingBox The visible bounding box.
160
+ */
161
+ toPerspective(boundingBox: BoundingBox.BoundingBox): FrameCameraBase;
162
+ isOrthographic(): this is FrameOrthographicCamera;
163
+ get frustumProjectionViewMatrix(): Matrix4.Matrix4;
164
+ protected computeCameraMatrices(): FrameCameraMatrices;
96
165
  }
97
166
  export {};
@@ -1,7 +1,26 @@
1
- import { Vector3 } from '@vertexvis/geometry';
2
- export interface FrameCamera {
1
+ import { vertexvis } from '@vertexvis/frame-streaming-protos';
2
+ import { BoundingBox, Vector3 } from '@vertexvis/geometry';
3
+ export interface PerspectiveFrameCamera {
3
4
  position: Vector3.Vector3;
4
5
  lookAt: Vector3.Vector3;
5
6
  up: Vector3.Vector3;
7
+ fovY?: number;
6
8
  }
7
- export declare function create(data?: Partial<FrameCamera>): FrameCamera;
9
+ export interface OrthographicFrameCamera {
10
+ viewVector: Vector3.Vector3;
11
+ lookAt: Vector3.Vector3;
12
+ up: Vector3.Vector3;
13
+ fovHeight: number;
14
+ }
15
+ export declare type FrameCamera = PerspectiveFrameCamera | OrthographicFrameCamera;
16
+ export declare function isPerspectiveFrameCamera(camera: Partial<FrameCamera>): camera is PerspectiveFrameCamera;
17
+ export declare function isOrthographicFrameCamera(camera: Partial<FrameCamera>): camera is OrthographicFrameCamera;
18
+ export declare function withPositionAndViewVector(camera: FrameCamera): FrameCamera & {
19
+ position: Vector3.Vector3;
20
+ viewVector: Vector3.Vector3;
21
+ };
22
+ export declare function createPerspective(data?: Partial<PerspectiveFrameCamera>): PerspectiveFrameCamera;
23
+ export declare function createOrthographic(data?: Partial<OrthographicFrameCamera>): OrthographicFrameCamera;
24
+ export declare function toOrthographic(data: PerspectiveFrameCamera, boundingBox: BoundingBox.BoundingBox): OrthographicFrameCamera;
25
+ export declare function toPerspective(data: OrthographicFrameCamera, fovY?: number): PerspectiveFrameCamera;
26
+ export declare function toProtobuf(camera: Partial<FrameCamera>): vertexvis.protobuf.stream.ICamera;
@@ -1,7 +1,6 @@
1
1
  import { Dimensions, Matrix4, Point, Ray, Rectangle, Vector3 } from '@vertexvis/geometry';
2
2
  import { DepthBuffer } from './depthBuffer';
3
- import type { FrameImageLike } from './frame';
4
- import { FramePerspectiveCamera } from './frame';
3
+ import type { FrameCameraWithMatrices, FrameImageLike } from './frame';
5
4
  /**
6
5
  * A `Viewport` represents the drawing area in the viewer.
7
6
  *
@@ -67,7 +66,7 @@ export declare class Viewport implements Dimensions.Dimensions {
67
66
  */
68
67
  transformPointToFrame(pt: Point.Point, image: FrameImageLike): Point.Point;
69
68
  /**
70
- * Transforms a point in viewport coordinates to a point in world space
69
+ * Transforms a point in viewport coordinates to a point in perspective world space
71
70
  * coordinates. This method expects a depth buffer in order to compute a value
72
71
  * for the Z axis.
73
72
  *
@@ -78,6 +77,17 @@ export declare class Viewport implements Dimensions.Dimensions {
78
77
  * @returns
79
78
  */
80
79
  transformPointToWorldSpace(pt: Point.Point, depthBuffer: DepthBuffer, fallbackNormalizedDepth?: number): Vector3.Vector3;
80
+ /**
81
+ * Transforms a point in viewport coordinates to a point in orthographic world space
82
+ * coordinates. This method expects a depth buffer in order to compute a value
83
+ * for the Z axis.
84
+ *
85
+ * @param pt A point in viewport coordinates.
86
+ * @param depthBuffer A depth buffer for computing the Z axis.
87
+ * @param fallbackNormalizedDepth A fallback value if the depth is the max
88
+ * depth value, or cannot be determined.
89
+ */
90
+ transformPointToOrthographicWorldSpace(pt: Point.Point, depthBuffer: DepthBuffer, fallbackNormalizedDepth?: number): Vector3.Vector3;
81
91
  /**
82
92
  * Transforms a point in viewport coordinates to a ray. The returned ray will
83
93
  * have an origin that is at the position of the camera with a direction that
@@ -88,7 +98,17 @@ export declare class Viewport implements Dimensions.Dimensions {
88
98
  * @param camera A camera used to determine orientation of the scene.
89
99
  * @returns
90
100
  */
91
- transformPointToRay(pt: Point.Point, image: FrameImageLike, camera: FramePerspectiveCamera): Ray.Ray;
101
+ transformPointToRay(pt: Point.Point, image: FrameImageLike, camera: FrameCameraWithMatrices): Ray.Ray;
102
+ /**
103
+ * Transforms a point in viewport coordinates to a ray. The returned ray will
104
+ * have an origin that is at the world point of viewport coordinate with a direction that
105
+ * is pointing into world space away from the camera.
106
+ *
107
+ * @param pt A point in viewport coordinates.
108
+ * @param image An image of a frame.
109
+ * @param camera A camera used to determine orientation of the scene.
110
+ */
111
+ transformPointToOrthographicRay(pt: Point.Point, image: FrameImageLike, camera: FrameCameraWithMatrices): Ray.Ray;
92
112
  /**
93
113
  * Maps a screen point to normalized device coordinates (NDC). A screen point
94
114
  * at 0,0 represents the top-left of the viewport.
@@ -4,22 +4,25 @@ import { Color } from '@vertexvis/utils';
4
4
  import { PointToPointHitTester } from '../components/viewer-measurement-distance/hitTest';
5
5
  import { PointToPointHitProvider } from '../components/viewer-measurement-distance/interactions';
6
6
  import { RaycasterLike } from '../lib/scenes/raycaster';
7
- import { DepthBuffer, FeatureMap, Frame, ImageAttributesLike, StencilBuffer, Viewport } from '../lib/types';
8
- export declare const drawFramePayload: DrawFramePayload;
9
- export declare function makeFrame(): Frame;
7
+ import { DepthBuffer, FeatureMap, Frame, FrameCameraBase, ImageAttributesLike, StencilBuffer, Viewport } from '../lib/types';
8
+ export declare const drawFramePayloadPerspective: DrawFramePayload;
9
+ export declare const drawFramePayloadOrthographic: DrawFramePayload;
10
+ export declare function makePerspectiveFrame(): Frame;
11
+ export declare function makeOrthographicFrame(): Frame;
10
12
  export declare function makeImagePng(width: number, height: number): Uint8Array;
11
13
  export declare function makeDepthImagePng(width: number, height: number, value?: number): Uint8Array;
12
14
  export declare function makeDepthImageBytes(width: number, height: number, value?: number): Uint16Array;
13
- export declare function makeDepthBuffer(width: number, height: number, value?: number): DepthBuffer;
15
+ export declare function makeDepthBuffer(width: number, height: number, value?: number, camera?: FrameCameraBase): DepthBuffer;
14
16
  export declare function makeStencilImageBytes(width: number, height: number, fill: (pixel: Point.Point) => number): Uint8Array;
15
17
  export declare function makeStencilBuffer(width: number, height: number, fill: (pixel: Point.Point) => number, depthBuffer?: DepthBuffer): StencilBuffer;
16
18
  export declare function makeFeatureMap(width: number, height: number, fill: (pixel: Point.Point) => Color.Color): FeatureMap;
17
19
  export declare function makeFeatureMapBytes(width: number, height: number, fill: (pixel: Point.Point) => Color.Color): Uint8Array;
18
20
  export declare function makeImageAttributes(width: number, height: number): ImageAttributesLike;
19
- export declare function makeHitTester({ stencilBuffer, depthBuffer, viewport, }?: {
21
+ export declare function makeHitTester({ stencilBuffer, depthBuffer, viewport, camera, }?: {
20
22
  stencilBuffer?: StencilBuffer;
21
23
  depthBuffer?: DepthBuffer;
22
24
  viewport?: Viewport;
25
+ camera?: FrameCameraBase;
23
26
  }): PointToPointHitTester;
24
27
  export declare function makeRaycaster(): RaycasterLike;
25
28
  export declare function makeHitProvider({ hitTester, raycaster, }: {
@@ -1,4 +1,4 @@
1
1
  /**!
2
2
  * Copyright (c) 2022 Vertex Software LLC. All rights reserved.
3
3
  */
4
- export{c as ColorMaterial,l as LoadableResource,S as Scene,a as SynchronizedClock}from"./p-085e908a.js";export{C as CursorManager,m as measurementCursor,a as measurementWithArrowCursor}from"./p-d00e9203.js";export{M as MeasurementController,a as MeasurementEntity}from"./p-364ce21c.js";export{M as MeasurementModel}from"./p-da2f4a56.js";export{M as MeasurementOverlayManager}from"./p-3810c24d.js";export{m as makeMinimumDistanceResult}from"./p-67446e35.js";export{A as AngleUnits,d as AreaUnits,D as DistanceUnits,E as EntityType,F as ReceivedFrame,a as ReceivedFrameImage,b as ReceivedFrameScene,c as ReceivedPerspectiveCamera}from"./p-fe11d694.js";export{A as ArrowMarkup,C as CircleMarkup,F as FreeformMarkup}from"./p-081e6873.js";export{V as Viewport}from"./p-4985fad5.js";import"./p-301660cf.js";import"./p-0aba71fd.js";import"./p-f7cb7e59.js";import"./p-112455b1.js";import"./p-3a20a038.js";
4
+ export{c as ColorMaterial,l as LoadableResource,S as Scene,a as SynchronizedClock}from"./p-d32b54cb.js";export{C as CursorManager,m as measurementCursor,a as measurementWithArrowCursor}from"./p-3561d910.js";export{M as MeasurementController,a as MeasurementEntity}from"./p-69058178.js";export{M as MeasurementModel}from"./p-5b342e97.js";export{M as MeasurementOverlayManager}from"./p-3f0f83ad.js";export{m as makeMinimumDistanceResult}from"./p-bcb66f97.js";export{A as AngleUnits,f as AreaUnits,D as DistanceUnits,E as EntityType,F as FrameCameraBase,a as ReceivedFrame,b as ReceivedFrameImage,c as ReceivedFrameScene,d as ReceivedOrthographicCamera,e as ReceivedPerspectiveCamera}from"./p-77be081a.js";export{A as ArrowMarkup,C as CircleMarkup,F as FreeformMarkup}from"./p-e38458da.js";export{V as Viewport}from"./p-a93a63a9.js";import"./p-e75bba97.js";import"./p-661f0612.js";import"./p-b8774c9c.js";import"./p-112455b1.js";import"./p-3a20a038.js";
@@ -1,4 +1,4 @@
1
1
  /**!
2
2
  * Copyright (c) 2022 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import{r as e,c as t,h as i,H as s,g as n}from"./p-cafa57a6.js";import{M as a}from"./p-849bd025.js";import{s as h}from"./p-c738296e.js";import"./p-fe11d694.js";import{D as l}from"./p-423410be.js";import{i as d}from"./p-2cefb1b0.js";import"./p-0aba71fd.js";import"./p-301660cf.js";import"./p-112455b1.js";let o=class{constructor(i){e(this,i),this.measureBegin=t(this,"measureBegin",7),this.measureEnd=t(this,"measureEnd",7),this.tool="distance",this.units="millimeters",this.fractionalDigits=2,this.disabled=!1,this.isMeasuring=!1,this.snapDistance=a,this.stateMap={},this.handleMeasurementEditBegin=()=>{this.isMeasuring=!0,this.measureBegin.emit()},this.handleMeasurementEditEnd=()=>{const{measurementElement:e}=this.stateMap;if(d(e)){const{start:t,end:i,invalid:s}=e;this.isMeasuring=!1,e.start=void 0,e.end=void 0,e.invalid=!1,null!=t&&null!=i&&this.measureEnd.emit(new l({start:t,end:i,invalid:s}))}}}handleViewerChanged(){null!=this.stateMap.measurementElement&&(this.stateMap.measurementElement.viewer=this.viewer)}handleToolChanged(){this.updateMeasurementElement()}handleDistanceTemplateIdChanged(){this.updateMeasurementElement()}handleDisabledChanged(){this.updateMeasurementElement()}handleUnitsChanged(){this.updateMeasurementElement()}handleFractionalDigitsChanged(){this.updateMeasurementElement()}handleSnapDistanceChanged(){this.updateMeasurementElement()}componentDidLoad(){this.updateMeasurementElement()}render(){return this.disabled?i(s,null):i(s,null,"distance"===this.tool?i("vertex-viewer-layer",null,i("slot",null)):`Unsupported tool type '${this.tool}'.`)}createDistanceMeasurementElement(){if(null!=this.distanceTemplateId){const e=h(window.document.body,this.distanceTemplateId,d,(()=>console.warn(`Distance template with ID ${this.distanceTemplateId} not found. Using default distance element.`)),(()=>console.warn("Distance template does not contain a vertex-viewer-measurement-distance. Using default distance element.")));if(null!=e)return e}return document.createElement("vertex-viewer-measurement-distance")}updateMeasurementElement(){const{measurementElement:e}=this.stateMap;if(null!=e&&(e.remove(),e.viewer=void 0,e.removeEventListener("editBegin",this.handleMeasurementEditBegin),e.removeEventListener("editEnd",this.handleMeasurementEditEnd)),!this.disabled){const e=this.createDistanceMeasurementElement();e.mode="replace",e.units=this.units,e.snapDistance=this.snapDistance,e.fractionalDigits=this.fractionalDigits,e.viewer=this.viewer,e.addEventListener("editBegin",this.handleMeasurementEditBegin),e.addEventListener("editEnd",this.handleMeasurementEditEnd),this.stateMap.measurementElement=e,this.hostEl.append(e)}}get hostEl(){return n(this)}static get watchers(){return{viewer:["handleViewerChanged"],tool:["handleToolChanged"],distanceTemplateId:["handleDistanceTemplateIdChanged"],disabled:["handleDisabledChanged"],units:["handleUnitsChanged"],fractionalDigits:["handleFractionalDigitsChanged"],snapDistance:["handleSnapDistanceChanged"]}}};o.style=":host{position:absolute;top:0;bottom:0;left:0;right:0}";export{o as vertex_viewer_measurement_tool}
4
+ import{r as e,c as t,h as i,H as s,g as n}from"./p-cafa57a6.js";import{M as a}from"./p-849bd025.js";import{s as h}from"./p-c738296e.js";import"./p-77be081a.js";import{D as l}from"./p-ffdeb08c.js";import{i as d}from"./p-fa9a0bed.js";import"./p-661f0612.js";import"./p-e75bba97.js";import"./p-112455b1.js";let o=class{constructor(i){e(this,i),this.measureBegin=t(this,"measureBegin",7),this.measureEnd=t(this,"measureEnd",7),this.tool="distance",this.units="millimeters",this.fractionalDigits=2,this.disabled=!1,this.isMeasuring=!1,this.snapDistance=a,this.stateMap={},this.handleMeasurementEditBegin=()=>{this.isMeasuring=!0,this.measureBegin.emit()},this.handleMeasurementEditEnd=()=>{const{measurementElement:e}=this.stateMap;if(d(e)){const{start:t,end:i,invalid:s}=e;this.isMeasuring=!1,e.start=void 0,e.end=void 0,e.invalid=!1,null!=t&&null!=i&&this.measureEnd.emit(new l({start:t,end:i,invalid:s}))}}}handleViewerChanged(){null!=this.stateMap.measurementElement&&(this.stateMap.measurementElement.viewer=this.viewer)}handleToolChanged(){this.updateMeasurementElement()}handleDistanceTemplateIdChanged(){this.updateMeasurementElement()}handleDisabledChanged(){this.updateMeasurementElement()}handleUnitsChanged(){this.updateMeasurementElement()}handleFractionalDigitsChanged(){this.updateMeasurementElement()}handleSnapDistanceChanged(){this.updateMeasurementElement()}componentDidLoad(){this.updateMeasurementElement()}render(){return this.disabled?i(s,null):i(s,null,"distance"===this.tool?i("vertex-viewer-layer",null,i("slot",null)):`Unsupported tool type '${this.tool}'.`)}createDistanceMeasurementElement(){if(null!=this.distanceTemplateId){const e=h(window.document.body,this.distanceTemplateId,d,(()=>console.warn(`Distance template with ID ${this.distanceTemplateId} not found. Using default distance element.`)),(()=>console.warn("Distance template does not contain a vertex-viewer-measurement-distance. Using default distance element.")));if(null!=e)return e}return document.createElement("vertex-viewer-measurement-distance")}updateMeasurementElement(){const{measurementElement:e}=this.stateMap;if(null!=e&&(e.remove(),e.viewer=void 0,e.removeEventListener("editBegin",this.handleMeasurementEditBegin),e.removeEventListener("editEnd",this.handleMeasurementEditEnd)),!this.disabled){const e=this.createDistanceMeasurementElement();e.mode="replace",e.units=this.units,e.snapDistance=this.snapDistance,e.fractionalDigits=this.fractionalDigits,e.viewer=this.viewer,e.addEventListener("editBegin",this.handleMeasurementEditBegin),e.addEventListener("editEnd",this.handleMeasurementEditEnd),this.stateMap.measurementElement=e,this.hostEl.append(e)}}get hostEl(){return n(this)}static get watchers(){return{viewer:["handleViewerChanged"],tool:["handleToolChanged"],distanceTemplateId:["handleDistanceTemplateIdChanged"],disabled:["handleDisabledChanged"],units:["handleUnitsChanged"],fractionalDigits:["handleFractionalDigitsChanged"],snapDistance:["handleSnapDistanceChanged"]}}};o.style=":host{position:absolute;top:0;bottom:0;left:0;right:0}";export{o as vertex_viewer_measurement_tool}
@@ -1,4 +1,4 @@
1
1
  /**!
2
2
  * Copyright (c) 2022 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import{r as e,c as t,h as i,H as n,g as r}from"./p-cafa57a6.js";import{p as s}from"./p-0aba71fd.js";import{s as a}from"./p-c738296e.js";import{A as o,C as l,F as h}from"./p-081e6873.js";import{i as d,a as u,b as p}from"./p-7cad9bf4.js";import"./p-301660cf.js";let c=class{constructor(i){e(this,i),this.markupAdded=t(this,"markupAdded",7),this.markupRemoved=t(this,"markupRemoved",7),this.tool="arrow",this.disabled=!1,this.selectNew=!1,this.handlePointerMove=e=>{null!=this.pointerDownPosition&&s.distance(this.pointerDownPosition,s.create(e.clientX,e.clientY))>2&&(this.toSelectMarkupId=void 0)},this.handlePointerUp=async e=>{if(!this.disabled){const t=e.target,i=(await this.getMarkupElements()).find((e=>e===t));null!=(null==i?void 0:i.id)&&""!==i.id&&i.id===this.toSelectMarkupId?this.selectedMarkupId=t.id:null!=this.pointerDownPosition&&s.distance(this.pointerDownPosition,s.create(e.clientX,e.clientY))<=2&&(this.selectedMarkupId=void 0),this.toSelectMarkupId=void 0,this.pointerDownPosition=void 0}window.removeEventListener("pointerup",this.handlePointerUp),window.removeEventListener("pointermove",this.handlePointerMove)}}disconnectedCallback(){window.removeEventListener("pointerup",this.handlePointerUp),window.removeEventListener("pointermove",this.handlePointerMove)}async addMarkup(e){if(e instanceof o){const{start:t,end:i,id:n}=e,r=this.createArrowMarkupElement();return r.id=n,r.start=t,r.end=i,this.appendMarkupElement(r)}if(e instanceof l){const{bounds:t,id:i}=e,n=this.createCircleMarkupElement();return n.id=i,n.bounds=t,this.appendMarkupElement(n)}if(e instanceof h){const{bounds:t,points:i,id:n}=e,r=this.createFreeformMarkupElement();return r.id=n,r.points=i,r.bounds=t,this.appendMarkupElement(r)}throw new Error(`Cannot add markup. Unknown type '${e}'.`)}async removeMarkup(e){const t=await this.getMarkupElement(e);return null!=t&&(t.remove(),this.markupRemoved.emit(t)),t}async getMarkupElements(){return Array.from(this.hostEl.children).filter((e=>d(e)||u(e)||p(e)))}async getMarkupElement(e){return(await this.getMarkupElements()).find((t=>t.id===e))}async handleSelectedMarkupIdChanged(){(await this.getMarkupElements()).forEach((e=>{e.mode=e.id===this.selectedMarkupId?"edit":""}))}handleToolChanged(){this.updatePropsOnMarkupTool()}handleArrowTemplateIdChanged(){this.updatePropsOnMarkupTool()}handleCircleTemplateIdChanged(){this.updatePropsOnMarkupTool()}handleFreeformTemplateIdChanged(){this.updatePropsOnMarkupTool()}async handleViewerChanged(e){this.updatePropsOnMarkupTool(),this.updatePropsOnMarkups()}handleDisabledChanged(){this.updatePropsOnMarkupTool()}async handleMarkupEnd(e){var t;const i=e,n=await this.addMarkup(i.detail);await new Promise((e=>{const t=()=>{n.removeEventListener("viewRendered",t),e()};n.addEventListener("viewRendered",t)})),this.selectNew&&(this.selectedMarkupId=i.detail.id),null===(t=this.getMarkupTool())||void 0===t||t.reset()}async handleMarkupPointerDown(e){if(!this.disabled){const t=e.target,i=(await this.getMarkupElements()).find((e=>e===t));null!=(null==i?void 0:i.id)&&""!==(null==i?void 0:i.id)&&(this.toSelectMarkupId=t.id),this.pointerDownPosition=s.create(e.clientX,e.clientY),window.addEventListener("pointermove",this.handlePointerMove),window.addEventListener("pointerup",this.handlePointerUp)}}componentDidLoad(){this.updatePropsOnMarkupTool()}render(){return i(n,null,i("slot",null))}appendMarkupElement(e){return this.updatePropsOnMarkup(e),this.hostEl.appendChild(e),this.markupAdded.emit(e),e}createArrowMarkupElement(){if(null!=this.arrowTemplateId){const e=a(window.document.body,this.arrowTemplateId,d,(()=>console.warn(`Arrow template with ID ${this.arrowTemplateId} not found. Using default arrow element.`)),(()=>console.warn("Arrow template does not contain a vertex-viewer-markup-arrow. Using default arrow element.")));if(null!=e)return e}return document.createElement("vertex-viewer-markup-arrow")}createCircleMarkupElement(){if(null!=this.circleTemplateId){const e=a(window.document.body,this.circleTemplateId,u,(()=>console.warn(`Circle template with ID ${this.circleTemplateId} not found. Using default circle element.`)),(()=>console.warn("Circle template does not contain a vertex-viewer-markup-circle. Using default circle element.")));if(null!=e)return e}return document.createElement("vertex-viewer-markup-circle")}createFreeformMarkupElement(){if(null!=this.freeformTemplateId){const e=a(window.document.body,this.freeformTemplateId,p,(()=>console.warn(`Freeform template with ID ${this.freeformTemplateId} not found. Using default freeform element.`)),(()=>console.warn("Freeform template does not contain a vertex-viewer-markup-freeform. Using default freeform element.")));if(null!=e)return e}return document.createElement("vertex-viewer-markup-freeform")}async updatePropsOnMarkups(){(await this.getMarkupElements()).forEach((e=>this.updatePropsOnMarkup(e)))}updatePropsOnMarkup(e){e.viewer=this.viewer,e.classList.add("viewer-markup__markup")}updatePropsOnMarkupTool(){const e=this.getMarkupTool();null!=e&&(e.disabled=this.disabled,e.arrowTemplateId=this.arrowTemplateId,e.circleTemplateId=this.circleTemplateId,e.freeformTemplateId=this.freeformTemplateId,e.tool=this.tool,e.viewer=this.viewer)}getMarkupTool(){return this.hostEl.querySelector("vertex-viewer-markup-tool")}get hostEl(){return r(this)}static get watchers(){return{selectedMarkupId:["handleSelectedMarkupIdChanged"],tool:["handleToolChanged"],arrowTemplateId:["handleArrowTemplateIdChanged"],circleTemplateId:["handleCircleTemplateIdChanged"],freeformTemplateId:["handleFreeformTemplateIdChanged"],viewer:["handleViewerChanged"],disabled:["handleDisabledChanged"]}}};c.style=":host{display:block;position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none}";export{c as vertex_viewer_markup}
4
+ import{r as e,c as t,h as i,H as n,g as r}from"./p-cafa57a6.js";import{p as s}from"./p-661f0612.js";import{s as a}from"./p-c738296e.js";import{A as o,C as l,F as h}from"./p-e38458da.js";import{i as d,a as u,b as p}from"./p-d1584404.js";import"./p-e75bba97.js";let m=class{constructor(i){e(this,i),this.markupAdded=t(this,"markupAdded",7),this.markupRemoved=t(this,"markupRemoved",7),this.tool="arrow",this.disabled=!1,this.selectNew=!1,this.handlePointerMove=e=>{null!=this.pointerDownPosition&&s.distance(this.pointerDownPosition,s.create(e.clientX,e.clientY))>2&&(this.toSelectMarkupId=void 0)},this.handlePointerUp=async e=>{if(!this.disabled){const t=e.target,i=(await this.getMarkupElements()).find((e=>e===t));null!=(null==i?void 0:i.id)&&""!==i.id&&i.id===this.toSelectMarkupId?this.selectedMarkupId=t.id:null!=this.pointerDownPosition&&s.distance(this.pointerDownPosition,s.create(e.clientX,e.clientY))<=2&&(this.selectedMarkupId=void 0),this.toSelectMarkupId=void 0,this.pointerDownPosition=void 0}window.removeEventListener("pointerup",this.handlePointerUp),window.removeEventListener("pointermove",this.handlePointerMove)}}disconnectedCallback(){window.removeEventListener("pointerup",this.handlePointerUp),window.removeEventListener("pointermove",this.handlePointerMove)}async addMarkup(e){if(e instanceof o){const{start:t,end:i,id:n}=e,r=this.createArrowMarkupElement();return r.id=n,r.start=t,r.end=i,this.appendMarkupElement(r)}if(e instanceof l){const{bounds:t,id:i}=e,n=this.createCircleMarkupElement();return n.id=i,n.bounds=t,this.appendMarkupElement(n)}if(e instanceof h){const{bounds:t,points:i,id:n}=e,r=this.createFreeformMarkupElement();return r.id=n,r.points=i,r.bounds=t,this.appendMarkupElement(r)}throw new Error(`Cannot add markup. Unknown type '${e}'.`)}async removeMarkup(e){const t=await this.getMarkupElement(e);return null!=t&&(t.remove(),this.markupRemoved.emit(t)),t}async getMarkupElements(){return Array.from(this.hostEl.children).filter((e=>d(e)||u(e)||p(e)))}async getMarkupElement(e){return(await this.getMarkupElements()).find((t=>t.id===e))}async handleSelectedMarkupIdChanged(){(await this.getMarkupElements()).forEach((e=>{e.mode=e.id===this.selectedMarkupId?"edit":""}))}handleToolChanged(){this.updatePropsOnMarkupTool()}handleArrowTemplateIdChanged(){this.updatePropsOnMarkupTool()}handleCircleTemplateIdChanged(){this.updatePropsOnMarkupTool()}handleFreeformTemplateIdChanged(){this.updatePropsOnMarkupTool()}async handleViewerChanged(e){this.updatePropsOnMarkupTool(),this.updatePropsOnMarkups()}handleDisabledChanged(){this.updatePropsOnMarkupTool()}async handleMarkupEnd(e){var t;const i=e,n=await this.addMarkup(i.detail);await new Promise((e=>{const t=()=>{n.removeEventListener("viewRendered",t),e()};n.addEventListener("viewRendered",t)})),this.selectNew&&(this.selectedMarkupId=i.detail.id),null===(t=this.getMarkupTool())||void 0===t||t.reset()}async handleMarkupPointerDown(e){if(!this.disabled){const t=e.target,i=(await this.getMarkupElements()).find((e=>e===t));null!=(null==i?void 0:i.id)&&""!==(null==i?void 0:i.id)&&(this.toSelectMarkupId=t.id),this.pointerDownPosition=s.create(e.clientX,e.clientY),window.addEventListener("pointermove",this.handlePointerMove),window.addEventListener("pointerup",this.handlePointerUp)}}componentDidLoad(){this.updatePropsOnMarkupTool()}render(){return i(n,null,i("slot",null))}appendMarkupElement(e){return this.updatePropsOnMarkup(e),this.hostEl.appendChild(e),this.markupAdded.emit(e),e}createArrowMarkupElement(){if(null!=this.arrowTemplateId){const e=a(window.document.body,this.arrowTemplateId,d,(()=>console.warn(`Arrow template with ID ${this.arrowTemplateId} not found. Using default arrow element.`)),(()=>console.warn("Arrow template does not contain a vertex-viewer-markup-arrow. Using default arrow element.")));if(null!=e)return e}return document.createElement("vertex-viewer-markup-arrow")}createCircleMarkupElement(){if(null!=this.circleTemplateId){const e=a(window.document.body,this.circleTemplateId,u,(()=>console.warn(`Circle template with ID ${this.circleTemplateId} not found. Using default circle element.`)),(()=>console.warn("Circle template does not contain a vertex-viewer-markup-circle. Using default circle element.")));if(null!=e)return e}return document.createElement("vertex-viewer-markup-circle")}createFreeformMarkupElement(){if(null!=this.freeformTemplateId){const e=a(window.document.body,this.freeformTemplateId,p,(()=>console.warn(`Freeform template with ID ${this.freeformTemplateId} not found. Using default freeform element.`)),(()=>console.warn("Freeform template does not contain a vertex-viewer-markup-freeform. Using default freeform element.")));if(null!=e)return e}return document.createElement("vertex-viewer-markup-freeform")}async updatePropsOnMarkups(){(await this.getMarkupElements()).forEach((e=>this.updatePropsOnMarkup(e)))}updatePropsOnMarkup(e){e.viewer=this.viewer,e.classList.add("viewer-markup__markup")}updatePropsOnMarkupTool(){const e=this.getMarkupTool();null!=e&&(e.disabled=this.disabled,e.arrowTemplateId=this.arrowTemplateId,e.circleTemplateId=this.circleTemplateId,e.freeformTemplateId=this.freeformTemplateId,e.tool=this.tool,e.viewer=this.viewer)}getMarkupTool(){return this.hostEl.querySelector("vertex-viewer-markup-tool")}get hostEl(){return r(this)}static get watchers(){return{selectedMarkupId:["handleSelectedMarkupIdChanged"],tool:["handleToolChanged"],arrowTemplateId:["handleArrowTemplateIdChanged"],circleTemplateId:["handleCircleTemplateIdChanged"],freeformTemplateId:["handleFreeformTemplateIdChanged"],viewer:["handleViewerChanged"],disabled:["handleDisabledChanged"]}}};m.style=":host{display:block;position:absolute;top:0;bottom:0;left:0;right:0;pointer-events:none}";export{m as vertex_viewer_markup}
@@ -1,4 +1,4 @@
1
1
  /**!
2
2
  * Copyright (c) 2022 Vertex Software LLC. All rights reserved.
3
3
  */
4
- import{E as s}from"./p-301660cf.js";class a{constructor(){this.onChanged=new s,this.cursors=[],this.nextId=0}add(s,h=a.NORMAL_PRIORITY){const t=++this.nextId,i={id:t,cursor:s,priority:h,dispose:()=>this.remove(t)};return this.cursors.push(i),this.onChanged.emit(),i}remove(s){const a=this.cursors.findIndex((({id:a})=>a===s));a>=0&&(this.cursors.splice(a,1),this.onChanged.emit())}getActiveCursor(){var s;return null===(s=this.cursors.concat().reverse().sort(((s,a)=>a.priority-s.priority))[0])||void 0===s?void 0:s.cursor}}a.LOW_PRIORITY=0,a.NORMAL_PRIORITY=10,a.HIGH_PRIORITY=20;const h={url:"data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M21.5 8h-19a.5.5 0 00-.5.5v6a.5.5 0 00.5.5h19a.5.5 0 00.5-.5v-6a.5.5 0 00-.5-.5zm-.5 6H3V9h3v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2z' stroke='%23fff' stroke-width='1.25' stroke-opacity='0.5' stroke-miterlimit='10' shape-rendering='crispEdges'/%3E%3Cpath d='M21.5 8h-19a.5.5 0 00-.5.5v6a.5.5 0 00.5.5h19a.5.5 0 00.5-.5v-6a.5.5 0 00-.5-.5zm-.5 6H3V9h3v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2z' shape-rendering='crispEdges'/%3E%3C/svg%3E",offsetX:-24,offsetY:-24},t={url:"data:image/svg+xml;utf8,%3Csvg id='icons' xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bstroke:%23fff;stroke-miterlimit:10;stroke-width:2px;%7D.cls-2%7Bfill:%23fff;%7D.cls-2,.cls-3%7Bfill-rule:evenodd;%7D%3C/style%3E%3C/defs%3E%3Cpath class='cls-1' d='M27.46,21h-19a.5.5,0,0,0-.5.5v6a.5.5,0,0,0,.5.5h19a.5.5,0,0,0,.5-.5v-6A.5.5,0,0,0,27.46,21ZM27,27H9V22h3v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2Z'/%3E%3Cpath d='M27.46,21h-19a.5.5,0,0,0-.5.5v6a.5.5,0,0,0,.5.5h19a.5.5,0,0,0,.5-.5v-6A.5.5,0,0,0,27.46,21ZM27,27H9V22h3v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2Z'/%3E%3Cpath class='cls-2' d='M1,17V1L12.59,12.62H5.81l-.41.12Z'/%3E%3Cpath class='cls-2' d='M10.08,17.69l-3.6,1.53L1.8,8.14,5.48,6.58Z'/%3E%3Cpath class='cls-3' d='M8.75,17l-1.84.77-3.1-7.37,1.84-.78Z'/%3E%3Cpath class='cls-3' d='M2,3.41V14.6l3-2.87.43-.14h4.76Z'/%3E%3C/svg%3E",offsetX:-30,offsetY:-30};export{a as C,t as a,h as m}
4
+ import{E as s}from"./p-e75bba97.js";class a{constructor(){this.onChanged=new s,this.cursors=[],this.nextId=0}add(s,h=a.NORMAL_PRIORITY){const t=++this.nextId,i={id:t,cursor:s,priority:h,dispose:()=>this.remove(t)};return this.cursors.push(i),this.onChanged.emit(),i}remove(s){const a=this.cursors.findIndex((({id:a})=>a===s));a>=0&&(this.cursors.splice(a,1),this.onChanged.emit())}getActiveCursor(){var s;return null===(s=this.cursors.concat().reverse().sort(((s,a)=>a.priority-s.priority))[0])||void 0===s?void 0:s.cursor}}a.LOW_PRIORITY=0,a.NORMAL_PRIORITY=10,a.HIGH_PRIORITY=20;const h={url:"data:image/svg+xml;utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath d='M21.5 8h-19a.5.5 0 00-.5.5v6a.5.5 0 00.5.5h19a.5.5 0 00.5-.5v-6a.5.5 0 00-.5-.5zm-.5 6H3V9h3v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2z' stroke='%23fff' stroke-width='1.25' stroke-opacity='0.5' stroke-miterlimit='10' shape-rendering='crispEdges'/%3E%3Cpath d='M21.5 8h-19a.5.5 0 00-.5.5v6a.5.5 0 00.5.5h19a.5.5 0 00.5-.5v-6a.5.5 0 00-.5-.5zm-.5 6H3V9h3v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2v2.5a.5.5 0 001 0V9h2z' shape-rendering='crispEdges'/%3E%3C/svg%3E",offsetX:-24,offsetY:-24},t={url:"data:image/svg+xml;utf8,%3Csvg id='icons' xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bstroke:%23fff;stroke-miterlimit:10;stroke-width:2px;%7D.cls-2%7Bfill:%23fff;%7D.cls-2,.cls-3%7Bfill-rule:evenodd;%7D%3C/style%3E%3C/defs%3E%3Cpath class='cls-1' d='M27.46,21h-19a.5.5,0,0,0-.5.5v6a.5.5,0,0,0,.5.5h19a.5.5,0,0,0,.5-.5v-6A.5.5,0,0,0,27.46,21ZM27,27H9V22h3v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2Z'/%3E%3Cpath d='M27.46,21h-19a.5.5,0,0,0-.5.5v6a.5.5,0,0,0,.5.5h19a.5.5,0,0,0,.5-.5v-6A.5.5,0,0,0,27.46,21ZM27,27H9V22h3v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2v2.5a.5.5,0,0,0,1,0V22h2Z'/%3E%3Cpath class='cls-2' d='M1,17V1L12.59,12.62H5.81l-.41.12Z'/%3E%3Cpath class='cls-2' d='M10.08,17.69l-3.6,1.53L1.8,8.14,5.48,6.58Z'/%3E%3Cpath class='cls-3' d='M8.75,17l-1.84.77-3.1-7.37,1.84-.78Z'/%3E%3Cpath class='cls-3' d='M2,3.41V14.6l3-2.87.43-.14h4.76Z'/%3E%3C/svg%3E",offsetX:-30,offsetY:-30};export{a as C,t as a,h as m}