bruce-cesium 7.0.1 → 7.0.3

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 (84) hide show
  1. package/dist/bruce-cesium.es5.js +1475 -289
  2. package/dist/bruce-cesium.es5.js.map +1 -1
  3. package/dist/bruce-cesium.umd.js +1473 -287
  4. package/dist/bruce-cesium.umd.js.map +1 -1
  5. package/dist/lib/bruce-cesium.js +1 -1
  6. package/dist/lib/internal/cesium-show-gate.js +100 -0
  7. package/dist/lib/internal/cesium-show-gate.js.map +1 -0
  8. package/dist/lib/internal/cesium-utils.js +207 -1
  9. package/dist/lib/internal/cesium-utils.js.map +1 -1
  10. package/dist/lib/internal/js-utils.js +25 -1
  11. package/dist/lib/internal/js-utils.js.map +1 -1
  12. package/dist/lib/rendering/cesium-animated-in-out.js +66 -7
  13. package/dist/lib/rendering/cesium-animated-in-out.js.map +1 -1
  14. package/dist/lib/rendering/entity-render-engine-model3d.js +17 -8
  15. package/dist/lib/rendering/entity-render-engine-model3d.js.map +1 -1
  16. package/dist/lib/rendering/entity-render-engine-point.js +46 -12
  17. package/dist/lib/rendering/entity-render-engine-point.js.map +1 -1
  18. package/dist/lib/rendering/entity-render-engine-polygon.js +146 -63
  19. package/dist/lib/rendering/entity-render-engine-polygon.js.map +1 -1
  20. package/dist/lib/rendering/entity-render-engine-polyline.js +27 -8
  21. package/dist/lib/rendering/entity-render-engine-polyline.js.map +1 -1
  22. package/dist/lib/rendering/entity-render-engine.js +86 -14
  23. package/dist/lib/rendering/entity-render-engine.js.map +1 -1
  24. package/dist/lib/rendering/menu-item-manager.js +30 -2
  25. package/dist/lib/rendering/menu-item-manager.js.map +1 -1
  26. package/dist/lib/rendering/relation-render-engine.js +2 -1
  27. package/dist/lib/rendering/relation-render-engine.js.map +1 -1
  28. package/dist/lib/rendering/render-managers/common/entity-label.js +10 -2
  29. package/dist/lib/rendering/render-managers/common/entity-label.js.map +1 -1
  30. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js +58 -4
  31. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js.map +1 -1
  32. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js +46 -23
  33. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js.map +1 -1
  34. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +70 -11
  35. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js.map +1 -1
  36. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js +13 -1
  37. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js.map +1 -1
  38. package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js +3 -2
  39. package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js.map +1 -1
  40. package/dist/lib/rendering/render-managers/other/relations-render-manager.js +3 -2
  41. package/dist/lib/rendering/render-managers/other/relations-render-manager.js.map +1 -1
  42. package/dist/lib/rendering/render-managers/render-manager.js +67 -3
  43. package/dist/lib/rendering/render-managers/render-manager.js.map +1 -1
  44. package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js +2 -0
  45. package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js.map +1 -1
  46. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +2 -0
  47. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js.map +1 -1
  48. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js +2 -0
  49. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js.map +1 -1
  50. package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js +4 -1
  51. package/dist/lib/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.js.map +1 -1
  52. package/dist/lib/rendering/texture-frame-series-animator.js +7 -0
  53. package/dist/lib/rendering/texture-frame-series-animator.js.map +1 -1
  54. package/dist/lib/rendering/tileset-render-engine.js +18 -0
  55. package/dist/lib/rendering/tileset-render-engine.js.map +1 -1
  56. package/dist/lib/rendering/visual-register-culler.js +191 -97
  57. package/dist/lib/rendering/visual-register-culler.js.map +1 -1
  58. package/dist/lib/rendering/visuals-register.js +263 -25
  59. package/dist/lib/rendering/visuals-register.js.map +1 -1
  60. package/dist/lib/utils/cesium-entity-styler.js +7 -3
  61. package/dist/lib/utils/cesium-entity-styler.js.map +1 -1
  62. package/dist/types/bruce-cesium.d.ts +1 -1
  63. package/dist/types/internal/cesium-show-gate.d.ts +29 -0
  64. package/dist/types/internal/cesium-utils.d.ts +63 -0
  65. package/dist/types/internal/js-utils.d.ts +10 -0
  66. package/dist/types/rendering/cesium-animated-in-out.d.ts +5 -0
  67. package/dist/types/rendering/entity-render-engine-model3d.d.ts +2 -0
  68. package/dist/types/rendering/entity-render-engine-point.d.ts +2 -0
  69. package/dist/types/rendering/entity-render-engine-polygon.d.ts +2 -0
  70. package/dist/types/rendering/entity-render-engine-polyline.d.ts +2 -0
  71. package/dist/types/rendering/entity-render-engine.d.ts +17 -1
  72. package/dist/types/rendering/menu-item-manager.d.ts +6 -0
  73. package/dist/types/rendering/render-managers/entities/entities-datalab-render-manager.d.ts +13 -0
  74. package/dist/types/rendering/render-managers/entities/entities-loaded-render-manager.d.ts +2 -0
  75. package/dist/types/rendering/render-managers/entities/entities-render-manager.d.ts +14 -0
  76. package/dist/types/rendering/render-managers/entities/entity-render-manager.d.ts +2 -0
  77. package/dist/types/rendering/render-managers/render-manager.d.ts +33 -0
  78. package/dist/types/rendering/render-managers/tilesets/tileset-pointcloud-render-manager.d.ts +3 -0
  79. package/dist/types/rendering/texture-frame-series-animator.d.ts +5 -0
  80. package/dist/types/rendering/tileset-render-engine.d.ts +14 -0
  81. package/dist/types/rendering/visual-register-culler.d.ts +7 -0
  82. package/dist/types/rendering/visuals-register.d.ts +65 -1
  83. package/dist/types/utils/cesium-entity-styler.d.ts +1 -0
  84. package/package.json +1 -1
@@ -2,6 +2,69 @@ import { Color } from "bruce-models";
2
2
  import * as Cesium from "cesium";
3
3
  export declare function OnNextCRender(viewer: Cesium.Viewer, callback: () => void): void;
4
4
  export declare function GetCValue<T>(viewer: Cesium.Viewer, obj: Cesium.Property | any): T;
5
+ export declare function MarkCCollectionOwned(collection: Cesium.EntityCollection): void;
6
+ export declare function IsCCollectionOwned(collection: Cesium.EntityCollection): boolean;
7
+ /**
8
+ * Runs a bulk collection mutation with every given collection's events suspended, so Cesium raises one
9
+ * collectionChanged per collection for the whole pass instead of one per entity.
10
+ *
11
+ * Takes a set of collections rather than assuming `viewer.entities`, because managed visuals live in their menu
12
+ * item's own data source: suspending the wrong collection silently does nothing.
13
+ * @param collections Duplicates and empty entries are ignored.
14
+ * @param run
15
+ */
16
+ export declare function WithSuspendedCCollections<T>(collections: Iterable<Cesium.EntityCollection>, run: () => T): T;
17
+ /**
18
+ * Returns the collection a graphic belongs to, falling back to the viewer's own when it has never been added.
19
+ * @param viewer
20
+ * @param entity
21
+ */
22
+ export declare function GetCEntityCollection(viewer: Cesium.Viewer, entity: any): Cesium.EntityCollection;
23
+ /**
24
+ * Returns whether a graphic is currently in the scene, looking in whichever collection owns it.
25
+ * @param viewer
26
+ * @param entity
27
+ */
28
+ export declare function IsCEntityInScene(viewer: Cesium.Viewer, entity: any): boolean;
29
+ /**
30
+ * Removes a graphic from whichever collection owns it. Returns whether it removed anything.
31
+ * @param viewer
32
+ * @param entity
33
+ */
34
+ export declare function RemoveCEntityFromScene(viewer: Cesium.Viewer, entity: any): boolean;
35
+ /**
36
+ * Adds a graphic back into whichever collection owns it, or the viewer's if it has no owner yet.
37
+ * @param viewer
38
+ * @param entity
39
+ */
40
+ export declare function AddCEntityToScene(viewer: Cesium.Viewer, entity: any, fallbackCollection?: Cesium.EntityCollection): boolean;
41
+ /**
42
+ * Returns whether toggling `show` on these graphics is safe, rather than having to add/remove them from the
43
+ * entity collection to hide them.
44
+ *
45
+ * Toggling show is far cheaper than re-adding the graphic to the viewer however a Cesium bug means we can't always use it.
46
+ * See: https://github.com/CesiumGS/cesium/issues/9370
47
+ * @param parts The graphic and any sibling graphics, eg. from EntityUtils.GatherEntity.
48
+ */
49
+ export declare function CanToggleShowSafely(parts: any[]): boolean;
50
+ /**
51
+ * Returns if two resolved Cesium property values are equal, using the value's own equals() when it has one.
52
+ * @param a
53
+ * @param b
54
+ */
55
+ export declare function AreCValuesEqual(a: any, b: any): boolean;
56
+ /**
57
+ * Wraps a value in a ConstantProperty and assigns it to a graphic's property, but only when the resolved
58
+ * value actually differs. Returns whether it assigned.
59
+ * @param params
60
+ */
61
+ export declare function SetCPropIfChanged<T>(params: {
62
+ viewer: Cesium.Viewer;
63
+ graphic: any;
64
+ property: string;
65
+ value: T;
66
+ compare?: (oldValue: T, newValue: T) => boolean;
67
+ }): boolean;
5
68
  export declare function ColorToCColor(color: Color.IColor): Cesium.Color;
6
69
  /**
7
70
  * Removes duplicate points in a row and returns a new array.
@@ -6,3 +6,13 @@
6
6
  * @returns
7
7
  */
8
8
  export declare function EnsureNumber(value: any, defaultNum?: number): number;
9
+ /**
10
+ * Returns an entity's own name when it is good enough to use as-is, or null when it has to be resolved properly.
11
+ * @param entity
12
+ */
13
+ export declare function GetUsableEntityName(entity: any): string;
14
+ /**
15
+ * Returns whether a name is a real one rather than empty or a placeholder.
16
+ * @param name
17
+ */
18
+ export declare function IsUsableEntityName(name: any): boolean;
@@ -1,5 +1,10 @@
1
1
  import * as Cesium from "cesium";
2
2
  export declare namespace CesiumAnimatedInOut {
3
+ /**
4
+ * Runs any removals already queued for this viewer immediately, instead of waiting for the next render.
5
+ * For teardown paths that need the scene emptied synchronously.
6
+ */
7
+ function FlushPendingRemovals(viewer: Cesium.Viewer): void;
3
8
  /**
4
9
  * Animates an Entity out of the scene.
5
10
  * Removes it from the scene at the end of the animation.
@@ -23,12 +23,14 @@ export declare namespace EntityRenderEngineModel3d {
23
23
  maxDistance?: number;
24
24
  minDistance?: number;
25
25
  rendered?: EntityRenderEngine.ICesiumEntityExt;
26
+ offline?: boolean;
26
27
  fullStyle?: Style.IEntitySettings;
27
28
  }
28
29
  /**
29
30
  * Params for rendering a group of 3D model entities.
30
31
  */
31
32
  interface IGroupParams {
33
+ offline?: boolean;
32
34
  rendered?: Map<string, EntityRenderEngine.ICesiumEntityExt>;
33
35
  apiGetter: BruceApi.IGetter;
34
36
  menuItemId: string;
@@ -23,12 +23,14 @@ export declare namespace EntityRenderEnginePoint {
23
23
  maxDistance?: number;
24
24
  minDistance?: number;
25
25
  rendered?: EntityRenderEngine.ICesiumEntityExt;
26
+ offline?: boolean;
26
27
  fullStyle?: Style.IEntitySettings;
27
28
  }
28
29
  /**
29
30
  * Params for rendering a group of point Entities.
30
31
  */
31
32
  interface IGroupParams {
33
+ offline?: boolean;
32
34
  rendered?: Map<string, EntityRenderEngine.ICesiumEntityExt>;
33
35
  apiGetter: BruceApi.IGetter;
34
36
  menuItemId: string;
@@ -6,6 +6,7 @@ import { ISeriesSegment } from "../internal/series-segment";
6
6
  export declare namespace EntityRenderEnginePolygon {
7
7
  interface IParams {
8
8
  rendered?: EntityRenderEngine.ICesiumEntityExt;
9
+ offline?: boolean;
9
10
  api?: BruceApi.Api;
10
11
  style: Style.IPolygonSettings;
11
12
  entity: Entity.IEntity;
@@ -17,6 +18,7 @@ export declare namespace EntityRenderEnginePolygon {
17
18
  onSeriesDiscovered?: (segment: ISeriesSegment) => void;
18
19
  }
19
20
  interface IGroupParams {
21
+ offline?: boolean;
20
22
  apiGetter: BruceApi.IGetter;
21
23
  menuItemId: string;
22
24
  onSeriesDiscovered?: (segment: ISeriesSegment) => void;
@@ -11,6 +11,7 @@ export declare namespace EntityRenderEnginePolyline {
11
11
  */
12
12
  interface IParams {
13
13
  rendered?: EntityRenderEngine.ICesiumEntityExt;
14
+ offline?: boolean;
14
15
  style: Style.IPolylineSettings;
15
16
  entity: Entity.IEntity;
16
17
  tags: EntityTag.ITag[];
@@ -22,6 +23,7 @@ export declare namespace EntityRenderEnginePolyline {
22
23
  * Params for rendering a group of polyline Entities.
23
24
  */
24
25
  interface IGroupParams {
26
+ offline?: boolean;
25
27
  apiGetter: BruceApi.IGetter;
26
28
  menuItemId: string;
27
29
  entities: Entity.IEntity[];
@@ -1,5 +1,6 @@
1
1
  import * as Cesium from "cesium";
2
2
  import { Entity, BruceApi, ZoomControl, IDictionary, EntityHistoricData } from "bruce-models";
3
+ import { RenderManager } from "./render-managers/render-manager";
3
4
  import { VisualsRegister } from "./visuals-register";
4
5
  import { EntityRenderEnginePoint } from "./entity-render-engine-point";
5
6
  import { EntityRenderEngineModel3d } from "./entity-render-engine-model3d";
@@ -36,11 +37,24 @@ export declare namespace StyleEffective {
36
37
  function MatchesFilter(effective: string | null | undefined, filter: string | null | undefined): boolean;
37
38
  }
38
39
  export declare namespace EntityRenderEngine {
40
+ /**
41
+ * Identifies the zoom band a graphic was last rendered for, covering everything in that band which
42
+ * changes how the entity is drawn. Used to decide whether a re-render is needed at all.
43
+ *
44
+ * Deliberately NOT the reuse key: most of a band's identity is plain graphics properties that can be
45
+ * patched onto the existing graphic, so see GetGraphicShapeId for that decision.
46
+ */
39
47
  function GetRenderGroupId(zoomItem: ZoomControl.IItem): string;
48
+ /**
49
+ * Identifies the kind of Cesium graphic a zoom item + entity resolves to, ignoring anything that is merely a property on it.
50
+ */
51
+ function GetGraphicShapeId(zoomItem: ZoomControl.IItem, entity: Entity.IEntity): string;
40
52
  interface ICesiumEntityExt extends Cesium.Entity {
41
53
  _siblingGraphics?: Cesium.Entity[];
42
54
  _parentEntity?: Cesium.Entity;
43
55
  _renderGroup?: string;
56
+ _graphicShape?: string;
57
+ _bandCheck?: RenderManager.IBandCheck;
44
58
  _noEdit?: boolean;
45
59
  _noSelect?: boolean;
46
60
  styleId?: number;
@@ -81,6 +95,7 @@ export declare namespace EntityRenderEngine {
81
95
  entitiesHistoric?: IDictionary<EntityHistoricData.IData[]>;
82
96
  entityHistoricDrawTrack?: boolean;
83
97
  force?: boolean;
98
+ offline?: boolean;
84
99
  optimizeGeometry?: boolean;
85
100
  optimizeMinPoints?: number;
86
101
  optimizeTolerance?: number;
@@ -131,7 +146,8 @@ export declare namespace EntityRenderEngine {
131
146
  * @param max
132
147
  * @param meterSize size of "thing" in meters, eg polyline is 0.5 meters width. If size is provided we can potentially cull it earlier.
133
148
  * @param isPolygon
149
+ * @param fitMeterSize overall extent of the "thing" in meters, eg a parcel's bounding-box diagonal. If provided we keep it visible far enough out to actually fit on screen.
134
150
  * @returns
135
151
  */
136
- function GetDisplayCondition(min: number, max: number, meterSize?: number, isPolygon?: boolean): Cesium.DistanceDisplayCondition;
152
+ function GetDisplayCondition(min: number, max: number, meterSize?: number, isPolygon?: boolean, fitMeterSize?: number): Cesium.DistanceDisplayCondition;
137
153
  }
@@ -91,6 +91,12 @@ export declare namespace MenuItemManager {
91
91
  private isHandoffCapable;
92
92
  private computeHandoffKey;
93
93
  private tryClaimHandoffPayload;
94
+ /**
95
+ * Moves any series segments recorded for one menu item over to another, for a claimed hand-off.
96
+ * The adopting manager may legitimately skip re-rendering (nothing to restyle), and segments are only
97
+ * ever reported from inside a render, so without this the claiming item would end up with none.
98
+ */
99
+ private transferSeriesSegments;
94
100
  FlushPendingHandoffs(): void;
95
101
  GetEnabledItemIds(): string[];
96
102
  GetEnabledItem(id: string): IRenderedItem;
@@ -40,6 +40,12 @@ export declare namespace DataLabRenderManager {
40
40
  private attachGetter;
41
41
  private unsetGetter;
42
42
  private setEntityCheckQueue;
43
+ /**
44
+ * Narrows a camera-driven check to the entities whose zoom band could actually have changed, so a pan or
45
+ * zoom stops re-requesting the whole rendered set. See RenderManager.CouldBandHaveChanged.
46
+ * @param ids
47
+ */
48
+ private filterPossibleBandChanges;
43
49
  private preventCurrentCheckApiRefresh;
44
50
  Dispose(): void;
45
51
  private doDispose;
@@ -56,9 +62,16 @@ export declare namespace DataLabRenderManager {
56
62
  private doEntityCheck;
57
63
  private distributeForRender;
58
64
  private deduplicateEntities;
65
+ private renderDataLabEntitiesChain;
59
66
  private renderDataLabEntities;
67
+ private doRenderDataLabEntities;
60
68
  get HandoffKey(): string | null;
61
69
  static GetHandoffKey(item: MenuItem.Item.IDataLab): string | null;
70
+ /**
71
+ * Everything about this menu item that changes how its entities are drawn, as a comparable string.
72
+ * The hand-off key is only the query id, so this is what catches a styling difference between two items sharing that query.
73
+ */
74
+ static GetRenderSignature(item: MenuItem.Item.IDataLab): string;
62
75
  PrepareHandoff(): RenderManager.IHandoffPayload | null;
63
76
  AdoptHandoff(payload: RenderManager.IHandoffPayload): void;
64
77
  }
@@ -87,6 +87,8 @@ export declare namespace EntitiesLoadedRenderManager {
87
87
  * @param force
88
88
  * @returns
89
89
  */
90
+ private renderAsIndividualsChain;
90
91
  private renderAsIndividuals;
92
+ private doRenderAsIndividuals;
91
93
  }
92
94
  }
@@ -80,6 +80,11 @@ export declare namespace EntitiesRenderManager {
80
80
  zoomControl?: ZoomControl.IItem[];
81
81
  queueRerender?: boolean;
82
82
  }): void;
83
+ /**
84
+ * Narrows a camera-driven check to the entities whose zoom band could actually have changed.
85
+ * @param ids
86
+ */
87
+ private filterPossibleBandChanges;
83
88
  private doEntityCheck;
84
89
  private distributeForRender;
85
90
  private renderEntities;
@@ -97,9 +102,18 @@ export declare namespace EntitiesRenderManager {
97
102
  * @param force
98
103
  * @returns
99
104
  */
105
+ private renderAsIndividualsChain;
100
106
  private renderAsIndividuals;
107
+ private doRenderAsIndividuals;
101
108
  get HandoffKey(): string | null;
102
109
  static GetHandoffKey(item: MenuItem.Item.IEntities): string | null;
110
+ /**
111
+ * Everything about a menu item that changes how its entities are drawn, as a comparable string.
112
+ * Two items with the same signature produce identical graphics, so a hand-off between them needs no
113
+ * re-render (and so no re-fetch of entity data the hand-off just avoided requesting).
114
+ * A false mismatch only costs the optimization, so key ordering inside an inline Style is not normalized.
115
+ */
116
+ static GetRenderSignature(item: MenuItem.Item.IEntities): string;
103
117
  PrepareHandoff(): RenderManager.IHandoffPayload | null;
104
118
  AdoptHandoff(payload: RenderManager.IHandoffPayload): void;
105
119
  }
@@ -39,6 +39,8 @@ export declare namespace EntityRenderManager {
39
39
  zoomControl?: ZoomControl.IItem[];
40
40
  queueRerender?: boolean;
41
41
  }): void;
42
+ private renderEntityChain;
42
43
  private renderEntity;
44
+ private doRenderEntity;
43
45
  }
44
46
  }
@@ -46,15 +46,48 @@ export declare namespace RenderManager {
46
46
  */
47
47
  AdoptHandoff(payload: IHandoffPayload): void;
48
48
  }
49
+ /**
50
+ * What a zoom-item resolution measured, so a later pass can tell whether the answer could have changed
51
+ * without redoing it. See IBandCheck on a rendered graphic.
52
+ */
53
+ interface IZoomItemResolution {
54
+ distance?: number;
55
+ cameraPos?: Cesium.Cartesian3;
56
+ }
49
57
  function DetermineZoomItem(params: {
50
58
  viewer: Cesium.Viewer;
51
59
  entity: Entity.IEntity;
52
60
  zoomControl: ZoomControl.IItem[];
61
+ out?: IZoomItemResolution;
53
62
  }): ZoomControl.IItem;
63
+ /**
64
+ * Returns whether an entity could have moved into a different zoom band since its graphic was rendered,
65
+ * given where the camera is now.
66
+ *
67
+ * Answers true whenever it cannot prove otherwise, so a caller may safely skip only on a false.
68
+ */
69
+ function CouldBandHaveChanged(params: {
70
+ viewer: Cesium.Viewer;
71
+ bandCheck: IBandCheck;
72
+ }): boolean;
73
+ /**
74
+ * What a graphic's zoom band was resolved from, recorded so a camera move can be tested against it
75
+ * without re-measuring the entity (which would need its geometry, ie. another fetch).
76
+ */
77
+ interface IBandCheck extends IZoomItemResolution {
78
+ min?: number;
79
+ max?: number;
80
+ }
54
81
  function GetZoomControlFromDistance(params: {
55
82
  zoomControl: ZoomControl.IItem[];
56
83
  distance: number;
57
84
  }): ZoomControl.IItem;
85
+ /**
86
+ * Everything in a zoom control that changes how an entity is drawn, as a comparable string.
87
+ * Used to tell whether two menu items would produce identical graphics (see a manager's GetRenderSignature).
88
+ * A false mismatch only costs an optimization, so key ordering inside an inline Style is not normalized.
89
+ */
90
+ function GetZoomControlSignature(zoomControl: ZoomControl.IItem[]): string;
58
91
  function GetZoomMinMax(params: {
59
92
  zoomControl: ZoomControl.IItem[];
60
93
  }): number[];
@@ -2,6 +2,7 @@ import { ApiGetters, MenuItem } from "bruce-models";
2
2
  import { RenderManager } from "../render-manager";
3
3
  import * as Cesium from "cesium";
4
4
  import { TilesetArbRenderManager } from "./tileset-arb-render-manager";
5
+ import { VisualsRegister } from "../../visuals-register";
5
6
  export declare namespace TilesetPointcloudRenderManager {
6
7
  class Manager implements RenderManager.IManager, RenderManager.IHandoffCapableManager, RenderManager.IHandoffReceiver {
7
8
  private viewer;
@@ -12,11 +13,13 @@ export declare namespace TilesetPointcloudRenderManager {
12
13
  private cTileset;
13
14
  get Tileset(): Cesium.Cesium3DTileset;
14
15
  private initQueue;
16
+ private visualsManager;
15
17
  constructor(params: {
16
18
  viewer: Cesium.Viewer;
17
19
  getters: ApiGetters;
18
20
  item: MenuItem.Item.IPointcloud;
19
21
  initQueue?: TilesetArbRenderManager.IInitQueue;
22
+ register?: VisualsRegister.Register;
20
23
  });
21
24
  Init(): void;
22
25
  private onCTilesetLoad;
@@ -71,6 +71,11 @@ export declare namespace TextureFrameSeriesAnimator {
71
71
  * lets a caller re-rendering the same entity tell whether an existing instance is already correct, without reaching into private state.
72
72
  */
73
73
  GetArchiveUrl(): string;
74
+ /**
75
+ * The property this instance presents frames through, for a caller that needs to rebuild the entity's
76
+ * material (eg: re-tinting for opacity/selection) without detaching the animation.
77
+ */
78
+ GetImageProperty(): Cesium.CallbackProperty;
74
79
  private onClockTick;
75
80
  private findFrameIndex;
76
81
  private swapToFrame;
@@ -54,7 +54,19 @@ export declare namespace TilesetRenderEngine {
54
54
  _bruceSettings?: ISettingsParams;
55
55
  _bruceDateRange?: IDateRange;
56
56
  }
57
+ /**
58
+ * Just enough of the visuals register to hand a tileset over, declared structurally so this engine does not have
59
+ * to import the register (which imports back into the rendering engines).
60
+ */
61
+ interface ITilesetSink {
62
+ AddTileset(params: {
63
+ tileset: Cesium.Cesium3DTileset;
64
+ menuItemId?: string;
65
+ }): void;
66
+ }
57
67
  interface IParams {
68
+ register?: ITilesetSink;
69
+ menuItemId?: string;
58
70
  loadUrl?: string;
59
71
  accountId: string;
60
72
  apiGetter: BruceApi.IGetter;
@@ -93,6 +105,8 @@ export declare namespace TilesetRenderEngine {
93
105
  loadUrl?: string;
94
106
  viaCdn?: boolean;
95
107
  noMemoryLimit?: boolean;
108
+ register?: ITilesetSink;
109
+ menuItemId?: string;
96
110
  backFaceCulling?: boolean;
97
111
  }): Promise<Cesium.Cesium3DTileset>;
98
112
  class Styler extends TilesetStyler {
@@ -13,6 +13,13 @@ export declare namespace VisualRegisterCuller {
13
13
  function Monitor(params: {
14
14
  register: VisualsRegister.Register;
15
15
  }): (params: IMonitorDispose) => void;
16
+ /**
17
+ * Runs the tileset visibility pass immediately, rather than waiting for the next cull cycle.
18
+ * Exposed so the behaviour is directly assertable, and for a caller that needs it applied now.
19
+ * @param register
20
+ */
21
+ function CullTilesets(register: VisualsRegister.Register): void;
22
+ function IsCullingIgnored(viewer: Cesium.Viewer, rego: VisualsRegister.IVisualRego): boolean;
16
23
  function IsCulled(viewer: Cesium.Viewer, rego: VisualsRegister.IVisualRego, visual: VisualsRegister.Visual): any;
17
24
  function MarkShouldRecheck(viewer: Cesium.Viewer): void;
18
25
  }
@@ -1,10 +1,20 @@
1
1
  import { ApiGetters, BruceEvent, Cartes, Entity, EntityRelation, IDictionary, MenuItem, ProjectViewBookmark } from "bruce-models";
2
2
  import * as Cesium from "cesium";
3
+ import { IShowGate } from "../internal/cesium-show-gate";
3
4
  /**
4
5
  * Manages a registry of all Bruce visuals being rendered by menu items.
5
6
  */
6
7
  export declare namespace VisualsRegister {
7
8
  type Visual = Cesium.Entity | Cesium.Primitive | Cesium.Cesium3DTileFeature;
9
+ /**
10
+ * A Cesium tileset the register knows about, tracked separately from regos.
11
+ */
12
+ interface ITilesetRego {
13
+ tileset: Cesium.Cesium3DTileset;
14
+ menuItemId?: string;
15
+ gate?: IShowGate;
16
+ culled?: boolean;
17
+ }
8
18
  interface IVisualRego {
9
19
  canEdit: boolean;
10
20
  entityId: string;
@@ -101,6 +111,33 @@ export declare namespace VisualsRegister {
101
111
  viewer: Cesium.Viewer;
102
112
  apiGetters?: ApiGetters;
103
113
  });
114
+ private menuItemSources;
115
+ private sourceOrderDirty;
116
+ /**
117
+ * Returns the collection a menu item's visuals belong in, creating its data source on first use.
118
+ * Returns null when there is nothing to key off, leaving the caller on the viewer's own collection.
119
+ * @param menuItemId
120
+ */
121
+ private ensureMenuItemCollection;
122
+ /**
123
+ * Notes the highest zIndex seen for a menu item, since that is what its data source has to sort by.
124
+ * zIndex orders geometry within a data source but not between them, so a whole layer stacks by the
125
+ * highest value anything in it asked for.
126
+ * @param menuItemId
127
+ * @param visual
128
+ */
129
+ private trackSourceZIndex;
130
+ /**
131
+ * Re-stacks the menu item data sources so a higher zIndex sits above a lower one.
132
+ */
133
+ private applySourceOrder;
134
+ /**
135
+ * Drops a menu item's data source once nothing is registered under it any more.
136
+ * @param menuItemId
137
+ */
138
+ private releaseMenuItemCollection;
139
+ /** Every collection a bulk pass over this register's visuals could mutate. */
140
+ private allSceneCollections;
104
141
  private indexMenuItemEntity;
105
142
  private unindexMenuItemEntityIfAbsent;
106
143
  private markLazyExclusion;
@@ -412,9 +449,36 @@ export declare namespace VisualsRegister {
412
449
  }): {
413
450
  regos: IVisualRego[];
414
451
  };
452
+ private tilesets;
453
+ /**
454
+ * Registers a tileset so the register can decide when it is worth drawing.
455
+ * @param params
456
+ */
457
+ AddTileset(params: {
458
+ tileset: Cesium.Cesium3DTileset;
459
+ menuItemId?: string;
460
+ }): void;
461
+ /**
462
+ * Stops tracking a tileset and hands its show flag back to its owner.
463
+ * @param tileset
464
+ */
465
+ RemoveTileset(tileset: Cesium.Cesium3DTileset): void;
466
+ /**
467
+ * Stops tracking every tileset belonging to a menu item.
468
+ * @param menuItemId
469
+ */
470
+ RemoveTilesetsByMenuItem(menuItemId: string): void;
471
+ /**
472
+ * Every tileset currently tracked.
473
+ */
474
+ GetTilesets(): ITilesetRego[];
415
475
  /**
416
- * Returns all registered entity ids.
476
+ * Suppresses or restores a tileset.
477
+ * Returns whether its effective visibility changed, so a caller can skip requesting a render when nothing did.
478
+ * @param tileset
479
+ * @param culled
417
480
  */
481
+ SetTilesetCulled(tileset: Cesium.Cesium3DTileset, culled: boolean): boolean;
418
482
  GetEntityIds(): string[];
419
483
  /**
420
484
  * Marks regos corresponding to given entity ids as stale.
@@ -30,6 +30,7 @@ export declare namespace CesiumEntityStyler {
30
30
  entity: VisualsRegister.Visual;
31
31
  color: Cesium.Color;
32
32
  override?: boolean;
33
+ includeSiblings?: boolean;
33
34
  requestRender?: boolean;
34
35
  }): void;
35
36
  function SetDefaultTextureImage(params: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bruce-cesium",
3
- "version": "7.0.1",
3
+ "version": "7.0.3",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "main": "dist/bruce-cesium.umd.js",