bruce-cesium 5.7.7 → 5.7.9

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/package.json +2 -2
  2. package/dist/bruce-cesium.es5.js +0 -32263
  3. package/dist/bruce-cesium.es5.js.map +0 -1
  4. package/dist/bruce-cesium.umd.js +0 -32187
  5. package/dist/bruce-cesium.umd.js.map +0 -1
  6. package/dist/lib/bruce-cesium.js +0 -76
  7. package/dist/lib/bruce-cesium.js.map +0 -1
  8. package/dist/lib/internal/cesium-utils.js +0 -109
  9. package/dist/lib/internal/cesium-utils.js.map +0 -1
  10. package/dist/lib/internal/js-utils.js +0 -22
  11. package/dist/lib/internal/js-utils.js.map +0 -1
  12. package/dist/lib/internal/limited-log.js +0 -17
  13. package/dist/lib/internal/limited-log.js.map +0 -1
  14. package/dist/lib/rendering/cesium-animated-in-out.js +0 -166
  15. package/dist/lib/rendering/cesium-animated-in-out.js.map +0 -1
  16. package/dist/lib/rendering/cesium-animated-property.js +0 -1111
  17. package/dist/lib/rendering/cesium-animated-property.js.map +0 -1
  18. package/dist/lib/rendering/entity-gatherer.js +0 -327
  19. package/dist/lib/rendering/entity-gatherer.js.map +0 -1
  20. package/dist/lib/rendering/entity-render-engine-model3d.js +0 -689
  21. package/dist/lib/rendering/entity-render-engine-model3d.js.map +0 -1
  22. package/dist/lib/rendering/entity-render-engine-point.js +0 -984
  23. package/dist/lib/rendering/entity-render-engine-point.js.map +0 -1
  24. package/dist/lib/rendering/entity-render-engine-polygon.js +0 -669
  25. package/dist/lib/rendering/entity-render-engine-polygon.js.map +0 -1
  26. package/dist/lib/rendering/entity-render-engine-polyline.js +0 -415
  27. package/dist/lib/rendering/entity-render-engine-polyline.js.map +0 -1
  28. package/dist/lib/rendering/entity-render-engine.js +0 -442
  29. package/dist/lib/rendering/entity-render-engine.js.map +0 -1
  30. package/dist/lib/rendering/getters/batched-data-getter.js +0 -91
  31. package/dist/lib/rendering/getters/batched-data-getter.js.map +0 -1
  32. package/dist/lib/rendering/getters/entity-filter-getter.js +0 -634
  33. package/dist/lib/rendering/getters/entity-filter-getter.js.map +0 -1
  34. package/dist/lib/rendering/getters/entity-globe.js +0 -172
  35. package/dist/lib/rendering/getters/entity-globe.js.map +0 -1
  36. package/dist/lib/rendering/menu-item-creator.js +0 -354
  37. package/dist/lib/rendering/menu-item-creator.js.map +0 -1
  38. package/dist/lib/rendering/menu-item-manager.js +0 -464
  39. package/dist/lib/rendering/menu-item-manager.js.map +0 -1
  40. package/dist/lib/rendering/relation-render-engine.js +0 -235
  41. package/dist/lib/rendering/relation-render-engine.js.map +0 -1
  42. package/dist/lib/rendering/render-managers/common/cesium-parabola.js +0 -368
  43. package/dist/lib/rendering/render-managers/common/cesium-parabola.js.map +0 -1
  44. package/dist/lib/rendering/render-managers/common/entity-label.js +0 -703
  45. package/dist/lib/rendering/render-managers/common/entity-label.js.map +0 -1
  46. package/dist/lib/rendering/render-managers/common/point-clustering.js +0 -826
  47. package/dist/lib/rendering/render-managers/common/point-clustering.js.map +0 -1
  48. package/dist/lib/rendering/render-managers/common/shared-getters.js +0 -187
  49. package/dist/lib/rendering/render-managers/common/shared-getters.js.map +0 -1
  50. package/dist/lib/rendering/render-managers/data-source/data-source-static-csv-manager.js +0 -668
  51. package/dist/lib/rendering/render-managers/data-source/data-source-static-csv-manager.js.map +0 -1
  52. package/dist/lib/rendering/render-managers/data-source/data-source-static-kml-manager.js +0 -92
  53. package/dist/lib/rendering/render-managers/data-source/data-source-static-kml-manager.js.map +0 -1
  54. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js +0 -143
  55. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js.map +0 -1
  56. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js +0 -510
  57. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js.map +0 -1
  58. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js +0 -717
  59. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js.map +0 -1
  60. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +0 -999
  61. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js.map +0 -1
  62. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js +0 -186
  63. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js.map +0 -1
  64. package/dist/lib/rendering/render-managers/other/assembly-render-manager.js +0 -226
  65. package/dist/lib/rendering/render-managers/other/assembly-render-manager.js.map +0 -1
  66. package/dist/lib/rendering/render-managers/other/google-search-render-manager.js +0 -430
  67. package/dist/lib/rendering/render-managers/other/google-search-render-manager.js.map +0 -1
  68. package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js +0 -290
  69. package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js.map +0 -1
  70. package/dist/lib/rendering/render-managers/other/relations-render-manager.js +0 -401
  71. package/dist/lib/rendering/render-managers/other/relations-render-manager.js.map +0 -1
  72. package/dist/lib/rendering/render-managers/render-manager.js +0 -276
  73. package/dist/lib/rendering/render-managers/render-manager.js.map +0 -1
  74. package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js +0 -356
  75. package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js.map +0 -1
  76. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +0 -861
  77. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js.map +0 -1
  78. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js +0 -279
  79. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js.map +0 -1
  80. package/dist/lib/rendering/render-managers/tilesets/tileset-google-photos-render-manager.js +0 -104
  81. package/dist/lib/rendering/render-managers/tilesets/tileset-google-photos-render-manager.js.map +0 -1
  82. package/dist/lib/rendering/render-managers/tilesets/tileset-i3s-render-manager.js +0 -81
  83. package/dist/lib/rendering/render-managers/tilesets/tileset-i3s-render-manager.js.map +0 -1
  84. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js +0 -378
  85. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js.map +0 -1
  86. package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js +0 -140
  87. package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js.map +0 -1
  88. package/dist/lib/rendering/tile-render-engine.js +0 -1328
  89. package/dist/lib/rendering/tile-render-engine.js.map +0 -1
  90. package/dist/lib/rendering/tileset-render-engine.js +0 -588
  91. package/dist/lib/rendering/tileset-render-engine.js.map +0 -1
  92. package/dist/lib/rendering/tileset-styler.js +0 -590
  93. package/dist/lib/rendering/tileset-styler.js.map +0 -1
  94. package/dist/lib/rendering/view-render-engine.js +0 -1004
  95. package/dist/lib/rendering/view-render-engine.js.map +0 -1
  96. package/dist/lib/rendering/visual-register-culler.js +0 -676
  97. package/dist/lib/rendering/visual-register-culler.js.map +0 -1
  98. package/dist/lib/rendering/visuals-register.js +0 -1695
  99. package/dist/lib/rendering/visuals-register.js.map +0 -1
  100. package/dist/lib/utils/cesium-entity-styler.js +0 -915
  101. package/dist/lib/utils/cesium-entity-styler.js.map +0 -1
  102. package/dist/lib/utils/drawing-utils.js +0 -308
  103. package/dist/lib/utils/drawing-utils.js.map +0 -1
  104. package/dist/lib/utils/entity-utils.js +0 -1382
  105. package/dist/lib/utils/entity-utils.js.map +0 -1
  106. package/dist/lib/utils/measure-utils.js +0 -73
  107. package/dist/lib/utils/measure-utils.js.map +0 -1
  108. package/dist/lib/utils/simplify-geometry.js +0 -323
  109. package/dist/lib/utils/simplify-geometry.js.map +0 -1
  110. package/dist/lib/utils/view-utils.js +0 -392
  111. package/dist/lib/utils/view-utils.js.map +0 -1
  112. package/dist/lib/viewer/cesium-view-monitor.js +0 -393
  113. package/dist/lib/viewer/cesium-view-monitor.js.map +0 -1
  114. package/dist/lib/viewer/viewer-event-tracker.js +0 -70
  115. package/dist/lib/viewer/viewer-event-tracker.js.map +0 -1
  116. package/dist/lib/viewer/viewer-utils.js +0 -310
  117. package/dist/lib/viewer/viewer-utils.js.map +0 -1
  118. package/dist/lib/widgets/common/draw-3d-polygon.js +0 -458
  119. package/dist/lib/widgets/common/draw-3d-polygon.js.map +0 -1
  120. package/dist/lib/widgets/common/draw-3d-polyline.js +0 -415
  121. package/dist/lib/widgets/common/draw-3d-polyline.js.map +0 -1
  122. package/dist/lib/widgets/common/measure-creator.js +0 -468
  123. package/dist/lib/widgets/common/measure-creator.js.map +0 -1
  124. package/dist/lib/widgets/common/walkthrough.js +0 -336
  125. package/dist/lib/widgets/common/walkthrough.js.map +0 -1
  126. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-fullscreen.js +0 -36
  127. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-fullscreen.js.map +0 -1
  128. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-search.js +0 -437
  129. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-search.js.map +0 -1
  130. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar.js +0 -38
  131. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar.js.map +0 -1
  132. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.js +0 -219
  133. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.js.map +0 -1
  134. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-user.js +0 -304
  135. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-user.js.map +0 -1
  136. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab.js +0 -29
  137. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab.js.map +0 -1
  138. package/dist/lib/widgets/widget-bookmarks.js +0 -497
  139. package/dist/lib/widgets/widget-bookmarks.js.map +0 -1
  140. package/dist/lib/widgets/widget-branding.js +0 -165
  141. package/dist/lib/widgets/widget-branding.js.map +0 -1
  142. package/dist/lib/widgets/widget-cursorbar.js +0 -1179
  143. package/dist/lib/widgets/widget-cursorbar.js.map +0 -1
  144. package/dist/lib/widgets/widget-embedded-info-view.js +0 -201
  145. package/dist/lib/widgets/widget-embedded-info-view.js.map +0 -1
  146. package/dist/lib/widgets/widget-info-view.js +0 -681
  147. package/dist/lib/widgets/widget-info-view.js.map +0 -1
  148. package/dist/lib/widgets/widget-left-panel.js +0 -548
  149. package/dist/lib/widgets/widget-left-panel.js.map +0 -1
  150. package/dist/lib/widgets/widget-nav-compass.js +0 -469
  151. package/dist/lib/widgets/widget-nav-compass.js.map +0 -1
  152. package/dist/lib/widgets/widget-view-bar.js +0 -284
  153. package/dist/lib/widgets/widget-view-bar.js.map +0 -1
  154. package/dist/lib/widgets/widget.js +0 -66
  155. package/dist/lib/widgets/widget.js.map +0 -1
  156. package/dist/types/bruce-cesium.d.ts +0 -58
  157. package/dist/types/internal/cesium-utils.d.ts +0 -23
  158. package/dist/types/internal/js-utils.d.ts +0 -8
  159. package/dist/types/internal/limited-log.d.ts +0 -6
  160. package/dist/types/rendering/cesium-animated-in-out.d.ts +0 -12
  161. package/dist/types/rendering/cesium-animated-property.d.ts +0 -245
  162. package/dist/types/rendering/entity-gatherer.d.ts +0 -36
  163. package/dist/types/rendering/entity-render-engine-model3d.d.ts +0 -56
  164. package/dist/types/rendering/entity-render-engine-point.d.ts +0 -73
  165. package/dist/types/rendering/entity-render-engine-polygon.d.ts +0 -26
  166. package/dist/types/rendering/entity-render-engine-polyline.d.ts +0 -47
  167. package/dist/types/rendering/entity-render-engine.d.ts +0 -108
  168. package/dist/types/rendering/getters/batched-data-getter.d.ts +0 -28
  169. package/dist/types/rendering/getters/entity-filter-getter.d.ts +0 -104
  170. package/dist/types/rendering/getters/entity-globe.d.ts +0 -21
  171. package/dist/types/rendering/menu-item-creator.d.ts +0 -53
  172. package/dist/types/rendering/menu-item-manager.d.ts +0 -85
  173. package/dist/types/rendering/relation-render-engine.d.ts +0 -32
  174. package/dist/types/rendering/render-managers/common/cesium-parabola.d.ts +0 -39
  175. package/dist/types/rendering/render-managers/common/entity-label.d.ts +0 -82
  176. package/dist/types/rendering/render-managers/common/point-clustering.d.ts +0 -91
  177. package/dist/types/rendering/render-managers/common/shared-getters.d.ts +0 -41
  178. package/dist/types/rendering/render-managers/data-source/data-source-static-csv-manager.d.ts +0 -41
  179. package/dist/types/rendering/render-managers/data-source/data-source-static-kml-manager.d.ts +0 -25
  180. package/dist/types/rendering/render-managers/entities/entities-datalab-render-manager.d.ts +0 -31
  181. package/dist/types/rendering/render-managers/entities/entities-ids-render-manager.d.ts +0 -76
  182. package/dist/types/rendering/render-managers/entities/entities-loaded-render-manager.d.ts +0 -90
  183. package/dist/types/rendering/render-managers/entities/entities-render-manager.d.ts +0 -90
  184. package/dist/types/rendering/render-managers/entities/entity-render-manager.d.ts +0 -42
  185. package/dist/types/rendering/render-managers/other/assembly-render-manager.d.ts +0 -38
  186. package/dist/types/rendering/render-managers/other/google-search-render-manager.d.ts +0 -45
  187. package/dist/types/rendering/render-managers/other/legacy-relations-render-manager.d.ts +0 -60
  188. package/dist/types/rendering/render-managers/other/relations-render-manager.d.ts +0 -53
  189. package/dist/types/rendering/render-managers/render-manager.d.ts +0 -30
  190. package/dist/types/rendering/render-managers/tilesets/tileset-arb-render-manager.d.ts +0 -37
  191. package/dist/types/rendering/render-managers/tilesets/tileset-cad-render-manager.d.ts +0 -86
  192. package/dist/types/rendering/render-managers/tilesets/tileset-entities-render-manager.d.ts +0 -41
  193. package/dist/types/rendering/render-managers/tilesets/tileset-google-photos-render-manager.d.ts +0 -26
  194. package/dist/types/rendering/render-managers/tilesets/tileset-i3s-render-manager.d.ts +0 -25
  195. package/dist/types/rendering/render-managers/tilesets/tileset-osm-render-manager.d.ts +0 -48
  196. package/dist/types/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.d.ts +0 -27
  197. package/dist/types/rendering/tile-render-engine.d.ts +0 -80
  198. package/dist/types/rendering/tileset-render-engine.d.ts +0 -99
  199. package/dist/types/rendering/tileset-styler.d.ts +0 -86
  200. package/dist/types/rendering/view-render-engine.d.ts +0 -32
  201. package/dist/types/rendering/visual-register-culler.d.ts +0 -18
  202. package/dist/types/rendering/visuals-register.d.ts +0 -351
  203. package/dist/types/utils/cesium-entity-styler.d.ts +0 -103
  204. package/dist/types/utils/drawing-utils.d.ts +0 -59
  205. package/dist/types/utils/entity-utils.d.ts +0 -133
  206. package/dist/types/utils/measure-utils.d.ts +0 -20
  207. package/dist/types/utils/simplify-geometry.d.ts +0 -19
  208. package/dist/types/utils/view-utils.d.ts +0 -101
  209. package/dist/types/viewer/cesium-view-monitor.d.ts +0 -35
  210. package/dist/types/viewer/viewer-event-tracker.d.ts +0 -47
  211. package/dist/types/viewer/viewer-utils.d.ts +0 -88
  212. package/dist/types/widgets/common/draw-3d-polygon.d.ts +0 -62
  213. package/dist/types/widgets/common/draw-3d-polyline.d.ts +0 -50
  214. package/dist/types/widgets/common/measure-creator.d.ts +0 -60
  215. package/dist/types/widgets/common/walkthrough.d.ts +0 -37
  216. package/dist/types/widgets/controls-view-bar/widget-control-view-bar-fullscreen.d.ts +0 -10
  217. package/dist/types/widgets/controls-view-bar/widget-control-view-bar-search.d.ts +0 -18
  218. package/dist/types/widgets/controls-view-bar/widget-control-view-bar.d.ts +0 -23
  219. package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.d.ts +0 -11
  220. package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab-user.d.ts +0 -24
  221. package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab.d.ts +0 -17
  222. package/dist/types/widgets/widget-bookmarks.d.ts +0 -40
  223. package/dist/types/widgets/widget-branding.d.ts +0 -15
  224. package/dist/types/widgets/widget-cursorbar.d.ts +0 -48
  225. package/dist/types/widgets/widget-embedded-info-view.d.ts +0 -13
  226. package/dist/types/widgets/widget-info-view.d.ts +0 -21
  227. package/dist/types/widgets/widget-left-panel.d.ts +0 -73
  228. package/dist/types/widgets/widget-nav-compass.d.ts +0 -27
  229. package/dist/types/widgets/widget-view-bar.d.ts +0 -37
  230. package/dist/types/widgets/widget.d.ts +0 -29
@@ -1,1695 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.VisualsRegister = void 0;
4
- const bruce_models_1 = require("bruce-models");
5
- const Cesium = require("cesium");
6
- const js_utils_1 = require("../internal/js-utils");
7
- const entity_utils_1 = require("../utils/entity-utils");
8
- const relation_render_engine_1 = require("./relation-render-engine");
9
- const entity_label_1 = require("../rendering/render-managers/common/entity-label");
10
- const visual_register_culler_1 = require("./visual-register-culler");
11
- const cesium_entity_styler_1 = require("../utils/cesium-entity-styler");
12
- const cesium_animated_in_out_1 = require("./cesium-animated-in-out");
13
- /**
14
- * Returns if a given visual is alive and in the scene.
15
- * @param viewer
16
- * @param visual
17
- * @returns
18
- */
19
- function isAlive(viewer, visual) {
20
- if (!(viewer === null || viewer === void 0 ? void 0 : viewer.scene) || viewer.isDestroyed()) {
21
- return false;
22
- }
23
- if (visual instanceof Cesium.Entity) {
24
- return viewer.entities.contains(visual);
25
- }
26
- else if (visual instanceof Cesium.Primitive) {
27
- return viewer.scene.primitives.contains(visual);
28
- }
29
- else if (visual instanceof Cesium.Cesium3DTileFeature) {
30
- const cTileset = visual === null || visual === void 0 ? void 0 : visual.tileset;
31
- if (!cTileset) {
32
- return false;
33
- }
34
- if (cTileset.isDestroyed() || !viewer.scene.primitives.contains(cTileset)) {
35
- return false;
36
- }
37
- return true;
38
- }
39
- return false;
40
- }
41
- function removeEntity(viewer, visual) {
42
- unmarkEntity(visual, false);
43
- cesium_animated_in_out_1.CesiumAnimatedInOut.AnimateOut({
44
- entity: visual,
45
- viewer
46
- });
47
- }
48
- const MAX_SHOW_DEPTH = 10;
49
- function updateCEntityShow(viewer, visual, rego, show, ignoreParent, depth = 0) {
50
- if (depth > MAX_SHOW_DEPTH) {
51
- console.warn("updateCEntityShow(): Max show depth reached. EntityId = " + rego.entityId);
52
- return;
53
- }
54
- // A sub-object can be culled while the siblings are not.
55
- // We only cull things that give us some benefit. For example clamped to ground graphics are expensive to keep rendered.
56
- show = show ? !visual_register_culler_1.VisualRegisterCuller.IsCulled(viewer, rego, visual) : false;
57
- if (visual._parentEntity && !ignoreParent) {
58
- updateCEntityShow(viewer, visual._parentEntity, rego, show, false, depth + 1);
59
- }
60
- if (visual._siblingGraphics) {
61
- for (let i = 0; i < visual._siblingGraphics.length; i++) {
62
- const sibling = visual._siblingGraphics[i];
63
- updateCEntityShow(viewer, sibling, rego, show, true, depth + 1);
64
- }
65
- }
66
- /**
67
- * Do NOT use ".show" as it causes crashes in Cesium polylines that are clamped to ground.
68
- * We could target them specifically here but we may be getting overall performance gain by just removing stuff from the scene.
69
- */
70
- if (rego.collection) {
71
- if (!show && rego.collection.contains(visual)) {
72
- rego.collection.remove(visual);
73
- }
74
- else if (show && !rego.collection.contains(visual)) {
75
- rego.collection.add(visual);
76
- }
77
- }
78
- else {
79
- if (!show && viewer.entities.contains(visual)) {
80
- viewer.entities.remove(visual);
81
- }
82
- else if (show && !viewer.entities.contains(visual)) {
83
- viewer.entities.add(visual);
84
- }
85
- }
86
- }
87
- function updateEntityShow(viewer, rego, show) {
88
- const visual = rego.visual;
89
- if (visual instanceof Cesium.Entity) {
90
- if (!(viewer === null || viewer === void 0 ? void 0 : viewer.scene) || viewer.isDestroyed()) {
91
- return;
92
- }
93
- updateCEntityShow(viewer, rego.visual, rego, show, false, 0);
94
- return;
95
- }
96
- if (!isAlive(viewer, visual)) {
97
- return;
98
- }
99
- if (visual instanceof Cesium.Primitive) {
100
- if (viewer.scene.primitives.contains(visual)) {
101
- visual.show = show;
102
- }
103
- }
104
- else if (visual instanceof Cesium.Cesium3DTileFeature) {
105
- // No way to tell if changing show will crash it!
106
- // ^ We need to improve removing visuals from the register when tiles unload to avoid this :)
107
- try {
108
- visual.show = show;
109
- }
110
- catch (e) {
111
- console.error(e);
112
- }
113
- const ent = visual;
114
- if (ent._siblingGraphics) {
115
- for (let i = 0; i < ent._siblingGraphics.length; i++) {
116
- try {
117
- const sibling = ent._siblingGraphics[i];
118
- sibling.show = show;
119
- }
120
- catch (e) {
121
- console.error(e);
122
- }
123
- }
124
- }
125
- }
126
- }
127
- function updateEntity(viewer, entityId, register, refresh, cache = {}) {
128
- var _a;
129
- // Unavailable for unoptimized single-Entity updates.
130
- if (!cache) {
131
- cache = {};
132
- }
133
- let regos = register.GetRegos({
134
- entityId
135
- });
136
- regos.sort((a, b) => {
137
- return b.priority - a.priority;
138
- });
139
- let highestPriority = (_a = regos[0]) === null || _a === void 0 ? void 0 : _a.priority;
140
- if (!highestPriority) {
141
- highestPriority = 0;
142
- }
143
- function getShowState(rego, state) {
144
- if (state.hidden) {
145
- return false;
146
- }
147
- else if (!state.isolated) {
148
- if (cache.isIsolatedAny == null) {
149
- cache.isIsolatedAny = register.GetIsIsolatedAny();
150
- }
151
- if (cache.isIsolatedAny) {
152
- return false;
153
- }
154
- }
155
- // We show all regos in the same highest priority level.
156
- // So if a new visual is added that's higher priority, all lower ones get hidden.
157
- // By default, everything has 0 priority unless explicitly set.
158
- const priority = rego.priority ? rego.priority : 0;
159
- return priority >= highestPriority;
160
- }
161
- for (let i = 0; i < regos.length; i++) {
162
- const rego = regos[i];
163
- const state = register.GetState({
164
- entityId: entityId,
165
- menuItemId: rego.menuItemId
166
- });
167
- let visible = rego.overrideShow;
168
- if (visible == null || visible === undefined) {
169
- visible = getShowState(rego, state);
170
- }
171
- updateEntityShow(viewer, rego, visible);
172
- if (visible) {
173
- if (refresh === true || (refresh !== false && (refresh === null || refresh === void 0 ? void 0 : refresh.highlighted))) {
174
- if (state.highlighted) {
175
- cesium_entity_styler_1.CesiumEntityStyler.Highlight({
176
- entity: rego.visual,
177
- viewer,
178
- requestRender: false
179
- });
180
- }
181
- else {
182
- cesium_entity_styler_1.CesiumEntityStyler.Unhighlight({
183
- entity: rego.visual,
184
- viewer,
185
- requestRender: false
186
- });
187
- }
188
- }
189
- if (refresh === true || (refresh !== false && (refresh === null || refresh === void 0 ? void 0 : refresh.selected))) {
190
- if (state.selected) {
191
- cesium_entity_styler_1.CesiumEntityStyler.Select({
192
- entity: rego.visual,
193
- viewer,
194
- requestRender: false
195
- });
196
- }
197
- else {
198
- cesium_entity_styler_1.CesiumEntityStyler.Deselect({
199
- entity: rego.visual,
200
- viewer,
201
- requestRender: false
202
- });
203
- }
204
- }
205
- if (refresh === true || (refresh !== false && (refresh === null || refresh === void 0 ? void 0 : refresh.opacity))) {
206
- if (state.opacity != null && state.opacity != 1) {
207
- entity_utils_1.EntityUtils.SetOpacity({
208
- entity: rego.visual,
209
- opacity: state.opacity,
210
- viewer: viewer,
211
- requestRender: false
212
- });
213
- }
214
- else {
215
- entity_utils_1.EntityUtils.RevertOpacity({
216
- entity: rego.visual,
217
- viewer: viewer,
218
- requestRender: false
219
- });
220
- }
221
- }
222
- }
223
- if (state.labelled && visible) {
224
- entity_label_1.EntityLabel.Attach({
225
- rego,
226
- viewer,
227
- api: register.ApiGetters.GetBruceApi(),
228
- visualRegister: register
229
- });
230
- }
231
- else {
232
- entity_label_1.EntityLabel.Detatch({
233
- rego
234
- });
235
- }
236
- }
237
- }
238
- function markEntity(register, rego, visual, ignoreParent) {
239
- const vis = visual;
240
- vis._register = register;
241
- vis._rego = rego;
242
- if (visual instanceof Cesium.Entity) {
243
- const visEnt = visual;
244
- if (visEnt._parentEntity && !ignoreParent) {
245
- markEntity(register, rego, visEnt._parentEntity, false);
246
- }
247
- if (visEnt._siblingGraphics) {
248
- for (let i = 0; i < visEnt._siblingGraphics.length; i++) {
249
- markEntity(register, rego, visEnt._siblingGraphics[i], true);
250
- }
251
- }
252
- }
253
- else if (visual instanceof Cesium.Cesium3DTileFeature) {
254
- const visEnt = visual;
255
- if (visEnt._siblingGraphics) {
256
- for (let i = 0; i < visEnt._siblingGraphics.length; i++) {
257
- markEntity(register, rego, visEnt._siblingGraphics[i], true);
258
- }
259
- }
260
- }
261
- }
262
- function unmarkEntity(visual, ignoreParent) {
263
- const vis = visual;
264
- vis._register = null;
265
- if (visual instanceof Cesium.Entity) {
266
- const visEnt = visual;
267
- if (visEnt._parentEntity && !ignoreParent) {
268
- unmarkEntity(visEnt._parentEntity, false);
269
- }
270
- if (visEnt._siblingGraphics) {
271
- for (let i = 0; i < visEnt._siblingGraphics.length; i++) {
272
- unmarkEntity(visEnt._siblingGraphics[i], true);
273
- }
274
- }
275
- }
276
- else if (visual instanceof Cesium.Cesium3DTileFeature) {
277
- const visEnt = visual;
278
- if (visEnt._siblingGraphics) {
279
- for (let i = 0; i < visEnt._siblingGraphics.length; i++) {
280
- unmarkEntity(visEnt._siblingGraphics[i], true);
281
- }
282
- }
283
- }
284
- }
285
- const NO_MENU_ITEM_KEY = "";
286
- function getBlankState(entityId, menuItemId) {
287
- const state = {
288
- entityId: entityId
289
- };
290
- if (menuItemId) {
291
- state.menuItemId = menuItemId;
292
- }
293
- return state;
294
- }
295
- function isBlankState(state) {
296
- const idKeys = !state.menuItemId ? 1 : 2;
297
- return Object.keys(state).length === idKeys;
298
- }
299
- /**
300
- * Manages a registry of all Bruce visuals being rendered by menu items.
301
- */
302
- var VisualsRegister;
303
- (function (VisualsRegister) {
304
- let EVisualUpdateType;
305
- (function (EVisualUpdateType) {
306
- EVisualUpdateType["Add"] = "ADD";
307
- EVisualUpdateType["Remove"] = "REMOVE";
308
- EVisualUpdateType["Update"] = "UPDATE";
309
- EVisualUpdateType["DeselectAll"] = "DESELECT_ALL";
310
- })(EVisualUpdateType = VisualsRegister.EVisualUpdateType || (VisualsRegister.EVisualUpdateType = {}));
311
- class Register {
312
- get Id() {
313
- return this.id;
314
- }
315
- get Disposed() {
316
- return this.disposed;
317
- }
318
- get Viewer() {
319
- return this.viewer;
320
- }
321
- get ApiGetters() {
322
- return this.apiGetters;
323
- }
324
- get OnUpdate() {
325
- if (!this.onUpdate) {
326
- this.onUpdate = new bruce_models_1.BruceEvent();
327
- }
328
- return this.onUpdate;
329
- }
330
- constructor(params) {
331
- this.id = bruce_models_1.ObjectUtils.UId();
332
- this.disposed = false;
333
- this.rego = {};
334
- this.onUpdate = null;
335
- // Entity ID -> Menu Item ID -> State.
336
- // When no Menu Item ID is set, then the second key is a blank string.
337
- // If an Entity ID state is set without a Menu Item ID, then it acts as a default for all Menu Items.
338
- this.states = {};
339
- // Queue of Entity updates to process in batches to avoid overloading the render loop.
340
- this.updateQueue = [];
341
- // Settings related to those Entities in the queue.
342
- // This lets us modify the update without re-adding the item to the queue if it's already in it.
343
- this.updateQueueSettings = {};
344
- this.updateQueueInterval = null;
345
- this.viewer = params.viewer;
346
- this.apiGetters = params.apiGetters;
347
- this.cameraCullerDispose = visual_register_culler_1.VisualRegisterCuller.Monitor({
348
- register: this
349
- });
350
- }
351
- queueUpdate(update) {
352
- if (this.Disposed) {
353
- return;
354
- }
355
- // Merge settings from existing queued item.
356
- let settings = this.updateQueueSettings[update.entityId];
357
- if (settings !== true) {
358
- if (update.refresh === true) {
359
- settings = true;
360
- }
361
- else if (update.refresh === false) {
362
- if (!settings) {
363
- settings = false;
364
- }
365
- }
366
- else {
367
- if (!settings) {
368
- settings = {};
369
- }
370
- if (update.refresh.highlighted) {
371
- settings.highlighted = true;
372
- }
373
- if (update.refresh.selected) {
374
- settings.selected = true;
375
- }
376
- if (update.refresh.opacity) {
377
- settings.opacity = true;
378
- }
379
- }
380
- }
381
- this.updateQueueSettings[update.entityId] = settings;
382
- // Queue ID if it's not already in the queue.
383
- if (!this.updateQueue.includes(update.entityId)) {
384
- this.updateQueue.push(update.entityId);
385
- this.pingUpdateQueue();
386
- }
387
- }
388
- pingUpdateQueue() {
389
- if (this.updateQueueInterval) {
390
- return;
391
- }
392
- const BATCH_SIZE = 300;
393
- if (this.updateQueue.length) {
394
- this.updateQueueInterval = setInterval(() => {
395
- if (this.Disposed || (!this.viewer || !this.viewer.scene || this.viewer.isDestroyed())) {
396
- clearInterval(this.updateQueueInterval);
397
- this.updateQueueInterval = null;
398
- return;
399
- }
400
- const batch = this.updateQueue.splice(0, BATCH_SIZE);
401
- const cache = {};
402
- for (let i = 0; i < batch.length; i++) {
403
- const entityId = batch[i];
404
- // Check if still registered.
405
- if (!this.rego[entityId] || !this.rego[entityId].length) {
406
- continue;
407
- }
408
- updateEntity(this.viewer, entityId, this, this.updateQueueSettings[entityId] == null ? false : this.updateQueueSettings[entityId], cache);
409
- this.updateQueueSettings[entityId] = null;
410
- delete this.updateQueueSettings[entityId];
411
- }
412
- this.viewer.scene.requestRender();
413
- if (!this.updateQueue.length) {
414
- clearInterval(this.updateQueueInterval);
415
- this.updateQueueInterval = null;
416
- }
417
- }, 10);
418
- }
419
- }
420
- /**
421
- * Returns the applied visual state for a given Entity ID.
422
- * This is a combination of a Menu Item specific state and a general state.
423
- * @param params
424
- */
425
- GetState(params) {
426
- var _a, _b;
427
- const { entityId, menuItemId } = params;
428
- let eState = (_a = this.states[entityId]) === null || _a === void 0 ? void 0 : _a[NO_MENU_ITEM_KEY];
429
- if (eState && isBlankState(eState)) {
430
- eState = null;
431
- delete this.states[entityId][NO_MENU_ITEM_KEY];
432
- }
433
- let mState;
434
- if (menuItemId) {
435
- mState = (_b = this.states[entityId]) === null || _b === void 0 ? void 0 : _b[menuItemId];
436
- if (mState && isBlankState(mState)) {
437
- mState = null;
438
- delete this.states[entityId][menuItemId];
439
- }
440
- }
441
- if (!mState && eState) {
442
- return eState;
443
- }
444
- let state = getBlankState(entityId, menuItemId);
445
- if (eState) {
446
- state = Object.assign(state, eState);
447
- }
448
- if (mState) {
449
- state = Object.assign(state, mState);
450
- }
451
- if (menuItemId) {
452
- state.menuItemId = menuItemId;
453
- }
454
- state.entityId = entityId;
455
- return state;
456
- }
457
- /**
458
- * Sets the state for a given Entity.
459
- * This can be used to perform multiple visual updates in one go.
460
- * @param state
461
- * @param update
462
- */
463
- SetState(state, update = true) {
464
- if (!state || isBlankState(state)) {
465
- return;
466
- }
467
- const refresh = {
468
- highlighted: state.hasOwnProperty("highlighted"),
469
- selected: state.hasOwnProperty("selected"),
470
- opacity: state.hasOwnProperty("opacity")
471
- };
472
- const updateAll = state.hasOwnProperty("isolated");
473
- let changed = this.setStateValues(state);
474
- // Update the related Entity.
475
- if (changed && update) {
476
- if (updateAll) {
477
- this.updateAllEntities({
478
- refresh: refresh
479
- });
480
- }
481
- else {
482
- this.queueUpdate({
483
- entityId: state.entityId,
484
- refresh: refresh
485
- });
486
- }
487
- // Trigger update event.
488
- if (this.onUpdate) {
489
- const update = {
490
- type: EVisualUpdateType.Update,
491
- entityId: state.entityId
492
- };
493
- if (state.hasOwnProperty("selected")) {
494
- update.selected = state.selected;
495
- }
496
- if (state.hasOwnProperty("opacity")) {
497
- update.opacity = state.opacity;
498
- }
499
- if (state.hasOwnProperty("isolated")) {
500
- update.isolated = state.isolated;
501
- }
502
- if (state.hasOwnProperty("hidden")) {
503
- update.hidden = state.hidden;
504
- }
505
- this.onUpdate.Trigger(update);
506
- }
507
- }
508
- return changed;
509
- }
510
- SetStates(states) {
511
- // Array of changed Entity IDs so we know what to refresh/notify at the end.
512
- const entityIds = [];
513
- // If we need to update all Entities.
514
- // This is usually for isolation changes.
515
- let updateAll = false;
516
- // Map of individual Entity refresh settings.
517
- let refresh = {};
518
- // Settings to apply if a refresh-all is needed.
519
- let refreshAccumulated = {};
520
- // Indicator that at least one Entity state was updated.
521
- let changed = false;
522
- const updateRefreshMarkers = (state) => {
523
- if (state.hasOwnProperty("isolated")) {
524
- updateAll = true;
525
- }
526
- let values = refresh[state.entityId];
527
- if (!values) {
528
- values = refresh[state.entityId] = {};
529
- }
530
- if (state.hasOwnProperty("highlighted")) {
531
- values.highlighted = true;
532
- refreshAccumulated.highlighted = true;
533
- }
534
- if (state.hasOwnProperty("selected")) {
535
- values.selected = true;
536
- refreshAccumulated.selected = true;
537
- }
538
- if (state.hasOwnProperty("opacity")) {
539
- values.opacity = true;
540
- refreshAccumulated.opacity = true;
541
- }
542
- };
543
- const doUpdate = (state) => {
544
- const eChanged = this.SetState(state, false);
545
- if (eChanged && !entityIds.includes(state.entityId)) {
546
- updateRefreshMarkers(state);
547
- entityIds.push(state.entityId);
548
- changed = true;
549
- }
550
- };
551
- if (Array.isArray(states)) {
552
- for (let i = 0; i < states.length; i++) {
553
- doUpdate(states[i]);
554
- }
555
- }
556
- else {
557
- Object.values(states).forEach(state => {
558
- doUpdate(state);
559
- });
560
- }
561
- if (changed) {
562
- if (updateAll) {
563
- this.updateAllEntities({
564
- refresh: refreshAccumulated
565
- });
566
- }
567
- else {
568
- for (let i = 0; i < entityIds.length; i++) {
569
- this.queueUpdate({
570
- entityId: entityIds[i],
571
- refresh: refresh[entityIds[i]]
572
- });
573
- }
574
- }
575
- // Trigger update event.
576
- if (this.onUpdate) {
577
- const keys = Object.keys(states);
578
- for (let i = 0; i < keys.length; i++) {
579
- const key = keys[i];
580
- const state = states[key];
581
- if (entityIds.includes(state.entityId)) {
582
- const update = {
583
- type: EVisualUpdateType.Update,
584
- entityId: state.entityId
585
- };
586
- if (state.hasOwnProperty("selected")) {
587
- update.selected = state.selected;
588
- }
589
- if (state.hasOwnProperty("opacity")) {
590
- update.opacity = state.opacity;
591
- }
592
- if (state.hasOwnProperty("isolated")) {
593
- update.isolated = state.isolated;
594
- }
595
- if (state.hasOwnProperty("hidden")) {
596
- update.hidden = state.hidden;
597
- }
598
- this.onUpdate.Trigger(update);
599
- }
600
- }
601
- }
602
- }
603
- }
604
- /**
605
- * Sets the provided settings for a given Entity's state.
606
- * @param params
607
- */
608
- setStateValues(values) {
609
- const { entityId, menuItemId } = values;
610
- const keys = Object.keys(values).filter(k => k !== "entityId" && k !== "menuItemId");
611
- if (!keys.length) {
612
- return false;
613
- }
614
- let changed = false;
615
- const eStates = this.states[entityId] || {};
616
- this.states[entityId] = eStates;
617
- const targetMenuItemId = menuItemId || NO_MENU_ITEM_KEY;
618
- let state = eStates[targetMenuItemId] || getBlankState(entityId, menuItemId);
619
- eStates[targetMenuItemId] = state;
620
- // Update state and detect changes.
621
- for (const key of keys) {
622
- if (state[key] !== values[key]) {
623
- state[key] = values[key];
624
- changed = true;
625
- }
626
- if (state[key] == null) {
627
- delete state[key];
628
- }
629
- }
630
- if (isBlankState(state)) {
631
- delete eStates[targetMenuItemId];
632
- if (Object.keys(eStates).length === 0) {
633
- delete this.states[entityId];
634
- }
635
- }
636
- // If no menuItemId, strip matching keys from other menu item states.
637
- if (!menuItemId) {
638
- for (const key in eStates) {
639
- if (key !== NO_MENU_ITEM_KEY) {
640
- const otherState = eStates[key];
641
- for (const stateKey of keys) {
642
- if (otherState.hasOwnProperty(stateKey)) {
643
- changed = true;
644
- delete otherState[stateKey];
645
- }
646
- }
647
- if (isBlankState(otherState)) {
648
- delete eStates[key];
649
- }
650
- }
651
- }
652
- if (Object.keys(eStates).length === 0) {
653
- delete this.states[entityId];
654
- }
655
- }
656
- return changed;
657
- }
658
- /**
659
- * Returns all visual state settings.
660
- * This is typically used for saving.
661
- */
662
- GetStates(params) {
663
- const states = [];
664
- // We flatten the dictionary into an array.
665
- const keys = Object.keys(this.states);
666
- for (let i = 0; i < keys.length; i++) {
667
- const entityId = keys[i];
668
- const eStates = this.states[entityId];
669
- if (!eStates) {
670
- continue;
671
- }
672
- const mKeys = Object.keys(eStates);
673
- for (let j = 0; j < mKeys.length; j++) {
674
- const menuItemId = mKeys[j];
675
- const state = eStates[menuItemId];
676
- if (!state) {
677
- continue;
678
- }
679
- states.push(state);
680
- }
681
- }
682
- if (!(params === null || params === void 0 ? void 0 : params.optimized)) {
683
- return states;
684
- }
685
- const newStates = [];
686
- for (let i = 0; i < states.length; i++) {
687
- let state = states[i];
688
- // Dereference.
689
- state = {
690
- ...state
691
- };
692
- if (state.opacity === 1) {
693
- delete state.opacity;
694
- }
695
- if (state.hidden === false) {
696
- delete state.hidden;
697
- }
698
- if (state.highlighted === false) {
699
- delete state.highlighted;
700
- }
701
- if (state.selected === false) {
702
- delete state.selected;
703
- }
704
- if (state.labelled === false) {
705
- delete state.labelled;
706
- }
707
- if (state.isolated === false) {
708
- delete state.isolated;
709
- }
710
- if (isBlankState(state)) {
711
- continue;
712
- }
713
- newStates.push(state);
714
- }
715
- return newStates;
716
- }
717
- /**
718
- * Applies a set of new states to override the existing ones.
719
- * This can be a costly operation as it will update all visuals.
720
- * @param states
721
- */
722
- OverrideStates(states) {
723
- // Clear current states.
724
- this.ClearOpacity();
725
- this.ClearLabelled();
726
- this.ClearSelected();
727
- this.ClearHighlighted();
728
- this.ClearIsolated();
729
- this.ClearHidden();
730
- this.states = {};
731
- let newStates = {};
732
- for (let i = 0; i < states.length; i++) {
733
- const state = states[i];
734
- if (!state.menuItemId && state.hasOwnProperty("menuItemId")) {
735
- delete state.menuItemId;
736
- }
737
- if (!state.entityId) {
738
- continue;
739
- }
740
- if (isBlankState(state)) {
741
- continue;
742
- }
743
- if (!newStates[state.entityId]) {
744
- newStates[state.entityId] = {};
745
- }
746
- newStates[state.entityId][state.menuItemId ? state.menuItemId : NO_MENU_ITEM_KEY] = {
747
- ...state
748
- };
749
- }
750
- this.states = newStates;
751
- // Reflect the rest of the changes.
752
- this.updateAllEntities();
753
- }
754
- /**
755
- * Returns all states with the first detected Menu Item ID settings included.
756
- * This is a utility function for returning settings for apps that don't support the newer state settings.
757
- * @deprecated Use GetStates() or GetState().
758
- * @returns
759
- */
760
- GetStatesLegacy() {
761
- const states = {};
762
- let entityIds = [];
763
- let entityIdsMenuItem = {};
764
- for (const entityId in this.states) {
765
- const eStates = this.states[entityId];
766
- if (!eStates) {
767
- continue;
768
- }
769
- if (!entityIds.includes(entityId)) {
770
- entityIds.push(entityId);
771
- }
772
- const mKeys = Object.keys(eStates);
773
- for (let i = 0; i < mKeys.length; i++) {
774
- const menuItemId = mKeys[i];
775
- if (menuItemId) {
776
- entityIdsMenuItem[entityId] = menuItemId;
777
- }
778
- }
779
- }
780
- for (let i = 0; i < entityIds.length; i++) {
781
- const entityId = entityIds[i];
782
- const state = this.GetState({
783
- entityId: entityId,
784
- // First known Menu Item.
785
- menuItemId: entityIdsMenuItem[entityId]
786
- });
787
- states[entityId] = state;
788
- }
789
- // Remove empty states.
790
- const keys = Object.keys(states);
791
- for (let i = 0; i < keys.length; i++) {
792
- const key = keys[i];
793
- const state = states[key];
794
- const idKeys = !state.menuItemId ? 1 : 2;
795
- if (Object.keys(state).length === idKeys) {
796
- delete states[key];
797
- }
798
- }
799
- return states;
800
- }
801
- /**
802
- * Utility to iterate over all states.
803
- * @param callback
804
- */
805
- ForEachState(callback) {
806
- // Flatten and iterate.
807
- const keys = Object.keys(this.states);
808
- for (let i = 0; i < keys.length; i++) {
809
- const entityId = keys[i];
810
- const eStates = this.states[entityId];
811
- if (!eStates) {
812
- continue;
813
- }
814
- const mKeys = Object.keys(eStates);
815
- for (let j = 0; j < mKeys.length; j++) {
816
- const menuItemId = mKeys[j];
817
- const state = eStates[menuItemId];
818
- if (!state) {
819
- continue;
820
- }
821
- callback(state);
822
- }
823
- }
824
- }
825
- RefreshMark(params) {
826
- const { rego } = params;
827
- markEntity(this, rego, rego.visual, false);
828
- }
829
- Dispose() {
830
- var _a;
831
- (_a = this.cameraCullerDispose) === null || _a === void 0 ? void 0 : _a.call(this, {
832
- uncull: false
833
- });
834
- this.cameraCullerDispose = null;
835
- clearInterval(this.updateQueueInterval);
836
- this.updateQueueInterval = null;
837
- this.disposed = true;
838
- }
839
- ForceUpdate(params) {
840
- var _a;
841
- let { entityIds, requestRender, refreshColors } = params;
842
- for (let i = 0; i < entityIds.length; i++) {
843
- const entityId = entityIds[i];
844
- this.queueUpdate({
845
- entityId: entityId,
846
- refresh: true
847
- });
848
- (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({
849
- type: EVisualUpdateType.Update,
850
- entityId
851
- });
852
- }
853
- }
854
- /**
855
- * Marks given entityIds as either labelled or not labelled.
856
- * When an entity is labelled a label will be drawn on the "best" visual for it.
857
- * @param params
858
- */
859
- SetLabelled(params) {
860
- const { labelled, entityIds, requestRender, menuItemId } = params;
861
- const cache = {};
862
- for (let i = 0; i < entityIds.length; i++) {
863
- const id = entityIds[i];
864
- const state = this.GetState({
865
- entityId: id,
866
- menuItemId
867
- });
868
- const doLabel = Boolean(state.labelled) != labelled;
869
- this.setStateValues({
870
- entityId: id,
871
- menuItemId: menuItemId,
872
- // Null means it will be deleted from the object.
873
- labelled: labelled ? true : null
874
- });
875
- if (doLabel) {
876
- this.queueUpdate({
877
- entityId: id,
878
- refresh: false
879
- });
880
- }
881
- }
882
- }
883
- /**
884
- * Returns if given entity id is labelled.
885
- * @param params
886
- */
887
- GetIsLabelled(params) {
888
- const { entityId: id, menuItemId } = params;
889
- const state = this.GetState({
890
- entityId: id,
891
- menuItemId
892
- });
893
- return state.labelled === true;
894
- }
895
- /**
896
- * Clears all labelled entities.
897
- * @param params
898
- */
899
- ClearLabelled(params) {
900
- const cache = {};
901
- const toUpdateIds = [];
902
- this.ForEachState((state) => {
903
- if (state.labelled == null || state.labelled === undefined) {
904
- return;
905
- }
906
- delete state.labelled;
907
- if (!toUpdateIds.includes(state.entityId)) {
908
- toUpdateIds.push(state.entityId);
909
- }
910
- });
911
- for (let i = 0; i < toUpdateIds.length; i++) {
912
- const id = toUpdateIds[i];
913
- this.queueUpdate({
914
- entityId: id,
915
- refresh: false
916
- });
917
- }
918
- }
919
- /**
920
- * Returns all labelled entity ids.
921
- * @deprecated Use GetStates() or GetState().
922
- */
923
- GetLabelled() {
924
- const labelledIds = [];
925
- const states = this.GetStatesLegacy();
926
- for (const entityId in states) {
927
- if (states[entityId].labelled) {
928
- labelledIds.push(entityId);
929
- }
930
- }
931
- return labelledIds;
932
- }
933
- /**
934
- * Updates the selection color.
935
- * This will not update the selection color for already selected entities.
936
- * @param color
937
- */
938
- SetSelectionColor(color) {
939
- if (color) {
940
- cesium_entity_styler_1.CesiumEntityStyler.UpdateColorSetting("select", color);
941
- }
942
- }
943
- /**
944
- * Updates the highlight color.
945
- * This will not update the highlight color for already highlighted entities.
946
- * @param color
947
- */
948
- SetHighlightColor(color) {
949
- if (color) {
950
- cesium_entity_styler_1.CesiumEntityStyler.UpdateColorSetting("highlight", color);
951
- }
952
- }
953
- SetSelected(params) {
954
- var _a;
955
- let { entityIds, selected, refreshIfSelected, requestRender, menuItemId } = params;
956
- if (refreshIfSelected == null || refreshIfSelected === undefined) {
957
- refreshIfSelected = true;
958
- }
959
- for (let i = 0; i < entityIds.length; i++) {
960
- const id = entityIds[i];
961
- const state = this.GetState({
962
- entityId: id,
963
- menuItemId
964
- });
965
- // Checking if we need to refresh the selection.
966
- const doSelect = refreshIfSelected || (Boolean(state.selected) != selected);
967
- this.setStateValues({
968
- entityId: id,
969
- menuItemId: menuItemId,
970
- // Null means it will be deleted from the object.
971
- selected: selected ? true : null
972
- });
973
- if (selected) {
974
- if (doSelect) {
975
- const regos = this.rego[id];
976
- if (regos) {
977
- for (let i = 0; i < regos.length; i++) {
978
- const rego = regos[i];
979
- if (menuItemId && rego.menuItemId !== menuItemId) {
980
- continue;
981
- }
982
- cesium_entity_styler_1.CesiumEntityStyler.Select({
983
- entity: rego.visual,
984
- viewer: this.viewer,
985
- requestRender: false
986
- });
987
- }
988
- }
989
- }
990
- }
991
- else {
992
- if (doSelect) {
993
- const regos = this.rego[id];
994
- if (regos) {
995
- for (let i = 0; i < regos.length; i++) {
996
- const rego = regos[i];
997
- if (menuItemId && rego.menuItemId !== menuItemId) {
998
- continue;
999
- }
1000
- cesium_entity_styler_1.CesiumEntityStyler.Deselect({
1001
- entity: rego.visual,
1002
- viewer: this.viewer,
1003
- requestRender: false
1004
- });
1005
- }
1006
- }
1007
- }
1008
- }
1009
- (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({
1010
- entityId: id,
1011
- type: EVisualUpdateType.Update,
1012
- selected: selected
1013
- });
1014
- }
1015
- if (requestRender != false) {
1016
- this.viewer.scene.requestRender();
1017
- }
1018
- }
1019
- GetIsSelected(params) {
1020
- const { entityId: id, menuItemId } = params;
1021
- const state = this.GetState({
1022
- entityId: id,
1023
- menuItemId
1024
- });
1025
- return state.selected === true;
1026
- }
1027
- ClearSelected(params) {
1028
- var _a;
1029
- const cleared = [];
1030
- this.ForEachState((state) => {
1031
- if (state.selected == null || state.selected === undefined) {
1032
- return;
1033
- }
1034
- delete state.selected;
1035
- const regos = this.GetRegos({
1036
- entityId: state.entityId,
1037
- menuItemId: state.menuItemId
1038
- });
1039
- for (let i = 0; i < regos.length; i++) {
1040
- const rego = regos[i];
1041
- if ((rego === null || rego === void 0 ? void 0 : rego.visual) && !cleared.includes(rego)) {
1042
- cesium_entity_styler_1.CesiumEntityStyler.Deselect({
1043
- entity: rego.visual,
1044
- viewer: this.viewer,
1045
- requestRender: false
1046
- });
1047
- cleared.push(rego);
1048
- }
1049
- }
1050
- });
1051
- (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({
1052
- type: EVisualUpdateType.DeselectAll
1053
- });
1054
- if ((params === null || params === void 0 ? void 0 : params.requestRender) != false) {
1055
- this.viewer.scene.requestRender();
1056
- }
1057
- }
1058
- /**
1059
- * @deprecated Use GetStates() or GetState().
1060
- * @returns
1061
- */
1062
- GetSelected() {
1063
- const selectedIds = [];
1064
- const states = this.GetStatesLegacy();
1065
- for (const entityId in states) {
1066
- if (states[entityId].selected) {
1067
- selectedIds.push(entityId);
1068
- }
1069
- }
1070
- return selectedIds;
1071
- }
1072
- SetHighlighted(params) {
1073
- let { entityIds, highlighted, refreshIfHighlighted, requestRender, menuItemId } = params;
1074
- if (refreshIfHighlighted || refreshIfHighlighted === undefined) {
1075
- refreshIfHighlighted = true;
1076
- }
1077
- for (let i = 0; i < entityIds.length; i++) {
1078
- const id = entityIds[i];
1079
- const state = this.GetState({
1080
- entityId: id,
1081
- menuItemId
1082
- });
1083
- // Checking if we need to refresh the highlight.
1084
- const doHighlight = refreshIfHighlighted || (Boolean(state.highlighted) != highlighted);
1085
- const changed = this.setStateValues({
1086
- entityId: id,
1087
- menuItemId: menuItemId,
1088
- // Null means it will be deleted from the object.
1089
- highlighted: highlighted ? true : null
1090
- });
1091
- if (highlighted) {
1092
- if (doHighlight) {
1093
- const regos = this.rego[id];
1094
- if (regos) {
1095
- for (let i = 0; i < regos.length; i++) {
1096
- const rego = regos[i];
1097
- if (menuItemId && rego.menuItemId !== menuItemId) {
1098
- continue;
1099
- }
1100
- cesium_entity_styler_1.CesiumEntityStyler.Highlight({
1101
- entity: rego.visual,
1102
- viewer: this.viewer,
1103
- requestRender: false
1104
- });
1105
- }
1106
- }
1107
- }
1108
- }
1109
- else {
1110
- const regos = this.rego[id];
1111
- if (regos) {
1112
- for (let i = 0; i < regos.length; i++) {
1113
- const rego = regos[i];
1114
- if (menuItemId && rego.menuItemId !== menuItemId) {
1115
- continue;
1116
- }
1117
- cesium_entity_styler_1.CesiumEntityStyler.Unhighlight({
1118
- entity: rego.visual,
1119
- viewer: this.viewer,
1120
- requestRender: false
1121
- });
1122
- }
1123
- }
1124
- }
1125
- }
1126
- if (requestRender != false) {
1127
- this.viewer.scene.requestRender();
1128
- }
1129
- }
1130
- GetIsHighlighted(params) {
1131
- const { entityId: id, menuItemId } = params;
1132
- const state = this.GetState({
1133
- entityId: id,
1134
- menuItemId
1135
- });
1136
- return state.highlighted === true;
1137
- }
1138
- ClearHighlighted(params) {
1139
- // Null all states.
1140
- let entityIds = [];
1141
- this.ForEachState((state) => {
1142
- if (state.highlighted) {
1143
- delete state.highlighted;
1144
- if (!entityIds.includes(state.entityId)) {
1145
- entityIds.push(state.entityId);
1146
- }
1147
- }
1148
- });
1149
- // Revert needed visual changes.
1150
- for (let i = 0; i < entityIds.length; i++) {
1151
- const id = entityIds[i];
1152
- const regos = this.rego[id];
1153
- if (regos) {
1154
- for (let i = 0; i < regos.length; i++) {
1155
- const rego = regos[i];
1156
- cesium_entity_styler_1.CesiumEntityStyler.Unhighlight({
1157
- entity: rego.visual,
1158
- viewer: this.viewer,
1159
- requestRender: false
1160
- });
1161
- }
1162
- }
1163
- }
1164
- if ((params === null || params === void 0 ? void 0 : params.requestRender) != false) {
1165
- this.viewer.scene.requestRender();
1166
- }
1167
- }
1168
- /**
1169
- * @deprecated Use GetStates() or GetState().
1170
- * @returns
1171
- */
1172
- GetHighlighted() {
1173
- const highlightedIds = [];
1174
- const states = this.GetStatesLegacy();
1175
- for (const entityId in states) {
1176
- if (states[entityId].highlighted) {
1177
- highlightedIds.push(entityId);
1178
- }
1179
- }
1180
- return highlightedIds;
1181
- }
1182
- SetIsolated(params) {
1183
- var _a;
1184
- const { entityIds, isolated: isolate, requestRender, menuItemId } = params;
1185
- for (let i = 0; i < entityIds.length; i++) {
1186
- const entityId = entityIds[i];
1187
- this.setStateValues({
1188
- entityId: entityId,
1189
- menuItemId: menuItemId,
1190
- // Null means it will be deleted from the object.
1191
- isolated: isolate ? true : null
1192
- });
1193
- (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({
1194
- entityId: entityId,
1195
- type: EVisualUpdateType.Update,
1196
- isolated: isolate
1197
- });
1198
- }
1199
- this.updateAllEntities({
1200
- requestRender: false,
1201
- refresh: isolate
1202
- });
1203
- if (requestRender != false) {
1204
- this.viewer.scene.requestRender();
1205
- }
1206
- }
1207
- GetIsIsolated(params) {
1208
- const { entityId: id, menuItemId } = params;
1209
- const state = this.GetState({
1210
- entityId: id,
1211
- menuItemId: menuItemId
1212
- });
1213
- return state.isolated === true;
1214
- }
1215
- GetIsIsolatedAny() {
1216
- return Object.values(this.states).some(state => state && Object.values(state).some(item => item.isolated));
1217
- }
1218
- /**
1219
- * @deprecated Use GetStates() or GetState().
1220
- * @returns
1221
- */
1222
- GetIsolated() {
1223
- const isolatedIds = [];
1224
- const states = this.GetStatesLegacy();
1225
- for (const entityId in states) {
1226
- if (states[entityId].isolated) {
1227
- isolatedIds.push(entityId);
1228
- }
1229
- }
1230
- return isolatedIds;
1231
- }
1232
- ClearIsolated(params) {
1233
- let changed = false;
1234
- this.ForEachState((state) => {
1235
- if (state.isolated) {
1236
- changed = true;
1237
- }
1238
- delete state.isolated;
1239
- });
1240
- if (changed) {
1241
- this.updateAllEntities({
1242
- requestRender: params === null || params === void 0 ? void 0 : params.requestRender,
1243
- refresh: true
1244
- });
1245
- }
1246
- }
1247
- SetHidden(params) {
1248
- const { entityIds, hidden, requestRender, menuItemId } = params;
1249
- const stateChanges = [];
1250
- for (let i = 0; i < entityIds.length; i++) {
1251
- const entityId = entityIds[i];
1252
- const state = {
1253
- entityId: entityId,
1254
- hidden: hidden
1255
- };
1256
- if (menuItemId) {
1257
- state.menuItemId = menuItemId;
1258
- }
1259
- stateChanges.push(state);
1260
- }
1261
- this.SetStates(stateChanges);
1262
- }
1263
- GetIsHidden(params) {
1264
- const { entityId: id, menuItemId } = params;
1265
- const state = this.GetState({
1266
- entityId: id,
1267
- menuItemId: menuItemId
1268
- });
1269
- return state.hidden === true;
1270
- }
1271
- /**
1272
- * @deprecated Use GetStates() or GetState().
1273
- * @returns
1274
- */
1275
- GetHidden() {
1276
- const hiddenIds = [];
1277
- const states = this.GetStatesLegacy();
1278
- for (const entityId in states) {
1279
- if (states[entityId].hidden) {
1280
- hiddenIds.push(entityId);
1281
- }
1282
- }
1283
- return hiddenIds;
1284
- }
1285
- ClearHidden(params) {
1286
- var _a;
1287
- let changed = false;
1288
- this.ForEachState((state) => {
1289
- if (state.hidden) {
1290
- changed = true;
1291
- }
1292
- delete state.hidden;
1293
- });
1294
- if (changed) {
1295
- this.updateAllEntities({
1296
- requestRender: params === null || params === void 0 ? void 0 : params.requestRender,
1297
- refresh: true
1298
- });
1299
- }
1300
- (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({
1301
- type: EVisualUpdateType.Update,
1302
- hidden: false
1303
- });
1304
- }
1305
- AddRego(params) {
1306
- var _a, _b;
1307
- const { rego, requestRender } = params;
1308
- // ND-2078
1309
- // Tilesets will often add -> remove -> add because of how tiles load in and out of the scene.
1310
- // To avoid flickering, we'll just replace rather than remove -> add.
1311
- if (!rego.tilesetId && params.removePrior != false) {
1312
- this.RemoveRegos({
1313
- entityId: rego.entityId,
1314
- menuItemId: rego.menuItemId,
1315
- doUpdate: false,
1316
- requestRender: false
1317
- });
1318
- }
1319
- const entityId = rego.entityId;
1320
- // Add the new visual to the register.
1321
- const entityRegos = (_a = this.rego[entityId]) !== null && _a !== void 0 ? _a : [];
1322
- entityRegos.push(rego);
1323
- this.rego[entityId] = entityRegos;
1324
- // Mark the visual as part of this register so selection works.
1325
- markEntity(this, rego, rego.visual, false);
1326
- // Run any updates on the visual based on the calculated state.
1327
- // Eg: visibility, opacity, selection, etc.
1328
- this.queueUpdate({
1329
- entityId: entityId,
1330
- refresh: true
1331
- });
1332
- (_b = this.onUpdate) === null || _b === void 0 ? void 0 : _b.Trigger({
1333
- rego: rego,
1334
- type: EVisualUpdateType.Add,
1335
- entityId: rego.entityId
1336
- });
1337
- if (requestRender != false) {
1338
- this.viewer.scene.requestRender();
1339
- }
1340
- }
1341
- /**
1342
- * Locates a visual corresponding to a given entity id.
1343
- * If no menu item id is provided, then it will pick the "best" one.
1344
- * @param params
1345
- * @returns
1346
- */
1347
- GetRego(params) {
1348
- const { entityId, menuItemId, relation } = params;
1349
- if (relation) {
1350
- const relationKey = relation_render_engine_1.RelationRenderEngine.GetRenderGroupId(relation);
1351
- for (const entityId in this.rego) {
1352
- const entityRegos = this.rego[entityId];
1353
- if (entityRegos) {
1354
- const rego = entityRegos.find(r => r.relation && relation_render_engine_1.RelationRenderEngine.GetRenderGroupId(r.relation) == relationKey);
1355
- if (rego) {
1356
- return rego;
1357
- }
1358
- }
1359
- }
1360
- }
1361
- else {
1362
- const entityRegos = this.rego[entityId];
1363
- if (!entityRegos) {
1364
- return null;
1365
- }
1366
- if (menuItemId) {
1367
- return entityRegos.find(r => r.menuItemId === menuItemId);
1368
- }
1369
- return entityRegos.sort((a, b) => {
1370
- return b.priority - a.priority;
1371
- })[0];
1372
- }
1373
- }
1374
- /**
1375
- * Returns regos matching given criteria.
1376
- * Either entityId or menuItemId must be provided.
1377
- * @param params
1378
- * @returns
1379
- */
1380
- GetRegos(params) {
1381
- // TODO: refactor.
1382
- // Currently this was made by merging two functions.
1383
- const { entityId, menuItemId } = params;
1384
- if (entityId) {
1385
- const entityId = params.entityId;
1386
- const entityRegos = this.rego[entityId];
1387
- if (!entityRegos) {
1388
- return [];
1389
- }
1390
- return menuItemId ? entityRegos.filter(x => x.menuItemId == menuItemId) : entityRegos;
1391
- }
1392
- else if (menuItemId) {
1393
- const menuItemId = params.menuItemId;
1394
- const visuals = [];
1395
- for (const entityId in this.rego) {
1396
- const entityRegos = this.rego[entityId];
1397
- if (entityRegos) {
1398
- const rego = entityRegos.find(r => r.menuItemId === menuItemId);
1399
- if (rego) {
1400
- visuals.push(rego);
1401
- }
1402
- }
1403
- }
1404
- return visuals;
1405
- }
1406
- }
1407
- /**
1408
- * Removes regos matching given criteria.
1409
- * Either entityId or menuItemId must be provided.
1410
- * @param params
1411
- * @returns
1412
- */
1413
- RemoveRegos(params) {
1414
- var _a, _b, _c;
1415
- let { entityId, menuItemId, doUpdate, relation, retainTagIds, requestRender, doRemove } = params;
1416
- if (doUpdate == null || doUpdate === undefined) {
1417
- doUpdate = true;
1418
- }
1419
- if (retainTagIds == null || retainTagIds === undefined) {
1420
- retainTagIds = [];
1421
- }
1422
- // TODO: refactor.
1423
- // Currently this was made by merging two functions.
1424
- if (menuItemId && !entityId) {
1425
- for (const entityId in this.rego) {
1426
- const entityRegos = this.rego[entityId];
1427
- if (entityRegos) {
1428
- const rego = entityRegos.find(r => r.menuItemId === menuItemId);
1429
- if (!rego) {
1430
- continue;
1431
- }
1432
- const regoTagIds = rego.tagIds ? rego.tagIds : [];
1433
- const shouldRetain = regoTagIds.some(tagId => retainTagIds.includes(tagId));
1434
- if (shouldRetain) {
1435
- continue;
1436
- }
1437
- entity_label_1.EntityLabel.Detatch({
1438
- rego
1439
- });
1440
- if (doRemove != false) {
1441
- removeEntity(this.viewer, rego.visual);
1442
- }
1443
- rego.visual = null;
1444
- const doesInclude = this.rego[entityId].find(r => r.menuItemId === menuItemId);
1445
- if (doesInclude) {
1446
- this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);
1447
- }
1448
- (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({
1449
- type: EVisualUpdateType.Remove,
1450
- entityId: rego.entityId,
1451
- rego: rego
1452
- });
1453
- if (doesInclude) {
1454
- this.queueUpdate({
1455
- entityId: entityId,
1456
- refresh: false
1457
- });
1458
- }
1459
- }
1460
- }
1461
- }
1462
- else if (entityId) {
1463
- const entityRegos = this.rego[entityId];
1464
- if (!entityRegos) {
1465
- return;
1466
- }
1467
- const menuItems = menuItemId ? [menuItemId] : entityRegos.map(x => x.menuItemId);
1468
- for (let i = 0; i < menuItems.length; i++) {
1469
- const menuItemId = menuItems[i];
1470
- const rego = entityRegos.find(r => r.menuItemId === menuItemId);
1471
- if (!rego) {
1472
- return;
1473
- }
1474
- entity_label_1.EntityLabel.Detatch({
1475
- rego
1476
- });
1477
- if (doRemove != false) {
1478
- removeEntity(this.viewer, rego.visual);
1479
- }
1480
- rego.visual = null;
1481
- (_b = this.onUpdate) === null || _b === void 0 ? void 0 : _b.Trigger({
1482
- type: EVisualUpdateType.Remove,
1483
- entityId: rego.entityId,
1484
- rego: rego
1485
- });
1486
- this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);
1487
- if (doUpdate && menuItemId) {
1488
- this.queueUpdate({
1489
- entityId: entityId,
1490
- refresh: false
1491
- });
1492
- }
1493
- }
1494
- }
1495
- else if (relation) {
1496
- const relationKey = relation_render_engine_1.RelationRenderEngine.GetRenderGroupId(relation);
1497
- for (const entityId in this.rego) {
1498
- const entityRegos = this.rego[entityId];
1499
- if (entityRegos) {
1500
- const rego = entityRegos.find(r => r.relation && relation_render_engine_1.RelationRenderEngine.GetRenderGroupId(r.relation) == relationKey);
1501
- if (!rego) {
1502
- continue;
1503
- }
1504
- entity_label_1.EntityLabel.Detatch({
1505
- rego
1506
- });
1507
- removeEntity(this.viewer, rego.visual);
1508
- rego.visual = null;
1509
- this.rego[entityId] = entityRegos.filter(r => r.menuItemId !== menuItemId);
1510
- (_c = this.onUpdate) === null || _c === void 0 ? void 0 : _c.Trigger({
1511
- type: EVisualUpdateType.Remove,
1512
- entityId: rego.entityId,
1513
- rego: rego
1514
- });
1515
- if (doUpdate && menuItemId) {
1516
- this.queueUpdate({
1517
- entityId: entityId,
1518
- refresh: false
1519
- });
1520
- }
1521
- }
1522
- }
1523
- }
1524
- }
1525
- /**
1526
- * Returns an array of drilled visuals associated with this register.
1527
- * The top array item is the first found.
1528
- * @param params
1529
- * @returns
1530
- */
1531
- GetRegosFromCursor(params) {
1532
- var _a, _b;
1533
- const { cursor } = params;
1534
- const found = [];
1535
- const width = Math.ceil((0, js_utils_1.EnsureNumber)(params.width, 5));
1536
- const height = Math.ceil((0, js_utils_1.EnsureNumber)(params.height, 5));
1537
- const pickLimit = Math.ceil((0, js_utils_1.EnsureNumber)(params.pickLimit, 5));
1538
- const picked = this.viewer.scene.drillPick(new Cesium.Cartesian2(cursor.x, cursor.y), pickLimit, width, height);
1539
- for (let i = 0; i < picked.length; i++) {
1540
- const object = picked[i];
1541
- const entity = (object && object.id && object.id instanceof Cesium.Entity ? object.id : object);
1542
- const visual = entity;
1543
- if (((_a = visual === null || visual === void 0 ? void 0 : visual._register) === null || _a === void 0 ? void 0 : _a.Id) == this.id) {
1544
- const foundEntityId = (_b = visual._rego) === null || _b === void 0 ? void 0 : _b.entityId;
1545
- if (foundEntityId && found.findIndex(x => x.entityId == foundEntityId) <= -1) {
1546
- found.push(visual._rego);
1547
- }
1548
- }
1549
- }
1550
- return {
1551
- regos: found
1552
- };
1553
- }
1554
- /**
1555
- * Returns all registered entity ids.
1556
- */
1557
- GetEntityIds() {
1558
- const ids = [];
1559
- for (const entityId in this.rego) {
1560
- const regos = this.rego[entityId];
1561
- if (regos && regos.length) {
1562
- ids.push(entityId);
1563
- }
1564
- }
1565
- return ids;
1566
- }
1567
- /**
1568
- * Marks regos corresponding to given entity ids as stale.
1569
- * This will cause them to be updated on the next update cycle.
1570
- * Optionally include menu item ids to restrict the filter.
1571
- * @param params
1572
- */
1573
- MarkStale(params) {
1574
- const { entityIds, menuItemIds } = params;
1575
- for (const entityId of entityIds) {
1576
- const regos = this.rego[entityId];
1577
- if (regos && regos.length) {
1578
- for (const rego of regos) {
1579
- if (!menuItemIds || menuItemIds.includes(rego.menuItemId)) {
1580
- rego.stale = true;
1581
- }
1582
- }
1583
- }
1584
- }
1585
- }
1586
- updateAllEntities(params) {
1587
- for (const entityId in this.rego) {
1588
- const regos = this.rego[entityId];
1589
- if (regos && regos.length) {
1590
- this.queueUpdate({
1591
- entityId: entityId,
1592
- refresh: (params === null || params === void 0 ? void 0 : params.refresh) == null ? true : params.refresh
1593
- });
1594
- }
1595
- }
1596
- }
1597
- /**
1598
- * Sets opacity for given set of entities.
1599
- * 100% opacity is treated as "use original".
1600
- * @param params
1601
- */
1602
- SetOpacity(params) {
1603
- var _a;
1604
- let { opacity, entityIds, menuItemId, requestRender } = params;
1605
- for (const entityId of entityIds) {
1606
- this.setStateValues({
1607
- entityId: entityId,
1608
- menuItemId: menuItemId,
1609
- opacity: opacity
1610
- });
1611
- (_a = this.onUpdate) === null || _a === void 0 ? void 0 : _a.Trigger({
1612
- type: EVisualUpdateType.Update,
1613
- entityId: entityId,
1614
- opacity: opacity
1615
- });
1616
- this.queueUpdate({
1617
- entityId: entityId,
1618
- refresh: {
1619
- opacity: true
1620
- }
1621
- });
1622
- }
1623
- }
1624
- /**
1625
- * Returns opacity for given entity/s.
1626
- * If multiple entities are supplied, then the average is returned.
1627
- * Unknown opacity is treated as 100% opacity.
1628
- * @param params
1629
- * @returns
1630
- */
1631
- GetOpacity(params) {
1632
- let { entityIds, entityId, menuItemId, menuItemIds } = params;
1633
- if (!entityIds) {
1634
- entityIds = entityId ? [entityId] : [];
1635
- }
1636
- if (!menuItemIds && menuItemId) {
1637
- menuItemIds = menuItemId;
1638
- }
1639
- let totalOpacity = null;
1640
- let totalTicks = 0;
1641
- for (const entityId of entityIds) {
1642
- const rego = this.GetRego({
1643
- entityId: entityId,
1644
- menuItemId: menuItemId
1645
- });
1646
- if (rego) {
1647
- const state = this.GetState({
1648
- entityId: entityId,
1649
- menuItemId: rego.menuItemId
1650
- });
1651
- let opacity = state === null || state === void 0 ? void 0 : state.opacity;
1652
- if (opacity != null) {
1653
- totalOpacity += opacity;
1654
- totalTicks += 1;
1655
- }
1656
- }
1657
- }
1658
- return (totalOpacity && totalTicks) ? (totalOpacity / totalTicks) : totalOpacity != null && typeof totalOpacity == "number" ? totalOpacity : 1;
1659
- }
1660
- ClearOpacity(params) {
1661
- const clearedIds = [];
1662
- this.ForEachState((state) => {
1663
- if (!clearedIds.includes(state.entityId) && state.opacity != null) {
1664
- this.queueUpdate({
1665
- entityId: state.entityId,
1666
- refresh: {
1667
- opacity: true
1668
- }
1669
- });
1670
- clearedIds.push(state.entityId);
1671
- }
1672
- delete state.opacity;
1673
- });
1674
- }
1675
- /**
1676
- * Returns a dictionary containing entityId -> opacity values.
1677
- * Opacity 1 = 100%.
1678
- * @returns
1679
- * @deprecated Use GetStates() or GetState().
1680
- */
1681
- GetOpacityMap() {
1682
- const map = {};
1683
- const states = this.GetStatesLegacy();
1684
- for (const entityId in states) {
1685
- const opacity = states[entityId].opacity;
1686
- if (opacity != null && opacity != 1) {
1687
- map[entityId] = opacity;
1688
- }
1689
- }
1690
- return map;
1691
- }
1692
- }
1693
- VisualsRegister.Register = Register;
1694
- })(VisualsRegister = exports.VisualsRegister || (exports.VisualsRegister = {}));
1695
- //# sourceMappingURL=visuals-register.js.map