@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,9 @@
1
- import { BoundingBox, Vector3 } from '@vertexvis/geometry';
1
+ import { BoundingBox, BoundingSphere, Vector3 } from '@vertexvis/geometry';
2
2
  import { UUID } from '@vertexvis/utils';
3
+ import { constrainViewVector } from '../rendering/vectors';
3
4
  import { DEFAULT_TIMEOUT_IN_MS } from '../stream/dispatcher';
4
- import { ClippingPlanes, FramePerspectiveCamera, } from '../types';
5
+ import { ClippingPlanes, FrameCamera, FrameOrthographicCamera, FramePerspectiveCamera, } from '../types';
6
+ import { withPositionAndViewVector } from '../types/frameCamera';
5
7
  import { CameraRenderResult } from './cameraRenderResult';
6
8
  import { buildFlyToOperation } from './mapper';
7
9
  const PI_OVER_360 = 0.008726646259972;
@@ -61,32 +63,19 @@ export class FlyToExecutor {
61
63
  * a new instance of the class with the updated properties.
62
64
  */
63
65
  export class Camera {
64
- constructor(stream, aspect, data, boundingBox, decodeFrame) {
66
+ constructor(stream, aspect, data, boundingBox, decodeFrame, flyToOptions) {
65
67
  this.stream = stream;
66
68
  this.aspect = aspect;
67
69
  this.data = data;
68
70
  this.boundingBox = boundingBox;
69
71
  this.decodeFrame = decodeFrame;
72
+ this.flyToOptions = flyToOptions;
70
73
  }
71
- /**
72
- * Updates the position of the camera such that the given bounding box will
73
- * be contained within the camera's view.
74
- *
75
- * @param boundingBox The bounding box to position to.
76
- */
77
- fitToBoundingBox(boundingBox) {
78
- const radius = 1.1 *
79
- Vector3.magnitude(Vector3.subtract(boundingBox.max, BoundingBox.center(boundingBox)));
80
- // ratio of the height of the frustum to the distance along the view vector
81
- let hOverD = Math.tan(this.fovY * PI_OVER_360);
82
- if (this.aspectRatio < 1.0) {
83
- hOverD *= this.aspectRatio;
84
- }
85
- const distance = Math.abs(radius / hOverD);
86
- const vvec = Vector3.scale(distance, Vector3.normalize(this.viewVector()));
74
+ fitCameraToBoundingBox(boundingBox, distance, viewVector) {
75
+ const vvec = Vector3.scale(distance, Vector3.normalize(viewVector));
87
76
  const lookAt = BoundingBox.center(boundingBox);
88
77
  const position = Vector3.subtract(lookAt, vvec);
89
- return this.update({ lookAt, position });
78
+ return this.update({ lookAt, position, viewVector: vvec });
90
79
  }
91
80
  /**
92
81
  * Returns the distance from the camera's position to the center
@@ -94,12 +83,11 @@ export class Camera {
94
83
  *
95
84
  * @param boundingBox - The bounding box to determine distance from.
96
85
  */
97
- distanceToBoundingBoxCenter(boundingBox) {
98
- const box = boundingBox || this.boundingBox;
99
- const boundingBoxCenter = BoundingBox.center(box);
100
- const cameraToCenter = Vector3.subtract(this.position, boundingBoxCenter);
101
- const distanceToCenterAlongViewVec = Math.abs(Vector3.dot(Vector3.subtract(this.lookAt, this.position), cameraToCenter)) / Vector3.magnitude(Vector3.subtract(this.lookAt, this.position));
102
- return distanceToCenterAlongViewVec;
86
+ signedDistanceToBoundingBoxCenter(boundingBox) {
87
+ const { position, viewVector } = withPositionAndViewVector(this.data);
88
+ const boundingBoxCenter = BoundingBox.center(boundingBox !== null && boundingBox !== void 0 ? boundingBox : this.boundingBox);
89
+ const cameraToCenter = Vector3.subtract(boundingBoxCenter, position);
90
+ return (Vector3.dot(viewVector, cameraToCenter) / Vector3.magnitude(viewVector));
103
91
  }
104
92
  /**
105
93
  * Specifies that the next render of the camera will be repositioned to one of
@@ -110,26 +98,14 @@ export class Camera {
110
98
  */
111
99
  flyTo(paramsOrQuery) {
112
100
  if (typeof paramsOrQuery !== 'function') {
113
- this.flyToOptions = { flyTo: this.buildFlyToType(paramsOrQuery) };
114
- return this;
101
+ return this.updateFlyToOptions({
102
+ flyTo: this.buildFlyToType(paramsOrQuery),
103
+ });
115
104
  }
116
105
  else {
117
- this.flyToOptions = paramsOrQuery(new FlyToExecutor()).build();
118
- return this;
106
+ return this.updateFlyToOptions(paramsOrQuery(new FlyToExecutor()).build());
119
107
  }
120
108
  }
121
- /**
122
- * Shifts the position of the camera by the given delta.
123
- *
124
- * @param delta The number of units to shift the camera on the X, Y, and Z
125
- * axis.
126
- */
127
- moveBy(delta) {
128
- return this.update({
129
- position: Vector3.add(this.position, delta),
130
- lookAt: Vector3.add(this.lookAt, delta),
131
- });
132
- }
133
109
  viewAll() {
134
110
  return this.fitToBoundingBox(this.boundingBox);
135
111
  }
@@ -161,7 +137,7 @@ export class Camera {
161
137
  }
162
138
  else {
163
139
  this.stream.replaceCamera({
164
- camera: this.data,
140
+ camera: FrameCamera.toProtobuf(this.data),
165
141
  frameCorrelationId: { value: corrId },
166
142
  });
167
143
  return new CameraRenderResult(this.stream, this.decodeFrame, {
@@ -181,22 +157,7 @@ export class Camera {
181
157
  * @param axis A normalized vector to rotate around.
182
158
  */
183
159
  rotateAroundAxis(angleInRadians, axis) {
184
- return this.rotateAroundAxisAtPoint(angleInRadians, this.lookAt, axis);
185
- }
186
- /**
187
- * Repositions the camera by rotating its current position around an axis
188
- * defined at a specific world point.
189
- *
190
- * @param angleInRadians The angle, in radians, to rotate.
191
- * @param point The point in world space to place the axis at.
192
- * @param axis A normalized vector to rotate around.
193
- */
194
- rotateAroundAxisAtPoint(angleInRadians, point, axis) {
195
- return this.update({
196
- position: Vector3.rotateAboutAxis(angleInRadians, this.position, axis, point),
197
- lookAt: Vector3.rotateAboutAxis(angleInRadians, this.lookAt, axis, point),
198
- up: Vector3.rotateAboutAxis(angleInRadians, this.up, axis, Vector3.origin()),
199
- });
160
+ return this.rotateAroundAxisAtPoint(angleInRadians, this.data.lookAt, axis);
200
161
  }
201
162
  /**
202
163
  * Updates the `position` and `up` vectors of the camera to the given standard
@@ -208,24 +169,11 @@ export class Camera {
208
169
  standardView(standardView) {
209
170
  return this.update({
210
171
  position: standardView.position,
172
+ viewVector: Vector3.subtract(Vector3.origin(), standardView.position),
211
173
  lookAt: Vector3.origin(),
212
174
  up: standardView.up,
213
175
  });
214
176
  }
215
- /**
216
- * Updates the `position`, `lookAt` and/or `up` vectors of the camera.
217
- *
218
- * @param camera The values to update the camera to.
219
- */
220
- update(camera) {
221
- return new Camera(this.stream, this.aspectRatio, Object.assign(Object.assign({}, this.data), camera), this.boundingBox, this.decodeFrame);
222
- }
223
- /**
224
- * Returns a `FramePerspectiveCamera` representation.
225
- */
226
- toFrameCamera() {
227
- return new FramePerspectiveCamera(this.position, this.lookAt, this.up, this.near, this.far, this.aspectRatio, this.fovY);
228
- }
229
177
  buildFlyToType(options) {
230
178
  if (options.boundingBox != null) {
231
179
  return { type: 'bounding-box', data: options.boundingBox };
@@ -246,36 +194,165 @@ export class Camera {
246
194
  computeClippingPlanes(camera) {
247
195
  return ClippingPlanes.fromBoundingBoxAndLookAtCamera(this.boundingBox, camera);
248
196
  }
197
+ }
198
+ export class PerspectiveCamera extends Camera {
199
+ constructor(stream, aspect, perspectiveData, boundingBox, decodeFrame, flyToOptions) {
200
+ super(stream, aspect, perspectiveData, boundingBox, decodeFrame, flyToOptions);
201
+ this.perspectiveData = perspectiveData;
202
+ }
249
203
  /**
250
- * Returns the view vector for the camera, which is the direction between the
251
- * `position` and `lookAt` vectors.
204
+ * Shifts the position of the camera by the given delta.
205
+ *
206
+ * @param delta The number of units to shift the camera on the X, Y, and Z
207
+ * axis.
252
208
  */
253
- viewVector() {
209
+ moveBy(delta) {
210
+ return this.update({
211
+ position: Vector3.add(this.position, delta),
212
+ lookAt: Vector3.add(this.lookAt, delta),
213
+ });
214
+ }
215
+ rotateAroundAxisAtPoint(angleInRadians, point, axis) {
216
+ return this.update({
217
+ position: Vector3.rotateAboutAxis(angleInRadians, this.position, axis, point),
218
+ lookAt: Vector3.rotateAboutAxis(angleInRadians, this.lookAt, axis, point),
219
+ up: Vector3.rotateAboutAxis(angleInRadians, this.up, axis, Vector3.origin()),
220
+ });
221
+ }
222
+ fitToBoundingBox(boundingBox) {
223
+ var _a;
224
+ const radius = 1.1 *
225
+ Vector3.magnitude(Vector3.subtract(boundingBox.max, BoundingBox.center(boundingBox)));
226
+ // ratio of the height of the frustum to the distance along the view vector
227
+ let hOverD = Math.tan(((_a = this.fovY) !== null && _a !== void 0 ? _a : 45) * PI_OVER_360);
228
+ if (this.aspect < 1.0) {
229
+ hOverD *= this.aspect;
230
+ }
231
+ const distance = Math.abs(radius / hOverD);
232
+ return super.fitCameraToBoundingBox(boundingBox, distance, this.viewVector);
233
+ }
234
+ update(camera) {
235
+ return new PerspectiveCamera(this.stream, this.aspect, Object.assign(Object.assign({}, this.perspectiveData), camera), this.boundingBox, this.decodeFrame, this.flyToOptions);
236
+ }
237
+ toFrameCamera() {
238
+ var _a;
239
+ return new FramePerspectiveCamera(this.position, this.lookAt, this.up, this.near, this.far, this.aspectRatio, (_a = this.fovY) !== null && _a !== void 0 ? _a : 45);
240
+ }
241
+ get viewVector() {
254
242
  return Vector3.subtract(this.lookAt, this.position);
255
243
  }
256
244
  /**
257
245
  * The position vector for the camera, in world space coordinates.
258
246
  */
259
247
  get position() {
260
- return Object.assign({}, this.data.position);
248
+ return Object.assign({}, this.perspectiveData.position);
261
249
  }
262
250
  /**
263
251
  * A normalized vector representing the up direction.
264
252
  */
265
253
  get up() {
266
- return Object.assign({}, this.data.up);
254
+ return Object.assign({}, this.perspectiveData.up);
267
255
  }
268
256
  /**
269
257
  * A vector, in world space coordinates, of where the camera is pointed at.
270
258
  */
271
259
  get lookAt() {
272
- return Object.assign({}, this.data.lookAt);
260
+ return Object.assign({}, this.perspectiveData.lookAt);
273
261
  }
274
262
  /**
275
263
  * The camera's field of view.
276
264
  */
277
265
  get fovY() {
278
- return 45;
266
+ return this.perspectiveData.fovY;
267
+ }
268
+ /**
269
+ * The aspect ratio of the camera.
270
+ */
271
+ get aspectRatio() {
272
+ return this.aspect;
273
+ }
274
+ /**
275
+ * The camera's near clipping plane.
276
+ */
277
+ get near() {
278
+ const { near } = this.computeClippingPlanes(this.perspectiveData);
279
+ return near;
280
+ }
281
+ /**
282
+ * The camera's far clipping plane.
283
+ */
284
+ get far() {
285
+ const { far } = this.computeClippingPlanes(this.perspectiveData);
286
+ return far;
287
+ }
288
+ updateFlyToOptions(flyToOptions) {
289
+ return new PerspectiveCamera(this.stream, this.aspect, this.perspectiveData, this.boundingBox, this.decodeFrame, flyToOptions);
290
+ }
291
+ }
292
+ export class OrthographicCamera extends Camera {
293
+ constructor(stream, aspect, orthographicData, boundingBox, decodeFrame, flyToOptions) {
294
+ super(stream, aspect, orthographicData, boundingBox, decodeFrame, flyToOptions);
295
+ this.orthographicData = orthographicData;
296
+ }
297
+ /**
298
+ * Shifts the position of the camera by the given delta.
299
+ *
300
+ * @param delta The number of units to shift the camera on the X, Y, and Z
301
+ * axis.
302
+ */
303
+ moveBy(delta) {
304
+ return this.update({
305
+ lookAt: Vector3.add(this.lookAt, delta),
306
+ });
307
+ }
308
+ rotateAroundAxisAtPoint(angleInRadians, point, axis) {
309
+ const updatedLookAt = Vector3.rotateAboutAxis(angleInRadians, this.lookAt, axis, point);
310
+ const updatedPosition = Vector3.rotateAboutAxis(angleInRadians, this.position, axis, point);
311
+ const viewVector = constrainViewVector(Vector3.subtract(updatedLookAt, updatedPosition), BoundingSphere.create(this.boundingBox));
312
+ return this.update({
313
+ viewVector: viewVector,
314
+ lookAt: updatedLookAt,
315
+ up: Vector3.rotateAboutAxis(angleInRadians, this.up, axis, Vector3.origin()),
316
+ });
317
+ }
318
+ fitToBoundingBox(boundingBox) {
319
+ const boundingSphere = BoundingSphere.create(boundingBox);
320
+ const fitAll = super.fitCameraToBoundingBox(boundingBox, boundingSphere.radius, this.viewVector);
321
+ return this.update({
322
+ lookAt: fitAll.lookAt,
323
+ viewVector: fitAll.viewVector,
324
+ fovHeight: boundingSphere.radius * 2,
325
+ });
326
+ }
327
+ update(camera) {
328
+ return new OrthographicCamera(this.stream, this.aspect, Object.assign(Object.assign({}, this.orthographicData), camera), this.boundingBox, this.decodeFrame, this.flyToOptions);
329
+ }
330
+ toFrameCamera() {
331
+ return new FrameOrthographicCamera(constrainViewVector(this.viewVector, BoundingSphere.create(this.boundingBox)), this.lookAt, this.up, this.near, this.far, this.aspectRatio, this.fovHeight);
332
+ }
333
+ get viewVector() {
334
+ return Object.assign({}, this.orthographicData.viewVector);
335
+ }
336
+ get position() {
337
+ return Vector3.add(this.lookAt, Vector3.negate(this.viewVector));
338
+ }
339
+ /**
340
+ * A normalized vector representing the up direction.
341
+ */
342
+ get up() {
343
+ return Object.assign({}, this.orthographicData.up);
344
+ }
345
+ /**
346
+ * A vector, in world space coordinates, of where the camera is pointed at.
347
+ */
348
+ get lookAt() {
349
+ return Object.assign({}, this.orthographicData.lookAt);
350
+ }
351
+ /**
352
+ * The camera's field of view.
353
+ */
354
+ get fovHeight() {
355
+ return this.orthographicData.fovHeight;
279
356
  }
280
357
  /**
281
358
  * The aspect ratio of the camera.
@@ -287,15 +364,18 @@ export class Camera {
287
364
  * The camera's near clipping plane.
288
365
  */
289
366
  get near() {
290
- const { near } = this.computeClippingPlanes(this.data);
367
+ const { near } = this.computeClippingPlanes(this.orthographicData);
291
368
  return near;
292
369
  }
293
370
  /**
294
371
  * The camera's far clipping plane.
295
372
  */
296
373
  get far() {
297
- const { far } = this.computeClippingPlanes(this.data);
374
+ const { far } = this.computeClippingPlanes(this.orthographicData);
298
375
  return far;
299
376
  }
377
+ updateFlyToOptions(flyToOptions) {
378
+ return new OrthographicCamera(this.stream, this.aspect, this.orthographicData, this.boundingBox, this.decodeFrame, flyToOptions);
379
+ }
300
380
  }
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9zY2VuZXMvY2FtZXJhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFM0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBR3hDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzdELE9BQU8sRUFFTCxjQUFjLEVBR2Qsc0JBQXNCLEdBRXZCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUvQyxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztBQU10QyxNQUFNLE9BQU8scUJBQXFCO0VBQ2hDLFlBQTJCLFlBQWlDO0lBQWpDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtFQUFHLENBQUM7RUFFekQsS0FBSztJQUNWLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztFQUMzQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sYUFBYTtFQUdqQixVQUFVLENBQUMsRUFBVTtJQUMxQixPQUFPLElBQUkscUJBQXFCLENBQUM7TUFDL0IsS0FBSyxFQUFFO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsSUFBSSxFQUFFLEVBQUU7T0FDVDtLQUNGLENBQUMsQ0FBQztFQUNMLENBQUM7RUFFTSxjQUFjLENBQUMsRUFBVTtJQUM5QixPQUFPLElBQUkscUJBQXFCLENBQUM7TUFDL0IsS0FBSyxFQUFFO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsSUFBSSxFQUFFLEVBQUU7T0FDVDtLQUNGLENBQUMsQ0FBQztFQUNMLENBQUM7RUFFTSxVQUFVLENBQUMsTUFBK0I7SUFDL0MsT0FBTyxJQUFJLHFC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
381
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FtZXJhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9zY2VuZXMvY2FtZXJhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUd4QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBRUwsY0FBYyxFQUVkLFdBQVcsRUFFWCx1QkFBdUIsRUFDdkIsc0JBQXNCLEdBRXZCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUUvQyxNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQztBQU10QyxNQUFNLE9BQU8scUJBQXFCO0VBQ2hDLFlBQTJCLFlBQWlDO0lBQWpDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtFQUFHLENBQUM7RUFFekQsS0FBSztJQUNWLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztFQUMzQixDQUFDO0NBQ0Y7QUFFRCxNQUFNLE9BQU8sYUFBYTtFQUdqQixVQUFVLENBQUMsRUFBVTtJQUMxQixPQUFPLElBQUkscUJBQXFCLENBQUM7TUFDL0IsS0FBSyxFQUFFO1FBQ0wsSUFBSSxFQUFFLFVBQVU7UUFDaEIsSUFBSSxFQUFFLEVBQUU7T0FDVDtLQUNGLENBQUMsQ0FBQztFQUNMLENBQUM7RUFFTSxjQUFjLENBQUMsRUFBVTtJQUM5QixPQUFPLElBQUkscUJBQXFCLENBQUM7TUFD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
@@ -1,5 +1,6 @@
1
1
  import { vertexvis } from '@vertexvis/frame-streaming-protos';
2
2
  import { toProtoDuration } from '@vertexvis/stream-api';
3
+ import { FrameCamera } from '../types';
3
4
  export function buildSceneOperation(query, operations, context) {
4
5
  const operationTypes = buildOperationTypes(operations);
5
6
  switch (query.type) {
@@ -98,7 +99,7 @@ export function buildFlyToOperation(frameCorrelationId, options, animation) {
98
99
  }) });
99
100
  }
100
101
  case 'camera': {
101
- return Object.assign(Object.assign({}, payload), { camera: options.flyTo.data });
102
+ return Object.assign(Object.assign({}, payload), { camera: FrameCamera.toProtobuf(options.flyTo.data) });
102
103
  }
103
104
  case 'bounding-box': {
104
105
  return Object.assign(Object.assign({}, payload), { boundingBox: {
@@ -174,4 +175,4 @@ function buildOperationTypes(operations) {
174
175
  }
175
176
  });
176
177
  }
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9zY2VuZXMvbWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFXeEQsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxLQUFzQixFQUN0QixVQUEyQixFQUMzQixPQUFtQztFQUVuQyxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztFQUV2RCxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUU7SUFDbEIsS0FBSyxLQUFLLENBQUM7SUFDWCxLQUFLLElBQUk7TUFDUCxPQUFPO1FBQ0wsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDWixPQUFPLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkMsY0FBYyxFQUFFLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztXQUN6QyxDQUFDLENBQUM7U0FDSjtRQUNELGNBQWM7T0FDZixDQUFDO0lBQ0osS0FBSyxTQUFTLENBQUM7SUFDZixLQUFLLGFBQWE7TUFDaEIsT0FBTztRQUNMLElBQUksRUFBRTtVQUNKLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7U0FDM0M7UUFDRCxjQUFjO09BQ2YsQ0FBQztJQUNKLEtBQUssS0FBSztNQUNSLE9BQU87UUFDTCxHQUFHLEVBQUUsRUFBRTtRQUNQLGNBQWM7T0FDZixDQUFDO0lBQ0osS0FBSyxrQkFBa0I7TUFDckIsT0FBTztRQUNMLGNBQWMsRUFBRTtVQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUs7VUFDeEIsR0FBRyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRztTQUNyQjtRQUNE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
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9zY2VuZXMvbWFwcGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUU5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHeEQsT0FBTyxFQUFvQixXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFRekQsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxLQUFzQixFQUN0QixVQUEyQixFQUMzQixPQUFtQztFQUVuQyxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztFQUV2RCxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUU7SUFDbEIsS0FBSyxLQUFLLENBQUM7SUFDWCxLQUFLLElBQUk7TUFDUCxPQUFPO1FBQ0wsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7VUFDWixPQUFPLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdkMsY0FBYyxFQUFFLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztXQUN6QyxDQUFDLENBQUM7U0FDSjtRQUNELGNBQWM7T0FDZixDQUFDO0lBQ0osS0FBSyxTQUFTLENBQUM7SUFDZixLQUFLLGFBQWE7TUFDaEIsT0FBTztRQUNMLElBQUksRUFBRTtVQUNKLGNBQWMsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7U0FDM0M7UUFDRCxjQUFjO09BQ2YsQ0FBQztJQUNKLEtBQUssS0FBSztNQUNSLE9BQU87UUFDTCxHQUFHLEVBQUUsRUFBRTtRQUNQLGNBQWM7T0FDZixDQUFDO0lBQ0osS0FBSyxrQkFBa0I7TUFDckIsT0FBTztRQUNMLGNBQWMsRUFBRTtVQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUs7VUFDeEIsR0FB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
@@ -1,6 +1,6 @@
1
1
  import { Dimensions, Point } from '@vertexvis/geometry';
2
- import { InvalidArgumentError } from '../errors';
3
- import { Camera } from './camera';
2
+ import { InvalidArgumentError, InvalidCameraError } from '../errors';
3
+ import { OrthographicCamera, PerspectiveCamera } from '.';
4
4
  import { fromHex } from './colorMaterial';
5
5
  import { CrossSectioner } from './crossSectioner';
6
6
  import { buildSceneOperation } from './mapper';
@@ -171,12 +171,25 @@ export class Scene {
171
171
  */
172
172
  camera() {
173
173
  const { scene } = this.frame;
174
- const data = {
175
- position: scene.camera.position,
176
- lookAt: scene.camera.lookAt,
177
- up: scene.camera.up,
178
- };
179
- return new Camera(this.stream, Dimensions.aspectRatio(this.viewport()), data, this.frame.scene.boundingBox, this.decodeFrame);
174
+ if (scene.camera.isOrthographic()) {
175
+ return new OrthographicCamera(this.stream, Dimensions.aspectRatio(this.viewport()), {
176
+ viewVector: scene.camera.viewVector,
177
+ lookAt: scene.camera.lookAt,
178
+ up: scene.camera.up,
179
+ fovHeight: scene.camera.fovHeight,
180
+ }, this.frame.scene.boundingBox, this.decodeFrame);
181
+ }
182
+ else if (scene.camera.isPerspective()) {
183
+ return new PerspectiveCamera(this.stream, Dimensions.aspectRatio(this.viewport()), {
184
+ position: scene.camera.position,
185
+ lookAt: scene.camera.lookAt,
186
+ up: scene.camera.up,
187
+ fovY: scene.camera.fovY,
188
+ }, this.frame.scene.boundingBox, this.decodeFrame);
189
+ }
190
+ else {
191
+ throw new InvalidCameraError('Cannot retrieve camera. Scene has an unknown or invalid camera type.');
192
+ }
180
193
  }
181
194
  boundingBox() {
182
195
  return this.frame.scene.boundingBox;
@@ -206,4 +219,4 @@ export class Scene {
206
219
  return this.imageScaleProvider() || Point.create(1, 1);
207
220
  }
208
221
  }
209
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3NjZW5lcy9zY2VuZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXJFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUdqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2xDLE9BQU8sRUFBaUIsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMvQyxPQUFPLEVBR0wscUJBQXFCLEdBQ3RCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBbUIsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVd4Qzs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLDBCQUEwQjtFQUtyQyxZQUNVLEtBQXNCLEVBQ3RCLHdCQUF1QyxFQUMvQyxZQUFvQztJQUY1QixVQUFLLEdBQUwsS0FBSyxDQUFpQjtJQUN0Qiw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQWU7SUFHL0MsSUFBSSxDQUFDLE9BQU87TUFDVixZQUFZLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUkscUJBQXFCLEVBQUUsQ0FBQztFQUN0RSxDQUFDO0VBRU0sZ0JBQWdCLENBQ3JCLEtBQTZCO0lBRTdCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO01BQzdCLE9BQU8sSUFBSSwwQkFBMEIsQ0FDbkMsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsd0JBQXdCLEVBQzdCLElBQUksQ0FBQyxP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
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3NjZW5lcy9zY2VuZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQWUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSXJFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUdyRSxPQUFPLEVBQVUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxHQUFHLENBQUM7QUFDbEUsT0FBTyxFQUFpQixPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQy9DLE9BQU8sRUFHTCxxQkFBcUIsR0FDdEIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFtQixzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBV3hDOzs7O0dBSUc7QUFDSCxNQUFNLE9BQU8sMEJBQTBCO0VBS3JDLFlBQ1UsS0FBc0IsRUFDdEIsd0JBQXVDLEVBQy9DLFlBQW9DO0lBRjVCLFVBQUssR0FBTCxLQUFLLENBQWlCO0lBQ3RCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBZTtJQUcvQyxJQUFJLENBQUMsT0FBTztNQUNWLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO0VBQ3RFLENBQUM7RUFFTSxnQkFBZ0IsQ0FDckIsS0FBNkI7SUFFN0IsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7TUFDN0IsT0FBTyxJQUFJLDBCQUEwQixDQUNuQyxJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksQ0FB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
@@ -1,24 +1,52 @@
1
- import { BoundingBox, Vector3 } from '@vertexvis/geometry';
1
+ import { BoundingSphere, Vector3 } from '@vertexvis/geometry';
2
+ import { isOrthographicFrameCamera, } from './frameCamera';
2
3
  export function fromBoundingBoxAndLookAtCamera(boundingBox, camera) {
3
- const boundingBoxCenter = BoundingBox.center(boundingBox);
4
- const cameraToCenter = Vector3.subtract(camera.position, boundingBoxCenter);
5
- const centerToBoundingPlane = Vector3.subtract(boundingBox.max, boundingBoxCenter);
6
- const distanceToCenterAlongViewVec = Math.abs(Vector3.dot(Vector3.subtract(camera.lookAt, camera.position), cameraToCenter)) / Vector3.magnitude(Vector3.subtract(camera.lookAt, camera.position));
7
- const radius = 1.1 * Vector3.magnitude(centerToBoundingPlane);
8
- let far = distanceToCenterAlongViewVec + radius;
9
- let near = far * 0.01;
10
- if (near > distanceToCenterAlongViewVec - radius) {
11
- if (near > 1000) {
12
- const difference = near - 1000;
13
- near = 1000;
14
- far -= difference;
15
- }
16
- else {
17
- }
4
+ return isOrthographicFrameCamera(camera)
5
+ ? fromBoundingBoxAndOrthographicCamera(boundingBox, camera)
6
+ : fromBoundingBoxAndPerspectiveCamera(boundingBox, camera);
7
+ }
8
+ // Logic pulled from https://github.com/Vertexvis/rendering-client-lib-java/blob/master/src/main/java/com/vertexvis/rendering/graphics/PerspectiveCamera.java#L65
9
+ // and needs to remain in sync with that computation.
10
+ // TODO: revisit computation of these values in a single location
11
+ export function fromBoundingBoxAndPerspectiveCamera(boundingBox, camera) {
12
+ const boundingSphere = BoundingSphere.create(boundingBox);
13
+ const minRange = boundingSphere.epsilon * 1e2;
14
+ const signedDistToEye = Vector3.dot(Vector3.subtract(boundingSphere.center, camera.position), Vector3.normalize(Vector3.subtract(camera.lookAt, camera.position)));
15
+ const bRadius = Math.max(boundingSphere.radius, minRange);
16
+ let newFar = bRadius + signedDistToEye < minRange
17
+ ? bRadius * 3.0
18
+ : bRadius + signedDistToEye;
19
+ let newNear = newFar - bRadius * 2.0 < minRange
20
+ ? Math.min(minRange, newFar)
21
+ : newFar - bRadius * 2.0;
22
+ if (newFar - newNear < minRange) {
23
+ newNear = Math.max(newNear, minRange);
24
+ newFar += newNear + minRange;
18
25
  }
19
- else {
20
- near = distanceToCenterAlongViewVec - radius;
26
+ else if (newNear / newFar < 0.0001) {
27
+ newNear = newFar * 0.0001;
21
28
  }
22
- return { far, near };
29
+ if (newNear > newFar - bRadius * 2.0) {
30
+ if (newNear > 1000 + minRange) {
31
+ newFar -= newNear - 1000;
32
+ newNear = 1000;
33
+ }
34
+ }
35
+ return {
36
+ near: newNear,
37
+ far: newFar,
38
+ };
39
+ }
40
+ // Logic pulled from https://github.com/Vertexvis/rendering-client-lib-java/blob/master/src/main/java/com/vertexvis/rendering/graphics/OrthographicCamera.java#L35
41
+ // and needs to remain in sync with that computation.
42
+ // TODO: revisit computation of these values in a single location
43
+ export function fromBoundingBoxAndOrthographicCamera(boundingBox, camera) {
44
+ const boundingSphere = BoundingSphere.create(boundingBox);
45
+ const minRange = boundingSphere.epsilon * 1e2;
46
+ const bRadius = Math.max(boundingSphere.radius, minRange);
47
+ return {
48
+ near: -bRadius,
49
+ far: bRadius,
50
+ };
23
51
  }
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcHBpbmdQbGFuZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzL2NsaXBwaW5nUGxhbmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFTM0QsTUFBTSxVQUFVLDhCQUE4QixDQUM1QyxXQUFvQyxFQUNwQyxNQUFtQjtFQUVuQixNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDMUQsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7RUFDNUUsTUFBTSxxQkFBcUIsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUM1QyxXQUFXLENBQUMsR0FBRyxFQUNmLGlCQUFpQixDQUNsQixDQUFDO0VBQ0YsTUFBTSw0QkFBNEIsR0FDaEMsSUFBSSxDQUFDLEdBQUcsQ0FDTixPQUFPLENBQUMsR0FBRyxDQUNULE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQ2hELGNBQWMsQ0FDZixDQUNGLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7RUFDMUUsTUFBTSxNQUFNLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQztFQUM5RCxJQUFJLEdBQUcsR0FBRyw0QkFBNEIsR0FBRyxNQUFNLENBQUM7RUFDaEQsSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztFQUV0QixJQUFJLElBQUksR0FBRyw0QkFBNEIsR0FBRyxNQUFNLEVBQUU7SUFDaEQsSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO01BQ2YsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztNQUMvQixJQUFJLEdBQUcsSUFBSSxDQUFDO01BQ1osR0FBRyxJQUFJLFVBQVUsQ0FBQztLQUNuQjtTQUFNO0tBQ047R0FDRjtPQUFNO0lBQ0wsSUFBSSxHQUFHLDRCQUE0QixHQUFHLE1BQU0sQ0FBQztHQUM5QztFQUVELE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDdkIsQ0FBQyJ9
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcHBpbmdQbGFuZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzL2NsaXBwaW5nUGxhbmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFM0UsT0FBTyxFQUVMLHlCQUF5QixHQUcxQixNQUFNLGVBQWUsQ0FBQztBQU92QixNQUFNLFVBQVUsOEJBQThCLENBQzVDLFdBQW9DLEVBQ3BDLE1BQW1CO0VBRW5CLE9BQU8seUJBQXlCLENBQUMsTUFBTSxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxvQ0FBb0MsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQzNELENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0QsQ0FBQztBQUVELGlLQUFpSztBQUNqSyxxREFBcUQ7QUFDckQsaUVBQWlFO0FBQ2pFLE1BQU0sVUFBVSxtQ0FBbUMsQ0FDakQsV0FBb0MsRUFDcEMsTUFBOEI7RUFFOUIsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztFQUMxRCxNQUFNLFFBQVEsR0FBRyxjQUFjLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztFQUU5QyxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUNqQyxPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUN4RCxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDcEUsQ0FBQztFQUVGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQztFQUUxRCxJQUFJLE1BQU0sR0FDUixPQUFPLEdBQUcsZUFBZSxHQUFHLFFBQVE7SUFDbEMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxHQUFHO0lBQ2YsQ0FBQyxDQUFDLE9BQU8sR0FBRyxlQUFlLENBQUM7RUFFaEMsSUFBSSxPQUFPLEdBQ1QsTUFBTSxHQUFHLE9BQU8sR0FBRyxHQUFHLEdBQUcsUUFBUTtJQUMvQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDO0lBQzVCLENBQUMsQ0FBQyxNQUFNLEdBQUcsT0FBTyxHQUFHLEdBQUcsQ0FBQztFQUU3QixJQUFJLE1BQU0sR0FBRyxPQUFPLEdBQUcsUUFBUSxFQUFFO0lBQy9CLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN0QyxNQUFNLElBQUksT0FBTyxHQUFHLFFBQVEsQ0FBQztHQUM5QjtPQUFNLElBQUksT0FBTyxHQUFHLE1BQU0sR0FBRyxNQUFNLEVBQUU7SUFDcEMsT0FBTyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7R0FDM0I7RUFFRCxJQUFJLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxHQUFHLEdBQUcsRUFBRTtJQUNwQyxJQUFJLE9BQU8sR0FBRyxJQUFJLEdBQUcsUUFBUSxFQUFFO01BQzdCLE1BQU0sSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO01BQ3pCLE9BQU8sR0FBRyxJQUFJLENBQUM7S0FDaEI7R0FDRjtFQUVELE9BQU87SUFDTCxJQUFJLEVBQUUsT0FBTztJQUNiLEdBQUcsRUFBRSxNQUFNO0dBQ1osQ0FBQztBQUNKLENBQUM7QUFFRCxrS0FBa0s7QUFDbEsscURBQXFEO0FBQ3JELGlFQUFpRTtBQUNqRSxNQUFNLFVBQVUsb0NBQW9DLENBQ2xELFdBQW9DLEVBQ3BDLE1BQStCO0VBRS9CLE1BQU0sY0FBYyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7RUFDMUQsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7RUFFOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0VBRTFELE9BQU87SUFDTCxJQUFJLEVBQUUsQ0FBQyxPQUFPO0lBQ2QsR0FBRyxFQUFFLE9BQU87R0FDYixDQUFDO0FBQ0osQ0FBQyJ9