@itwin/core-frontend 3.0.0-dev.128 → 3.0.0-dev.133

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 (177) hide show
  1. package/lib/cjs/DisplayStyleState.d.ts +0 -3
  2. package/lib/cjs/DisplayStyleState.d.ts.map +1 -1
  3. package/lib/cjs/DisplayStyleState.js +0 -5
  4. package/lib/cjs/DisplayStyleState.js.map +1 -1
  5. package/lib/cjs/DrawingViewState.js +1 -1
  6. package/lib/cjs/DrawingViewState.js.map +1 -1
  7. package/lib/cjs/IModelConnection.d.ts +3 -5
  8. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  9. package/lib/cjs/IModelConnection.js +5 -10
  10. package/lib/cjs/IModelConnection.js.map +1 -1
  11. package/lib/cjs/RenderScheduleState.d.ts +2 -0
  12. package/lib/cjs/RenderScheduleState.d.ts.map +1 -1
  13. package/lib/cjs/RenderScheduleState.js +10 -5
  14. package/lib/cjs/RenderScheduleState.js.map +1 -1
  15. package/lib/cjs/SpatialViewState.d.ts +8 -0
  16. package/lib/cjs/SpatialViewState.d.ts.map +1 -1
  17. package/lib/cjs/SpatialViewState.js +10 -0
  18. package/lib/cjs/SpatialViewState.js.map +1 -1
  19. package/lib/cjs/SubCategoriesCache.js +1 -1
  20. package/lib/cjs/SubCategoriesCache.js.map +1 -1
  21. package/lib/cjs/ViewContext.d.ts +3 -1
  22. package/lib/cjs/ViewContext.d.ts.map +1 -1
  23. package/lib/cjs/ViewContext.js +4 -0
  24. package/lib/cjs/ViewContext.js.map +1 -1
  25. package/lib/cjs/ViewCreator2d.js +2 -2
  26. package/lib/cjs/ViewCreator2d.js.map +1 -1
  27. package/lib/cjs/ViewCreator3d.js +1 -1
  28. package/lib/cjs/ViewCreator3d.js.map +1 -1
  29. package/lib/cjs/render/GraphicBranch.d.ts +18 -2
  30. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  31. package/lib/cjs/render/GraphicBranch.js +9 -1
  32. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  33. package/lib/cjs/render/RenderSystem.d.ts +7 -0
  34. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  35. package/lib/cjs/render/RenderSystem.js +9 -0
  36. package/lib/cjs/render/RenderSystem.js.map +1 -1
  37. package/lib/cjs/render/RenderTarget.d.ts +7 -0
  38. package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
  39. package/lib/cjs/render/RenderTarget.js.map +1 -1
  40. package/lib/cjs/render/webgl/DrawCommand.d.ts +0 -1
  41. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  42. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  43. package/lib/cjs/render/webgl/Graphic.d.ts +13 -0
  44. package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
  45. package/lib/cjs/render/webgl/Graphic.js +41 -3
  46. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  47. package/lib/cjs/render/webgl/RenderCommands.d.ts +4 -0
  48. package/lib/cjs/render/webgl/RenderCommands.d.ts.map +1 -1
  49. package/lib/cjs/render/webgl/RenderCommands.js +27 -1
  50. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  51. package/lib/cjs/render/webgl/System.d.ts +1 -0
  52. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  53. package/lib/cjs/render/webgl/System.js +3 -0
  54. package/lib/cjs/render/webgl/System.js.map +1 -1
  55. package/lib/cjs/render/webgl/Target.d.ts +11 -0
  56. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  57. package/lib/cjs/render/webgl/Target.js +19 -0
  58. package/lib/cjs/render/webgl/Target.js.map +1 -1
  59. package/lib/cjs/tile/DynamicIModelTile.js +7 -1
  60. package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
  61. package/lib/cjs/tile/IModelTile.d.ts.map +1 -1
  62. package/lib/cjs/tile/IModelTile.js +8 -2
  63. package/lib/cjs/tile/IModelTile.js.map +1 -1
  64. package/lib/cjs/tile/IModelTileTree.d.ts +5 -0
  65. package/lib/cjs/tile/IModelTileTree.d.ts.map +1 -1
  66. package/lib/cjs/tile/IModelTileTree.js +15 -0
  67. package/lib/cjs/tile/IModelTileTree.js.map +1 -1
  68. package/lib/cjs/tile/ImdlReader.d.ts +18 -1
  69. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  70. package/lib/cjs/tile/ImdlReader.js +51 -26
  71. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  72. package/lib/cjs/tile/PrimaryTileTree.d.ts +14 -5
  73. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  74. package/lib/cjs/tile/PrimaryTileTree.js +65 -11
  75. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  76. package/lib/cjs/tile/Tile.d.ts.map +1 -1
  77. package/lib/cjs/tile/Tile.js +5 -1
  78. package/lib/cjs/tile/Tile.js.map +1 -1
  79. package/lib/cjs/tile/TileDrawArgs.d.ts +11 -0
  80. package/lib/cjs/tile/TileDrawArgs.d.ts.map +1 -1
  81. package/lib/cjs/tile/TileDrawArgs.js +6 -1
  82. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  83. package/lib/cjs/tile/TileTreeReference.d.ts +2 -0
  84. package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
  85. package/lib/cjs/tile/TileTreeReference.js +5 -0
  86. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  87. package/lib/cjs/tools/ElementSetTool.js +1 -1
  88. package/lib/cjs/tools/ElementSetTool.js.map +1 -1
  89. package/lib/esm/DisplayStyleState.d.ts +0 -3
  90. package/lib/esm/DisplayStyleState.d.ts.map +1 -1
  91. package/lib/esm/DisplayStyleState.js +0 -5
  92. package/lib/esm/DisplayStyleState.js.map +1 -1
  93. package/lib/esm/DrawingViewState.js +1 -1
  94. package/lib/esm/DrawingViewState.js.map +1 -1
  95. package/lib/esm/IModelConnection.d.ts +3 -5
  96. package/lib/esm/IModelConnection.d.ts.map +1 -1
  97. package/lib/esm/IModelConnection.js +5 -10
  98. package/lib/esm/IModelConnection.js.map +1 -1
  99. package/lib/esm/RenderScheduleState.d.ts +2 -0
  100. package/lib/esm/RenderScheduleState.d.ts.map +1 -1
  101. package/lib/esm/RenderScheduleState.js +8 -4
  102. package/lib/esm/RenderScheduleState.js.map +1 -1
  103. package/lib/esm/SpatialViewState.d.ts +8 -0
  104. package/lib/esm/SpatialViewState.d.ts.map +1 -1
  105. package/lib/esm/SpatialViewState.js +10 -0
  106. package/lib/esm/SpatialViewState.js.map +1 -1
  107. package/lib/esm/SubCategoriesCache.js +1 -1
  108. package/lib/esm/SubCategoriesCache.js.map +1 -1
  109. package/lib/esm/ViewContext.d.ts +3 -1
  110. package/lib/esm/ViewContext.d.ts.map +1 -1
  111. package/lib/esm/ViewContext.js +4 -0
  112. package/lib/esm/ViewContext.js.map +1 -1
  113. package/lib/esm/ViewCreator2d.js +2 -2
  114. package/lib/esm/ViewCreator2d.js.map +1 -1
  115. package/lib/esm/ViewCreator3d.js +1 -1
  116. package/lib/esm/ViewCreator3d.js.map +1 -1
  117. package/lib/esm/render/GraphicBranch.d.ts +18 -2
  118. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  119. package/lib/esm/render/GraphicBranch.js +8 -0
  120. package/lib/esm/render/GraphicBranch.js.map +1 -1
  121. package/lib/esm/render/RenderSystem.d.ts +7 -0
  122. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  123. package/lib/esm/render/RenderSystem.js +9 -0
  124. package/lib/esm/render/RenderSystem.js.map +1 -1
  125. package/lib/esm/render/RenderTarget.d.ts +7 -0
  126. package/lib/esm/render/RenderTarget.d.ts.map +1 -1
  127. package/lib/esm/render/RenderTarget.js.map +1 -1
  128. package/lib/esm/render/webgl/DrawCommand.d.ts +0 -1
  129. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  130. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  131. package/lib/esm/render/webgl/Graphic.d.ts +13 -0
  132. package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
  133. package/lib/esm/render/webgl/Graphic.js +39 -2
  134. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  135. package/lib/esm/render/webgl/RenderCommands.d.ts +4 -0
  136. package/lib/esm/render/webgl/RenderCommands.d.ts.map +1 -1
  137. package/lib/esm/render/webgl/RenderCommands.js +27 -1
  138. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  139. package/lib/esm/render/webgl/System.d.ts +1 -0
  140. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  141. package/lib/esm/render/webgl/System.js +4 -1
  142. package/lib/esm/render/webgl/System.js.map +1 -1
  143. package/lib/esm/render/webgl/Target.d.ts +11 -0
  144. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  145. package/lib/esm/render/webgl/Target.js +19 -0
  146. package/lib/esm/render/webgl/Target.js.map +1 -1
  147. package/lib/esm/tile/DynamicIModelTile.js +7 -1
  148. package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
  149. package/lib/esm/tile/IModelTile.d.ts.map +1 -1
  150. package/lib/esm/tile/IModelTile.js +8 -2
  151. package/lib/esm/tile/IModelTile.js.map +1 -1
  152. package/lib/esm/tile/IModelTileTree.d.ts +5 -0
  153. package/lib/esm/tile/IModelTileTree.d.ts.map +1 -1
  154. package/lib/esm/tile/IModelTileTree.js +15 -0
  155. package/lib/esm/tile/IModelTileTree.js.map +1 -1
  156. package/lib/esm/tile/ImdlReader.d.ts +18 -1
  157. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  158. package/lib/esm/tile/ImdlReader.js +53 -28
  159. package/lib/esm/tile/ImdlReader.js.map +1 -1
  160. package/lib/esm/tile/PrimaryTileTree.d.ts +14 -5
  161. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  162. package/lib/esm/tile/PrimaryTileTree.js +65 -11
  163. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  164. package/lib/esm/tile/Tile.d.ts.map +1 -1
  165. package/lib/esm/tile/Tile.js +5 -1
  166. package/lib/esm/tile/Tile.js.map +1 -1
  167. package/lib/esm/tile/TileDrawArgs.d.ts +11 -0
  168. package/lib/esm/tile/TileDrawArgs.d.ts.map +1 -1
  169. package/lib/esm/tile/TileDrawArgs.js +6 -1
  170. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  171. package/lib/esm/tile/TileTreeReference.d.ts +2 -0
  172. package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
  173. package/lib/esm/tile/TileTreeReference.js +5 -0
  174. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  175. package/lib/esm/tools/ElementSetTool.js +1 -1
  176. package/lib/esm/tools/ElementSetTool.js.map +1 -1
  177. package/package.json +22 -22
@@ -12,6 +12,8 @@ const core_bentley_1 = require("@itwin/core-bentley");
12
12
  const core_geometry_1 = require("@itwin/core-geometry");
13
13
  const core_common_1 = require("@itwin/core-common");
14
14
  const IModelApp_1 = require("../IModelApp");
15
+ const GraphicBranch_1 = require("../render/GraphicBranch");
16
+ const RenderScheduleState_1 = require("../RenderScheduleState");
15
17
  const internal_1 = require("./internal");
16
18
  class PlanProjectionTileTree extends internal_1.IModelTileTree {
17
19
  constructor(params, treeId, baseElevation) {
@@ -94,8 +96,11 @@ exports.disposeTileTreesForGeometricModels = disposeTileTreesForGeometricModels;
94
96
  class PrimaryTreeReference extends internal_1.TileTreeReference {
95
97
  constructor(view, model, planProjection, transformNodeId, sectionClip) {
96
98
  super();
99
+ /** Chiefly for debugging - disables iteration of this reference in SpatialModelRefs to e.g. omit the reference from the scene. */
100
+ this.deactivated = false;
97
101
  this.view = view;
98
102
  this.model = model;
103
+ this._animationTransformNodeId = transformNodeId;
99
104
  this._sectionClip = sectionClip;
100
105
  this._viewFlagOverrides = { ...model.jsonProperties.viewFlagOverrides };
101
106
  if (sectionClip) {
@@ -114,7 +119,7 @@ class PrimaryTreeReference extends internal_1.TileTreeReference {
114
119
  this._id = {
115
120
  modelId: model.id,
116
121
  is3d: model.is3d,
117
- treeId: this.createTreeId(view, model.id, transformNodeId),
122
+ treeId: this.createTreeId(view, model.id),
118
123
  isPlanProjection: planProjection,
119
124
  forceNoInstancing: this._forceNoInstancing,
120
125
  };
@@ -132,6 +137,10 @@ class PrimaryTreeReference extends internal_1.TileTreeReference {
132
137
  this._forceNoInstancing = true;
133
138
  }
134
139
  }
140
+ getAnimationTransformNodeId() {
141
+ var _a;
142
+ return (_a = this._animationTransformNodeId) !== null && _a !== void 0 ? _a : GraphicBranch_1.AnimationNodeId.Untransformed;
143
+ }
135
144
  getViewFlagOverrides(_tree) {
136
145
  return this._viewFlagOverrides;
137
146
  }
@@ -160,7 +169,7 @@ class PrimaryTreeReference extends internal_1.TileTreeReference {
160
169
  return args;
161
170
  }
162
171
  get treeOwner() {
163
- const newId = this.createTreeId(this.view, this._id.modelId, this._id.treeId.animationTransformNodeId);
172
+ const newId = this.createTreeId(this.view, this._id.modelId);
164
173
  if (0 !== (0, core_common_1.compareIModelTileTreeIds)(newId, this._id.treeId) || this._forceNoInstancing !== this._id.forceNoInstancing) {
165
174
  this._id = {
166
175
  modelId: this._id.modelId,
@@ -173,7 +182,7 @@ class PrimaryTreeReference extends internal_1.TileTreeReference {
173
182
  }
174
183
  return this._owner;
175
184
  }
176
- createTreeId(view, modelId, animationTransformNodeId) {
185
+ createTreeId(view, modelId) {
177
186
  var _a, _b, _c;
178
187
  if (this._sectionClip) {
179
188
  // We do this each time in case the ClipStyle's overrides are modified.
@@ -193,7 +202,7 @@ class PrimaryTreeReference extends internal_1.TileTreeReference {
193
202
  const visibleEdges = (_b = this._viewFlagOverrides.visibleEdges) !== null && _b !== void 0 ? _b : view.viewFlags.visibleEdges;
194
203
  const edgesRequired = visibleEdges || core_common_1.RenderMode.SmoothShade !== renderMode || IModelApp_1.IModelApp.tileAdmin.alwaysRequestEdges;
195
204
  const sectionCut = (_c = this._sectionClip) === null || _c === void 0 ? void 0 : _c.clipString;
196
- return { type: core_common_1.BatchType.Primary, edgesRequired, animationId, animationTransformNodeId, sectionCut };
205
+ return { type: core_common_1.BatchType.Primary, edgesRequired, animationId, sectionCut };
197
206
  }
198
207
  computeBaseTransform(tree) {
199
208
  return super.computeTransform(tree);
@@ -205,19 +214,35 @@ class PrimaryTreeReference extends internal_1.TileTreeReference {
205
214
  }
206
215
  /** @internal */
207
216
  class AnimatedTreeReference extends PrimaryTreeReference {
217
+ constructor(view, model, transformNodeId) {
218
+ super(view, model, false, transformNodeId);
219
+ this._branchId = (0, RenderScheduleState_1.formatAnimationBranchId)(model.id, transformNodeId);
220
+ }
208
221
  computeBaseTransform(tree) {
209
222
  var _a;
210
223
  const tf = super.computeBaseTransform(tree);
211
224
  const style = this.view.displayStyle;
212
225
  const script = style.scheduleScript;
213
- if (undefined === script || undefined === this._id.treeId.animationTransformNodeId)
226
+ if (undefined === script || undefined === this._animationTransformNodeId)
214
227
  return tf;
215
228
  const timePoint = (_a = style.settings.timePoint) !== null && _a !== void 0 ? _a : script.duration.low;
216
- const animTf = script.getTransform(this._id.modelId, this._id.treeId.animationTransformNodeId, timePoint);
229
+ const animTf = script.getTransform(this._id.modelId, this._animationTransformNodeId, timePoint);
217
230
  if (animTf)
218
231
  animTf.multiplyTransformTransform(tf, tf);
219
232
  return tf;
220
233
  }
234
+ createDrawArgs(context) {
235
+ var _a;
236
+ const animBranch = (_a = context.viewport.target.animationBranches) === null || _a === void 0 ? void 0 : _a.branchStates.get(this._branchId);
237
+ if (animBranch && animBranch.omit)
238
+ return undefined;
239
+ const args = super.createDrawArgs(context);
240
+ if ((args === null || args === void 0 ? void 0 : args.tree) && undefined !== this._animationTransformNodeId) {
241
+ (0, core_bentley_1.assert)(args.tree instanceof internal_1.IModelTileTree);
242
+ args.boundingRange = args.tree.getTransformNodeRange(this._animationTransformNodeId);
243
+ }
244
+ return args;
245
+ }
221
246
  }
222
247
  exports.AnimatedTreeReference = AnimatedTreeReference;
223
248
  class PlanProjectionTreeReference extends PrimaryTreeReference {
@@ -279,7 +304,7 @@ class PlanProjectionTreeReference extends PrimaryTreeReference {
279
304
  return this._view3d.getDisplayStyle3d().settings.getPlanProjectionSettings(this.model.id);
280
305
  }
281
306
  createTreeId(view, modelId) {
282
- const id = super.createTreeId(view, modelId, undefined);
307
+ const id = super.createTreeId(view, modelId);
283
308
  const settings = this.getSettings();
284
309
  if (undefined !== settings && settings.enforceDisplayPriority)
285
310
  id.enforceDisplayPriority = true;
@@ -351,10 +376,12 @@ class SpatialModelRefs {
351
376
  this._isPrimaryRef = this._modelRef instanceof PrimaryTreeReference;
352
377
  }
353
378
  *[Symbol.iterator]() {
354
- yield this._modelRef;
379
+ if (!this._primaryRef || !this._primaryRef.deactivated)
380
+ yield this._modelRef;
355
381
  for (const animated of this._animatedRefs)
356
- yield animated;
357
- if (this._sectionCutRef)
382
+ if (!animated.deactivated)
383
+ yield animated;
384
+ if (this._sectionCutRef && !this._sectionCutRef.deactivated)
358
385
  yield this._sectionCutRef;
359
386
  }
360
387
  updateAnimated(script) {
@@ -365,7 +392,7 @@ class SpatialModelRefs {
365
392
  const nodeIds = script === null || script === void 0 ? void 0 : script.getTransformNodeIds(ref.model.id);
366
393
  if (nodeIds)
367
394
  for (const nodeId of nodeIds)
368
- this._animatedRefs.push(new AnimatedTreeReference(ref.view, ref.model, false, nodeId));
395
+ this._animatedRefs.push(new AnimatedTreeReference(ref.view, ref.model, nodeId));
369
396
  }
370
397
  updateSectionCut(clip) {
371
398
  const ref = this._primaryRef;
@@ -380,6 +407,21 @@ class SpatialModelRefs {
380
407
  clip = undefined;
381
408
  this._sectionCutRef = clip ? createTreeRef(ref.view, ref.model, clip) : undefined;
382
409
  }
410
+ setDeactivated(deactivated, which) {
411
+ if (typeof which !== "string") {
412
+ for (const index of which)
413
+ if (this._animatedRefs[index])
414
+ this._animatedRefs[index].deactivated = deactivated !== null && deactivated !== void 0 ? deactivated : !this._animatedRefs[index].deactivated;
415
+ return;
416
+ }
417
+ if (("all" === which || "primary" === which) && this._primaryRef)
418
+ this._primaryRef.deactivated = deactivated !== null && deactivated !== void 0 ? deactivated : !this._primaryRef.deactivated;
419
+ if (("all" === which || "section" === which) && this._sectionCutRef)
420
+ this._sectionCutRef.deactivated = deactivated !== null && deactivated !== void 0 ? deactivated : !this._sectionCutRef.deactivated;
421
+ if (("all" === which || "animated" === which))
422
+ for (const ref of this._animatedRefs)
423
+ ref.deactivated = deactivated !== null && deactivated !== void 0 ? deactivated : !ref.deactivated;
424
+ }
383
425
  get _primaryRef() {
384
426
  if (!this._isPrimaryRef)
385
427
  return undefined;
@@ -406,6 +448,18 @@ class SpatialRefs {
406
448
  for (const ref of modelRef)
407
449
  yield ref;
408
450
  }
451
+ setDeactivated(modelIds, deactivated, refs) {
452
+ var _a;
453
+ if (undefined === modelIds) {
454
+ for (const model of this._refs.values())
455
+ model.setDeactivated(deactivated, refs);
456
+ return;
457
+ }
458
+ if (typeof modelIds === "string")
459
+ modelIds = [modelIds];
460
+ for (const modelId of modelIds)
461
+ (_a = this._refs.get(modelId)) === null || _a === void 0 ? void 0 : _a.setDeactivated(deactivated, refs);
462
+ }
409
463
  load() {
410
464
  var _a;
411
465
  if (!this._allLoaded) {
@@ -1 +1 @@
1
- {"version":3,"file":"PrimaryTileTree.js","sourceRoot":"","sources":["../../../src/tile/PrimaryTileTree.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/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, compareBooleans, compareStrings, Id64String } from \"@itwin/core-bentley\";\r\nimport { Geometry, Range3d, StringifiedClipVector, Transform } from \"@itwin/core-geometry\";\r\nimport {\r\n BatchType, compareIModelTileTreeIds, FeatureAppearance, FeatureAppearanceProvider, HiddenLine, iModelTileTreeIdToString, PrimaryTileTreeId, RenderMode, ViewFlagOverrides,\r\n} from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { GeometricModel3dState, GeometricModelState } from \"../ModelState\";\r\nimport { RenderClipVolume } from \"../render/RenderClipVolume\";\r\nimport { RenderScheduleState } from \"../RenderScheduleState\";\r\nimport { SpatialViewState } from \"../SpatialViewState\";\r\nimport { SceneContext } from \"../ViewContext\";\r\nimport { ModelDisplayTransformProvider, ViewState, ViewState3d } from \"../ViewState\";\r\nimport {\r\n IModelTileTree, IModelTileTreeParams, iModelTileTreeParamsFromJSON, TileDrawArgs, TileGraphicType, TileTree, TileTreeOwner, TileTreeReference,\r\n TileTreeSupplier,\r\n} from \"./internal\";\r\n\r\ninterface PrimaryTreeId {\r\n readonly treeId: PrimaryTileTreeId;\r\n readonly modelId: Id64String;\r\n readonly is3d: boolean;\r\n readonly isPlanProjection: boolean;\r\n readonly forceNoInstancing: boolean;\r\n}\r\n\r\nclass PlanProjectionTileTree extends IModelTileTree {\r\n public readonly baseElevation: number;\r\n\r\n public constructor(params: IModelTileTreeParams, treeId: PrimaryTileTreeId, baseElevation: number) {\r\n super(params, treeId);\r\n this.baseElevation = baseElevation;\r\n }\r\n}\r\n\r\nclass PrimaryTreeSupplier implements TileTreeSupplier {\r\n public constructor() {\r\n }\r\n\r\n public compareTileTreeIds(lhs: PrimaryTreeId, rhs: PrimaryTreeId): number {\r\n // NB: we don't compare isPlanProjection or is3d - they should always have the same value for a given modelId.\r\n let cmp = compareStrings(lhs.modelId, rhs.modelId);\r\n if (0 === cmp) {\r\n cmp = compareIModelTileTreeIds(lhs.treeId, rhs.treeId);\r\n if (0 === cmp)\r\n cmp = compareBooleans(lhs.forceNoInstancing, rhs.forceNoInstancing);\r\n }\r\n\r\n return cmp;\r\n }\r\n\r\n public async createTileTree(id: PrimaryTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\r\n const treeId = id.treeId;\r\n const idStr = iModelTileTreeIdToString(id.modelId, treeId, IModelApp.tileAdmin);\r\n const props = await IModelApp.tileAdmin.requestTileTreeProps(iModel, idStr);\r\n\r\n const options = {\r\n edgesRequired: treeId.edgesRequired,\r\n allowInstancing: undefined === treeId.animationId && !treeId.enforceDisplayPriority && !treeId.sectionCut && !id.forceNoInstancing,\r\n is3d: id.is3d,\r\n batchType: BatchType.Primary,\r\n };\r\n\r\n const params = iModelTileTreeParamsFromJSON(props, iModel, id.modelId, options);\r\n if (!id.isPlanProjection)\r\n return new IModelTileTree(params, id.treeId);\r\n\r\n let elevation = 0;\r\n try {\r\n const ranges = await iModel.models.queryModelRanges(id.modelId);\r\n if (1 === ranges.length) {\r\n const range = Range3d.fromJSON(ranges[0]);\r\n const lo = range.low.z;\r\n const hi = range.high.z;\r\n if (lo <= hi)\r\n elevation = (lo + hi) / 2;\r\n }\r\n } catch (_err) {\r\n //\r\n }\r\n\r\n return new PlanProjectionTileTree(params, id.treeId, elevation);\r\n }\r\n\r\n public getOwner(id: PrimaryTreeId, iModel: IModelConnection): TileTreeOwner {\r\n return iModel.tiles.getTileTreeOwner(id, this);\r\n }\r\n\r\n public addModelsAnimatedByScript(modelIds: Set<Id64String>, scriptSourceId: Id64String, trees: Iterable<{ id: PrimaryTreeId, owner: TileTreeOwner }>): void {\r\n for (const tree of trees)\r\n if (tree.id.treeId.animationId === scriptSourceId)\r\n modelIds.add(tree.id.modelId);\r\n }\r\n\r\n public addSpatialModels(modelIds: Set<Id64String>, trees: Iterable<{ id: PrimaryTreeId, owner: TileTreeOwner }>): void {\r\n for (const tree of trees)\r\n if (tree.id.is3d)\r\n modelIds.add(tree.id.modelId);\r\n }\r\n}\r\n\r\nconst primaryTreeSupplier = new PrimaryTreeSupplier();\r\n\r\n/** Find all extant tile trees associated with the specified model Ids and dispose of them.\r\n * This is used by BriefcaseConnection when a GraphicalEditingScope is exited or after a change to the models' geometry guids\r\n * is committed, undone, redone, or merged.\r\n * @internal\r\n */\r\nexport function disposeTileTreesForGeometricModels(modelIds: Set<Id64String>, iModel: IModelConnection): void {\r\n const trees = iModel.tiles.getTreeOwnersForSupplier(primaryTreeSupplier);\r\n for (const kvp of trees) {\r\n const id = kvp.id as PrimaryTreeId;\r\n assert(undefined !== id.modelId);\r\n if (modelIds.has(id.modelId))\r\n kvp.owner.dispose();\r\n }\r\n}\r\n\r\nclass PrimaryTreeReference extends TileTreeReference {\r\n public readonly view: ViewState;\r\n public readonly model: GeometricModelState;\r\n protected _viewFlagOverrides: ViewFlagOverrides;\r\n protected _id: PrimaryTreeId;\r\n private _owner: TileTreeOwner;\r\n private readonly _sectionClip?: StringifiedClipVector;\r\n private readonly _sectionCutAppearanceProvider?: FeatureAppearanceProvider;\r\n private _forceNoInstancing: boolean;\r\n\r\n public constructor(view: ViewState, model: GeometricModelState, planProjection: boolean, transformNodeId?: number, sectionClip?: StringifiedClipVector) {\r\n super();\r\n this.view = view;\r\n this.model = model;\r\n\r\n this._sectionClip = sectionClip;\r\n this._viewFlagOverrides = { ...model.jsonProperties.viewFlagOverrides };\r\n if (sectionClip) {\r\n // Clipping will be applied on backend; don't clip out cut geometry.\r\n this._viewFlagOverrides.clipVolume = false;\r\n this._sectionCutAppearanceProvider = FeatureAppearanceProvider.supplement((app: FeatureAppearance) => {\r\n const cutApp = this.view.displayStyle.settings.clipStyle.cutStyle.appearance;\r\n return cutApp ? app.extendAppearance(cutApp) : app;\r\n });\r\n }\r\n\r\n this._forceNoInstancing = false;\r\n if (!IModelApp.renderSystem.supportsNonuniformScaledInstancing) {\r\n this.checkForceNoInstancing(view.modelDisplayTransformProvider);\r\n view.onModelDisplayTransformProviderChanged.addListener((provider: ModelDisplayTransformProvider | undefined) => this.checkForceNoInstancing(provider));\r\n }\r\n\r\n this._id = {\r\n modelId: model.id,\r\n is3d: model.is3d,\r\n treeId: this.createTreeId(view, model.id, transformNodeId),\r\n isPlanProjection: planProjection,\r\n forceNoInstancing: this._forceNoInstancing,\r\n };\r\n\r\n this._owner = primaryTreeSupplier.getOwner(this._id, model.iModel);\r\n }\r\n\r\n private checkForceNoInstancing(provider: ModelDisplayTransformProvider | undefined) {\r\n this._forceNoInstancing = false;\r\n // If this model has a display transform with a non-uniform scale then instancing needs to be forced off when using WebGL1.\r\n if (undefined !== provider) {\r\n const tf = provider.getModelDisplayTransform(this.model.id, Transform.createIdentity());\r\n const sx = tf.matrix.getColumn(0).magnitudeSquared();\r\n const sy = tf.matrix.getColumn(1).magnitudeSquared();\r\n const sz = tf.matrix.getColumn(2).magnitudeSquared();\r\n if (Math.abs(sx - sy) > Geometry.smallMetricDistance || Math.abs(sx - sz) > Geometry.smallMetricDistance)\r\n this._forceNoInstancing = true;\r\n }\r\n }\r\n\r\n protected override getViewFlagOverrides(_tree: TileTree) {\r\n return this._viewFlagOverrides;\r\n }\r\n\r\n protected override getAppearanceProvider(_tree: TileTree): FeatureAppearanceProvider | undefined {\r\n if (this._sectionCutAppearanceProvider && this.view.displayStyle.settings.clipStyle.cutStyle.appearance)\r\n return this._sectionCutAppearanceProvider;\r\n\r\n return undefined;\r\n }\r\n\r\n protected override getHiddenLineSettings(_tree: TileTree): HiddenLine.Settings | undefined {\r\n return this._sectionClip ? this.view.displayStyle.settings.clipStyle.cutStyle.hiddenLine : undefined;\r\n }\r\n\r\n public override get castsShadows() {\r\n return true;\r\n }\r\n\r\n protected get isPlanProjection(): boolean {\r\n return false;\r\n }\r\n\r\n protected override getClipVolume(_tree: TileTree): RenderClipVolume | undefined {\r\n // ###TODO: reduce frequency with which getModelClip() is called\r\n return this.view.is3d() && !this._sectionClip ? this.view.getModelClip(this.model.id) : undefined;\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n const args = super.createDrawArgs(context);\r\n if (args)\r\n args.intersectionClip = this._sectionClip;\r\n\r\n return args;\r\n }\r\n\r\n public get treeOwner(): TileTreeOwner {\r\n const newId = this.createTreeId(this.view, this._id.modelId, this._id.treeId.animationTransformNodeId);\r\n if (0 !== compareIModelTileTreeIds(newId, this._id.treeId) || this._forceNoInstancing !== this._id.forceNoInstancing) {\r\n this._id = {\r\n modelId: this._id.modelId,\r\n is3d: this._id.is3d,\r\n treeId: newId,\r\n isPlanProjection: this._id.isPlanProjection,\r\n forceNoInstancing: this._forceNoInstancing,\r\n };\r\n\r\n this._owner = primaryTreeSupplier.getOwner(this._id, this.model.iModel);\r\n }\r\n\r\n return this._owner;\r\n }\r\n\r\n protected createTreeId(view: ViewState, modelId: Id64String, animationTransformNodeId: number | undefined): PrimaryTileTreeId {\r\n if (this._sectionClip) {\r\n // We do this each time in case the ClipStyle's overrides are modified.\r\n // ###TODO: can we avoid that? Event listeners maybe?\r\n this._viewFlagOverrides = {\r\n ...this.view.displayStyle.settings.clipStyle.cutStyle.viewflags,\r\n // Do not clip out the cut geometry intersecting the clip planes.\r\n clipVolume: false,\r\n // The cut geometry is planar - it should win a z-fight.\r\n // Also we need to preserve this flag if this is a plan projection tile tree reference.\r\n forceSurfaceDiscard: true,\r\n };\r\n }\r\n\r\n const script = view.displayStyle.scheduleState;\r\n const animationId = undefined !== script ? script.getModelAnimationId(modelId) : undefined;\r\n\r\n const renderMode = this._viewFlagOverrides.renderMode ?? view.viewFlags.renderMode;\r\n const visibleEdges = this._viewFlagOverrides.visibleEdges ?? view.viewFlags.visibleEdges;\r\n const edgesRequired = visibleEdges || RenderMode.SmoothShade !== renderMode || IModelApp.tileAdmin.alwaysRequestEdges;\r\n const sectionCut = this._sectionClip?.clipString;\r\n return { type: BatchType.Primary, edgesRequired, animationId, animationTransformNodeId, sectionCut };\r\n }\r\n\r\n protected computeBaseTransform(tree: TileTree): Transform {\r\n return super.computeTransform(tree);\r\n }\r\n\r\n protected override computeTransform(tree: TileTree): Transform {\r\n const tf = this.computeBaseTransform(tree);\r\n return this.view.getModelDisplayTransform(this.model.id, tf);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class AnimatedTreeReference extends PrimaryTreeReference {\r\n protected override computeBaseTransform(tree: TileTree): Transform {\r\n const tf = super.computeBaseTransform(tree);\r\n const style = this.view.displayStyle;\r\n const script = style.scheduleScript;\r\n if (undefined === script || undefined === this._id.treeId.animationTransformNodeId)\r\n return tf;\r\n\r\n const timePoint = style.settings.timePoint ?? script.duration.low;\r\n const animTf = script.getTransform(this._id.modelId, this._id.treeId.animationTransformNodeId, timePoint);\r\n if (animTf)\r\n animTf.multiplyTransformTransform(tf, tf);\r\n\r\n return tf;\r\n }\r\n}\r\n\r\nclass PlanProjectionTreeReference extends PrimaryTreeReference {\r\n private get _view3d() { return this.view as ViewState3d; }\r\n private readonly _baseTransform = Transform.createIdentity();\r\n\r\n public constructor(view: ViewState3d, model: GeometricModelState, sectionCut?: StringifiedClipVector) {\r\n super(view, model, true, undefined, sectionCut);\r\n this._viewFlagOverrides.forceSurfaceDiscard = true;\r\n }\r\n\r\n public override get castsShadows() {\r\n return false;\r\n }\r\n\r\n protected override get isPlanProjection(): boolean {\r\n return true;\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n const args = super.createDrawArgs(context);\r\n if (undefined !== args && this._id.treeId.enforceDisplayPriority) {\r\n args.drawGraphics = () => { // eslint-disable-line @typescript-eslint/unbound-method\r\n const graphics = args.produceGraphics();\r\n if (undefined !== graphics) {\r\n const settings = this.getSettings();\r\n const asOverlay = undefined !== settings && settings.overlay;\r\n const transparency = settings?.transparency || 0;\r\n\r\n let elevation = settings?.elevation;\r\n if (undefined === elevation) {\r\n const tree = this.treeOwner.tileTree;\r\n if (tree) {\r\n assert(tree instanceof PlanProjectionTileTree);\r\n elevation = tree.baseElevation;\r\n } else {\r\n elevation = 0;\r\n }\r\n }\r\n\r\n context.outputGraphic(context.target.renderSystem.createGraphicLayerContainer(graphics, asOverlay, transparency, elevation));\r\n }\r\n };\r\n }\r\n\r\n return args;\r\n }\r\n\r\n protected override computeBaseTransform(tree: TileTree): Transform {\r\n assert(tree instanceof PlanProjectionTileTree);\r\n const transform = tree.iModelTransform.clone(this._baseTransform);\r\n\r\n const elevation = this.getSettings()?.elevation;\r\n if (undefined !== elevation)\r\n transform.origin.z = elevation;\r\n\r\n return transform;\r\n }\r\n\r\n public override draw(args: TileDrawArgs): void {\r\n const settings = this.getSettings();\r\n if (undefined === settings || settings.enforceDisplayPriority || !settings.overlay)\r\n super.draw(args);\r\n else\r\n args.context.withGraphicType(TileGraphicType.Overlay, () => args.tree.draw(args));\r\n }\r\n\r\n private getSettings() {\r\n return this._view3d.getDisplayStyle3d().settings.getPlanProjectionSettings(this.model.id);\r\n }\r\n\r\n protected override createTreeId(view: ViewState, modelId: Id64String): PrimaryTileTreeId {\r\n const id = super.createTreeId(view, modelId, undefined);\r\n const settings = this.getSettings();\r\n if (undefined !== settings && settings.enforceDisplayPriority)\r\n id.enforceDisplayPriority = true;\r\n\r\n return id;\r\n }\r\n}\r\n\r\nfunction isPlanProjection(view: ViewState, model: GeometricModelState): boolean {\r\n const model3d = view.is3d() ? model.asGeometricModel3d : undefined;\r\n return undefined !== model3d && model3d.isPlanProjection;\r\n}\r\n\r\nfunction createTreeRef(view: ViewState, model: GeometricModelState, sectionCut: StringifiedClipVector | undefined): TileTreeReference {\r\n if (false !== IModelApp.renderSystem.options.planProjections && isPlanProjection(view, model))\r\n return new PlanProjectionTreeReference(view as ViewState3d, model, sectionCut);\r\n\r\n return new PrimaryTreeReference(view, model, false, undefined, sectionCut);\r\n}\r\n\r\n/** @internal */\r\nexport function createPrimaryTileTreeReference(view: ViewState, model: GeometricModelState): TileTreeReference {\r\n return createTreeRef(view, model, undefined);\r\n}\r\n\r\nclass MaskTreeReference extends TileTreeReference {\r\n protected _id: PrimaryTreeId;\r\n private _owner: TileTreeOwner;\r\n public readonly model: GeometricModelState;\r\n public override get castsShadows() { return false; }\r\n public constructor(view: ViewState, model: GeometricModelState) {\r\n super();\r\n this.model = model;\r\n this._id = {\r\n modelId: model.id,\r\n is3d: model.is3d,\r\n treeId: this.createTreeId(),\r\n isPlanProjection: isPlanProjection(view, model),\r\n forceNoInstancing: false,\r\n };\r\n\r\n this._owner = primaryTreeSupplier.getOwner(this._id, model.iModel);\r\n }\r\n\r\n public get treeOwner(): TileTreeOwner {\r\n const newId = this.createTreeId();\r\n if (0 !== compareIModelTileTreeIds(newId, this._id.treeId)) {\r\n this._id = { modelId: this._id.modelId, is3d: this._id.is3d, treeId: newId, isPlanProjection: false, forceNoInstancing: false };\r\n this._owner = primaryTreeSupplier.getOwner(this._id, this.model.iModel);\r\n }\r\n\r\n return this._owner;\r\n }\r\n protected createTreeId(): PrimaryTileTreeId {\r\n return { type: BatchType.Primary, edgesRequired: false };\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createMaskTreeReference(view: ViewState, model: GeometricModelState): TileTreeReference {\r\n return new MaskTreeReference(view, model);\r\n}\r\n\r\n/** Provides [[TileTreeReference]]s for the loaded models present in a [[SpatialViewState]]'s [[ModelSelectorState]].\r\n * @internal\r\n */\r\nexport interface SpatialTileTreeReferences extends Iterable<TileTreeReference> {\r\n /** Supplies an iterator over all of the [[TileTreeReference]]s. */\r\n readonly [Symbol.iterator]: () => Iterator<TileTreeReference>;\r\n /** Requests that the set of [[TileTreeReference]]s be updated to match the current state of the view, e.g., after the model selector's contents have changed. */\r\n readonly update: () => void;\r\n}\r\n\r\n/** Provides [[TileTreeReference]]s for the loaded models present in a [[SpatialViewState]]'s [[ModelSelectorState]].\r\n * @internal\r\n */\r\nexport namespace SpatialTileTreeReferences {\r\n /** Create a SpatialTileTreeReferences object reflecting the contents of the specified view. */\r\n export function create(view: SpatialViewState): SpatialTileTreeReferences {\r\n return new SpatialRefs(view);\r\n }\r\n}\r\n\r\n/** Represents the [[TileTreeReference]]s associated with one model in a [[SpatialTileTreeReferences]]. */\r\nclass SpatialModelRefs implements Iterable<TileTreeReference> {\r\n /** The TileTreeReference representing the model's primary content. */\r\n private readonly _modelRef: TileTreeReference;\r\n /** TileTreeReferences representing nodes transformed by the view's schedule script. */\r\n private readonly _animatedRefs: TileTreeReference[] = [];\r\n /** TileTreeReference providing cut geometry intersecting the view's clip volume. */\r\n private _sectionCutRef?: TileTreeReference;\r\n /** Whether `this._modelRef` is a [[PrimaryTreeReference]] (as opposed to, e.g., a reality model tree reference). */\r\n private readonly _isPrimaryRef: boolean;\r\n\r\n public constructor(model: GeometricModel3dState, view: SpatialViewState) {\r\n this._modelRef = model.createTileTreeReference(view);\r\n this._isPrimaryRef = this._modelRef instanceof PrimaryTreeReference;\r\n }\r\n\r\n public *[Symbol.iterator](): Iterator<TileTreeReference> {\r\n yield this._modelRef;\r\n for (const animated of this._animatedRefs)\r\n yield animated;\r\n\r\n if (this._sectionCutRef)\r\n yield this._sectionCutRef;\r\n }\r\n\r\n public updateAnimated(script: RenderScheduleState | undefined): void {\r\n const ref = this._primaryRef;\r\n if (!ref)\r\n return;\r\n\r\n this._animatedRefs.length = 0;\r\n const nodeIds = script?.getTransformNodeIds(ref.model.id);\r\n if (nodeIds)\r\n for (const nodeId of nodeIds)\r\n this._animatedRefs.push(new AnimatedTreeReference(ref.view, ref.model, false, nodeId));\r\n }\r\n\r\n public updateSectionCut(clip: StringifiedClipVector | undefined): void {\r\n const ref = this._primaryRef;\r\n if (!ref) {\r\n assert(undefined === this._sectionCutRef);\r\n return;\r\n }\r\n\r\n // If the clip isn't supposed to apply to this model, don't produce cut geometry.\r\n const vfJson = clip ? ref.model.jsonProperties.viewFlagOverrides : undefined;\r\n const vfOvrs = vfJson ? { ...vfJson } : undefined;\r\n if (vfOvrs && !vfOvrs.clipVolume)\r\n clip = undefined;\r\n\r\n this._sectionCutRef = clip ? createTreeRef(ref.view, ref.model, clip) : undefined;\r\n }\r\n\r\n private get _primaryRef(): PrimaryTreeReference | undefined {\r\n if (!this._isPrimaryRef)\r\n return undefined;\r\n\r\n assert(this._modelRef instanceof PrimaryTreeReference);\r\n return this._modelRef;\r\n }\r\n}\r\n\r\n/** Provides [[TileTreeReference]]s for the loaded models present in a [[SpatialViewState]]'s [[ModelSelectorState]]. */\r\nclass SpatialRefs implements SpatialTileTreeReferences {\r\n private _allLoaded = false;\r\n private readonly _view: SpatialViewState;\r\n private _refs = new Map<Id64String, SpatialModelRefs>();\r\n private _swapRefs = new Map<Id64String, SpatialModelRefs>();\r\n private _scheduleScript?: RenderScheduleState;\r\n private _sectionCut?: StringifiedClipVector;\r\n\r\n public constructor(view: SpatialViewState) {\r\n this._view = view;\r\n this._scheduleScript = view.displayStyle.scheduleState;\r\n this._sectionCut = this.getSectionCutFromView();\r\n }\r\n\r\n public update(): void {\r\n this._allLoaded = false;\r\n }\r\n\r\n public *[Symbol.iterator](): Iterator<TileTreeReference> {\r\n this.load();\r\n for (const modelRef of this._refs.values())\r\n for (const ref of modelRef)\r\n yield ref;\r\n }\r\n\r\n private load(): void {\r\n if (!this._allLoaded) {\r\n this._allLoaded = true;\r\n this.updateModels();\r\n }\r\n\r\n const script = this._view.displayStyle.scheduleState;\r\n if (script !== this._scheduleScript) {\r\n this._scheduleScript = script;\r\n for (const ref of this._refs.values())\r\n ref.updateAnimated(script);\r\n }\r\n\r\n const sectionCut = this.getSectionCutFromView();\r\n if (sectionCut?.clipString !== this._sectionCut?.clipString) {\r\n this._sectionCut = sectionCut;\r\n for (const ref of this._refs.values())\r\n ref.updateSectionCut(sectionCut);\r\n }\r\n }\r\n\r\n private getSectionCutFromView(): StringifiedClipVector | undefined {\r\n const wantCut = this._view.viewFlags.clipVolume && this._view.displayStyle.settings.clipStyle.produceCutGeometry;\r\n const clip = wantCut ? this._view.getViewClip() : undefined;\r\n return StringifiedClipVector.fromClipVector(clip);\r\n }\r\n\r\n /** Ensure this._refs contains a SpatialModelRefs for all loaded models in the model selector. */\r\n private updateModels(): void {\r\n const prev = this._refs;\r\n const cur = this._swapRefs;\r\n this._refs = cur;\r\n this._swapRefs = prev;\r\n cur.clear();\r\n\r\n for (const modelId of this._view.modelSelector.models) {\r\n let modelRefs = prev.get(modelId);\r\n if (!modelRefs) {\r\n const model = this._view.iModel.models.getLoaded(modelId)?.asGeometricModel3d;\r\n if (model) {\r\n modelRefs = new SpatialModelRefs(model, this._view);\r\n modelRefs.updateAnimated(this._scheduleScript);\r\n modelRefs.updateSectionCut(this._sectionCut);\r\n }\r\n }\r\n\r\n if (modelRefs)\r\n cur.set(modelId, modelRefs);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"PrimaryTileTree.js","sourceRoot":"","sources":["../../../src/tile/PrimaryTileTree.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, compareBooleans, compareStrings, Id64String } from \"@itwin/core-bentley\";\nimport { Geometry, Range3d, StringifiedClipVector, Transform } from \"@itwin/core-geometry\";\nimport {\n BatchType, compareIModelTileTreeIds, FeatureAppearance, FeatureAppearanceProvider, HiddenLine, iModelTileTreeIdToString, PrimaryTileTreeId, RenderMode, ViewFlagOverrides,\n} from \"@itwin/core-common\";\nimport { IModelApp } from \"../IModelApp\";\nimport { IModelConnection } from \"../IModelConnection\";\nimport { AnimationNodeId } from \"../render/GraphicBranch\";\nimport { GeometricModel3dState, GeometricModelState } from \"../ModelState\";\nimport { RenderClipVolume } from \"../render/RenderClipVolume\";\nimport { formatAnimationBranchId, RenderScheduleState } from \"../RenderScheduleState\";\nimport { SpatialViewState } from \"../SpatialViewState\";\nimport { SceneContext } from \"../ViewContext\";\nimport { ModelDisplayTransformProvider, ViewState, ViewState3d } from \"../ViewState\";\nimport {\n IModelTileTree, IModelTileTreeParams, iModelTileTreeParamsFromJSON, TileDrawArgs, TileGraphicType, TileTree, TileTreeOwner, TileTreeReference,\n TileTreeSupplier,\n} from \"./internal\";\n\ninterface PrimaryTreeId {\n readonly treeId: PrimaryTileTreeId;\n readonly modelId: Id64String;\n readonly is3d: boolean;\n readonly isPlanProjection: boolean;\n readonly forceNoInstancing: boolean;\n}\n\nclass PlanProjectionTileTree extends IModelTileTree {\n public readonly baseElevation: number;\n\n public constructor(params: IModelTileTreeParams, treeId: PrimaryTileTreeId, baseElevation: number) {\n super(params, treeId);\n this.baseElevation = baseElevation;\n }\n}\n\nclass PrimaryTreeSupplier implements TileTreeSupplier {\n public constructor() {\n }\n\n public compareTileTreeIds(lhs: PrimaryTreeId, rhs: PrimaryTreeId): number {\n // NB: we don't compare isPlanProjection or is3d - they should always have the same value for a given modelId.\n let cmp = compareStrings(lhs.modelId, rhs.modelId);\n if (0 === cmp) {\n cmp = compareIModelTileTreeIds(lhs.treeId, rhs.treeId);\n if (0 === cmp)\n cmp = compareBooleans(lhs.forceNoInstancing, rhs.forceNoInstancing);\n }\n\n return cmp;\n }\n\n public async createTileTree(id: PrimaryTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\n const treeId = id.treeId;\n const idStr = iModelTileTreeIdToString(id.modelId, treeId, IModelApp.tileAdmin);\n const props = await IModelApp.tileAdmin.requestTileTreeProps(iModel, idStr);\n\n const options = {\n edgesRequired: treeId.edgesRequired,\n allowInstancing: undefined === treeId.animationId && !treeId.enforceDisplayPriority && !treeId.sectionCut && !id.forceNoInstancing,\n is3d: id.is3d,\n batchType: BatchType.Primary,\n };\n\n const params = iModelTileTreeParamsFromJSON(props, iModel, id.modelId, options);\n if (!id.isPlanProjection)\n return new IModelTileTree(params, id.treeId);\n\n let elevation = 0;\n try {\n const ranges = await iModel.models.queryModelRanges(id.modelId);\n if (1 === ranges.length) {\n const range = Range3d.fromJSON(ranges[0]);\n const lo = range.low.z;\n const hi = range.high.z;\n if (lo <= hi)\n elevation = (lo + hi) / 2;\n }\n } catch (_err) {\n //\n }\n\n return new PlanProjectionTileTree(params, id.treeId, elevation);\n }\n\n public getOwner(id: PrimaryTreeId, iModel: IModelConnection): TileTreeOwner {\n return iModel.tiles.getTileTreeOwner(id, this);\n }\n\n public addModelsAnimatedByScript(modelIds: Set<Id64String>, scriptSourceId: Id64String, trees: Iterable<{ id: PrimaryTreeId, owner: TileTreeOwner }>): void {\n for (const tree of trees)\n if (tree.id.treeId.animationId === scriptSourceId)\n modelIds.add(tree.id.modelId);\n }\n\n public addSpatialModels(modelIds: Set<Id64String>, trees: Iterable<{ id: PrimaryTreeId, owner: TileTreeOwner }>): void {\n for (const tree of trees)\n if (tree.id.is3d)\n modelIds.add(tree.id.modelId);\n }\n}\n\nconst primaryTreeSupplier = new PrimaryTreeSupplier();\n\n/** Find all extant tile trees associated with the specified model Ids and dispose of them.\n * This is used by BriefcaseConnection when a GraphicalEditingScope is exited or after a change to the models' geometry guids\n * is committed, undone, redone, or merged.\n * @internal\n */\nexport function disposeTileTreesForGeometricModels(modelIds: Set<Id64String>, iModel: IModelConnection): void {\n const trees = iModel.tiles.getTreeOwnersForSupplier(primaryTreeSupplier);\n for (const kvp of trees) {\n const id = kvp.id as PrimaryTreeId;\n assert(undefined !== id.modelId);\n if (modelIds.has(id.modelId))\n kvp.owner.dispose();\n }\n}\n\nclass PrimaryTreeReference extends TileTreeReference {\n public readonly view: ViewState;\n public readonly model: GeometricModelState;\n /** Chiefly for debugging - disables iteration of this reference in SpatialModelRefs to e.g. omit the reference from the scene. */\r\n public deactivated = false;\r\n protected _viewFlagOverrides: ViewFlagOverrides;\r\n protected _id: PrimaryTreeId;\n private _owner: TileTreeOwner;\n private readonly _sectionClip?: StringifiedClipVector;\n private readonly _sectionCutAppearanceProvider?: FeatureAppearanceProvider;\n private _forceNoInstancing: boolean;\n protected readonly _animationTransformNodeId?: number;\n\n public constructor(view: ViewState, model: GeometricModelState, planProjection: boolean, transformNodeId: number | undefined, sectionClip?: StringifiedClipVector) {\n super();\n this.view = view;\n this.model = model;\n this._animationTransformNodeId = transformNodeId;\n\n this._sectionClip = sectionClip;\n this._viewFlagOverrides = { ...model.jsonProperties.viewFlagOverrides };\n if (sectionClip) {\n // Clipping will be applied on backend; don't clip out cut geometry.\n this._viewFlagOverrides.clipVolume = false;\n this._sectionCutAppearanceProvider = FeatureAppearanceProvider.supplement((app: FeatureAppearance) => {\n const cutApp = this.view.displayStyle.settings.clipStyle.cutStyle.appearance;\n return cutApp ? app.extendAppearance(cutApp) : app;\n });\n }\n\n this._forceNoInstancing = false;\n if (!IModelApp.renderSystem.supportsNonuniformScaledInstancing) {\n this.checkForceNoInstancing(view.modelDisplayTransformProvider);\n view.onModelDisplayTransformProviderChanged.addListener((provider: ModelDisplayTransformProvider | undefined) => this.checkForceNoInstancing(provider));\n }\n\n this._id = {\n modelId: model.id,\n is3d: model.is3d,\n treeId: this.createTreeId(view, model.id),\n isPlanProjection: planProjection,\n forceNoInstancing: this._forceNoInstancing,\n };\n\n this._owner = primaryTreeSupplier.getOwner(this._id, model.iModel);\n }\n\n private checkForceNoInstancing(provider: ModelDisplayTransformProvider | undefined) {\n this._forceNoInstancing = false;\n // If this model has a display transform with a non-uniform scale then instancing needs to be forced off when using WebGL1.\n if (undefined !== provider) {\n const tf = provider.getModelDisplayTransform(this.model.id, Transform.createIdentity());\n const sx = tf.matrix.getColumn(0).magnitudeSquared();\n const sy = tf.matrix.getColumn(1).magnitudeSquared();\n const sz = tf.matrix.getColumn(2).magnitudeSquared();\n if (Math.abs(sx - sy) > Geometry.smallMetricDistance || Math.abs(sx - sz) > Geometry.smallMetricDistance)\n this._forceNoInstancing = true;\n }\n }\n\n protected override getAnimationTransformNodeId() {\n return this._animationTransformNodeId ?? AnimationNodeId.Untransformed;\n }\n\n protected override getViewFlagOverrides(_tree: TileTree) {\n return this._viewFlagOverrides;\n }\n\n protected override getAppearanceProvider(_tree: TileTree): FeatureAppearanceProvider | undefined {\n if (this._sectionCutAppearanceProvider && this.view.displayStyle.settings.clipStyle.cutStyle.appearance)\n return this._sectionCutAppearanceProvider;\n\n return undefined;\n }\n\n protected override getHiddenLineSettings(_tree: TileTree): HiddenLine.Settings | undefined {\n return this._sectionClip ? this.view.displayStyle.settings.clipStyle.cutStyle.hiddenLine : undefined;\n }\n\n public override get castsShadows() {\n return true;\n }\n\n protected get isPlanProjection(): boolean {\n return false;\n }\n\n protected override getClipVolume(_tree: TileTree): RenderClipVolume | undefined {\n // ###TODO: reduce frequency with which getModelClip() is called\n return this.view.is3d() && !this._sectionClip ? this.view.getModelClip(this.model.id) : undefined;\n }\n\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\n const args = super.createDrawArgs(context);\n if (args)\n args.intersectionClip = this._sectionClip;\n\n return args;\n }\n\n public get treeOwner(): TileTreeOwner {\n const newId = this.createTreeId(this.view, this._id.modelId);\n if (0 !== compareIModelTileTreeIds(newId, this._id.treeId) || this._forceNoInstancing !== this._id.forceNoInstancing) {\n this._id = {\n modelId: this._id.modelId,\n is3d: this._id.is3d,\n treeId: newId,\n isPlanProjection: this._id.isPlanProjection,\n forceNoInstancing: this._forceNoInstancing,\n };\n\n this._owner = primaryTreeSupplier.getOwner(this._id, this.model.iModel);\n }\n\n return this._owner;\n }\n\n protected createTreeId(view: ViewState, modelId: Id64String): PrimaryTileTreeId {\n if (this._sectionClip) {\n // We do this each time in case the ClipStyle's overrides are modified.\n // ###TODO: can we avoid that? Event listeners maybe?\n this._viewFlagOverrides = {\n ...this.view.displayStyle.settings.clipStyle.cutStyle.viewflags,\n // Do not clip out the cut geometry intersecting the clip planes.\n clipVolume: false,\n // The cut geometry is planar - it should win a z-fight.\n // Also we need to preserve this flag if this is a plan projection tile tree reference.\n forceSurfaceDiscard: true,\n };\n }\n\n const script = view.displayStyle.scheduleState;\n const animationId = undefined !== script ? script.getModelAnimationId(modelId) : undefined;\n\n const renderMode = this._viewFlagOverrides.renderMode ?? view.viewFlags.renderMode;\n const visibleEdges = this._viewFlagOverrides.visibleEdges ?? view.viewFlags.visibleEdges;\n const edgesRequired = visibleEdges || RenderMode.SmoothShade !== renderMode || IModelApp.tileAdmin.alwaysRequestEdges;\n const sectionCut = this._sectionClip?.clipString;\n return { type: BatchType.Primary, edgesRequired, animationId, sectionCut };\n }\n\n protected computeBaseTransform(tree: TileTree): Transform {\n return super.computeTransform(tree);\n }\n\n protected override computeTransform(tree: TileTree): Transform {\n const tf = this.computeBaseTransform(tree);\n return this.view.getModelDisplayTransform(this.model.id, tf);\n }\n}\n\n/** @internal */\nexport class AnimatedTreeReference extends PrimaryTreeReference {\n private readonly _branchId: string;\n\n public constructor(view: ViewState, model: GeometricModelState, transformNodeId: number) {\n super(view, model, false, transformNodeId);\n this._branchId = formatAnimationBranchId(model.id, transformNodeId);\n }\n\n protected override computeBaseTransform(tree: TileTree): Transform {\n const tf = super.computeBaseTransform(tree);\n const style = this.view.displayStyle;\n const script = style.scheduleScript;\n if (undefined === script || undefined === this._animationTransformNodeId)\n return tf;\n\n const timePoint = style.settings.timePoint ?? script.duration.low;\n const animTf = script.getTransform(this._id.modelId, this._animationTransformNodeId, timePoint);\n if (animTf)\n animTf.multiplyTransformTransform(tf, tf);\n\n return tf;\n }\n\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\n const animBranch = context.viewport.target.animationBranches?.branchStates.get(this._branchId);\n if (animBranch && animBranch.omit)\n return undefined;\n\n const args = super.createDrawArgs(context);\n if (args?.tree && undefined !== this._animationTransformNodeId) {\n assert(args.tree instanceof IModelTileTree);\n args.boundingRange = args.tree.getTransformNodeRange(this._animationTransformNodeId);\n }\n\n return args;\n }\n}\n\nclass PlanProjectionTreeReference extends PrimaryTreeReference {\n private get _view3d() { return this.view as ViewState3d; }\n private readonly _baseTransform = Transform.createIdentity();\n\n public constructor(view: ViewState3d, model: GeometricModelState, sectionCut?: StringifiedClipVector) {\n super(view, model, true, undefined, sectionCut);\n this._viewFlagOverrides.forceSurfaceDiscard = true;\n }\n\n public override get castsShadows() {\n return false;\n }\n\n protected override get isPlanProjection(): boolean {\n return true;\n }\n\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\n const args = super.createDrawArgs(context);\n if (undefined !== args && this._id.treeId.enforceDisplayPriority) {\n args.drawGraphics = () => { // eslint-disable-line @typescript-eslint/unbound-method\n const graphics = args.produceGraphics();\n if (undefined !== graphics) {\n const settings = this.getSettings();\n const asOverlay = undefined !== settings && settings.overlay;\n const transparency = settings?.transparency || 0;\n\n let elevation = settings?.elevation;\n if (undefined === elevation) {\n const tree = this.treeOwner.tileTree;\n if (tree) {\n assert(tree instanceof PlanProjectionTileTree);\n elevation = tree.baseElevation;\n } else {\n elevation = 0;\n }\n }\n\n context.outputGraphic(context.target.renderSystem.createGraphicLayerContainer(graphics, asOverlay, transparency, elevation));\n }\n };\n }\n\n return args;\n }\n\n protected override computeBaseTransform(tree: TileTree): Transform {\n assert(tree instanceof PlanProjectionTileTree);\n const transform = tree.iModelTransform.clone(this._baseTransform);\n\n const elevation = this.getSettings()?.elevation;\n if (undefined !== elevation)\n transform.origin.z = elevation;\n\n return transform;\n }\n\n public override draw(args: TileDrawArgs): void {\n const settings = this.getSettings();\n if (undefined === settings || settings.enforceDisplayPriority || !settings.overlay)\n super.draw(args);\n else\n args.context.withGraphicType(TileGraphicType.Overlay, () => args.tree.draw(args));\n }\n\n private getSettings() {\n return this._view3d.getDisplayStyle3d().settings.getPlanProjectionSettings(this.model.id);\n }\n\n protected override createTreeId(view: ViewState, modelId: Id64String): PrimaryTileTreeId {\n const id = super.createTreeId(view, modelId);\n const settings = this.getSettings();\n if (undefined !== settings && settings.enforceDisplayPriority)\n id.enforceDisplayPriority = true;\n\n return id;\n }\n}\n\nfunction isPlanProjection(view: ViewState, model: GeometricModelState): boolean {\n const model3d = view.is3d() ? model.asGeometricModel3d : undefined;\n return undefined !== model3d && model3d.isPlanProjection;\n}\n\nfunction createTreeRef(view: ViewState, model: GeometricModelState, sectionCut: StringifiedClipVector | undefined): PrimaryTreeReference {\n if (false !== IModelApp.renderSystem.options.planProjections && isPlanProjection(view, model))\n return new PlanProjectionTreeReference(view as ViewState3d, model, sectionCut);\n\n return new PrimaryTreeReference(view, model, false, undefined, sectionCut);\n}\n\n/** @internal */\nexport function createPrimaryTileTreeReference(view: ViewState, model: GeometricModelState): PrimaryTreeReference {\n return createTreeRef(view, model, undefined);\n}\n\nclass MaskTreeReference extends TileTreeReference {\n protected _id: PrimaryTreeId;\n private _owner: TileTreeOwner;\n public readonly model: GeometricModelState;\n public override get castsShadows() { return false; }\n public constructor(view: ViewState, model: GeometricModelState) {\n super();\n this.model = model;\n this._id = {\n modelId: model.id,\n is3d: model.is3d,\n treeId: this.createTreeId(),\n isPlanProjection: isPlanProjection(view, model),\n forceNoInstancing: false,\n };\n\n this._owner = primaryTreeSupplier.getOwner(this._id, model.iModel);\n }\n\n public get treeOwner(): TileTreeOwner {\n const newId = this.createTreeId();\n if (0 !== compareIModelTileTreeIds(newId, this._id.treeId)) {\n this._id = { modelId: this._id.modelId, is3d: this._id.is3d, treeId: newId, isPlanProjection: false, forceNoInstancing: false };\n this._owner = primaryTreeSupplier.getOwner(this._id, this.model.iModel);\n }\n\n return this._owner;\n }\n protected createTreeId(): PrimaryTileTreeId {\n return { type: BatchType.Primary, edgesRequired: false };\n }\n}\n\n/** @internal */\nexport function createMaskTreeReference(view: ViewState, model: GeometricModelState): TileTreeReference {\n return new MaskTreeReference(view, model);\n}\n\n/** Provides [[TileTreeReference]]s for the loaded models present in a [[SpatialViewState]]'s [[ModelSelectorState]].\n * @internal\n */\nexport interface SpatialTileTreeReferences extends Iterable<TileTreeReference> {\n /** Supplies an iterator over all of the [[TileTreeReference]]s. */\n [Symbol.iterator](): Iterator<TileTreeReference>;\n /** Requests that the set of [[TileTreeReference]]s be updated to match the current state of the view, e.g., after the model selector's contents have changed. */\n update(): void;\n /** @see SpatialViewState.setTileTreeReferencesDeactivated. */\n setDeactivated(modelIds: Id64String | Id64String[] | undefined, deactivated: boolean | undefined, refs: \"all\" | \"animated\" | \"primary\" | \"section\" | number[]): void;\n}\n\n/** Provides [[TileTreeReference]]s for the loaded models present in a [[SpatialViewState]]'s [[ModelSelectorState]].\n * @internal\n */\nexport namespace SpatialTileTreeReferences {\n /** Create a SpatialTileTreeReferences object reflecting the contents of the specified view. */\n export function create(view: SpatialViewState): SpatialTileTreeReferences {\n return new SpatialRefs(view);\n }\n}\n\n/** Represents the [[TileTreeReference]]s associated with one model in a [[SpatialTileTreeReferences]]. */\nclass SpatialModelRefs implements Iterable<TileTreeReference> {\n /** The TileTreeReference representing the model's primary content. */\n private readonly _modelRef: TileTreeReference;\n /** TileTreeReferences representing nodes transformed by the view's schedule script. */\n private readonly _animatedRefs: PrimaryTreeReference[] = [];\n /** TileTreeReference providing cut geometry intersecting the view's clip volume. */\n private _sectionCutRef?: PrimaryTreeReference;\n /** Whether `this._modelRef` is a [[PrimaryTreeReference]] (as opposed to, e.g., a reality model tree reference). */\n private readonly _isPrimaryRef: boolean;\n\n public constructor(model: GeometricModel3dState, view: SpatialViewState) {\n this._modelRef = model.createTileTreeReference(view);\n this._isPrimaryRef = this._modelRef instanceof PrimaryTreeReference;\n }\n\n public *[Symbol.iterator](): Iterator<TileTreeReference> {\n if (!this._primaryRef || !this._primaryRef.deactivated)\n yield this._modelRef;\n\n for (const animated of this._animatedRefs)\n if (!animated.deactivated)\n yield animated;\n\n if (this._sectionCutRef && !this._sectionCutRef.deactivated)\n yield this._sectionCutRef;\n }\n\n public updateAnimated(script: RenderScheduleState | undefined): void {\n const ref = this._primaryRef;\n if (!ref)\n return;\n\n this._animatedRefs.length = 0;\n const nodeIds = script?.getTransformNodeIds(ref.model.id);\n if (nodeIds)\n for (const nodeId of nodeIds)\n this._animatedRefs.push(new AnimatedTreeReference(ref.view, ref.model, nodeId));\n }\n\n public updateSectionCut(clip: StringifiedClipVector | undefined): void {\n const ref = this._primaryRef;\n if (!ref) {\n assert(undefined === this._sectionCutRef);\n return;\n }\n\n // If the clip isn't supposed to apply to this model, don't produce cut geometry.\n const vfJson = clip ? ref.model.jsonProperties.viewFlagOverrides : undefined;\n const vfOvrs = vfJson ? { ...vfJson } : undefined;\n if (vfOvrs && !vfOvrs.clipVolume)\n clip = undefined;\n\n this._sectionCutRef = clip ? createTreeRef(ref.view, ref.model, clip) : undefined;\n }\n\n public setDeactivated(deactivated: boolean | undefined, which: \"all\" | \"animated\" | \"primary\" | \"section\" | number[]): void {\n if (typeof which !== \"string\") {\n for (const index of which)\n if (this._animatedRefs[index])\n this._animatedRefs[index].deactivated = deactivated ?? !this._animatedRefs[index].deactivated;\n\n return;\n }\n\n if ((\"all\" === which || \"primary\" === which) && this._primaryRef)\n this._primaryRef.deactivated = deactivated ?? !this._primaryRef.deactivated;\n\n if ((\"all\" === which || \"section\" === which) && this._sectionCutRef)\n this._sectionCutRef.deactivated = deactivated ?? !this._sectionCutRef.deactivated;\n\n if ((\"all\" === which || \"animated\" === which))\n for (const ref of this._animatedRefs)\n ref.deactivated = deactivated ?? !ref.deactivated;\n }\n\n private get _primaryRef(): PrimaryTreeReference | undefined {\n if (!this._isPrimaryRef)\n return undefined;\n\n assert(this._modelRef instanceof PrimaryTreeReference);\n return this._modelRef;\n }\n}\n\n/** Provides [[TileTreeReference]]s for the loaded models present in a [[SpatialViewState]]'s [[ModelSelectorState]]. */\nclass SpatialRefs implements SpatialTileTreeReferences {\n private _allLoaded = false;\n private readonly _view: SpatialViewState;\n private _refs = new Map<Id64String, SpatialModelRefs>();\n private _swapRefs = new Map<Id64String, SpatialModelRefs>();\n private _scheduleScript?: RenderScheduleState;\n private _sectionCut?: StringifiedClipVector;\n\n public constructor(view: SpatialViewState) {\n this._view = view;\n this._scheduleScript = view.displayStyle.scheduleState;\n this._sectionCut = this.getSectionCutFromView();\n }\n\n public update(): void {\n this._allLoaded = false;\n }\n\n public *[Symbol.iterator](): Iterator<TileTreeReference> {\n this.load();\n for (const modelRef of this._refs.values())\n for (const ref of modelRef)\n yield ref;\n }\n\n public setDeactivated(modelIds: Id64String | Id64String[] | undefined, deactivated: boolean, refs: \"all\" | \"animated\" | \"primary\" | \"section\" | number[]): void {\n if (undefined === modelIds) {\n for (const model of this._refs.values())\n model.setDeactivated(deactivated, refs);\n\n return;\n }\n\n if (typeof modelIds === \"string\")\n modelIds = [modelIds];\n\n for (const modelId of modelIds)\n this._refs.get(modelId)?.setDeactivated(deactivated, refs);\n }\n\n private load(): void {\n if (!this._allLoaded) {\n this._allLoaded = true;\n this.updateModels();\n }\n\n const script = this._view.displayStyle.scheduleState;\n if (script !== this._scheduleScript) {\n this._scheduleScript = script;\n for (const ref of this._refs.values())\n ref.updateAnimated(script);\n }\n\n const sectionCut = this.getSectionCutFromView();\n if (sectionCut?.clipString !== this._sectionCut?.clipString) {\n this._sectionCut = sectionCut;\n for (const ref of this._refs.values())\n ref.updateSectionCut(sectionCut);\n }\n }\n\n private getSectionCutFromView(): StringifiedClipVector | undefined {\n const wantCut = this._view.viewFlags.clipVolume && this._view.displayStyle.settings.clipStyle.produceCutGeometry;\n const clip = wantCut ? this._view.getViewClip() : undefined;\n return StringifiedClipVector.fromClipVector(clip);\n }\n\n /** Ensure this._refs contains a SpatialModelRefs for all loaded models in the model selector. */\n private updateModels(): void {\n const prev = this._refs;\n const cur = this._swapRefs;\n this._refs = cur;\n this._swapRefs = prev;\n cur.clear();\n\n for (const modelId of this._view.modelSelector.models) {\n let modelRefs = prev.get(modelId);\n if (!modelRefs) {\n const model = this._view.iModel.models.getLoaded(modelId)?.asGeometricModel3d;\n if (model) {\n modelRefs = new SpatialModelRefs(model, this._view);\n modelRefs.updateAnimated(this._scheduleScript);\n modelRefs.updateSectionCut(this._sectionCut);\n }\n }\n\n if (modelRefs)\n cur.set(modelId, modelRefs);\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Tile.d.ts","sourceRoot":"","sources":["../../../src/tile/Tile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Tile.d.ts","sourceRoot":"","sources":["../../../src/tile/Tile.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAA+B,QAAQ,EAAW,OAAO,EAAW,OAAO,EAAE,SAAS,EAAY,MAAM,sBAAsB,CAAC;AACtI,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,mBAAmB,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE3G,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EACL,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,eAAe,EAAE,aAAa,EACtJ,MAAM,YAAY,CAAC;AAMpB,gBAAgB;AAChB,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAa5F;AAQD;;;;;;;;;;;GAWG;AACH,8BAAsB,IAAI;IACxB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,iBAAiB,CAA6C;IACtE,sCAAsC;IACtC,SAAS,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACnC,gIAAgI;IAChI,SAAS,CAAC,YAAY,UAAS;IAC/B,0EAA0E;IAC1E,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,uHAAuH;IACvH,SAAS,CAAC,mBAAmB,EAAE,kBAAkB,CAAC;IAClD,gBAAgB;IAChB,SAAS,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;IACjC,gBAAgB;IAChB,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,EAAE,mBAAmB,CAAC;IAC9C,wKAAwK;IACxK,SAAS,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/B,mDAAmD;IACnD,SAAgB,IAAI,EAAE,QAAQ,CAAC;IAC/B,sHAAsH;IACtH,SAAgB,KAAK,EAAE,mBAAmB,CAAC;IAC3C,mFAAmF;IACnF,SAAgB,MAAM,EAAE,IAAI,GAAG,SAAS,CAAC;IACzC,yFAAyF;IACzF,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,yCAAyC;IACzC,SAAgB,cAAc,EAAE,cAAc,CAAC;IAC/C,qDAAqD;IACrD,IAAW,MAAM,IAAI,OAAO,CAAuC;IACnE,uFAAuF;IACvF,IAAW,MAAM,IAAI,MAAM,CAAuC;IAClE,6GAA6G;IAC7G,SAAgB,WAAW,kBAAyB;IAEpD,oDAAoD;IAC7C,QAAQ,CAAC,EAAE,eAAe,CAAC;IAClC,oDAAoD;IAC7C,IAAI,CAAC,EAAE,eAAe,CAAC;IAC9B,oDAAoD;IAC7C,SAAS,SAAK;IACrB,oDAAoD;IAC7C,WAAW,CAAC,EAAE,aAAa,CAAC;IAEnC,2GAA2G;IAC3G,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,SAAS,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAEvH;;;;;OAKG;IACH,aAAoB,OAAO,IAAI,kBAAkB,CAAC;IAElD,uFAAuF;aACvE,cAAc,CAAC,UAAU,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IAExF,6GAA6G;aAC7F,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAEnI,kBAAkB;IAClB,SAAS,aAAa,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ;IAoBxD;;;;OAIG;IACI,UAAU,IAAI,IAAI;IAIzB,8CAA8C;IACvC,eAAe,IAAI,IAAI;IAQ9B,yHAAyH;IAClH,OAAO,IAAI,IAAI;IAMtB;;OAEG;IACH,IAAW,QAAQ,IAAI,IAAI,EAAE,GAAG,SAAS,CAA2B;IACpE,2DAA2D;IAC3D,IAAW,MAAM,IAAI,gBAAgB,CAA6B;IAClE,+CAA+C;IAC/C,IAAW,SAAS,IAAI,MAAM,CAA4B;IAE1D,6DAA6D;IAC7D,IAAW,SAAS,IAAI,OAAO,CAAuD;IACtF,mEAAmE;IACnE,IAAW,QAAQ,IAAI,OAAO,CAAsD;IACpF,6DAA6D;IAC7D,IAAW,UAAU,IAAI,OAAO,CAAwD;IACxF,4EAA4E;IAC5E,IAAW,OAAO,IAAI,OAAO,CAAqD;IAElF,cAAc;IACP,WAAW,IAAI,IAAI;IAI1B,cAAc;IACP,UAAU,IAAI,IAAI;IAQzB,cAAc;IACP,OAAO,IAAI,IAAI;IAOtB,4CAA4C;IAC5C,IAAW,MAAM,IAAI,OAAO,CAAyB;IACrD,gBAAgB;IAChB,IAAW,OAAO,IAAI,OAAO,CAA6D;IAC1F,gBAAgB;IAChB,IAAW,aAAa,IAAI,OAAO,CAAiC;IACpE,wKAAwK;IACxK,IAAW,WAAW,IAAI,MAAM,CAA8B;IAC9D,gBAAgB;IAChB,IAAW,mBAAmB,IAAI,OAAO,CAAmE;IAC5G,gBAAgB;IAChB,IAAW,uBAAuB,IAAI,OAAO,CAA6D;IAE1G,gBAAgB;IAChB,IAAW,OAAO,IAAI,WAAW,GAAG,SAAS,CAA0B;IACvE,IAAW,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,EAGlD;IAED;;;;OAIG;IACI,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM;IAIlE,oDAAoD;IACpD,IAAW,WAAW,IAAI,OAAO,CAAwC;IACzE,8EAA8E;IAC9E,IAAW,eAAe,IAAI,OAAO,CAA6C;IAClF,0IAA0I;IAC1I,IAAW,YAAY,IAAI,mBAAmB,CAO7C;IAED,gIAAgI;IAChI,IAAW,UAAU,IAAI,cAAc,CAwBtC;IAED,iDAAiD;IAC1C,eAAe,IAAI,aAAa,GAAG,SAAS;IAInD,SAAS,CAAC,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI;IAM9D,+DAA+D;IACxD,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAiB7C;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,UAAU,GAAG,IAAI;IAEnE;;;OAGG;IACI,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,EAAE,eAAe,UAAO,GAAG,IAAI;IActF;;;OAGG;IACH,SAAS,CAAC,YAAY,IAAI,kBAAkB;IAwB5C,wEAAwE;IACxE,SAAS,CAAC,eAAe,IAAI,IAAI;IAYjC,gHAAgH;IAChH,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO;IAIrD,wHAAwH;IACxH,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO;IAItD,OAAO,CAAC,QAAQ;IAKhB,SAAS,CAAC,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,cAAc;IAuBlH,6EAA6E;IACtE,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc;IA6B5D,gBAAgB;IACT,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI;IAuB7H,wGAAwG;IACjG,gBAAgB,IAAI,MAAM;IAYjC,mCAAmC;IAC5B,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAW7C,gBAAgB;IAChB,SAAS,KAAK,iBAAiB,IAAI,QAAQ,CAE1C;IAED,gBAAgB;IACT,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,aAAa,GAAG,SAAS;IAgBxE,gBAAgB;IAChB,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI;IA2BjF;;OAEG;IACI,wBAAwB,IAAI,OAAO,EAAE,GAAG,SAAS;CACzD;AAED;;;GAGG;AACH,oBAAY,cAAc;IACxB,8HAA8H;IAC9H,SAAS,IAAI;IACb,4FAA4F;IAC5F,MAAM,IAAI;IACV,4GAA4G;IAC5G,OAAO,IAAI;IACX,gFAAgF;IAChF,KAAK,IAAI;IACT,oDAAoD;IACpD,QAAQ,IAAI;IACZ,kCAAkC;IAClC,SAAS,IAAI;CACd;AAED;;;GAGG;AACH,oBAAY,cAAc;IACxB,2DAA2D;IAC3D,cAAc,IAAA;IACd,+EAA+E;IAC/E,SAAS,IAAA;IACT,iFAAiF;IACjF,OAAO,IAAA;CACR;AAED;;;;GAIG;AACH,oBAAY,gBAAgB;IAC1B,wEAAwE;IACxE,OAAO,IAAI;IACX,4BAA4B;IAC5B,GAAG,KAAK;IACR,wEAAwE;IACxE,OAAO,KAAK;IACZ,oEAAoE;IACpE,OAAO,KAAK;IACZ,iCAAiC;IACjC,OAAO,KAAK;IACZ,wFAAwF;IACxF,UAAU,KAAK;CAChB;AAED;;;;;;;;;GASG;AACH,oBAAY,iBAAiB;IAC3B,gCAAgC;IAChC,IAAI,IAAI;IACR,yDAAyD;IACzD,MAAM,IAAA;IACN,6IAA6I;IAC7I,OAAO,IAAA;IACP,6CAA6C;IAC7C,IAAI,IAAA;IACJ,kFAAkF;IAClF,YAAY,IAAA;IACZ,+BAA+B;IAC/B,MAAM,IAAA;CACP"}
@@ -301,9 +301,13 @@ class Tile {
301
301
  }
302
302
  /** Determine the visibility of this tile according to the specified args. */
303
303
  computeVisibility(args) {
304
+ if (this.isEmpty)
305
+ return TileVisibility.OutsideFrustum;
306
+ if (args.boundingRange && !args.boundingRange.intersectsRange(this.range))
307
+ return TileVisibility.OutsideFrustum;
304
308
  // NB: We test for region culling before isDisplayable - otherwise we will never unload children of undisplayed tiles when
305
309
  // they are outside frustum
306
- if (this.isEmpty || this.isRegionCulled(args))
310
+ if (this.isRegionCulled(args))
307
311
  return TileVisibility.OutsideFrustum;
308
312
  // some nodes are merely for structure and don't have any geometry
309
313
  if (!this.isDisplayable)