bruce-cesium 5.7.9 → 5.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/dist/bruce-cesium.es5.js +32262 -0
  2. package/dist/bruce-cesium.es5.js.map +1 -0
  3. package/dist/bruce-cesium.umd.js +32186 -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 +1695 -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 +351 -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,984 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EntityRenderEnginePoint = void 0;
4
+ const bruce_models_1 = require("bruce-models");
5
+ const cesium_animated_property_1 = require("./cesium-animated-property");
6
+ const Cesium = require("cesium");
7
+ const entity_render_engine_1 = require("./entity-render-engine");
8
+ const entity_utils_1 = require("../utils/entity-utils");
9
+ const js_utils_1 = require("../internal/js-utils");
10
+ const cesium_utils_1 = require("../internal/cesium-utils");
11
+ const limited_log_1 = require("../internal/limited-log");
12
+ const cesium_entity_styler_1 = require("../utils/cesium-entity-styler");
13
+ /**
14
+ * Handles point rendering.
15
+ */
16
+ var EntityRenderEnginePoint;
17
+ (function (EntityRenderEnginePoint) {
18
+ /**
19
+ * Creates a circle billboard (canvas) for a point.
20
+ * @param params
21
+ * @returns
22
+ */
23
+ function CreateCircleBillboard(params) {
24
+ return createCircleBillboard(params.size, params.colorCss);
25
+ }
26
+ EntityRenderEnginePoint.CreateCircleBillboard = CreateCircleBillboard;
27
+ /**
28
+ * Renders a single point Entity.
29
+ * This takes an optional prior Cesium Entity to update rather than create from scratch.
30
+ * @param params
31
+ * @returns
32
+ */
33
+ async function Render(params) {
34
+ var _a, _b, _c, _d;
35
+ const entity = params.entity;
36
+ if (!params.entityHistoric) {
37
+ params.entityHistoric = [];
38
+ }
39
+ const style = params.style;
40
+ let type = style.Type;
41
+ if (type == null) {
42
+ // Very old backward compatibility.
43
+ if (style.useIcon == true) {
44
+ type = bruce_models_1.Style.EPointType.Icon;
45
+ }
46
+ }
47
+ let cEntity = null;
48
+ let siblings = [];
49
+ let heightRef = null;
50
+ let animatePosition = null;
51
+ let shouldShowTrack = false;
52
+ const prepareExistingGraphic = (cEntity, maxSiblings = 0) => {
53
+ // Gather entity in case previous version had sibling graphics we no longer need.
54
+ const parts = entity_utils_1.EntityUtils.GatherEntity({
55
+ entity: cEntity,
56
+ });
57
+ if (parts.length > 1) {
58
+ // We'll cull all except the allowed number of siblings.
59
+ cEntity._siblingGraphics = cEntity._siblingGraphics.slice(0, maxSiblings);
60
+ // We'll remove all that aren't in the allowed (direct) list.
61
+ for (let i = 0; i < parts.length - 1; i++) {
62
+ const part = parts[i];
63
+ if (part && part instanceof Cesium.Entity && params.viewer.entities.contains(part) && !cEntity._siblingGraphics.includes(part)) {
64
+ params.viewer.entities.remove(part);
65
+ }
66
+ }
67
+ if (cEntity._parentEntity) {
68
+ console.warn("Point.Render: Parent entity was not null. This should not happen.");
69
+ }
70
+ }
71
+ siblings = cEntity._siblingGraphics;
72
+ cEntity._siblingGraphics = [];
73
+ };
74
+ const updateShouldShowTrack = () => {
75
+ var _a, _b, _c;
76
+ if (!params.entityHistoricDrawTrack) {
77
+ return;
78
+ }
79
+ if ((_a = params.entityHistoric) === null || _a === void 0 ? void 0 : _a.length) {
80
+ const lStyle = (_c = (_b = params.fullStyle) === null || _b === void 0 ? void 0 : _b.polylineStyle) !== null && _c !== void 0 ? _c : {};
81
+ let width = lStyle.width ? (0, js_utils_1.EnsureNumber)(bruce_models_1.Calculator.GetNumber(lStyle.width, entity, params.tags)) : 2;
82
+ if (width == null) {
83
+ width = 2;
84
+ }
85
+ width = (0, js_utils_1.EnsureNumber)(width);
86
+ if (width > 0.01) {
87
+ const bColor = lStyle.lineColor ? bruce_models_1.Calculator.GetColor(lStyle.lineColor, entity, params.tags) : null;
88
+ const cColor = bColor ? (0, cesium_utils_1.ColorToCColor)(bColor) : Cesium.Color.fromCssColorString("rgba(255, 193, 7, 0.8)");
89
+ if (cColor.alpha > 0) {
90
+ const seriesTrackPosses = cesium_animated_property_1.CesiumAnimatedProperty.GetSeriesPossesForHistoricEntity(params.viewer, heightRef, heightRef, params.entityHistoric);
91
+ seriesTrackPosses.reverse();
92
+ let posses = seriesTrackPosses.map(x => x.pos3d);
93
+ posses = (0, cesium_utils_1.CullDuplicateCPosses)(posses);
94
+ shouldShowTrack = posses.length > 1;
95
+ }
96
+ }
97
+ }
98
+ ;
99
+ };
100
+ if (type == bruce_models_1.Style.EPointType.Icon) {
101
+ // Fixing poor data.
102
+ let iconUrlRows = style.iconUrl == null ? [] : style.iconUrl;
103
+ iconUrlRows.forEach((row) => {
104
+ if (row.type == bruce_models_1.Calculator.EValueType.Color) {
105
+ row.type = bruce_models_1.Calculator.EValueType.Input;
106
+ }
107
+ });
108
+ const icon = bruce_models_1.Calculator.GetString(iconUrlRows, entity, params.tags);
109
+ let iconUrl = null;
110
+ if (typeof icon == "string") {
111
+ iconUrl = icon;
112
+ const metadata = extractMetadataFromFileUrl(iconUrl);
113
+ // If we're able to determine the Nextspace metadata from the url then we can use that to load the file.
114
+ // Warning, if this is cross-env, eg: UAT -> DEV then it will RIGHTLY fail to load the file.
115
+ if (metadata) {
116
+ const api = params.apiGetter.getApi(metadata.accountId);
117
+ await api.Loading;
118
+ iconUrl = bruce_models_1.ClientFile.GetUrl({
119
+ api: api,
120
+ fileId: metadata.fileId,
121
+ viaCdn: true
122
+ });
123
+ }
124
+ }
125
+ if (!iconUrl && style.iconId) {
126
+ await params.api.Loading;
127
+ iconUrl = bruce_models_1.ClientFile.GetUrl({
128
+ api: params.api,
129
+ fileId: style.iconId,
130
+ viaCdn: true
131
+ });
132
+ }
133
+ let image = null;
134
+ // ND-1640 - Tags not appearing.
135
+ // Validate file, else user will see nothing.
136
+ // Pray we aren't loading some giant file.
137
+ if (iconUrl) {
138
+ try {
139
+ image = await createImageBillboard(iconUrl);
140
+ }
141
+ catch (e) {
142
+ // Expanding the logging here so we can figure out why this is happening.
143
+ // Most of the time the file is missing but we're getting some strange errors so I am including logging on the API settings as well.
144
+ (0, limited_log_1.OneTimeError)("ENTITY_RENDER_ENGINE_ICON_URL_ERROR_" + iconUrl, {
145
+ error: e,
146
+ iconUrl,
147
+ apiUrl: (_a = params.api) === null || _a === void 0 ? void 0 : _a.GetBaseUrl(),
148
+ apiAccountId: (_b = params.api) === null || _b === void 0 ? void 0 : _b.AccountId
149
+ });
150
+ }
151
+ }
152
+ if (image) {
153
+ let iconScale = (0, js_utils_1.EnsureNumber)(bruce_models_1.Calculator.GetNumber(style.iconScale, entity, params.tags));
154
+ if (!iconScale && iconScale != 0) {
155
+ iconScale = 1;
156
+ }
157
+ const disableDepthTest = Boolean(style.renderOnTop);
158
+ if (iconScale > 0) {
159
+ updateShouldShowTrack();
160
+ const bColor = style.iconTintColor ? bruce_models_1.Calculator.GetColor(style.iconTintColor, entity, params.tags) : null;
161
+ const cColor = bColor ? (0, cesium_utils_1.ColorToCColor)(bColor) : Cesium.Color.WHITE.clone();
162
+ heightRef = getHeightRef(style);
163
+ if (!params.rendered || !params.rendered.billboard) {
164
+ const animateColorIn = new cesium_animated_property_1.CesiumAnimatedProperty.AnimateColor({
165
+ durationMs: 200,
166
+ targetColor: cColor,
167
+ startColor: cColor.withAlpha(0),
168
+ viewer: params.viewer
169
+ });
170
+ let position = null;
171
+ // If we have a series of time-based positions then we'll animate as time changes.
172
+ const series = cesium_animated_property_1.CesiumAnimatedProperty.GetSeriesPossesForHistoricEntity(params.viewer, heightRef, heightRef, params.entityHistoric);
173
+ if (series.length > 1) {
174
+ animatePosition = new cesium_animated_property_1.CesiumAnimatedProperty.AnimatePositionSeries({
175
+ posses: series,
176
+ viewer: params.viewer
177
+ });
178
+ position = new Cesium.CallbackProperty(() => animatePosition.GetValue(), false);
179
+ position["CesiumAnimatedProperty.AnimatePositionSeries"] = animatePosition;
180
+ }
181
+ else {
182
+ position = new Cesium.CallbackProperty(() => entity_utils_1.EntityUtils.GetPos({
183
+ viewer: params.viewer,
184
+ entity,
185
+ recordHeightRef: heightRef,
186
+ returnHeightRef: heightRef,
187
+ allowRendered: false
188
+ }), true);
189
+ }
190
+ cEntity = new Cesium.Entity({
191
+ id: bruce_models_1.ObjectUtils.UId(15),
192
+ billboard: {
193
+ horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
194
+ verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
195
+ image: image.canvasDataUri,
196
+ heightReference: getHeightRef(style),
197
+ scale: iconScale,
198
+ disableDepthTestDistance: disableDepthTest ? Number.POSITIVE_INFINITY : undefined,
199
+ distanceDisplayCondition: entity_render_engine_1.EntityRenderEngine.GetDisplayCondition(params.minDistance, params.maxDistance),
200
+ color: new Cesium.CallbackProperty(() => {
201
+ const color = animateColorIn.GetColor();
202
+ if (animateColorIn.IsDone() && (cEntity === null || cEntity === void 0 ? void 0 : cEntity.billboard)) {
203
+ cEntity.billboard.color = new Cesium.CallbackProperty(() => color, true);
204
+ }
205
+ return color;
206
+ }, false),
207
+ // Would be great once we have a setting for this.
208
+ // translucencyByDistance: getTranslucencyByDistance(params.minDistance, params.maxDistance),
209
+ },
210
+ position: position,
211
+ show: true
212
+ });
213
+ cesium_entity_styler_1.CesiumEntityStyler.BakeDefaultColor({
214
+ entity: cEntity,
215
+ colors: {
216
+ "billboard": cColor
217
+ },
218
+ viewer: params.viewer,
219
+ refresh: false
220
+ });
221
+ }
222
+ else {
223
+ prepareExistingGraphic(params.rendered, shouldShowTrack ? 1 : 0);
224
+ cEntity = params.rendered;
225
+ const currentImgKey = cEntity.billboard._billboardImgKey;
226
+ if (currentImgKey != iconUrl) {
227
+ cEntity.billboard.image = new Cesium.ConstantProperty(image.canvasDataUri);
228
+ }
229
+ cEntity.billboard.scale = new Cesium.ConstantProperty(iconScale);
230
+ cEntity.billboard.heightReference = new Cesium.ConstantProperty(getHeightRef(style));
231
+ cEntity.billboard.disableDepthTestDistance = new Cesium.ConstantProperty(disableDepthTest ? Number.POSITIVE_INFINITY : undefined);
232
+ cEntity.billboard.distanceDisplayCondition = new Cesium.ConstantProperty(entity_render_engine_1.EntityRenderEngine.GetDisplayCondition(params.minDistance, params.maxDistance));
233
+ // Unset width/height.
234
+ cEntity.billboard.width = undefined;
235
+ cEntity.billboard.height = undefined;
236
+ const prevPos3d = (0, cesium_utils_1.GetCValue)(params.viewer, cEntity.position);
237
+ let prevStartTime = null;
238
+ if (cEntity.position && cEntity.position["CesiumAnimatedProperty.AnimatePositionSeries"]) {
239
+ prevStartTime = cEntity.position["CesiumAnimatedProperty.AnimatePositionSeries"].GetAnimateFromDateTime();
240
+ }
241
+ // If we have a series of time-based positions then we'll animate as time changes.
242
+ const series = cesium_animated_property_1.CesiumAnimatedProperty.GetSeriesPossesForHistoricEntity(params.viewer, heightRef, heightRef, params.entityHistoric);
243
+ if (series.length > 1) {
244
+ animatePosition = new cesium_animated_property_1.CesiumAnimatedProperty.AnimatePositionSeries({
245
+ posses: series,
246
+ viewer: params.viewer,
247
+ animateFromPos3d: prevPos3d,
248
+ animateFromPos3dTimeStart: prevStartTime
249
+ });
250
+ cEntity.position = new Cesium.CallbackProperty(() => animatePosition.GetValue(), false);
251
+ cEntity.position["CesiumAnimatedProperty.AnimatePositionSeries"] = animatePosition;
252
+ }
253
+ else {
254
+ const pos3d = entity_utils_1.EntityUtils.GetPos({
255
+ viewer: params.viewer,
256
+ entity,
257
+ recordHeightRef: heightRef,
258
+ returnHeightRef: heightRef,
259
+ allowRendered: false
260
+ });
261
+ if (!prevPos3d || !Cesium.Cartesian3.equals(prevPos3d, pos3d)) {
262
+ animatePosition = new cesium_animated_property_1.CesiumAnimatedProperty.AnimatePosition({
263
+ durationMs: 200,
264
+ targetPos3d: pos3d,
265
+ viewer: params.viewer,
266
+ startPos3d: prevPos3d
267
+ });
268
+ cEntity.position = new Cesium.CallbackProperty(() => animatePosition.GetValue(), false);
269
+ }
270
+ }
271
+ // We'll use "SetDefaultColor" to updating the internal reference and to allow for an animation.
272
+ cesium_entity_styler_1.CesiumEntityStyler.SetDefaultColor({
273
+ color: cColor ? cColor : new Cesium.Color(),
274
+ entity: cEntity,
275
+ viewer: params.viewer,
276
+ override: true,
277
+ requestRender: false
278
+ });
279
+ cEntity.show = true;
280
+ }
281
+ cEntity.billboard._billboardSize = image.height;
282
+ cEntity.billboard._billboardImgKey = iconUrl;
283
+ }
284
+ }
285
+ }
286
+ if (type == bruce_models_1.Style.EPointType.Cylinder) {
287
+ const radius = (0, js_utils_1.EnsureNumber)(bruce_models_1.Calculator.GetNumber(style.CylinderRadius, entity, params.tags));
288
+ if (radius <= 0) {
289
+ return null;
290
+ }
291
+ const bFill = style.CylinderFillColor ? bruce_models_1.Calculator.GetColor(style.CylinderFillColor, entity, params.tags) : null;
292
+ const cFill = bFill ? (0, cesium_utils_1.ColorToCColor)(bFill) : Cesium.Color.RED;
293
+ const outline = Boolean(style.CylinderBorderEnabled);
294
+ let cOutline = null;
295
+ let outlineWidth = 1;
296
+ if (outline) {
297
+ const bOutline = style.CylinderBorderColor ? bruce_models_1.Calculator.GetColor(style.CylinderBorderColor, entity, params.tags) : null;
298
+ cOutline = bOutline ? (0, cesium_utils_1.ColorToCColor)(bOutline) : Cesium.Color.BLACK;
299
+ outlineWidth = (0, js_utils_1.EnsureNumber)(bruce_models_1.Calculator.GetNumber(style.CylinderBorderWidth, entity, params.tags), 1);
300
+ }
301
+ heightRef = getHeightRef(style);
302
+ let pos3d = entity_utils_1.EntityUtils.GetPos({
303
+ viewer: params.viewer,
304
+ entity,
305
+ recordHeightRef: heightRef,
306
+ returnHeightRef: heightRef,
307
+ allowRendered: false
308
+ });
309
+ const extrusion = getCylinderExtrusion(entity, params.tags, heightRef, style.CylinderFillExtrusion);
310
+ const hasOutline = outline && outlineWidth > 0;
311
+ const outlineExtrusion = hasOutline ? getCylinderExtrusion(entity, params.tags, heightRef, style.CylinderBorderExtrusion) : null;
312
+ // If this doesn't have its own extrusion, we must make it match the sibling.
313
+ // This way they render in a uniform way.
314
+ if (hasOutline) {
315
+ if (outlineExtrusion.value == undefined && extrusion.value != undefined) {
316
+ outlineExtrusion.exHeightRef = extrusion.exHeightRef;
317
+ outlineExtrusion.value = 0;
318
+ }
319
+ else if (outlineExtrusion.value != undefined && extrusion.value == undefined) {
320
+ extrusion.exHeightRef = outlineExtrusion.exHeightRef;
321
+ extrusion.value = 0;
322
+ }
323
+ }
324
+ let classification = Cesium.ClassificationType.TERRAIN;
325
+ if (style["drapeOver"] == "ALL") {
326
+ classification = Cesium.ClassificationType.BOTH;
327
+ }
328
+ // Height being set will kill classification.
329
+ // So we want to use it only when we have to (when extruded).
330
+ let height = undefined;
331
+ if (heightRef != Cesium.HeightReference.CLAMP_TO_GROUND && extrusion.value != undefined) {
332
+ height = Cesium.Cartographic.fromCartesian(pos3d).height;
333
+ }
334
+ if (!params.rendered || !params.rendered.ellipse) {
335
+ cEntity = new Cesium.Entity({
336
+ id: bruce_models_1.ObjectUtils.UId(15),
337
+ ellipse: {
338
+ semiMajorAxis: radius,
339
+ semiMinorAxis: radius,
340
+ material: cFill,
341
+ outlineWidth: null,
342
+ extrudedHeight: extrusion.value,
343
+ heightReference: heightRef,
344
+ extrudedHeightReference: extrusion.exHeightRef,
345
+ height: height,
346
+ zIndex: 1,
347
+ classificationType: classification,
348
+ distanceDisplayCondition: entity_render_engine_1.EntityRenderEngine.GetDisplayCondition(params.minDistance, params.maxDistance)
349
+ },
350
+ position: pos3d === null || pos3d === void 0 ? void 0 : pos3d.clone(),
351
+ show: true
352
+ });
353
+ }
354
+ else {
355
+ prepareExistingGraphic(params.rendered, hasOutline ? 1 : 0);
356
+ cEntity = params.rendered;
357
+ const curRadius = (0, cesium_utils_1.GetCValue)(params.viewer, cEntity.ellipse.semiMajorAxis);
358
+ if (curRadius != radius) {
359
+ cEntity.ellipse.semiMajorAxis = new Cesium.ConstantProperty(radius);
360
+ cEntity.ellipse.semiMinorAxis = new Cesium.ConstantProperty(radius);
361
+ }
362
+ cEntity.ellipse.outlineWidth = undefined;
363
+ {
364
+ const curHeightRef = (0, cesium_utils_1.GetCValue)(params.viewer, cEntity.ellipse.heightReference);
365
+ if (curHeightRef != heightRef) {
366
+ cEntity.ellipse.heightReference = new Cesium.ConstantProperty(heightRef);
367
+ }
368
+ const curHeight = (0, cesium_utils_1.GetCValue)(params.viewer, cEntity.ellipse.height);
369
+ if (curHeight != height) {
370
+ cEntity.ellipse.height = new Cesium.ConstantProperty(height);
371
+ }
372
+ }
373
+ {
374
+ const curExtHeightRef = (0, cesium_utils_1.GetCValue)(params.viewer, cEntity.ellipse.extrudedHeightReference);
375
+ if (curExtHeightRef != extrusion.exHeightRef) {
376
+ cEntity.ellipse.extrudedHeightReference = new Cesium.ConstantProperty(extrusion.exHeightRef);
377
+ }
378
+ const curExtHeight = (0, cesium_utils_1.GetCValue)(params.viewer, cEntity.ellipse.extrudedHeight);
379
+ if (curExtHeight != extrusion.value) {
380
+ cEntity.ellipse.extrudedHeight = new Cesium.ConstantProperty(extrusion.value);
381
+ }
382
+ }
383
+ cEntity.ellipse.zIndex = new Cesium.ConstantProperty(1);
384
+ cEntity.ellipse.distanceDisplayCondition = new Cesium.ConstantProperty(entity_render_engine_1.EntityRenderEngine.GetDisplayCondition(params.minDistance, params.maxDistance));
385
+ const curClassification = (0, cesium_utils_1.GetCValue)(params.viewer, cEntity.ellipse.classificationType);
386
+ if (curClassification != classification) {
387
+ cEntity.ellipse.classificationType = new Cesium.ConstantProperty(classification);
388
+ }
389
+ cEntity.position = new Cesium.ConstantPositionProperty(pos3d === null || pos3d === void 0 ? void 0 : pos3d.clone());
390
+ // We'll use "SetDefaultColor" to updating the internal reference and to allow for an animation.
391
+ // WARNING: ellipse does not support animation (yet?).
392
+ cesium_entity_styler_1.CesiumEntityStyler.SetDefaultColor({
393
+ color: cFill,
394
+ entity: cEntity,
395
+ viewer: params.viewer,
396
+ override: true,
397
+ requestRender: false
398
+ });
399
+ cEntity.show = true;
400
+ }
401
+ if (hasOutline) {
402
+ // Height being set will kill classification.
403
+ // So we want to use it only when we have to (when extruded).
404
+ let outlineHeight = undefined;
405
+ if (outlineExtrusion.exHeightRef != Cesium.HeightReference.CLAMP_TO_GROUND && outlineExtrusion.value != undefined) {
406
+ outlineHeight = Cesium.Cartographic.fromCartesian(pos3d).height;
407
+ }
408
+ let outlineEntity = siblings === null || siblings === void 0 ? void 0 : siblings[0];
409
+ if (outlineEntity && outlineEntity.ellipse) {
410
+ const curRadius = (0, cesium_utils_1.GetCValue)(params.viewer, outlineEntity.ellipse.semiMajorAxis);
411
+ if (curRadius != radius + outlineWidth) {
412
+ outlineEntity.ellipse.semiMajorAxis = new Cesium.ConstantProperty(radius + outlineWidth);
413
+ outlineEntity.ellipse.semiMinorAxis = new Cesium.ConstantProperty(radius + outlineWidth);
414
+ }
415
+ {
416
+ const curHeightRef = (0, cesium_utils_1.GetCValue)(params.viewer, outlineEntity.ellipse.heightReference);
417
+ if (curHeightRef != heightRef) {
418
+ outlineEntity.ellipse.heightReference = new Cesium.ConstantProperty(heightRef);
419
+ }
420
+ const curHeight = (0, cesium_utils_1.GetCValue)(params.viewer, outlineEntity.ellipse.height);
421
+ if (curHeight != outlineHeight) {
422
+ outlineEntity.ellipse.height = new Cesium.ConstantProperty(outlineHeight);
423
+ }
424
+ }
425
+ {
426
+ const curExtHeightRef = (0, cesium_utils_1.GetCValue)(params.viewer, outlineEntity.ellipse.extrudedHeightReference);
427
+ if (curExtHeightRef != outlineExtrusion.exHeightRef) {
428
+ outlineEntity.ellipse.extrudedHeightReference = new Cesium.ConstantProperty(outlineExtrusion.exHeightRef);
429
+ }
430
+ const curExtHeight = (0, cesium_utils_1.GetCValue)(params.viewer, outlineEntity.ellipse.extrudedHeight);
431
+ if (curExtHeight != outlineExtrusion.value) {
432
+ outlineEntity.ellipse.extrudedHeight = new Cesium.ConstantProperty(outlineExtrusion.value);
433
+ }
434
+ }
435
+ outlineEntity.ellipse.zIndex = new Cesium.ConstantProperty(2);
436
+ outlineEntity.ellipse.distanceDisplayCondition = new Cesium.ConstantProperty(entity_render_engine_1.EntityRenderEngine.GetDisplayCondition(params.minDistance, params.maxDistance));
437
+ const curClassification = (0, cesium_utils_1.GetCValue)(params.viewer, outlineEntity.ellipse.classificationType);
438
+ if (curClassification != classification) {
439
+ outlineEntity.ellipse.classificationType = new Cesium.ConstantProperty(classification);
440
+ }
441
+ // We'll use "SetDefaultColor" to updating the internal reference and to allow for an animation.
442
+ // WARNING: ellipse does not support animation (yet?).
443
+ cesium_entity_styler_1.CesiumEntityStyler.SetDefaultColor({
444
+ color: cOutline,
445
+ entity: outlineEntity,
446
+ viewer: params.viewer,
447
+ override: true,
448
+ requestRender: false
449
+ });
450
+ outlineEntity.show = true;
451
+ }
452
+ else {
453
+ outlineEntity = new Cesium.Entity({
454
+ id: bruce_models_1.ObjectUtils.UId(15),
455
+ ellipse: {
456
+ semiMajorAxis: radius + outlineWidth,
457
+ semiMinorAxis: radius + outlineWidth,
458
+ material: cOutline,
459
+ outlineWidth: undefined,
460
+ extrudedHeight: outlineExtrusion.value,
461
+ heightReference: heightRef,
462
+ extrudedHeightReference: outlineExtrusion.exHeightRef,
463
+ height: outlineHeight,
464
+ zIndex: 2,
465
+ classificationType: classification,
466
+ distanceDisplayCondition: entity_render_engine_1.EntityRenderEngine.GetDisplayCondition(params.minDistance, params.maxDistance)
467
+ },
468
+ position: pos3d === null || pos3d === void 0 ? void 0 : pos3d.clone()
469
+ });
470
+ }
471
+ siblings.push(outlineEntity);
472
+ }
473
+ }
474
+ if (!cEntity) {
475
+ const bColor = style.color ? bruce_models_1.Calculator.GetColor(style.color, entity, params.tags) : null;
476
+ const cColor = bColor ? (0, cesium_utils_1.ColorToCColor)(bColor) : Cesium.Color.fromCssColorString("rgba(33, 150, 243, 0.8)");
477
+ let size = style.size ? bruce_models_1.Calculator.GetNumber(style.size, entity, params.tags) : null;
478
+ if (size == null) {
479
+ size = 20;
480
+ }
481
+ size = (0, js_utils_1.EnsureNumber)(size);
482
+ if (size <= 0) {
483
+ return null;
484
+ }
485
+ heightRef = getHeightRef(style);
486
+ const circleBillboard = createCircleBillboard(size, cColor.toCssColorString());
487
+ const disableDepthTest = Boolean(style.renderOnTop);
488
+ updateShouldShowTrack();
489
+ if (!params.rendered || !params.rendered.billboard) {
490
+ const animateColorIn = new cesium_animated_property_1.CesiumAnimatedProperty.AnimateColor({
491
+ durationMs: 200,
492
+ targetColor: cColor,
493
+ startColor: cColor.withAlpha(0),
494
+ viewer: params.viewer
495
+ });
496
+ let position = null;
497
+ // If we have a series of time-based positions then we'll animate as time changes.
498
+ const series = cesium_animated_property_1.CesiumAnimatedProperty.GetSeriesPossesForHistoricEntity(params.viewer, heightRef, heightRef, params.entityHistoric);
499
+ if (series.length > 1) {
500
+ animatePosition = new cesium_animated_property_1.CesiumAnimatedProperty.AnimatePositionSeries({
501
+ posses: series,
502
+ viewer: params.viewer
503
+ });
504
+ position = new Cesium.CallbackProperty(() => animatePosition.GetValue(), false);
505
+ position["CesiumAnimatedProperty.AnimatePositionSeries"] = animatePosition;
506
+ }
507
+ else {
508
+ position = new Cesium.CallbackProperty(() => entity_utils_1.EntityUtils.GetPos({
509
+ viewer: params.viewer,
510
+ entity,
511
+ recordHeightRef: heightRef,
512
+ returnHeightRef: heightRef,
513
+ allowRendered: false
514
+ }), true);
515
+ }
516
+ cEntity = new Cesium.Entity({
517
+ id: bruce_models_1.ObjectUtils.UId(15),
518
+ // point: {
519
+ // pixelSize: size,
520
+ // color: cColor,
521
+ // heightReference: getHeightRef(style),
522
+ // distanceDisplayCondition: EntityRenderEngine.GetDisplayCondition(params.minDistance, params.maxDistance)
523
+ // },
524
+ // We are generating a billboard instead of using the point.
525
+ // This is because points were behaving strangely where they would appear oblong shapes.
526
+ // This occurred consistently when rendering many icons and points at the same time.
527
+ billboard: {
528
+ height: circleBillboard.height,
529
+ width: circleBillboard.width,
530
+ image: circleBillboard.canvasDataUri,
531
+ color: new Cesium.CallbackProperty(() => {
532
+ const color = animateColorIn.GetColor();
533
+ if (animateColorIn.IsDone() && (cEntity === null || cEntity === void 0 ? void 0 : cEntity.billboard)) {
534
+ cEntity.billboard.color = new Cesium.CallbackProperty(() => color, true);
535
+ }
536
+ return color;
537
+ }, false),
538
+ heightReference: heightRef,
539
+ distanceDisplayCondition: entity_render_engine_1.EntityRenderEngine.GetDisplayCondition(params.minDistance, params.maxDistance),
540
+ disableDepthTestDistance: disableDepthTest ? Number.POSITIVE_INFINITY : undefined
541
+ },
542
+ position: position,
543
+ show: true
544
+ });
545
+ cesium_entity_styler_1.CesiumEntityStyler.BakeDefaultColor({
546
+ entity: cEntity,
547
+ viewer: params.viewer,
548
+ colors: {
549
+ "billboard": cColor
550
+ },
551
+ refresh: false
552
+ });
553
+ }
554
+ else {
555
+ prepareExistingGraphic(params.rendered, shouldShowTrack ? 1 : 0);
556
+ cEntity = params.rendered;
557
+ const imgKey = `${size}-${cColor.toCssColorString()}`;
558
+ const currentImgKey = cEntity.billboard._billboardImgKey;
559
+ if (currentImgKey != imgKey) {
560
+ cEntity.billboard.image = new Cesium.ConstantProperty(circleBillboard.canvasDataUri);
561
+ }
562
+ cEntity.billboard.height = new Cesium.ConstantProperty(circleBillboard.height);
563
+ cEntity.billboard.width = new Cesium.ConstantProperty(circleBillboard.width);
564
+ cEntity.billboard.heightReference = new Cesium.ConstantProperty(heightRef);
565
+ cEntity.billboard.distanceDisplayCondition = new Cesium.ConstantProperty(entity_render_engine_1.EntityRenderEngine.GetDisplayCondition(params.minDistance, params.maxDistance));
566
+ cEntity.billboard.disableDepthTestDistance = new Cesium.ConstantProperty(disableDepthTest ? Number.POSITIVE_INFINITY : undefined);
567
+ const prevPos3d = (0, cesium_utils_1.GetCValue)(params.viewer, cEntity.position);
568
+ let prevStartTime = null;
569
+ if (cEntity.position && cEntity.position["CesiumAnimatedProperty.AnimatePositionSeries"]) {
570
+ prevStartTime = cEntity.position["CesiumAnimatedProperty.AnimatePositionSeries"].GetAnimateFromDateTime();
571
+ }
572
+ // If we have a series of time-based positions then we'll animate as time changes.
573
+ const series = cesium_animated_property_1.CesiumAnimatedProperty.GetSeriesPossesForHistoricEntity(params.viewer, heightRef, heightRef, params.entityHistoric);
574
+ if (series.length > 1) {
575
+ animatePosition = new cesium_animated_property_1.CesiumAnimatedProperty.AnimatePositionSeries({
576
+ posses: series,
577
+ viewer: params.viewer,
578
+ animateFromPos3d: prevPos3d,
579
+ animateFromPos3dTimeStart: prevStartTime
580
+ });
581
+ cEntity.position = new Cesium.CallbackProperty(() => animatePosition.GetValue(), false);
582
+ cEntity.position["CesiumAnimatedProperty.AnimatePositionSeries"] = animatePosition;
583
+ }
584
+ else {
585
+ const pos3d = entity_utils_1.EntityUtils.GetPos({
586
+ viewer: params.viewer,
587
+ entity,
588
+ recordHeightRef: heightRef,
589
+ returnHeightRef: heightRef,
590
+ allowRendered: false
591
+ });
592
+ if (!prevPos3d || !Cesium.Cartesian3.equals(prevPos3d, pos3d)) {
593
+ animatePosition = new cesium_animated_property_1.CesiumAnimatedProperty.AnimatePosition({
594
+ durationMs: 200,
595
+ targetPos3d: pos3d,
596
+ viewer: params.viewer,
597
+ startPos3d: prevPos3d
598
+ });
599
+ cEntity.position = new Cesium.CallbackProperty(() => animatePosition.GetValue(), false);
600
+ }
601
+ }
602
+ // We'll use "SetDefaultColor" to updating the internal reference and to allow for an animation.
603
+ cesium_entity_styler_1.CesiumEntityStyler.SetDefaultColor({
604
+ color: cColor,
605
+ entity: cEntity,
606
+ viewer: params.viewer,
607
+ override: true,
608
+ requestRender: false
609
+ });
610
+ cEntity.show = true;
611
+ cEntity.billboard._billboardImgKey = imgKey;
612
+ }
613
+ cEntity.billboard._billboardSize = Math.ceil(circleBillboard.height / 2);
614
+ }
615
+ // Generate a polyline 'track' for the historic data.
616
+ // We do this for historic data that exists and is moving.
617
+ if (shouldShowTrack && animatePosition && animatePosition instanceof cesium_animated_property_1.CesiumAnimatedProperty.AnimatePositionSeries && animatePosition.GetSeries) {
618
+ const lStyle = (_d = (_c = params.fullStyle) === null || _c === void 0 ? void 0 : _c.polylineStyle) !== null && _d !== void 0 ? _d : {};
619
+ const bColor = lStyle.lineColor ? bruce_models_1.Calculator.GetColor(lStyle.lineColor, entity, params.tags) : null;
620
+ const cColor = bColor ? (0, cesium_utils_1.ColorToCColor)(bColor) : Cesium.Color.fromCssColorString("rgba(255, 193, 7, 0.8)");
621
+ let width = lStyle.lineWidth ? (0, js_utils_1.EnsureNumber)(bruce_models_1.Calculator.GetNumber(lStyle.lineWidth, entity, params.tags)) : 2;
622
+ if (width == null) {
623
+ width = 2;
624
+ }
625
+ width = (0, js_utils_1.EnsureNumber)(width);
626
+ const lHeightRef = getHeightRef(lStyle, heightRef);
627
+ let trackEntity = siblings === null || siblings === void 0 ? void 0 : siblings[0];
628
+ if (!trackEntity || !trackEntity.polyline) {
629
+ trackEntity = new Cesium.Entity({
630
+ id: bruce_models_1.ObjectUtils.UId(15),
631
+ polyline: {
632
+ positions: [],
633
+ width: width,
634
+ material: cColor,
635
+ clampToGround: lHeightRef == Cesium.HeightReference.CLAMP_TO_GROUND,
636
+ zIndex: 0,
637
+ classificationType: Cesium.ClassificationType.BOTH,
638
+ show: true
639
+ },
640
+ position: (0, cesium_utils_1.GetCValue)(params.viewer, cEntity.position),
641
+ });
642
+ // Visual was updated in a way that needs a full refresh.
643
+ if (params.rego) {
644
+ params.rego.stale = true;
645
+ }
646
+ }
647
+ trackEntity._parentEntity = null;
648
+ trackEntity._noEdit = true;
649
+ trackEntity.polyline.positions = new Cesium.CallbackProperty(() => {
650
+ return animatePosition.GetSeries();
651
+ }, false);
652
+ // We'll use "SetDefaultColor" to updating the internal reference and to allow for an animation.
653
+ // WARNING: polyline does not support animation (yet?).
654
+ cesium_entity_styler_1.CesiumEntityStyler.SetDefaultColor({
655
+ color: cColor,
656
+ entity: trackEntity,
657
+ viewer: params.viewer,
658
+ override: true,
659
+ requestRender: false
660
+ });
661
+ siblings.push(trackEntity);
662
+ trackEntity._parentEntity = cEntity;
663
+ }
664
+ cEntity._siblingGraphics = siblings;
665
+ return cEntity;
666
+ }
667
+ EntityRenderEnginePoint.Render = Render;
668
+ /**
669
+ * Renders a group of point Entities.
670
+ * This will take an optional set of prior rendered Cesium Entities to update rather than create from scratch.
671
+ * @param params
672
+ * @returns
673
+ */
674
+ async function RenderGroup(params) {
675
+ var _a, _b, _c, _d, _e;
676
+ const api = params.apiGetter.getApi();
677
+ const cEntities = new Map();
678
+ for (let i = 0; i < params.entities.length; i++) {
679
+ const entity = params.entities[i];
680
+ const zoomItem = params.zoomItems[entity.Bruce.ID];
681
+ const style = zoomItem.StyleID != -1 ? (_a = (await getStyle(api, entity, zoomItem.StyleID))) === null || _a === void 0 ? void 0 : _a.Settings : zoomItem.Style;
682
+ const tagIds = entity.Bruce["Layer.ID"];
683
+ let tags = [];
684
+ if (tagIds && tagIds.length > 0) {
685
+ tags = (await bruce_models_1.EntityTag.GetListByIds({
686
+ api,
687
+ tagIds
688
+ })).tags;
689
+ }
690
+ const pStyle = (_b = style === null || style === void 0 ? void 0 : style.pointStyle) !== null && _b !== void 0 ? _b : {};
691
+ let rego = null;
692
+ // Only used for historic tracks right now.
693
+ // So won't bother getting it if we don't have historic data.
694
+ if ((_c = params.entitiesHistoric) === null || _c === void 0 ? void 0 : _c[entity.Bruce.ID]) {
695
+ rego = params.visualRegister.GetRego({
696
+ entityId: entity.Bruce.ID,
697
+ menuItemId: params.menuItemId
698
+ });
699
+ }
700
+ const cEntity = await Render({
701
+ entity: entity,
702
+ style: pStyle,
703
+ tags: tags,
704
+ viewer: params.viewer,
705
+ api: api,
706
+ apiGetter: params.apiGetter,
707
+ maxDistance: zoomItem.MaxZoom,
708
+ minDistance: zoomItem.MinZoom,
709
+ rendered: (_d = params.rendered) === null || _d === void 0 ? void 0 : _d.get(entity.Bruce.ID),
710
+ entityHistoric: (_e = params.entitiesHistoric) === null || _e === void 0 ? void 0 : _e[entity.Bruce.ID],
711
+ entityHistoricDrawTrack: params.entityHistoricDrawTrack,
712
+ fullStyle: style,
713
+ rego: rego
714
+ });
715
+ if (cEntity) {
716
+ const name = await getName(api, entity);
717
+ cEntity.name = name;
718
+ cEntity._renderGroup = entity_render_engine_1.EntityRenderEngine.GetRenderGroupId(zoomItem);
719
+ }
720
+ cEntities.set(entity.Bruce.ID, cEntity);
721
+ }
722
+ return cEntities;
723
+ }
724
+ EntityRenderEnginePoint.RenderGroup = RenderGroup;
725
+ })(EntityRenderEnginePoint = exports.EntityRenderEnginePoint || (exports.EntityRenderEnginePoint = {}));
726
+ // Cache of billboards to avoid regenerating them for the same size and color.
727
+ const _billboardCache = new bruce_models_1.LRUCache(150);
728
+ const POINT_BILLBOARD_PADDING = 1;
729
+ const createCircleBillboard = (size, colorCss) => {
730
+ const key = size + "-" + colorCss;
731
+ const cacheData = _billboardCache.Get(key);
732
+ if ((cacheData === null || cacheData === void 0 ? void 0 : cacheData.canvasDataUri) && typeof (cacheData === null || cacheData === void 0 ? void 0 : cacheData.canvasDataUri) == "string") {
733
+ return cacheData;
734
+ }
735
+ // Slight padding to avoid corners clipping.
736
+ const canvasSize = size + (POINT_BILLBOARD_PADDING * 4);
737
+ const canvas = document.createElement("canvas");
738
+ canvas.width = canvasSize;
739
+ canvas.height = canvasSize;
740
+ const context = canvas.getContext("2d");
741
+ context.beginPath();
742
+ context.arc(canvasSize / 2, canvasSize / 2, size / 2, 0, 2 * Math.PI, false);
743
+ context.fillStyle = colorCss;
744
+ context.fill();
745
+ const data = {
746
+ canvasDataUri: canvas.toDataURL("image/png"),
747
+ colorCss,
748
+ size,
749
+ height: canvasSize,
750
+ width: canvasSize
751
+ };
752
+ _billboardCache.Set(key, data);
753
+ return data;
754
+ };
755
+ const createImageBillboard = (url) => {
756
+ const cacheKey = "image-" + url;
757
+ const cacheData = _billboardCache.Get(cacheKey);
758
+ if (cacheData) {
759
+ return cacheData;
760
+ }
761
+ const prom = new Promise(async (res, rej) => {
762
+ try {
763
+ const response = await fetch(url);
764
+ const blob = await response.blob();
765
+ const canvas = document.createElement("canvas");
766
+ const image = new Image();
767
+ image.onload = () => {
768
+ canvas.width = image.width;
769
+ canvas.height = image.height;
770
+ const context = canvas.getContext("2d");
771
+ context.drawImage(image, 0, 0);
772
+ const data = {
773
+ canvasDataUri: canvas.toDataURL("image/png"),
774
+ height: image.height
775
+ };
776
+ res(data);
777
+ };
778
+ image.onerror = (e) => {
779
+ rej(e);
780
+ };
781
+ image.src = URL.createObjectURL(blob);
782
+ }
783
+ catch (e) {
784
+ rej(e);
785
+ }
786
+ });
787
+ _billboardCache.Set(cacheKey, prom);
788
+ return prom;
789
+ };
790
+ /**
791
+ * Turns a hard-coded file url into pieces so we can properly load it using our libraries rather than directly.
792
+ * @param url eg: https://demoplantprocess.api.nextspace-uat.net/file/4c29bdf8-1f0b-4739-b0ee-421ea07ba4e5.png
793
+ */
794
+ function extractMetadataFromFileUrl(url) {
795
+ var _a;
796
+ url = url.toLowerCase();
797
+ // Bzzt, invalid url format for our purposes.
798
+ if (!url.includes(".api.") || !url.includes("/file/")) {
799
+ return null;
800
+ }
801
+ url = url.replace("https://", "").replace("http://", "");
802
+ let envId = bruce_models_1.Api.EEnv.PROD;
803
+ if (url.includes("-dev.net")) {
804
+ envId = bruce_models_1.Api.EEnv.DEV;
805
+ }
806
+ else if (url.includes("-stg.net")) {
807
+ envId = bruce_models_1.Api.EEnv.STG;
808
+ }
809
+ else if (url.includes("-uat.net")) {
810
+ envId = bruce_models_1.Api.EEnv.UAT;
811
+ }
812
+ const parts = url.split("/");
813
+ const host = parts[0];
814
+ const hostParts = host.split(".");
815
+ const accountId = hostParts[0];
816
+ let fileId = (_a = parts[2]) !== null && _a !== void 0 ? _a : "";
817
+ if (fileId.includes("?")) {
818
+ fileId = fileId.split("?")[0];
819
+ }
820
+ if (fileId.includes(".")) {
821
+ fileId = fileId.split(".")[0];
822
+ }
823
+ if (!fileId || !accountId) {
824
+ return null;
825
+ }
826
+ return {
827
+ accountId,
828
+ fileId: fileId,
829
+ envId: envId
830
+ };
831
+ }
832
+ function getHeightRef(style, defaultStyle) {
833
+ var _a;
834
+ let heightRef = defaultStyle == null ? Cesium.HeightReference.CLAMP_TO_GROUND : defaultStyle;
835
+ const altOptionId = (_a = style === null || style === void 0 ? void 0 : style.altitudeOption) === null || _a === void 0 ? void 0 : _a.id;
836
+ if (altOptionId == 0) {
837
+ heightRef = Cesium.HeightReference.CLAMP_TO_GROUND;
838
+ }
839
+ else if (altOptionId == 1) {
840
+ heightRef = Cesium.HeightReference.NONE;
841
+ }
842
+ else if (altOptionId == 2) {
843
+ heightRef = Cesium.HeightReference.RELATIVE_TO_GROUND;
844
+ }
845
+ return heightRef;
846
+ }
847
+ function getCylinderStyleExtrusion(style, entity, tags, heightRef) {
848
+ if (!style) {
849
+ return null;
850
+ }
851
+ try {
852
+ const extrusion = +bruce_models_1.Calculator.GetNumber(style, entity, tags);
853
+ if (!extrusion && extrusion != 0) {
854
+ return null;
855
+ }
856
+ /*
857
+ Cesium extrudes in strange way.
858
+ If you want something that is 50 meters above sea, and 5 meters tall,
859
+ You need to extrude by 55 meters, if you extrude by 5 it will extrude from sea and look flat.
860
+ */
861
+ const height = (0, js_utils_1.EnsureNumber)(bruce_models_1.Entity.GetValue({
862
+ entity: entity,
863
+ path: ["Bruce", "Location", "altitude"]
864
+ }), 0);
865
+ return heightRef != Cesium.HeightReference.CLAMP_TO_GROUND ? extrusion + height : extrusion;
866
+ }
867
+ catch (e) {
868
+ console.error(e);
869
+ }
870
+ return 0;
871
+ }
872
+ function getCylinderExtrusion(entity, tags, heightRef, style) {
873
+ const data = {
874
+ value: undefined,
875
+ exHeightRef: heightRef == Cesium.HeightReference.CLAMP_TO_GROUND ? Cesium.HeightReference.RELATIVE_TO_GROUND : heightRef
876
+ };
877
+ const extrusion = getCylinderStyleExtrusion(style, entity, tags, heightRef);
878
+ if (extrusion) {
879
+ data.value = extrusion;
880
+ }
881
+ if (data.value != undefined) {
882
+ data.value = (0, js_utils_1.EnsureNumber)(data.value);
883
+ }
884
+ return data;
885
+ }
886
+ async function getName(api, entity) {
887
+ try {
888
+ const typeId = entity.Bruce["EntityType.ID"];
889
+ let type = null;
890
+ if (typeId) {
891
+ type = (await bruce_models_1.EntityType.Get({
892
+ api,
893
+ entityTypeId: typeId
894
+ })).entityType;
895
+ }
896
+ if (type) {
897
+ const name = bruce_models_1.Entity.CalculateName({
898
+ entity,
899
+ type,
900
+ defaultToId: false
901
+ });
902
+ return name ? name : "Unnamed Entity";
903
+ }
904
+ }
905
+ catch (e) {
906
+ let hideError = false;
907
+ // TODO: we need a util for extracting code + message rather than writing all this every time.
908
+ if (e && typeof e == "object" && e.ERROR) {
909
+ const error = e.ERROR;
910
+ const code = error && typeof error == "object" ? error.Code : "";
911
+ // Avoiding logging a common error.
912
+ // This happens when rendering entities that don't have records.
913
+ hideError = String(code).toLowerCase() == "notfound";
914
+ }
915
+ if (!hideError) {
916
+ console.error(e);
917
+ }
918
+ }
919
+ return "Unknown entity";
920
+ }
921
+ async function getStyle(api, entity, styleId) {
922
+ let style = null;
923
+ if (styleId && styleId != -1) {
924
+ try {
925
+ style = (await bruce_models_1.Style.Get({
926
+ api,
927
+ styleId
928
+ })).style;
929
+ }
930
+ // Probably deleted.
931
+ catch (e) {
932
+ console.error(e);
933
+ }
934
+ }
935
+ if (!style) {
936
+ const typeId = entity.Bruce["EntityType.ID"];
937
+ if (typeId) {
938
+ try {
939
+ const { entityType: type } = await bruce_models_1.EntityType.Get({
940
+ api,
941
+ entityTypeId: typeId
942
+ });
943
+ if (type["DisplaySetting.ID"]) {
944
+ try {
945
+ style = (await bruce_models_1.Style.Get({
946
+ api,
947
+ styleId: type["DisplaySetting.ID"]
948
+ })).style;
949
+ }
950
+ catch (e) {
951
+ let hideError = false;
952
+ // TODO: we need a util for extracting code + message rather than writing all this every time.
953
+ if (e && typeof e == "object" && e.ERROR) {
954
+ const error = e.ERROR;
955
+ const code = error && typeof error == "object" ? error.Code : "";
956
+ // Avoiding logging a common error.
957
+ // This happens when rendering entities that don't have records.
958
+ hideError = String(code).toLowerCase() == "notfound";
959
+ }
960
+ if (!hideError) {
961
+ console.error(e);
962
+ }
963
+ }
964
+ }
965
+ }
966
+ catch (e) {
967
+ let hideError = false;
968
+ // TODO: we need a util for extracting code + message rather than writing all this every time.
969
+ if (e && typeof e == "object" && e.ERROR) {
970
+ const error = e.ERROR;
971
+ const code = error && typeof error == "object" ? error.Code : "";
972
+ // Avoiding logging a common error.
973
+ // This happens when rendering entities that don't have records.
974
+ hideError = String(code).toLowerCase() == "notfound";
975
+ }
976
+ if (!hideError) {
977
+ console.error(e);
978
+ }
979
+ }
980
+ }
981
+ }
982
+ return style;
983
+ }
984
+ //# sourceMappingURL=entity-render-engine-point.js.map