@itwin/frontend-tiles 5.0.0-dev.11 → 5.0.0-dev.110

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 (130) hide show
  1. package/CHANGELOG.md +61 -1
  2. package/lib/cjs/BatchedModelGroups.d.ts +4 -4
  3. package/lib/cjs/BatchedModelGroups.d.ts.map +1 -1
  4. package/lib/cjs/BatchedModelGroups.js +19 -14
  5. package/lib/cjs/BatchedModelGroups.js.map +1 -1
  6. package/lib/cjs/BatchedModels.d.ts +2 -2
  7. package/lib/cjs/BatchedModels.d.ts.map +1 -1
  8. package/lib/cjs/BatchedModels.js +5 -2
  9. package/lib/cjs/BatchedModels.js.map +1 -1
  10. package/lib/cjs/BatchedSpatialTileTreeRefs.d.ts +1 -1
  11. package/lib/cjs/BatchedSpatialTileTreeRefs.d.ts.map +1 -1
  12. package/lib/cjs/BatchedSpatialTileTreeRefs.js +36 -15
  13. package/lib/cjs/BatchedSpatialTileTreeRefs.js.map +1 -1
  14. package/lib/cjs/BatchedTile.d.ts +2 -2
  15. package/lib/cjs/BatchedTile.d.ts.map +1 -1
  16. package/lib/cjs/BatchedTile.js +17 -6
  17. package/lib/cjs/BatchedTile.js.map +1 -1
  18. package/lib/cjs/BatchedTileContentReader.d.ts +1 -1
  19. package/lib/cjs/BatchedTileContentReader.d.ts.map +1 -1
  20. package/lib/cjs/BatchedTileContentReader.js +3 -0
  21. package/lib/cjs/BatchedTileContentReader.js.map +1 -1
  22. package/lib/cjs/BatchedTileTree.d.ts +7 -4
  23. package/lib/cjs/BatchedTileTree.d.ts.map +1 -1
  24. package/lib/cjs/BatchedTileTree.js +18 -6
  25. package/lib/cjs/BatchedTileTree.js.map +1 -1
  26. package/lib/cjs/BatchedTileTreeReference.d.ts +12 -4
  27. package/lib/cjs/BatchedTileTreeReference.d.ts.map +1 -1
  28. package/lib/cjs/BatchedTileTreeReference.js +24 -0
  29. package/lib/cjs/BatchedTileTreeReference.js.map +1 -1
  30. package/lib/cjs/BatchedTileTreeSupplier.d.ts +1 -1
  31. package/lib/cjs/BatchedTileTreeSupplier.d.ts.map +1 -1
  32. package/lib/cjs/BatchedTileTreeSupplier.js +6 -6
  33. package/lib/cjs/BatchedTileTreeSupplier.js.map +1 -1
  34. package/lib/cjs/BatchedTilesetReader.d.ts +3 -3
  35. package/lib/cjs/BatchedTilesetReader.d.ts.map +1 -1
  36. package/lib/cjs/BatchedTilesetReader.js +4 -1
  37. package/lib/cjs/BatchedTilesetReader.js.map +1 -1
  38. package/lib/cjs/FrontendTiles.d.ts +2 -2
  39. package/lib/cjs/FrontendTiles.d.ts.map +1 -1
  40. package/lib/cjs/FrontendTiles.js +7 -7
  41. package/lib/cjs/FrontendTiles.js.map +1 -1
  42. package/lib/cjs/GraphicsProvider/GraphicRepresentationProvider.d.ts +8 -15
  43. package/lib/cjs/GraphicsProvider/GraphicRepresentationProvider.d.ts.map +1 -1
  44. package/lib/cjs/GraphicsProvider/GraphicRepresentationProvider.js +7 -20
  45. package/lib/cjs/GraphicsProvider/GraphicRepresentationProvider.js.map +1 -1
  46. package/lib/cjs/GraphicsProvider/GraphicsProvider.js +6 -6
  47. package/lib/cjs/GraphicsProvider/GraphicsProvider.js.map +1 -1
  48. package/lib/cjs/GraphicsProvider/tileset-creators/GeoscienceTileset.d.ts +1 -1
  49. package/lib/cjs/GraphicsProvider/tileset-creators/GeoscienceTileset.d.ts.map +1 -1
  50. package/lib/cjs/GraphicsProvider/tileset-creators/GeoscienceTileset.js +5 -5
  51. package/lib/cjs/GraphicsProvider/tileset-creators/GeoscienceTileset.js.map +1 -1
  52. package/lib/cjs/GraphicsProvider/url-providers/GeoscienceUrlProvider.js +3 -3
  53. package/lib/cjs/GraphicsProvider/url-providers/GeoscienceUrlProvider.js.map +1 -1
  54. package/lib/cjs/IndexedDBCache.d.ts.map +1 -1
  55. package/lib/cjs/IndexedDBCache.js +3 -0
  56. package/lib/cjs/IndexedDBCache.js.map +1 -1
  57. package/lib/cjs/ModelGroup.d.ts +1 -1
  58. package/lib/cjs/ModelGroup.d.ts.map +1 -1
  59. package/lib/cjs/ModelGroup.js.map +1 -1
  60. package/lib/cjs/ModelGroupDisplayTransforms.js +2 -1
  61. package/lib/cjs/ModelGroupDisplayTransforms.js.map +1 -1
  62. package/lib/cjs/frontend-tiles.d.ts +5 -5
  63. package/lib/cjs/frontend-tiles.d.ts.map +1 -1
  64. package/lib/cjs/frontend-tiles.js +5 -5
  65. package/lib/cjs/frontend-tiles.js.map +1 -1
  66. package/lib/esm/BatchedModelGroups.d.ts +4 -4
  67. package/lib/esm/BatchedModelGroups.d.ts.map +1 -1
  68. package/lib/esm/BatchedModelGroups.js +17 -12
  69. package/lib/esm/BatchedModelGroups.js.map +1 -1
  70. package/lib/esm/BatchedModels.d.ts +2 -2
  71. package/lib/esm/BatchedModels.d.ts.map +1 -1
  72. package/lib/esm/BatchedModels.js +5 -2
  73. package/lib/esm/BatchedModels.js.map +1 -1
  74. package/lib/esm/BatchedSpatialTileTreeRefs.d.ts +1 -1
  75. package/lib/esm/BatchedSpatialTileTreeRefs.d.ts.map +1 -1
  76. package/lib/esm/BatchedSpatialTileTreeRefs.js +29 -8
  77. package/lib/esm/BatchedSpatialTileTreeRefs.js.map +1 -1
  78. package/lib/esm/BatchedTile.d.ts +2 -2
  79. package/lib/esm/BatchedTile.d.ts.map +1 -1
  80. package/lib/esm/BatchedTile.js +14 -3
  81. package/lib/esm/BatchedTile.js.map +1 -1
  82. package/lib/esm/BatchedTileContentReader.d.ts +1 -1
  83. package/lib/esm/BatchedTileContentReader.d.ts.map +1 -1
  84. package/lib/esm/BatchedTileContentReader.js +3 -0
  85. package/lib/esm/BatchedTileContentReader.js.map +1 -1
  86. package/lib/esm/BatchedTileTree.d.ts +7 -4
  87. package/lib/esm/BatchedTileTree.d.ts.map +1 -1
  88. package/lib/esm/BatchedTileTree.js +17 -5
  89. package/lib/esm/BatchedTileTree.js.map +1 -1
  90. package/lib/esm/BatchedTileTreeReference.d.ts +12 -4
  91. package/lib/esm/BatchedTileTreeReference.d.ts.map +1 -1
  92. package/lib/esm/BatchedTileTreeReference.js +25 -1
  93. package/lib/esm/BatchedTileTreeReference.js.map +1 -1
  94. package/lib/esm/BatchedTileTreeSupplier.d.ts +1 -1
  95. package/lib/esm/BatchedTileTreeSupplier.d.ts.map +1 -1
  96. package/lib/esm/BatchedTileTreeSupplier.js +3 -3
  97. package/lib/esm/BatchedTileTreeSupplier.js.map +1 -1
  98. package/lib/esm/BatchedTilesetReader.d.ts +3 -3
  99. package/lib/esm/BatchedTilesetReader.d.ts.map +1 -1
  100. package/lib/esm/BatchedTilesetReader.js +4 -1
  101. package/lib/esm/BatchedTilesetReader.js.map +1 -1
  102. package/lib/esm/FrontendTiles.d.ts +2 -2
  103. package/lib/esm/FrontendTiles.d.ts.map +1 -1
  104. package/lib/esm/FrontendTiles.js +4 -4
  105. package/lib/esm/FrontendTiles.js.map +1 -1
  106. package/lib/esm/GraphicsProvider/GraphicRepresentationProvider.d.ts +8 -15
  107. package/lib/esm/GraphicsProvider/GraphicRepresentationProvider.d.ts.map +1 -1
  108. package/lib/esm/GraphicsProvider/GraphicRepresentationProvider.js +2 -14
  109. package/lib/esm/GraphicsProvider/GraphicRepresentationProvider.js.map +1 -1
  110. package/lib/esm/GraphicsProvider/GraphicsProvider.js +3 -3
  111. package/lib/esm/GraphicsProvider/GraphicsProvider.js.map +1 -1
  112. package/lib/esm/GraphicsProvider/tileset-creators/GeoscienceTileset.d.ts +1 -1
  113. package/lib/esm/GraphicsProvider/tileset-creators/GeoscienceTileset.d.ts.map +1 -1
  114. package/lib/esm/GraphicsProvider/tileset-creators/GeoscienceTileset.js +2 -2
  115. package/lib/esm/GraphicsProvider/tileset-creators/GeoscienceTileset.js.map +1 -1
  116. package/lib/esm/GraphicsProvider/url-providers/GeoscienceUrlProvider.js +1 -1
  117. package/lib/esm/GraphicsProvider/url-providers/GeoscienceUrlProvider.js.map +1 -1
  118. package/lib/esm/IndexedDBCache.d.ts.map +1 -1
  119. package/lib/esm/IndexedDBCache.js +3 -0
  120. package/lib/esm/IndexedDBCache.js.map +1 -1
  121. package/lib/esm/ModelGroup.d.ts +1 -1
  122. package/lib/esm/ModelGroup.d.ts.map +1 -1
  123. package/lib/esm/ModelGroup.js.map +1 -1
  124. package/lib/esm/ModelGroupDisplayTransforms.js +2 -1
  125. package/lib/esm/ModelGroupDisplayTransforms.js.map +1 -1
  126. package/lib/esm/frontend-tiles.d.ts +5 -5
  127. package/lib/esm/frontend-tiles.d.ts.map +1 -1
  128. package/lib/esm/frontend-tiles.js +5 -5
  129. package/lib/esm/frontend-tiles.js.map +1 -1
  130. package/package.json +29 -21
package/CHANGELOG.md CHANGED
@@ -1,6 +1,66 @@
1
1
  # Change Log - @itwin/frontend-tiles
2
2
 
3
- This log was last generated on Thu, 14 Nov 2024 18:13:56 GMT and should not be manually modified.
3
+ This log was last generated on Thu, 10 Apr 2025 17:50:15 GMT and should not be manually modified.
4
+
5
+ ## 4.10.13
6
+ Thu, 10 Apr 2025 17:47:21 GMT
7
+
8
+ _Version update only_
9
+
10
+ ## 4.10.12
11
+ Wed, 02 Apr 2025 19:35:47 GMT
12
+
13
+ _Version update only_
14
+
15
+ ## 4.10.11
16
+ Wed, 19 Mar 2025 15:30:39 GMT
17
+
18
+ _Version update only_
19
+
20
+ ## 4.10.10
21
+ Tue, 11 Mar 2025 15:25:11 GMT
22
+
23
+ _Version update only_
24
+
25
+ ## 4.10.9
26
+ Tue, 11 Mar 2025 05:17:33 GMT
27
+
28
+ _Version update only_
29
+
30
+ ## 4.10.8
31
+ Thu, 06 Mar 2025 14:13:37 GMT
32
+
33
+ _Version update only_
34
+
35
+ ## 4.10.7
36
+ Tue, 18 Feb 2025 17:27:03 GMT
37
+
38
+ _Version update only_
39
+
40
+ ## 4.10.6
41
+ Fri, 24 Jan 2025 08:02:40 GMT
42
+
43
+ _Version update only_
44
+
45
+ ## 4.10.5
46
+ Tue, 21 Jan 2025 21:56:45 GMT
47
+
48
+ _Version update only_
49
+
50
+ ## 4.10.4
51
+ Mon, 13 Jan 2025 14:06:43 GMT
52
+
53
+ _Version update only_
54
+
55
+ ## 4.10.3
56
+ Mon, 06 Jan 2025 14:00:13 GMT
57
+
58
+ _Version update only_
59
+
60
+ ## 4.10.2
61
+ Thu, 21 Nov 2024 15:22:20 GMT
62
+
63
+ _Version update only_
4
64
 
5
65
  ## 4.10.1
6
66
  Thu, 14 Nov 2024 18:11:00 GMT
@@ -1,9 +1,9 @@
1
- import { ModelGroupDisplayTransforms } from "./ModelGroupDisplayTransforms";
2
- import { ModelGroup, ModelGroupingContext } from "./ModelGroup";
3
- import { RenderClipVolume, SpatialViewState } from "@itwin/core-frontend";
4
1
  import { Id64Set, Id64String } from "@itwin/core-bentley";
5
2
  import { PlanProjectionSettings, RenderSchedule, ViewFlagOverrides } from "@itwin/core-common";
6
- import { ModelMetadata } from "./BatchedTilesetReader";
3
+ import { RenderClipVolume, SpatialViewState } from "@itwin/core-frontend";
4
+ import { ModelMetadata } from "./BatchedTilesetReader.js";
5
+ import { ModelGroup, ModelGroupingContext } from "./ModelGroup.js";
6
+ import { ModelGroupDisplayTransforms } from "./ModelGroupDisplayTransforms.js";
7
7
  /** Groups the set of spatial models included in a [[BatchedSpatialTileTreeReferences]] based on their display settings.
8
8
  * This ensures that models are displayed correctly, while using batching to reduce the number of draw calls to a minimum.
9
9
  * The groupings are re-evaluated only when there's a possibility that they may have changed (e.g., if the view's plan projection settings or model clip groups were modified).
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedModelGroups.d.ts","sourceRoot":"","sources":["../../src/BatchedModelGroups.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAe,UAAU,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAA6B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD;;;;;;;GAOG;AACH,qBAAa,kBAAmB,YAAW,oBAAoB;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAC3D,OAAO,CAAC,OAAO,CAAC,CAAwB;IACxC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAS;IAC7B;;;;OAIG;IACI,IAAI,SAAM;IACV,MAAM,EAAE,UAAU,EAAE,CAAM;IAC1B,2BAA2B,EAAE,2BAA2B,CAAC;gBAE7C,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC;IAclJ,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI;IAK1D,oBAAoB,IAAI,IAAI;IAEnC,OAAO,CAAC,2BAA2B;IAS5B,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,gBAAgB,GAAG,SAAS;IAI/D,yBAAyB,CAAC,OAAO,EAAE,UAAU,GAAG,sBAAsB,GAAG,SAAS;IAIlF,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,cAAc,CAAC,aAAa,GAAG,SAAS;IAI/E,oBAAoB,CAAC,OAAO,EAAE,UAAU,GAAG,iBAAiB,GAAG,SAAS;IAIxE,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM;IAYvD;;OAEG;IACI,MAAM,IAAI,OAAO;CAqCzB"}
1
+ {"version":3,"file":"BatchedModelGroups.d.ts","sourceRoot":"","sources":["../../src/BatchedModelGroups.ts"],"names":[],"mappings":"AAIA,OAAO,EAA6B,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAe,UAAU,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAE/E;;;;;;;GAOG;AACH,qBAAa,kBAAmB,YAAW,oBAAoB;IAC7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;IAC3D,OAAO,CAAC,OAAO,CAAC,CAAwB;IACxC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAS;IAC7B;;;;OAIG;IACI,IAAI,SAAM;IACV,MAAM,EAAE,UAAU,EAAE,CAAM;IAC1B,2BAA2B,EAAE,2BAA2B,CAAC;gBAE7C,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC;IAclJ,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI;IAK1D,oBAAoB,IAAI,IAAI;IAEnC,OAAO,CAAC,2BAA2B;IAS5B,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,gBAAgB,GAAG,SAAS;IAI/D,yBAAyB,CAAC,OAAO,EAAE,UAAU,GAAG,sBAAsB,GAAG,SAAS;IAIlF,gBAAgB,CAAC,OAAO,EAAE,UAAU,GAAG,cAAc,CAAC,aAAa,GAAG,SAAS;IAI/E,oBAAoB,CAAC,OAAO,EAAE,UAAU,GAAG,iBAAiB,GAAG,SAAS;IAIxE,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM;IAYvD;;OAEG;IACI,MAAM,IAAI,OAAO;CAqCzB"}
@@ -5,9 +5,9 @@ exports.BatchedModelGroups = void 0;
5
5
  * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
6
  * See LICENSE.md in the project root for license terms and full copyright notice.
7
7
  *--------------------------------------------------------------------------------------------*/
8
- const ModelGroupDisplayTransforms_1 = require("./ModelGroupDisplayTransforms");
9
- const ModelGroup_1 = require("./ModelGroup");
10
8
  const core_bentley_1 = require("@itwin/core-bentley");
9
+ const ModelGroup_js_1 = require("./ModelGroup.js");
10
+ const ModelGroupDisplayTransforms_js_1 = require("./ModelGroupDisplayTransforms.js");
11
11
  /** Groups the set of spatial models included in a [[BatchedSpatialTileTreeReferences]] based on their display settings.
12
12
  * This ensures that models are displayed correctly, while using batching to reduce the number of draw calls to a minimum.
13
13
  * The groupings are re-evaluated only when there's a possibility that they may have changed (e.g., if the view's plan projection settings or model clip groups were modified).
@@ -17,22 +17,27 @@ const core_bentley_1 = require("@itwin/core-bentley");
17
17
  * @internal
18
18
  */
19
19
  class BatchedModelGroups {
20
+ _view;
21
+ _includedModelIds;
22
+ _metadata;
23
+ _script;
24
+ _transformsValid = false;
25
+ _groupsValid = false;
26
+ _scriptValid = false;
27
+ /** A stringified representation of the current groupings, of the format:
28
+ * group1_group2_group3_..._groupN
29
+ * where each group is a [CompressedId64Set]($bentley).
30
+ * @see [[BatchedTileTreeId.modelGroups]].
31
+ */
32
+ guid = "";
33
+ groups = [];
34
+ modelGroupDisplayTransforms;
20
35
  constructor(view, script, includedModelIds, metadata) {
21
- this._transformsValid = false;
22
- this._groupsValid = false;
23
- this._scriptValid = false;
24
- /** A stringified representation of the current groupings, of the format:
25
- * group1_group2_group3_..._groupN
26
- * where each group is a [CompressedId64Set]($bentley).
27
- * @see [[BatchedTileTreeId.modelGroups]].
28
- */
29
- this.guid = "";
30
- this.groups = [];
31
36
  this._script = script;
32
37
  this._view = view;
33
38
  this._includedModelIds = includedModelIds;
34
39
  this._metadata = metadata;
35
- this.modelGroupDisplayTransforms = new ModelGroupDisplayTransforms_1.ModelGroupDisplayTransforms(includedModelIds, view.modelDisplayTransformProvider);
40
+ this.modelGroupDisplayTransforms = new ModelGroupDisplayTransforms_js_1.ModelGroupDisplayTransforms(includedModelIds, view.modelDisplayTransformProvider);
36
41
  this._view.onModelDisplayTransformProviderChanged.addListener(() => this._transformsValid = false);
37
42
  this._view.details.onModelClipGroupsChanged.addListener(() => this._groupsValid = false);
38
43
  this.listenForDisplayStyleEvents();
@@ -98,7 +103,7 @@ class BatchedModelGroups {
98
103
  }
99
104
  return false; // the groupings haven't changed.
100
105
  }
101
- this.groups = (0, ModelGroup_1.groupModels)(this, this._includedModelIds);
106
+ this.groups = (0, ModelGroup_js_1.groupModels)(this, this._includedModelIds);
102
107
  const newGuid = this.groups.map((x) => core_bentley_1.CompressedId64Set.compressSet(x.modelIds)).join("_");
103
108
  const updated = newGuid !== this.guid || !this._scriptValid;
104
109
  this.guid = newGuid;
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedModelGroups.js","sourceRoot":"","sources":["../../src/BatchedModelGroups.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\nimport { ModelGroupDisplayTransforms } from \"./ModelGroupDisplayTransforms\";\r\nimport { groupModels, ModelGroup, ModelGroupingContext } from \"./ModelGroup\";\r\nimport { RenderClipVolume, SpatialViewState } from \"@itwin/core-frontend\";\r\nimport { assert, CompressedId64Set, Id64Set, Id64String } from \"@itwin/core-bentley\";\r\nimport { PlanProjectionSettings, RenderSchedule, ViewFlagOverrides } from \"@itwin/core-common\";\r\nimport { ModelMetadata } from \"./BatchedTilesetReader\";\r\n\r\n/** Groups the set of spatial models included in a [[BatchedSpatialTileTreeReferences]] based on their display settings.\r\n * This ensures that models are displayed correctly, while using batching to reduce the number of draw calls to a minimum.\r\n * The groupings are re-evaluated only when there's a possibility that they may have changed (e.g., if the view's plan projection settings or model clip groups were modified).\r\n * Unfortunately, there is currently no way to know when the transforms supplied by a [ModelDisplayTransformProvider]($frontend) may have changed, so\r\n * display transforms are re-evaluated every time the Viewport's scene is invalidated. This may (but usually won't) affect the groupings.\r\n * The BatchedSpatialTileTreeReferences object allocates new [[BatchedTileTreeReferences]] whenever the groupings change.\r\n * @internal\r\n */\r\nexport class BatchedModelGroups implements ModelGroupingContext {\r\n private readonly _view: SpatialViewState;\r\n private readonly _includedModelIds: Id64Set;\r\n private readonly _metadata: Map<Id64String, ModelMetadata>;\r\n private _script?: RenderSchedule.Script;\r\n private _transformsValid = false;\r\n private _groupsValid = false;\r\n private _scriptValid = false;\r\n /** A stringified representation of the current groupings, of the format:\r\n * group1_group2_group3_..._groupN\r\n * where each group is a [CompressedId64Set]($bentley).\r\n * @see [[BatchedTileTreeId.modelGroups]].\r\n */\r\n public guid = \"\";\r\n public groups: ModelGroup[] = [];\r\n public modelGroupDisplayTransforms: ModelGroupDisplayTransforms;\r\n\r\n public constructor(view: SpatialViewState, script: RenderSchedule.Script | undefined, includedModelIds: Id64Set, metadata: Map<Id64String, ModelMetadata>) {\r\n this._script = script;\r\n this._view = view;\r\n this._includedModelIds = includedModelIds;\r\n this._metadata = metadata;\r\n this.modelGroupDisplayTransforms = new ModelGroupDisplayTransforms(includedModelIds, view.modelDisplayTransformProvider);\r\n\r\n this._view.onModelDisplayTransformProviderChanged.addListener(() => this._transformsValid = false);\r\n this._view.details.onModelClipGroupsChanged.addListener(() => this._groupsValid = false);\r\n this.listenForDisplayStyleEvents();\r\n\r\n this.update();\r\n }\r\n\r\n public setScript(script: RenderSchedule.Script | undefined): void {\r\n this._script = script;\r\n this._scriptValid = false;\r\n }\r\n\r\n public invalidateTransforms(): void { this._transformsValid = false; }\r\n\r\n private listenForDisplayStyleEvents(): void {\r\n const removeListener = this._view.displayStyle.settings.onPlanProjectionSettingsChanged.addListener(() => this._groupsValid = false);\r\n this._view.onDisplayStyleChanged.addListener(() => {\r\n this._groupsValid = false;\r\n removeListener();\r\n this.listenForDisplayStyleEvents();\r\n });\r\n }\r\n\r\n public getModelClip(modelId: Id64String): RenderClipVolume | undefined {\r\n return this._view.getModelClip(modelId);\r\n }\r\n\r\n public getPlanProjectionSettings(modelId: Id64String): PlanProjectionSettings | undefined {\r\n return this._view.displayStyle.settings.getPlanProjectionSettings(modelId);\r\n }\r\n\r\n public getModelTimeline(modelId: Id64String): RenderSchedule.ModelTimeline | undefined {\r\n return this._script?.modelTimelines.find((x) => x.modelId === modelId);\r\n }\r\n\r\n public getViewFlagOverrides(modelId: Id64String): ViewFlagOverrides | undefined {\r\n return this._metadata.get(modelId)?.viewFlags;\r\n }\r\n\r\n public getDefaultElevation(modelId: Id64String): number {\r\n const range = this._metadata.get(modelId)?.extents;\r\n if (range) {\r\n const low = range.low.z;\r\n const high = range.high.z;\r\n if (low <= high)\r\n return (low + high) / 2;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n /** Re-evaluate transforms and groupings if they may be out of date.\r\n * @returns true if the groupings changed as a result.\r\n */\r\n public update(): boolean {\r\n if (!this._transformsValid && this.modelGroupDisplayTransforms.update(this._view.modelDisplayTransformProvider)) {\r\n this._groupsValid = false;\r\n }\r\n\r\n this._transformsValid = true;\r\n if (this._groupsValid && this._scriptValid) {\r\n // Update the display transforms on the ModelGroups.\r\n const getFirstModelId = (ids: Id64Set) => {\r\n for (const id of ids)\r\n return id;\r\n\r\n return undefined;\r\n };\r\n\r\n for (const group of this.groups) {\r\n if (group.displayTransform) {\r\n const modelId = getFirstModelId(group.modelIds);\r\n assert(undefined !== modelId);\r\n group.displayTransform = this.modelGroupDisplayTransforms.getDisplayTransform(modelId);\r\n assert(undefined !== group.displayTransform);\r\n }\r\n }\r\n\r\n return false; // the groupings haven't changed.\r\n }\r\n\r\n this.groups = groupModels(this, this._includedModelIds);\r\n const newGuid = this.groups.map((x) => CompressedId64Set.compressSet(x.modelIds)).join(\"_\");\r\n\r\n const updated = newGuid !== this.guid || !this._scriptValid;\r\n\r\n this.guid = newGuid;\r\n this._groupsValid = this._scriptValid = true;\r\n\r\n return updated;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"BatchedModelGroups.js","sourceRoot":"","sources":["../../src/BatchedModelGroups.ts"],"names":[],"mappings":";;;AAAA;;;+FAG+F;AAC/F,sDAAqF;AAIrF,mDAAgF;AAChF,qFAA+E;AAE/E;;;;;;;GAOG;AACH,MAAa,kBAAkB;IACZ,KAAK,CAAmB;IACxB,iBAAiB,CAAU;IAC3B,SAAS,CAAiC;IACnD,OAAO,CAAyB;IAChC,gBAAgB,GAAG,KAAK,CAAC;IACzB,YAAY,GAAG,KAAK,CAAC;IACrB,YAAY,GAAG,KAAK,CAAC;IAC7B;;;;OAIG;IACI,IAAI,GAAG,EAAE,CAAC;IACV,MAAM,GAAiB,EAAE,CAAC;IAC1B,2BAA2B,CAA8B;IAEhE,YAAmB,IAAsB,EAAE,MAAyC,EAAE,gBAAyB,EAAE,QAAwC;QACvJ,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;QAC1C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,2BAA2B,GAAG,IAAI,4DAA2B,CAAC,gBAAgB,EAAE,IAAI,CAAC,6BAA6B,CAAC,CAAC;QAEzH,IAAI,CAAC,KAAK,CAAC,sCAAsC,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC;QACnG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,wBAAwB,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC;QACzF,IAAI,CAAC,2BAA2B,EAAE,CAAC;QAEnC,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAEM,SAAS,CAAC,MAAyC;QACxD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,CAAC;IAEM,oBAAoB,KAAW,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,CAAC,CAAC;IAE9D,2BAA2B;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,+BAA+B,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC;QACrI,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,WAAW,CAAC,GAAG,EAAE;YAChD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,cAAc,EAAE,CAAC;YACjB,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,YAAY,CAAC,OAAmB;QACrC,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAEM,yBAAyB,CAAC,OAAmB;QAClD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC7E,CAAC;IAEM,gBAAgB,CAAC,OAAmB;QACzC,OAAO,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;IACzE,CAAC;IAEM,oBAAoB,CAAC,OAAmB;QAC7C,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAChD,CAAC;IAEM,mBAAmB,CAAC,OAAmB;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QACnD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1B,IAAI,GAAG,IAAI,IAAI;gBACb,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,CAAC,CAAC;IACX,CAAC;IAED;;OAEG;IACI,MAAM;QACX,IAAI,CAAC,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,2BAA2B,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,EAAE,CAAC;YAChH,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC7B,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAC3C,oDAAoD;YACpD,MAAM,eAAe,GAAG,CAAC,GAAY,EAAE,EAAE;gBACvC,KAAK,MAAM,EAAE,IAAI,GAAG;oBAClB,OAAO,EAAE,CAAC;gBAEZ,OAAO,SAAS,CAAC;YACnB,CAAC,CAAC;YAEF,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChC,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;oBAC3B,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBAChD,IAAA,qBAAM,EAAC,SAAS,KAAK,OAAO,CAAC,CAAC;oBAC9B,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;oBACvF,IAAA,qBAAM,EAAC,SAAS,KAAK,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;YAED,OAAO,KAAK,CAAC,CAAC,iCAAiC;QACjD,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAA,2BAAW,EAAC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gCAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE5F,MAAM,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC;QAE5D,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAE7C,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAnHD,gDAmHC","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\nimport { assert, CompressedId64Set, Id64Set, Id64String } from \"@itwin/core-bentley\";\r\nimport { PlanProjectionSettings, RenderSchedule, ViewFlagOverrides } from \"@itwin/core-common\";\r\nimport { RenderClipVolume, SpatialViewState } from \"@itwin/core-frontend\";\r\nimport { ModelMetadata } from \"./BatchedTilesetReader.js\";\r\nimport { groupModels, ModelGroup, ModelGroupingContext } from \"./ModelGroup.js\";\r\nimport { ModelGroupDisplayTransforms } from \"./ModelGroupDisplayTransforms.js\";\r\n\r\n/** Groups the set of spatial models included in a [[BatchedSpatialTileTreeReferences]] based on their display settings.\r\n * This ensures that models are displayed correctly, while using batching to reduce the number of draw calls to a minimum.\r\n * The groupings are re-evaluated only when there's a possibility that they may have changed (e.g., if the view's plan projection settings or model clip groups were modified).\r\n * Unfortunately, there is currently no way to know when the transforms supplied by a [ModelDisplayTransformProvider]($frontend) may have changed, so\r\n * display transforms are re-evaluated every time the Viewport's scene is invalidated. This may (but usually won't) affect the groupings.\r\n * The BatchedSpatialTileTreeReferences object allocates new [[BatchedTileTreeReferences]] whenever the groupings change.\r\n * @internal\r\n */\r\nexport class BatchedModelGroups implements ModelGroupingContext {\r\n private readonly _view: SpatialViewState;\r\n private readonly _includedModelIds: Id64Set;\r\n private readonly _metadata: Map<Id64String, ModelMetadata>;\r\n private _script?: RenderSchedule.Script;\r\n private _transformsValid = false;\r\n private _groupsValid = false;\r\n private _scriptValid = false;\r\n /** A stringified representation of the current groupings, of the format:\r\n * group1_group2_group3_..._groupN\r\n * where each group is a [CompressedId64Set]($bentley).\r\n * @see [[BatchedTileTreeId.modelGroups]].\r\n */\r\n public guid = \"\";\r\n public groups: ModelGroup[] = [];\r\n public modelGroupDisplayTransforms: ModelGroupDisplayTransforms;\r\n\r\n public constructor(view: SpatialViewState, script: RenderSchedule.Script | undefined, includedModelIds: Id64Set, metadata: Map<Id64String, ModelMetadata>) {\r\n this._script = script;\r\n this._view = view;\r\n this._includedModelIds = includedModelIds;\r\n this._metadata = metadata;\r\n this.modelGroupDisplayTransforms = new ModelGroupDisplayTransforms(includedModelIds, view.modelDisplayTransformProvider);\r\n\r\n this._view.onModelDisplayTransformProviderChanged.addListener(() => this._transformsValid = false);\r\n this._view.details.onModelClipGroupsChanged.addListener(() => this._groupsValid = false);\r\n this.listenForDisplayStyleEvents();\r\n\r\n this.update();\r\n }\r\n\r\n public setScript(script: RenderSchedule.Script | undefined): void {\r\n this._script = script;\r\n this._scriptValid = false;\r\n }\r\n\r\n public invalidateTransforms(): void { this._transformsValid = false; }\r\n\r\n private listenForDisplayStyleEvents(): void {\r\n const removeListener = this._view.displayStyle.settings.onPlanProjectionSettingsChanged.addListener(() => this._groupsValid = false);\r\n this._view.onDisplayStyleChanged.addListener(() => {\r\n this._groupsValid = false;\r\n removeListener();\r\n this.listenForDisplayStyleEvents();\r\n });\r\n }\r\n\r\n public getModelClip(modelId: Id64String): RenderClipVolume | undefined {\r\n return this._view.getModelClip(modelId);\r\n }\r\n\r\n public getPlanProjectionSettings(modelId: Id64String): PlanProjectionSettings | undefined {\r\n return this._view.displayStyle.settings.getPlanProjectionSettings(modelId);\r\n }\r\n\r\n public getModelTimeline(modelId: Id64String): RenderSchedule.ModelTimeline | undefined {\r\n return this._script?.modelTimelines.find((x) => x.modelId === modelId);\r\n }\r\n\r\n public getViewFlagOverrides(modelId: Id64String): ViewFlagOverrides | undefined {\r\n return this._metadata.get(modelId)?.viewFlags;\r\n }\r\n\r\n public getDefaultElevation(modelId: Id64String): number {\r\n const range = this._metadata.get(modelId)?.extents;\r\n if (range) {\r\n const low = range.low.z;\r\n const high = range.high.z;\r\n if (low <= high)\r\n return (low + high) / 2;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n /** Re-evaluate transforms and groupings if they may be out of date.\r\n * @returns true if the groupings changed as a result.\r\n */\r\n public update(): boolean {\r\n if (!this._transformsValid && this.modelGroupDisplayTransforms.update(this._view.modelDisplayTransformProvider)) {\r\n this._groupsValid = false;\r\n }\r\n\r\n this._transformsValid = true;\r\n if (this._groupsValid && this._scriptValid) {\r\n // Update the display transforms on the ModelGroups.\r\n const getFirstModelId = (ids: Id64Set) => {\r\n for (const id of ids)\r\n return id;\r\n\r\n return undefined;\r\n };\r\n\r\n for (const group of this.groups) {\r\n if (group.displayTransform) {\r\n const modelId = getFirstModelId(group.modelIds);\r\n assert(undefined !== modelId);\r\n group.displayTransform = this.modelGroupDisplayTransforms.getDisplayTransform(modelId);\r\n assert(undefined !== group.displayTransform);\r\n }\r\n }\r\n\r\n return false; // the groupings haven't changed.\r\n }\r\n\r\n this.groups = groupModels(this, this._includedModelIds);\r\n const newGuid = this.groups.map((x) => CompressedId64Set.compressSet(x.modelIds)).join(\"_\");\r\n\r\n const updated = newGuid !== this.guid || !this._scriptValid;\r\n\r\n this.guid = newGuid;\r\n this._groupsValid = this._scriptValid = true;\r\n\r\n return updated;\r\n }\r\n}\r\n"]}
@@ -1,7 +1,7 @@
1
1
  import { Id64String } from "@itwin/core-bentley";
2
- import { Range3d } from "@itwin/core-geometry";
3
2
  import { SpatialViewState } from "@itwin/core-frontend";
4
- import { ModelMetadata } from "./BatchedTilesetReader";
3
+ import { Range3d } from "@itwin/core-geometry";
4
+ import { ModelMetadata } from "./BatchedTilesetReader.js";
5
5
  export declare class BatchedModels {
6
6
  private _viewedModels;
7
7
  private readonly _projectExtents;
@@ -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;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAwB;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;gBAExC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC;IAM5E,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI;IAe9C,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS;IAIzD,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,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,qBAAa,aAAa;IACxB,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAwB;IAC5D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAiC;gBAExC,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC;IAM5E,eAAe,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,GAAG,IAAI;IAe9C,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS;IAIzD,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"}
@@ -8,9 +8,12 @@ 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
10
  class BatchedModels {
11
+ _viewedModels;
12
+ _projectExtents;
13
+ _viewedExtents = new core_geometry_1.Range3d();
14
+ _viewedModelIdPairs = new core_bentley_1.Id64.Uint32Set();
15
+ _metadata;
11
16
  constructor(view, metadata) {
12
- this._viewedExtents = new core_geometry_1.Range3d();
13
- this._viewedModelIdPairs = new core_bentley_1.Id64.Uint32Set();
14
17
  this._metadata = metadata;
15
18
  this._projectExtents = view.iModel.projectExtents;
16
19
  this.setViewedModels(view.modelSelector.models);
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedModels.js","sourceRoot":"","sources":["../../src/BatchedModels.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,sDAAuD;AACvD,wDAA+C;AAI/C,MAAa,aAAa;IAOxB,YAAmB,IAAsB,EAAE,QAAwC;QAJlE,mBAAc,GAAG,IAAI,uBAAO,EAAE,CAAC;QAC/B,wBAAmB,GAAG,IAAI,mBAAI,CAAC,SAAS,EAAE,CAAC;QAI1D,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;QAClD,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,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;YACnD,IAAI,KAAK;gBACP,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3E,CAAC;IAEM,eAAe,CAAC,OAAmB;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC9C,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;AA3CD,sCA2CC","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 { SpatialViewState } from \"@itwin/core-frontend\";\r\nimport { ModelMetadata } from \"./BatchedTilesetReader\";\r\n\r\nexport class BatchedModels {\r\n private _viewedModels!: Set<Id64String>;\r\n private readonly _projectExtents: Range3d;\r\n private readonly _viewedExtents = new Range3d();\r\n private readonly _viewedModelIdPairs = new Id64.Uint32Set();\r\n private readonly _metadata: Map<Id64String, ModelMetadata>;\r\n\r\n public constructor(view: SpatialViewState, metadata: Map<Id64String, ModelMetadata>) {\r\n this._metadata = metadata;\r\n this._projectExtents = view.iModel.projectExtents;\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 for (const modelId of models) {\r\n const range = this._metadata.get(modelId)?.extents;\r\n if (range)\r\n this._viewedExtents.extendRange(range);\r\n }\r\n\r\n this._viewedExtents.intersect(this._projectExtents, this._viewedExtents);\r\n }\r\n\r\n public getModelExtents(modelId: Id64String): Range3d | undefined {\r\n return this._metadata.get(modelId)?.extents;\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;AAEvD,wDAA+C;AAG/C,MAAa,aAAa;IAChB,aAAa,CAAmB;IACvB,eAAe,CAAU;IACzB,cAAc,GAAG,IAAI,uBAAO,EAAE,CAAC;IAC/B,mBAAmB,GAAG,IAAI,mBAAI,CAAC,SAAS,EAAE,CAAC;IAC3C,SAAS,CAAiC;IAE3D,YAAmB,IAAsB,EAAE,QAAwC;QACjF,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;QAClD,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,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;YACnD,IAAI,KAAK;gBACP,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3E,CAAC;IAEM,eAAe,CAAC,OAAmB;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC9C,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;AA3CD,sCA2CC","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 { SpatialViewState } from \"@itwin/core-frontend\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { ModelMetadata } from \"./BatchedTilesetReader.js\";\r\n\r\nexport class BatchedModels {\r\n private _viewedModels!: Set<Id64String>;\r\n private readonly _projectExtents: Range3d;\r\n private readonly _viewedExtents = new Range3d();\r\n private readonly _viewedModelIdPairs = new Id64.Uint32Set();\r\n private readonly _metadata: Map<Id64String, ModelMetadata>;\r\n\r\n public constructor(view: SpatialViewState, metadata: Map<Id64String, ModelMetadata>) {\r\n this._metadata = metadata;\r\n this._projectExtents = view.iModel.projectExtents;\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 for (const modelId of models) {\r\n const range = this._metadata.get(modelId)?.extents;\r\n if (range)\r\n this._viewedExtents.extendRange(range);\r\n }\r\n\r\n this._viewedExtents.intersect(this._projectExtents, this._viewedExtents);\r\n }\r\n\r\n public getModelExtents(modelId: Id64String): Range3d | undefined {\r\n return this._metadata.get(modelId)?.extents;\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,5 +1,5 @@
1
1
  import { SpatialTileTreeReferences, SpatialViewState } from "@itwin/core-frontend";
2
- import { ComputeSpatialTilesetBaseUrl } from "./FrontendTiles";
2
+ import { ComputeSpatialTilesetBaseUrl } from "./FrontendTiles.js";
3
3
  /** @internal */
4
4
  export declare function createBatchedSpatialTileTreeReferences(view: SpatialViewState, computeBaseUrl: ComputeSpatialTilesetBaseUrl, nopFallback?: boolean): SpatialTileTreeReferences;
5
5
  //# sourceMappingURL=BatchedSpatialTileTreeRefs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedSpatialTileTreeRefs.d.ts","sourceRoot":"","sources":["../../src/BatchedSpatialTileTreeRefs.ts"],"names":[],"mappings":"AAOA,OAAO,EAEoE,yBAAyB,EAAE,gBAAgB,EAGrH,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAkU/D,gBAAgB;AAChB,wBAAgB,sCAAsC,CAAC,IAAI,EAAE,gBAAgB,EAAE,cAAc,EAAE,4BAA4B,EAAE,WAAW,GAAE,OAAe,GAAG,yBAAyB,CA+BpL"}
1
+ {"version":3,"file":"BatchedSpatialTileTreeRefs.d.ts","sourceRoot":"","sources":["../../src/BatchedSpatialTileTreeRefs.ts"],"names":[],"mappings":"AAOA,OAAO,EAEoE,yBAAyB,EAAE,gBAAgB,EAGrH,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAoUlE,gBAAgB;AAChB,wBAAgB,sCAAsC,CAAC,IAAI,EAAE,gBAAgB,EAAE,cAAc,EAAE,4BAA4B,EAAE,WAAW,GAAE,OAAe,GAAG,yBAAyB,CA+BpL"}
@@ -7,24 +7,34 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.createBatchedSpatialTileTreeReferences = createBatchedSpatialTileTreeReferences;
8
8
  const core_bentley_1 = require("@itwin/core-bentley");
9
9
  const core_frontend_1 = require("@itwin/core-frontend");
10
- const BatchedTileTreeReference_1 = require("./BatchedTileTreeReference");
11
- const BatchedTileTreeSupplier_1 = require("./BatchedTileTreeSupplier");
12
- const BatchedModels_1 = require("./BatchedModels");
13
- const BatchedTilesetReader_1 = require("./BatchedTilesetReader");
14
- const LoggerCategory_1 = require("./LoggerCategory");
15
- const BatchedModelGroups_1 = require("./BatchedModelGroups");
10
+ const BatchedModelGroups_js_1 = require("./BatchedModelGroups.js");
11
+ const BatchedModels_js_1 = require("./BatchedModels.js");
12
+ const BatchedTilesetReader_js_1 = require("./BatchedTilesetReader.js");
13
+ const BatchedTileTreeReference_js_1 = require("./BatchedTileTreeReference.js");
14
+ const BatchedTileTreeSupplier_js_1 = require("./BatchedTileTreeSupplier.js");
15
+ const LoggerCategory_js_1 = require("./LoggerCategory.js");
16
16
  // Obtains tiles pre-published by mesh export service.
17
17
  class BatchedSpatialTileTreeReferences {
18
+ _view;
19
+ _models;
20
+ _groups;
21
+ _spec;
22
+ _treeOwner;
23
+ _refs = [];
24
+ _currentScript;
25
+ _onModelSelectorChanged;
26
+ /** Provides tile trees for models that are not included in the batched tile set. */
27
+ _excludedRefs;
28
+ _removeSceneInvalidationListener;
18
29
  constructor(spec, view) {
19
- this._refs = [];
20
30
  this._view = view;
21
- this._models = new BatchedModels_1.BatchedModels(view, spec.models);
31
+ this._models = new BatchedModels_js_1.BatchedModels(view, spec.models);
22
32
  this._spec = spec;
23
33
  const script = view.displayStyle.scheduleScript;
24
34
  this._currentScript = script?.requiresBatching ? script : undefined;
25
35
  const includedModels = new Set(spec.models.keys());
26
36
  this._excludedRefs = (0, core_frontend_1.createSpatialTileTreeReferences)(view, includedModels);
27
- this._groups = new BatchedModelGroups_1.BatchedModelGroups(view, this._currentScript, includedModels, spec.models);
37
+ this._groups = new BatchedModelGroups_js_1.BatchedModelGroups(view, this._currentScript, includedModels, spec.models);
28
38
  this._treeOwner = this.getTreeOwner();
29
39
  this.loadRefs();
30
40
  this.listenForScriptChange();
@@ -36,7 +46,7 @@ class BatchedSpatialTileTreeReferences {
36
46
  this.loadRefs();
37
47
  }
38
48
  getTreeOwner() {
39
- return (0, BatchedTileTreeSupplier_1.getBatchedTileTreeOwner)(this._view.iModel, {
49
+ return (0, BatchedTileTreeSupplier_js_1.getBatchedTileTreeOwner)(this._view.iModel, {
40
50
  spec: this._spec,
41
51
  script: this._currentScript,
42
52
  modelGroups: this._groups.guid,
@@ -67,13 +77,16 @@ class BatchedSpatialTileTreeReferences {
67
77
  groups,
68
78
  treeOwner: this._treeOwner,
69
79
  getCurrentTimePoint: () => this._currentScript ? (this._view.displayStyle.settings.timePoint ?? this._currentScript.duration.low) : 0,
80
+ getBackgroundBase: () => this._view.displayStyle.settings.mapImagery.backgroundBase,
81
+ getBackgroundLayers: () => this._view.displayStyle.settings.mapImagery.backgroundLayers,
82
+ iModel: this._view.iModel,
70
83
  };
71
84
  for (let i = 0; i < groups.length; i++) {
72
85
  const timeline = groups[i].timeline;
73
- this._refs.push(new BatchedTileTreeReference_1.BatchedTileTreeReference(args, i, timeline ? core_frontend_1.AnimationNodeId.Untransformed : undefined));
86
+ this._refs.push(new BatchedTileTreeReference_js_1.BatchedTileTreeReference(args, i, timeline ? core_frontend_1.AnimationNodeId.Untransformed : undefined));
74
87
  if (timeline) {
75
88
  for (const nodeId of timeline.transformBatchIds)
76
- this._refs.push(new BatchedTileTreeReference_1.BatchedTileTreeReference(args, i, nodeId));
89
+ this._refs.push(new BatchedTileTreeReference_js_1.BatchedTileTreeReference(args, i, nodeId));
77
90
  }
78
91
  }
79
92
  }
@@ -157,6 +170,7 @@ class BatchedSpatialTileTreeReferences {
157
170
  // It provides a TileTreeOwner that never loads a tile tree.
158
171
  // This ensures that [ViewState.areAllTileTreesLoaded]($frontend) will not return `true` while we are loading.
159
172
  class ProxyTileTreeReference extends core_frontend_1.TileTreeReference {
173
+ _treeOwner;
160
174
  constructor(iModel) {
161
175
  super();
162
176
  this._treeOwner = {
@@ -164,7 +178,7 @@ class ProxyTileTreeReference extends core_frontend_1.TileTreeReference {
164
178
  tileTree: undefined,
165
179
  loadStatus: core_frontend_1.TileTreeLoadStatus.NotLoaded,
166
180
  load: () => undefined,
167
- dispose: () => { },
181
+ [Symbol.dispose]: () => { },
168
182
  loadTree: async () => Promise.resolve(undefined),
169
183
  };
170
184
  }
@@ -179,6 +193,11 @@ class ProxyTileTreeReference extends core_frontend_1.TileTreeReference {
179
193
  // Serves as a placeholder while we asynchronously obtain the base URL for a pre-published tileset (or asynchronously determine
180
194
  // that no such tileset exists).
181
195
  class ProxySpatialTileTreeReferences {
196
+ // Once async loading completes, all methods will be forwarded to this implementation.
197
+ _impl;
198
+ _proxyRef;
199
+ // Retained if attachToViewport is called while we are still loading; and reset if detachFromViewport is called while loading.
200
+ _attachArgs;
182
201
  constructor(view, getSpec, nopFallback = false) {
183
202
  this._proxyRef = new ProxyTileTreeReference(view.iModel);
184
203
  getSpec.then((spec) => {
@@ -205,6 +224,8 @@ class ProxySpatialTileTreeReferences {
205
224
  if (this._attachArgs) {
206
225
  this._impl.attachToViewport(this._attachArgs);
207
226
  this._attachArgs.invalidateSymbologyOverrides();
227
+ // Force scene invalidation after replacing Proxy with real BatchedTileTree
228
+ this._attachArgs.invalidateScene();
208
229
  this._attachArgs = undefined;
209
230
  }
210
231
  }
@@ -253,10 +274,10 @@ async function fetchTilesetSpec(iModel, computeBaseUrl) {
253
274
  url.search = baseUrl.search;
254
275
  const response = await fetch(url.toString());
255
276
  const json = await response.json();
256
- return BatchedTilesetReader_1.BatchedTilesetSpec.create(baseUrl, json);
277
+ return BatchedTilesetReader_js_1.BatchedTilesetSpec.create(baseUrl, json);
257
278
  }
258
279
  catch (err) {
259
- core_bentley_1.Logger.logException(LoggerCategory_1.loggerCategory, err);
280
+ core_bentley_1.Logger.logException(LoggerCategory_js_1.loggerCategory, err);
260
281
  return null;
261
282
  }
262
283
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedSpatialTileTreeRefs.js","sourceRoot":"","sources":["../../src/BatchedSpatialTileTreeRefs.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AAgV/F,wFA+BC;AA7WD,sDAA8E;AAE9E,wDAK8B;AAC9B,yEAAsG;AACtG,uEAAoE;AACpE,mDAAgD;AAEhD,iEAA4D;AAC5D,qDAAkD;AAClD,6DAA0D;AAG1D,sDAAsD;AACtD,MAAM,gCAAgC;IAapC,YAAmB,IAAwB,EAAE,IAAsB;QAP3D,UAAK,GAA+B,EAAE,CAAC;QAQ7C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,IAAI,6BAAa,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAElB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;QAChD,IAAI,CAAC,cAAc,GAAG,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAEpE,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,IAAA,+CAA+B,EAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAE3E,IAAI,CAAC,OAAO,GAAG,IAAI,uCAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9F,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEhB,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAEO,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACxB,OAAO;QAET,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAEO,YAAY;QAClB,OAAO,IAAA,iDAAuB,EAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAChD,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,MAAM,EAAE,IAAI,CAAC,cAAc;YAC3B,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;SAC/B,CAAC,CAAC;IACL,CAAC;IAEO,qBAAqB;QAC3B,MAAM,eAAe,GAAG,CAAC,SAA4C,EAAE,EAAE;YACvE,IAAI,CAAC,SAAS,EAAE,gBAAgB;gBAC9B,SAAS,GAAG,SAAS,CAAC;YAExB,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;YAC1C,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAEhC,IAAI,SAAS,KAAK,aAAa;gBAC7B,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC;oBAClE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACxC,CAAC,CAAC;QAEF,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QACxH,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE;YACxD,UAAU,EAAE,CAAC;YACb,eAAe,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YACzC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QACtH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACnC,MAAM,IAAI,GAAiC;YACzC,MAAM,EAAE,IAAI,CAAC,OAAO;YACpB,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,mBAAmB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SACtI,CAAC;QAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,mDAAwB,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,+BAAe,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;YAC7G,IAAI,QAAQ,EAAE,CAAC;gBACb,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,iBAAiB;oBAC7C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,mDAAwB,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;IACH,CAAC;IAEM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK;YAC1B,MAAM,GAAG,CAAC;QAEZ,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa;YAClC,MAAM,GAAG,CAAC;IACd,CAAC;IAEM,MAAM;QACX,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,uBAAuB;YAC9B,IAAI,CAAC,uBAAuB,EAAE,CAAC;IACnC,CAAC;IAEM,gBAAgB,CAAC,IAA0B;QAChD,IAAI,CAAC,uBAAuB,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACzE,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACzH,CAAC;IAEM,kBAAkB;QACvB,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;QACzC,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC;QAExC,IAAI,IAAI,CAAC,gCAAgC,EAAE,CAAC;YAC1C,IAAI,CAAC,gCAAgC,EAAE,CAAC;YACxC,IAAI,CAAC,gCAAgC,GAAG,SAAS,CAAC;QACpD,CAAC;IACH,CAAC;IAED,uGAAuG;IACvG,2FAA2F;IACpF,eAAe,CAAC,QAA6B,EAAE,YAAiC,EAAE,SAAkB;QACzG,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,0GAA0G;YAC1G,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC;YACtC,IAAI,WAAW,EAAE,CAAC;gBAChB,IAAI,YAAY,GAAG,KAAK,CAAC;gBACzB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;4BAClB,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;4BACvB,YAAY,GAAG,IAAI,CAAC;wBACtB,CAAC;wBACD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;wBACzD,IAAI,UAAU;4BACZ,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;oBACtC,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,+FAA+F;QAC/F,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IACxE,CAAC;IAED,qEAAqE;IAC9D,kBAAkB,CAAC,UAA2C,EAAE,UAAmB;QACxF,MAAM,eAAe,GAAiB,EAAE,CAAC;QACzC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,UAAU,EAAE,CAAC;YACf,uFAAuF;YACvF,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;gBACrC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;oBAC9B,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,gEAAgE;YAChE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;YACzC,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;gBACrC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;oBAC5B,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QACD,OAAO,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,CAAC;IAED,eAAe;IACR,cAAc;QACnB,0CAA0C;IAC5C,CAAC;CACF;AAED,iGAAiG;AACjG,4DAA4D;AAC5D,8GAA8G;AAC9G,MAAM,sBAAuB,SAAQ,iCAAiB;IAGpD,YAAmB,MAAwB;QACzC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG;YAChB,MAAM;YACN,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,kCAAkB,CAAC,SAAS;YACxC,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS;YACrB,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC;YAClB,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;SACjD,CAAC;IACJ,CAAC;IAED,IAAoB,SAAS;QAC3B,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,gEAAgE;IAChE,IAAoB,kBAAkB;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,+HAA+H;AAC/H,gCAAgC;AAChC,MAAM,8BAA8B;IAOlC,YAAmB,IAAsB,EAAE,OAA2C,EAAE,cAAuB,KAAK;QAClH,IAAI,CAAC,SAAS,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,IAA+B,EAAE,EAAE;YAC/C,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,WAAW,CAAC,IAAI,gCAAgC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACrE,CAAC;iBAAM,IAAG,WAAW,EAAE,CAAC;gBACtB,IAAI,CAAC,WAAW,CAAC,IAAI,8BAA8B,EAAE,CAAC,CAAC;YACzD,CAAC;iBAAK,CAAC;gBACL,IAAI,CAAC,WAAW,CAAC,IAAA,+CAA+B,EAAC,IAAI,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACZ,IAAG,WAAW,EAAE,CAAC;gBACf,IAAI,CAAC,WAAW,CAAC,IAAI,8BAA8B,EAAE,CAAC,CAAC;YACzD,CAAC;iBAAK,CAAC;gBACL,IAAI,CAAC,WAAW,CAAC,IAAA,+CAA+B,EAAC,IAAI,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,WAAW,CAAC,IAA+B;QACjD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,CAAC,4BAA4B,EAAE,CAAC;YAChD,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;QAC/B,CAAC;IACH,CAAC;IAEM,MAAM;QACX,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IACvB,CAAC;IAEM,gBAAgB,CAAC,IAA0B;QAChD,IAAI,IAAI,CAAC,KAAK;YACZ,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;;YAElC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC5B,CAAC;IAEM,kBAAkB;QACvB,IAAI,IAAI,CAAC,KAAK;YACZ,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;;YAEhC,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;IACjC,CAAC;IAEM,cAAc,KAAW,CAAC;IAE1B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QACvB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK;gBAC1B,MAAM,GAAG,CAAC;QACd,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,SAAS,CAAC;QACvB,CAAC;IACH,CAAC;IAEM,eAAe,CAAC,QAA6B,EAAE,YAAiC,EAAE,SAAkB;QACzG,IAAI,CAAC,KAAK,EAAE,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IACjE,CAAC;IAEM,kBAAkB,CAAC,UAA2C,EAAE,UAAmB;QACxF,IAAI,IAAI,CAAC,KAAK;YACZ,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;;YAE7D,OAAO,SAAS,CAAC;IACrB,CAAC;CACF;AAED,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAoF,CAAC;AAExH,KAAK,UAAU,gBAAgB,CAAC,MAAwB,EAAE,cAA4C;IACpG,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,SAAS,KAAK,OAAO;YACvB,OAAO,IAAI,CAAC;QAEd,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAC7C,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,yCAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,qBAAM,CAAC,YAAY,CAAC,+BAAc,EAAE,GAAG,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,8BAA8B;IAC3B,MAAM,KAAU,CAAC;IAEjB,cAAc,CAAC,SAAwC,EAAE,YAAiC,EAAE,KAA4D,IAAS,CAAC;IAElK,gBAAgB,CAAC,KAAe,IAAS,CAAC;IAE1C,kBAAkB,KAAU,CAAC;IAE7B,eAAe,CAAC,SAA8B,EAAE,aAAkC,IAAS,CAAC;IAAA,CAAC;IAE7F,kBAAkB,CAAC,WAA4C,EAAE,WAAoB;QAC1F,OAAO,SAAS,CAAC;IACnB,CAAC;IAEM,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAiC,CAAC;CAC5D;AAED,gBAAgB;AAChB,SAAgB,sCAAsC,CAAC,IAAsB,EAAE,cAA4C,EAAE,cAAuB,KAAK;IACvJ,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,IAAI,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,KAAK,GAAG,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QACjE,mBAAmB,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAEjE,OAAO,CAAC,IAAI,CAAC,CAAC,IAA+B,EAAE,EAAE;YAC/C,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC;gBACjC,mBAAmB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACZ,IAAI,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC;gBACjC,mBAAmB,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,mFAAmF;QACnF,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,IAAI,8BAA8B,EAAE,CAAC;QAC9C,CAAC;QAED,sFAAsF;QACtF,OAAO,IAAA,+CAA+B,EAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,KAAK,YAAY,OAAO;QAC1B,OAAO,IAAI,8BAA8B,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAEtE,OAAO,IAAI,gCAAgC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC","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, Logger, OrderedId64Iterable } from \"@itwin/core-bentley\";\r\nimport { RenderSchedule } from \"@itwin/core-common\";\r\nimport {\r\n AnimationNodeId,\r\n AttachToViewportArgs, createSpatialTileTreeReferences, IModelConnection, SpatialTileTreeReferences, SpatialViewState,\r\n TileTreeLoadStatus, TileTreeOwner, TileTreeReference,\r\n Viewport,\r\n} from \"@itwin/core-frontend\";\r\nimport { BatchedTileTreeReference, BatchedTileTreeReferenceArgs } 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\nimport { BatchedModelGroups } from \"./BatchedModelGroups\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\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 readonly _groups: BatchedModelGroups;\r\n private readonly _spec: BatchedTilesetSpec;\r\n private _treeOwner: TileTreeOwner;\r\n private _refs: BatchedTileTreeReference[] = [];\r\n private _currentScript?: RenderSchedule.Script;\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 private _removeSceneInvalidationListener?: () => void;\r\n\r\n public constructor(spec: BatchedTilesetSpec, view: SpatialViewState) {\r\n this._view = view;\r\n this._models = new BatchedModels(view, spec.models);\r\n this._spec = spec;\r\n\r\n const script = view.displayStyle.scheduleScript;\r\n this._currentScript = script?.requiresBatching ? script : undefined;\r\n\r\n const includedModels = new Set(spec.models.keys());\r\n this._excludedRefs = createSpatialTileTreeReferences(view, includedModels);\r\n\r\n this._groups = new BatchedModelGroups(view, this._currentScript, includedModels, spec.models);\r\n this._treeOwner = this.getTreeOwner();\r\n this.loadRefs();\r\n\r\n this.listenForScriptChange();\r\n }\r\n\r\n private ensureLoaded(): void {\r\n if (!this._groups.update())\r\n return;\r\n\r\n this._treeOwner = this.getTreeOwner();\r\n this.loadRefs();\r\n }\r\n\r\n private getTreeOwner(): TileTreeOwner {\r\n return getBatchedTileTreeOwner(this._view.iModel, {\r\n spec: this._spec,\r\n script: this._currentScript,\r\n modelGroups: this._groups.guid,\r\n });\r\n }\r\n\r\n private listenForScriptChange(): void {\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._groups.setScript(newScript);\r\n };\r\n\r\n let rmListener = this._view.displayStyle.onScheduleScriptChanged.addListener((newScript) => onScriptChanged(newScript));\r\n this._view.onDisplayStyleChanged.addListener((newStyle) => {\r\n rmListener();\r\n onScriptChanged(newStyle.scheduleScript);\r\n rmListener = this._view.displayStyle.onScheduleScriptChanged.addListener((newScript) => onScriptChanged(newScript));\r\n });\r\n }\r\n\r\n private loadRefs(): void {\r\n this._refs.length = 0;\r\n const groups = this._groups.groups;\r\n const args: BatchedTileTreeReferenceArgs = {\r\n models: this._models,\r\n groups,\r\n treeOwner: this._treeOwner,\r\n getCurrentTimePoint: () => this._currentScript ? (this._view.displayStyle.settings.timePoint ?? this._currentScript.duration.low) : 0,\r\n };\r\n\r\n for (let i = 0; i < groups.length; i++) {\r\n const timeline = groups[i].timeline;\r\n this._refs.push(new BatchedTileTreeReference(args, i, timeline ? AnimationNodeId.Untransformed : undefined));\r\n if (timeline) {\r\n for (const nodeId of timeline.transformBatchIds)\r\n this._refs.push(new BatchedTileTreeReference(args, i, nodeId));\r\n }\r\n }\r\n }\r\n\r\n public *[Symbol.iterator](): Iterator<TileTreeReference> {\r\n this.ensureLoaded();\r\n for (const ref of this._refs)\r\n yield ref;\r\n\r\n for (const ref of this._excludedRefs)\r\n yield ref;\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 this._removeSceneInvalidationListener = args.onSceneInvalidated.addListener(() => this._groups.invalidateTransforms());\r\n }\r\n\r\n public detachFromViewport(): void {\r\n this._onModelSelectorChanged = undefined;\r\n this._excludedRefs.detachFromViewport();\r\n\r\n if (this._removeSceneInvalidationListener) {\r\n this._removeSceneInvalidationListener();\r\n this._removeSceneInvalidationListener = undefined;\r\n }\r\n }\r\n\r\n // Collects the TileTreeReferences for the models that need to be drawn to create the planar clip mask.\r\n // For every model used by the mask (modelIds), extend the maskRange by that model's range.\r\n public collectMaskRefs(modelIds: OrderedId64Iterable, maskTreeRefs: TileTreeReference[], maskRange: Range3d): void {\r\n for (const ref of this._refs) {\r\n // For each ref, check to see whether one of the models that are needed are in its group's list of models.\r\n const refModelIds = ref.groupModelIds;\r\n if (refModelIds) {\r\n let haveRefModel = false;\r\n for (const modelId of modelIds) {\r\n if (refModelIds.has(modelId)) {\r\n if (!haveRefModel) {\r\n maskTreeRefs.push(ref);\r\n haveRefModel = true;\r\n }\r\n const modelRange = this._models.getModelExtents(modelId);\r\n if (modelRange)\r\n maskRange.extendRange(modelRange);\r\n }\r\n }\r\n }\r\n }\r\n // Also need to collect refs from other tile trees which are not in the batched tile tree refs.\r\n this._excludedRefs.collectMaskRefs(modelIds, maskTreeRefs, maskRange);\r\n }\r\n\r\n // Returns a list of the models that are NOT in the planar clip mask.\r\n public getModelsNotInMask(maskModels: OrderedId64Iterable | undefined, useVisible: boolean): Id64String[] | undefined {\r\n const modelsNotInMask: Id64String[] = [];\r\n const includedModels = this._spec.models.keys();\r\n if (useVisible) {\r\n // All viewed models are in the mask, so get a list of all models which are not viewed.\r\n for (const modelId of includedModels) {\r\n if (!this._models.views(modelId))\r\n modelsNotInMask.push(modelId);\r\n }\r\n } else {\r\n // Get a list of all model which are NOT in the maskModels list.\r\n const maskModelSet = new Set(maskModels);\r\n for (const modelId of includedModels) {\r\n if (!maskModelSet.has(modelId))\r\n modelsNotInMask.push(modelId);\r\n }\r\n }\r\n return modelsNotInMask.length > 0 ? modelsNotInMask : undefined;\r\n }\r\n\r\n // _view.models\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>, nopFallback: boolean = false) {\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 if(nopFallback) {\r\n this.setTreeRefs(new EmptySpatialTileTreeReferences());\r\n }else {\r\n this.setTreeRefs(createSpatialTileTreeReferences(view));\r\n }\r\n }).catch(() => {\r\n if(nopFallback) {\r\n this.setTreeRefs(new EmptySpatialTileTreeReferences());\r\n }else {\r\n this.setTreeRefs(createSpatialTileTreeReferences(view));\r\n }\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 public collectMaskRefs(modelIds: OrderedId64Iterable, maskTreeRefs: TileTreeReference[], maskRange: Range3d): void {\r\n this._impl?.collectMaskRefs(modelIds, maskTreeRefs, maskRange);\r\n }\r\n\r\n public getModelsNotInMask(maskModels: OrderedId64Iterable | undefined, useVisible: boolean): Id64String[] | undefined {\r\n if (this._impl)\r\n return this._impl.getModelsNotInMask(maskModels, useVisible);\r\n else\r\n return undefined;\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\nclass EmptySpatialTileTreeReferences implements SpatialTileTreeReferences {\r\n public update(): void {}\r\n\r\n public setDeactivated(_modelIds: string | string[] | undefined, _deactivated: boolean | undefined, _refs: \"all\" | \"animated\" | \"primary\" | \"section\" | number[]): void {}\r\n\r\n public attachToViewport(_args: Viewport): void {}\r\n\r\n public detachFromViewport(): void {}\r\n\r\n public collectMaskRefs(_modelIds: OrderedId64Iterable, _maskTreeRefs: TileTreeReference[]): void {};\r\n\r\n public getModelsNotInMask(_maskModels: OrderedId64Iterable | undefined, _useVisible: boolean): string[] | undefined {\r\n return undefined;\r\n }\r\n\r\n public *[Symbol.iterator](): Iterator<TileTreeReference> {}\r\n}\r\n\r\n/** @internal */\r\nexport function createBatchedSpatialTileTreeReferences(view: SpatialViewState, computeBaseUrl: ComputeSpatialTilesetBaseUrl, nopFallback: boolean = false): 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 empty tile tree if requested.\r\n if (nopFallback) {\r\n return new EmptySpatialTileTreeReferences();\r\n }\r\n\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, nopFallback);\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 { Id64String, Logger, OrderedId64Iterable } from \"@itwin/core-bentley\";\r\nimport { RenderSchedule } from \"@itwin/core-common\";\r\nimport {\r\n AnimationNodeId,\r\n AttachToViewportArgs, createSpatialTileTreeReferences, IModelConnection, SpatialTileTreeReferences, SpatialViewState,\r\n TileTreeLoadStatus, TileTreeOwner, TileTreeReference,\r\n Viewport,\r\n} from \"@itwin/core-frontend\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { BatchedModelGroups } from \"./BatchedModelGroups.js\";\r\nimport { BatchedModels } from \"./BatchedModels.js\";\r\nimport { BatchedTilesetSpec } from \"./BatchedTilesetReader.js\";\r\nimport { BatchedTileTreeReference, BatchedTileTreeReferenceArgs } from \"./BatchedTileTreeReference.js\";\r\nimport { getBatchedTileTreeOwner } from \"./BatchedTileTreeSupplier.js\";\r\nimport { ComputeSpatialTilesetBaseUrl } from \"./FrontendTiles.js\";\r\nimport { loggerCategory } from \"./LoggerCategory.js\";\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 readonly _groups: BatchedModelGroups;\r\n private readonly _spec: BatchedTilesetSpec;\r\n private _treeOwner: TileTreeOwner;\r\n private _refs: BatchedTileTreeReference[] = [];\r\n private _currentScript?: RenderSchedule.Script;\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 private _removeSceneInvalidationListener?: () => void;\r\n\r\n public constructor(spec: BatchedTilesetSpec, view: SpatialViewState) {\r\n this._view = view;\r\n this._models = new BatchedModels(view, spec.models);\r\n this._spec = spec;\r\n\r\n const script = view.displayStyle.scheduleScript;\r\n this._currentScript = script?.requiresBatching ? script : undefined;\r\n\r\n const includedModels = new Set(spec.models.keys());\r\n this._excludedRefs = createSpatialTileTreeReferences(view, includedModels);\r\n\r\n this._groups = new BatchedModelGroups(view, this._currentScript, includedModels, spec.models);\r\n this._treeOwner = this.getTreeOwner();\r\n this.loadRefs();\r\n\r\n this.listenForScriptChange();\r\n }\r\n\r\n private ensureLoaded(): void {\r\n if (!this._groups.update())\r\n return;\r\n\r\n this._treeOwner = this.getTreeOwner();\r\n this.loadRefs();\r\n }\r\n\r\n private getTreeOwner(): TileTreeOwner {\r\n return getBatchedTileTreeOwner(this._view.iModel, {\r\n spec: this._spec,\r\n script: this._currentScript,\r\n modelGroups: this._groups.guid,\r\n });\r\n }\r\n\r\n private listenForScriptChange(): void {\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._groups.setScript(newScript);\r\n };\r\n\r\n let rmListener = this._view.displayStyle.onScheduleScriptChanged.addListener((newScript) => onScriptChanged(newScript));\r\n this._view.onDisplayStyleChanged.addListener((newStyle) => {\r\n rmListener();\r\n onScriptChanged(newStyle.scheduleScript);\r\n rmListener = this._view.displayStyle.onScheduleScriptChanged.addListener((newScript) => onScriptChanged(newScript));\r\n });\r\n }\r\n\r\n private loadRefs(): void {\r\n this._refs.length = 0;\r\n const groups = this._groups.groups;\r\n const args: BatchedTileTreeReferenceArgs = {\r\n models: this._models,\r\n groups,\r\n treeOwner: this._treeOwner,\r\n getCurrentTimePoint: () => this._currentScript ? (this._view.displayStyle.settings.timePoint ?? this._currentScript.duration.low) : 0,\r\n getBackgroundBase: () => this._view.displayStyle.settings.mapImagery.backgroundBase,\r\n getBackgroundLayers: () => this._view.displayStyle.settings.mapImagery.backgroundLayers,\r\n iModel: this._view.iModel,\r\n };\r\n\r\n for (let i = 0; i < groups.length; i++) {\r\n const timeline = groups[i].timeline;\r\n this._refs.push(new BatchedTileTreeReference(args, i, timeline ? AnimationNodeId.Untransformed : undefined));\r\n if (timeline) {\r\n for (const nodeId of timeline.transformBatchIds)\r\n this._refs.push(new BatchedTileTreeReference(args, i, nodeId));\r\n }\r\n }\r\n }\r\n\r\n public *[Symbol.iterator](): Iterator<TileTreeReference> {\r\n this.ensureLoaded();\r\n for (const ref of this._refs)\r\n yield ref;\r\n\r\n for (const ref of this._excludedRefs)\r\n yield ref;\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 this._removeSceneInvalidationListener = args.onSceneInvalidated.addListener(() => this._groups.invalidateTransforms());\r\n }\r\n\r\n public detachFromViewport(): void {\r\n this._onModelSelectorChanged = undefined;\r\n this._excludedRefs.detachFromViewport();\r\n\r\n if (this._removeSceneInvalidationListener) {\r\n this._removeSceneInvalidationListener();\r\n this._removeSceneInvalidationListener = undefined;\r\n }\r\n }\r\n\r\n // Collects the TileTreeReferences for the models that need to be drawn to create the planar clip mask.\r\n // For every model used by the mask (modelIds), extend the maskRange by that model's range.\r\n public collectMaskRefs(modelIds: OrderedId64Iterable, maskTreeRefs: TileTreeReference[], maskRange: Range3d): void {\r\n for (const ref of this._refs) {\r\n // For each ref, check to see whether one of the models that are needed are in its group's list of models.\r\n const refModelIds = ref.groupModelIds;\r\n if (refModelIds) {\r\n let haveRefModel = false;\r\n for (const modelId of modelIds) {\r\n if (refModelIds.has(modelId)) {\r\n if (!haveRefModel) {\r\n maskTreeRefs.push(ref);\r\n haveRefModel = true;\r\n }\r\n const modelRange = this._models.getModelExtents(modelId);\r\n if (modelRange)\r\n maskRange.extendRange(modelRange);\r\n }\r\n }\r\n }\r\n }\r\n // Also need to collect refs from other tile trees which are not in the batched tile tree refs.\r\n this._excludedRefs.collectMaskRefs(modelIds, maskTreeRefs, maskRange);\r\n }\r\n\r\n // Returns a list of the models that are NOT in the planar clip mask.\r\n public getModelsNotInMask(maskModels: OrderedId64Iterable | undefined, useVisible: boolean): Id64String[] | undefined {\r\n const modelsNotInMask: Id64String[] = [];\r\n const includedModels = this._spec.models.keys();\r\n if (useVisible) {\r\n // All viewed models are in the mask, so get a list of all models which are not viewed.\r\n for (const modelId of includedModels) {\r\n if (!this._models.views(modelId))\r\n modelsNotInMask.push(modelId);\r\n }\r\n } else {\r\n // Get a list of all model which are NOT in the maskModels list.\r\n const maskModelSet = new Set(maskModels);\r\n for (const modelId of includedModels) {\r\n if (!maskModelSet.has(modelId))\r\n modelsNotInMask.push(modelId);\r\n }\r\n }\r\n return modelsNotInMask.length > 0 ? modelsNotInMask : undefined;\r\n }\r\n\r\n // _view.models\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 [Symbol.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>, nopFallback: boolean = false) {\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 if(nopFallback) {\r\n this.setTreeRefs(new EmptySpatialTileTreeReferences());\r\n }else {\r\n this.setTreeRefs(createSpatialTileTreeReferences(view));\r\n }\r\n }).catch(() => {\r\n if(nopFallback) {\r\n this.setTreeRefs(new EmptySpatialTileTreeReferences());\r\n }else {\r\n this.setTreeRefs(createSpatialTileTreeReferences(view));\r\n }\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 // Force scene invalidation after replacing Proxy with real BatchedTileTree\r\n this._attachArgs.invalidateScene();\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 public collectMaskRefs(modelIds: OrderedId64Iterable, maskTreeRefs: TileTreeReference[], maskRange: Range3d): void {\r\n this._impl?.collectMaskRefs(modelIds, maskTreeRefs, maskRange);\r\n }\r\n\r\n public getModelsNotInMask(maskModels: OrderedId64Iterable | undefined, useVisible: boolean): Id64String[] | undefined {\r\n if (this._impl)\r\n return this._impl.getModelsNotInMask(maskModels, useVisible);\r\n else\r\n return undefined;\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\nclass EmptySpatialTileTreeReferences implements SpatialTileTreeReferences {\r\n public update(): void {}\r\n\r\n public setDeactivated(_modelIds: string | string[] | undefined, _deactivated: boolean | undefined, _refs: \"all\" | \"animated\" | \"primary\" | \"section\" | number[]): void {}\r\n\r\n public attachToViewport(_args: Viewport): void {}\r\n\r\n public detachFromViewport(): void {}\r\n\r\n public collectMaskRefs(_modelIds: OrderedId64Iterable, _maskTreeRefs: TileTreeReference[]): void {};\r\n\r\n public getModelsNotInMask(_maskModels: OrderedId64Iterable | undefined, _useVisible: boolean): string[] | undefined {\r\n return undefined;\r\n }\r\n\r\n public *[Symbol.iterator](): Iterator<TileTreeReference> {}\r\n}\r\n\r\n/** @internal */\r\nexport function createBatchedSpatialTileTreeReferences(view: SpatialViewState, computeBaseUrl: ComputeSpatialTilesetBaseUrl, nopFallback: boolean = false): 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 empty tile tree if requested.\r\n if (nopFallback) {\r\n return new EmptySpatialTileTreeReferences();\r\n }\r\n\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, nopFallback);\r\n\r\n return new BatchedSpatialTileTreeReferences(entry, view);\r\n}\r\n\r\n"]}
@@ -1,8 +1,8 @@
1
1
  import { BeTimePoint } from "@itwin/core-bentley";
2
- import { Transform } from "@itwin/core-geometry";
3
2
  import { Tileset3dSchema } from "@itwin/core-common";
4
3
  import { GraphicBuilder, RenderSystem, Tile, TileBoundingBoxes, TileContent, TileDrawArgs, TileParams, TileRequest, TileRequestChannel, TileUser, Viewport } from "@itwin/core-frontend";
5
- import { BatchedTileTree } from "./BatchedTileTree";
4
+ import { Transform } from "@itwin/core-geometry";
5
+ import { BatchedTileTree } from "./BatchedTileTree.js";
6
6
  /** @internal */
7
7
  export interface BatchedTileParams extends TileParams {
8
8
  childrenProps: Tileset3dSchema.Tile[] | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedTile.d.ts","sourceRoot":"","sources":["../../src/BatchedTile.ts"],"names":[],"mappings":"AAKA,OAAO,EAAU,WAAW,EAAsB,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAY,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACU,cAAc,EAAiC,YAAY,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAChH,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAsB,QAAQ,EAAkB,QAAQ,EAClH,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD,gBAAgB;AAChB,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,aAAa,EAAE,eAAe,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;IAClD,uCAAuC;IACvC,eAAe,EAAE,SAAS,GAAG,SAAS,CAAC;CACxC;AAID,gBAAgB;AAChB,qBAAa,WAAY,SAAQ,IAAI;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAyB;IACzD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,gFAAgF;IAChF,SAAgB,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IAEzC,IAAW,WAAW,IAAI,eAAe,CAExC;gBAEkB,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe;IA4BnE,OAAO,KAAK,gBAAgB,GAE3B;IAEe,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM;IAK/F,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,0BAA0B,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI;cAoC1G,aAAa,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,SAAS,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAqBvH,IAAoB,OAAO,IAAI,kBAAkB,CAOhD;IAEqB,cAAc,CAAC,WAAW,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAOzE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;cAmCtH,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAsBnF,KAAK,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;CAY3C"}
1
+ {"version":3,"file":"BatchedTile.d.ts","sourceRoot":"","sources":["../../src/BatchedTile.ts"],"names":[],"mappings":"AAKA,OAAO,EAAU,WAAW,EAAsB,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAY,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EACU,cAAc,EAAgC,YAAY,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAC/G,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAsB,QAAQ,EAAkB,QAAQ,EAClH,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAKvD,gBAAgB;AAChB,MAAM,WAAW,iBAAkB,SAAQ,UAAU;IACnD,aAAa,EAAE,eAAe,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;IAClD,uCAAuC;IACvC,eAAe,EAAE,SAAS,GAAG,SAAS,CAAC;CACxC;AAID,gBAAgB;AAChB,qBAAa,WAAY,SAAQ,IAAI;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAyB;IACzD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,gFAAgF;IAChF,SAAgB,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IAEzC,IAAW,WAAW,IAAI,eAAe,CAExC;gBAEkB,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,eAAe;IA4BnE,OAAO,KAAK,gBAAgB,GAE3B;IAEe,mBAAmB,CAAC,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM;IAK/F,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,0BAA0B,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI;cAoC1G,aAAa,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,SAAS,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAqBvH,IAAoB,OAAO,IAAI,kBAAkB,CAOhD;IAEqB,cAAc,CAAC,WAAW,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAOzE,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;cAwCtH,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAsBnF,KAAK,CAAC,SAAS,EAAE,WAAW,GAAG,IAAI;CAY3C"}
@@ -8,19 +8,25 @@ exports.BatchedTile = void 0;
8
8
  const core_bentley_1 = require("@itwin/core-bentley");
9
9
  const core_common_1 = require("@itwin/core-common");
10
10
  const core_frontend_1 = require("@itwin/core-frontend");
11
- const LoggerCategory_1 = require("./LoggerCategory");
12
- const FrontendTiles_1 = require("./FrontendTiles");
13
- const IndexedDBCache_1 = require("./IndexedDBCache");
11
+ const core_geometry_1 = require("@itwin/core-geometry");
12
+ const FrontendTiles_js_1 = require("./FrontendTiles.js");
13
+ const IndexedDBCache_js_1 = require("./IndexedDBCache.js");
14
+ const LoggerCategory_js_1 = require("./LoggerCategory.js");
14
15
  let channel;
15
16
  /** @internal */
16
17
  class BatchedTile extends core_frontend_1.Tile {
18
+ _childrenProps;
19
+ _unskippable;
20
+ /** Transform from the tile's local coordinate system to that of the tileset. */
21
+ transformToRoot;
22
+ _localCache;
17
23
  get batchedTree() {
18
24
  return this.tree;
19
25
  }
20
26
  constructor(params, tree) {
21
27
  super(params, tree);
22
28
  // The root tile never has content, so it doesn't count toward max levels to skip.
23
- this._unskippable = 0 === (this.depth % FrontendTiles_1.frontendTilesOptions.maxLevelsToSkip);
29
+ this._unskippable = 0 === (this.depth % FrontendTiles_js_1.frontendTilesOptions.maxLevelsToSkip);
24
30
  if (params.childrenProps?.length)
25
31
  this._childrenProps = params.childrenProps;
26
32
  if (!this.contentId) {
@@ -28,7 +34,7 @@ class BatchedTile extends core_frontend_1.Tile {
28
34
  // mark "undisplayable"
29
35
  this._maximumSize = 0;
30
36
  }
31
- this._localCache = FrontendTiles_1.frontendTilesOptions.useIndexedDBCache ? new IndexedDBCache_1.IndexedDBCache("BatchedTileCache") : new IndexedDBCache_1.PassThroughCache();
37
+ this._localCache = FrontendTiles_js_1.frontendTilesOptions.useIndexedDBCache ? new IndexedDBCache_js_1.IndexedDBCache("BatchedTileCache") : new IndexedDBCache_js_1.PassThroughCache();
32
38
  if (!params.transformToRoot)
33
39
  return;
34
40
  this.transformToRoot = params.transformToRoot;
@@ -85,7 +91,7 @@ class BatchedTile extends core_frontend_1.Tile {
85
91
  }
86
92
  }
87
93
  catch (err) {
88
- core_bentley_1.Logger.logException(LoggerCategory_1.loggerCategory, err);
94
+ core_bentley_1.Logger.logException(LoggerCategory_js_1.loggerCategory, err);
89
95
  children = undefined;
90
96
  if (err instanceof Error)
91
97
  reject(err);
@@ -120,6 +126,11 @@ class BatchedTile extends core_frontend_1.Tile {
120
126
  isLeaf: this.isLeaf,
121
127
  // Don't waste time attempting to split based on model groupings if all models are in the same group.
122
128
  modelGroups: modelGroups && modelGroups.length > 1 ? modelGroups : undefined,
129
+ tileData: {
130
+ ecefTransform: this.tree.iModel.ecefLocation?.getTransform() ?? core_geometry_1.Transform.createIdentity(),
131
+ range: this.range,
132
+ layerClassifiers: this.tree.layerHandler?.layerClassifiers,
133
+ },
123
134
  });
124
135
  if (this.transformToRoot) {
125
136
  if (content.graphic) {