bruce-cesium 7.6.1 → 7.6.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 (95) hide show
  1. package/dist/bruce-cesium.es5.js +2535 -385
  2. package/dist/bruce-cesium.es5.js.map +1 -1
  3. package/dist/bruce-cesium.umd.js +2524 -382
  4. package/dist/bruce-cesium.umd.js.map +1 -1
  5. package/dist/lib/bruce-cesium.js +3 -1
  6. package/dist/lib/bruce-cesium.js.map +1 -1
  7. package/dist/lib/rendering/cesium-animated-property.js +63 -107
  8. package/dist/lib/rendering/cesium-animated-property.js.map +1 -1
  9. package/dist/lib/rendering/entity-gatherer.js +11 -3
  10. package/dist/lib/rendering/entity-gatherer.js.map +1 -1
  11. package/dist/lib/rendering/menu-item-creator.js +44 -23
  12. package/dist/lib/rendering/menu-item-creator.js.map +1 -1
  13. package/dist/lib/rendering/menu-item-manager.js +199 -17
  14. package/dist/lib/rendering/menu-item-manager.js.map +1 -1
  15. package/dist/lib/rendering/menu-item-styles.js +151 -0
  16. package/dist/lib/rendering/menu-item-styles.js.map +1 -0
  17. package/dist/lib/rendering/relation-render-engine.js +24 -5
  18. package/dist/lib/rendering/relation-render-engine.js.map +1 -1
  19. package/dist/lib/rendering/render-managers/common/entity-label-group.js +13 -9
  20. package/dist/lib/rendering/render-managers/common/entity-label-group.js.map +1 -1
  21. package/dist/lib/rendering/render-managers/common/entity-label.js +68 -7
  22. package/dist/lib/rendering/render-managers/common/entity-label.js.map +1 -1
  23. package/dist/lib/rendering/render-managers/common/entity-rerender-maintain-state.js +44 -5
  24. package/dist/lib/rendering/render-managers/common/entity-rerender-maintain-state.js.map +1 -1
  25. package/dist/lib/rendering/render-managers/common/entity-simulation.js +483 -0
  26. package/dist/lib/rendering/render-managers/common/entity-simulation.js.map +1 -0
  27. package/dist/lib/rendering/render-managers/common/historic-trail.js +123 -0
  28. package/dist/lib/rendering/render-managers/common/historic-trail.js.map +1 -0
  29. package/dist/lib/rendering/render-managers/common/historic-utils.js +17 -6
  30. package/dist/lib/rendering/render-managers/common/historic-utils.js.map +1 -1
  31. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js +13 -2
  32. package/dist/lib/rendering/render-managers/entities/entities-datalab-render-manager.js.map +1 -1
  33. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js +20 -2
  34. package/dist/lib/rendering/render-managers/entities/entities-ids-render-manager.js.map +1 -1
  35. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js +13 -2
  36. package/dist/lib/rendering/render-managers/entities/entities-loaded-render-manager.js.map +1 -1
  37. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js +66 -5
  38. package/dist/lib/rendering/render-managers/entities/entities-render-manager.js.map +1 -1
  39. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js +11 -1
  40. package/dist/lib/rendering/render-managers/entities/entity-render-manager.js.map +1 -1
  41. package/dist/lib/rendering/render-managers/other/assembly-render-manager.js +745 -106
  42. package/dist/lib/rendering/render-managers/other/assembly-render-manager.js.map +1 -1
  43. package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js +23 -1
  44. package/dist/lib/rendering/render-managers/other/legacy-relations-render-manager.js.map +1 -1
  45. package/dist/lib/rendering/render-managers/other/relations-render-manager.js +23 -1
  46. package/dist/lib/rendering/render-managers/other/relations-render-manager.js.map +1 -1
  47. package/dist/lib/rendering/render-managers/render-manager.js.map +1 -1
  48. package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js +19 -0
  49. package/dist/lib/rendering/render-managers/tilesets/tileset-arb-render-manager.js.map +1 -1
  50. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +145 -40
  51. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js.map +1 -1
  52. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js +18 -0
  53. package/dist/lib/rendering/render-managers/tilesets/tileset-entities-render-manager.js.map +1 -1
  54. package/dist/lib/rendering/tileset-styler.js +1 -1
  55. package/dist/lib/rendering/tileset-styler.js.map +1 -1
  56. package/dist/lib/rendering/visual-register-culler.js +2 -0
  57. package/dist/lib/rendering/visual-register-culler.js.map +1 -1
  58. package/dist/lib/rendering/visuals-register.js +89 -20
  59. package/dist/lib/rendering/visuals-register.js.map +1 -1
  60. package/dist/lib/utils/entity-utils.js +43 -2
  61. package/dist/lib/utils/entity-utils.js.map +1 -1
  62. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-menu-items.js +64 -12
  63. package/dist/lib/widgets/tabs-left-panel/widget-left-panel-tab-menu-items.js.map +1 -1
  64. package/dist/lib/widgets/widget-info-view.js +20 -7
  65. package/dist/lib/widgets/widget-info-view.js.map +1 -1
  66. package/dist/types/bruce-cesium.d.ts +3 -1
  67. package/dist/types/rendering/cesium-animated-property.d.ts +8 -6
  68. package/dist/types/rendering/entity-gatherer.d.ts +6 -1
  69. package/dist/types/rendering/menu-item-manager.d.ts +58 -1
  70. package/dist/types/rendering/menu-item-styles.d.ts +30 -0
  71. package/dist/types/rendering/relation-render-engine.d.ts +10 -0
  72. package/dist/types/rendering/render-managers/common/entity-label-group.d.ts +3 -2
  73. package/dist/types/rendering/render-managers/common/entity-label.d.ts +4 -0
  74. package/dist/types/rendering/render-managers/common/entity-rerender-maintain-state.d.ts +20 -0
  75. package/dist/types/rendering/render-managers/common/entity-simulation.d.ts +126 -0
  76. package/dist/types/rendering/render-managers/common/historic-trail.d.ts +30 -0
  77. package/dist/types/rendering/render-managers/common/historic-utils.d.ts +4 -0
  78. package/dist/types/rendering/render-managers/entities/entities-datalab-render-manager.d.ts +7 -1
  79. package/dist/types/rendering/render-managers/entities/entities-ids-render-manager.d.ts +7 -1
  80. package/dist/types/rendering/render-managers/entities/entities-loaded-render-manager.d.ts +7 -1
  81. package/dist/types/rendering/render-managers/entities/entities-render-manager.d.ts +10 -1
  82. package/dist/types/rendering/render-managers/entities/entity-render-manager.d.ts +7 -1
  83. package/dist/types/rendering/render-managers/other/assembly-render-manager.d.ts +79 -2
  84. package/dist/types/rendering/render-managers/other/legacy-relations-render-manager.d.ts +5 -0
  85. package/dist/types/rendering/render-managers/other/relations-render-manager.d.ts +5 -0
  86. package/dist/types/rendering/render-managers/render-manager.d.ts +14 -1
  87. package/dist/types/rendering/render-managers/tilesets/tileset-arb-render-manager.d.ts +8 -1
  88. package/dist/types/rendering/render-managers/tilesets/tileset-cad-render-manager.d.ts +16 -2
  89. package/dist/types/rendering/render-managers/tilesets/tileset-entities-render-manager.d.ts +8 -1
  90. package/dist/types/rendering/tileset-styler.d.ts +2 -0
  91. package/dist/types/rendering/visuals-register.d.ts +13 -0
  92. package/dist/types/utils/entity-utils.d.ts +6 -0
  93. package/dist/types/widgets/tabs-left-panel/widget-left-panel-tab-menu-items.d.ts +1 -0
  94. package/dist/types/widgets/widget-info-view.d.ts +1 -0
  95. package/package.json +2 -2
@@ -9,6 +9,7 @@ const drawing_utils_1 = require("../../../utils/drawing-utils");
9
9
  const measure_utils_1 = require("../../../utils/measure-utils");
10
10
  const bruce_models_1 = require("bruce-models");
11
11
  const point_clustering_core_1 = require("./point-clustering-core");
12
+ const entity_simulation_1 = require("./entity-simulation");
12
13
  /**
13
14
  * Returns cesium property's value.
14
15
  * This will check if it's one that changes over time, or just a fixed value.
@@ -64,6 +65,8 @@ var EntityLabel;
64
65
  const PHOTO_CACHE_KEY = "_nextspaceLabelPhotos";
65
66
  // Clearance around a model's box, as a share of its half-extent on each axis.
66
67
  const MODEL_BOX_PADDING = 0.02;
68
+ // How far a moving model's box may drift before it is moved, in metres.
69
+ const MODEL_BOX_FOLLOW_TOLERANCE = 0.001;
67
70
  // Share of each edge drawn out from its corners while the box is idle. Hovering draws the edges whole.
68
71
  const MODEL_BOX_BRACKET = 0.2;
69
72
  // Under this many pixels across, a box reads as a smudge and the ring takes over.
@@ -1281,6 +1284,7 @@ var EntityLabel;
1281
1284
  constructor() {
1282
1285
  // Whether a box competes for space comes only from inputs (camera distance, hover, the pointer), never from
1283
1286
  // how its label was laid out, so an animation moving a label cannot feed back into which boxes show.
1287
+ // corners is where the box is drawn this frame: stored, moved by the entry's motion.
1284
1288
  this.entries = new Map();
1285
1289
  this.groups = null;
1286
1290
  // The hovered Entity. Its box is drawn on its own and whole, ahead of every other box.
@@ -1298,7 +1302,7 @@ var EntityLabel;
1298
1302
  Set(id, corners, entityId, inputs) {
1299
1303
  const current = this.entries.get(id);
1300
1304
  // A label rebuilt over the same box keeps its place and how far it has animated.
1301
- if (corners && (current === null || current === void 0 ? void 0 : current.corners) === corners && current.entityId === entityId) {
1305
+ if (corners && (current === null || current === void 0 ? void 0 : current.stored) === corners && current.entityId === entityId) {
1302
1306
  Object.assign(current, inputs);
1303
1307
  return;
1304
1308
  }
@@ -1306,17 +1310,41 @@ var EntityLabel;
1306
1310
  return;
1307
1311
  }
1308
1312
  if (corners) {
1309
- this.entries.set(id, { ...inputs, corners, entityId, active: false, wanted: false });
1313
+ this.entries.set(id, { ...inputs, corners, stored: corners, entityId, active: false, wanted: false });
1310
1314
  }
1311
1315
  else
1312
1316
  this.entries.delete(id);
1313
1317
  this.since.delete(id);
1318
+ this.forget(id);
1319
+ }
1320
+ /*
1321
+ * Drops the groups and outlines a box was in, so they are worked out again from where it is now.
1322
+ */
1323
+ forget(id) {
1314
1324
  this.groups = null;
1315
1325
  for (const [key, group] of this.outlines) {
1316
1326
  if (group.members.includes(id))
1317
1327
  this.outlines.delete(key);
1318
1328
  }
1319
1329
  }
1330
+ /*
1331
+ * Moves each box whose model moved since the last frame, keeping where it has got to in showing.
1332
+ */
1333
+ follow() {
1334
+ var _a;
1335
+ for (const [id, entry] of this.entries) {
1336
+ const motion = (_a = entry.motion) === null || _a === void 0 ? void 0 : _a.call(entry);
1337
+ if (!motion) {
1338
+ continue;
1339
+ }
1340
+ const moved = entry.stored.map(corner => Cesium.Matrix4.multiplyByPoint(motion, corner, new Cesium.Cartesian3()));
1341
+ if (moved.every((corner, i) => Cesium.Cartesian3.equalsEpsilon(corner, entry.corners[i], 0, MODEL_BOX_FOLLOW_TOLERANCE))) {
1342
+ continue;
1343
+ }
1344
+ entry.corners = moved;
1345
+ this.forget(id);
1346
+ }
1347
+ }
1320
1348
  /*
1321
1349
  * The box drawn for a label this frame, or undefined when it has none or lost its place.
1322
1350
  */
@@ -1384,6 +1412,7 @@ var EntityLabel;
1384
1412
  */
1385
1413
  Resolve(viewer, pointer) {
1386
1414
  var _a, _b, _c, _d;
1415
+ this.follow();
1387
1416
  this.frames.clear();
1388
1417
  this.hulls.clear();
1389
1418
  this.drawn = [];
@@ -1806,9 +1835,16 @@ var EntityLabel;
1806
1835
  }
1807
1836
  if (this.api) {
1808
1837
  const rego = this.rego;
1838
+ const simulation = entity_simulation_1.EntitySimulation.Get(this.viewer);
1839
+ let simulated = null;
1840
+ if (simulation === null || simulation === void 0 ? void 0 : simulation.HasBlob(rego.entityId)) {
1841
+ // A stand-in is named as is; a patch is laid over the API's record first.
1842
+ const read = simulation.HasEntity(rego.entityId) ? null : (await bruce_models_1.Entity.Get({ api: this.api, entityId: rego.entityId, migrated: true })).entity;
1843
+ simulated = simulation.Resolve(rego.entityId, read);
1844
+ }
1809
1845
  this.rego.name = await bruce_models_1.Entity.CalculateNameAsync({
1810
1846
  api: this.api,
1811
- entity: null,
1847
+ entity: simulated,
1812
1848
  entityId: rego.entityId,
1813
1849
  defaultToId: false
1814
1850
  });
@@ -1837,6 +1873,21 @@ var EntityLabel;
1837
1873
  clearTimeout(this.loadTimeout);
1838
1874
  this.loadTimeout = null;
1839
1875
  }
1876
+ /*
1877
+ * Reads the label's Entity again and redraws it, eg. after what is simulated for it changed.
1878
+ */
1879
+ Reload() {
1880
+ if (this.disposed) {
1881
+ return;
1882
+ }
1883
+ this.additionalTexts = this.options.text != null ? [] : null;
1884
+ this.loadedName = false;
1885
+ // The name came from whatever record the visual was drawn from, so it is worked out again too.
1886
+ if (this.rego) {
1887
+ this.rego.name = null;
1888
+ }
1889
+ this.createLabel();
1890
+ }
1840
1891
  /*
1841
1892
  * Rebuilds only when configuration changes; state refreshes must not recreate DOM every frame.
1842
1893
  */
@@ -2067,7 +2118,7 @@ var EntityLabel;
2067
2118
  }
2068
2119
  clearTimeout(this.loadTimeout);
2069
2120
  this.loadTimeout = setTimeout(async () => {
2070
- var _a, _b, _c, _d, _e;
2121
+ var _a, _b, _c, _d, _e, _f;
2071
2122
  if (this.disposed || this.counter != counter) {
2072
2123
  return;
2073
2124
  }
@@ -2094,16 +2145,19 @@ var EntityLabel;
2094
2145
  const attributes = (_a = this.options.attributes) !== null && _a !== void 0 ? _a : (_c = (_b = entityType === null || entityType === void 0 ? void 0 : entityType.VisualSettings) === null || _b === void 0 ? void 0 : _b.label) === null || _c === void 0 ? void 0 : _c.attributes;
2095
2146
  // Read for its attributes, and for a photo when the label has no icon of its own.
2096
2147
  if (attributes || !HasIcon(this.options)) {
2097
- let entity = null;
2148
+ // A simulated stand-in is labelled as is, and a patch is laid over the API's.
2149
+ const simulation = entity_simulation_1.EntitySimulation.Get(this.viewer);
2150
+ let entity = (_d = simulation === null || simulation === void 0 ? void 0 : simulation.GetEntity(this.rego.entityId)) !== null && _d !== void 0 ? _d : null;
2098
2151
  try {
2099
- entity = (await bruce_models_1.Entity.Get({
2152
+ entity = entity !== null && entity !== void 0 ? entity : (await bruce_models_1.Entity.Get({
2100
2153
  api: this.api,
2101
2154
  entityId: this.rego.entityId,
2102
- scenario: ((_d = this.rego.outline) === null || _d === void 0 ? void 0 : _d.length) ? (_e = this.rego.outline.find(x => !!x.Scenario)) === null || _e === void 0 ? void 0 : _e.Scenario : null,
2155
+ scenario: ((_e = this.rego.outline) === null || _e === void 0 ? void 0 : _e.length) ? (_f = this.rego.outline.find(x => !!x.Scenario)) === null || _f === void 0 ? void 0 : _f.Scenario : null,
2103
2156
  schemaId: this.rego.schema,
2104
2157
  migrated: true,
2105
2158
  expandAttachments: !HasIcon(this.options)
2106
2159
  })).entity;
2160
+ entity = entity && simulation ? simulation.Resolve(this.rego.entityId, entity) : entity;
2107
2161
  }
2108
2162
  // Entity doesn't exist.
2109
2163
  // Likely a graphic with an ID that points to no record.
@@ -2487,11 +2541,17 @@ var EntityLabel;
2487
2541
  // Past the wait a slow record no longer holds the label back; a box that comes later eases in.
2488
2542
  setTimeout(settle, MODEL_BOX_WAIT);
2489
2543
  this.modelBox.load.then(corners => {
2544
+ var _a, _b;
2490
2545
  if (!corners || this.disposed || this.counter !== counter) {
2491
2546
  return;
2492
2547
  }
2493
2548
  // A record that disagrees with where the model was found describes another placement, such as a moved tileset.
2549
+ // A part known to have moved from its record, eg. a joint turning, is judged where it has moved to.
2550
+ const motion = (_b = (_a = this.rego) === null || _a === void 0 ? void 0 : _a.motion) === null || _b === void 0 ? void 0 : _b.call(_a, this.viewer.clock.currentTime);
2494
2551
  const centre = Cesium.Cartesian3.midpoint(corners[0], corners[7], new Cesium.Cartesian3());
2552
+ if (motion) {
2553
+ Cesium.Matrix4.multiplyByPoint(motion, centre, centre);
2554
+ }
2495
2555
  if (Cesium.Cartesian3.distance(centre, found) > Cesium.Cartesian3.distance(corners[0], corners[7]) * 0.75 + 2) {
2496
2556
  return;
2497
2557
  }
@@ -2499,6 +2559,7 @@ var EntityLabel;
2499
2559
  // Let go a little further out than it is taken, so a camera resting at the limit does not flip it.
2500
2560
  let near = false;
2501
2561
  layer.modelBoxes.Set(this.id, corners, rego.entityId, {
2562
+ motion: rego.motion ? () => rego.motion(this.viewer.clock.currentTime) : undefined,
2502
2563
  selected: () => { var _a, _b; return Boolean((_b = (_a = this.visualRegister) === null || _a === void 0 ? void 0 : _a.GetState({ entityId: rego.entityId, menuItemId: rego.menuItemId })) === null || _b === void 0 ? void 0 : _b.selected); },
2503
2564
  hovered: () => { var _a, _b; return Boolean((_b = (_a = this.visualRegister) === null || _a === void 0 ? void 0 : _a.IsLabelHovered) === null || _b === void 0 ? void 0 : _b.call(_a, rego.entityId, rego.menuItemId)); },
2504
2565
  near: () => {