@itwin/frontend-tiles 4.3.0 → 4.4.0-dev.2

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 (46) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/lib/cjs/BatchedModels.d.ts +0 -1
  3. package/lib/cjs/BatchedModels.d.ts.map +1 -1
  4. package/lib/cjs/BatchedModels.js +2 -9
  5. package/lib/cjs/BatchedModels.js.map +1 -1
  6. package/lib/cjs/BatchedSpatialTileTreeRefs.d.ts.map +1 -1
  7. package/lib/cjs/BatchedSpatialTileTreeRefs.js +60 -45
  8. package/lib/cjs/BatchedSpatialTileTreeRefs.js.map +1 -1
  9. package/lib/cjs/BatchedTileTree.d.ts +2 -0
  10. package/lib/cjs/BatchedTileTree.d.ts.map +1 -1
  11. package/lib/cjs/BatchedTileTree.js.map +1 -1
  12. package/lib/cjs/BatchedTileTreeSupplier.d.ts +2 -1
  13. package/lib/cjs/BatchedTileTreeSupplier.d.ts.map +1 -1
  14. package/lib/cjs/BatchedTileTreeSupplier.js +2 -6
  15. package/lib/cjs/BatchedTileTreeSupplier.js.map +1 -1
  16. package/lib/cjs/BatchedTilesetReader.d.ts +22 -1
  17. package/lib/cjs/BatchedTilesetReader.d.ts.map +1 -1
  18. package/lib/cjs/BatchedTilesetReader.js +18 -7
  19. package/lib/cjs/BatchedTilesetReader.js.map +1 -1
  20. package/lib/cjs/FrontendTiles.d.ts +1 -3
  21. package/lib/cjs/FrontendTiles.d.ts.map +1 -1
  22. package/lib/cjs/FrontendTiles.js +1 -3
  23. package/lib/cjs/FrontendTiles.js.map +1 -1
  24. package/lib/esm/BatchedModels.d.ts +0 -1
  25. package/lib/esm/BatchedModels.d.ts.map +1 -1
  26. package/lib/esm/BatchedModels.js +2 -9
  27. package/lib/esm/BatchedModels.js.map +1 -1
  28. package/lib/esm/BatchedSpatialTileTreeRefs.d.ts.map +1 -1
  29. package/lib/esm/BatchedSpatialTileTreeRefs.js +62 -47
  30. package/lib/esm/BatchedSpatialTileTreeRefs.js.map +1 -1
  31. package/lib/esm/BatchedTileTree.d.ts +2 -0
  32. package/lib/esm/BatchedTileTree.d.ts.map +1 -1
  33. package/lib/esm/BatchedTileTree.js.map +1 -1
  34. package/lib/esm/BatchedTileTreeSupplier.d.ts +2 -1
  35. package/lib/esm/BatchedTileTreeSupplier.d.ts.map +1 -1
  36. package/lib/esm/BatchedTileTreeSupplier.js +2 -6
  37. package/lib/esm/BatchedTileTreeSupplier.js.map +1 -1
  38. package/lib/esm/BatchedTilesetReader.d.ts +22 -1
  39. package/lib/esm/BatchedTilesetReader.d.ts.map +1 -1
  40. package/lib/esm/BatchedTilesetReader.js +17 -6
  41. package/lib/esm/BatchedTilesetReader.js.map +1 -1
  42. package/lib/esm/FrontendTiles.d.ts +1 -3
  43. package/lib/esm/FrontendTiles.d.ts.map +1 -1
  44. package/lib/esm/FrontendTiles.js +0 -2
  45. package/lib/esm/FrontendTiles.js.map +1 -1
  46. package/package.json +11 -11
package/CHANGELOG.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Change Log - @itwin/frontend-tiles
2
2
 
3
- This log was last generated on Thu, 07 Dec 2023 17:43:09 GMT and should not be manually modified.
3
+ This log was last generated on Thu, 07 Dec 2023 18:52:09 GMT and should not be manually modified.
4
4
 
5
5
  ## 4.3.0
6
6
  Thu, 07 Dec 2023 17:43:09 GMT
@@ -8,7 +8,6 @@ export declare class BatchedModels {
8
8
  private readonly _viewedModelIdPairs;
9
9
  private readonly _metadata;
10
10
  private _modelRangePromise?;
11
- readonly viewedRealityModelIds: Set<string>;
12
11
  constructor(view: SpatialViewState);
13
12
  setViewedModels(models: Set<Id64String>): void;
14
13
  views(modelId: Id64String): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedModels.d.ts","sourceRoot":"","sources":["../../src/BatchedModels.ts"],"names":[],"mappings":"AAKA,OAAO,EAAQ,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAuC,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAO7F,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAwB;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;IAClE,OAAO,CAAC,kBAAkB,CAAC,CAAgB;IAC3C,SAAgB,qBAAqB,cAAyB;gBAE3C,IAAI,EAAE,gBAAgB;IAKlC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI;IA4C9C,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO;IAInC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAIvD,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAGxC"}
1
+ {"version":3,"file":"BatchedModels.d.ts","sourceRoot":"","sources":["../../src/BatchedModels.ts"],"names":[],"mappings":"AAKA,OAAO,EAAQ,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAoB,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAM1E,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAwB;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwC;IAClE,OAAO,CAAC,kBAAkB,CAAC,CAAgB;gBAExB,IAAI,EAAE,gBAAgB;IAKlC,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI;IAsC9C,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO;IAInC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAIvD,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAGxC"}
@@ -7,13 +7,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.BatchedModels = void 0;
8
8
  const core_bentley_1 = require("@itwin/core-bentley");
9
9
  const core_geometry_1 = require("@itwin/core-geometry");
10
- const core_frontend_1 = require("@itwin/core-frontend");
11
10
  class BatchedModels {
12
11
  constructor(view) {
13
12
  this._viewedExtents = new core_geometry_1.Range3d();
14
13
  this._viewedModelIdPairs = new core_bentley_1.Id64.Uint32Set();
15
14
  this._metadata = new Map();
16
- this.viewedRealityModelIds = new Set();
17
15
  this._iModel = view.iModel;
18
16
  this.setViewedModels(view.modelSelector.models);
19
17
  }
@@ -22,17 +20,12 @@ class BatchedModels {
22
20
  this._viewedModelIdPairs.clear();
23
21
  this._viewedModelIdPairs.addIds(models);
24
22
  this._viewedExtents.setNull();
25
- this.viewedRealityModelIds.clear();
26
23
  this._modelRangePromise = undefined;
27
24
  const rangeQueryModels = [];
28
25
  for (const modelId of models) {
29
26
  let metadata = this._metadata.get(modelId);
30
- if (!metadata) {
31
- const model = this._iModel.models.getLoaded(modelId);
32
- this._metadata.set(modelId, metadata = { isRealityModel: model instanceof core_frontend_1.SpatialModelState && model.isRealityModel });
33
- }
34
- if (metadata.isRealityModel)
35
- this.viewedRealityModelIds.add(modelId);
27
+ if (!metadata)
28
+ this._metadata.set(modelId, metadata = {});
36
29
  if (undefined === metadata.extents)
37
30
  rangeQueryModels.push(modelId);
38
31
  else
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedModels.js","sourceRoot":"","sources":["../../src/BatchedModels.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { ModelExtentsProps } from \"@itwin/core-common\";\r\nimport { IModelConnection, SpatialModelState, SpatialViewState } from \"@itwin/core-frontend\";\r\n\r\ninterface ModelMetadata {\r\n extents?: Range3d;\r\n isRealityModel: boolean;\r\n}\r\n\r\nexport class BatchedModels {\r\n private readonly _iModel: IModelConnection;\r\n private _viewedModels!: Set<Id64String>;\r\n private readonly _viewedExtents = new Range3d();\r\n private readonly _viewedModelIdPairs = new Id64.Uint32Set();\r\n private readonly _metadata = new Map<Id64String, ModelMetadata>();\r\n private _modelRangePromise?: Promise<void>;\r\n public readonly viewedRealityModelIds = new Set<Id64String>();\r\n\r\n public constructor(view: SpatialViewState) {\r\n this._iModel = view.iModel;\r\n this.setViewedModels(view.modelSelector.models);\r\n }\r\n\r\n public setViewedModels(models: Set<Id64String>): void {\r\n this._viewedModels = models;\r\n this._viewedModelIdPairs.clear();\r\n this._viewedModelIdPairs.addIds(models);\r\n this._viewedExtents.setNull();\r\n this.viewedRealityModelIds.clear();\r\n\r\n this._modelRangePromise = undefined;\r\n const rangeQueryModels: Id64String[] = [];\r\n\r\n for (const modelId of models) {\r\n let metadata = this._metadata.get(modelId);\r\n if (!metadata) {\r\n const model = this._iModel.models.getLoaded(modelId);\r\n this._metadata.set(modelId, metadata = { isRealityModel: model instanceof SpatialModelState && model.isRealityModel });\r\n }\r\n\r\n if (metadata.isRealityModel)\r\n this.viewedRealityModelIds.add(modelId);\r\n\r\n if (undefined === metadata.extents)\r\n rangeQueryModels.push(modelId);\r\n else\r\n this._viewedExtents.extendRange(metadata.extents);\r\n }\r\n\r\n if (rangeQueryModels.length === 0)\r\n return;\r\n\r\n const modelRangePromise = this._modelRangePromise = this._iModel.models.queryExtents(rangeQueryModels).then((extents: ModelExtentsProps[]) => {\r\n if (modelRangePromise !== this._modelRangePromise)\r\n return;\r\n\r\n this._modelRangePromise = undefined;\r\n for (const extent of extents) {\r\n const metadata = this._metadata.get(extent.id);\r\n if (metadata) {\r\n metadata.extents = Range3d.fromJSON(extent.extents);\r\n this._viewedExtents.extendRange(metadata.extents);\r\n }\r\n }\r\n }).catch(() => { });\r\n }\r\n\r\n public views(modelId: Id64String): boolean {\r\n return this._viewedModels.has(modelId);\r\n }\r\n\r\n public isViewed(modelIdLo: number, modelIdHi: number): boolean {\r\n return this._viewedModelIdPairs.has(modelIdLo, modelIdHi);\r\n }\r\n\r\n public unionRange(range: Range3d): void {\r\n range.extendRange(this._viewedExtents);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"BatchedModels.js","sourceRoot":"","sources":["../../src/BatchedModels.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,sDAAuD;AACvD,wDAA+C;AAQ/C,MAAa,aAAa;IAQxB,YAAmB,IAAsB;QALxB,mBAAc,GAAG,IAAI,uBAAO,EAAE,CAAC;QAC/B,wBAAmB,GAAG,IAAI,mBAAI,CAAC,SAAS,EAAE,CAAC;QAC3C,cAAS,GAAG,IAAI,GAAG,EAA6B,CAAC;QAIhE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAEM,eAAe,CAAC,MAAuB;QAC5C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAE9B,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACpC,MAAM,gBAAgB,GAAiB,EAAE,CAAC;QAE1C,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE;YAC5B,IAAI,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,CAAC,QAAQ;gBACX,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,GAAG,EAAG,CAAC,CAAC;YAE9C,IAAI,SAAS,KAAK,QAAQ,CAAC,OAAO;gBAChC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;gBAE/B,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SACrD;QAED,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAC/B,OAAO;QAET,MAAM,iBAAiB,GAAG,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC,OAA4B,EAAE,EAAE;YAC3I,IAAI,iBAAiB,KAAK,IAAI,CAAC,kBAAkB;gBAC/C,OAAO;YAET,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;YACpC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC/C,IAAI,QAAQ,EAAE;oBACZ,QAAQ,CAAC,OAAO,GAAG,uBAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACpD,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;iBACnD;aACF;QACH,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,OAAmB;QAC9B,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAEM,QAAQ,CAAC,SAAiB,EAAE,SAAiB;QAClD,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC;IAEM,UAAU,CAAC,KAAc;QAC9B,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC;CACF;AA9DD,sCA8DC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { ModelExtentsProps } from \"@itwin/core-common\";\r\nimport { IModelConnection, SpatialViewState } from \"@itwin/core-frontend\";\r\n\r\ninterface ModelMetadata {\r\n extents?: Range3d;\r\n}\r\n\r\nexport class BatchedModels {\r\n private readonly _iModel: IModelConnection;\r\n private _viewedModels!: Set<Id64String>;\r\n private readonly _viewedExtents = new Range3d();\r\n private readonly _viewedModelIdPairs = new Id64.Uint32Set();\r\n private readonly _metadata = new Map<Id64String, ModelMetadata>();\r\n private _modelRangePromise?: Promise<void>;\r\n\r\n public constructor(view: SpatialViewState) {\r\n this._iModel = view.iModel;\r\n this.setViewedModels(view.modelSelector.models);\r\n }\r\n\r\n public setViewedModels(models: Set<Id64String>): void {\r\n this._viewedModels = models;\r\n this._viewedModelIdPairs.clear();\r\n this._viewedModelIdPairs.addIds(models);\r\n this._viewedExtents.setNull();\r\n\r\n this._modelRangePromise = undefined;\r\n const rangeQueryModels: Id64String[] = [];\r\n\r\n for (const modelId of models) {\r\n let metadata = this._metadata.get(modelId);\r\n if (!metadata)\r\n this._metadata.set(modelId, metadata = { });\r\n\r\n if (undefined === metadata.extents)\r\n rangeQueryModels.push(modelId);\r\n else\r\n this._viewedExtents.extendRange(metadata.extents);\r\n }\r\n\r\n if (rangeQueryModels.length === 0)\r\n return;\r\n\r\n const modelRangePromise = this._modelRangePromise = this._iModel.models.queryExtents(rangeQueryModels).then((extents: ModelExtentsProps[]) => {\r\n if (modelRangePromise !== this._modelRangePromise)\r\n return;\r\n\r\n this._modelRangePromise = undefined;\r\n for (const extent of extents) {\r\n const metadata = this._metadata.get(extent.id);\r\n if (metadata) {\r\n metadata.extents = Range3d.fromJSON(extent.extents);\r\n this._viewedExtents.extendRange(metadata.extents);\r\n }\r\n }\r\n }).catch(() => { });\r\n }\r\n\r\n public views(modelId: Id64String): boolean {\r\n return this._viewedModels.has(modelId);\r\n }\r\n\r\n public isViewed(modelIdLo: number, modelIdHi: number): boolean {\r\n return this._viewedModelIdPairs.has(modelIdLo, modelIdHi);\r\n }\r\n\r\n public unionRange(range: Range3d): void {\r\n range.extendRange(this._viewedExtents);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedSpatialTileTreeRefs.d.ts","sourceRoot":"","sources":["../../src/BatchedSpatialTileTreeRefs.ts"],"names":[],"mappings":"AAOA,OAAO,EACsD,yBAAyB,EAAE,gBAAgB,EACvG,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,4BAA4B,EAA2C,MAAM,iBAAiB,CAAC;AAiNxG,gBAAgB;AAChB,wBAAgB,sCAAsC,CAAC,IAAI,EAAE,gBAAgB,EAAE,cAAc,EAAE,4BAA4B,GAAG,yBAAyB,CAyBtJ"}
1
+ {"version":3,"file":"BatchedSpatialTileTreeRefs.d.ts","sourceRoot":"","sources":["../../src/BatchedSpatialTileTreeRefs.ts"],"names":[],"mappings":"AAOA,OAAO,EACoE,yBAAyB,EAAE,gBAAgB,EAErH,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAmO/D,gBAAgB;AAChB,wBAAgB,sCAAsC,CAAC,IAAI,EAAE,gBAAgB,EAAE,cAAc,EAAE,4BAA4B,GAAG,yBAAyB,CA0BtJ"}
@@ -10,24 +10,37 @@ const core_frontend_1 = require("@itwin/core-frontend");
10
10
  const BatchedTileTreeReference_1 = require("./BatchedTileTreeReference");
11
11
  const BatchedTileTreeSupplier_1 = require("./BatchedTileTreeSupplier");
12
12
  const BatchedModels_1 = require("./BatchedModels");
13
- const FrontendTiles_1 = require("./FrontendTiles");
13
+ const BatchedTilesetReader_1 = require("./BatchedTilesetReader");
14
+ const LoggerCategory_1 = require("./LoggerCategory");
14
15
  // Obtains tiles pre-published by mesh export service.
15
16
  class BatchedSpatialTileTreeReferences {
16
- constructor(baseUrl, view) {
17
+ constructor(spec, view) {
17
18
  this._animatedRefs = [];
18
- this._realityTreeRefs = new Map();
19
19
  this._view = view;
20
20
  this._models = new BatchedModels_1.BatchedModels(view);
21
21
  const script = view.displayStyle.scheduleScript;
22
22
  this._currentScript = script?.requiresBatching ? script : undefined;
23
- this.load(baseUrl, view.iModel);
23
+ const includedModels = spec.props.extensions?.BENTLEY_BatchedTileSet?.includedModels;
24
+ this._excludedRefs = includedModels ? (0, core_frontend_1.createSpatialTileTreeReferences)(view, new Set(includedModels)) : {
25
+ update: () => { },
26
+ setDeactivated: () => { },
27
+ attachToViewport: () => { },
28
+ detachFromViewport: () => { },
29
+ [Symbol.iterator]: () => {
30
+ return {
31
+ next: () => {
32
+ return { done: true, value: undefined };
33
+ },
34
+ };
35
+ },
36
+ };
37
+ this.load(spec, view.iModel);
24
38
  (0, core_bentley_1.assert)(undefined !== this._primaryRef);
25
39
  }
26
- load(baseUrl, iModel) {
27
- const treeOwner = (0, BatchedTileTreeSupplier_1.getBatchedTileTreeOwner)(iModel, { baseUrl, script: this._currentScript });
40
+ load(spec, iModel) {
41
+ const treeOwner = (0, BatchedTileTreeSupplier_1.getBatchedTileTreeOwner)(iModel, { spec, script: this._currentScript });
28
42
  this._primaryRef = new BatchedTileTreeReference_1.PrimaryBatchedTileTreeReference(treeOwner, this._models);
29
43
  this.populateAnimatedReferences(treeOwner);
30
- this.populateRealityModels();
31
44
  const onScriptChanged = (newScript) => {
32
45
  if (!newScript?.requiresBatching)
33
46
  newScript = undefined;
@@ -35,7 +48,7 @@ class BatchedSpatialTileTreeReferences {
35
48
  this._currentScript = newScript;
36
49
  if (newScript !== currentScript)
37
50
  if (!newScript || !currentScript || !newScript.equals(currentScript))
38
- this.load(baseUrl, iModel);
51
+ this.load(spec, iModel);
39
52
  };
40
53
  let removeScriptChangedListener = this._view.displayStyle.onScheduleScriptChanged.addListener((newScript) => onScriptChanged(newScript));
41
54
  this._view.onDisplayStyleChanged.addListener((newStyle) => {
@@ -48,8 +61,8 @@ class BatchedSpatialTileTreeReferences {
48
61
  yield this._primaryRef;
49
62
  for (const animatedRef of this._animatedRefs)
50
63
  yield animatedRef;
51
- for (const realityTreeRef of this._realityTreeRefs.values())
52
- yield realityTreeRef;
64
+ for (const excludedRef of this._excludedRefs)
65
+ yield excludedRef;
53
66
  }
54
67
  populateAnimatedReferences(treeOwner) {
55
68
  this._animatedRefs.length = 0;
@@ -68,33 +81,19 @@ class BatchedSpatialTileTreeReferences {
68
81
  }
69
82
  }
70
83
  }
71
- populateRealityModels() {
72
- const prevRefs = this._realityTreeRefs;
73
- this._realityTreeRefs = new Map();
74
- for (const modelId of this._models.viewedRealityModelIds) {
75
- let ref = prevRefs.get(modelId);
76
- if (!ref) {
77
- const model = this._view.iModel.models.getLoaded(modelId);
78
- if (model && model instanceof core_frontend_1.SpatialModelState) {
79
- (0, core_bentley_1.assert)(model.isRealityModel);
80
- ref = model.createTileTreeReference(this._view);
81
- }
82
- }
83
- if (ref)
84
- this._realityTreeRefs.set(modelId, ref);
85
- }
86
- }
87
84
  update() {
85
+ this._excludedRefs.update();
88
86
  this._models.setViewedModels(this._view.modelSelector.models);
89
- this.populateRealityModels();
90
87
  if (this._onModelSelectorChanged)
91
88
  this._onModelSelectorChanged();
92
89
  }
93
90
  attachToViewport(args) {
94
91
  this._onModelSelectorChanged = () => args.invalidateSymbologyOverrides();
92
+ this._excludedRefs.attachToViewport(args);
95
93
  }
96
94
  detachFromViewport() {
97
95
  this._onModelSelectorChanged = undefined;
96
+ this._excludedRefs.detachFromViewport();
98
97
  }
99
98
  setDeactivated() {
100
99
  // Used for debugging. Unimplemented here.
@@ -126,17 +125,17 @@ class ProxyTileTreeReference extends core_frontend_1.TileTreeReference {
126
125
  // Serves as a placeholder while we asynchronously obtain the base URL for a pre-published tileset (or asynchronously determine
127
126
  // that no such tileset exists).
128
127
  class ProxySpatialTileTreeReferences {
129
- constructor(view, getBaseUrl) {
128
+ constructor(view, getSpec) {
130
129
  this._proxyRef = new ProxyTileTreeReference(view.iModel);
131
- getBaseUrl.then((url) => {
132
- if (url) {
133
- this.setTreeRefs(new BatchedSpatialTileTreeReferences(url, view));
130
+ getSpec.then((spec) => {
131
+ if (spec) {
132
+ this.setTreeRefs(new BatchedSpatialTileTreeReferences(spec, view));
134
133
  }
135
134
  else {
136
- this.setTreeRefs((0, FrontendTiles_1.createFallbackSpatialTileTreeReferences)(view));
135
+ this.setTreeRefs((0, core_frontend_1.createSpatialTileTreeReferences)(view));
137
136
  }
138
137
  }).catch(() => {
139
- this.setTreeRefs((0, FrontendTiles_1.createFallbackSpatialTileTreeReferences)(view));
138
+ this.setTreeRefs((0, core_frontend_1.createSpatialTileTreeReferences)(view));
140
139
  });
141
140
  }
142
141
  setTreeRefs(refs) {
@@ -173,26 +172,42 @@ class ProxySpatialTileTreeReferences {
173
172
  }
174
173
  }
175
174
  }
176
- const iModelToBaseUrl = new Map();
175
+ const iModelToTilesetSpec = new Map();
176
+ async function fetchTilesetSpec(iModel, computeBaseUrl) {
177
+ try {
178
+ const baseUrl = await computeBaseUrl(iModel);
179
+ if (undefined === baseUrl)
180
+ return null;
181
+ const url = new URL("tileset.json", baseUrl);
182
+ url.search = baseUrl.search;
183
+ const response = await fetch(url.toString());
184
+ const json = await response.json();
185
+ return BatchedTilesetReader_1.BatchedTilesetSpec.create(baseUrl, json);
186
+ }
187
+ catch (err) {
188
+ core_bentley_1.Logger.logException(LoggerCategory_1.loggerCategory, err);
189
+ return null;
190
+ }
191
+ }
177
192
  /** @internal */
178
193
  function createBatchedSpatialTileTreeReferences(view, computeBaseUrl) {
179
194
  const iModel = view.iModel;
180
- let entry = iModelToBaseUrl.get(iModel);
195
+ let entry = iModelToTilesetSpec.get(iModel);
181
196
  if (undefined === entry) {
182
- const promise = computeBaseUrl(iModel);
183
- iModelToBaseUrl.set(iModel, entry = promise);
184
- iModel.onClose.addOnce(() => iModelToBaseUrl.delete(iModel));
185
- promise.then((url) => {
186
- if (iModelToBaseUrl.has(iModel))
187
- iModelToBaseUrl.set(iModel, url ?? null);
197
+ const promise = entry = fetchTilesetSpec(iModel, computeBaseUrl);
198
+ iModelToTilesetSpec.set(iModel, entry);
199
+ iModel.onClose.addOnce(() => iModelToTilesetSpec.delete(iModel));
200
+ promise.then((spec) => {
201
+ if (iModelToTilesetSpec.has(iModel))
202
+ iModelToTilesetSpec.set(iModel, spec);
188
203
  }).catch(() => {
189
- if (iModelToBaseUrl.has(iModel))
190
- iModelToBaseUrl.set(iModel, null);
204
+ if (iModelToTilesetSpec.has(iModel))
205
+ iModelToTilesetSpec.set(iModel, null);
191
206
  });
192
207
  }
193
208
  if (null === entry) {
194
- // No tileset exists for this iModel - use default tile generation instead.
195
- return (0, FrontendTiles_1.createFallbackSpatialTileTreeReferences)(view);
209
+ // No tileset could be obtained for this iModel - use default tile generation instead.
210
+ return (0, core_frontend_1.createSpatialTileTreeReferences)(view);
196
211
  }
197
212
  if (entry instanceof Promise)
198
213
  return new ProxySpatialTileTreeReferences(view, entry);
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedSpatialTileTreeRefs.js","sourceRoot":"","sources":["../../src/BatchedSpatialTileTreeRefs.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, Id64String } from \"@itwin/core-bentley\";\r\nimport { RenderSchedule } from \"@itwin/core-common\";\r\nimport {\r\n AttachToViewportArgs, IModelConnection, SpatialModelState, SpatialTileTreeReferences, SpatialViewState, TileTreeLoadStatus, TileTreeOwner, TileTreeReference,\r\n} from \"@itwin/core-frontend\";\r\nimport { AnimatedBatchedTileTreeReference, PrimaryBatchedTileTreeReference } from \"./BatchedTileTreeReference\";\r\nimport { getBatchedTileTreeOwner } from \"./BatchedTileTreeSupplier\";\r\nimport { BatchedModels } from \"./BatchedModels\";\r\nimport { ComputeSpatialTilesetBaseUrl, createFallbackSpatialTileTreeReferences } from \"./FrontendTiles\";\r\n\r\n// Obtains tiles pre-published by mesh export service.\r\nclass BatchedSpatialTileTreeReferences implements SpatialTileTreeReferences {\r\n private readonly _view: SpatialViewState;\r\n private readonly _models: BatchedModels;\r\n private _currentScript?: RenderSchedule.Script;\r\n private _primaryRef!: PrimaryBatchedTileTreeReference;\r\n private readonly _animatedRefs: AnimatedBatchedTileTreeReference[] = [];\r\n private _realityTreeRefs = new Map<Id64String, TileTreeReference>();\r\n private _onModelSelectorChanged?: () => void;\r\n\r\n public constructor(baseUrl: URL, view: SpatialViewState) {\r\n this._view = view;\r\n this._models = new BatchedModels(view);\r\n\r\n const script = view.displayStyle.scheduleScript;\r\n this._currentScript = script?.requiresBatching ? script : undefined;\r\n\r\n this.load(baseUrl, view.iModel);\r\n\r\n assert(undefined !== this._primaryRef);\r\n }\r\n\r\n private load(baseUrl: URL, iModel: IModelConnection): void {\r\n const treeOwner = getBatchedTileTreeOwner(iModel, { baseUrl, script: this._currentScript });\r\n this._primaryRef = new PrimaryBatchedTileTreeReference(treeOwner, this._models);\r\n\r\n this.populateAnimatedReferences(treeOwner);\r\n this.populateRealityModels();\r\n\r\n const onScriptChanged = (newScript: RenderSchedule.Script | undefined) => {\r\n if (!newScript?.requiresBatching)\r\n newScript = undefined;\r\n\r\n const currentScript = this._currentScript;\r\n this._currentScript = newScript;\r\n\r\n if (newScript !== currentScript)\r\n if (!newScript || !currentScript || !newScript.equals(currentScript))\r\n this.load(baseUrl, iModel);\r\n };\r\n\r\n let removeScriptChangedListener = this._view.displayStyle.onScheduleScriptChanged.addListener((newScript) => onScriptChanged(newScript));\r\n this._view.onDisplayStyleChanged.addListener((newStyle) => {\r\n removeScriptChangedListener();\r\n onScriptChanged(newStyle.scheduleScript);\r\n removeScriptChangedListener = this._view.displayStyle.onScheduleScriptChanged.addListener((newScript) => onScriptChanged(newScript));\r\n });\r\n }\r\n\r\n public *[Symbol.iterator](): Iterator<TileTreeReference> {\r\n yield this._primaryRef;\r\n\r\n for (const animatedRef of this._animatedRefs)\r\n yield animatedRef;\r\n\r\n for (const realityTreeRef of this._realityTreeRefs.values())\r\n yield realityTreeRef;\r\n }\r\n\r\n private populateAnimatedReferences(treeOwner: TileTreeOwner): void {\r\n this._animatedRefs.length = 0;\r\n const script = this._currentScript;\r\n if (!script)\r\n return;\r\n\r\n const getCurrentTimePoint = () => this._view.displayStyle.settings.timePoint ?? script.duration.low;\r\n for (const timeline of script.modelTimelines) {\r\n const nodeIds = timeline.transformBatchIds;\r\n for (const nodeId of nodeIds) {\r\n this._animatedRefs.push(new AnimatedBatchedTileTreeReference(treeOwner, {\r\n timeline,\r\n nodeId,\r\n getCurrentTimePoint,\r\n }));\r\n }\r\n }\r\n }\r\n\r\n private populateRealityModels(): void {\r\n const prevRefs = this._realityTreeRefs;\r\n this._realityTreeRefs = new Map<Id64String, TileTreeReference>();\r\n for (const modelId of this._models.viewedRealityModelIds) {\r\n let ref = prevRefs.get(modelId);\r\n if (!ref) {\r\n const model = this._view.iModel.models.getLoaded(modelId);\r\n if (model && model instanceof SpatialModelState) {\r\n assert(model.isRealityModel);\r\n ref = model.createTileTreeReference(this._view);\r\n }\r\n }\r\n\r\n if (ref)\r\n this._realityTreeRefs.set(modelId, ref);\r\n }\r\n }\r\n\r\n public update(): void {\r\n this._models.setViewedModels(this._view.modelSelector.models);\r\n this.populateRealityModels();\r\n if (this._onModelSelectorChanged)\r\n this._onModelSelectorChanged();\r\n }\r\n\r\n public attachToViewport(args: AttachToViewportArgs): void {\r\n this._onModelSelectorChanged = () => args.invalidateSymbologyOverrides();\r\n }\r\n\r\n public detachFromViewport(): void {\r\n this._onModelSelectorChanged = undefined;\r\n }\r\n\r\n public setDeactivated(): void {\r\n // Used for debugging. Unimplemented here.\r\n }\r\n}\r\n\r\n// A placeholder used by [[ProxySpatialTileTreeReferences]] until asynchronous loading completes.\r\n// It provides a TileTreeOwner that never loads a tile tree.\r\n// This ensures that [ViewState.areAllTileTreesLoaded]($frontend) will not return `true` while we are loading.\r\nclass ProxyTileTreeReference extends TileTreeReference {\r\n private readonly _treeOwner: TileTreeOwner;\r\n\r\n public constructor(iModel: IModelConnection) {\r\n super();\r\n this._treeOwner = {\r\n iModel,\r\n tileTree: undefined,\r\n loadStatus: TileTreeLoadStatus.NotLoaded,\r\n load: () => undefined,\r\n dispose: () => { },\r\n loadTree: async () => Promise.resolve(undefined),\r\n };\r\n }\r\n\r\n public override get treeOwner() {\r\n return this._treeOwner;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override get _isLoadingComplete() {\r\n return false;\r\n }\r\n}\r\n\r\n// Serves as a placeholder while we asynchronously obtain the base URL for a pre-published tileset (or asynchronously determine\r\n// that no such tileset exists).\r\nclass ProxySpatialTileTreeReferences implements SpatialTileTreeReferences {\r\n // Once async loading completes, all methods will be forwarded to this implementation.\r\n private _impl?: SpatialTileTreeReferences;\r\n private readonly _proxyRef: ProxyTileTreeReference;\r\n // Retained if attachToViewport is called while we are still loading; and reset if detachFromViewport is called while loading.\r\n private _attachArgs?: AttachToViewportArgs;\r\n\r\n public constructor(view: SpatialViewState, getBaseUrl: Promise<URL | undefined>) {\r\n this._proxyRef = new ProxyTileTreeReference(view.iModel);\r\n getBaseUrl.then((url: URL | undefined) => {\r\n if (url) {\r\n this.setTreeRefs(new BatchedSpatialTileTreeReferences(url, view));\r\n } else {\r\n this.setTreeRefs(createFallbackSpatialTileTreeReferences(view));\r\n }\r\n }).catch(() => {\r\n this.setTreeRefs(createFallbackSpatialTileTreeReferences(view));\r\n });\r\n }\r\n\r\n private setTreeRefs(refs: SpatialTileTreeReferences): void {\r\n this._impl = refs;\r\n if (this._attachArgs) {\r\n this._impl.attachToViewport(this._attachArgs);\r\n this._attachArgs.invalidateSymbologyOverrides();\r\n this._attachArgs = undefined;\r\n }\r\n }\r\n\r\n public update(): void {\r\n this._impl?.update();\r\n }\r\n\r\n public attachToViewport(args: AttachToViewportArgs): void {\r\n if (this._impl)\r\n this._impl.attachToViewport(args);\r\n else\r\n this._attachArgs = args;\r\n }\r\n\r\n public detachFromViewport(): void {\r\n if (this._impl)\r\n this._impl.detachFromViewport();\r\n else\r\n this._attachArgs = undefined;\r\n }\r\n\r\n public setDeactivated(): void { }\r\n\r\n public *[Symbol.iterator](): Iterator<TileTreeReference> {\r\n if (this._impl) {\r\n for (const ref of this._impl)\r\n yield ref;\r\n } else {\r\n yield this._proxyRef;\r\n }\r\n }\r\n}\r\n\r\nconst iModelToBaseUrl = new Map<IModelConnection, URL | null | Promise<URL | undefined>>();\r\n\r\n/** @internal */\r\nexport function createBatchedSpatialTileTreeReferences(view: SpatialViewState, computeBaseUrl: ComputeSpatialTilesetBaseUrl): SpatialTileTreeReferences {\r\n const iModel = view.iModel;\r\n let entry = iModelToBaseUrl.get(iModel);\r\n if (undefined === entry) {\r\n const promise = computeBaseUrl(iModel);\r\n iModelToBaseUrl.set(iModel, entry = promise);\r\n iModel.onClose.addOnce(() => iModelToBaseUrl.delete(iModel));\r\n promise.then((url: URL | undefined) => {\r\n if (iModelToBaseUrl.has(iModel))\r\n iModelToBaseUrl.set(iModel, url ?? null);\r\n }).catch(() => {\r\n if (iModelToBaseUrl.has(iModel))\r\n iModelToBaseUrl.set(iModel, null);\r\n });\r\n }\r\n\r\n if (null === entry) {\r\n // No tileset exists for this iModel - use default tile generation instead.\r\n return createFallbackSpatialTileTreeReferences(view);\r\n }\r\n\r\n if (entry instanceof Promise)\r\n return new ProxySpatialTileTreeReferences(view, entry);\r\n\r\n return new BatchedSpatialTileTreeReferences(entry, view);\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"BatchedSpatialTileTreeRefs.js","sourceRoot":"","sources":["../../src/BatchedSpatialTileTreeRefs.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, Logger } from \"@itwin/core-bentley\";\r\nimport { RenderSchedule } from \"@itwin/core-common\";\r\nimport {\r\n AttachToViewportArgs, createSpatialTileTreeReferences, IModelConnection, SpatialTileTreeReferences, SpatialViewState,\r\n TileTreeLoadStatus, TileTreeOwner, TileTreeReference,\r\n} from \"@itwin/core-frontend\";\r\nimport { AnimatedBatchedTileTreeReference, PrimaryBatchedTileTreeReference } from \"./BatchedTileTreeReference\";\r\nimport { getBatchedTileTreeOwner } from \"./BatchedTileTreeSupplier\";\r\nimport { BatchedModels } from \"./BatchedModels\";\r\nimport { ComputeSpatialTilesetBaseUrl } from \"./FrontendTiles\";\r\nimport { BatchedTilesetSpec } from \"./BatchedTilesetReader\";\r\nimport { loggerCategory } from \"./LoggerCategory\";\r\n\r\n// Obtains tiles pre-published by mesh export service.\r\nclass BatchedSpatialTileTreeReferences implements SpatialTileTreeReferences {\r\n private readonly _view: SpatialViewState;\r\n private readonly _models: BatchedModels;\r\n private _currentScript?: RenderSchedule.Script;\r\n private _primaryRef!: PrimaryBatchedTileTreeReference;\r\n private readonly _animatedRefs: AnimatedBatchedTileTreeReference[] = [];\r\n private _onModelSelectorChanged?: () => void;\r\n /** Provides tile trees for models that are not included in the batched tile set. */\r\n private readonly _excludedRefs: SpatialTileTreeReferences;\r\n\r\n public constructor(spec: BatchedTilesetSpec, view: SpatialViewState) {\r\n this._view = view;\r\n this._models = new BatchedModels(view);\r\n\r\n const script = view.displayStyle.scheduleScript;\r\n this._currentScript = script?.requiresBatching ? script : undefined;\r\n\r\n const includedModels = spec.props.extensions?.BENTLEY_BatchedTileSet?.includedModels;\r\n this._excludedRefs = includedModels ? createSpatialTileTreeReferences(view, new Set(includedModels)) : {\r\n update: () => { },\r\n setDeactivated: () => { },\r\n attachToViewport: () => { },\r\n detachFromViewport: () => { },\r\n [Symbol.iterator]: () => {\r\n return {\r\n next: () => {\r\n return { done: true, value: undefined };\r\n },\r\n };\r\n },\r\n };\r\n\r\n this.load(spec, view.iModel);\r\n\r\n assert(undefined !== this._primaryRef);\r\n }\r\n\r\n private load(spec: BatchedTilesetSpec, iModel: IModelConnection): void {\r\n const treeOwner = getBatchedTileTreeOwner(iModel, { spec, script: this._currentScript });\r\n this._primaryRef = new PrimaryBatchedTileTreeReference(treeOwner, this._models);\r\n\r\n this.populateAnimatedReferences(treeOwner);\r\n\r\n const onScriptChanged = (newScript: RenderSchedule.Script | undefined) => {\r\n if (!newScript?.requiresBatching)\r\n newScript = undefined;\r\n\r\n const currentScript = this._currentScript;\r\n this._currentScript = newScript;\r\n\r\n if (newScript !== currentScript)\r\n if (!newScript || !currentScript || !newScript.equals(currentScript))\r\n this.load(spec, iModel);\r\n };\r\n\r\n let removeScriptChangedListener = this._view.displayStyle.onScheduleScriptChanged.addListener((newScript) => onScriptChanged(newScript));\r\n this._view.onDisplayStyleChanged.addListener((newStyle) => {\r\n removeScriptChangedListener();\r\n onScriptChanged(newStyle.scheduleScript);\r\n removeScriptChangedListener = this._view.displayStyle.onScheduleScriptChanged.addListener((newScript) => onScriptChanged(newScript));\r\n });\r\n }\r\n\r\n public *[Symbol.iterator](): Iterator<TileTreeReference> {\r\n yield this._primaryRef;\r\n\r\n for (const animatedRef of this._animatedRefs)\r\n yield animatedRef;\r\n\r\n for (const excludedRef of this._excludedRefs)\r\n yield excludedRef;\r\n }\r\n\r\n private populateAnimatedReferences(treeOwner: TileTreeOwner): void {\r\n this._animatedRefs.length = 0;\r\n const script = this._currentScript;\r\n if (!script)\r\n return;\r\n\r\n const getCurrentTimePoint = () => this._view.displayStyle.settings.timePoint ?? script.duration.low;\r\n for (const timeline of script.modelTimelines) {\r\n const nodeIds = timeline.transformBatchIds;\r\n for (const nodeId of nodeIds) {\r\n this._animatedRefs.push(new AnimatedBatchedTileTreeReference(treeOwner, {\r\n timeline,\r\n nodeId,\r\n getCurrentTimePoint,\r\n }));\r\n }\r\n }\r\n }\r\n\r\n public update(): void {\r\n this._excludedRefs.update();\r\n this._models.setViewedModels(this._view.modelSelector.models);\r\n if (this._onModelSelectorChanged)\r\n this._onModelSelectorChanged();\r\n }\r\n\r\n public attachToViewport(args: AttachToViewportArgs): void {\r\n this._onModelSelectorChanged = () => args.invalidateSymbologyOverrides();\r\n this._excludedRefs.attachToViewport(args);\r\n }\r\n\r\n public detachFromViewport(): void {\r\n this._onModelSelectorChanged = undefined;\r\n this._excludedRefs.detachFromViewport();\r\n }\r\n\r\n public setDeactivated(): void {\r\n // Used for debugging. Unimplemented here.\r\n }\r\n}\r\n\r\n// A placeholder used by [[ProxySpatialTileTreeReferences]] until asynchronous loading completes.\r\n// It provides a TileTreeOwner that never loads a tile tree.\r\n// This ensures that [ViewState.areAllTileTreesLoaded]($frontend) will not return `true` while we are loading.\r\nclass ProxyTileTreeReference extends TileTreeReference {\r\n private readonly _treeOwner: TileTreeOwner;\r\n\r\n public constructor(iModel: IModelConnection) {\r\n super();\r\n this._treeOwner = {\r\n iModel,\r\n tileTree: undefined,\r\n loadStatus: TileTreeLoadStatus.NotLoaded,\r\n load: () => undefined,\r\n dispose: () => { },\r\n loadTree: async () => Promise.resolve(undefined),\r\n };\r\n }\r\n\r\n public override get treeOwner() {\r\n return this._treeOwner;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override get _isLoadingComplete() {\r\n return false;\r\n }\r\n}\r\n\r\n// Serves as a placeholder while we asynchronously obtain the base URL for a pre-published tileset (or asynchronously determine\r\n// that no such tileset exists).\r\nclass ProxySpatialTileTreeReferences implements SpatialTileTreeReferences {\r\n // Once async loading completes, all methods will be forwarded to this implementation.\r\n private _impl?: SpatialTileTreeReferences;\r\n private readonly _proxyRef: ProxyTileTreeReference;\r\n // Retained if attachToViewport is called while we are still loading; and reset if detachFromViewport is called while loading.\r\n private _attachArgs?: AttachToViewportArgs;\r\n\r\n public constructor(view: SpatialViewState, getSpec: Promise<BatchedTilesetSpec | null>) {\r\n this._proxyRef = new ProxyTileTreeReference(view.iModel);\r\n getSpec.then((spec: BatchedTilesetSpec | null) => {\r\n if (spec) {\r\n this.setTreeRefs(new BatchedSpatialTileTreeReferences(spec, view));\r\n } else {\r\n this.setTreeRefs(createSpatialTileTreeReferences(view));\r\n }\r\n }).catch(() => {\r\n this.setTreeRefs(createSpatialTileTreeReferences(view));\r\n });\r\n }\r\n\r\n private setTreeRefs(refs: SpatialTileTreeReferences): void {\r\n this._impl = refs;\r\n if (this._attachArgs) {\r\n this._impl.attachToViewport(this._attachArgs);\r\n this._attachArgs.invalidateSymbologyOverrides();\r\n this._attachArgs = undefined;\r\n }\r\n }\r\n\r\n public update(): void {\r\n this._impl?.update();\r\n }\r\n\r\n public attachToViewport(args: AttachToViewportArgs): void {\r\n if (this._impl)\r\n this._impl.attachToViewport(args);\r\n else\r\n this._attachArgs = args;\r\n }\r\n\r\n public detachFromViewport(): void {\r\n if (this._impl)\r\n this._impl.detachFromViewport();\r\n else\r\n this._attachArgs = undefined;\r\n }\r\n\r\n public setDeactivated(): void { }\r\n\r\n public *[Symbol.iterator](): Iterator<TileTreeReference> {\r\n if (this._impl) {\r\n for (const ref of this._impl)\r\n yield ref;\r\n } else {\r\n yield this._proxyRef;\r\n }\r\n }\r\n}\r\n\r\nconst iModelToTilesetSpec = new Map<IModelConnection, BatchedTilesetSpec | null | Promise<BatchedTilesetSpec | null>>();\r\n\r\nasync function fetchTilesetSpec(iModel: IModelConnection, computeBaseUrl: ComputeSpatialTilesetBaseUrl): Promise<BatchedTilesetSpec | null> {\r\n try {\r\n const baseUrl = await computeBaseUrl(iModel);\r\n if (undefined === baseUrl)\r\n return null;\r\n\r\n const url = new URL(\"tileset.json\", baseUrl);\r\n url.search = baseUrl.search;\r\n const response = await fetch(url.toString());\r\n const json = await response.json();\r\n return BatchedTilesetSpec.create(baseUrl, json);\r\n } catch (err) {\r\n Logger.logException(loggerCategory, err);\r\n return null;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createBatchedSpatialTileTreeReferences(view: SpatialViewState, computeBaseUrl: ComputeSpatialTilesetBaseUrl): SpatialTileTreeReferences {\r\n const iModel = view.iModel;\r\n let entry = iModelToTilesetSpec.get(iModel);\r\n if (undefined === entry) {\r\n const promise = entry = fetchTilesetSpec(iModel, computeBaseUrl);\r\n iModelToTilesetSpec.set(iModel, entry);\r\n iModel.onClose.addOnce(() => iModelToTilesetSpec.delete(iModel));\r\n\r\n promise.then((spec: BatchedTilesetSpec | null) => {\r\n if (iModelToTilesetSpec.has(iModel))\r\n iModelToTilesetSpec.set(iModel, spec);\r\n }).catch(() => {\r\n if (iModelToTilesetSpec.has(iModel))\r\n iModelToTilesetSpec.set(iModel, null);\r\n });\r\n }\r\n\r\n if (null === entry) {\r\n // No tileset could be obtained for this iModel - use default tile generation instead.\r\n return createSpatialTileTreeReferences(view);\r\n }\r\n\r\n if (entry instanceof Promise)\r\n return new ProxySpatialTileTreeReferences(view, entry);\r\n\r\n return new BatchedSpatialTileTreeReferences(entry, view);\r\n}\r\n\r\n"]}
@@ -1,3 +1,4 @@
1
+ import { Id64String } from "@itwin/core-bentley";
1
2
  import { RenderSchedule, ViewFlagOverrides } from "@itwin/core-common";
2
3
  import { ImdlDecoder, Tile, TileDrawArgs, TileTree, TileTreeParams } from "@itwin/core-frontend";
3
4
  import { BatchedTile, BatchedTileParams } from "./BatchedTile";
@@ -7,6 +8,7 @@ export interface BatchedTileTreeParams extends TileTreeParams {
7
8
  rootTile: BatchedTileParams;
8
9
  reader: BatchedTilesetReader;
9
10
  script?: RenderSchedule.Script;
11
+ includedModels?: Set<Id64String>;
10
12
  }
11
13
  /** @internal */
12
14
  export declare class BatchedTileTree extends TileTree {
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedTileTree.d.ts","sourceRoot":"","sources":["../../src/BatchedTileTree.ts"],"names":[],"mappings":"AAMA,OAAO,EAAyB,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EACe,WAAW,EAAa,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EACzF,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAQ9D,gBAAgB;AAChB,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IAC3D,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC;CAChC;AAED,gBAAgB;AAChB,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,SAAgB,MAAM,EAAE,oBAAoB,CAAC;IAC7C,SAAgB,cAAc,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC;IACvD,SAAgB,OAAO,EAAE,WAAW,CAAC;gBAElB,MAAM,EAAE,qBAAqB;IAiBhC,OAAO,IAAI,IAAI;IAK/B,IAAoB,QAAQ,IAAI,WAAW,CAE1C;IAED,IAAoB,IAAI,IAAI,OAAO,CAElC;IAED,IAAoB,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjD;IAED,IAAoB,iBAAiB,IAAI,iBAAiB,CAEzD;IAGe,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE;IAMxC,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAQ9B,KAAK,IAAI,IAAI;CAI9B"}
1
+ {"version":3,"file":"BatchedTileTree.d.ts","sourceRoot":"","sources":["../../src/BatchedTileTree.ts"],"names":[],"mappings":"AAKA,OAAO,EAAe,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAyB,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EACe,WAAW,EAAa,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EACzF,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAQ9D,gBAAgB;AAChB,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IAC3D,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;CAClC;AAED,gBAAgB;AAChB,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,SAAgB,MAAM,EAAE,oBAAoB,CAAC;IAC7C,SAAgB,cAAc,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC;IACvD,SAAgB,OAAO,EAAE,WAAW,CAAC;gBAElB,MAAM,EAAE,qBAAqB;IAiBhC,OAAO,IAAI,IAAI;IAK/B,IAAoB,QAAQ,IAAI,WAAW,CAE1C;IAED,IAAoB,IAAI,IAAI,OAAO,CAElC;IAED,IAAoB,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjD;IAED,IAAoB,iBAAiB,IAAI,iBAAiB,CAEzD;IAGe,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE;IAMxC,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAQ9B,KAAK,IAAI,IAAI;CAI9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedTileTree.js","sourceRoot":"","sources":["../../src/BatchedTileTree.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,sDAAkD;AAClD,oDAA8F;AAC9F,wDAE8B;AAC9B,+CAA+D;AAE/D,mDAAuD;AAEvD,MAAM,gBAAgB,GAAsB;IAC1C,UAAU,EAAE,wBAAU,CAAC,WAAW;IAClC,YAAY,EAAE,KAAK;CACpB,CAAC;AASF,gBAAgB;AAChB,MAAa,eAAgB,SAAQ,wBAAQ;IAM3C,YAAmB,MAA6B;QAC9C,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,SAAS,GAAG,IAAI,yBAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QAEpC,IAAI,CAAC,OAAO,GAAG,IAAA,kCAAkB,EAAC;YAChC,IAAI,EAAE,uBAAS,CAAC,OAAO;YACvB,QAAQ,EAAE,IAAI,CAAC,cAAc;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,OAAO;YAC1B,IAAI,EAAE,IAAI;YACV,sBAAsB,EAAE,KAAK;YAC7B,QAAQ,EAAE,CAAC,yBAAS,CAAC,SAAS,CAAC,kBAAkB;SAClD,CAAC,CAAC;IACL,CAAC;IAEe,OAAO;QACrB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;IAED,IAAoB,QAAQ;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAoB,IAAI;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAoB,QAAQ;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAoB,iBAAiB;QACnC,OAAO,oCAAoB,CAAC,WAAW,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAClE,CAAC;IAED,gEAAgE;IAChD,YAAY,CAAC,IAAkB;QAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACrD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAEe,IAAI,CAAC,IAAkB;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK;YACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEe,KAAK;QACnB,MAAM,SAAS,GAAG,0BAAW,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;CACF;AA/DD,0CA+DC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { BeTimePoint } from \"@itwin/core-bentley\";\r\nimport { BatchType, RenderMode, RenderSchedule, ViewFlagOverrides } from \"@itwin/core-common\";\r\nimport {\r\n acquireImdlDecoder, ImdlDecoder, IModelApp, Tile, TileDrawArgs, TileTree, TileTreeParams,\r\n} from \"@itwin/core-frontend\";\r\nimport { BatchedTile, BatchedTileParams } from \"./BatchedTile\";\r\nimport { BatchedTilesetReader } from \"./BatchedTilesetReader\";\r\nimport { frontendTilesOptions } from \"./FrontendTiles\";\r\n\r\nconst defaultViewFlags: ViewFlagOverrides = {\r\n renderMode: RenderMode.SmoothShade,\r\n visibleEdges: false,\r\n};\r\n\r\n/** @internal */\r\nexport interface BatchedTileTreeParams extends TileTreeParams {\r\n rootTile: BatchedTileParams;\r\n reader: BatchedTilesetReader;\r\n script?: RenderSchedule.Script;\r\n}\r\n\r\n/** @internal */\r\nexport class BatchedTileTree extends TileTree {\r\n private readonly _rootTile: BatchedTile;\r\n public readonly reader: BatchedTilesetReader;\r\n public readonly scheduleScript?: RenderSchedule.Script;\r\n public readonly decoder: ImdlDecoder;\r\n\r\n public constructor(params: BatchedTileTreeParams) {\r\n super(params);\r\n this._rootTile = new BatchedTile(params.rootTile, this);\r\n this.reader = params.reader;\r\n this.scheduleScript = params.script;\r\n\r\n this.decoder = acquireImdlDecoder({\r\n type: BatchType.Primary,\r\n timeline: this.scheduleScript,\r\n iModel: this.iModel,\r\n batchModelId: this.modelId,\r\n is3d: true,\r\n containsTransformNodes: false,\r\n noWorker: !IModelApp.tileAdmin.decodeImdlInWorker,\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this.decoder.release();\r\n super.dispose();\r\n }\r\n\r\n public override get rootTile(): BatchedTile {\r\n return this._rootTile;\r\n }\r\n\r\n public override get is3d(): boolean {\r\n return true;\r\n }\r\n\r\n public override get maxDepth(): number | undefined {\r\n return undefined;\r\n }\r\n\r\n public override get viewFlagOverrides(): ViewFlagOverrides {\r\n return frontendTilesOptions.enableEdges ?{ } : defaultViewFlags;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override _selectTiles(args: TileDrawArgs): Tile[] {\r\n const selected = new Set<BatchedTile>();\r\n this.rootTile.selectTiles(selected, args, undefined);\r\n return Array.from(selected);\r\n }\r\n\r\n public override draw(args: TileDrawArgs): void {\r\n const tiles = this.selectTiles(args);\r\n for (const tile of tiles)\r\n tile.drawGraphics(args);\r\n\r\n args.drawGraphics();\r\n }\r\n\r\n public override prune(): void {\r\n const olderThan = BeTimePoint.now().minus(this.expirationTime);\r\n this.rootTile.prune(olderThan);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"BatchedTileTree.js","sourceRoot":"","sources":["../../src/BatchedTileTree.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,sDAA8D;AAC9D,oDAA8F;AAC9F,wDAE8B;AAC9B,+CAA+D;AAE/D,mDAAuD;AAEvD,MAAM,gBAAgB,GAAsB;IAC1C,UAAU,EAAE,wBAAU,CAAC,WAAW;IAClC,YAAY,EAAE,KAAK;CACpB,CAAC;AAUF,gBAAgB;AAChB,MAAa,eAAgB,SAAQ,wBAAQ;IAM3C,YAAmB,MAA6B;QAC9C,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,SAAS,GAAG,IAAI,yBAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QAEpC,IAAI,CAAC,OAAO,GAAG,IAAA,kCAAkB,EAAC;YAChC,IAAI,EAAE,uBAAS,CAAC,OAAO;YACvB,QAAQ,EAAE,IAAI,CAAC,cAAc;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,OAAO;YAC1B,IAAI,EAAE,IAAI;YACV,sBAAsB,EAAE,KAAK;YAC7B,QAAQ,EAAE,CAAC,yBAAS,CAAC,SAAS,CAAC,kBAAkB;SAClD,CAAC,CAAC;IACL,CAAC;IAEe,OAAO;QACrB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;IAED,IAAoB,QAAQ;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAoB,IAAI;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAoB,QAAQ;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAoB,iBAAiB;QACnC,OAAO,oCAAoB,CAAC,WAAW,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAClE,CAAC;IAED,gEAAgE;IAChD,YAAY,CAAC,IAAkB;QAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACrD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAEe,IAAI,CAAC,IAAkB;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK;YACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEe,KAAK;QACnB,MAAM,SAAS,GAAG,0BAAW,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;CACF;AA/DD,0CA+DC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { BeTimePoint, Id64String } from \"@itwin/core-bentley\";\r\nimport { BatchType, RenderMode, RenderSchedule, ViewFlagOverrides } from \"@itwin/core-common\";\r\nimport {\r\n acquireImdlDecoder, ImdlDecoder, IModelApp, Tile, TileDrawArgs, TileTree, TileTreeParams,\r\n} from \"@itwin/core-frontend\";\r\nimport { BatchedTile, BatchedTileParams } from \"./BatchedTile\";\r\nimport { BatchedTilesetReader } from \"./BatchedTilesetReader\";\r\nimport { frontendTilesOptions } from \"./FrontendTiles\";\r\n\r\nconst defaultViewFlags: ViewFlagOverrides = {\r\n renderMode: RenderMode.SmoothShade,\r\n visibleEdges: false,\r\n};\r\n\r\n/** @internal */\r\nexport interface BatchedTileTreeParams extends TileTreeParams {\r\n rootTile: BatchedTileParams;\r\n reader: BatchedTilesetReader;\r\n script?: RenderSchedule.Script;\r\n includedModels?: Set<Id64String>;\r\n}\r\n\r\n/** @internal */\r\nexport class BatchedTileTree extends TileTree {\r\n private readonly _rootTile: BatchedTile;\r\n public readonly reader: BatchedTilesetReader;\r\n public readonly scheduleScript?: RenderSchedule.Script;\r\n public readonly decoder: ImdlDecoder;\r\n\r\n public constructor(params: BatchedTileTreeParams) {\r\n super(params);\r\n this._rootTile = new BatchedTile(params.rootTile, this);\r\n this.reader = params.reader;\r\n this.scheduleScript = params.script;\r\n\r\n this.decoder = acquireImdlDecoder({\r\n type: BatchType.Primary,\r\n timeline: this.scheduleScript,\r\n iModel: this.iModel,\r\n batchModelId: this.modelId,\r\n is3d: true,\r\n containsTransformNodes: false,\r\n noWorker: !IModelApp.tileAdmin.decodeImdlInWorker,\r\n });\r\n }\r\n\r\n public override dispose(): void {\r\n this.decoder.release();\r\n super.dispose();\r\n }\r\n\r\n public override get rootTile(): BatchedTile {\r\n return this._rootTile;\r\n }\r\n\r\n public override get is3d(): boolean {\r\n return true;\r\n }\r\n\r\n public override get maxDepth(): number | undefined {\r\n return undefined;\r\n }\r\n\r\n public override get viewFlagOverrides(): ViewFlagOverrides {\r\n return frontendTilesOptions.enableEdges ?{ } : defaultViewFlags;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override _selectTiles(args: TileDrawArgs): Tile[] {\r\n const selected = new Set<BatchedTile>();\r\n this.rootTile.selectTiles(selected, args, undefined);\r\n return Array.from(selected);\r\n }\r\n\r\n public override draw(args: TileDrawArgs): void {\r\n const tiles = this.selectTiles(args);\r\n for (const tile of tiles)\r\n tile.drawGraphics(args);\r\n\r\n args.drawGraphics();\r\n }\r\n\r\n public override prune(): void {\r\n const olderThan = BeTimePoint.now().minus(this.expirationTime);\r\n this.rootTile.prune(olderThan);\r\n }\r\n}\r\n"]}
@@ -1,8 +1,9 @@
1
1
  import { RenderSchedule } from "@itwin/core-common";
2
2
  import { IModelConnection, TileTreeOwner } from "@itwin/core-frontend";
3
+ import { BatchedTilesetSpec } from "./BatchedTilesetReader";
3
4
  /** @internal */
4
5
  export interface BatchedTileTreeId {
5
- baseUrl: URL;
6
+ spec: BatchedTilesetSpec;
6
7
  script?: RenderSchedule.Script;
7
8
  }
8
9
  /** @internal */
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedTileTreeSupplier.d.ts","sourceRoot":"","sources":["../../src/BatchedTileTreeSupplier.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACL,gBAAgB,EAAY,aAAa,EAC1C,MAAM,sBAAsB,CAAC;AAK9B,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,GAAG,CAAC;IACb,MAAM,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC;CAChC;AA8BD,gBAAgB;AAChB,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,GAAG,aAAa,CAE1G"}
1
+ {"version":3,"file":"BatchedTileTreeSupplier.d.ts","sourceRoot":"","sources":["../../src/BatchedTileTreeSupplier.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACL,gBAAgB,EAAY,aAAa,EAC1C,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAwB,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGlF,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC;CAChC;AAyBD,gBAAgB;AAChB,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,GAAG,aAAa,CAE1G"}
@@ -15,13 +15,9 @@ class BatchedTileTreeSupplier {
15
15
  || (0, core_bentley_1.comparePossiblyUndefined)((x, y) => x.compareTo(y), lhs.script, rhs.script);
16
16
  }
17
17
  async createTileTree(treeId, iModel) {
18
- const baseUrl = treeId.baseUrl;
19
- const url = new URL("tileset.json", baseUrl);
20
- url.search = baseUrl.search;
18
+ const spec = treeId.spec;
21
19
  try {
22
- const response = await fetch(url.toString());
23
- const json = await response.json();
24
- const reader = new BatchedTilesetReader_1.BatchedTilesetReader(json, iModel, baseUrl);
20
+ const reader = new BatchedTilesetReader_1.BatchedTilesetReader(spec, iModel);
25
21
  const params = await reader.readTileTreeParams();
26
22
  params.script = treeId.script;
27
23
  return new BatchedTileTree_1.BatchedTileTree(params);
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedTileTreeSupplier.js","sourceRoot":"","sources":["../../src/BatchedTileTreeSupplier.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,sDAAuF;AAKvF,qDAAkD;AAClD,iEAA8D;AAC9D,uDAAoD;AAQpD,MAAM,uBAAuB;IACpB,kBAAkB,CAAC,GAAsB,EAAE,GAAsB;QACtE,OAAO,IAAA,6BAAc,EAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;eAChD,IAAA,uCAAwB,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClF,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,MAAyB,EAAE,MAAwB;QAC7E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAC7C,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC5B,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnC,MAAM,MAAM,GAAG,IAAI,2CAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YAC/D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAEjD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC9B,OAAO,IAAI,iCAAe,CAAC,MAAM,CAAC,CAAC;SACpC;QAAC,OAAO,GAAG,EAAE;YACZ,qBAAM,CAAC,YAAY,CAAC,+BAAc,EAAE,GAAG,CAAC,CAAC;YACzC,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;CACF;AAED,MAAM,uBAAuB,GAAqB,IAAI,uBAAuB,EAAE,CAAC;AAEhF,gBAAgB;AAChB,SAAgB,uBAAuB,CAAC,MAAwB,EAAE,MAAyB;IACzF,OAAO,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;AACxE,CAAC;AAFD,0DAEC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { comparePossiblyUndefined, compareStrings, Logger } from \"@itwin/core-bentley\";\r\nimport { RenderSchedule } from \"@itwin/core-common\";\r\nimport {\r\n IModelConnection, TileTree, TileTreeOwner, TileTreeSupplier,\r\n} from \"@itwin/core-frontend\";\r\nimport { loggerCategory } from \"./LoggerCategory\";\r\nimport { BatchedTilesetReader } from \"./BatchedTilesetReader\";\r\nimport { BatchedTileTree } from \"./BatchedTileTree\";\r\n\r\n/** @internal */\r\nexport interface BatchedTileTreeId {\r\n baseUrl: URL;\r\n script?: RenderSchedule.Script;\r\n}\r\n\r\nclass BatchedTileTreeSupplier implements TileTreeSupplier {\r\n public compareTileTreeIds(lhs: BatchedTileTreeId, rhs: BatchedTileTreeId): number {\r\n return compareStrings(lhs.toString(), rhs.toString())\r\n || comparePossiblyUndefined((x, y) => x.compareTo(y), lhs.script, rhs.script);\r\n }\r\n\r\n public async createTileTree(treeId: BatchedTileTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n const baseUrl = treeId.baseUrl;\r\n const url = new URL(\"tileset.json\", baseUrl);\r\n url.search = baseUrl.search;\r\n try {\r\n const response = await fetch(url.toString());\r\n const json = await response.json();\r\n\r\n const reader = new BatchedTilesetReader(json, iModel, baseUrl);\r\n const params = await reader.readTileTreeParams();\r\n\r\n params.script = treeId.script;\r\n return new BatchedTileTree(params);\r\n } catch (err) {\r\n Logger.logException(loggerCategory, err);\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\nconst batchedTileTreeSupplier: TileTreeSupplier = new BatchedTileTreeSupplier();\r\n\r\n/** @internal */\r\nexport function getBatchedTileTreeOwner(iModel: IModelConnection, treeId: BatchedTileTreeId): TileTreeOwner {\r\n return iModel.tiles.getTileTreeOwner(treeId, batchedTileTreeSupplier);\r\n}\r\n"]}
1
+ {"version":3,"file":"BatchedTileTreeSupplier.js","sourceRoot":"","sources":["../../src/BatchedTileTreeSupplier.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,sDAAuF;AAKvF,qDAAkD;AAClD,iEAAkF;AAClF,uDAAoD;AAQpD,MAAM,uBAAuB;IACpB,kBAAkB,CAAC,GAAsB,EAAE,GAAsB;QACtE,OAAO,IAAA,6BAAc,EAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;eAChD,IAAA,uCAAwB,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClF,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,MAAyB,EAAE,MAAwB;QAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI;YACF,MAAM,MAAM,GAAG,IAAI,2CAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAEjD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC9B,OAAO,IAAI,iCAAe,CAAC,MAAM,CAAC,CAAC;SACpC;QAAC,OAAO,GAAG,EAAE;YACZ,qBAAM,CAAC,YAAY,CAAC,+BAAc,EAAE,GAAG,CAAC,CAAC;YACzC,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;CACF;AAED,MAAM,uBAAuB,GAAqB,IAAI,uBAAuB,EAAE,CAAC;AAEhF,gBAAgB;AAChB,SAAgB,uBAAuB,CAAC,MAAwB,EAAE,MAAyB;IACzF,OAAO,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;AACxE,CAAC;AAFD,0DAEC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { comparePossiblyUndefined, compareStrings, Logger } from \"@itwin/core-bentley\";\r\nimport { RenderSchedule } from \"@itwin/core-common\";\r\nimport {\r\n IModelConnection, TileTree, TileTreeOwner, TileTreeSupplier,\r\n} from \"@itwin/core-frontend\";\r\nimport { loggerCategory } from \"./LoggerCategory\";\r\nimport { BatchedTilesetReader, BatchedTilesetSpec } from \"./BatchedTilesetReader\";\r\nimport { BatchedTileTree } from \"./BatchedTileTree\";\r\n\r\n/** @internal */\r\nexport interface BatchedTileTreeId {\r\n spec: BatchedTilesetSpec;\r\n script?: RenderSchedule.Script;\r\n}\r\n\r\nclass BatchedTileTreeSupplier implements TileTreeSupplier {\r\n public compareTileTreeIds(lhs: BatchedTileTreeId, rhs: BatchedTileTreeId): number {\r\n return compareStrings(lhs.toString(), rhs.toString())\r\n || comparePossiblyUndefined((x, y) => x.compareTo(y), lhs.script, rhs.script);\r\n }\r\n\r\n public async createTileTree(treeId: BatchedTileTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n const spec = treeId.spec;\r\n try {\r\n const reader = new BatchedTilesetReader(spec, iModel);\r\n const params = await reader.readTileTreeParams();\r\n\r\n params.script = treeId.script;\r\n return new BatchedTileTree(params);\r\n } catch (err) {\r\n Logger.logException(loggerCategory, err);\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\nconst batchedTileTreeSupplier: TileTreeSupplier = new BatchedTileTreeSupplier();\r\n\r\n/** @internal */\r\nexport function getBatchedTileTreeOwner(iModel: IModelConnection, treeId: BatchedTileTreeId): TileTreeOwner {\r\n return iModel.tiles.getTileTreeOwner(treeId, batchedTileTreeSupplier);\r\n}\r\n"]}
@@ -1,13 +1,34 @@
1
+ import { Id64String } from "@itwin/core-bentley";
1
2
  import { Tileset3dSchema as schema } from "@itwin/core-common";
2
3
  import { IModelConnection } from "@itwin/core-frontend";
3
4
  import { BatchedTileTreeParams } from "./BatchedTileTree";
4
5
  import { BatchedTile, BatchedTileParams } from "./BatchedTile";
5
6
  /** @internal */
7
+ export interface BatchedTilesetProps extends schema.Tileset {
8
+ extensions?: {
9
+ BENTLEY_BatchedTileSet?: {
10
+ includedModels: Id64String[];
11
+ };
12
+ };
13
+ }
14
+ /** @internal */
15
+ export interface BatchedTilesetSpec {
16
+ baseUrl: URL;
17
+ props: BatchedTilesetProps;
18
+ }
19
+ /** @internal */
20
+ export declare namespace BatchedTilesetSpec {
21
+ function create(baseUrl: URL, json: unknown): {
22
+ baseUrl: URL;
23
+ props: BatchedTilesetProps;
24
+ };
25
+ }
26
+ /** @internal */
6
27
  export declare class BatchedTilesetReader {
7
28
  private readonly _iModel;
8
29
  private readonly _tileset;
9
30
  readonly baseUrl: URL;
10
- constructor(json: unknown, iModel: IModelConnection, baseUrl: URL);
31
+ constructor(spec: BatchedTilesetSpec, iModel: IModelConnection);
11
32
  readTileParams(json: schema.Tile, parent?: BatchedTile): BatchedTileParams;
12
33
  readTileTreeParams(): Promise<BatchedTileTreeParams>;
13
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedTilesetReader.d.ts","sourceRoot":"","sources":["../../src/BatchedTilesetReader.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAA2C,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAqD/D,gBAAgB;AAChB,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,SAAgB,OAAO,EAAE,GAAG,CAAC;gBAEV,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG;IASjE,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,iBAAiB;IAkCpE,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,CAAC;CAclE"}
1
+ {"version":3,"file":"BatchedTilesetReader.d.ts","sourceRoot":"","sources":["../../src/BatchedTilesetReader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAIjD,OAAO,EAAE,eAAe,IAAI,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAA2C,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE/D,gBAAgB;AAChB,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,OAAO;IACzD,UAAU,CAAC,EAAE;QACX,sBAAsB,CAAC,EAAE;YACvB,cAAc,EAAE,UAAU,EAAE,CAAC;SAC9B,CAAC;KACH,CAAC;CACH;AAkBD,gBAAgB;AAChB,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,GAAG,CAAC;IACb,KAAK,EAAE,mBAAmB,CAAC;CAC5B;AAED,gBAAgB;AAChB,yBAAiB,kBAAkB,CAAC;IAClC,SAAgB,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO;;;MAKjD;CACF;AAqCD,gBAAgB;AAChB,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,SAAgB,OAAO,EAAE,GAAG,CAAC;gBAEV,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,gBAAgB;IAM9D,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,iBAAiB;IAkCpE,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,CAAC;CAiBlE"}
@@ -4,10 +4,10 @@
4
4
  * See LICENSE.md in the project root for license terms and full copyright notice.
5
5
  *--------------------------------------------------------------------------------------------*/
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.BatchedTilesetReader = void 0;
7
+ exports.BatchedTilesetReader = exports.BatchedTilesetSpec = void 0;
8
8
  const core_geometry_1 = require("@itwin/core-geometry");
9
9
  const core_frontend_1 = require("@itwin/core-frontend");
10
- function isTileset3d(json) {
10
+ function isBatchedTileset(json) {
11
11
  if (typeof json !== "object")
12
12
  return false;
13
13
  const props = json;
@@ -18,6 +18,16 @@ function isTileset3d(json) {
18
18
  props.geometricError = props.root.geometricError;
19
19
  return true;
20
20
  }
21
+ /** @internal */
22
+ var BatchedTilesetSpec;
23
+ (function (BatchedTilesetSpec) {
24
+ function create(baseUrl, json) {
25
+ if (!isBatchedTileset(json))
26
+ throw new Error("Invalid tileset JSON");
27
+ return { baseUrl, props: json };
28
+ }
29
+ BatchedTilesetSpec.create = create;
30
+ })(BatchedTilesetSpec = exports.BatchedTilesetSpec || (exports.BatchedTilesetSpec = {}));
21
31
  function rangeFromBoundingVolume(vol) {
22
32
  if (vol.box) {
23
33
  const center = new core_geometry_1.Point3d(vol.box[0], vol.box[1], vol.box[2]);
@@ -46,12 +56,10 @@ function transformFromJSON(json) {
46
56
  }
47
57
  /** @internal */
48
58
  class BatchedTilesetReader {
49
- constructor(json, iModel, baseUrl) {
50
- if (!isTileset3d(json))
51
- throw new Error("Invalid tileset JSON");
59
+ constructor(spec, iModel) {
52
60
  this._iModel = iModel;
53
- this._tileset = json;
54
- this.baseUrl = baseUrl;
61
+ this._tileset = spec.props;
62
+ this.baseUrl = spec.baseUrl;
55
63
  }
56
64
  readTileParams(json, parent) {
57
65
  const content = json.content;
@@ -87,6 +95,8 @@ class BatchedTilesetReader {
87
95
  async readTileTreeParams() {
88
96
  const root = this._tileset.root;
89
97
  const location = root.transform ? transformFromJSON(root.transform) : core_geometry_1.Transform.createIdentity();
98
+ const extension = this._tileset.extensions?.BENTLEY_BatchedTileSet;
99
+ const includedModels = extension ? new Set(extension.includedModels) : undefined;
90
100
  return {
91
101
  id: "spatial-models",
92
102
  modelId: this._iModel.transientIds.getNext(),
@@ -95,6 +105,7 @@ class BatchedTilesetReader {
95
105
  priority: core_frontend_1.TileLoadPriority.Primary,
96
106
  rootTile: this.readTileParams(root),
97
107
  reader: this,
108
+ includedModels,
98
109
  };
99
110
  }
100
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedTilesetReader.js","sourceRoot":"","sources":["../../src/BatchedTilesetReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport {\r\n Matrix3d, Point3d, Range3d, Transform, Vector3d,\r\n} from \"@itwin/core-geometry\";\r\nimport { Tileset3dSchema as schema } from \"@itwin/core-common\";\r\nimport { IModelConnection, RealityModelTileUtils, TileLoadPriority } from \"@itwin/core-frontend\";\r\nimport { BatchedTileTreeParams } from \"./BatchedTileTree\";\r\nimport { BatchedTile, BatchedTileParams } from \"./BatchedTile\";\r\n\r\nfunction isTileset3d(json: unknown): json is schema.Tileset {\r\n if (typeof json !== \"object\")\r\n return false;\r\n\r\n const props = json as schema.Tileset;\r\n\r\n if (!props.root || !props.asset)\r\n return false;\r\n\r\n // ###TODO spec requires geometricError to be present on tileset and all tiles; exporter is omitting from tileset.\r\n if (undefined === props.geometricError)\r\n props.geometricError = props.root.geometricError;\r\n\r\n return true;\r\n}\r\n\r\nfunction rangeFromBoundingVolume(vol: schema.BoundingVolume): Range3d {\r\n if (vol.box) {\r\n const center = new Point3d(vol.box[0], vol.box[1], vol.box[2]);\r\n const ux = new Vector3d(vol.box[3], vol.box[4], vol.box[5]);\r\n const uy = new Vector3d(vol.box[6], vol.box[7], vol.box[8]);\r\n const uz = new Vector3d(vol.box[9], vol.box[10], vol.box[11]);\r\n\r\n const range = Range3d.createNull();\r\n for (let i = -1; i <= 1; i += 2)\r\n for (let j = -1; j <= 1; j += 2)\r\n for (let k = -1; k <= 1; k += 2)\r\n range.extendPoint(center.plus3Scaled(ux, i, uy, j, uz, k));\r\n\r\n return range;\r\n } else if (vol.sphere) {\r\n const center = new Point3d(vol.sphere[0], vol.sphere[1], vol.sphere[2]);\r\n const radius = vol.sphere[3];\r\n return Range3d.createXYZXYZ(center.x - radius, center.y - radius, center.z - radius, center.x + radius, center.y + radius, center.z + radius);\r\n }\r\n\r\n // We won't get region bounding volumes in our tiles.\r\n throw new Error(\"region bounding volume unimplemented\");\r\n}\r\n\r\nfunction transformFromJSON(json: schema.Transform): Transform {\r\n const translation = new Point3d(json[12], json[13], json[14]);\r\n const matrix = Matrix3d.createRowValues(\r\n json[0], json[4], json[8],\r\n json[1], json[5], json[9],\r\n json[2], json[6], json[10],\r\n );\r\n\r\n return Transform.createOriginAndMatrix(translation, matrix);\r\n}\r\n\r\n/** @internal */\r\nexport class BatchedTilesetReader {\r\n private readonly _iModel: IModelConnection;\r\n private readonly _tileset: schema.Tileset;\r\n public readonly baseUrl: URL;\r\n\r\n public constructor(json: unknown, iModel: IModelConnection, baseUrl: URL) {\r\n if (!isTileset3d(json))\r\n throw new Error(\"Invalid tileset JSON\");\r\n\r\n this._iModel = iModel;\r\n this._tileset = json;\r\n this.baseUrl = baseUrl;\r\n }\r\n\r\n public readTileParams(json: schema.Tile, parent?: BatchedTile): BatchedTileParams {\r\n const content = json.content;\r\n const geometricError = json.geometricError;\r\n const range = rangeFromBoundingVolume(json.boundingVolume);\r\n const isLeaf = undefined === json.children || json.children.length === 0;\r\n\r\n let transformToRoot;\r\n if (undefined !== parent) {\r\n const localToParent = json.transform ? transformFromJSON(json.transform) : undefined;\r\n const parentToRoot = parent.transformToRoot;\r\n if (localToParent) {\r\n if (parentToRoot)\r\n localToParent.multiplyTransformTransform(parentToRoot, localToParent);\r\n\r\n transformToRoot = localToParent;\r\n } else {\r\n transformToRoot = parentToRoot;\r\n }\r\n }\r\n\r\n // ###TODO evaluate this. The geometric errors in the tiles seem far too small.\r\n const maximumSizeScale = 8;\r\n return {\r\n parent,\r\n contentId: content?.uri ?? \"\",\r\n range,\r\n contentRange: content?.boundingVolume ? rangeFromBoundingVolume(content.boundingVolume) : undefined,\r\n isLeaf,\r\n maximumSize: maximumSizeScale * RealityModelTileUtils.maximumSizeFromGeometricTolerance(range, geometricError),\r\n childrenProps: isLeaf ? undefined : json.children,\r\n transformToRoot,\r\n };\r\n }\r\n\r\n public async readTileTreeParams(): Promise<BatchedTileTreeParams> {\r\n const root = this._tileset.root;\r\n const location = root.transform ? transformFromJSON(root.transform) : Transform.createIdentity();\r\n\r\n return {\r\n id: \"spatial-models\",\r\n modelId: this._iModel.transientIds.getNext(),\r\n iModel: this._iModel,\r\n location,\r\n priority: TileLoadPriority.Primary,\r\n rootTile: this.readTileParams(root),\r\n reader: this,\r\n };\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"BatchedTilesetReader.js","sourceRoot":"","sources":["../../src/BatchedTilesetReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n Matrix3d, Point3d, Range3d, Transform, Vector3d,\r\n} from \"@itwin/core-geometry\";\r\nimport { Tileset3dSchema as schema } from \"@itwin/core-common\";\r\nimport { IModelConnection, RealityModelTileUtils, TileLoadPriority } from \"@itwin/core-frontend\";\r\nimport { BatchedTileTreeParams } from \"./BatchedTileTree\";\r\nimport { BatchedTile, BatchedTileParams } from \"./BatchedTile\";\r\n\r\n/** @internal */\r\nexport interface BatchedTilesetProps extends schema.Tileset {\r\n extensions?: {\r\n BENTLEY_BatchedTileSet?: { // eslint-disable-line @typescript-eslint/naming-convention\r\n includedModels: Id64String[];\r\n };\r\n };\r\n}\r\n\r\nfunction isBatchedTileset(json: unknown): json is BatchedTilesetProps {\r\n if (typeof json !== \"object\")\r\n return false;\r\n\r\n const props = json as schema.Tileset;\r\n\r\n if (!props.root || !props.asset)\r\n return false;\r\n\r\n // ###TODO spec requires geometricError to be present on tileset and all tiles; exporter is omitting from tileset.\r\n if (undefined === props.geometricError)\r\n props.geometricError = props.root.geometricError;\r\n\r\n return true;\r\n}\r\n\r\n/** @internal */\r\nexport interface BatchedTilesetSpec {\r\n baseUrl: URL;\r\n props: BatchedTilesetProps;\r\n}\r\n\r\n/** @internal */\r\nexport namespace BatchedTilesetSpec {\r\n export function create(baseUrl: URL, json: unknown) {\r\n if (!isBatchedTileset(json))\r\n throw new Error(\"Invalid tileset JSON\");\r\n\r\n return { baseUrl, props: json };\r\n }\r\n}\r\n\r\nfunction rangeFromBoundingVolume(vol: schema.BoundingVolume): Range3d {\r\n if (vol.box) {\r\n const center = new Point3d(vol.box[0], vol.box[1], vol.box[2]);\r\n const ux = new Vector3d(vol.box[3], vol.box[4], vol.box[5]);\r\n const uy = new Vector3d(vol.box[6], vol.box[7], vol.box[8]);\r\n const uz = new Vector3d(vol.box[9], vol.box[10], vol.box[11]);\r\n\r\n const range = Range3d.createNull();\r\n for (let i = -1; i <= 1; i += 2)\r\n for (let j = -1; j <= 1; j += 2)\r\n for (let k = -1; k <= 1; k += 2)\r\n range.extendPoint(center.plus3Scaled(ux, i, uy, j, uz, k));\r\n\r\n return range;\r\n } else if (vol.sphere) {\r\n const center = new Point3d(vol.sphere[0], vol.sphere[1], vol.sphere[2]);\r\n const radius = vol.sphere[3];\r\n return Range3d.createXYZXYZ(center.x - radius, center.y - radius, center.z - radius, center.x + radius, center.y + radius, center.z + radius);\r\n }\r\n\r\n // We won't get region bounding volumes in our tiles.\r\n throw new Error(\"region bounding volume unimplemented\");\r\n}\r\n\r\nfunction transformFromJSON(json: schema.Transform): Transform {\r\n const translation = new Point3d(json[12], json[13], json[14]);\r\n const matrix = Matrix3d.createRowValues(\r\n json[0], json[4], json[8],\r\n json[1], json[5], json[9],\r\n json[2], json[6], json[10],\r\n );\r\n\r\n return Transform.createOriginAndMatrix(translation, matrix);\r\n}\r\n\r\n/** @internal */\r\nexport class BatchedTilesetReader {\r\n private readonly _iModel: IModelConnection;\r\n private readonly _tileset: schema.Tileset;\r\n public readonly baseUrl: URL;\r\n\r\n public constructor(spec: BatchedTilesetSpec, iModel: IModelConnection) {\r\n this._iModel = iModel;\r\n this._tileset = spec.props;\r\n this.baseUrl = spec.baseUrl;\r\n }\r\n\r\n public readTileParams(json: schema.Tile, parent?: BatchedTile): BatchedTileParams {\r\n const content = json.content;\r\n const geometricError = json.geometricError;\r\n const range = rangeFromBoundingVolume(json.boundingVolume);\r\n const isLeaf = undefined === json.children || json.children.length === 0;\r\n\r\n let transformToRoot;\r\n if (undefined !== parent) {\r\n const localToParent = json.transform ? transformFromJSON(json.transform) : undefined;\r\n const parentToRoot = parent.transformToRoot;\r\n if (localToParent) {\r\n if (parentToRoot)\r\n localToParent.multiplyTransformTransform(parentToRoot, localToParent);\r\n\r\n transformToRoot = localToParent;\r\n } else {\r\n transformToRoot = parentToRoot;\r\n }\r\n }\r\n\r\n // ###TODO evaluate this. The geometric errors in the tiles seem far too small.\r\n const maximumSizeScale = 8;\r\n return {\r\n parent,\r\n contentId: content?.uri ?? \"\",\r\n range,\r\n contentRange: content?.boundingVolume ? rangeFromBoundingVolume(content.boundingVolume) : undefined,\r\n isLeaf,\r\n maximumSize: maximumSizeScale * RealityModelTileUtils.maximumSizeFromGeometricTolerance(range, geometricError),\r\n childrenProps: isLeaf ? undefined : json.children,\r\n transformToRoot,\r\n };\r\n }\r\n\r\n public async readTileTreeParams(): Promise<BatchedTileTreeParams> {\r\n const root = this._tileset.root;\r\n const location = root.transform ? transformFromJSON(root.transform) : Transform.createIdentity();\r\n const extension = this._tileset.extensions?.BENTLEY_BatchedTileSet;\r\n const includedModels = extension ? new Set<Id64String>(extension.includedModels) : undefined;\r\n\r\n return {\r\n id: \"spatial-models\",\r\n modelId: this._iModel.transientIds.getNext(),\r\n iModel: this._iModel,\r\n location,\r\n priority: TileLoadPriority.Primary,\r\n rootTile: this.readTileParams(root),\r\n reader: this,\r\n includedModels,\r\n };\r\n }\r\n}\r\n"]}