@itwin/frontend-tiles 4.8.0-dev.3 → 4.8.0-dev.5
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.
- package/CHANGELOG.md +9 -1
- package/lib/cjs/BatchedSpatialTileTreeRefs.d.ts.map +1 -1
- package/lib/cjs/BatchedSpatialTileTreeRefs.js +48 -0
- package/lib/cjs/BatchedSpatialTileTreeRefs.js.map +1 -1
- package/lib/cjs/BatchedTileTreeReference.d.ts +2 -0
- package/lib/cjs/BatchedTileTreeReference.d.ts.map +1 -1
- package/lib/cjs/BatchedTileTreeReference.js +3 -0
- package/lib/cjs/BatchedTileTreeReference.js.map +1 -1
- package/lib/esm/BatchedSpatialTileTreeRefs.d.ts.map +1 -1
- package/lib/esm/BatchedSpatialTileTreeRefs.js +48 -0
- package/lib/esm/BatchedSpatialTileTreeRefs.js.map +1 -1
- package/lib/esm/BatchedTileTreeReference.d.ts +2 -0
- package/lib/esm/BatchedTileTreeReference.d.ts.map +1 -1
- package/lib/esm/BatchedTileTreeReference.js +3 -0
- package/lib/esm/BatchedTileTreeReference.js.map +1 -1
- package/package.json +11 -11
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
# Change Log - @itwin/frontend-tiles
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Wed, 12 Jun 2024 18:03:49 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 4.7.0
|
|
6
|
+
Wed, 12 Jun 2024 18:02:16 GMT
|
|
7
|
+
|
|
8
|
+
### Updates
|
|
9
|
+
|
|
10
|
+
- Added IndexedDBCache.ts, and added useIndexedDBCache to FrontendTilesOptions
|
|
11
|
+
- Add SessionId Header to Mesh Export Service API Call
|
|
4
12
|
|
|
5
13
|
## 4.6.2
|
|
6
14
|
Sat, 08 Jun 2024 00:50:25 GMT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedSpatialTileTreeRefs.d.ts","sourceRoot":"","sources":["../../src/BatchedSpatialTileTreeRefs.ts"],"names":[],"mappings":"AAOA,OAAO,EAEoE,yBAAyB,EAAE,gBAAgB,EAErH,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"BatchedSpatialTileTreeRefs.d.ts","sourceRoot":"","sources":["../../src/BatchedSpatialTileTreeRefs.ts"],"names":[],"mappings":"AAOA,OAAO,EAEoE,yBAAyB,EAAE,gBAAgB,EAErH,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAkS/D,gBAAgB;AAChB,wBAAgB,sCAAsC,CAAC,IAAI,EAAE,gBAAgB,EAAE,cAAc,EAAE,4BAA4B,GAAG,yBAAyB,CA0BtJ"}
|
|
@@ -103,6 +103,45 @@ class BatchedSpatialTileTreeReferences {
|
|
|
103
103
|
this._removeSceneInvalidationListener = undefined;
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
|
+
// Collects the TileTreeReferences for the models that need to be drawn to create the planar clip mask.
|
|
107
|
+
collectMaskRefs(modelIds, maskTreeRefs) {
|
|
108
|
+
for (const ref of this._refs) {
|
|
109
|
+
// For each ref, check to see whether one of the models that are needed are in its group's list of models.
|
|
110
|
+
const refModelIds = ref.groupModelIds;
|
|
111
|
+
if (refModelIds) {
|
|
112
|
+
for (const modelId of modelIds) {
|
|
113
|
+
if (refModelIds.has(modelId)) {
|
|
114
|
+
maskTreeRefs.push(ref);
|
|
115
|
+
break;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
// Also need to collect refs from other tile trees which are not in the batched tile tree refs.
|
|
121
|
+
this._excludedRefs.collectMaskRefs(modelIds, maskTreeRefs);
|
|
122
|
+
}
|
|
123
|
+
// Returns a list of the models that are NOT in the planar clip mask.
|
|
124
|
+
getModelsNotInMask(maskModels, useVisible) {
|
|
125
|
+
const modelsNotInMask = [];
|
|
126
|
+
const includedModels = this._spec.models.keys();
|
|
127
|
+
if (useVisible) {
|
|
128
|
+
// All viewed models are in the mask, so get a list of all models which are not viewed.
|
|
129
|
+
for (const modelId of includedModels) {
|
|
130
|
+
if (!this._models.views(modelId))
|
|
131
|
+
modelsNotInMask.push(modelId);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
// Get a list of all model which are NOT in the maskModels list.
|
|
136
|
+
const maskModelSet = new Set(maskModels);
|
|
137
|
+
for (const modelId of includedModels) {
|
|
138
|
+
if (!maskModelSet.has(modelId))
|
|
139
|
+
modelsNotInMask.push(modelId);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return modelsNotInMask.length > 0 ? modelsNotInMask : undefined;
|
|
143
|
+
}
|
|
144
|
+
// _view.models
|
|
106
145
|
setDeactivated() {
|
|
107
146
|
// Used for debugging. Unimplemented here.
|
|
108
147
|
}
|
|
@@ -179,6 +218,15 @@ class ProxySpatialTileTreeReferences {
|
|
|
179
218
|
yield this._proxyRef;
|
|
180
219
|
}
|
|
181
220
|
}
|
|
221
|
+
collectMaskRefs(modelIds, maskTreeRefs) {
|
|
222
|
+
this._impl?.collectMaskRefs(modelIds, maskTreeRefs);
|
|
223
|
+
}
|
|
224
|
+
getModelsNotInMask(maskModels, useVisible) {
|
|
225
|
+
if (this._impl)
|
|
226
|
+
return this._impl.getModelsNotInMask(maskModels, useVisible);
|
|
227
|
+
else
|
|
228
|
+
return undefined;
|
|
229
|
+
}
|
|
182
230
|
}
|
|
183
231
|
const iModelToTilesetSpec = new Map();
|
|
184
232
|
async function fetchTilesetSpec(iModel, computeBaseUrl) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedSpatialTileTreeRefs.js","sourceRoot":"","sources":["../../src/BatchedSpatialTileTreeRefs.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Logger } 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} 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\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 public setDeactivated(): void {\r\n // Used for debugging. Unimplemented here.\r\n }\r\n}\r\n\r\n// A placeholder used by [[ProxySpatialTileTreeReferences]] until asynchronous loading completes.\r\n// It provides a TileTreeOwner that never loads a tile tree.\r\n// This ensures that [ViewState.areAllTileTreesLoaded]($frontend) will not return `true` while we are loading.\r\nclass ProxyTileTreeReference extends TileTreeReference {\r\n private readonly _treeOwner: TileTreeOwner;\r\n\r\n public constructor(iModel: IModelConnection) {\r\n super();\r\n this._treeOwner = {\r\n iModel,\r\n tileTree: undefined,\r\n loadStatus: TileTreeLoadStatus.NotLoaded,\r\n load: () => undefined,\r\n dispose: () => { },\r\n loadTree: async () => Promise.resolve(undefined),\r\n };\r\n }\r\n\r\n public override get treeOwner() {\r\n return this._treeOwner;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override get _isLoadingComplete() {\r\n return false;\r\n }\r\n}\r\n\r\n// Serves as a placeholder while we asynchronously obtain the base URL for a pre-published tileset (or asynchronously determine\r\n// that no such tileset exists).\r\nclass ProxySpatialTileTreeReferences implements SpatialTileTreeReferences {\r\n // Once async loading completes, all methods will be forwarded to this implementation.\r\n private _impl?: SpatialTileTreeReferences;\r\n private readonly _proxyRef: ProxyTileTreeReference;\r\n // Retained if attachToViewport is called while we are still loading; and reset if detachFromViewport is called while loading.\r\n private _attachArgs?: AttachToViewportArgs;\r\n\r\n public constructor(view: SpatialViewState, getSpec: Promise<BatchedTilesetSpec | null>) {\r\n this._proxyRef = new ProxyTileTreeReference(view.iModel);\r\n getSpec.then((spec: BatchedTilesetSpec | null) => {\r\n if (spec) {\r\n this.setTreeRefs(new BatchedSpatialTileTreeReferences(spec, view));\r\n } else {\r\n this.setTreeRefs(createSpatialTileTreeReferences(view));\r\n }\r\n }).catch(() => {\r\n this.setTreeRefs(createSpatialTileTreeReferences(view));\r\n });\r\n }\r\n\r\n private setTreeRefs(refs: SpatialTileTreeReferences): void {\r\n this._impl = refs;\r\n if (this._attachArgs) {\r\n this._impl.attachToViewport(this._attachArgs);\r\n this._attachArgs.invalidateSymbologyOverrides();\r\n this._attachArgs = undefined;\r\n }\r\n }\r\n\r\n public update(): void {\r\n this._impl?.update();\r\n }\r\n\r\n public attachToViewport(args: AttachToViewportArgs): void {\r\n if (this._impl)\r\n this._impl.attachToViewport(args);\r\n else\r\n this._attachArgs = args;\r\n }\r\n\r\n public detachFromViewport(): void {\r\n if (this._impl)\r\n this._impl.detachFromViewport();\r\n else\r\n this._attachArgs = undefined;\r\n }\r\n\r\n public setDeactivated(): void { }\r\n\r\n public *[Symbol.iterator](): Iterator<TileTreeReference> {\r\n if (this._impl) {\r\n for (const ref of this._impl)\r\n yield ref;\r\n } else {\r\n yield this._proxyRef;\r\n }\r\n }\r\n}\r\n\r\nconst iModelToTilesetSpec = new Map<IModelConnection, BatchedTilesetSpec | null | Promise<BatchedTilesetSpec | null>>();\r\n\r\nasync function fetchTilesetSpec(iModel: IModelConnection, computeBaseUrl: ComputeSpatialTilesetBaseUrl): Promise<BatchedTilesetSpec | null> {\r\n try {\r\n const baseUrl = await computeBaseUrl(iModel);\r\n if (undefined === baseUrl)\r\n return null;\r\n\r\n const url = new URL(\"tileset.json\", baseUrl);\r\n url.search = baseUrl.search;\r\n const response = await fetch(url.toString());\r\n const json = await response.json();\r\n return BatchedTilesetSpec.create(baseUrl, json);\r\n } catch (err) {\r\n Logger.logException(loggerCategory, err);\r\n return null;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createBatchedSpatialTileTreeReferences(view: SpatialViewState, computeBaseUrl: ComputeSpatialTilesetBaseUrl): SpatialTileTreeReferences {\r\n const iModel = view.iModel;\r\n let entry = iModelToTilesetSpec.get(iModel);\r\n if (undefined === entry) {\r\n const promise = entry = fetchTilesetSpec(iModel, computeBaseUrl);\r\n iModelToTilesetSpec.set(iModel, entry);\r\n iModel.onClose.addOnce(() => iModelToTilesetSpec.delete(iModel));\r\n\r\n promise.then((spec: BatchedTilesetSpec | null) => {\r\n if (iModelToTilesetSpec.has(iModel))\r\n iModelToTilesetSpec.set(iModel, spec);\r\n }).catch(() => {\r\n if (iModelToTilesetSpec.has(iModel))\r\n iModelToTilesetSpec.set(iModel, null);\r\n });\r\n }\r\n\r\n if (null === entry) {\r\n // No tileset could be obtained for this iModel - use default tile generation instead.\r\n return createSpatialTileTreeReferences(view);\r\n }\r\n\r\n if (entry instanceof Promise)\r\n return new ProxySpatialTileTreeReferences(view, entry);\r\n\r\n return new BatchedSpatialTileTreeReferences(entry, view);\r\n}\r\n\r\n"]}
|
|
1
|
+
{"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} 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\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 public collectMaskRefs(modelIds: OrderedId64Iterable, maskTreeRefs: TileTreeReference[]): 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 for (const modelId of modelIds) {\r\n if (refModelIds.has(modelId)) {\r\n maskTreeRefs.push(ref);\r\n break;\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);\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>) {\r\n this._proxyRef = new ProxyTileTreeReference(view.iModel);\r\n getSpec.then((spec: BatchedTilesetSpec | null) => {\r\n if (spec) {\r\n this.setTreeRefs(new BatchedSpatialTileTreeReferences(spec, view));\r\n } else {\r\n this.setTreeRefs(createSpatialTileTreeReferences(view));\r\n }\r\n }).catch(() => {\r\n this.setTreeRefs(createSpatialTileTreeReferences(view));\r\n });\r\n }\r\n\r\n private setTreeRefs(refs: SpatialTileTreeReferences): void {\r\n this._impl = refs;\r\n if (this._attachArgs) {\r\n this._impl.attachToViewport(this._attachArgs);\r\n this._attachArgs.invalidateSymbologyOverrides();\r\n this._attachArgs = undefined;\r\n }\r\n }\r\n\r\n public update(): void {\r\n this._impl?.update();\r\n }\r\n\r\n public attachToViewport(args: AttachToViewportArgs): void {\r\n if (this._impl)\r\n this._impl.attachToViewport(args);\r\n else\r\n this._attachArgs = args;\r\n }\r\n\r\n public detachFromViewport(): void {\r\n if (this._impl)\r\n this._impl.detachFromViewport();\r\n else\r\n this._attachArgs = undefined;\r\n }\r\n\r\n public setDeactivated(): void { }\r\n\r\n public *[Symbol.iterator](): Iterator<TileTreeReference> {\r\n if (this._impl) {\r\n for (const ref of this._impl)\r\n yield ref;\r\n } else {\r\n yield this._proxyRef;\r\n }\r\n }\r\n\r\n public collectMaskRefs(modelIds: OrderedId64Iterable, maskTreeRefs: TileTreeReference[]): void {\r\n this._impl?.collectMaskRefs(modelIds, maskTreeRefs);\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\n/** @internal */\r\nexport function createBatchedSpatialTileTreeReferences(view: SpatialViewState, computeBaseUrl: ComputeSpatialTilesetBaseUrl): SpatialTileTreeReferences {\r\n const iModel = view.iModel;\r\n let entry = iModelToTilesetSpec.get(iModel);\r\n if (undefined === entry) {\r\n const promise = entry = fetchTilesetSpec(iModel, computeBaseUrl);\r\n iModelToTilesetSpec.set(iModel, entry);\r\n iModel.onClose.addOnce(() => iModelToTilesetSpec.delete(iModel));\r\n\r\n promise.then((spec: BatchedTilesetSpec | null) => {\r\n if (iModelToTilesetSpec.has(iModel))\r\n iModelToTilesetSpec.set(iModel, spec);\r\n }).catch(() => {\r\n if (iModelToTilesetSpec.has(iModel))\r\n iModelToTilesetSpec.set(iModel, null);\r\n });\r\n }\r\n\r\n if (null === entry) {\r\n // No tileset could be obtained for this iModel - use default tile generation instead.\r\n return createSpatialTileTreeReferences(view);\r\n }\r\n\r\n if (entry instanceof Promise)\r\n return new ProxySpatialTileTreeReferences(view, entry);\r\n\r\n return new BatchedSpatialTileTreeReferences(entry, view);\r\n}\r\n\r\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Id64Set } from "@itwin/core-bentley";
|
|
1
2
|
import { Range3d, Transform } from "@itwin/core-geometry";
|
|
2
3
|
import { BatchType, FeatureAppearance, FeatureAppearanceProvider, FeatureAppearanceSource, GeometryClass, ViewFlagOverrides } from "@itwin/core-common";
|
|
3
4
|
import { RenderClipVolume, SceneContext, TileDrawArgs, TileTree, TileTreeOwner, TileTreeReference } from "@itwin/core-frontend";
|
|
@@ -15,6 +16,7 @@ export declare class BatchedTileTreeReference extends TileTreeReference implemen
|
|
|
15
16
|
private readonly _animationNodeId?;
|
|
16
17
|
private readonly _branchId?;
|
|
17
18
|
constructor(args: BatchedTileTreeReferenceArgs, groupIndex: number, animationNodeId: number | undefined);
|
|
19
|
+
get groupModelIds(): Id64Set | undefined;
|
|
18
20
|
private get _groupInfo();
|
|
19
21
|
get treeOwner(): TileTreeOwner;
|
|
20
22
|
getAppearanceProvider(): FeatureAppearanceProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedTileTreeReference.d.ts","sourceRoot":"","sources":["../../src/BatchedTileTreeReference.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BatchedTileTreeReference.d.ts","sourceRoot":"","sources":["../../src/BatchedTileTreeReference.ts"],"names":[],"mappings":"AAKA,OAAO,EAAU,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,SAAS,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,aAAa,EAAE,iBAAiB,EACnH,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACoB,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAmB,QAAQ,EAAE,aAAa,EAAE,iBAAiB,EACnI,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAc,cAAc,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,MAAM,CAAC;CAC5C;AAED,qBAAa,wBAAyB,SAAQ,iBAAkB,YAAW,yBAAyB;IAClG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;gBAEjB,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,SAAS;IAW9G,IAAW,aAAa,IAAI,OAAO,GAAG,SAAS,CAE9C;IAED,OAAO,KAAK,UAAU,GAGrB;IAED,IAAoB,SAAS,IAAI,aAAa,CAE7C;IAEe,qBAAqB,IAAI,yBAAyB;cAI/C,aAAa,IAAI,gBAAgB,GAAG,SAAS;IAIhD,gBAAgB;IAIzB,oBAAoB,CACzB,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAC9B,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAClC,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAChC,IAAI,EAAE,SAAS,EACf,eAAe,EAAE,MAAM,GACtB,iBAAiB,GAAG,SAAS;IAOhB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAInD,IAAoB,YAAY,IAAI,OAAO,CAK1C;IAEe,oBAAoB,IAAI,iBAAiB;IAIzC,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;cAO3B,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS;cAuB3C,2BAA2B;cAI3B,cAAc;IAIjB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,GAAG,SAAS;CAgBhF"}
|
|
@@ -18,6 +18,9 @@ class BatchedTileTreeReference extends core_frontend_1.TileTreeReference {
|
|
|
18
18
|
this._branchId = (0, core_frontend_1.formatAnimationBranchId)(this._groupInfo.timeline.modelId, animationNodeId);
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
+
get groupModelIds() {
|
|
22
|
+
return this._groupInfo.modelIds;
|
|
23
|
+
}
|
|
21
24
|
get _groupInfo() {
|
|
22
25
|
(0, core_bentley_1.assert)(this._groupIndex < this._args.groups.length);
|
|
23
26
|
return this._args.groups[this._groupIndex];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedTileTreeReference.js","sourceRoot":"","sources":["../../src/BatchedTileTreeReference.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,
|
|
1
|
+
{"version":3,"file":"BatchedTileTreeReference.js","sourceRoot":"","sources":["../../src/BatchedTileTreeReference.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, Id64Set } from \"@itwin/core-bentley\";\r\nimport { Range3d, Transform } from \"@itwin/core-geometry\";\r\nimport {\r\n BatchType, FeatureAppearance, FeatureAppearanceProvider, FeatureAppearanceSource, GeometryClass, ViewFlagOverrides,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n formatAnimationBranchId, RenderClipVolume, SceneContext, TileDrawArgs, TileGraphicType, TileTree, TileTreeOwner, TileTreeReference,\r\n} from \"@itwin/core-frontend\";\r\nimport { BatchedModels } from \"./BatchedModels\";\r\nimport { ModelGroup, ModelGroupInfo } from \"./ModelGroup\";\r\n\r\nexport interface BatchedTileTreeReferenceArgs {\r\n readonly models: BatchedModels;\r\n readonly groups: ReadonlyArray<ModelGroupInfo>;\r\n readonly treeOwner: TileTreeOwner;\r\n readonly getCurrentTimePoint: () => number;\r\n}\r\n\r\nexport class BatchedTileTreeReference extends TileTreeReference implements FeatureAppearanceProvider {\r\n private readonly _args: BatchedTileTreeReferenceArgs;\r\n private readonly _groupIndex: number;\r\n private readonly _animationNodeId?: number;\r\n private readonly _branchId?: string;\r\n\r\n public constructor(args: BatchedTileTreeReferenceArgs, groupIndex: number, animationNodeId: number | undefined) {\r\n super();\r\n this._args = args;\r\n this._groupIndex = groupIndex;\r\n this._animationNodeId = animationNodeId;\r\n if (undefined !== animationNodeId) {\r\n assert(undefined !== this._groupInfo.timeline);\r\n this._branchId = formatAnimationBranchId(this._groupInfo.timeline.modelId, animationNodeId);\r\n }\r\n }\r\n\r\n public get groupModelIds(): Id64Set | undefined {\r\n return (this._groupInfo as ModelGroup).modelIds;\r\n }\r\n\r\n private get _groupInfo(): ModelGroupInfo {\r\n assert(this._groupIndex < this._args.groups.length);\r\n return this._args.groups[this._groupIndex];\r\n }\r\n\r\n public override get treeOwner(): TileTreeOwner {\r\n return this._args.treeOwner;\r\n }\r\n\r\n public override getAppearanceProvider(): FeatureAppearanceProvider {\r\n return this;\r\n }\r\n\r\n protected override getClipVolume(): RenderClipVolume | undefined {\r\n return this._groupInfo.clip;\r\n }\r\n\r\n public override canSupplyToolTip() {\r\n return false;\r\n }\r\n\r\n public getFeatureAppearance(\r\n source: FeatureAppearanceSource,\r\n elemLo: number, elemHi: number,\r\n subcatLo: number, subcatHi: number,\r\n geomClass: GeometryClass,\r\n modelLo: number, modelHi: number,\r\n type: BatchType,\r\n animationNodeId: number,\r\n ): FeatureAppearance | undefined {\r\n if (!this._args.models.isViewed(modelLo, modelHi))\r\n return undefined;\r\n\r\n return source.getAppearance(elemLo, elemHi, subcatLo, subcatHi, geomClass, modelLo, modelHi, type, animationNodeId);\r\n }\r\n\r\n public override unionFitRange(range: Range3d): void {\r\n this._args.models.unionRange(range);\r\n }\r\n\r\n public override get castsShadows(): boolean {\r\n if (this._groupInfo.planProjection)\r\n return false;\r\n\r\n return super.castsShadows;\r\n }\r\n\r\n public override getViewFlagOverrides(): ViewFlagOverrides {\r\n return this._groupInfo.viewFlags;\r\n }\r\n\r\n public override draw(args: TileDrawArgs): void {\r\n if (this._groupInfo.planProjection?.overlay)\r\n args.context.withGraphicType(TileGraphicType.Overlay, () => args.tree.draw(args));\r\n else\r\n super.draw(args);\r\n }\r\n\r\n protected override computeTransform(tree: TileTree): Transform {\r\n const group = this._groupInfo;\r\n let baseTf = super.computeTransform(tree);\r\n\r\n if (group.planProjection) {\r\n baseTf = baseTf.clone();\r\n baseTf.origin.z += group.planProjection.elevation;\r\n }\r\n\r\n if (group.timeline) {\r\n assert(undefined !== this._animationNodeId);\r\n const animTf = group.timeline.getTransform(this._animationNodeId, this._args.getCurrentTimePoint());\r\n if (animTf)\r\n animTf.multiplyTransformTransform(baseTf, baseTf);\r\n }\r\n\r\n const displayTf = group.displayTransform;\r\n if (!displayTf)\r\n return baseTf;\r\n\r\n return displayTf.premultiply ? displayTf.transform.multiplyTransformTransform(baseTf) : baseTf.multiplyTransformTransform(displayTf.transform);\r\n }\r\n\r\n protected override getAnimationTransformNodeId() {\r\n return this._animationNodeId;\r\n }\r\n\r\n protected override getGroupNodeId() {\r\n return this._args.groups.length > 1 ? this._groupIndex : undefined;\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n if (this._branchId) {\r\n const branch = context.viewport.target.animationBranches?.branchStates.get(this._branchId);\r\n if (branch?.omit) {\r\n // This branch is not supposed to be drawn\r\n return undefined;\r\n }\r\n }\r\n\r\n const args = super.createDrawArgs(context);\r\n\r\n // ###TODO args.boundingRange = args.tree.getTransformNodeRange(this._animationTransformNodeId);\r\n // ###TODO if PlanProjectionSettings.enforceDisplayPriority, createGraphicLayerContainer.\r\n\r\n return args;\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedSpatialTileTreeRefs.d.ts","sourceRoot":"","sources":["../../src/BatchedSpatialTileTreeRefs.ts"],"names":[],"mappings":"AAOA,OAAO,EAEoE,yBAAyB,EAAE,gBAAgB,EAErH,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"BatchedSpatialTileTreeRefs.d.ts","sourceRoot":"","sources":["../../src/BatchedSpatialTileTreeRefs.ts"],"names":[],"mappings":"AAOA,OAAO,EAEoE,yBAAyB,EAAE,gBAAgB,EAErH,MAAM,sBAAsB,CAAC;AAI9B,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAkS/D,gBAAgB;AAChB,wBAAgB,sCAAsC,CAAC,IAAI,EAAE,gBAAgB,EAAE,cAAc,EAAE,4BAA4B,GAAG,yBAAyB,CA0BtJ"}
|
|
@@ -100,6 +100,45 @@ class BatchedSpatialTileTreeReferences {
|
|
|
100
100
|
this._removeSceneInvalidationListener = undefined;
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
|
+
// Collects the TileTreeReferences for the models that need to be drawn to create the planar clip mask.
|
|
104
|
+
collectMaskRefs(modelIds, maskTreeRefs) {
|
|
105
|
+
for (const ref of this._refs) {
|
|
106
|
+
// For each ref, check to see whether one of the models that are needed are in its group's list of models.
|
|
107
|
+
const refModelIds = ref.groupModelIds;
|
|
108
|
+
if (refModelIds) {
|
|
109
|
+
for (const modelId of modelIds) {
|
|
110
|
+
if (refModelIds.has(modelId)) {
|
|
111
|
+
maskTreeRefs.push(ref);
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Also need to collect refs from other tile trees which are not in the batched tile tree refs.
|
|
118
|
+
this._excludedRefs.collectMaskRefs(modelIds, maskTreeRefs);
|
|
119
|
+
}
|
|
120
|
+
// Returns a list of the models that are NOT in the planar clip mask.
|
|
121
|
+
getModelsNotInMask(maskModels, useVisible) {
|
|
122
|
+
const modelsNotInMask = [];
|
|
123
|
+
const includedModels = this._spec.models.keys();
|
|
124
|
+
if (useVisible) {
|
|
125
|
+
// All viewed models are in the mask, so get a list of all models which are not viewed.
|
|
126
|
+
for (const modelId of includedModels) {
|
|
127
|
+
if (!this._models.views(modelId))
|
|
128
|
+
modelsNotInMask.push(modelId);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
// Get a list of all model which are NOT in the maskModels list.
|
|
133
|
+
const maskModelSet = new Set(maskModels);
|
|
134
|
+
for (const modelId of includedModels) {
|
|
135
|
+
if (!maskModelSet.has(modelId))
|
|
136
|
+
modelsNotInMask.push(modelId);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return modelsNotInMask.length > 0 ? modelsNotInMask : undefined;
|
|
140
|
+
}
|
|
141
|
+
// _view.models
|
|
103
142
|
setDeactivated() {
|
|
104
143
|
// Used for debugging. Unimplemented here.
|
|
105
144
|
}
|
|
@@ -176,6 +215,15 @@ class ProxySpatialTileTreeReferences {
|
|
|
176
215
|
yield this._proxyRef;
|
|
177
216
|
}
|
|
178
217
|
}
|
|
218
|
+
collectMaskRefs(modelIds, maskTreeRefs) {
|
|
219
|
+
this._impl?.collectMaskRefs(modelIds, maskTreeRefs);
|
|
220
|
+
}
|
|
221
|
+
getModelsNotInMask(maskModels, useVisible) {
|
|
222
|
+
if (this._impl)
|
|
223
|
+
return this._impl.getModelsNotInMask(maskModels, useVisible);
|
|
224
|
+
else
|
|
225
|
+
return undefined;
|
|
226
|
+
}
|
|
179
227
|
}
|
|
180
228
|
const iModelToTilesetSpec = new Map();
|
|
181
229
|
async function fetchTilesetSpec(iModel, computeBaseUrl) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedSpatialTileTreeRefs.js","sourceRoot":"","sources":["../../src/BatchedSpatialTileTreeRefs.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EACL,eAAe,EACO,+BAA+B,EACrD,kBAAkB,EAAiB,iBAAiB,GACrD,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAG,wBAAwB,EAAiC,MAAM,4BAA4B,CAAC;AACtG,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,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,aAAa,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,+BAA+B,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;QAE3E,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAkB,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,uBAAuB,CAAC,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,wBAAwB,CAAC,IAAI,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,eAAe,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,wBAAwB,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;IAEM,cAAc;QACnB,0CAA0C;IAC5C,CAAC;CACF;AAED,iGAAiG;AACjG,4DAA4D;AAC5D,8GAA8G;AAC9G,MAAM,sBAAuB,SAAQ,iBAAiB;IAGpD,YAAmB,MAAwB;QACzC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG;YAChB,MAAM;YACN,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,kBAAkB,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;QACpF,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,CAAC;gBACN,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,WAAW,CAAC,+BAA+B,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,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;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,kBAAkB,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,sCAAsC,CAAC,IAAsB,EAAE,cAA4C;IACzH,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,sFAAsF;QACtF,OAAO,+BAA+B,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,KAAK,YAAY,OAAO;QAC1B,OAAO,IAAI,8BAA8B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEzD,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 { Logger } 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} 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\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 public setDeactivated(): void {\r\n // Used for debugging. Unimplemented here.\r\n }\r\n}\r\n\r\n// A placeholder used by [[ProxySpatialTileTreeReferences]] until asynchronous loading completes.\r\n// It provides a TileTreeOwner that never loads a tile tree.\r\n// This ensures that [ViewState.areAllTileTreesLoaded]($frontend) will not return `true` while we are loading.\r\nclass ProxyTileTreeReference extends TileTreeReference {\r\n private readonly _treeOwner: TileTreeOwner;\r\n\r\n public constructor(iModel: IModelConnection) {\r\n super();\r\n this._treeOwner = {\r\n iModel,\r\n tileTree: undefined,\r\n loadStatus: TileTreeLoadStatus.NotLoaded,\r\n load: () => undefined,\r\n dispose: () => { },\r\n loadTree: async () => Promise.resolve(undefined),\r\n };\r\n }\r\n\r\n public override get treeOwner() {\r\n return this._treeOwner;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n public override get _isLoadingComplete() {\r\n return false;\r\n }\r\n}\r\n\r\n// Serves as a placeholder while we asynchronously obtain the base URL for a pre-published tileset (or asynchronously determine\r\n// that no such tileset exists).\r\nclass ProxySpatialTileTreeReferences implements SpatialTileTreeReferences {\r\n // Once async loading completes, all methods will be forwarded to this implementation.\r\n private _impl?: SpatialTileTreeReferences;\r\n private readonly _proxyRef: ProxyTileTreeReference;\r\n // Retained if attachToViewport is called while we are still loading; and reset if detachFromViewport is called while loading.\r\n private _attachArgs?: AttachToViewportArgs;\r\n\r\n public constructor(view: SpatialViewState, getSpec: Promise<BatchedTilesetSpec | null>) {\r\n this._proxyRef = new ProxyTileTreeReference(view.iModel);\r\n getSpec.then((spec: BatchedTilesetSpec | null) => {\r\n if (spec) {\r\n this.setTreeRefs(new BatchedSpatialTileTreeReferences(spec, view));\r\n } else {\r\n this.setTreeRefs(createSpatialTileTreeReferences(view));\r\n }\r\n }).catch(() => {\r\n this.setTreeRefs(createSpatialTileTreeReferences(view));\r\n });\r\n }\r\n\r\n private setTreeRefs(refs: SpatialTileTreeReferences): void {\r\n this._impl = refs;\r\n if (this._attachArgs) {\r\n this._impl.attachToViewport(this._attachArgs);\r\n this._attachArgs.invalidateSymbologyOverrides();\r\n this._attachArgs = undefined;\r\n }\r\n }\r\n\r\n public update(): void {\r\n this._impl?.update();\r\n }\r\n\r\n public attachToViewport(args: AttachToViewportArgs): void {\r\n if (this._impl)\r\n this._impl.attachToViewport(args);\r\n else\r\n this._attachArgs = args;\r\n }\r\n\r\n public detachFromViewport(): void {\r\n if (this._impl)\r\n this._impl.detachFromViewport();\r\n else\r\n this._attachArgs = undefined;\r\n }\r\n\r\n public setDeactivated(): void { }\r\n\r\n public *[Symbol.iterator](): Iterator<TileTreeReference> {\r\n if (this._impl) {\r\n for (const ref of this._impl)\r\n yield ref;\r\n } else {\r\n yield this._proxyRef;\r\n }\r\n }\r\n}\r\n\r\nconst iModelToTilesetSpec = new Map<IModelConnection, BatchedTilesetSpec | null | Promise<BatchedTilesetSpec | null>>();\r\n\r\nasync function fetchTilesetSpec(iModel: IModelConnection, computeBaseUrl: ComputeSpatialTilesetBaseUrl): Promise<BatchedTilesetSpec | null> {\r\n try {\r\n const baseUrl = await computeBaseUrl(iModel);\r\n if (undefined === baseUrl)\r\n return null;\r\n\r\n const url = new URL(\"tileset.json\", baseUrl);\r\n url.search = baseUrl.search;\r\n const response = await fetch(url.toString());\r\n const json = await response.json();\r\n return BatchedTilesetSpec.create(baseUrl, json);\r\n } catch (err) {\r\n Logger.logException(loggerCategory, err);\r\n return null;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function createBatchedSpatialTileTreeReferences(view: SpatialViewState, computeBaseUrl: ComputeSpatialTilesetBaseUrl): SpatialTileTreeReferences {\r\n const iModel = view.iModel;\r\n let entry = iModelToTilesetSpec.get(iModel);\r\n if (undefined === entry) {\r\n const promise = entry = fetchTilesetSpec(iModel, computeBaseUrl);\r\n iModelToTilesetSpec.set(iModel, entry);\r\n iModel.onClose.addOnce(() => iModelToTilesetSpec.delete(iModel));\r\n\r\n promise.then((spec: BatchedTilesetSpec | null) => {\r\n if (iModelToTilesetSpec.has(iModel))\r\n iModelToTilesetSpec.set(iModel, spec);\r\n }).catch(() => {\r\n if (iModelToTilesetSpec.has(iModel))\r\n iModelToTilesetSpec.set(iModel, null);\r\n });\r\n }\r\n\r\n if (null === entry) {\r\n // No tileset could be obtained for this iModel - use default tile generation instead.\r\n return createSpatialTileTreeReferences(view);\r\n }\r\n\r\n if (entry instanceof Promise)\r\n return new ProxySpatialTileTreeReferences(view, entry);\r\n\r\n return new BatchedSpatialTileTreeReferences(entry, view);\r\n}\r\n\r\n"]}
|
|
1
|
+
{"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} 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\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 public collectMaskRefs(modelIds: OrderedId64Iterable, maskTreeRefs: TileTreeReference[]): 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 for (const modelId of modelIds) {\r\n if (refModelIds.has(modelId)) {\r\n maskTreeRefs.push(ref);\r\n break;\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);\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>) {\r\n this._proxyRef = new ProxyTileTreeReference(view.iModel);\r\n getSpec.then((spec: BatchedTilesetSpec | null) => {\r\n if (spec) {\r\n this.setTreeRefs(new BatchedSpatialTileTreeReferences(spec, view));\r\n } else {\r\n this.setTreeRefs(createSpatialTileTreeReferences(view));\r\n }\r\n }).catch(() => {\r\n this.setTreeRefs(createSpatialTileTreeReferences(view));\r\n });\r\n }\r\n\r\n private setTreeRefs(refs: SpatialTileTreeReferences): void {\r\n this._impl = refs;\r\n if (this._attachArgs) {\r\n this._impl.attachToViewport(this._attachArgs);\r\n this._attachArgs.invalidateSymbologyOverrides();\r\n this._attachArgs = undefined;\r\n }\r\n }\r\n\r\n public update(): void {\r\n this._impl?.update();\r\n }\r\n\r\n public attachToViewport(args: AttachToViewportArgs): void {\r\n if (this._impl)\r\n this._impl.attachToViewport(args);\r\n else\r\n this._attachArgs = args;\r\n }\r\n\r\n public detachFromViewport(): void {\r\n if (this._impl)\r\n this._impl.detachFromViewport();\r\n else\r\n this._attachArgs = undefined;\r\n }\r\n\r\n public setDeactivated(): void { }\r\n\r\n public *[Symbol.iterator](): Iterator<TileTreeReference> {\r\n if (this._impl) {\r\n for (const ref of this._impl)\r\n yield ref;\r\n } else {\r\n yield this._proxyRef;\r\n }\r\n }\r\n\r\n public collectMaskRefs(modelIds: OrderedId64Iterable, maskTreeRefs: TileTreeReference[]): void {\r\n this._impl?.collectMaskRefs(modelIds, maskTreeRefs);\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\n/** @internal */\r\nexport function createBatchedSpatialTileTreeReferences(view: SpatialViewState, computeBaseUrl: ComputeSpatialTilesetBaseUrl): SpatialTileTreeReferences {\r\n const iModel = view.iModel;\r\n let entry = iModelToTilesetSpec.get(iModel);\r\n if (undefined === entry) {\r\n const promise = entry = fetchTilesetSpec(iModel, computeBaseUrl);\r\n iModelToTilesetSpec.set(iModel, entry);\r\n iModel.onClose.addOnce(() => iModelToTilesetSpec.delete(iModel));\r\n\r\n promise.then((spec: BatchedTilesetSpec | null) => {\r\n if (iModelToTilesetSpec.has(iModel))\r\n iModelToTilesetSpec.set(iModel, spec);\r\n }).catch(() => {\r\n if (iModelToTilesetSpec.has(iModel))\r\n iModelToTilesetSpec.set(iModel, null);\r\n });\r\n }\r\n\r\n if (null === entry) {\r\n // No tileset could be obtained for this iModel - use default tile generation instead.\r\n return createSpatialTileTreeReferences(view);\r\n }\r\n\r\n if (entry instanceof Promise)\r\n return new ProxySpatialTileTreeReferences(view, entry);\r\n\r\n return new BatchedSpatialTileTreeReferences(entry, view);\r\n}\r\n\r\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Id64Set } from "@itwin/core-bentley";
|
|
1
2
|
import { Range3d, Transform } from "@itwin/core-geometry";
|
|
2
3
|
import { BatchType, FeatureAppearance, FeatureAppearanceProvider, FeatureAppearanceSource, GeometryClass, ViewFlagOverrides } from "@itwin/core-common";
|
|
3
4
|
import { RenderClipVolume, SceneContext, TileDrawArgs, TileTree, TileTreeOwner, TileTreeReference } from "@itwin/core-frontend";
|
|
@@ -15,6 +16,7 @@ export declare class BatchedTileTreeReference extends TileTreeReference implemen
|
|
|
15
16
|
private readonly _animationNodeId?;
|
|
16
17
|
private readonly _branchId?;
|
|
17
18
|
constructor(args: BatchedTileTreeReferenceArgs, groupIndex: number, animationNodeId: number | undefined);
|
|
19
|
+
get groupModelIds(): Id64Set | undefined;
|
|
18
20
|
private get _groupInfo();
|
|
19
21
|
get treeOwner(): TileTreeOwner;
|
|
20
22
|
getAppearanceProvider(): FeatureAppearanceProvider;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedTileTreeReference.d.ts","sourceRoot":"","sources":["../../src/BatchedTileTreeReference.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BatchedTileTreeReference.d.ts","sourceRoot":"","sources":["../../src/BatchedTileTreeReference.ts"],"names":[],"mappings":"AAKA,OAAO,EAAU,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EACL,SAAS,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,aAAa,EAAE,iBAAiB,EACnH,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACoB,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAmB,QAAQ,EAAE,aAAa,EAAE,iBAAiB,EACnI,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAc,cAAc,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,MAAM,CAAC;CAC5C;AAED,qBAAa,wBAAyB,SAAQ,iBAAkB,YAAW,yBAAyB;IAClG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;gBAEjB,IAAI,EAAE,4BAA4B,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,SAAS;IAW9G,IAAW,aAAa,IAAI,OAAO,GAAG,SAAS,CAE9C;IAED,OAAO,KAAK,UAAU,GAGrB;IAED,IAAoB,SAAS,IAAI,aAAa,CAE7C;IAEe,qBAAqB,IAAI,yBAAyB;cAI/C,aAAa,IAAI,gBAAgB,GAAG,SAAS;IAIhD,gBAAgB;IAIzB,oBAAoB,CACzB,MAAM,EAAE,uBAAuB,EAC/B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAC9B,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAClC,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAChC,IAAI,EAAE,SAAS,EACf,eAAe,EAAE,MAAM,GACtB,iBAAiB,GAAG,SAAS;IAOhB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAInD,IAAoB,YAAY,IAAI,OAAO,CAK1C;IAEe,oBAAoB,IAAI,iBAAiB;IAIzC,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;cAO3B,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS;cAuB3C,2BAA2B;cAI3B,cAAc;IAIjB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,GAAG,SAAS;CAgBhF"}
|
|
@@ -15,6 +15,9 @@ export class BatchedTileTreeReference extends TileTreeReference {
|
|
|
15
15
|
this._branchId = formatAnimationBranchId(this._groupInfo.timeline.modelId, animationNodeId);
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
|
+
get groupModelIds() {
|
|
19
|
+
return this._groupInfo.modelIds;
|
|
20
|
+
}
|
|
18
21
|
get _groupInfo() {
|
|
19
22
|
assert(this._groupIndex < this._args.groups.length);
|
|
20
23
|
return this._args.groups[this._groupIndex];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedTileTreeReference.js","sourceRoot":"","sources":["../../src/BatchedTileTreeReference.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"BatchedTileTreeReference.js","sourceRoot":"","sources":["../../src/BatchedTileTreeReference.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, Id64Set } from \"@itwin/core-bentley\";\r\nimport { Range3d, Transform } from \"@itwin/core-geometry\";\r\nimport {\r\n BatchType, FeatureAppearance, FeatureAppearanceProvider, FeatureAppearanceSource, GeometryClass, ViewFlagOverrides,\r\n} from \"@itwin/core-common\";\r\nimport {\r\n formatAnimationBranchId, RenderClipVolume, SceneContext, TileDrawArgs, TileGraphicType, TileTree, TileTreeOwner, TileTreeReference,\r\n} from \"@itwin/core-frontend\";\r\nimport { BatchedModels } from \"./BatchedModels\";\r\nimport { ModelGroup, ModelGroupInfo } from \"./ModelGroup\";\r\n\r\nexport interface BatchedTileTreeReferenceArgs {\r\n readonly models: BatchedModels;\r\n readonly groups: ReadonlyArray<ModelGroupInfo>;\r\n readonly treeOwner: TileTreeOwner;\r\n readonly getCurrentTimePoint: () => number;\r\n}\r\n\r\nexport class BatchedTileTreeReference extends TileTreeReference implements FeatureAppearanceProvider {\r\n private readonly _args: BatchedTileTreeReferenceArgs;\r\n private readonly _groupIndex: number;\r\n private readonly _animationNodeId?: number;\r\n private readonly _branchId?: string;\r\n\r\n public constructor(args: BatchedTileTreeReferenceArgs, groupIndex: number, animationNodeId: number | undefined) {\r\n super();\r\n this._args = args;\r\n this._groupIndex = groupIndex;\r\n this._animationNodeId = animationNodeId;\r\n if (undefined !== animationNodeId) {\r\n assert(undefined !== this._groupInfo.timeline);\r\n this._branchId = formatAnimationBranchId(this._groupInfo.timeline.modelId, animationNodeId);\r\n }\r\n }\r\n\r\n public get groupModelIds(): Id64Set | undefined {\r\n return (this._groupInfo as ModelGroup).modelIds;\r\n }\r\n\r\n private get _groupInfo(): ModelGroupInfo {\r\n assert(this._groupIndex < this._args.groups.length);\r\n return this._args.groups[this._groupIndex];\r\n }\r\n\r\n public override get treeOwner(): TileTreeOwner {\r\n return this._args.treeOwner;\r\n }\r\n\r\n public override getAppearanceProvider(): FeatureAppearanceProvider {\r\n return this;\r\n }\r\n\r\n protected override getClipVolume(): RenderClipVolume | undefined {\r\n return this._groupInfo.clip;\r\n }\r\n\r\n public override canSupplyToolTip() {\r\n return false;\r\n }\r\n\r\n public getFeatureAppearance(\r\n source: FeatureAppearanceSource,\r\n elemLo: number, elemHi: number,\r\n subcatLo: number, subcatHi: number,\r\n geomClass: GeometryClass,\r\n modelLo: number, modelHi: number,\r\n type: BatchType,\r\n animationNodeId: number,\r\n ): FeatureAppearance | undefined {\r\n if (!this._args.models.isViewed(modelLo, modelHi))\r\n return undefined;\r\n\r\n return source.getAppearance(elemLo, elemHi, subcatLo, subcatHi, geomClass, modelLo, modelHi, type, animationNodeId);\r\n }\r\n\r\n public override unionFitRange(range: Range3d): void {\r\n this._args.models.unionRange(range);\r\n }\r\n\r\n public override get castsShadows(): boolean {\r\n if (this._groupInfo.planProjection)\r\n return false;\r\n\r\n return super.castsShadows;\r\n }\r\n\r\n public override getViewFlagOverrides(): ViewFlagOverrides {\r\n return this._groupInfo.viewFlags;\r\n }\r\n\r\n public override draw(args: TileDrawArgs): void {\r\n if (this._groupInfo.planProjection?.overlay)\r\n args.context.withGraphicType(TileGraphicType.Overlay, () => args.tree.draw(args));\r\n else\r\n super.draw(args);\r\n }\r\n\r\n protected override computeTransform(tree: TileTree): Transform {\r\n const group = this._groupInfo;\r\n let baseTf = super.computeTransform(tree);\r\n\r\n if (group.planProjection) {\r\n baseTf = baseTf.clone();\r\n baseTf.origin.z += group.planProjection.elevation;\r\n }\r\n\r\n if (group.timeline) {\r\n assert(undefined !== this._animationNodeId);\r\n const animTf = group.timeline.getTransform(this._animationNodeId, this._args.getCurrentTimePoint());\r\n if (animTf)\r\n animTf.multiplyTransformTransform(baseTf, baseTf);\r\n }\r\n\r\n const displayTf = group.displayTransform;\r\n if (!displayTf)\r\n return baseTf;\r\n\r\n return displayTf.premultiply ? displayTf.transform.multiplyTransformTransform(baseTf) : baseTf.multiplyTransformTransform(displayTf.transform);\r\n }\r\n\r\n protected override getAnimationTransformNodeId() {\r\n return this._animationNodeId;\r\n }\r\n\r\n protected override getGroupNodeId() {\r\n return this._args.groups.length > 1 ? this._groupIndex : undefined;\r\n }\r\n\r\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\r\n if (this._branchId) {\r\n const branch = context.viewport.target.animationBranches?.branchStates.get(this._branchId);\r\n if (branch?.omit) {\r\n // This branch is not supposed to be drawn\r\n return undefined;\r\n }\r\n }\r\n\r\n const args = super.createDrawArgs(context);\r\n\r\n // ###TODO args.boundingRange = args.tree.getTransformNodeRange(this._animationTransformNodeId);\r\n // ###TODO if PlanProjectionSettings.enforceDisplayPriority, createGraphicLayerContainer.\r\n\r\n return args;\r\n }\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/frontend-tiles",
|
|
3
|
-
"version": "4.8.0-dev.
|
|
3
|
+
"version": "4.8.0-dev.5",
|
|
4
4
|
"description": "Experimental alternative technique for visualizing the contents of iModels",
|
|
5
5
|
"main": "lib/cjs/frontend-tiles.js",
|
|
6
6
|
"module": "lib/esm/frontend-tiles.js",
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
"url": "http://www.bentley.com"
|
|
22
22
|
},
|
|
23
23
|
"peerDependencies": {
|
|
24
|
-
"@itwin/core-bentley": "4.8.0-dev.
|
|
25
|
-
"@itwin/core-
|
|
26
|
-
"@itwin/core-geometry": "4.8.0-dev.
|
|
27
|
-
"@itwin/core-
|
|
24
|
+
"@itwin/core-bentley": "4.8.0-dev.5",
|
|
25
|
+
"@itwin/core-common": "4.8.0-dev.5",
|
|
26
|
+
"@itwin/core-geometry": "4.8.0-dev.5",
|
|
27
|
+
"@itwin/core-frontend": "4.8.0-dev.5"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@itwin/eslint-plugin": "^4.0.2",
|
|
@@ -45,12 +45,12 @@
|
|
|
45
45
|
"source-map-loader": "^4.0.0",
|
|
46
46
|
"typescript": "~5.3.3",
|
|
47
47
|
"webpack": "^5.76.0",
|
|
48
|
-
"@itwin/
|
|
49
|
-
"@itwin/core-
|
|
50
|
-
"@itwin/core-frontend": "4.8.0-dev.
|
|
51
|
-
"@itwin/core-bentley": "4.8.0-dev.
|
|
52
|
-
"@itwin/
|
|
53
|
-
"@itwin/
|
|
48
|
+
"@itwin/build-tools": "4.8.0-dev.5",
|
|
49
|
+
"@itwin/core-geometry": "4.8.0-dev.5",
|
|
50
|
+
"@itwin/core-frontend": "4.8.0-dev.5",
|
|
51
|
+
"@itwin/core-bentley": "4.8.0-dev.5",
|
|
52
|
+
"@itwin/core-common": "4.8.0-dev.5",
|
|
53
|
+
"@itwin/certa": "4.8.0-dev.5"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
56
56
|
"build": "npm run -s build:cjs && npm run -s build:esm",
|