bruce-cesium 7.6.4 → 7.6.6

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 (29) hide show
  1. package/README.md +2 -27
  2. package/dist/bruce-cesium.es5.js +670 -30
  3. package/dist/bruce-cesium.es5.js.map +1 -1
  4. package/dist/bruce-cesium.umd.js +668 -28
  5. package/dist/bruce-cesium.umd.js.map +1 -1
  6. package/dist/lib/bruce-cesium.js +1 -1
  7. package/dist/lib/rendering/entity-render-engine-point-orientation.js +422 -0
  8. package/dist/lib/rendering/entity-render-engine-point-orientation.js.map +1 -0
  9. package/dist/lib/rendering/entity-render-engine-point.js +43 -3
  10. package/dist/lib/rendering/entity-render-engine-point.js.map +1 -1
  11. package/dist/lib/rendering/getters/entity-filter-getter.js +9 -1
  12. package/dist/lib/rendering/getters/entity-filter-getter.js.map +1 -1
  13. package/dist/lib/rendering/render-managers/common/entity-label-group.js +53 -17
  14. package/dist/lib/rendering/render-managers/common/entity-label-group.js.map +1 -1
  15. package/dist/lib/rendering/render-managers/common/entity-label.js +51 -3
  16. package/dist/lib/rendering/render-managers/common/entity-label.js.map +1 -1
  17. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js +3 -1
  18. package/dist/lib/rendering/render-managers/tilesets/tileset-cad-render-manager.js.map +1 -1
  19. package/dist/lib/rendering/view-render-engine.js +2 -2
  20. package/dist/lib/rendering/view-render-engine.js.map +1 -1
  21. package/dist/lib/utils/entity-utils.js +96 -0
  22. package/dist/lib/utils/entity-utils.js.map +1 -1
  23. package/dist/types/bruce-cesium.d.ts +1 -1
  24. package/dist/types/rendering/entity-render-engine-point-orientation.d.ts +59 -0
  25. package/dist/types/rendering/getters/entity-filter-getter.d.ts +1 -0
  26. package/dist/types/rendering/render-managers/common/entity-label-group.d.ts +2 -0
  27. package/dist/types/rendering/render-managers/common/entity-label.d.ts +3 -0
  28. package/dist/types/utils/entity-utils.d.ts +29 -0
  29. package/package.json +2 -2
@@ -1771,6 +1771,8 @@ var EntityLabel;
1771
1771
  this.modelBox = null;
1772
1772
  this.boxMorph = { value: 0, from: 0, target: 0, start: 0, anchor: undefined, group: undefined,
1773
1773
  shift: { x: 0, y: 0, start: 0 } };
1774
+ // A CAD part's record and its tileset, so the label stays on the part wherever the tileset is drawn now.
1775
+ this.tilesetPart = null;
1774
1776
  // Counter to help differentiate between createLabel calls.
1775
1777
  this.counter = 0;
1776
1778
  // Whether this label has asked its group for a default image, which it does once on screen.
@@ -2080,6 +2082,9 @@ var EntityLabel;
2080
2082
  return;
2081
2083
  }
2082
2084
  this._pos3d = pos3d;
2085
+ if (!this.prePositioned && visual instanceof Cesium.Cesium3DTileFeature) {
2086
+ this.followTilesetPart(visual, counter);
2087
+ }
2083
2088
  let text = "Unknown Entity";
2084
2089
  const additionalTexts = this.additionalTexts ? this.additionalTexts : [];
2085
2090
  if (this.rego) {
@@ -2541,13 +2546,12 @@ var EntityLabel;
2541
2546
  // Past the wait a slow record no longer holds the label back; a box that comes later eases in.
2542
2547
  setTimeout(settle, MODEL_BOX_WAIT);
2543
2548
  this.modelBox.load.then(corners => {
2544
- var _a, _b;
2545
2549
  if (!corners || this.disposed || this.counter !== counter) {
2546
2550
  return;
2547
2551
  }
2548
2552
  // A record that disagrees with where the model was found describes another placement, such as a moved tileset.
2549
2553
  // 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);
2554
+ const motion = this.motionAt(this.viewer.clock.currentTime);
2551
2555
  const centre = Cesium.Cartesian3.midpoint(corners[0], corners[7], new Cesium.Cartesian3());
2552
2556
  if (motion) {
2553
2557
  Cesium.Matrix4.multiplyByPoint(motion, centre, centre);
@@ -2559,7 +2563,8 @@ var EntityLabel;
2559
2563
  // Let go a little further out than it is taken, so a camera resting at the limit does not flip it.
2560
2564
  let near = false;
2561
2565
  layer.modelBoxes.Set(this.id, corners, rego.entityId, {
2562
- motion: rego.motion ? () => rego.motion(this.viewer.clock.currentTime) : undefined,
2566
+ // Asked each frame, since a CAD part's tileset may only be known once its record is read.
2567
+ motion: () => this.motionAt(this.viewer.clock.currentTime),
2563
2568
  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); },
2564
2569
  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)); },
2565
2570
  near: () => {
@@ -2593,6 +2598,12 @@ var EntityLabel;
2593
2598
  desiredHeightRef: Cesium.HeightReference.NONE, heightRef, pos3d: position, viewer: this.viewer
2594
2599
  });
2595
2600
  }
2601
+ // A CAD part sits where its tileset is drawn this frame.
2602
+ else if (!this.prePositioned && this.tilesetPart) {
2603
+ const { tileset, entity } = this.tilesetPart;
2604
+ const rootFrame = entity_utils_1.EntityUtils.GetTilesetRootFrame(tileset);
2605
+ this._pos3d = (rootFrame && entity_utils_1.EntityUtils.GetAssemblyPartPos3d({ viewer: this.viewer, entity, rootFrame })) || this._pos3d;
2606
+ }
2596
2607
  if (!Number.isFinite((_b = this._pos3d) === null || _b === void 0 ? void 0 : _b.x)) {
2597
2608
  return null;
2598
2609
  }
@@ -3331,6 +3342,43 @@ var EntityLabel;
3331
3342
  };
3332
3343
  step();
3333
3344
  }
3345
+ /*
3346
+ * Keeps a label on a CAD Assembly part where its tileset is drawn, which a record cannot know as it moves.
3347
+ */
3348
+ async followTilesetPart(feature, counter) {
3349
+ var _a, _b, _c;
3350
+ const known = (_c = (_b = (_a = this.visualRegister) === null || _a === void 0 ? void 0 : _a.GetLabelGroupFor(this.rego.entityId, this.rego.menuItemId)) === null || _b === void 0 ? void 0 : _b.item) === null || _c === void 0 ? void 0 : _c.entity;
3351
+ let entity = entity_utils_1.EntityUtils.IsAssemblyPart(known) ? known : null;
3352
+ if (!entity && this.api) {
3353
+ try {
3354
+ entity = (await bruce_models_1.Entity.Get({ api: this.api, entityId: this.rego.entityId, expandLocation: true, migrated: true })).entity;
3355
+ }
3356
+ // Expanding location fails for entities outside an assembly, which keep the position already found.
3357
+ catch {
3358
+ return;
3359
+ }
3360
+ }
3361
+ const record = entity_utils_1.EntityUtils.GetAssemblyRecordFrame(entity);
3362
+ if (!record || this.disposed || this.counter !== counter || !feature.tileset) {
3363
+ return;
3364
+ }
3365
+ this.tilesetPart = { tileset: feature.tileset, entity, record };
3366
+ this.viewer.scene.requestRender();
3367
+ }
3368
+ /*
3369
+ * Rigid motion from where the record places this Entity to where it is drawn, see IVisualRego.motion.
3370
+ * A CAD part has none of its own, so it moves with its tileset.
3371
+ */
3372
+ motionAt(time) {
3373
+ var _a, _b;
3374
+ const own = (_b = (_a = this.rego) === null || _a === void 0 ? void 0 : _a.motion) === null || _b === void 0 ? void 0 : _b.call(_a, time);
3375
+ if (own || !this.tilesetPart) {
3376
+ return own !== null && own !== void 0 ? own : null;
3377
+ }
3378
+ const drawn = entity_utils_1.EntityUtils.GetTilesetRootFrame(this.tilesetPart.tileset);
3379
+ const inverse = Cesium.Matrix4.inverseTransformation(this.tilesetPart.record, new Cesium.Matrix4());
3380
+ return drawn ? Cesium.Matrix4.multiply(drawn, inverse, inverse) : null;
3381
+ }
3334
3382
  /*
3335
3383
  * Reads the record's geometry box, preferring an entity a label group already hydrated.
3336
3384
  */