bruce-cesium 5.7.9 → 5.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/dist/bruce-cesium.es5.js +32308 -0
  2. package/dist/bruce-cesium.es5.js.map +1 -0
  3. package/dist/bruce-cesium.umd.js +32232 -0
  4. package/dist/bruce-cesium.umd.js.map +1 -0
  5. package/dist/lib/bruce-cesium.js +76 -0
  6. package/dist/lib/bruce-cesium.js.map +1 -0
  7. package/dist/lib/internal/cesium-utils.js +109 -0
  8. package/dist/lib/internal/cesium-utils.js.map +1 -0
  9. package/dist/lib/internal/js-utils.js +22 -0
  10. package/dist/lib/internal/js-utils.js.map +1 -0
  11. package/dist/lib/internal/limited-log.js +17 -0
  12. package/dist/lib/internal/limited-log.js.map +1 -0
  13. package/dist/lib/rendering/cesium-animated-in-out.js +166 -0
  14. package/dist/lib/rendering/cesium-animated-in-out.js.map +1 -0
  15. package/dist/lib/rendering/cesium-animated-property.js +1111 -0
  16. package/dist/lib/rendering/cesium-animated-property.js.map +1 -0
  17. package/dist/lib/rendering/entity-gatherer.js +327 -0
  18. package/dist/lib/rendering/entity-gatherer.js.map +1 -0
  19. package/dist/lib/rendering/entity-render-engine-model3d.js +689 -0
  20. package/dist/lib/rendering/entity-render-engine-model3d.js.map +1 -0
  21. package/dist/lib/rendering/entity-render-engine-point.js +984 -0
  22. package/dist/lib/rendering/entity-render-engine-point.js.map +1 -0
  23. package/dist/lib/rendering/entity-render-engine-polygon.js +669 -0
  24. package/dist/lib/rendering/entity-render-engine-polygon.js.map +1 -0
  25. package/dist/lib/rendering/entity-render-engine-polyline.js +415 -0
  26. package/dist/lib/rendering/entity-render-engine-polyline.js.map +1 -0
  27. package/dist/lib/rendering/entity-render-engine.js +442 -0
  28. package/dist/lib/rendering/entity-render-engine.js.map +1 -0
  29. package/dist/lib/rendering/getters/batched-data-getter.js +91 -0
  30. package/dist/lib/rendering/getters/batched-data-getter.js.map +1 -0
  31. package/dist/lib/rendering/getters/entity-filter-getter.js +634 -0
  32. package/dist/lib/rendering/getters/entity-filter-getter.js.map +1 -0
  33. package/dist/lib/rendering/getters/entity-globe.js +172 -0
  34. package/dist/lib/rendering/getters/entity-globe.js.map +1 -0
  35. package/dist/lib/rendering/menu-item-creator.js +354 -0
  36. package/dist/lib/rendering/menu-item-creator.js.map +1 -0
  37. package/dist/lib/rendering/menu-item-manager.js +464 -0
  38. package/dist/lib/rendering/menu-item-manager.js.map +1 -0
  39. package/dist/lib/rendering/relation-render-engine.js +235 -0
  40. package/dist/lib/rendering/relation-render-engine.js.map +1 -0
  41. package/dist/lib/rendering/render-managers/common/cesium-parabola.js +368 -0
  42. package/dist/lib/rendering/render-managers/common/cesium-parabola.js.map +1 -0
  43. package/dist/lib/rendering/render-managers/common/entity-label.js +703 -0
  44. package/dist/lib/rendering/render-managers/common/entity-label.js.map +1 -0
  45. package/dist/lib/rendering/render-managers/common/point-clustering.js +826 -0
  46. package/dist/lib/rendering/render-managers/common/point-clustering.js.map +1 -0
  47. package/dist/lib/rendering/render-managers/common/shared-getters.js +187 -0
  48. package/dist/lib/rendering/render-managers/common/shared-getters.js.map +1 -0
  49. package/dist/lib/rendering/render-managers/data-source/data-source-static-csv-manager.js +668 -0
  50. package/dist/lib/rendering/render-managers/data-source/data-source-static-csv-manager.js.map +1 -0
  51. package/dist/lib/rendering/render-managers/data-source/data-source-static-kml-manager.js +92 -0
  52. package/dist/lib/rendering/render-managers/data-source/data-source-static-kml-manager.js.map +1 -0
  53. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js +143 -0
  54. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js.map +1 -0
  55. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js +510 -0
  56. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js.map +1 -0
  57. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js +717 -0
  58. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js.map +1 -0
  59. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +999 -0
  60. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js.map +1 -0
  61. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js +186 -0
  62. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js.map +1 -0
  63. package/dist/lib/rendering/render-managers/other/assembly-render-manager.js +226 -0
  64. package/dist/lib/rendering/render-managers/other/assembly-render-manager.js.map +1 -0
  65. package/dist/lib/rendering/render-managers/other/google-search-render-manager.js +430 -0
  66. package/dist/lib/rendering/render-managers/other/google-search-render-manager.js.map +1 -0
  67. package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js +290 -0
  68. package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js.map +1 -0
  69. package/dist/lib/rendering/render-managers/other/relations-render-manager.js +401 -0
  70. package/dist/lib/rendering/render-managers/other/relations-render-manager.js.map +1 -0
  71. package/dist/lib/rendering/render-managers/render-manager.js +276 -0
  72. package/dist/lib/rendering/render-managers/render-manager.js.map +1 -0
  73. package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js +356 -0
  74. package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js.map +1 -0
  75. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +861 -0
  76. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js.map +1 -0
  77. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js +279 -0
  78. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js.map +1 -0
  79. package/dist/lib/rendering/render-managers/tilesets/tileset-google-photos-render-manager.js +104 -0
  80. package/dist/lib/rendering/render-managers/tilesets/tileset-google-photos-render-manager.js.map +1 -0
  81. package/dist/lib/rendering/render-managers/tilesets/tileset-i3s-render-manager.js +81 -0
  82. package/dist/lib/rendering/render-managers/tilesets/tileset-i3s-render-manager.js.map +1 -0
  83. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js +378 -0
  84. package/dist/lib/rendering/render-managers/tilesets/tileset-osm-render-manager.js.map +1 -0
  85. package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js +140 -0
  86. package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js.map +1 -0
  87. package/dist/lib/rendering/tile-render-engine.js +1328 -0
  88. package/dist/lib/rendering/tile-render-engine.js.map +1 -0
  89. package/dist/lib/rendering/tileset-render-engine.js +588 -0
  90. package/dist/lib/rendering/tileset-render-engine.js.map +1 -0
  91. package/dist/lib/rendering/tileset-styler.js +590 -0
  92. package/dist/lib/rendering/tileset-styler.js.map +1 -0
  93. package/dist/lib/rendering/view-render-engine.js +1004 -0
  94. package/dist/lib/rendering/view-render-engine.js.map +1 -0
  95. package/dist/lib/rendering/visual-register-culler.js +676 -0
  96. package/dist/lib/rendering/visual-register-culler.js.map +1 -0
  97. package/dist/lib/rendering/visuals-register.js +1741 -0
  98. package/dist/lib/rendering/visuals-register.js.map +1 -0
  99. package/dist/lib/utils/cesium-entity-styler.js +914 -0
  100. package/dist/lib/utils/cesium-entity-styler.js.map +1 -0
  101. package/dist/lib/utils/drawing-utils.js +308 -0
  102. package/dist/lib/utils/drawing-utils.js.map +1 -0
  103. package/dist/lib/utils/entity-utils.js +1382 -0
  104. package/dist/lib/utils/entity-utils.js.map +1 -0
  105. package/dist/lib/utils/measure-utils.js +73 -0
  106. package/dist/lib/utils/measure-utils.js.map +1 -0
  107. package/dist/lib/utils/simplify-geometry.js +323 -0
  108. package/dist/lib/utils/simplify-geometry.js.map +1 -0
  109. package/dist/lib/utils/view-utils.js +392 -0
  110. package/dist/lib/utils/view-utils.js.map +1 -0
  111. package/dist/lib/viewer/cesium-view-monitor.js +393 -0
  112. package/dist/lib/viewer/cesium-view-monitor.js.map +1 -0
  113. package/dist/lib/viewer/viewer-event-tracker.js +70 -0
  114. package/dist/lib/viewer/viewer-event-tracker.js.map +1 -0
  115. package/dist/lib/viewer/viewer-utils.js +310 -0
  116. package/dist/lib/viewer/viewer-utils.js.map +1 -0
  117. package/dist/lib/widgets/common/draw-3d-polygon.js +458 -0
  118. package/dist/lib/widgets/common/draw-3d-polygon.js.map +1 -0
  119. package/dist/lib/widgets/common/draw-3d-polyline.js +415 -0
  120. package/dist/lib/widgets/common/draw-3d-polyline.js.map +1 -0
  121. package/dist/lib/widgets/common/measure-creator.js +468 -0
  122. package/dist/lib/widgets/common/measure-creator.js.map +1 -0
  123. package/dist/lib/widgets/common/walkthrough.js +336 -0
  124. package/dist/lib/widgets/common/walkthrough.js.map +1 -0
  125. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-fullscreen.js +36 -0
  126. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-fullscreen.js.map +1 -0
  127. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-search.js +437 -0
  128. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar-search.js.map +1 -0
  129. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar.js +38 -0
  130. package/dist/lib/widgets/controls-view-bar/widget-control-view-bar.js.map +1 -0
  131. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.js +219 -0
  132. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.js.map +1 -0
  133. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-user.js +304 -0
  134. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-user.js.map +1 -0
  135. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab.js +29 -0
  136. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab.js.map +1 -0
  137. package/dist/lib/widgets/widget-bookmarks.js +497 -0
  138. package/dist/lib/widgets/widget-bookmarks.js.map +1 -0
  139. package/dist/lib/widgets/widget-branding.js +165 -0
  140. package/dist/lib/widgets/widget-branding.js.map +1 -0
  141. package/dist/lib/widgets/widget-cursorbar.js +1179 -0
  142. package/dist/lib/widgets/widget-cursorbar.js.map +1 -0
  143. package/dist/lib/widgets/widget-embedded-info-view.js +201 -0
  144. package/dist/lib/widgets/widget-embedded-info-view.js.map +1 -0
  145. package/dist/lib/widgets/widget-info-view.js +681 -0
  146. package/dist/lib/widgets/widget-info-view.js.map +1 -0
  147. package/dist/lib/widgets/widget-left-panel.js +548 -0
  148. package/dist/lib/widgets/widget-left-panel.js.map +1 -0
  149. package/dist/lib/widgets/widget-nav-compass.js +469 -0
  150. package/dist/lib/widgets/widget-nav-compass.js.map +1 -0
  151. package/dist/lib/widgets/widget-view-bar.js +284 -0
  152. package/dist/lib/widgets/widget-view-bar.js.map +1 -0
  153. package/dist/lib/widgets/widget.js +66 -0
  154. package/dist/lib/widgets/widget.js.map +1 -0
  155. package/dist/types/bruce-cesium.d.ts +58 -0
  156. package/dist/types/internal/cesium-utils.d.ts +23 -0
  157. package/dist/types/internal/js-utils.d.ts +8 -0
  158. package/dist/types/internal/limited-log.d.ts +6 -0
  159. package/dist/types/rendering/cesium-animated-in-out.d.ts +12 -0
  160. package/dist/types/rendering/cesium-animated-property.d.ts +245 -0
  161. package/dist/types/rendering/entity-gatherer.d.ts +36 -0
  162. package/dist/types/rendering/entity-render-engine-model3d.d.ts +56 -0
  163. package/dist/types/rendering/entity-render-engine-point.d.ts +73 -0
  164. package/dist/types/rendering/entity-render-engine-polygon.d.ts +26 -0
  165. package/dist/types/rendering/entity-render-engine-polyline.d.ts +47 -0
  166. package/dist/types/rendering/entity-render-engine.d.ts +108 -0
  167. package/dist/types/rendering/getters/batched-data-getter.d.ts +28 -0
  168. package/dist/types/rendering/getters/entity-filter-getter.d.ts +104 -0
  169. package/dist/types/rendering/getters/entity-globe.d.ts +21 -0
  170. package/dist/types/rendering/menu-item-creator.d.ts +53 -0
  171. package/dist/types/rendering/menu-item-manager.d.ts +85 -0
  172. package/dist/types/rendering/relation-render-engine.d.ts +32 -0
  173. package/dist/types/rendering/render-managers/common/cesium-parabola.d.ts +39 -0
  174. package/dist/types/rendering/render-managers/common/entity-label.d.ts +82 -0
  175. package/dist/types/rendering/render-managers/common/point-clustering.d.ts +91 -0
  176. package/dist/types/rendering/render-managers/common/shared-getters.d.ts +41 -0
  177. package/dist/types/rendering/render-managers/data-source/data-source-static-csv-manager.d.ts +41 -0
  178. package/dist/types/rendering/render-managers/data-source/data-source-static-kml-manager.d.ts +25 -0
  179. package/dist/types/rendering/render-managers/entities/entities-datalab-render-manager.d.ts +31 -0
  180. package/dist/types/rendering/render-managers/entities/entities-ids-render-manager.d.ts +76 -0
  181. package/dist/types/rendering/render-managers/entities/entities-loaded-render-manager.d.ts +90 -0
  182. package/dist/types/rendering/render-managers/entities/entities-render-manager.d.ts +90 -0
  183. package/dist/types/rendering/render-managers/entities/entity-render-manager.d.ts +42 -0
  184. package/dist/types/rendering/render-managers/other/assembly-render-manager.d.ts +38 -0
  185. package/dist/types/rendering/render-managers/other/google-search-render-manager.d.ts +45 -0
  186. package/dist/types/rendering/render-managers/other/legacy-relations-render-manager.d.ts +60 -0
  187. package/dist/types/rendering/render-managers/other/relations-render-manager.d.ts +53 -0
  188. package/dist/types/rendering/render-managers/render-manager.d.ts +30 -0
  189. package/dist/types/rendering/render-managers/tilesets/tileset-arb-render-manager.d.ts +37 -0
  190. package/dist/types/rendering/render-managers/tilesets/tileset-cad-render-manager.d.ts +86 -0
  191. package/dist/types/rendering/render-managers/tilesets/tileset-entities-render-manager.d.ts +41 -0
  192. package/dist/types/rendering/render-managers/tilesets/tileset-google-photos-render-manager.d.ts +26 -0
  193. package/dist/types/rendering/render-managers/tilesets/tileset-i3s-render-manager.d.ts +25 -0
  194. package/dist/types/rendering/render-managers/tilesets/tileset-osm-render-manager.d.ts +48 -0
  195. package/dist/types/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.d.ts +27 -0
  196. package/dist/types/rendering/tile-render-engine.d.ts +80 -0
  197. package/dist/types/rendering/tileset-render-engine.d.ts +99 -0
  198. package/dist/types/rendering/tileset-styler.d.ts +86 -0
  199. package/dist/types/rendering/view-render-engine.d.ts +32 -0
  200. package/dist/types/rendering/visual-register-culler.d.ts +18 -0
  201. package/dist/types/rendering/visuals-register.d.ts +361 -0
  202. package/dist/types/utils/cesium-entity-styler.d.ts +103 -0
  203. package/dist/types/utils/drawing-utils.d.ts +59 -0
  204. package/dist/types/utils/entity-utils.d.ts +133 -0
  205. package/dist/types/utils/measure-utils.d.ts +20 -0
  206. package/dist/types/utils/simplify-geometry.d.ts +19 -0
  207. package/dist/types/utils/view-utils.d.ts +101 -0
  208. package/dist/types/viewer/cesium-view-monitor.d.ts +35 -0
  209. package/dist/types/viewer/viewer-event-tracker.d.ts +47 -0
  210. package/dist/types/viewer/viewer-utils.d.ts +88 -0
  211. package/dist/types/widgets/common/draw-3d-polygon.d.ts +62 -0
  212. package/dist/types/widgets/common/draw-3d-polyline.d.ts +50 -0
  213. package/dist/types/widgets/common/measure-creator.d.ts +60 -0
  214. package/dist/types/widgets/common/walkthrough.d.ts +37 -0
  215. package/dist/types/widgets/controls-view-bar/widget-control-view-bar-fullscreen.d.ts +10 -0
  216. package/dist/types/widgets/controls-view-bar/widget-control-view-bar-search.d.ts +18 -0
  217. package/dist/types/widgets/controls-view-bar/widget-control-view-bar.d.ts +23 -0
  218. package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab-bookmarks.d.ts +11 -0
  219. package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab-user.d.ts +24 -0
  220. package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab.d.ts +17 -0
  221. package/dist/types/widgets/widget-bookmarks.d.ts +40 -0
  222. package/dist/types/widgets/widget-branding.d.ts +15 -0
  223. package/dist/types/widgets/widget-cursorbar.d.ts +48 -0
  224. package/dist/types/widgets/widget-embedded-info-view.d.ts +13 -0
  225. package/dist/types/widgets/widget-info-view.d.ts +21 -0
  226. package/dist/types/widgets/widget-left-panel.d.ts +73 -0
  227. package/dist/types/widgets/widget-nav-compass.d.ts +27 -0
  228. package/dist/types/widgets/widget-view-bar.d.ts +37 -0
  229. package/dist/types/widgets/widget.d.ts +29 -0
  230. package/package.json +1 -1
@@ -0,0 +1,676 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VisualRegisterCuller = void 0;
4
+ const bruce_models_1 = require("bruce-models");
5
+ const Cesium = require("cesium");
6
+ const entity_utils_1 = require("../utils/entity-utils");
7
+ const view_utils_1 = require("../utils/view-utils");
8
+ const DEBUG_MODE = false;
9
+ const MODEL_MIN_RADIUS = 10;
10
+ const POINT_MIN_RADIUS = 15;
11
+ // If a shape has more than this amount of points, we'll avoid checking it because it will take too long.
12
+ // We will put responsibility on the bookmark creator to view shapes they can see.
13
+ const DO_NOT_CULL_AT_LEN_POINTS = 5000;
14
+ // Returns terrain height at a given position.
15
+ // This will cache the results based on the terrain provider and position.
16
+ const _terrainCache = new bruce_models_1.LRUCache(1000);
17
+ // Positions within this tolerance from each-other will be re-used.
18
+ const TERRAIN_HEIGHT_TOLERANCE = 400;
19
+ // Tolerance to use when number of entities is lower than x in the scene.
20
+ const TERRAIN_HEIGHT_TOLERANCE_LOW_COUNT = 30;
21
+ const TERRAIN_HEIGHT_TOLERANCE_LOW_ENTITY_THRESHOLD = 100;
22
+ /**
23
+ * Returns the terrain height for a given position.
24
+ * This will not sample most-detailed and instead the current state of the terrain.
25
+ * TODO: If something is VERY far from the camera, we should just return 0.
26
+ * @param viewer
27
+ * @param pos3d
28
+ * @returns
29
+ */
30
+ const getTerrainOffset = (viewer, pos3d) => {
31
+ var _a;
32
+ if (!viewer.terrainProvider || viewer.terrainProvider["ready"] == false) {
33
+ return null;
34
+ }
35
+ const terrain = (_a = view_utils_1.ViewUtils.GatherTerrainTile({
36
+ viewer
37
+ })) === null || _a === void 0 ? void 0 : _a.terrain;
38
+ if (!terrain || terrain.tilesetId == bruce_models_1.ProjectViewTile.EDefaultTerrain.FlatTerrain) {
39
+ return 0;
40
+ }
41
+ const terrainId = terrain.tilesetId;
42
+ // Check for existing values within TOLERANCE distance.
43
+ const keys = Array.from(_terrainCache.Entries());
44
+ const tolerance = viewer.entities.values.length > TERRAIN_HEIGHT_TOLERANCE_LOW_ENTITY_THRESHOLD ? TERRAIN_HEIGHT_TOLERANCE : TERRAIN_HEIGHT_TOLERANCE_LOW_COUNT;
45
+ for (let i = 0; i < keys.length; i++) {
46
+ const [key, offset] = keys[i];
47
+ const [terrainId2, x, y, z] = key.split("_");
48
+ if (terrainId2 != terrainId) {
49
+ continue;
50
+ }
51
+ const pos3d2 = new Cesium.Cartesian3(parseFloat(x), parseFloat(y), parseFloat(z));
52
+ const distance = Cesium.Cartesian3.distance(pos3d, pos3d2);
53
+ if (distance < tolerance) {
54
+ return offset;
55
+ }
56
+ }
57
+ const key = terrainId + "_" + pos3d.x + "_" + pos3d.y + "_" + pos3d.z;
58
+ let offset = _terrainCache.Get(key);
59
+ if (offset == null) {
60
+ const carto = Cesium.Cartographic.fromCartesian(pos3d);
61
+ let height = 0;
62
+ try {
63
+ height = viewer.scene.globe.getHeight(carto);
64
+ }
65
+ catch (e) {
66
+ if (DEBUG_MODE) {
67
+ console.warn("Failed to get terrain height.", e);
68
+ }
69
+ // Likely out of rendered area.
70
+ // This means it's not our problem since the user isn't looking there :)
71
+ }
72
+ offset = height;
73
+ _terrainCache.Set(key, offset);
74
+ }
75
+ return offset;
76
+ };
77
+ /**
78
+ * Converts given pos3d into a an absolute position.
79
+ * This means either setting it to terrain height or adding the height offset.
80
+ * @param viewer
81
+ * @param heightRef
82
+ * @param pos3d
83
+ * @returns
84
+ */
85
+ const adjustPos3d = (viewer, heightRef, pos3d) => {
86
+ if (heightRef == Cesium.HeightReference.NONE) {
87
+ return pos3d;
88
+ }
89
+ const offset = getTerrainOffset(viewer, pos3d);
90
+ if (!offset) {
91
+ return pos3d;
92
+ }
93
+ const carto = Cesium.Cartographic.fromCartesian(pos3d);
94
+ if (heightRef == Cesium.HeightReference.CLAMP_TO_GROUND) {
95
+ carto.height = offset;
96
+ }
97
+ else {
98
+ carto.height += offset;
99
+ }
100
+ const newPos3d = Cesium.Cartographic.toCartesian(carto);
101
+ if (!(newPos3d === null || newPos3d === void 0 ? void 0 : newPos3d.x)) {
102
+ return pos3d;
103
+ }
104
+ return newPos3d;
105
+ };
106
+ function isFlatTerrain(viewer) {
107
+ var _a, _b;
108
+ if (!viewer) {
109
+ return false;
110
+ }
111
+ return ((_b = (_a = view_utils_1.ViewUtils.GatherTerrainTile({
112
+ viewer
113
+ })) === null || _a === void 0 ? void 0 : _a.terrain) === null || _b === void 0 ? void 0 : _b.tilesetId) == bruce_models_1.ProjectViewTile.EDefaultTerrain.FlatTerrain;
114
+ }
115
+ function getValue(viewer, obj) {
116
+ if (obj === null || obj === void 0 ? void 0 : obj.getValue) {
117
+ let date = viewer.scene.lastRenderTime;
118
+ if (!date) {
119
+ date = viewer.clock.currentTime;
120
+ }
121
+ return obj.getValue(date);
122
+ }
123
+ return obj;
124
+ }
125
+ const boundingSphereCache = new bruce_models_1.LRUCache(100000);
126
+ function getPositionsFromEntity(viewer, entity) {
127
+ let positions = [];
128
+ let heightRef;
129
+ if (entity.billboard) {
130
+ let pos3d = getValue(viewer, entity.position);
131
+ if (!(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
132
+ return null;
133
+ }
134
+ heightRef = getValue(viewer, entity.billboard.heightReference);
135
+ positions.push(pos3d);
136
+ }
137
+ else if (entity.polyline) {
138
+ let posses = getValue(viewer, entity.polyline.positions);
139
+ if (!(posses === null || posses === void 0 ? void 0 : posses.length) || posses.length >= DO_NOT_CULL_AT_LEN_POINTS) {
140
+ return null;
141
+ }
142
+ // Get the first, last, and every forth point.
143
+ // This is to reduce the amount of points we need to check.
144
+ if (posses.length > 10) {
145
+ const first = posses[0];
146
+ const last = posses[posses.length - 1];
147
+ const everyForth = posses.filter((_, index) => index % 4 == 0);
148
+ posses = [first, last].concat(everyForth);
149
+ }
150
+ heightRef = getValue(viewer, entity.polyline.clampToGround) == false ? Cesium.HeightReference.NONE : Cesium.HeightReference.CLAMP_TO_GROUND;
151
+ for (let i = 0; i < posses.length; i++) {
152
+ positions.push(posses[i]);
153
+ }
154
+ }
155
+ else if (entity.polygon) {
156
+ const hierarchy = getValue(viewer, entity.polygon.hierarchy);
157
+ let posses = hierarchy.positions;
158
+ if (!(posses === null || posses === void 0 ? void 0 : posses.length) || posses.length >= DO_NOT_CULL_AT_LEN_POINTS) {
159
+ return null;
160
+ }
161
+ // Get the first, last, and every forth point.
162
+ // This is to reduce the amount of points we need to check.
163
+ if (posses.length > 10) {
164
+ const first = posses[0];
165
+ const last = posses[posses.length - 1];
166
+ const everyForth = posses.filter((_, index) => index % 4 == 0);
167
+ posses = [first, last].concat(everyForth);
168
+ }
169
+ heightRef = getValue(viewer, entity.polygon.heightReference);
170
+ for (let i = 0; i < posses.length; i++) {
171
+ positions.push(posses[i]);
172
+ }
173
+ }
174
+ else if (entity.corridor) {
175
+ let posses = getValue(viewer, entity.corridor.positions);
176
+ if (!(posses === null || posses === void 0 ? void 0 : posses.length) || posses.length >= DO_NOT_CULL_AT_LEN_POINTS) {
177
+ return null;
178
+ }
179
+ // Get the first, last, and every forth point.
180
+ // This is to reduce the amount of points we need to check.
181
+ if (posses.length > 10) {
182
+ const first = posses[0];
183
+ const last = posses[posses.length - 1];
184
+ const everyForth = posses.filter((_, index) => index % 4 == 0);
185
+ posses = [first, last].concat(everyForth);
186
+ }
187
+ heightRef = getValue(viewer, entity.corridor.heightReference);
188
+ for (let i = 0; i < posses.length; i++) {
189
+ positions.push(posses[i]);
190
+ }
191
+ }
192
+ else if (entity.ellipse) {
193
+ let pos3d = getValue(viewer, entity.position);
194
+ if (!(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
195
+ return null;
196
+ }
197
+ heightRef = getValue(viewer, entity.ellipse.heightReference);
198
+ positions.push(pos3d);
199
+ }
200
+ else if (entity.model) {
201
+ let pos3d = getValue(viewer, entity.position);
202
+ if (!(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
203
+ return null;
204
+ }
205
+ heightRef = getValue(viewer, entity.model.heightReference);
206
+ positions.push(pos3d);
207
+ }
208
+ else if (entity.point) {
209
+ let pos3d = getValue(viewer, entity.position);
210
+ if (!(pos3d === null || pos3d === void 0 ? void 0 : pos3d.x)) {
211
+ return null;
212
+ }
213
+ heightRef = getValue(viewer, entity.point.heightReference);
214
+ positions.push(pos3d);
215
+ }
216
+ if (!(positions === null || positions === void 0 ? void 0 : positions.length)) {
217
+ return;
218
+ }
219
+ // We need to zero the heights.
220
+ if (heightRef == Cesium.HeightReference.CLAMP_TO_GROUND && isFlatTerrain(viewer)) {
221
+ for (let i = 0; i < positions.length; i++) {
222
+ const pos = positions[i];
223
+ const carto = Cesium.Cartographic.fromCartesian(pos);
224
+ carto.height = 0;
225
+ positions[i] = Cesium.Cartographic.toCartesian(carto);
226
+ }
227
+ }
228
+ return {
229
+ positions: positions,
230
+ heightRef: heightRef
231
+ };
232
+ }
233
+ function computeBoundingSphereFromPositions(positions) {
234
+ return Cesium.BoundingSphere.fromPoints(positions);
235
+ }
236
+ function shouldCullEntity(viewer, cEntity) {
237
+ var _a, _b, _c, _d;
238
+ const camera = viewer.scene.camera;
239
+ let boundingSphere;
240
+ const terrainId = (_c = (_b = (_a = view_utils_1.ViewUtils.GatherTerrainTile({
241
+ viewer
242
+ })) === null || _a === void 0 ? void 0 : _a.terrain) === null || _b === void 0 ? void 0 : _b.tilesetId) !== null && _c !== void 0 ? _c : bruce_models_1.ProjectViewTile.EDefaultTerrain.FlatTerrain;
243
+ let cullSphere;
244
+ const cacheKey = terrainId + cEntity.id;
245
+ const cacheData = boundingSphereCache.Get(cacheKey);
246
+ if (cacheData) {
247
+ boundingSphere = cacheData;
248
+ }
249
+ else {
250
+ const positions = getPositionsFromEntity(viewer, cEntity);
251
+ if ((_d = positions === null || positions === void 0 ? void 0 : positions.positions) === null || _d === void 0 ? void 0 : _d.length) {
252
+ // Sphere calculated from entity positions.
253
+ // We will evaluate the visual now to see if the sphere should be counted, for example 3D models might not be loaded yet.
254
+ let sphere = computeBoundingSphereFromPositions(positions.positions);
255
+ // If a 3D model is not loaded, we'll avoid caching the sphere data.
256
+ let doNotCache = false;
257
+ if (cEntity.model) {
258
+ const model = cEntity.model;
259
+ if (model._radius && !isNaN(model._radius)) {
260
+ sphere.radius = Math.max(model._radius, MODEL_MIN_RADIUS);
261
+ }
262
+ else {
263
+ // Unknown size. Ignoring.
264
+ sphere = null;
265
+ doNotCache = !model._radiusLoaded;
266
+ }
267
+ }
268
+ // Check for radius and extrusion.
269
+ else if (cEntity.ellipse) {
270
+ let radius = getValue(viewer, cEntity.ellipse.semiMajorAxis);
271
+ const extrusion = getValue(viewer, cEntity.ellipse.extrudedHeight);
272
+ if (extrusion && !isNaN(extrusion)) {
273
+ if (!radius) {
274
+ radius = extrusion;
275
+ }
276
+ else if (extrusion > radius / 2) {
277
+ radius = extrusion;
278
+ }
279
+ }
280
+ if (radius && !isNaN(radius)) {
281
+ sphere.radius = radius;
282
+ }
283
+ }
284
+ // Check for extrusion.
285
+ else if (cEntity.polygon) {
286
+ const extrusion = getValue(viewer, cEntity.polygon.extrudedHeight);
287
+ if (extrusion && !isNaN(extrusion)) {
288
+ if (!sphere.radius) {
289
+ sphere.radius = extrusion;
290
+ }
291
+ else if (extrusion > sphere.radius / 2) {
292
+ sphere.radius = extrusion;
293
+ }
294
+ }
295
+ }
296
+ else if (cEntity.point || cEntity.billboard) {
297
+ sphere.radius = Math.max(sphere.radius, POINT_MIN_RADIUS);
298
+ }
299
+ boundingSphere = {
300
+ heightRef: positions.heightRef,
301
+ sphere: sphere
302
+ };
303
+ if (!doNotCache) {
304
+ boundingSphereCache.Set(cacheKey, boundingSphere);
305
+ }
306
+ }
307
+ else {
308
+ boundingSphereCache.Set(cacheKey, -1);
309
+ }
310
+ }
311
+ if (!boundingSphere || boundingSphere == -1 || !boundingSphere.sphere) {
312
+ return false;
313
+ }
314
+ const adjustedSphere = boundingSphere.sphere.clone();
315
+ adjustedSphere.center = adjustPos3d(viewer, boundingSphere.heightRef, adjustedSphere.center);
316
+ const cullingVolume = camera.frustum.computeCullingVolume(camera.position, camera.direction, camera.up);
317
+ const visibility = cullingVolume.computeVisibility(adjustedSphere);
318
+ // Render sphere to visualize.
319
+ if (DEBUG_MODE) {
320
+ cullSphere = viewer.entities.getById(cEntity.id + "_cull");
321
+ if (!cullSphere) {
322
+ cullSphere = viewer.entities.add({
323
+ id: cEntity.id + "_cull",
324
+ position: boundingSphere.sphere.center,
325
+ ellipsoid: {
326
+ radii: new Cesium.Cartesian3(boundingSphere.sphere.radius, boundingSphere.sphere.radius, boundingSphere.sphere.radius),
327
+ material: Cesium.Color.RED.withAlpha(0.1),
328
+ heightReference: Cesium.HeightReference.NONE
329
+ }
330
+ });
331
+ }
332
+ // Change colour based on visibility.
333
+ cullSphere.ellipsoid.material =
334
+ (visibility == Cesium.Intersect.INSIDE ||
335
+ visibility == Cesium.Intersect.INTERSECTING) ? Cesium.Color.GREEN.withAlpha(0.1) :
336
+ Cesium.Color.RED.withAlpha(0.1);
337
+ cullSphere.position = new Cesium.ConstantPositionProperty(adjustedSphere.center);
338
+ cullSphere.ellipsoid.radii = new Cesium.ConstantProperty(new Cesium.Cartesian3(adjustedSphere.radius, adjustedSphere.radius, adjustedSphere.radius));
339
+ viewer.scene.requestRender();
340
+ }
341
+ return visibility !== Cesium.Intersect.INSIDE && visibility !== Cesium.Intersect.INTERSECTING;
342
+ }
343
+ // Amount of entities to check per interval.
344
+ const CHECK_BATCH = 500;
345
+ let checkInterval = null;
346
+ let checkWaiting = false;
347
+ // We will store the last recheck data on the camera.
348
+ // This will allow us to check if the camera has moved enough to warrant a recheck.
349
+ const LAST_RECHECK_KEY = Symbol("LAST_RECHECK_KEY");
350
+ // Attached to a cesium viewer to indicate a re-check should be done.
351
+ // This is to override the cache that avoids re-checking when the camera hasn't moved.
352
+ const SHOULD_RECHECK_KEY = Symbol("SHOULD_RECHECK_KEY");
353
+ /**
354
+ * We will recheck if the camera has turned or moved enough.
355
+ * @param viewer
356
+ * @returns
357
+ */
358
+ function shouldRecheck(viewer) {
359
+ var _a;
360
+ if (viewer[SHOULD_RECHECK_KEY]) {
361
+ viewer[SHOULD_RECHECK_KEY] = false;
362
+ return true;
363
+ }
364
+ const camera = viewer.scene.camera;
365
+ if (!((_a = camera === null || camera === void 0 ? void 0 : camera.position) === null || _a === void 0 ? void 0 : _a.x)) {
366
+ return false;
367
+ }
368
+ const lastRecheck = camera[LAST_RECHECK_KEY];
369
+ if (!lastRecheck) {
370
+ camera[LAST_RECHECK_KEY] = {
371
+ position: camera.position.clone(),
372
+ direction: camera.direction.clone(),
373
+ tilesLoading: viewer.scene.globe.tilesLoaded
374
+ };
375
+ return true;
376
+ }
377
+ const { position, direction } = lastRecheck;
378
+ const tilesLoadingDiff = lastRecheck.tilesLoading != viewer.scene.globe.tilesLoaded;
379
+ let recheck = tilesLoadingDiff;
380
+ if (!recheck) {
381
+ const posDiff = Cesium.Cartesian3.magnitude(Cesium.Cartesian3.subtract(position, camera.position, new Cesium.Cartesian3()));
382
+ const dirDiff = Cesium.Cartesian3.magnitude(Cesium.Cartesian3.subtract(direction, camera.direction, new Cesium.Cartesian3()));
383
+ recheck = posDiff > 100 || dirDiff > 0.01;
384
+ }
385
+ if (recheck) {
386
+ camera[LAST_RECHECK_KEY] = {
387
+ position: camera.position.clone(),
388
+ direction: camera.direction.clone(),
389
+ tilesLoading: viewer.scene.globe.tilesLoaded
390
+ };
391
+ }
392
+ return recheck;
393
+ }
394
+ /**
395
+ * Returns true if the given rego should be ignored from culling.
396
+ * @param rego
397
+ * @returns
398
+ */
399
+ function isCullingIgnored(viewer, rego) {
400
+ if (
401
+ // No rego or visual.
402
+ // This is a safety check to avoid crashes.
403
+ !rego ||
404
+ !rego.visual ||
405
+ // We will only touch entities. Not tileset stuff.
406
+ !(rego.visual instanceof Cesium.Entity) ||
407
+ // We won't touch relationship lines because they dynamically change shape.
408
+ rego.relation != null ||
409
+ // Explicitly being either shown or hidden.
410
+ rego.overrideShow != null ||
411
+ // Part of an independent collection.
412
+ // Won't touch in case there is special logic.
413
+ rego.collection ||
414
+ // We won't cull historic records as they may be interpolating their locations.
415
+ Boolean(rego.outline && rego.outline.some(x => !!x.DateTime))) {
416
+ return true;
417
+ }
418
+ const visual = rego.visual;
419
+ // We will only cull clamped stuff since it seems that's where we get benefits from.
420
+ let heightRef;
421
+ if (visual.polygon) {
422
+ heightRef = getValue(viewer, visual.polygon.heightReference);
423
+ }
424
+ else if (visual.polyline) {
425
+ heightRef = getValue(viewer, visual.polyline.clampToGround) == false ? Cesium.HeightReference.NONE : Cesium.HeightReference.CLAMP_TO_GROUND;
426
+ }
427
+ else if (visual.corridor) {
428
+ heightRef = getValue(viewer, visual.corridor.heightReference);
429
+ }
430
+ else if (visual.ellipse) {
431
+ heightRef = getValue(viewer, visual.ellipse.heightReference);
432
+ }
433
+ else if (visual.model) {
434
+ heightRef = getValue(viewer, visual.model.heightReference);
435
+ }
436
+ else if (visual.point) {
437
+ heightRef = getValue(viewer, visual.point.heightReference);
438
+ }
439
+ else if (visual.billboard) {
440
+ heightRef = getValue(viewer, visual.billboard.heightReference);
441
+ }
442
+ return heightRef != Cesium.HeightReference.CLAMP_TO_GROUND;
443
+ }
444
+ /**
445
+ * Runs through all entities in the register and culls them if they are out of the viewport.
446
+ * This will work in batches.
447
+ * @param register
448
+ */
449
+ function runCullChecker(register) {
450
+ if (checkInterval != null) {
451
+ checkWaiting = true;
452
+ return;
453
+ }
454
+ const viewer = register.Viewer;
455
+ const entityIds = register.GetEntityIds();
456
+ // We'll use the terrain cache per culler cycle.
457
+ _terrainCache.Clear();
458
+ checkInterval = setInterval(() => {
459
+ var _a;
460
+ if (viewer.isDestroyed() || !viewer.scene) {
461
+ clearInterval(checkInterval);
462
+ checkInterval = null;
463
+ return;
464
+ }
465
+ const toRemove = [];
466
+ const toAdd = [];
467
+ const isIsolatedAny = register.GetIsIsolatedAny();
468
+ const slice = entityIds.splice(0, CHECK_BATCH);
469
+ for (let i = 0; i < slice.length; i++) {
470
+ const entityId = slice[i];
471
+ const regos = register.GetRegos({
472
+ entityId
473
+ });
474
+ regos.sort((a, b) => {
475
+ return b.priority - a.priority;
476
+ });
477
+ let highestPriority = (_a = regos[0]) === null || _a === void 0 ? void 0 : _a.priority;
478
+ if (!highestPriority) {
479
+ highestPriority = 0;
480
+ }
481
+ for (let j = 0; j < regos.length; j++) {
482
+ const rego = regos[j];
483
+ if (isCullingIgnored(viewer, rego)) {
484
+ continue;
485
+ }
486
+ // We skip if it's hidden due to being under the highest priority.
487
+ else if (rego.priority < highestPriority) {
488
+ continue;
489
+ }
490
+ const state = register.GetState({
491
+ entityId: entityId,
492
+ menuItemId: rego.menuItemId
493
+ });
494
+ const parts = entity_utils_1.EntityUtils.GatherEntity({
495
+ entity: rego.visual
496
+ });
497
+ for (let i = 0; i < parts.length; i++) {
498
+ const part = parts[i];
499
+ if (!(part instanceof Cesium.Entity)) {
500
+ continue;
501
+ }
502
+ const shouldCull = shouldCullEntity(viewer, part);
503
+ if (shouldCull) {
504
+ part[VisualRegisterCuller.VISUAL_CULL_KEY] = true;
505
+ toRemove.push(part);
506
+ }
507
+ else {
508
+ delete part[VisualRegisterCuller.VISUAL_CULL_KEY];
509
+ if (rego.overrideShow != false &&
510
+ !viewer.entities.contains(part) &&
511
+ !state.hidden &&
512
+ (!isIsolatedAny || state.isolated)) {
513
+ toAdd.push(part);
514
+ }
515
+ }
516
+ }
517
+ }
518
+ }
519
+ if (toRemove.length > 0) {
520
+ removeEntities(viewer, toRemove);
521
+ }
522
+ if (toAdd.length > 0) {
523
+ addEntities(viewer, toAdd);
524
+ }
525
+ if (entityIds.length <= 0) {
526
+ clearInterval(checkInterval);
527
+ checkInterval = null;
528
+ if (checkWaiting) {
529
+ checkWaiting = false;
530
+ runCullChecker(register);
531
+ }
532
+ }
533
+ }, 200);
534
+ }
535
+ // The latest remove/add pending states of an Entity.
536
+ const entityRemoveAddState = new Map();
537
+ /**
538
+ * Removes Entities from the viewer.
539
+ * This performs the action next viewer update to avoid any internal Cesium issues that can cause crashes.
540
+ * @param viewer
541
+ * @param entities
542
+ */
543
+ function removeEntities(viewer, entities) {
544
+ for (let i = 0; i < entities.length; i++) {
545
+ const entity = entities[i];
546
+ entityRemoveAddState.set(entity.id, false);
547
+ }
548
+ const removal = viewer.scene.postRender.addEventListener(() => {
549
+ removal();
550
+ for (let i = 0; i < entities.length; i++) {
551
+ const entity = entities[i];
552
+ if (entityRemoveAddState.get(entity.id) != false) {
553
+ continue;
554
+ }
555
+ entityRemoveAddState.delete(entity.id);
556
+ viewer.entities.remove(entity);
557
+ }
558
+ });
559
+ }
560
+ /**
561
+ * Adds Entities to the viewer.
562
+ * @param viewer
563
+ * @param entities
564
+ */
565
+ function addEntities(viewer, entities) {
566
+ for (let i = 0; i < entities.length; i++) {
567
+ const entity = entities[i];
568
+ entityRemoveAddState.set(entity.id, true);
569
+ }
570
+ const removal = viewer.scene.postRender.addEventListener(() => {
571
+ removal();
572
+ for (let i = 0; i < entities.length; i++) {
573
+ const entity = entities[i];
574
+ if (entityRemoveAddState.get(entity.id) != true) {
575
+ continue;
576
+ }
577
+ entityRemoveAddState.delete(entity.id);
578
+ viewer.entities.add(entity);
579
+ }
580
+ });
581
+ }
582
+ var VisualRegisterCuller;
583
+ (function (VisualRegisterCuller) {
584
+ VisualRegisterCuller.VISUAL_CULL_KEY = Symbol("VISUAL_CULL_KEY");
585
+ /**
586
+ * Will monitor the visuals within a visual register and cull ones that are out of the viewport.
587
+ * @param params
588
+ * @returns a dispose function.
589
+ */
590
+ function Monitor(params) {
591
+ var _a;
592
+ const { register } = params;
593
+ if (!((_a = register === null || register === void 0 ? void 0 : register.Viewer) === null || _a === void 0 ? void 0 : _a.scene) || register.Viewer.isDestroyed()) {
594
+ console.warn("Cannot monitor a visual register that is not attached to a viewer.");
595
+ return () => { };
596
+ }
597
+ let lastCullCheck = null;
598
+ let checkQueue = new bruce_models_1.DelayQueue(() => {
599
+ if (register.Viewer == null || register.Viewer.isDestroyed() || !shouldRecheck(register.Viewer)) {
600
+ return;
601
+ }
602
+ runCullChecker(register);
603
+ lastCullCheck = new Date();
604
+ }, 1000);
605
+ let moveStartRemoval = register.Viewer.camera.moveStart.addEventListener(() => {
606
+ var _a;
607
+ (_a = checkQueue.Call) === null || _a === void 0 ? void 0 : _a.call(checkQueue);
608
+ });
609
+ let moveEndRemoval = register.Viewer.camera.moveEnd.addEventListener(() => {
610
+ var _a;
611
+ (_a = checkQueue.Call) === null || _a === void 0 ? void 0 : _a.call(checkQueue);
612
+ });
613
+ const RENDER_SECS_PASSED = 5;
614
+ let updateRemoval = register.Viewer.scene.postUpdate.addEventListener(() => {
615
+ var _a;
616
+ const now = new Date();
617
+ if (lastCullCheck == null || (now.getTime() - lastCullCheck.getTime()) > RENDER_SECS_PASSED * 1000) {
618
+ (_a = checkQueue.Call) === null || _a === void 0 ? void 0 : _a.call(checkQueue);
619
+ }
620
+ });
621
+ let terrChangeTimeout = null;
622
+ let terrChangeRemoval = register.Viewer.scene.terrainProviderChanged.addEventListener(() => {
623
+ clearTimeout(terrChangeTimeout);
624
+ terrChangeTimeout = setTimeout(() => {
625
+ var _a;
626
+ MarkShouldRecheck(register.Viewer);
627
+ (_a = checkQueue.Call) === null || _a === void 0 ? void 0 : _a.call(checkQueue);
628
+ }, 2500);
629
+ });
630
+ checkQueue.Call();
631
+ return (params) => {
632
+ const { uncull } = params || {};
633
+ moveStartRemoval === null || moveStartRemoval === void 0 ? void 0 : moveStartRemoval();
634
+ moveStartRemoval = null;
635
+ moveEndRemoval === null || moveEndRemoval === void 0 ? void 0 : moveEndRemoval();
636
+ moveEndRemoval = null;
637
+ updateRemoval === null || updateRemoval === void 0 ? void 0 : updateRemoval();
638
+ updateRemoval = null;
639
+ terrChangeRemoval === null || terrChangeRemoval === void 0 ? void 0 : terrChangeRemoval();
640
+ terrChangeRemoval = null;
641
+ clearTimeout(terrChangeTimeout);
642
+ terrChangeTimeout = null;
643
+ checkInterval === null || checkInterval === void 0 ? void 0 : checkInterval();
644
+ checkInterval = null;
645
+ checkWaiting = false;
646
+ checkQueue === null || checkQueue === void 0 ? void 0 : checkQueue.Dispose();
647
+ checkQueue = null;
648
+ if (uncull != false) {
649
+ // TODO. Unused for now.
650
+ }
651
+ };
652
+ }
653
+ VisualRegisterCuller.Monitor = Monitor;
654
+ function IsCulled(viewer, rego, visual) {
655
+ if (isCullingIgnored(viewer, rego)) {
656
+ return false;
657
+ }
658
+ if (!visual) {
659
+ return false;
660
+ }
661
+ if (visual instanceof Cesium.Entity) {
662
+ let status = visual[VisualRegisterCuller.VISUAL_CULL_KEY];
663
+ if (status == null) {
664
+ status = visual[VisualRegisterCuller.VISUAL_CULL_KEY] = shouldCullEntity(viewer, visual);
665
+ }
666
+ return status;
667
+ }
668
+ return false;
669
+ }
670
+ VisualRegisterCuller.IsCulled = IsCulled;
671
+ function MarkShouldRecheck(viewer) {
672
+ viewer[SHOULD_RECHECK_KEY] = true;
673
+ }
674
+ VisualRegisterCuller.MarkShouldRecheck = MarkShouldRecheck;
675
+ })(VisualRegisterCuller = exports.VisualRegisterCuller || (exports.VisualRegisterCuller = {}));
676
+ //# sourceMappingURL=visual-register-culler.js.map