bruce-cesium 5.7.9 → 5.8.1

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 (230) hide show
  1. package/dist/bruce-cesium.es5.js +32308 -0
  2. package/dist/bruce-cesium.es5.js.map +1 -0
  3. package/dist/bruce-cesium.umd.js +32232 -0
  4. package/dist/bruce-cesium.umd.js.map +1 -0
  5. package/dist/lib/bruce-cesium.js +76 -0
  6. package/dist/lib/bruce-cesium.js.map +1 -0
  7. package/dist/lib/internal/cesium-utils.js +109 -0
  8. package/dist/lib/internal/cesium-utils.js.map +1 -0
  9. package/dist/lib/internal/js-utils.js +22 -0
  10. package/dist/lib/internal/js-utils.js.map +1 -0
  11. package/dist/lib/internal/limited-log.js +17 -0
  12. package/dist/lib/internal/limited-log.js.map +1 -0
  13. package/dist/lib/rendering/cesium-animated-in-out.js +166 -0
  14. package/dist/lib/rendering/cesium-animated-in-out.js.map +1 -0
  15. package/dist/lib/rendering/cesium-animated-property.js +1111 -0
  16. package/dist/lib/rendering/cesium-animated-property.js.map +1 -0
  17. package/dist/lib/rendering/entity-gatherer.js +327 -0
  18. package/dist/lib/rendering/entity-gatherer.js.map +1 -0
  19. package/dist/lib/rendering/entity-render-engine-model3d.js +689 -0
  20. package/dist/lib/rendering/entity-render-engine-model3d.js.map +1 -0
  21. package/dist/lib/rendering/entity-render-engine-point.js +984 -0
  22. package/dist/lib/rendering/entity-render-engine-point.js.map +1 -0
  23. package/dist/lib/rendering/entity-render-engine-polygon.js +669 -0
  24. package/dist/lib/rendering/entity-render-engine-polygon.js.map +1 -0
  25. package/dist/lib/rendering/entity-render-engine-polyline.js +415 -0
  26. package/dist/lib/rendering/entity-render-engine-polyline.js.map +1 -0
  27. package/dist/lib/rendering/entity-render-engine.js +442 -0
  28. package/dist/lib/rendering/entity-render-engine.js.map +1 -0
  29. package/dist/lib/rendering/getters/batched-data-getter.js +91 -0
  30. package/dist/lib/rendering/getters/batched-data-getter.js.map +1 -0
  31. package/dist/lib/rendering/getters/entity-filter-getter.js +634 -0
  32. package/dist/lib/rendering/getters/entity-filter-getter.js.map +1 -0
  33. package/dist/lib/rendering/getters/entity-globe.js +172 -0
  34. package/dist/lib/rendering/getters/entity-globe.js.map +1 -0
  35. package/dist/lib/rendering/menu-item-creator.js +354 -0
  36. package/dist/lib/rendering/menu-item-creator.js.map +1 -0
  37. package/dist/lib/rendering/menu-item-manager.js +464 -0
  38. package/dist/lib/rendering/menu-item-manager.js.map +1 -0
  39. package/dist/lib/rendering/relation-render-engine.js +235 -0
  40. package/dist/lib/rendering/relation-render-engine.js.map +1 -0
  41. package/dist/lib/rendering/render-managers/common/cesium-parabola.js +368 -0
  42. package/dist/lib/rendering/render-managers/common/cesium-parabola.js.map +1 -0
  43. package/dist/lib/rendering/render-managers/common/entity-label.js +703 -0
  44. package/dist/lib/rendering/render-managers/common/entity-label.js.map +1 -0
  45. package/dist/lib/rendering/render-managers/common/point-clustering.js +826 -0
  46. package/dist/lib/rendering/render-managers/common/point-clustering.js.map +1 -0
  47. package/dist/lib/rendering/render-managers/common/shared-getters.js +187 -0
  48. package/dist/lib/rendering/render-managers/common/shared-getters.js.map +1 -0
  49. package/dist/lib/rendering/render-managers/data-source/data-source-static-csv-manager.js +668 -0
  50. package/dist/lib/rendering/render-managers/data-source/data-source-static-csv-manager.js.map +1 -0
  51. package/dist/lib/rendering/render-managers/data-source/data-source-static-kml-manager.js +92 -0
  52. package/dist/lib/rendering/render-managers/data-source/data-source-static-kml-manager.js.map +1 -0
  53. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js +143 -0
  54. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js.map +1 -0
  55. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js +510 -0
  56. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js.map +1 -0
  57. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js +717 -0
  58. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js.map +1 -0
  59. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +999 -0
  60. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js.map +1 -0
  61. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js +186 -0
  62. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js.map +1 -0
  63. package/dist/lib/rendering/render-managers/other/assembly-render-manager.js +226 -0
  64. package/dist/lib/rendering/render-managers/other/assembly-render-manager.js.map +1 -0
  65. package/dist/lib/rendering/render-managers/other/google-search-render-manager.js +430 -0
  66. package/dist/lib/rendering/render-managers/other/google-search-render-manager.js.map +1 -0
  67. package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js +290 -0
  68. package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js.map +1 -0
  69. package/dist/lib/rendering/render-managers/other/relations-render-manager.js +401 -0
  70. package/dist/lib/rendering/render-managers/other/relations-render-manager.js.map +1 -0
  71. package/dist/lib/rendering/render-managers/render-manager.js +276 -0
  72. package/dist/lib/rendering/render-managers/render-manager.js.map +1 -0
  73. package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js +356 -0
  74. package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js.map +1 -0
  75. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +861 -0
  76. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js.map +1 -0
  77. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js +279 -0
  78. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js.map +1 -0
  79. package/dist/lib/rendering/render-managers/tilesets/tileset-google-photos-render-manager.js +104 -0
  80. package/dist/lib/rendering/render-managers/tilesets/tileset-google-photos-render-manager.js.map +1 -0
  81. package/dist/lib/rendering/render-managers/tilesets/tileset-i3s-render-manager.js +81 -0
  82. package/dist/lib/rendering/render-managers/tilesets/tileset-i3s-render-manager.js.map +1 -0
  83. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js +378 -0
  84. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js.map +1 -0
  85. package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js +140 -0
  86. package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js.map +1 -0
  87. package/dist/lib/rendering/tile-render-engine.js +1328 -0
  88. package/dist/lib/rendering/tile-render-engine.js.map +1 -0
  89. package/dist/lib/rendering/tileset-render-engine.js +588 -0
  90. package/dist/lib/rendering/tileset-render-engine.js.map +1 -0
  91. package/dist/lib/rendering/tileset-styler.js +590 -0
  92. package/dist/lib/rendering/tileset-styler.js.map +1 -0
  93. package/dist/lib/rendering/view-render-engine.js +1004 -0
  94. package/dist/lib/rendering/view-render-engine.js.map +1 -0
  95. package/dist/lib/rendering/visual-register-culler.js +676 -0
  96. package/dist/lib/rendering/visual-register-culler.js.map +1 -0
  97. package/dist/lib/rendering/visuals-register.js +1741 -0
  98. package/dist/lib/rendering/visuals-register.js.map +1 -0
  99. package/dist/lib/utils/cesium-entity-styler.js +914 -0
  100. package/dist/lib/utils/cesium-entity-styler.js.map +1 -0
  101. package/dist/lib/utils/drawing-utils.js +308 -0
  102. package/dist/lib/utils/drawing-utils.js.map +1 -0
  103. package/dist/lib/utils/entity-utils.js +1382 -0
  104. package/dist/lib/utils/entity-utils.js.map +1 -0
  105. package/dist/lib/utils/measure-utils.js +73 -0
  106. package/dist/lib/utils/measure-utils.js.map +1 -0
  107. package/dist/lib/utils/simplify-geometry.js +323 -0
  108. package/dist/lib/utils/simplify-geometry.js.map +1 -0
  109. package/dist/lib/utils/view-utils.js +392 -0
  110. package/dist/lib/utils/view-utils.js.map +1 -0
  111. package/dist/lib/viewer/cesium-view-monitor.js +393 -0
  112. package/dist/lib/viewer/cesium-view-monitor.js.map +1 -0
  113. package/dist/lib/viewer/viewer-event-tracker.js +70 -0
  114. package/dist/lib/viewer/viewer-event-tracker.js.map +1 -0
  115. package/dist/lib/viewer/viewer-utils.js +310 -0
  116. package/dist/lib/viewer/viewer-utils.js.map +1 -0
  117. package/dist/lib/widgets/common/draw-3d-polygon.js +458 -0
  118. package/dist/lib/widgets/common/draw-3d-polygon.js.map +1 -0
  119. package/dist/lib/widgets/common/draw-3d-polyline.js +415 -0
  120. package/dist/lib/widgets/common/draw-3d-polyline.js.map +1 -0
  121. package/dist/lib/widgets/common/measure-creator.js +468 -0
  122. package/dist/lib/widgets/common/measure-creator.js.map +1 -0
  123. package/dist/lib/widgets/common/walkthrough.js +336 -0
  124. package/dist/lib/widgets/common/walkthrough.js.map +1 -0
  125. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-fullscreen.js +36 -0
  126. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-fullscreen.js.map +1 -0
  127. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-search.js +437 -0
  128. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-search.js.map +1 -0
  129. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar.js +38 -0
  130. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar.js.map +1 -0
  131. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.js +219 -0
  132. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.js.map +1 -0
  133. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-user.js +304 -0
  134. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-user.js.map +1 -0
  135. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab.js +29 -0
  136. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab.js.map +1 -0
  137. package/dist/lib/widgets/widget-bookmarks.js +497 -0
  138. package/dist/lib/widgets/widget-bookmarks.js.map +1 -0
  139. package/dist/lib/widgets/widget-branding.js +165 -0
  140. package/dist/lib/widgets/widget-branding.js.map +1 -0
  141. package/dist/lib/widgets/widget-cursorbar.js +1179 -0
  142. package/dist/lib/widgets/widget-cursorbar.js.map +1 -0
  143. package/dist/lib/widgets/widget-embedded-info-view.js +201 -0
  144. package/dist/lib/widgets/widget-embedded-info-view.js.map +1 -0
  145. package/dist/lib/widgets/widget-info-view.js +681 -0
  146. package/dist/lib/widgets/widget-info-view.js.map +1 -0
  147. package/dist/lib/widgets/widget-left-panel.js +548 -0
  148. package/dist/lib/widgets/widget-left-panel.js.map +1 -0
  149. package/dist/lib/widgets/widget-nav-compass.js +469 -0
  150. package/dist/lib/widgets/widget-nav-compass.js.map +1 -0
  151. package/dist/lib/widgets/widget-view-bar.js +284 -0
  152. package/dist/lib/widgets/widget-view-bar.js.map +1 -0
  153. package/dist/lib/widgets/widget.js +66 -0
  154. package/dist/lib/widgets/widget.js.map +1 -0
  155. package/dist/types/bruce-cesium.d.ts +58 -0
  156. package/dist/types/internal/cesium-utils.d.ts +23 -0
  157. package/dist/types/internal/js-utils.d.ts +8 -0
  158. package/dist/types/internal/limited-log.d.ts +6 -0
  159. package/dist/types/rendering/cesium-animated-in-out.d.ts +12 -0
  160. package/dist/types/rendering/cesium-animated-property.d.ts +245 -0
  161. package/dist/types/rendering/entity-gatherer.d.ts +36 -0
  162. package/dist/types/rendering/entity-render-engine-model3d.d.ts +56 -0
  163. package/dist/types/rendering/entity-render-engine-point.d.ts +73 -0
  164. package/dist/types/rendering/entity-render-engine-polygon.d.ts +26 -0
  165. package/dist/types/rendering/entity-render-engine-polyline.d.ts +47 -0
  166. package/dist/types/rendering/entity-render-engine.d.ts +108 -0
  167. package/dist/types/rendering/getters/batched-data-getter.d.ts +28 -0
  168. package/dist/types/rendering/getters/entity-filter-getter.d.ts +104 -0
  169. package/dist/types/rendering/getters/entity-globe.d.ts +21 -0
  170. package/dist/types/rendering/menu-item-creator.d.ts +53 -0
  171. package/dist/types/rendering/menu-item-manager.d.ts +85 -0
  172. package/dist/types/rendering/relation-render-engine.d.ts +32 -0
  173. package/dist/types/rendering/render-managers/common/cesium-parabola.d.ts +39 -0
  174. package/dist/types/rendering/render-managers/common/entity-label.d.ts +82 -0
  175. package/dist/types/rendering/render-managers/common/point-clustering.d.ts +91 -0
  176. package/dist/types/rendering/render-managers/common/shared-getters.d.ts +41 -0
  177. package/dist/types/rendering/render-managers/data-source/data-source-static-csv-manager.d.ts +41 -0
  178. package/dist/types/rendering/render-managers/data-source/data-source-static-kml-manager.d.ts +25 -0
  179. package/dist/types/rendering/render-managers/entities/entities-datalab-render-manager.d.ts +31 -0
  180. package/dist/types/rendering/render-managers/entities/entities-ids-render-manager.d.ts +76 -0
  181. package/dist/types/rendering/render-managers/entities/entities-loaded-render-manager.d.ts +90 -0
  182. package/dist/types/rendering/render-managers/entities/entities-render-manager.d.ts +90 -0
  183. package/dist/types/rendering/render-managers/entities/entity-render-manager.d.ts +42 -0
  184. package/dist/types/rendering/render-managers/other/assembly-render-manager.d.ts +38 -0
  185. package/dist/types/rendering/render-managers/other/google-search-render-manager.d.ts +45 -0
  186. package/dist/types/rendering/render-managers/other/legacy-relations-render-manager.d.ts +60 -0
  187. package/dist/types/rendering/render-managers/other/relations-render-manager.d.ts +53 -0
  188. package/dist/types/rendering/render-managers/render-manager.d.ts +30 -0
  189. package/dist/types/rendering/render-managers/tilesets/tileset-arb-render-manager.d.ts +37 -0
  190. package/dist/types/rendering/render-managers/tilesets/tileset-cad-render-manager.d.ts +86 -0
  191. package/dist/types/rendering/render-managers/tilesets/tileset-entities-render-manager.d.ts +41 -0
  192. package/dist/types/rendering/render-managers/tilesets/tileset-google-photos-render-manager.d.ts +26 -0
  193. package/dist/types/rendering/render-managers/tilesets/tileset-i3s-render-manager.d.ts +25 -0
  194. package/dist/types/rendering/render-managers/tilesets/tileset-osm-render-manager.d.ts +48 -0
  195. package/dist/types/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.d.ts +27 -0
  196. package/dist/types/rendering/tile-render-engine.d.ts +80 -0
  197. package/dist/types/rendering/tileset-render-engine.d.ts +99 -0
  198. package/dist/types/rendering/tileset-styler.d.ts +86 -0
  199. package/dist/types/rendering/view-render-engine.d.ts +32 -0
  200. package/dist/types/rendering/visual-register-culler.d.ts +18 -0
  201. package/dist/types/rendering/visuals-register.d.ts +361 -0
  202. package/dist/types/utils/cesium-entity-styler.d.ts +103 -0
  203. package/dist/types/utils/drawing-utils.d.ts +59 -0
  204. package/dist/types/utils/entity-utils.d.ts +133 -0
  205. package/dist/types/utils/measure-utils.d.ts +20 -0
  206. package/dist/types/utils/simplify-geometry.d.ts +19 -0
  207. package/dist/types/utils/view-utils.d.ts +101 -0
  208. package/dist/types/viewer/cesium-view-monitor.d.ts +35 -0
  209. package/dist/types/viewer/viewer-event-tracker.d.ts +47 -0
  210. package/dist/types/viewer/viewer-utils.d.ts +88 -0
  211. package/dist/types/widgets/common/draw-3d-polygon.d.ts +62 -0
  212. package/dist/types/widgets/common/draw-3d-polyline.d.ts +50 -0
  213. package/dist/types/widgets/common/measure-creator.d.ts +60 -0
  214. package/dist/types/widgets/common/walkthrough.d.ts +37 -0
  215. package/dist/types/widgets/controls-view-bar/widget-control-view-bar-fullscreen.d.ts +10 -0
  216. package/dist/types/widgets/controls-view-bar/widget-control-view-bar-search.d.ts +18 -0
  217. package/dist/types/widgets/controls-view-bar/widget-control-view-bar.d.ts +23 -0
  218. package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.d.ts +11 -0
  219. package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab-user.d.ts +24 -0
  220. package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab.d.ts +17 -0
  221. package/dist/types/widgets/widget-bookmarks.d.ts +40 -0
  222. package/dist/types/widgets/widget-branding.d.ts +15 -0
  223. package/dist/types/widgets/widget-cursorbar.d.ts +48 -0
  224. package/dist/types/widgets/widget-embedded-info-view.d.ts +13 -0
  225. package/dist/types/widgets/widget-info-view.d.ts +21 -0
  226. package/dist/types/widgets/widget-left-panel.d.ts +73 -0
  227. package/dist/types/widgets/widget-nav-compass.d.ts +27 -0
  228. package/dist/types/widgets/widget-view-bar.d.ts +37 -0
  229. package/dist/types/widgets/widget.d.ts +29 -0
  230. package/package.json +1 -1
@@ -0,0 +1,861 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TilesetCadRenderManager = void 0;
4
+ const bruce_models_1 = require("bruce-models");
5
+ const Cesium = require("cesium");
6
+ const tileset_render_engine_1 = require("../../tileset-render-engine");
7
+ const js_utils_1 = require("../../../internal/js-utils");
8
+ const shared_getters_1 = require("../../render-managers/common/shared-getters");
9
+ const view_utils_1 = require("../../../utils/view-utils");
10
+ const cesium_animated_property_1 = require("../../cesium-animated-property");
11
+ const entity_utils_1 = require("../../../utils/entity-utils");
12
+ function coordsFromHistoricEntity(entity) {
13
+ var _a;
14
+ if (!entity) {
15
+ return null;
16
+ }
17
+ const location = entity.Bruce.Location;
18
+ if (!location || !location.latitude || !location.longitude) {
19
+ return null;
20
+ }
21
+ const pos3d = Cesium.Cartesian3.fromDegrees(location.longitude, location.latitude, 0);
22
+ const heading = ((_a = entity.Bruce.Transform) === null || _a === void 0 ? void 0 : _a.heading) || 0;
23
+ return coordsFromHistoricPos3d(null, entity.Bruce.ID, pos3d, heading);
24
+ }
25
+ function coordsFromHistoricPos3d(cTileset, rootId, pos3d, heading) {
26
+ if (!pos3d) {
27
+ return null;
28
+ }
29
+ // Jank code that hacks the position to be different.
30
+ // This can mess up our panels so we'll need to disable editing until a better system is in place.
31
+ const location = Cesium.Cartographic.fromCartesian(pos3d);
32
+ const lat = Cesium.Math.toDegrees(location.latitude);
33
+ const lon = Cesium.Math.toDegrees(location.longitude);
34
+ const alt = location.height;
35
+ const prevCoords = cTileset === null || cTileset === void 0 ? void 0 : cTileset._bruceCoords;
36
+ const coords = {
37
+ "Entity.ID": null,
38
+ ...prevCoords,
39
+ transform: {
40
+ ...prevCoords === null || prevCoords === void 0 ? void 0 : prevCoords.transform,
41
+ heading: heading
42
+ },
43
+ ucs: {
44
+ name: null,
45
+ transform: null,
46
+ ...prevCoords === null || prevCoords === void 0 ? void 0 : prevCoords.ucs,
47
+ "Entity.ID": rootId,
48
+ location: {
49
+ altitude: alt,
50
+ latitude: lat,
51
+ longitude: lon
52
+ }
53
+ }
54
+ };
55
+ return coords;
56
+ }
57
+ /**
58
+ * Manager for rendering CAD tilesets.
59
+ * CAD tilesets are referred to as "MODEL" tilesets in some other areas of Bruce code.
60
+ */
61
+ var TilesetCadRenderManager;
62
+ (function (TilesetCadRenderManager) {
63
+ class Manager {
64
+ get Disposed() {
65
+ return this.disposed;
66
+ }
67
+ get ModelSpace() {
68
+ return this.modelSpace;
69
+ }
70
+ get Tileset() {
71
+ return this.cTileset;
72
+ }
73
+ get Styler() {
74
+ return this.styler;
75
+ }
76
+ constructor(params) {
77
+ this.disposed = false;
78
+ this.modelSpace = false;
79
+ this.cTileset = null;
80
+ this.styler = new tileset_render_engine_1.TilesetRenderEngine.Styler();
81
+ // Quick look-up of the model tree nodes by entity/geomId.
82
+ // Saves us from recursing the model tree for every feature.
83
+ this.treeNodeByGeomId = null;
84
+ this.treeNodeByEntityId = null;
85
+ // Cache of 'something isolated' that we detect and use to calculate a default show state.
86
+ // It's pretty expensive so we save it for a few seconds inbetween checks.
87
+ this.somethingIsolated = null;
88
+ this.somethingIsolatedDateTime = null;
89
+ // Entity ID -> rego.
90
+ // We retain this information as a quick look-up on what has been registered.
91
+ // This lets us properly assign siblings to the same rego when hierarchy items are marked as collapsed.
92
+ this.loadedCesiumEntities = {};
93
+ // Callback to dispose the link between scene time and the root's historic position.
94
+ this.viewerDateTimeChangeRemoval = null;
95
+ // Series of points to help interpolate movement when the timeline changes.
96
+ this.historicPossesInitialLoaded = false;
97
+ this.historicAnimation = null;
98
+ this.historicPossesLoadingProm = null;
99
+ const { viewer, register: visualsManager, getters, item, modelSpace } = params;
100
+ this.viewer = viewer;
101
+ this.getters = getters;
102
+ this.item = item;
103
+ this.visualsManager = visualsManager;
104
+ this.modelSpace = Boolean(modelSpace);
105
+ }
106
+ Init() {
107
+ var _a, _b;
108
+ const tilesetId = (_a = this.item.tileset) === null || _a === void 0 ? void 0 : _a.TilesetID;
109
+ if (!tilesetId) {
110
+ return;
111
+ }
112
+ let accountId = (_b = this.item.tileset) === null || _b === void 0 ? void 0 : _b.ClientAccountID;
113
+ if (!accountId) {
114
+ accountId = this.getters.GetAccountId();
115
+ }
116
+ this.renderPriority = this.item.renderPriority;
117
+ if (this.renderPriority == null) {
118
+ this.renderPriority = 0;
119
+ }
120
+ (async () => {
121
+ var _a;
122
+ const api = this.getters.GetBruceApi({
123
+ accountId: accountId
124
+ });
125
+ let coords = null;
126
+ let tileset = null;
127
+ // Single shared getter to avoid multiple assemblies fighting to render.
128
+ // This lets one complete, then the next start.
129
+ await shared_getters_1.SharedGetters.Queue.Run("Rendering assembly.", async () => {
130
+ var _a;
131
+ if (this.disposed) {
132
+ return;
133
+ }
134
+ if (tilesetId) {
135
+ let canAccess = false;
136
+ try {
137
+ canAccess = await bruce_models_1.Tileset.Publish.IsAccessAllowed({
138
+ sourceAccountId: accountId,
139
+ tilesetId: tilesetId,
140
+ forAccountId: this.getters.GetAccountId(),
141
+ getters: this.getters
142
+ });
143
+ if (this.disposed) {
144
+ return;
145
+ }
146
+ }
147
+ catch (e) {
148
+ console.error(e);
149
+ }
150
+ if (!canAccess) {
151
+ console.warn(`Cannot access tileset: ${tilesetId}, from account: ${accountId}.`);
152
+ return;
153
+ }
154
+ }
155
+ else {
156
+ console.warn("No tileset id found. Skipping access check.");
157
+ }
158
+ tileset = (await bruce_models_1.Tileset.Get({
159
+ api,
160
+ tilesetId
161
+ })).tileset;
162
+ if (!tileset || this.disposed) {
163
+ return;
164
+ }
165
+ const settings = tileset.settings;
166
+ const rootId = settings.rootEntityId;
167
+ this.rootId = rootId;
168
+ // If historic, we'll see if the root Entity has a historic position to use.
169
+ if (((_a = this.item.BruceEntity) === null || _a === void 0 ? void 0 : _a.historic) && rootId) {
170
+ try {
171
+ const { entity: root } = await bruce_models_1.Entity.Get({
172
+ entityId: rootId,
173
+ historicPoint: this.viewer.clock.currentTime.toString(),
174
+ api: api
175
+ });
176
+ coords = coordsFromHistoricEntity(root);
177
+ }
178
+ catch (e) {
179
+ console.error(e);
180
+ }
181
+ }
182
+ if (this.disposed) {
183
+ return;
184
+ }
185
+ // Default process.
186
+ if (!coords) {
187
+ coords = (await bruce_models_1.EntityCoords.GetEntityCoords({
188
+ api,
189
+ rootEntityId: rootId
190
+ })).coords;
191
+ }
192
+ if (this.disposed) {
193
+ return;
194
+ }
195
+ });
196
+ if (!tileset || this.disposed) {
197
+ return;
198
+ }
199
+ // Get the model tree if it's in a separate file.
200
+ // There is a setting that is more explicit but it's lying on the file name so can't trust it yet.
201
+ if (((_a = tileset.settings) === null || _a === void 0 ? void 0 : _a["tilesetVersion"]) > 1) {
202
+ try {
203
+ const modelTreeUrl = bruce_models_1.Tileset.GetFileUrl({
204
+ api: api,
205
+ file: "model_tree.json",
206
+ tilesetId: tileset.id,
207
+ cacheToken: tileset.generateVersion,
208
+ viaCdn: Boolean(this.item.cdnEnabled == null ? true : this.item.cdnEnabled)
209
+ });
210
+ this.modelTree = await api.get(modelTreeUrl);
211
+ }
212
+ catch (e) {
213
+ console.error(e);
214
+ }
215
+ }
216
+ if (this.disposed) {
217
+ return;
218
+ }
219
+ // Render outside the shared process because we can't control file requests from Cesium.
220
+ const cTileset = this.cTileset = await tileset_render_engine_1.TilesetRenderEngine.Render({
221
+ apiGetter: this.getters.GetBruceGetter(),
222
+ tileset: tileset,
223
+ viewer: this.viewer,
224
+ coords: coords,
225
+ accountId: accountId,
226
+ viaCdn: Boolean(this.item.cdnEnabled == null ? true : this.item.cdnEnabled),
227
+ noMemoryLimit: this.item["noMaximumMemory"],
228
+ modelSpace: this.modelSpace
229
+ });
230
+ if (this.disposed) {
231
+ this.doDispose();
232
+ return;
233
+ }
234
+ this.viewer.scene.requestRender();
235
+ tileset_render_engine_1.TilesetRenderEngine.OnTilesetReady(this.cTileset).then(() => {
236
+ var _a, _b, _c;
237
+ try {
238
+ if (this.disposed || cTileset.isDestroyed()) {
239
+ return;
240
+ }
241
+ // We style Entities to be hidden by default so that we can selectively-
242
+ // do a default later.
243
+ // This stops them flickering in/out as Bookmark settings get applied.
244
+ if (this.visualsManager.GetIsIsolatedAny()) {
245
+ // This is causing a bug where tileset features never appear.
246
+ // Need to investigate further, until then, we'll use the above check to avoid running it sometimes.
247
+ this.cTileset.style = new Cesium.Cesium3DTileStyle({
248
+ show: "false"
249
+ });
250
+ }
251
+ this.onCTilesetLoad();
252
+ this.styler.Init({
253
+ viewer: this.viewer,
254
+ // Default API instead of the account one.
255
+ // Records are driven by the account loading it instead of the source account.
256
+ api: this.getters.GetBruceApi(),
257
+ cTileset: this.cTileset,
258
+ fallbackStyleId: this.item.styleId,
259
+ styleMapping: this.item.StyleMapping,
260
+ expandSources: (_a = this.item.BruceEntity) === null || _a === void 0 ? void 0 : _a.ExpandSources,
261
+ menuItemId: this.item.id,
262
+ register: this.visualsManager,
263
+ scenario: (_b = this.item.BruceEntity) === null || _b === void 0 ? void 0 : _b.Scenario,
264
+ historic: (_c = this.item.BruceEntity) === null || _c === void 0 ? void 0 : _c.historic,
265
+ });
266
+ this.viewer.scene.requestRender();
267
+ // Monitor scene time changes and update the root Entity.
268
+ this.viewerDateTimeSub(tileset);
269
+ }
270
+ catch (e) {
271
+ console.error(e);
272
+ }
273
+ });
274
+ cTileset.tileLoad.addEventListener((tile) => {
275
+ try {
276
+ this.mapCTile(tile, true);
277
+ }
278
+ catch (e) {
279
+ console.error(e);
280
+ }
281
+ });
282
+ cTileset.tileUnload.addEventListener((tile) => {
283
+ try {
284
+ this.mapCTile(tile, false);
285
+ }
286
+ catch (e) {
287
+ console.error(e);
288
+ }
289
+ });
290
+ })();
291
+ }
292
+ onCTilesetLoad() {
293
+ if (this.item.StyleBlending) {
294
+ let blending = this.item.StyleBlending;
295
+ this.cTileset.colorBlendMode = (0, js_utils_1.EnsureNumber)(blending === null || blending === void 0 ? void 0 : blending.blendMode, Cesium.Cesium3DTileColorBlendMode.MIX);
296
+ this.cTileset.colorBlendAmount = (0, js_utils_1.EnsureNumber)(blending === null || blending === void 0 ? void 0 : blending.blendPercent, 0.9);
297
+ }
298
+ if (this.item.FlyTo) {
299
+ this.viewer.zoomTo(this.cTileset, new Cesium.HeadingPitchRange(0.0, -0.5, this.cTileset.boundingSphere.radius / 4.0));
300
+ }
301
+ }
302
+ /**
303
+ * @param tile
304
+ * @param load indicates if we are loading or unloading the tile.
305
+ * @returns
306
+ */
307
+ mapCTile(tile, load) {
308
+ const content = tile === null || tile === void 0 ? void 0 : tile.content;
309
+ if (!content) {
310
+ return;
311
+ }
312
+ const regosToQueue = new Map();
313
+ for (let i = 0; i < content.featuresLength; i++) {
314
+ const feature = content.getFeature(i);
315
+ let rego = this.mapTilesetFeature(feature, load);
316
+ if (!(rego === null || rego === void 0 ? void 0 : rego.entityId)) {
317
+ // Override the default hide state set by the style.
318
+ feature.show = true;
319
+ continue;
320
+ }
321
+ regosToQueue.set(rego.entityId, rego);
322
+ }
323
+ if (this.styler && regosToQueue.size) {
324
+ this.styler.QueueEntities(Array.from(regosToQueue.values()));
325
+ }
326
+ this.viewer.scene.requestRender();
327
+ }
328
+ /**
329
+ * @param feature
330
+ * @param add indicates if we are adding or removing the feature.
331
+ * @returns
332
+ */
333
+ mapTilesetFeature(feature, add) {
334
+ var _a, _b, _c, _d, _e, _f;
335
+ const accountId = (_b = ((_a = this.item.tileset) === null || _a === void 0 ? void 0 : _a.ClientAccountID)) !== null && _b !== void 0 ? _b : this.getters.GetAccountId();
336
+ const canEdit = accountId === this.getters.GetAccountId() && !this.modelSpace && !((_c = this.item.BruceEntity) === null || _c === void 0 ? void 0 : _c.historic);
337
+ let rego = {
338
+ canEdit: canEdit,
339
+ entityId: null,
340
+ entityTypeId: null,
341
+ menuItemId: this.item.id,
342
+ menuItemType: this.item.Type,
343
+ priority: this.renderPriority,
344
+ visual: feature,
345
+ accountId: accountId,
346
+ tilesetId: (_d = this.item.tileset) === null || _d === void 0 ? void 0 : _d.TilesetID,
347
+ tilesetType: bruce_models_1.Tileset.EType.Cad,
348
+ rootId: this.rootId
349
+ };
350
+ const featureAny = feature;
351
+ const propertyNames = featureAny.getPropertyNames ? featureAny.getPropertyNames() : (_e = featureAny.getPropertyIds) === null || _e === void 0 ? void 0 : _e.call(featureAny);
352
+ if (!propertyNames) {
353
+ return null;
354
+ }
355
+ const setByGeomId = () => {
356
+ const geomIdProp = propertyNames.find(x => String(x).toLowerCase() == "geomid");
357
+ if (geomIdProp) {
358
+ const geomId = +feature.getProperty(geomIdProp);
359
+ if (geomId != null && (!!geomId || geomId == 0)) {
360
+ const meta = this.getMetaByGeomId(geomId, feature.tileset);
361
+ if (meta) {
362
+ rego.entityId = meta.entityId;
363
+ rego.entityTypeId = meta.typeId;
364
+ rego.name = meta.name;
365
+ }
366
+ }
367
+ }
368
+ };
369
+ const setByEntityId = () => {
370
+ const bruceIdProp = propertyNames.find(x => (String(x).toLowerCase() == "bruceid"));
371
+ if (bruceIdProp) {
372
+ rego.entityId = feature.getProperty(bruceIdProp);
373
+ }
374
+ };
375
+ const setByPath = () => {
376
+ const brucePathProp = propertyNames.find(x => String(x).toLowerCase() == "brucepath");
377
+ if (brucePathProp) {
378
+ const pathStr = feature.getProperty(brucePathProp);
379
+ if (pathStr) {
380
+ let path = pathStr.split("|");
381
+ let entityTypeId = this.getEntityTypeByPath(path);
382
+ rego.entityTypeId = entityTypeId;
383
+ rego.entityId = path[path.length - 1];
384
+ }
385
+ }
386
+ };
387
+ setByGeomId();
388
+ if (!rego.entityId) {
389
+ setByEntityId();
390
+ }
391
+ if (!rego.entityId) {
392
+ setByPath();
393
+ }
394
+ if (!rego.entityId) {
395
+ return null;
396
+ }
397
+ // Optional menu item restriction.
398
+ // Allows only showing certain entities from a tileset.
399
+ const onlyIds = (_f = this.item.BruceEntity) === null || _f === void 0 ? void 0 : _f.EntityIds;
400
+ if ((onlyIds === null || onlyIds === void 0 ? void 0 : onlyIds.length) && !onlyIds.includes(rego.entityId)) {
401
+ if (this.item.BruceEntity.Ghosts) {
402
+ feature.color = Cesium.Color.WHITE.clone().withAlpha(0.5);
403
+ }
404
+ else {
405
+ feature.show = false;
406
+ }
407
+ return null;
408
+ }
409
+ if (add) {
410
+ // Get the initial hide/show state.
411
+ const state = this.visualsManager.GetState({
412
+ entityId: rego.entityId,
413
+ menuItemId: this.item.id,
414
+ });
415
+ if (this.somethingIsolated == null ||
416
+ // 5s cache.
417
+ (this.somethingIsolatedDateTime && this.somethingIsolatedDateTime.getTime() + 5000 < new Date().getTime())) {
418
+ this.somethingIsolated = this.visualsManager.GetIsIsolatedAny();
419
+ this.somethingIsolatedDateTime = new Date();
420
+ }
421
+ // Override the default hide state set by the style.
422
+ let hide = false;
423
+ if (state) {
424
+ if (state.hidden) {
425
+ hide = true;
426
+ }
427
+ else if (state.opacity === 0) {
428
+ hide = true;
429
+ }
430
+ else if (!state.isolated && this.somethingIsolated) {
431
+ hide = true;
432
+ }
433
+ }
434
+ feature.show = !hide;
435
+ // Already exists, so we add this graphic as a sibling.
436
+ if (this.loadedCesiumEntities[rego.entityId]) {
437
+ rego = this.loadedCesiumEntities[rego.entityId];
438
+ if (!rego.visual) {
439
+ // No parent graphic.
440
+ rego.visual = feature;
441
+ }
442
+ else if (rego.visual == feature) {
443
+ // Same graphic. Nothing to do.
444
+ }
445
+ else {
446
+ const visual = rego.visual;
447
+ // Sibling graphic.
448
+ if (!visual._siblingGraphics) {
449
+ visual._siblingGraphics = [];
450
+ }
451
+ if (visual._siblingGraphics.indexOf(feature) < 0) {
452
+ visual._siblingGraphics.push(feature);
453
+ }
454
+ }
455
+ }
456
+ this.loadedCesiumEntities[rego.entityId] = rego;
457
+ this.visualsManager.AddRego({
458
+ rego,
459
+ requestRender: false
460
+ });
461
+ return rego;
462
+ }
463
+ else {
464
+ this.visualsManager.RemoveRegos({
465
+ entityId: rego.entityId,
466
+ requestRender: false,
467
+ menuItemId: this.item.id,
468
+ doRemove: false
469
+ });
470
+ // Might have to do something smarter since siblings could still be OK.
471
+ this.loadedCesiumEntities[rego.entityId] = null;
472
+ delete this.loadedCesiumEntities[rego.entityId];
473
+ }
474
+ }
475
+ getMetaByGeomId(geomId, tileset) {
476
+ var _a;
477
+ if (this.treeNodeByGeomId == null) {
478
+ let modelTree = (_a = tileset === null || tileset === void 0 ? void 0 : tileset.extensions) === null || _a === void 0 ? void 0 : _a.modelTree;
479
+ // Wasn't inside tileset.json and instead in a separate file.
480
+ if (!modelTree) {
481
+ modelTree = this.modelTree;
482
+ }
483
+ if (!modelTree) {
484
+ return null;
485
+ }
486
+ this.buildModelTreeNodes(modelTree);
487
+ }
488
+ return this.treeNodeByGeomId[geomId] || null;
489
+ }
490
+ /**
491
+ * Builds quick look-up of the model tree nodes by geomId.
492
+ * @param modelTree
493
+ */
494
+ buildModelTreeNodes(modelTree) {
495
+ this.treeNodeByGeomId = {};
496
+ this.treeNodeByEntityId = {};
497
+ const recurse = (node, firstFoundCollapsedBranch) => {
498
+ if (firstFoundCollapsedBranch) {
499
+ this.treeNodeByGeomId[node.geomId] = firstFoundCollapsedBranch;
500
+ this.treeNodeByEntityId[node.id] = firstFoundCollapsedBranch;
501
+ }
502
+ else {
503
+ const cache = {
504
+ entityId: node.id,
505
+ typeId: node.typeId,
506
+ name: node.name,
507
+ geomId: node.geomId
508
+ };
509
+ this.treeNodeByGeomId[node.geomId] = cache;
510
+ this.treeNodeByEntityId[node.id] = cache;
511
+ if (!firstFoundCollapsedBranch && node.collapsed) {
512
+ firstFoundCollapsedBranch = cache;
513
+ }
514
+ }
515
+ if (node.children) {
516
+ for (let i = 0; i < node.children.length; i++) {
517
+ recurse(node.children[i], firstFoundCollapsedBranch);
518
+ }
519
+ }
520
+ };
521
+ recurse(modelTree, null);
522
+ }
523
+ getEntityTypeByPath(path) {
524
+ var _a, _b;
525
+ const entityId = path[path.length - 1];
526
+ if (this.treeNodeByEntityId == null) {
527
+ let modelTree = (_b = (_a = this.cTileset) === null || _a === void 0 ? void 0 : _a.extensions) === null || _b === void 0 ? void 0 : _b.modelTree;
528
+ // Wasn't inside tileset.json and instead in a separate file.
529
+ if (!modelTree) {
530
+ modelTree = this.modelTree;
531
+ }
532
+ if (!modelTree) {
533
+ return null;
534
+ }
535
+ this.buildModelTreeNodes(modelTree);
536
+ }
537
+ const node = this.treeNodeByEntityId[entityId] || null;
538
+ return node ? node.typeId : null;
539
+ }
540
+ Dispose() {
541
+ if (this.disposed) {
542
+ return;
543
+ }
544
+ this.disposed = true;
545
+ this.doDispose();
546
+ }
547
+ doDispose() {
548
+ var _a, _b;
549
+ if (this.cTileset) {
550
+ const viewer = this.viewer;
551
+ if (!(viewer === null || viewer === void 0 ? void 0 : viewer.isDestroyed()) && this.viewer.scene.primitives.contains(this.cTileset)) {
552
+ this.cTileset.show = false;
553
+ this.viewer.scene.primitives.remove(this.cTileset);
554
+ (_a = tileset_render_engine_1.TilesetRenderEngine.GetMemoryWatcher(viewer)) === null || _a === void 0 ? void 0 : _a.Unwatch(this.cTileset);
555
+ this.viewer.scene.requestRender();
556
+ }
557
+ this.cTileset = null;
558
+ }
559
+ (_b = this.styler) === null || _b === void 0 ? void 0 : _b.Dispose();
560
+ this.visualsManager.RemoveRegos({
561
+ menuItemId: this.item.id,
562
+ doRemove: false
563
+ });
564
+ this.viewerDateTimeDispose();
565
+ }
566
+ async ReRender(params) {
567
+ let { entityIds, force, entities } = params;
568
+ if (entities && !entityIds) {
569
+ entityIds = entities.map(x => { var _a; return (_a = x.Bruce) === null || _a === void 0 ? void 0 : _a.ID; });
570
+ }
571
+ if (!this.styler) {
572
+ return;
573
+ }
574
+ let regos = this.visualsManager.GetRegos({
575
+ menuItemId: this.item.id
576
+ });
577
+ if (entityIds != null) {
578
+ regos = regos.filter(r => entityIds.indexOf(r.entityId) >= 0);
579
+ }
580
+ // Update the cache so we use that data instead of requesting the records.
581
+ this.styler.SetEntityCache(entityIds, entities);
582
+ this.styler.QueueEntities(regos, true);
583
+ }
584
+ /**
585
+ * Monitors the Cesium Viewer and updates the root Entity based on the scene time changing.
586
+ * If the root Entity is historic, this can allow for movement of the assembly as a whole.
587
+ * @param tileset
588
+ */
589
+ viewerDateTimeSub(tileset) {
590
+ var _a, _b;
591
+ if (!((_a = this.item.BruceEntity) === null || _a === void 0 ? void 0 : _a.historic) || this.viewerDateTimeChangeRemoval) {
592
+ return;
593
+ }
594
+ let accountId = (_b = this.item.tileset) === null || _b === void 0 ? void 0 : _b.ClientAccountID;
595
+ if (!accountId) {
596
+ accountId = this.getters.GetAccountId();
597
+ }
598
+ const api = this.getters.GetBruceApi({
599
+ accountId: accountId
600
+ });
601
+ // Time padding in milliseconds (15 seconds).
602
+ // Helps account for desync between client and server.
603
+ const TIME_PADDING_MS = 15000;
604
+ // 'start-stop' time string that maps to a pending request.
605
+ // Helps us avoid repeated requests that are the same.
606
+ const pendingRequests = new Map();
607
+ /**
608
+ * Returns a list of historic positions for a given time range.
609
+ * @param startStr
610
+ * @param stopStr
611
+ * @returns
612
+ */
613
+ const getPossesForRange = async (startStr, stopStr) => {
614
+ const requestKey = `${startStr}-${stopStr}`;
615
+ if (pendingRequests.has(requestKey)) {
616
+ return pendingRequests.get(requestKey);
617
+ }
618
+ const requestPromise = new Promise(async (res) => {
619
+ try {
620
+ const historicData = await bruce_models_1.EntityHistoricData.GetList({
621
+ attrKey: null,
622
+ dateTimeFrom: startStr,
623
+ dateTimeTo: stopStr,
624
+ entityIds: [this.rootId],
625
+ api: api
626
+ });
627
+ const posses = cesium_animated_property_1.CesiumAnimatedProperty.GetSeriesPossesForHistoricEntity(this.viewer, Cesium.HeightReference.NONE, Cesium.HeightReference.CLAMP_TO_GROUND, historicData.recordsByIds[this.rootId]);
628
+ res(posses);
629
+ }
630
+ catch (e) {
631
+ console.error(e);
632
+ res([]);
633
+ }
634
+ finally {
635
+ pendingRequests.delete(requestKey);
636
+ }
637
+ });
638
+ pendingRequests.set(requestKey, requestPromise);
639
+ return requestPromise;
640
+ };
641
+ /**
642
+ * Checks if the current timeline range is not fully loaded and requests the difference.
643
+ * This will call getPossesForRange() if it needs more data.
644
+ * @returns
645
+ */
646
+ const checkTimelineRange = async () => {
647
+ // Current timeline range.
648
+ const minDateTime = new Date(this.viewer.clock.startTime.toString()).getTime();
649
+ const maxDateTime = new Date(this.viewer.clock.stopTime.toString()).getTime();
650
+ // What we have loaded.
651
+ const range = this.historicAnimation.getDateRange();
652
+ const foundMinDateTime = (range === null || range === void 0 ? void 0 : range.minDate) ? range.minDate.getTime() : null;
653
+ const foundMaxDateTime = (range === null || range === void 0 ? void 0 : range.maxDate) ? range.maxDate.getTime() : null;
654
+ // See if the current range is within the range we already have.
655
+ if (this.historicPossesInitialLoaded &&
656
+ foundMinDateTime &&
657
+ foundMaxDateTime &&
658
+ minDateTime >= foundMinDateTime &&
659
+ maxDateTime <= foundMaxDateTime) {
660
+ return;
661
+ }
662
+ const tDetails = view_utils_1.ViewUtils.GetTimeDetails({
663
+ viewer: this.viewer,
664
+ });
665
+ const isLive = tDetails.isLive;
666
+ // See if the requested range is before or after the range we have.
667
+ const fetchBefore = !foundMinDateTime || (!isLive && minDateTime < foundMinDateTime);
668
+ const fetchAfter = !foundMaxDateTime || maxDateTime > foundMaxDateTime;
669
+ if (!fetchBefore && !fetchAfter) {
670
+ // Already have the data we need.
671
+ return;
672
+ }
673
+ // No known range so we need to fetch the whole thing.
674
+ if (!foundMinDateTime || !foundMaxDateTime) {
675
+ const startStr = new Date(minDateTime - TIME_PADDING_MS).toISOString();
676
+ const stopStr = new Date(maxDateTime + TIME_PADDING_MS).toISOString();
677
+ const newPositions = await getPossesForRange(startStr, stopStr);
678
+ if (this.disposed) {
679
+ return;
680
+ }
681
+ if (this.historicAnimation && this.historicAnimation.addPositions) {
682
+ this.historicAnimation.addPositions(newPositions);
683
+ }
684
+ }
685
+ else {
686
+ // The data we want is before the range we've currently loaded.
687
+ if (fetchBefore) {
688
+ // Calculate the missing difference and request it.
689
+ const startStr = new Date(minDateTime - TIME_PADDING_MS).toISOString();
690
+ const stopStr = new Date(foundMinDateTime + TIME_PADDING_MS).toISOString();
691
+ getPossesForRange(startStr, stopStr).then((newPositions) => {
692
+ if (this.disposed) {
693
+ return;
694
+ }
695
+ if (this.historicAnimation && this.historicAnimation.addPositions) {
696
+ this.historicAnimation.addPositions(newPositions);
697
+ }
698
+ });
699
+ }
700
+ // The data we want is after the range we've currently loaded.
701
+ if (fetchAfter) {
702
+ // Calculate the missing difference and request it.
703
+ const startStr = new Date(foundMaxDateTime - TIME_PADDING_MS).toISOString();
704
+ const stopStr = new Date(maxDateTime + TIME_PADDING_MS).toISOString();
705
+ getPossesForRange(startStr, stopStr).then((newPositions) => {
706
+ if (this.disposed) {
707
+ return;
708
+ }
709
+ if (this.historicAnimation && this.historicAnimation.addPositions) {
710
+ this.historicAnimation.addPositions(newPositions);
711
+ }
712
+ });
713
+ }
714
+ }
715
+ };
716
+ /**
717
+ * Requests the initial set of historic positions for the timeline range.
718
+ * This is called when the tileset is loaded and the timeline range is set.
719
+ * @returns
720
+ */
721
+ const getInitialPosses = async () => {
722
+ this.historicPossesLoadingProm = new Promise(async (res) => {
723
+ try {
724
+ if (this.disposed) {
725
+ res(false);
726
+ return;
727
+ }
728
+ const startTmp = Cesium.JulianDate.toDate(this.viewer.clock.startTime);
729
+ const stopTmp = Cesium.JulianDate.toDate(this.viewer.clock.stopTime);
730
+ const startStr = new Date(startTmp.getTime() - 1000).toISOString();
731
+ const stopStr = new Date(stopTmp.getTime() + 1000).toISOString();
732
+ const positions = await getPossesForRange(startStr, stopStr);
733
+ if (this.disposed) {
734
+ res(false);
735
+ return;
736
+ }
737
+ // Also request the current position in case its not in the range.
738
+ const { entity } = await bruce_models_1.Entity.Get({
739
+ entityId: this.rootId,
740
+ historicPoint: this.viewer.clock.currentTime.toString(),
741
+ api: api
742
+ });
743
+ if (this.disposed || !entity) {
744
+ res(false);
745
+ return;
746
+ }
747
+ const historicDetails = entity.Bruce.Outline ? entity.Bruce.Outline.find(x => !!x.DateTime) : null;
748
+ if (historicDetails) {
749
+ const pos3d = entity_utils_1.EntityUtils.GetPos({
750
+ entity: entity,
751
+ viewer: this.viewer,
752
+ recordHeightRef: Cesium.HeightReference.NONE,
753
+ returnHeightRef: Cesium.HeightReference.CLAMP_TO_GROUND,
754
+ allowRendered: false
755
+ });
756
+ if (pos3d && !isNaN(pos3d.x) && !isNaN(pos3d.y) && !isNaN(pos3d.z)) {
757
+ positions.push({
758
+ dateTime: new Date(historicDetails.DateTime),
759
+ pos3d: pos3d,
760
+ heading: null
761
+ });
762
+ }
763
+ }
764
+ this.historicPossesInitialLoaded = true;
765
+ res(positions);
766
+ }
767
+ catch (e) {
768
+ console.error(e);
769
+ res(false);
770
+ }
771
+ });
772
+ return await this.historicPossesLoadingProm;
773
+ };
774
+ // Last known timeline range. Helps us detect changes.
775
+ let lastStartTime = this.viewer.clock.startTime.toString();
776
+ let lastStopTime = this.viewer.clock.stopTime.toString();
777
+ let clockTickRemoval;
778
+ getInitialPosses().then((posses) => {
779
+ if (this.disposed || posses === false) {
780
+ return;
781
+ }
782
+ // Generate animation utility for the initial set of positions.
783
+ this.historicAnimation = new cesium_animated_property_1.CesiumAnimatedProperty.AnimateTPositionSeries({
784
+ viewer: this.viewer,
785
+ posses: posses,
786
+ onUpdate: (pos3d, heading) => {
787
+ if (this.disposed) {
788
+ return;
789
+ }
790
+ // Reverse heading.
791
+ // Not sure if calc or model is the issue.
792
+ // This is all for a single demo until we figure out how we configure assemblies for this anyways.
793
+ heading = heading + 180;
794
+ if (heading > 360) {
795
+ heading = heading - 360;
796
+ }
797
+ const coords = coordsFromHistoricPos3d(this.cTileset, this.rootId, pos3d, heading);
798
+ this.applyCoords(tileset, coords);
799
+ },
800
+ onRangeChange: () => {
801
+ checkTimelineRange();
802
+ },
803
+ onDone: () => {
804
+ if (this.viewerDateTimeChangeRemoval) {
805
+ this.viewerDateTimeChangeRemoval();
806
+ this.viewerDateTimeChangeRemoval = null;
807
+ }
808
+ }
809
+ });
810
+ // When the clock changes we'll see if the range is different and queue a request for the difference.
811
+ clockTickRemoval = this.viewer.clock.onTick.addEventListener(() => {
812
+ const startTime = this.viewer.clock.startTime.toString();
813
+ const stopTime = this.viewer.clock.stopTime.toString();
814
+ if (startTime !== lastStartTime || stopTime !== lastStopTime) {
815
+ lastStartTime = startTime;
816
+ lastStopTime = stopTime;
817
+ this.historicAnimation.onRangeChange();
818
+ }
819
+ });
820
+ this.viewerDateTimeChangeRemoval = () => {
821
+ if (this.historicAnimation) {
822
+ this.historicAnimation.stop();
823
+ this.historicAnimation = null;
824
+ }
825
+ if (clockTickRemoval) {
826
+ clockTickRemoval();
827
+ clockTickRemoval = null;
828
+ }
829
+ };
830
+ });
831
+ }
832
+ viewerDateTimeDispose() {
833
+ var _a;
834
+ (_a = this.viewerDateTimeChangeRemoval) === null || _a === void 0 ? void 0 : _a.call(this);
835
+ this.viewerDateTimeChangeRemoval = null;
836
+ }
837
+ /**
838
+ * Updates the Tileset with latest coordinates.
839
+ * This is used to refresh with new values, not to render the first time!
840
+ * @param tileset
841
+ * @param coords
842
+ */
843
+ applyCoords(tileset, coords) {
844
+ if (this.disposed || !this.cTileset || this.cTileset.isDestroyed()) {
845
+ return;
846
+ }
847
+ const settings = tileset.settings;
848
+ tileset_render_engine_1.TilesetRenderEngine.ApplyPosition({
849
+ cTileset: this.Tileset,
850
+ position: {
851
+ ucs: coords === null || coords === void 0 ? void 0 : coords.ucs,
852
+ location: (coords === null || coords === void 0 ? void 0 : coords.location) == null ? settings.location : coords.location,
853
+ transform: (coords === null || coords === void 0 ? void 0 : coords.transform) == null ? settings.transform : coords.transform
854
+ }
855
+ });
856
+ this.viewer.scene.requestRender();
857
+ }
858
+ }
859
+ TilesetCadRenderManager.Manager = Manager;
860
+ })(TilesetCadRenderManager = exports.TilesetCadRenderManager || (exports.TilesetCadRenderManager = {}));
861
+ //# sourceMappingURL=tileset-cad-render-manager.js.map