@loaders.gl/tiles 3.3.0-alpha.1 → 3.3.0-alpha.11

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 (124) hide show
  1. package/dist/dist.min.js +1031 -1433
  2. package/dist/es5/bundle.js +0 -1
  3. package/dist/es5/bundle.js.map +1 -1
  4. package/dist/es5/constants.js +2 -1
  5. package/dist/es5/constants.js.map +1 -1
  6. package/dist/es5/index.js +26 -36
  7. package/dist/es5/index.js.map +1 -1
  8. package/dist/es5/tileset/helpers/3d-tiles-options.js +0 -1
  9. package/dist/es5/tileset/helpers/3d-tiles-options.js.map +1 -1
  10. package/dist/es5/tileset/helpers/bounding-volume.js +7 -26
  11. package/dist/es5/tileset/helpers/bounding-volume.js.map +1 -1
  12. package/dist/es5/tileset/helpers/frame-state.js +45 -50
  13. package/dist/es5/tileset/helpers/frame-state.js.map +1 -1
  14. package/dist/es5/tileset/helpers/i3s-lod.js +0 -13
  15. package/dist/es5/tileset/helpers/i3s-lod.js.map +1 -1
  16. package/dist/es5/tileset/helpers/tiles-3d-lod.js +7 -16
  17. package/dist/es5/tileset/helpers/tiles-3d-lod.js.map +1 -1
  18. package/dist/es5/tileset/helpers/transform-utils.js +2 -11
  19. package/dist/es5/tileset/helpers/transform-utils.js.map +1 -1
  20. package/dist/es5/tileset/helpers/zoom.js +6 -16
  21. package/dist/es5/tileset/helpers/zoom.js.map +1 -1
  22. package/dist/es5/tileset/tile-3d.js +111 -98
  23. package/dist/es5/tileset/tile-3d.js.map +1 -1
  24. package/dist/es5/tileset/tileset-3d.js +130 -196
  25. package/dist/es5/tileset/tileset-3d.js.map +1 -1
  26. package/dist/es5/tileset/tileset-cache.js +1 -14
  27. package/dist/es5/tileset/tileset-cache.js.map +1 -1
  28. package/dist/es5/tileset/traversers/{i3s-frame-counter.js → i3s-pending-tiles-register.js} +21 -16
  29. package/dist/es5/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
  30. package/dist/es5/tileset/traversers/i3s-tile-manager.js +33 -27
  31. package/dist/es5/tileset/traversers/i3s-tile-manager.js.map +1 -1
  32. package/dist/es5/tileset/traversers/i3s-tileset-traverser.js +10 -52
  33. package/dist/es5/tileset/traversers/i3s-tileset-traverser.js.map +1 -1
  34. package/dist/es5/tileset/traversers/tileset-3d-traverser.js +0 -22
  35. package/dist/es5/tileset/traversers/tileset-3d-traverser.js.map +1 -1
  36. package/dist/es5/tileset/traversers/tileset-traverser.js +55 -78
  37. package/dist/es5/tileset/traversers/tileset-traverser.js.map +1 -1
  38. package/dist/es5/types.js.map +1 -1
  39. package/dist/es5/utils/doubly-linked-list-node.js +3 -7
  40. package/dist/es5/utils/doubly-linked-list-node.js.map +1 -1
  41. package/dist/es5/utils/doubly-linked-list.js +9 -17
  42. package/dist/es5/utils/doubly-linked-list.js.map +1 -1
  43. package/dist/es5/utils/managed-array.js +29 -30
  44. package/dist/es5/utils/managed-array.js.map +1 -1
  45. package/dist/esm/bundle.js +1 -1
  46. package/dist/esm/bundle.js.map +1 -1
  47. package/dist/esm/constants.js +3 -0
  48. package/dist/esm/constants.js.map +1 -1
  49. package/dist/esm/index.js.map +1 -1
  50. package/dist/esm/tileset/helpers/3d-tiles-options.js.map +1 -1
  51. package/dist/esm/tileset/helpers/bounding-volume.js +4 -10
  52. package/dist/esm/tileset/helpers/bounding-volume.js.map +1 -1
  53. package/dist/esm/tileset/helpers/frame-state.js +36 -20
  54. package/dist/esm/tileset/helpers/frame-state.js.map +1 -1
  55. package/dist/esm/tileset/helpers/i3s-lod.js +4 -4
  56. package/dist/esm/tileset/helpers/i3s-lod.js.map +1 -1
  57. package/dist/esm/tileset/helpers/tiles-3d-lod.js +11 -8
  58. package/dist/esm/tileset/helpers/tiles-3d-lod.js.map +1 -1
  59. package/dist/esm/tileset/helpers/transform-utils.js +1 -3
  60. package/dist/esm/tileset/helpers/transform-utils.js.map +1 -1
  61. package/dist/esm/tileset/helpers/zoom.js +3 -2
  62. package/dist/esm/tileset/helpers/zoom.js.map +1 -1
  63. package/dist/esm/tileset/tile-3d.js +47 -108
  64. package/dist/esm/tileset/tile-3d.js.map +1 -1
  65. package/dist/esm/tileset/tileset-3d.js +70 -163
  66. package/dist/esm/tileset/tileset-3d.js.map +1 -1
  67. package/dist/esm/tileset/tileset-cache.js +2 -18
  68. package/dist/esm/tileset/tileset-cache.js.map +1 -1
  69. package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js +28 -0
  70. package/dist/esm/tileset/traversers/i3s-pending-tiles-register.js.map +1 -0
  71. package/dist/esm/tileset/traversers/i3s-tile-manager.js +34 -15
  72. package/dist/esm/tileset/traversers/i3s-tile-manager.js.map +1 -1
  73. package/dist/esm/tileset/traversers/i3s-tileset-traverser.js +8 -22
  74. package/dist/esm/tileset/traversers/i3s-tileset-traverser.js.map +1 -1
  75. package/dist/esm/tileset/traversers/tileset-3d-traverser.js +2 -9
  76. package/dist/esm/tileset/traversers/tileset-3d-traverser.js.map +1 -1
  77. package/dist/esm/tileset/traversers/tileset-traverser.js +20 -59
  78. package/dist/esm/tileset/traversers/tileset-traverser.js.map +1 -1
  79. package/dist/esm/types.js.map +1 -1
  80. package/dist/esm/utils/doubly-linked-list-node.js +1 -4
  81. package/dist/esm/utils/doubly-linked-list-node.js.map +1 -1
  82. package/dist/esm/utils/doubly-linked-list.js +2 -11
  83. package/dist/esm/utils/doubly-linked-list.js.map +1 -1
  84. package/dist/esm/utils/managed-array.js +4 -22
  85. package/dist/esm/utils/managed-array.js.map +1 -1
  86. package/dist/tileset/helpers/frame-state.d.ts +5 -8
  87. package/dist/tileset/helpers/frame-state.d.ts.map +1 -1
  88. package/dist/tileset/helpers/frame-state.js +27 -12
  89. package/dist/tileset/helpers/i3s-lod.d.ts.map +1 -1
  90. package/dist/tileset/tile-3d.d.ts +15 -4
  91. package/dist/tileset/tile-3d.d.ts.map +1 -1
  92. package/dist/tileset/tile-3d.js +15 -2
  93. package/dist/tileset/tileset-3d.d.ts +17 -4
  94. package/dist/tileset/tileset-3d.d.ts.map +1 -1
  95. package/dist/tileset/tileset-3d.js +47 -10
  96. package/dist/tileset/traversers/{i3s-frame-counter.d.ts → i3s-pending-tiles-register.d.ts} +7 -4
  97. package/dist/tileset/traversers/i3s-pending-tiles-register.d.ts.map +1 -0
  98. package/dist/tileset/traversers/{i3s-frame-counter.js → i3s-pending-tiles-register.js} +17 -8
  99. package/dist/tileset/traversers/i3s-tile-manager.d.ts +19 -1
  100. package/dist/tileset/traversers/i3s-tile-manager.d.ts.map +1 -1
  101. package/dist/tileset/traversers/i3s-tile-manager.js +32 -12
  102. package/dist/tileset/traversers/i3s-tileset-traverser.d.ts +1 -1
  103. package/dist/tileset/traversers/i3s-tileset-traverser.d.ts.map +1 -1
  104. package/dist/tileset/traversers/i3s-tileset-traverser.js +9 -9
  105. package/dist/tileset/traversers/tileset-traverser.d.ts +3 -3
  106. package/dist/tileset/traversers/tileset-traverser.d.ts.map +1 -1
  107. package/dist/tileset/traversers/tileset-traverser.js +4 -4
  108. package/dist/types.d.ts +30 -1
  109. package/dist/types.d.ts.map +1 -1
  110. package/package.json +4 -4
  111. package/src/tileset/helpers/frame-state.ts +47 -19
  112. package/src/tileset/helpers/i3s-lod.ts +3 -1
  113. package/src/tileset/tile-3d.ts +16 -2
  114. package/src/tileset/tileset-3d.ts +55 -16
  115. package/src/tileset/traversers/i3s-pending-tiles-register.ts +44 -0
  116. package/src/tileset/traversers/i3s-tile-manager.ts +47 -11
  117. package/src/tileset/traversers/i3s-tileset-traverser.ts +5 -5
  118. package/src/tileset/traversers/tileset-traverser.ts +2 -2
  119. package/src/types.ts +32 -0
  120. package/dist/es5/tileset/traversers/i3s-frame-counter.js.map +0 -1
  121. package/dist/esm/tileset/traversers/i3s-frame-counter.js +0 -23
  122. package/dist/esm/tileset/traversers/i3s-frame-counter.js.map +0 -1
  123. package/dist/tileset/traversers/i3s-frame-counter.d.ts.map +0 -1
  124. package/src/tileset/traversers/i3s-frame-counter.ts +0 -35
@@ -6,19 +6,22 @@ export default class I3SPendingTilesRegister {
6
6
  private frameNumberMap;
7
7
  /**
8
8
  * Register a new pending tile header for the particular frameNumber
9
+ * @param viewportId
9
10
  * @param frameNumber
10
11
  */
11
- register(frameNumber: number): void;
12
+ register(viewportId: string, frameNumber: number): void;
12
13
  /**
13
14
  * Deregister a pending tile header for the particular frameNumber
15
+ * @param viewportId
14
16
  * @param frameNumber
15
17
  */
16
- deregister(frameNumber: number): void;
18
+ deregister(viewportId: string, frameNumber: number): void;
17
19
  /**
18
20
  * Check is there are no pending tile headers registered for the particular frameNumber
21
+ * @param viewportId
19
22
  * @param frameNumber
20
23
  * @returns
21
24
  */
22
- isZero(frameNumber: number): boolean;
25
+ isZero(viewportId: string, frameNumber: number): boolean;
23
26
  }
24
- //# sourceMappingURL=i3s-frame-counter.d.ts.map
27
+ //# sourceMappingURL=i3s-pending-tiles-register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i3s-pending-tiles-register.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/i3s-pending-tiles-register.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAuB;IAC1C,OAAO,CAAC,cAAc,CAA+C;IAErE;;;;OAIG;IACH,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IAOhD;;;;OAIG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;IASlD;;;;;OAKG;IACH,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAI/C"}
@@ -10,27 +10,36 @@ class I3SPendingTilesRegister {
10
10
  }
11
11
  /**
12
12
  * Register a new pending tile header for the particular frameNumber
13
+ * @param viewportId
13
14
  * @param frameNumber
14
15
  */
15
- register(frameNumber) {
16
- const oldCount = this.frameNumberMap.get(frameNumber) || 0;
17
- this.frameNumberMap.set(frameNumber, oldCount + 1);
16
+ register(viewportId, frameNumber) {
17
+ const viewportMap = this.frameNumberMap.get(viewportId) || new Map();
18
+ const oldCount = viewportMap.get(frameNumber) || 0;
19
+ viewportMap.set(frameNumber, oldCount + 1);
20
+ this.frameNumberMap.set(viewportId, viewportMap);
18
21
  }
19
22
  /**
20
23
  * Deregister a pending tile header for the particular frameNumber
24
+ * @param viewportId
21
25
  * @param frameNumber
22
26
  */
23
- deregister(frameNumber) {
24
- const oldCount = this.frameNumberMap.get(frameNumber) || 1;
25
- this.frameNumberMap.set(frameNumber, oldCount - 1);
27
+ deregister(viewportId, frameNumber) {
28
+ const viewportMap = this.frameNumberMap.get(viewportId);
29
+ if (!viewportMap) {
30
+ return;
31
+ }
32
+ const oldCount = viewportMap.get(frameNumber) || 1;
33
+ viewportMap.set(frameNumber, oldCount - 1);
26
34
  }
27
35
  /**
28
36
  * Check is there are no pending tile headers registered for the particular frameNumber
37
+ * @param viewportId
29
38
  * @param frameNumber
30
39
  * @returns
31
40
  */
32
- isZero(frameNumber) {
33
- const count = this.frameNumberMap.get(frameNumber) || 0;
41
+ isZero(viewportId, frameNumber) {
42
+ const count = this.frameNumberMap.get(viewportId)?.get(frameNumber) || 0;
34
43
  return count === 0;
35
44
  }
36
45
  }
@@ -3,14 +3,32 @@ export default class I3STileManager {
3
3
  private _statusMap;
4
4
  private pendingTilesRegister;
5
5
  constructor();
6
+ /**
7
+ * Add request to map
8
+ * @param request - node metadata request
9
+ * @param key - unique key
10
+ * @param callback - callback after request completed
11
+ * @param frameState - frameState data
12
+ */
6
13
  add(request: any, key: any, callback: any, frameState: FrameState): void;
14
+ /**
15
+ * Update request if it is still actual for the new frameState
16
+ * @param key - unique key
17
+ * @param frameState - frameState data
18
+ */
7
19
  update(key: any, frameState: FrameState): void;
20
+ /**
21
+ * Find request in the map
22
+ * @param key - unique key
23
+ * @returns
24
+ */
8
25
  find(key: any): any;
9
26
  /**
10
27
  * Check it there are pending tile headers for the particular frameNumber
28
+ * @param viewportId
11
29
  * @param frameNumber
12
30
  * @returns
13
31
  */
14
- hasPendingTiles(frameNumber: number): boolean;
32
+ hasPendingTiles(viewportId: string, frameNumber: number): boolean;
15
33
  }
16
34
  //# sourceMappingURL=i3s-tile-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"i3s-tile-manager.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/i3s-tile-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAUlD,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,oBAAoB,CAAiC;;IAM7D,GAAG,CAAC,OAAO,KAAA,EAAE,GAAG,KAAA,EAAE,QAAQ,KAAA,EAAE,UAAU,EAAE,UAAU;IAwBlD,MAAM,CAAC,GAAG,KAAA,EAAE,UAAU,EAAE,UAAU;IAUlC,IAAI,CAAC,GAAG,KAAA;IAIR;;;;OAIG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;CAG9C"}
1
+ {"version":3,"file":"i3s-tile-manager.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/i3s-tile-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAUlD,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,oBAAoB,CAAiC;;IAM7D;;;;;;OAMG;IACH,GAAG,CAAC,OAAO,KAAA,EAAE,GAAG,KAAA,EAAE,QAAQ,KAAA,EAAE,UAAU,EAAE,UAAU;IAiClD;;;;OAIG;IACH,MAAM,CAAC,GAAG,KAAA,EAAE,UAAU,EAAE,UAAU;IAmBlC;;;;OAIG;IACH,IAAI,CAAC,GAAG,KAAA;IAIR;;;;;OAKG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;CAGlE"}
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- const i3s_frame_counter_1 = __importDefault(require("./i3s-frame-counter"));
6
+ const i3s_pending_tiles_register_1 = __importDefault(require("./i3s-pending-tiles-register"));
7
7
  const STATUS = {
8
8
  REQUESTED: 'REQUESTED',
9
9
  COMPLETED: 'COMPLETED',
@@ -12,51 +12,71 @@ const STATUS = {
12
12
  // A helper class to manage tile metadata fetching
13
13
  class I3STileManager {
14
14
  constructor() {
15
- this.pendingTilesRegister = new i3s_frame_counter_1.default();
15
+ this.pendingTilesRegister = new i3s_pending_tiles_register_1.default();
16
16
  this._statusMap = {};
17
17
  }
18
+ /**
19
+ * Add request to map
20
+ * @param request - node metadata request
21
+ * @param key - unique key
22
+ * @param callback - callback after request completed
23
+ * @param frameState - frameState data
24
+ */
18
25
  add(request, key, callback, frameState) {
19
26
  if (!this._statusMap[key]) {
20
- const { frameNumber } = frameState;
27
+ const { frameNumber, viewport: { id } } = frameState;
21
28
  this._statusMap[key] = { request, callback, key, frameState, status: STATUS.REQUESTED };
22
29
  // Register pending request for the frameNumber
23
- this.pendingTilesRegister.register(frameNumber);
30
+ this.pendingTilesRegister.register(id, frameNumber);
24
31
  request()
25
32
  .then((data) => {
26
33
  this._statusMap[key].status = STATUS.COMPLETED;
27
- const { frameNumber: actualFrameNumber } = this._statusMap[key].frameState;
34
+ const { frameNumber: actualFrameNumber, viewport: { id } } = this._statusMap[key].frameState;
28
35
  // Deregister pending request for the frameNumber
29
- this.pendingTilesRegister.deregister(actualFrameNumber);
36
+ this.pendingTilesRegister.deregister(id, actualFrameNumber);
30
37
  this._statusMap[key].callback(data, frameState);
31
38
  })
32
39
  .catch((error) => {
33
40
  this._statusMap[key].status = STATUS.ERROR;
34
- const { frameNumber: actualFrameNumber } = this._statusMap[key].frameState;
41
+ const { frameNumber: actualFrameNumber, viewport: { id } } = this._statusMap[key].frameState;
35
42
  // Deregister pending request for the frameNumber
36
- this.pendingTilesRegister.deregister(actualFrameNumber);
43
+ this.pendingTilesRegister.deregister(id, actualFrameNumber);
37
44
  callback(error);
38
45
  });
39
46
  }
40
47
  }
48
+ /**
49
+ * Update request if it is still actual for the new frameState
50
+ * @param key - unique key
51
+ * @param frameState - frameState data
52
+ */
41
53
  update(key, frameState) {
42
54
  if (this._statusMap[key]) {
43
55
  // Deregister pending request for the old frameNumber
44
- this.pendingTilesRegister.deregister(this._statusMap[key].frameState.frameNumber);
56
+ const { frameNumber, viewport: { id } } = this._statusMap[key].frameState;
57
+ this.pendingTilesRegister.deregister(id, frameNumber);
45
58
  // Register pending request for the new frameNumber
46
- this.pendingTilesRegister.register(frameState.frameNumber);
59
+ const { frameNumber: newFrameNumber, viewport: { id: newViewportId } } = frameState;
60
+ this.pendingTilesRegister.register(newViewportId, newFrameNumber);
47
61
  this._statusMap[key].frameState = frameState;
48
62
  }
49
63
  }
64
+ /**
65
+ * Find request in the map
66
+ * @param key - unique key
67
+ * @returns
68
+ */
50
69
  find(key) {
51
70
  return this._statusMap[key];
52
71
  }
53
72
  /**
54
73
  * Check it there are pending tile headers for the particular frameNumber
74
+ * @param viewportId
55
75
  * @param frameNumber
56
76
  * @returns
57
77
  */
58
- hasPendingTiles(frameNumber) {
59
- return !this.pendingTilesRegister.isZero(frameNumber);
78
+ hasPendingTiles(viewportId, frameNumber) {
79
+ return !this.pendingTilesRegister.isZero(viewportId, frameNumber);
60
80
  }
61
81
  }
62
82
  exports.default = I3STileManager;
@@ -7,7 +7,7 @@ export default class I3STilesetTraverser extends TilesetTraverser {
7
7
  * that means the traversal is finished and we can call
8
8
  * following-up callbacks.
9
9
  */
10
- protected get traversalFinished(): boolean;
10
+ protected traversalFinished(frameState: FrameState): boolean;
11
11
  constructor(options: any);
12
12
  shouldRefine(tile: any, frameState: FrameState): boolean;
13
13
  updateChildTiles(tile: any, frameState: FrameState): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"i3s-tileset-traverser.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/i3s-tileset-traverser.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AAKnD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAElD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,gBAAgB;IAC/D,OAAO,CAAC,YAAY,CAAiB;IAErC;;;;OAIG;IACH,SAAS,KAAK,iBAAiB,IAAI,OAAO,CAEzC;gBAEW,OAAO,KAAA;IAKnB,YAAY,CAAC,IAAI,KAAA,EAAE,UAAU,EAAE,UAAU;IAKzC,gBAAgB,CAAC,IAAI,KAAA,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO;IAoCjD,SAAS,CAAC,MAAM,KAAA,EAAE,OAAO,KAAA;IAgB/B;;;;;;;OAOG;IACH,WAAW,CAAC,MAAM,KAAA,EAAE,IAAI,KAAA,EAAE,UAAU,KAAA;CAerC"}
1
+ {"version":3,"file":"i3s-tileset-traverser.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/i3s-tileset-traverser.ts"],"names":[],"mappings":"AACA,OAAO,gBAAgB,MAAM,qBAAqB,CAAC;AAKnD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAElD,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,gBAAgB;IAC/D,OAAO,CAAC,YAAY,CAAiB;IAErC;;;;OAIG;IACH,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;gBAIhD,OAAO,KAAA;IAKnB,YAAY,CAAC,IAAI,KAAA,EAAE,UAAU,EAAE,UAAU;IAKzC,gBAAgB,CAAC,IAAI,KAAA,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO;IAoCjD,SAAS,CAAC,MAAM,KAAA,EAAE,OAAO,KAAA;IAe/B;;;;;;;OAOG;IACH,WAAW,CAAC,MAAM,KAAA,EAAE,IAAI,KAAA,EAAE,UAAU,KAAA;CAgBrC"}
@@ -9,17 +9,17 @@ const i3s_lod_1 = require("../helpers/i3s-lod");
9
9
  const tile_3d_1 = __importDefault(require("../tile-3d"));
10
10
  const i3s_tile_manager_1 = __importDefault(require("./i3s-tile-manager"));
11
11
  class I3STilesetTraverser extends tileset_traverser_1.default {
12
- constructor(options) {
13
- super(options);
14
- this._tileManager = new i3s_tile_manager_1.default();
15
- }
16
12
  /**
17
13
  * Check if there are no penging tile header requests,
18
14
  * that means the traversal is finished and we can call
19
15
  * following-up callbacks.
20
16
  */
21
- get traversalFinished() {
22
- return !this._tileManager.hasPendingTiles(this._frameNumber || 0);
17
+ traversalFinished(frameState) {
18
+ return !this._tileManager.hasPendingTiles(frameState.viewport.id, this._frameNumber || 0);
19
+ }
20
+ constructor(options) {
21
+ super(options);
22
+ this._tileManager = new i3s_tile_manager_1.default();
23
23
  }
24
24
  shouldRefine(tile, frameState) {
25
25
  tile._lodJudge = (0, i3s_lod_1.getLodStatus)(tile, frameState);
@@ -64,8 +64,7 @@ class I3STilesetTraverser extends tileset_traverser_1.default {
64
64
  ...tileset.loadOptions,
65
65
  i3s: {
66
66
  ...tileset.loadOptions.i3s,
67
- isTileHeader: true,
68
- loadContent: false
67
+ isTileHeader: true
69
68
  }
70
69
  };
71
70
  return await (0, core_1.load)(nodeUrl, loader, options);
@@ -86,7 +85,8 @@ class I3STilesetTraverser extends tileset_traverser_1.default {
86
85
  this.updateTile(childTile, frameState);
87
86
  // after tile fetched, resume traversal if still in current update/traversal frame
88
87
  if (this._frameNumber === frameState.frameNumber &&
89
- (this.traversalFinished || new Date().getTime() - this.lastUpdate > this.updateDebounceTime)) {
88
+ (this.traversalFinished(frameState) ||
89
+ new Date().getTime() - this.lastUpdate > this.updateDebounceTime)) {
90
90
  this.executeTraversal(childTile, frameState);
91
91
  }
92
92
  }
@@ -1,6 +1,6 @@
1
1
  import ManagedArray from '../../utils/managed-array';
2
2
  import { FrameState } from '../helpers/frame-state';
3
- export declare type TilesetTraverserProps = {
3
+ export type TilesetTraverserProps = {
4
4
  loadSiblings?: boolean;
5
5
  skipLevelOfDetail?: boolean;
6
6
  maximumScreenSpaceError?: number;
@@ -10,7 +10,7 @@ export declare type TilesetTraverserProps = {
10
10
  };
11
11
  basePath?: string;
12
12
  };
13
- export declare type Props = {
13
+ export type Props = {
14
14
  loadSiblings: boolean;
15
15
  skipLevelOfDetail: boolean;
16
16
  updateTransforms: boolean;
@@ -33,7 +33,7 @@ export default class TilesetTraverser {
33
33
  protected _traversalStack: ManagedArray;
34
34
  protected _emptyTraversalStack: ManagedArray;
35
35
  protected _frameNumber: number | null;
36
- protected get traversalFinished(): boolean;
36
+ protected traversalFinished(frameState: FrameState): boolean;
37
37
  constructor(options: TilesetTraverserProps);
38
38
  traverse(root: any, frameState: any, options: any): void;
39
39
  reset(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"tileset-traverser.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/tileset-traverser.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAElD,oBAAY,qBAAqB,GAAG;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,UAAU,KAAA,KAAK,GAAG,CAAC;IACrC,qBAAqB,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,oBAAY,KAAK,GAAG;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,cAAc,EAAE,CAAC,UAAU,KAAA,KAAK,GAAG,CAAC;IACpC,qBAAqB,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,OAAO,EAAE,KAAK,CAAC;IAEf,IAAI,EAAE,GAAG,CAAC;IACV,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,CAAC,UAAU,EAAE,MAAM,CAAwB;IACpD,SAAS,CAAC,QAAQ,CAAC,kBAAkB,QAAQ;IAC7C,SAAS,CAAC,eAAe,EAAE,YAAY,CAAC;IACxC,SAAS,CAAC,oBAAoB,EAAE,YAAY,CAAC;IAC7C,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC,SAAS,KAAK,iBAAiB,IAAI,OAAO,CAEzC;gBAGW,OAAO,EAAE,qBAAqB;IAuB1C,QAAQ,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,OAAO,KAAA;IAclC,KAAK;IAgBL,gBAAgB,CAAC,IAAI,KAAA,EAAE,UAAU,EAAE,UAAU;IAmE7C,gBAAgB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IASjC,qBAAqB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,KAAK,KAAA,EAAE,KAAK,KAAA;IAuDpD,UAAU,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAK3B,UAAU,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAS3B,QAAQ,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IASzB,SAAS,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAQ1B,WAAW,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,eAAe,UAAQ,EAAE,gBAAgB,UAAQ;IAmB/E,cAAc,CAAC,IAAI,KAAA;IAMnB,gBAAgB,CAAC,IAAI,KAAA;IAOrB,YAAY,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,eAAe,KAAA;IAS9C,oBAAoB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAiBrC,uBAAuB,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAI5B,kBAAkB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAWnC,qBAAqB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;CAqCvC"}
1
+ {"version":3,"file":"tileset-traverser.d.ts","sourceRoot":"","sources":["../../../src/tileset/traversers/tileset-traverser.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,2BAA2B,CAAC;AAErD,OAAO,EAAC,UAAU,EAAC,MAAM,wBAAwB,CAAC;AAElD,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,cAAc,CAAC,EAAE,CAAC,UAAU,KAAA,KAAK,GAAG,CAAC;IACrC,qBAAqB,CAAC,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,uBAAuB,EAAE,MAAM,CAAC;IAChC,cAAc,EAAE,CAAC,UAAU,KAAA,KAAK,GAAG,CAAC;IACpC,qBAAqB,EAAE;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAC,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACnC,OAAO,EAAE,KAAK,CAAC;IAEf,IAAI,EAAE,GAAG,CAAC;IACV,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IAEnB,SAAS,CAAC,UAAU,EAAE,MAAM,CAAwB;IACpD,SAAS,CAAC,QAAQ,CAAC,kBAAkB,QAAQ;IAC7C,SAAS,CAAC,eAAe,EAAE,YAAY,CAAC;IACxC,SAAS,CAAC,oBAAoB,EAAE,YAAY,CAAC;IAC7C,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtC,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO;gBAKhD,OAAO,EAAE,qBAAqB;IAuB1C,QAAQ,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,OAAO,KAAA;IAclC,KAAK;IAgBL,gBAAgB,CAAC,IAAI,KAAA,EAAE,UAAU,EAAE,UAAU;IAmE7C,gBAAgB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IASjC,qBAAqB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,KAAK,KAAA,EAAE,KAAK,KAAA;IAuDpD,UAAU,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAK3B,UAAU,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAS3B,QAAQ,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IASzB,SAAS,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAQ1B,WAAW,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,eAAe,UAAQ,EAAE,gBAAgB,UAAQ;IAmB/E,cAAc,CAAC,IAAI,KAAA;IAMnB,gBAAgB,CAAC,IAAI,KAAA;IAOrB,YAAY,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA,EAAE,eAAe,KAAA;IAS9C,oBAAoB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAiBrC,uBAAuB,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAI5B,kBAAkB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;IAWnC,qBAAqB,CAAC,IAAI,KAAA,EAAE,UAAU,KAAA;CAqCvC"}
@@ -16,6 +16,9 @@ exports.DEFAULT_PROPS = {
16
16
  basePath: ''
17
17
  };
18
18
  class TilesetTraverser {
19
+ traversalFinished(frameState) {
20
+ return true;
21
+ }
19
22
  // TODO nested props
20
23
  constructor(options) {
21
24
  this.lastUpdate = new Date().getTime();
@@ -37,9 +40,6 @@ class TilesetTraverser {
37
40
  // tiles does not have render content
38
41
  this.emptyTiles = {};
39
42
  }
40
- get traversalFinished() {
41
- return true;
42
- }
43
43
  // tiles should be visible
44
44
  traverse(root, frameState, options) {
45
45
  this.root = root; // for root screen space error
@@ -116,7 +116,7 @@ class TilesetTraverser {
116
116
  tile._shouldRefine = shouldRefine && parentRefines;
117
117
  }
118
118
  const newTime = new Date().getTime();
119
- if (this.traversalFinished || newTime - this.lastUpdate > this.updateDebounceTime) {
119
+ if (this.traversalFinished(frameState) || newTime - this.lastUpdate > this.updateDebounceTime) {
120
120
  this.lastUpdate = newTime;
121
121
  this.options.onTraversalEnd(frameState);
122
122
  }
package/dist/types.d.ts CHANGED
@@ -1,5 +1,34 @@
1
- export declare type BoundingRectangle = {
1
+ import { Vector3 } from '@math.gl/core';
2
+ export type BoundingRectangle = {
2
3
  width: number;
3
4
  height: number;
4
5
  };
6
+ /** Deck.gl Viewport instance type.
7
+ * We can't import it from Deck.gl to avoid circular reference */
8
+ export type Viewport = {
9
+ id: string;
10
+ cameraPosition: number[] | Vector3;
11
+ height: number;
12
+ width: number;
13
+ zoom: number;
14
+ distanceScales: {
15
+ unitsPerMeter: number[];
16
+ metersPerUnit: number[];
17
+ };
18
+ center: number[] | Vector3;
19
+ unprojectPosition: (position: number[] | Vector3) => [number, number, number];
20
+ project: (coorinates: number[] | Vector3) => number[];
21
+ };
22
+ /**
23
+ * Contain extra fields from WebMercatorViewport and FirstPersonViewport
24
+ */
25
+ export type GeospatialViewport = Viewport & {
26
+ /** @todo This field is not represented in Deck.gl viewports. Can be removed in the next version */
27
+ cameraDirection: [number, number, number];
28
+ /** @todo This field is not represented in Deck.gl viewports. Can be removed in the next version */
29
+ cameraUp: [number, number, number];
30
+ longitude: number;
31
+ latitude: number;
32
+ bearing: number;
33
+ };
5
34
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,oBAAY,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAC,MAAM,eAAe,CAAC;AAEtC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;iEACiE;AACjE,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE;QACd,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,iBAAiB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9E,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,KAAK,MAAM,EAAE,CAAC;CACvD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG;IAC1C,mGAAmG;IACnG,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,mGAAmG;IACnG,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@loaders.gl/tiles",
3
- "version": "3.3.0-alpha.1",
3
+ "version": "3.3.0-alpha.11",
4
4
  "description": "Common components for different tiles loaders.",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -33,8 +33,8 @@
33
33
  "build-bundle": "esbuild src/bundle.ts --bundle --outfile=dist/dist.min.js"
34
34
  },
35
35
  "dependencies": {
36
- "@loaders.gl/loader-utils": "3.3.0-alpha.1",
37
- "@loaders.gl/math": "3.3.0-alpha.1",
36
+ "@loaders.gl/loader-utils": "3.3.0-alpha.11",
37
+ "@loaders.gl/math": "3.3.0-alpha.11",
38
38
  "@math.gl/core": "^3.5.1",
39
39
  "@math.gl/culling": "^3.5.1",
40
40
  "@math.gl/geospatial": "^3.5.1",
@@ -44,5 +44,5 @@
44
44
  "peerDependencies": {
45
45
  "@loaders.gl/core": "^3.2.0"
46
46
  },
47
- "gitHead": "85ed2df7d17dd0d204c8bd8feb44779f70bc693b"
47
+ "gitHead": "1863a8875f63d578c0fdf5bdb3b7d6827f799db9"
48
48
  }
@@ -2,6 +2,7 @@ import {Tile3D} from '@loaders.gl/tiles';
2
2
  import {Vector3} from '@math.gl/core';
3
3
  import {CullingVolume, Plane} from '@math.gl/culling';
4
4
  import {Ellipsoid} from '@math.gl/geospatial';
5
+ import {GeospatialViewport, Viewport} from '../../types';
5
6
 
6
7
  export type FrameState = {
7
8
  camera: {
@@ -9,8 +10,8 @@ export type FrameState = {
9
10
  direction: number[];
10
11
  up: number[];
11
12
  };
12
- viewport: {[key: string]: any};
13
- topDownViewport: {[key: string]: any}; // Use it to calculate projected radius for a tile
13
+ viewport: GeospatialViewport;
14
+ topDownViewport: GeospatialViewport; // Use it to calculate projected radius for a tile
14
15
  height: number;
15
16
  cullingVolume: CullingVolume;
16
17
  frameNumber: number; // TODO: This can be the same between updates, what number is unique for between updates?
@@ -30,18 +31,15 @@ const cullingVolume = new CullingVolume([
30
31
 
31
32
  // Extracts a frame state appropriate for tile culling from a deck.gl viewport
32
33
  // TODO - this could likely be generalized and merged back into deck.gl for other culling scenarios
33
- export function getFrameState(viewport, frameNumber: number): FrameState {
34
+ export function getFrameState(viewport: GeospatialViewport, frameNumber: number): FrameState {
35
+ // Traverse and and request. Update _selectedTiles so that we know what to render.
34
36
  // Traverse and and request. Update _selectedTiles so that we know what to render.
35
37
  const {cameraDirection, cameraUp, height} = viewport;
36
38
  const {metersPerUnit} = viewport.distanceScales;
37
39
 
38
- const viewportCenterCartographic = viewport.unprojectPosition(viewport.center);
39
40
  // TODO - Ellipsoid.eastNorthUpToFixedFrame() breaks on raw array, create a Vector.
40
41
  // TODO - Ellipsoid.eastNorthUpToFixedFrame() takes a cartesian, is that intuitive?
41
- const viewportCenterCartesian = Ellipsoid.WGS84.cartographicToCartesian(
42
- viewportCenterCartographic,
43
- new Vector3()
44
- );
42
+ const viewportCenterCartesian = worldToCartesian(viewport, viewport.center);
45
43
  const enuToFixedTransform = Ellipsoid.WGS84.eastNorthUpToFixedFrame(viewportCenterCartesian);
46
44
 
47
45
  const cameraPositionCartographic = viewport.unprojectPosition(viewport.cameraPosition);
@@ -60,7 +58,7 @@ export function getFrameState(viewport, frameNumber: number): FrameState {
60
58
  enuToFixedTransform.transformAsVector(new Vector3(cameraUp).scale(metersPerUnit))
61
59
  ).normalize();
62
60
 
63
- commonSpacePlanesToWGS84(viewport, viewportCenterCartesian);
61
+ commonSpacePlanesToWGS84(viewport);
64
62
 
65
63
  const ViewportClass = viewport.constructor;
66
64
  const {longitude, latitude, width, bearing, zoom} = viewport;
@@ -131,25 +129,55 @@ export function limitSelectedTiles(
131
129
  return [selectedTiles, unselectedTiles];
132
130
  }
133
131
 
134
- function commonSpacePlanesToWGS84(viewport, viewportCenterCartesian) {
132
+ function commonSpacePlanesToWGS84(viewport) {
135
133
  // Extract frustum planes based on current view.
136
134
  const frustumPlanes = viewport.getFrustumPlanes();
135
+
136
+ // Get the near/far plane centers
137
+ const nearCenterCommon = closestPointOnPlane(frustumPlanes.near, viewport.cameraPosition);
138
+ const nearCenterCartesian = worldToCartesian(viewport, nearCenterCommon);
139
+ const cameraCartesian = worldToCartesian(viewport, viewport.cameraPosition, scratchPosition);
140
+
137
141
  let i = 0;
142
+ cullingVolume.planes[i++].fromPointNormal(
143
+ nearCenterCartesian,
144
+ scratchVector.copy(nearCenterCartesian).subtract(cameraCartesian)
145
+ );
146
+
138
147
  for (const dir in frustumPlanes) {
148
+ if (dir === 'near') {
149
+ continue; // eslint-disable-line no-continue
150
+ }
139
151
  const plane = frustumPlanes[dir];
140
- const distanceToCenter = plane.normal.dot(viewport.center);
141
- scratchPosition
142
- .copy(plane.normal)
143
- .scale(plane.distance - distanceToCenter)
144
- .add(viewport.center);
145
- const cartographicPos = viewport.unprojectPosition(scratchPosition);
146
-
147
- const cartesianPos = Ellipsoid.WGS84.cartographicToCartesian(cartographicPos, new Vector3());
152
+ const posCommon = closestPointOnPlane(plane, nearCenterCommon, scratchPosition);
153
+ const cartesianPos = worldToCartesian(viewport, posCommon, scratchPosition);
148
154
 
149
155
  cullingVolume.planes[i++].fromPointNormal(
150
156
  cartesianPos,
151
157
  // Want the normal to point into the frustum since that's what culling expects
152
- scratchVector.copy(viewportCenterCartesian).subtract(cartesianPos)
158
+ scratchVector.copy(nearCenterCartesian).subtract(cartesianPos)
153
159
  );
154
160
  }
155
161
  }
162
+
163
+ function closestPointOnPlane(
164
+ plane: {distance: number; normal: Vector3},
165
+ refPoint: [number, number, number] | Vector3,
166
+ out: Vector3 = new Vector3()
167
+ ): Vector3 {
168
+ const distanceToRef = plane.normal.dot(refPoint);
169
+ out
170
+ .copy(plane.normal)
171
+ .scale(plane.distance - distanceToRef)
172
+ .add(refPoint);
173
+ return out;
174
+ }
175
+
176
+ function worldToCartesian(
177
+ viewport: Viewport,
178
+ point: number[] | Vector3,
179
+ out: Vector3 = new Vector3()
180
+ ): Vector3 {
181
+ const cartographicPos = viewport.unprojectPosition(point);
182
+ return Ellipsoid.WGS84.cartographicToCartesian(cartographicPos, out);
183
+ }
@@ -80,7 +80,9 @@ export function getProjectedRadius(tile: Tile3D, frameState: FrameState): number
80
80
 
81
81
  // Project center vertex and border vertex and calculate projected radius of MBS
82
82
  const projectedOrigin = viewport.project([mbsLon, mbsLat, mbsZ]);
83
- const projectedMbsBorderVertex = viewport.project(sphereMbsBorderVertexCartographic);
83
+ const projectedMbsBorderVertex = viewport.project(
84
+ sphereMbsBorderVertexCartographic as [number, number, number]
85
+ );
84
86
  const projectedRadius = projectedOriginVector
85
87
  .copy(projectedOrigin)
86
88
  .subtract(projectedMbsBorderVertex)
@@ -61,6 +61,7 @@ export default class TileHeader {
61
61
  viewportIds: any[];
62
62
  transform: Matrix4;
63
63
  extensions: any;
64
+ implicitTiling?: any;
64
65
 
65
66
  // Container to store application specific data
66
67
  userData: {[key: string]: any};
@@ -205,6 +206,7 @@ export default class TileHeader {
205
206
  // TODO Cesium 3d tiles specific
206
207
  this._expireDate = null;
207
208
  this._expiredContent = null;
209
+ this.implicitTiling = null;
208
210
 
209
211
  Object.seal(this);
210
212
  }
@@ -770,8 +772,20 @@ export default class TileHeader {
770
772
  case 'i3s':
771
773
  return {
772
774
  ...this.tileset.options.i3s,
773
- tile: this.header,
774
- tileset: this.tileset.tileset,
775
+ _tileOptions: {
776
+ attributeUrls: this.header.attributeUrls,
777
+ textureUrl: this.header.textureUrl,
778
+ textureFormat: this.header.textureFormat,
779
+ textureLoaderOptions: this.header.textureLoaderOptions,
780
+ materialDefinition: this.header.materialDefinition,
781
+ isDracoGeometry: this.header.isDracoGeometry,
782
+ mbs: this.header.mbs
783
+ },
784
+ _tilesetOptions: {
785
+ store: this.tileset.tileset.store,
786
+ attributeStorageInfo: this.tileset.tileset.attributeStorageInfo,
787
+ fields: this.tileset.tileset.fields
788
+ },
775
789
  isTileHeader: false
776
790
  };
777
791
  case '3d-tiles':