@itwin/frontend-tiles 4.4.0-dev.9 → 4.5.0-dev.0
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 +6 -1
- package/lib/cjs/BatchedModelGroups.d.ts +45 -0
- package/lib/cjs/BatchedModelGroups.d.ts.map +1 -0
- package/lib/cjs/BatchedModelGroups.js +110 -0
- package/lib/cjs/BatchedModelGroups.js.map +1 -0
- package/lib/cjs/BatchedModels.d.ts +2 -3
- package/lib/cjs/BatchedModels.d.ts.map +1 -1
- package/lib/cjs/BatchedModels.js +5 -26
- package/lib/cjs/BatchedModels.js.map +1 -1
- package/lib/cjs/BatchedSpatialTileTreeRefs.d.ts.map +1 -1
- package/lib/cjs/BatchedSpatialTileTreeRefs.js +55 -47
- package/lib/cjs/BatchedSpatialTileTreeRefs.js.map +1 -1
- package/lib/cjs/BatchedTile.d.ts.map +1 -1
- package/lib/cjs/BatchedTile.js +3 -0
- package/lib/cjs/BatchedTile.js.map +1 -1
- package/lib/cjs/BatchedTileContentReader.js.map +1 -1
- package/lib/cjs/BatchedTileTree.d.ts +5 -3
- package/lib/cjs/BatchedTileTree.d.ts.map +1 -1
- package/lib/cjs/BatchedTileTree.js +1 -0
- package/lib/cjs/BatchedTileTree.js.map +1 -1
- package/lib/cjs/BatchedTileTreeReference.d.ts +25 -27
- package/lib/cjs/BatchedTileTreeReference.d.ts.map +1 -1
- package/lib/cjs/BatchedTileTreeReference.js +64 -44
- package/lib/cjs/BatchedTileTreeReference.js.map +1 -1
- package/lib/cjs/BatchedTileTreeSupplier.d.ts +5 -0
- package/lib/cjs/BatchedTileTreeSupplier.d.ts.map +1 -1
- package/lib/cjs/BatchedTileTreeSupplier.js +4 -2
- package/lib/cjs/BatchedTileTreeSupplier.js.map +1 -1
- package/lib/cjs/BatchedTilesetReader.d.ts +29 -12
- package/lib/cjs/BatchedTilesetReader.d.ts.map +1 -1
- package/lib/cjs/BatchedTilesetReader.js +19 -8
- package/lib/cjs/BatchedTilesetReader.js.map +1 -1
- package/lib/cjs/FrontendTiles.js.map +1 -1
- package/lib/cjs/LoggerCategory.js.map +1 -1
- package/lib/cjs/ModelGroup.d.ts +48 -0
- package/lib/cjs/ModelGroup.d.ts.map +1 -0
- package/lib/cjs/ModelGroup.js +89 -0
- package/lib/cjs/ModelGroup.js.map +1 -0
- package/lib/cjs/ModelGroupDisplayTransforms.d.ts +22 -0
- package/lib/cjs/ModelGroupDisplayTransforms.d.ts.map +1 -0
- package/lib/cjs/ModelGroupDisplayTransforms.js +62 -0
- package/lib/cjs/ModelGroupDisplayTransforms.js.map +1 -0
- package/lib/cjs/frontend-tiles.js.map +1 -1
- package/lib/esm/BatchedModelGroups.d.ts +45 -0
- package/lib/esm/BatchedModelGroups.d.ts.map +1 -0
- package/lib/esm/BatchedModelGroups.js +106 -0
- package/lib/esm/BatchedModelGroups.js.map +1 -0
- package/lib/esm/BatchedModels.d.ts +2 -3
- package/lib/esm/BatchedModels.d.ts.map +1 -1
- package/lib/esm/BatchedModels.js +5 -26
- package/lib/esm/BatchedModels.js.map +1 -1
- package/lib/esm/BatchedSpatialTileTreeRefs.d.ts.map +1 -1
- package/lib/esm/BatchedSpatialTileTreeRefs.js +58 -50
- package/lib/esm/BatchedSpatialTileTreeRefs.js.map +1 -1
- package/lib/esm/BatchedTile.d.ts.map +1 -1
- package/lib/esm/BatchedTile.js +3 -0
- package/lib/esm/BatchedTile.js.map +1 -1
- package/lib/esm/BatchedTileContentReader.js.map +1 -1
- package/lib/esm/BatchedTileTree.d.ts +5 -3
- package/lib/esm/BatchedTileTree.d.ts.map +1 -1
- package/lib/esm/BatchedTileTree.js +1 -0
- package/lib/esm/BatchedTileTree.js.map +1 -1
- package/lib/esm/BatchedTileTreeReference.d.ts +25 -27
- package/lib/esm/BatchedTileTreeReference.d.ts.map +1 -1
- package/lib/esm/BatchedTileTreeReference.js +63 -41
- package/lib/esm/BatchedTileTreeReference.js.map +1 -1
- package/lib/esm/BatchedTileTreeSupplier.d.ts +5 -0
- package/lib/esm/BatchedTileTreeSupplier.d.ts.map +1 -1
- package/lib/esm/BatchedTileTreeSupplier.js +5 -3
- package/lib/esm/BatchedTileTreeSupplier.js.map +1 -1
- package/lib/esm/BatchedTilesetReader.d.ts +29 -12
- package/lib/esm/BatchedTilesetReader.d.ts.map +1 -1
- package/lib/esm/BatchedTilesetReader.js +19 -8
- package/lib/esm/BatchedTilesetReader.js.map +1 -1
- package/lib/esm/FrontendTiles.js.map +1 -1
- package/lib/esm/LoggerCategory.js.map +1 -1
- package/lib/esm/ModelGroup.d.ts +48 -0
- package/lib/esm/ModelGroup.d.ts.map +1 -0
- package/lib/esm/ModelGroup.js +85 -0
- package/lib/esm/ModelGroup.js.map +1 -0
- package/lib/esm/ModelGroupDisplayTransforms.d.ts +22 -0
- package/lib/esm/ModelGroupDisplayTransforms.d.ts.map +1 -0
- package/lib/esm/ModelGroupDisplayTransforms.js +58 -0
- package/lib/esm/ModelGroupDisplayTransforms.js.map +1 -0
- package/lib/esm/frontend-tiles.js.map +1 -1
- package/package.json +13 -14
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { Id64String } from "@itwin/core-bentley";
|
|
1
|
+
import { Id64Set, Id64String } from "@itwin/core-bentley";
|
|
2
2
|
import { RenderSchedule, ViewFlagOverrides } from "@itwin/core-common";
|
|
3
3
|
import { ImdlDecoder, Tile, TileDrawArgs, TileTree, TileTreeParams } from "@itwin/core-frontend";
|
|
4
4
|
import { BatchedTile, BatchedTileParams } from "./BatchedTile";
|
|
5
|
-
import { BatchedTilesetReader } from "./BatchedTilesetReader";
|
|
5
|
+
import { BatchedTilesetReader, ModelMetadata } from "./BatchedTilesetReader";
|
|
6
6
|
/** @internal */
|
|
7
7
|
export interface BatchedTileTreeParams extends TileTreeParams {
|
|
8
8
|
rootTile: BatchedTileParams;
|
|
9
9
|
reader: BatchedTilesetReader;
|
|
10
10
|
script?: RenderSchedule.Script;
|
|
11
|
-
|
|
11
|
+
models: Map<Id64String, ModelMetadata>;
|
|
12
|
+
modelGroups: Id64Set[] | undefined;
|
|
12
13
|
}
|
|
13
14
|
/** @internal */
|
|
14
15
|
export declare class BatchedTileTree extends TileTree {
|
|
@@ -16,6 +17,7 @@ export declare class BatchedTileTree extends TileTree {
|
|
|
16
17
|
readonly reader: BatchedTilesetReader;
|
|
17
18
|
readonly scheduleScript?: RenderSchedule.Script;
|
|
18
19
|
readonly decoder: ImdlDecoder;
|
|
20
|
+
readonly modelGroups: Id64Set[] | undefined;
|
|
19
21
|
constructor(params: BatchedTileTreeParams);
|
|
20
22
|
dispose(): void;
|
|
21
23
|
get rootTile(): BatchedTile;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedTileTree.d.ts","sourceRoot":"","sources":["../../src/BatchedTileTree.ts"],"names":[],"mappings":"AAKA,OAAO,EAAe,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"BatchedTileTree.d.ts","sourceRoot":"","sources":["../../src/BatchedTileTree.ts"],"names":[],"mappings":"AAKA,OAAO,EAAe,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAyB,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EACe,WAAW,EAAa,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EACzF,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAQ7E,gBAAgB;AAChB,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IAC3D,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,MAAM,EAAE,oBAAoB,CAAC;IAC7B,MAAM,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IACvC,WAAW,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;CACpC;AAED,gBAAgB;AAChB,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,SAAgB,MAAM,EAAE,oBAAoB,CAAC;IAC7C,SAAgB,cAAc,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC;IACvD,SAAgB,OAAO,EAAE,WAAW,CAAC;IACrC,SAAgB,WAAW,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;gBAEhC,MAAM,EAAE,qBAAqB;IAkBhC,OAAO,IAAI,IAAI;IAK/B,IAAoB,QAAQ,IAAI,WAAW,CAE1C;IAED,IAAoB,IAAI,IAAI,OAAO,CAElC;IAED,IAAoB,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjD;IAED,IAAoB,iBAAiB,IAAI,iBAAiB,CAEzD;IAGe,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,EAAE;IAMxC,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAQ9B,KAAK,IAAI,IAAI;CAI9B"}
|
|
@@ -18,6 +18,7 @@ export class BatchedTileTree extends TileTree {
|
|
|
18
18
|
this._rootTile = new BatchedTile(params.rootTile, this);
|
|
19
19
|
this.reader = params.reader;
|
|
20
20
|
this.scheduleScript = params.script;
|
|
21
|
+
this.modelGroups = params.modelGroups;
|
|
21
22
|
this.decoder = acquireImdlDecoder({
|
|
22
23
|
type: BatchType.Primary,
|
|
23
24
|
timeline: this.scheduleScript,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedTileTree.js","sourceRoot":"","sources":["../../src/BatchedTileTree.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"BatchedTileTree.js","sourceRoot":"","sources":["../../src/BatchedTileTree.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,WAAW,EAAuB,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAqC,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EACL,kBAAkB,EAAe,SAAS,EAAsB,QAAQ,GACzE,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAqB,MAAM,eAAe,CAAC;AAE/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,gBAAgB,GAAsB;IAC1C,UAAU,EAAE,UAAU,CAAC,WAAW;IAClC,YAAY,EAAE,KAAK;CACpB,CAAC;AAWF,gBAAgB;AAChB,MAAM,OAAO,eAAgB,SAAQ,QAAQ;IAO3C,YAAmB,MAA6B;QAC9C,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,SAAS,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAEtC,IAAI,CAAC,OAAO,GAAG,kBAAkB,CAAC;YAChC,IAAI,EAAE,SAAS,CAAC,OAAO;YACvB,QAAQ,EAAE,IAAI,CAAC,cAAc;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,OAAO;YAC1B,IAAI,EAAE,IAAI;YACV,sBAAsB,EAAE,KAAK;YAC7B,QAAQ,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,kBAAkB;SAClD,CAAC,CAAC;IACL,CAAC;IAEe,OAAO;QACrB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;IAED,IAAoB,QAAQ;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAoB,IAAI;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAoB,QAAQ;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAoB,iBAAiB;QACnC,OAAO,oBAAoB,CAAC,WAAW,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAClE,CAAC;IAED,gEAAgE;IAChD,YAAY,CAAC,IAAkB;QAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACrD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAEe,IAAI,CAAC,IAAkB;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK;YACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEe,KAAK;QACnB,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;CACF","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\nimport { BeTimePoint, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport { BatchType, RenderMode, RenderSchedule, ViewFlagOverrides } from \"@itwin/core-common\";\nimport {\n acquireImdlDecoder, ImdlDecoder, IModelApp, Tile, TileDrawArgs, TileTree, TileTreeParams,\n} from \"@itwin/core-frontend\";\nimport { BatchedTile, BatchedTileParams } from \"./BatchedTile\";\nimport { BatchedTilesetReader, ModelMetadata } from \"./BatchedTilesetReader\";\nimport { frontendTilesOptions } from \"./FrontendTiles\";\n\nconst defaultViewFlags: ViewFlagOverrides = {\n renderMode: RenderMode.SmoothShade,\n visibleEdges: false,\n};\n\n/** @internal */\nexport interface BatchedTileTreeParams extends TileTreeParams {\n rootTile: BatchedTileParams;\n reader: BatchedTilesetReader;\n script?: RenderSchedule.Script;\n models: Map<Id64String, ModelMetadata>;\n modelGroups: Id64Set[] | undefined;\n}\n\n/** @internal */\nexport class BatchedTileTree extends TileTree {\n private readonly _rootTile: BatchedTile;\n public readonly reader: BatchedTilesetReader;\n public readonly scheduleScript?: RenderSchedule.Script;\n public readonly decoder: ImdlDecoder;\n public readonly modelGroups: Id64Set[] | undefined;\n\n public constructor(params: BatchedTileTreeParams) {\n super(params);\n this._rootTile = new BatchedTile(params.rootTile, this);\n this.reader = params.reader;\n this.scheduleScript = params.script;\n this.modelGroups = params.modelGroups;\n\n this.decoder = acquireImdlDecoder({\n type: BatchType.Primary,\n timeline: this.scheduleScript,\n iModel: this.iModel,\n batchModelId: this.modelId,\n is3d: true,\n containsTransformNodes: false,\n noWorker: !IModelApp.tileAdmin.decodeImdlInWorker,\n });\n }\n\n public override dispose(): void {\n this.decoder.release();\n super.dispose();\n }\n\n public override get rootTile(): BatchedTile {\n return this._rootTile;\n }\n\n public override get is3d(): boolean {\n return true;\n }\n\n public override get maxDepth(): number | undefined {\n return undefined;\n }\n\n public override get viewFlagOverrides(): ViewFlagOverrides {\n return frontendTilesOptions.enableEdges ?{ } : defaultViewFlags;\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n public override _selectTiles(args: TileDrawArgs): Tile[] {\n const selected = new Set<BatchedTile>();\n this.rootTile.selectTiles(selected, args, undefined);\n return Array.from(selected);\n }\n\n public override draw(args: TileDrawArgs): void {\n const tiles = this.selectTiles(args);\n for (const tile of tiles)\n tile.drawGraphics(args);\n\n args.drawGraphics();\n }\n\n public override prune(): void {\n const olderThan = BeTimePoint.now().minus(this.expirationTime);\n this.rootTile.prune(olderThan);\n }\n}\n"]}
|
|
@@ -1,34 +1,32 @@
|
|
|
1
1
|
import { Range3d, Transform } from "@itwin/core-geometry";
|
|
2
|
-
import { BatchType, FeatureAppearance, FeatureAppearanceProvider, FeatureAppearanceSource, GeometryClass,
|
|
3
|
-
import {
|
|
2
|
+
import { BatchType, FeatureAppearance, FeatureAppearanceProvider, FeatureAppearanceSource, GeometryClass, ViewFlagOverrides } from "@itwin/core-common";
|
|
3
|
+
import { RenderClipVolume, SceneContext, TileDrawArgs, TileTree, TileTreeOwner, TileTreeReference } from "@itwin/core-frontend";
|
|
4
4
|
import { BatchedModels } from "./BatchedModels";
|
|
5
|
-
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
protected computeTransform(tree: TileTree): Transform;
|
|
5
|
+
import { ModelGroupInfo } from "./ModelGroup";
|
|
6
|
+
export interface BatchedTileTreeReferenceArgs {
|
|
7
|
+
readonly models: BatchedModels;
|
|
8
|
+
readonly groups: ReadonlyArray<ModelGroupInfo>;
|
|
9
|
+
readonly treeOwner: TileTreeOwner;
|
|
10
|
+
readonly getCurrentTimePoint: () => number;
|
|
12
11
|
}
|
|
13
|
-
export declare class
|
|
14
|
-
private readonly
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
export declare class BatchedTileTreeReference extends TileTreeReference implements FeatureAppearanceProvider {
|
|
13
|
+
private readonly _args;
|
|
14
|
+
private readonly _groupIndex;
|
|
15
|
+
private readonly _animationNodeId?;
|
|
16
|
+
private readonly _branchId?;
|
|
17
|
+
constructor(args: BatchedTileTreeReferenceArgs, groupIndex: number, animationNodeId: number | undefined);
|
|
18
|
+
private get _groupInfo();
|
|
19
|
+
get treeOwner(): TileTreeOwner;
|
|
20
|
+
getAppearanceProvider(): FeatureAppearanceProvider;
|
|
21
|
+
protected getClipVolume(): RenderClipVolume | undefined;
|
|
18
22
|
getFeatureAppearance(source: FeatureAppearanceSource, elemLo: number, elemHi: number, subcatLo: number, subcatHi: number, geomClass: GeometryClass, modelLo: number, modelHi: number, type: BatchType, animationNodeId: number): FeatureAppearance | undefined;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
export declare class AnimatedBatchedTileTreeReference extends BatchedTileTreeReference {
|
|
27
|
-
private readonly _node;
|
|
28
|
-
private readonly _branchId;
|
|
29
|
-
constructor(treeOwner: TileTreeOwner, node: AnimationNode);
|
|
30
|
-
getAnimationTransformNodeId(): number;
|
|
31
|
-
computeBaseTransform(tree: TileTree): Transform;
|
|
23
|
+
unionFitRange(range: Range3d): void;
|
|
24
|
+
get castsShadows(): boolean;
|
|
25
|
+
getViewFlagOverrides(): ViewFlagOverrides;
|
|
26
|
+
draw(args: TileDrawArgs): void;
|
|
27
|
+
protected computeTransform(tree: TileTree): Transform;
|
|
28
|
+
protected getAnimationTransformNodeId(): number | undefined;
|
|
29
|
+
protected getGroupNodeId(): number | undefined;
|
|
32
30
|
createDrawArgs(context: SceneContext): TileDrawArgs | undefined;
|
|
33
31
|
}
|
|
34
32
|
//# sourceMappingURL=BatchedTileTreeReference.d.ts.map
|
|
@@ -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":"AAMA,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,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,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,OAAO,KAAK,UAAU,GAGrB;IAED,IAAoB,SAAS,IAAI,aAAa,CAE7C;IAEe,qBAAqB,IAAI,yBAAyB;cAI/C,aAAa,IAAI,gBAAgB,GAAG,SAAS;IAIzD,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"}
|
|
@@ -2,67 +2,89 @@
|
|
|
2
2
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
import {
|
|
6
|
-
|
|
5
|
+
import { assert } from "@itwin/core-bentley";
|
|
6
|
+
import { formatAnimationBranchId, TileGraphicType, TileTreeReference, } from "@itwin/core-frontend";
|
|
7
7
|
export class BatchedTileTreeReference extends TileTreeReference {
|
|
8
|
-
constructor(
|
|
8
|
+
constructor(args, groupIndex, animationNodeId) {
|
|
9
9
|
super();
|
|
10
|
-
this.
|
|
10
|
+
this._args = args;
|
|
11
|
+
this._groupIndex = groupIndex;
|
|
12
|
+
this._animationNodeId = animationNodeId;
|
|
13
|
+
if (undefined !== animationNodeId) {
|
|
14
|
+
assert(undefined !== this._groupInfo.timeline);
|
|
15
|
+
this._branchId = formatAnimationBranchId(this._groupInfo.timeline.modelId, animationNodeId);
|
|
16
|
+
}
|
|
11
17
|
}
|
|
12
|
-
get
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
computeBaseTransform(tree) {
|
|
16
|
-
return super.computeTransform(tree);
|
|
18
|
+
get _groupInfo() {
|
|
19
|
+
assert(this._groupIndex < this._args.groups.length);
|
|
20
|
+
return this._args.groups[this._groupIndex];
|
|
17
21
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
// ###TODO this.view.modelDisplayTransformProvider?.getModelDisplayTransform(modelId...)
|
|
21
|
-
return baseTf;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
export class PrimaryBatchedTileTreeReference extends BatchedTileTreeReference {
|
|
25
|
-
constructor(treeOwner, models) {
|
|
26
|
-
super(treeOwner);
|
|
27
|
-
this._models = models;
|
|
28
|
-
}
|
|
29
|
-
unionFitRange(range) {
|
|
30
|
-
this._models.unionRange(range);
|
|
22
|
+
get treeOwner() {
|
|
23
|
+
return this._args.treeOwner;
|
|
31
24
|
}
|
|
32
25
|
getAppearanceProvider() {
|
|
33
26
|
return this;
|
|
34
27
|
}
|
|
28
|
+
getClipVolume() {
|
|
29
|
+
return this._groupInfo.clip;
|
|
30
|
+
}
|
|
35
31
|
getFeatureAppearance(source, elemLo, elemHi, subcatLo, subcatHi, geomClass, modelLo, modelHi, type, animationNodeId) {
|
|
36
|
-
if (!this.
|
|
32
|
+
if (!this._args.models.isViewed(modelLo, modelHi))
|
|
37
33
|
return undefined;
|
|
38
34
|
return source.getAppearance(elemLo, elemHi, subcatLo, subcatHi, geomClass, modelLo, modelHi, type, animationNodeId);
|
|
39
35
|
}
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
unionFitRange(range) {
|
|
37
|
+
this._args.models.unionRange(range);
|
|
42
38
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
super
|
|
47
|
-
|
|
48
|
-
|
|
39
|
+
get castsShadows() {
|
|
40
|
+
if (this._groupInfo.planProjection)
|
|
41
|
+
return false;
|
|
42
|
+
return super.castsShadows;
|
|
43
|
+
}
|
|
44
|
+
getViewFlagOverrides() {
|
|
45
|
+
return this._groupInfo.viewFlags;
|
|
46
|
+
}
|
|
47
|
+
draw(args) {
|
|
48
|
+
if (this._groupInfo.planProjection?.overlay)
|
|
49
|
+
args.context.withGraphicType(TileGraphicType.Overlay, () => args.tree.draw(args));
|
|
50
|
+
else
|
|
51
|
+
super.draw(args);
|
|
52
|
+
}
|
|
53
|
+
computeTransform(tree) {
|
|
54
|
+
const group = this._groupInfo;
|
|
55
|
+
let baseTf = super.computeTransform(tree);
|
|
56
|
+
if (group.planProjection) {
|
|
57
|
+
baseTf = baseTf.clone();
|
|
58
|
+
baseTf.origin.z += group.planProjection.elevation;
|
|
59
|
+
}
|
|
60
|
+
if (group.timeline) {
|
|
61
|
+
assert(undefined !== this._animationNodeId);
|
|
62
|
+
const animTf = group.timeline.getTransform(this._animationNodeId, this._args.getCurrentTimePoint());
|
|
63
|
+
if (animTf)
|
|
64
|
+
animTf.multiplyTransformTransform(baseTf, baseTf);
|
|
65
|
+
}
|
|
66
|
+
const displayTf = group.displayTransform;
|
|
67
|
+
if (!displayTf)
|
|
68
|
+
return baseTf;
|
|
69
|
+
return displayTf.premultiply ? displayTf.transform.multiplyTransformTransform(baseTf) : baseTf.multiplyTransformTransform(displayTf.transform);
|
|
49
70
|
}
|
|
50
71
|
getAnimationTransformNodeId() {
|
|
51
|
-
return this.
|
|
72
|
+
return this._animationNodeId;
|
|
52
73
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const animTf = this._node.timeline.getTransform(this._node.nodeId, this._node.getCurrentTimePoint());
|
|
56
|
-
if (animTf)
|
|
57
|
-
animTf.multiplyTransformTransform(tf, tf);
|
|
58
|
-
return tf;
|
|
74
|
+
getGroupNodeId() {
|
|
75
|
+
return this._args.groups.length > 1 ? this._groupIndex : undefined;
|
|
59
76
|
}
|
|
60
77
|
createDrawArgs(context) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
78
|
+
if (this._branchId) {
|
|
79
|
+
const branch = context.viewport.target.animationBranches?.branchStates.get(this._branchId);
|
|
80
|
+
if (branch?.omit) {
|
|
81
|
+
// This branch is not supposed to be drawn
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
64
85
|
const args = super.createDrawArgs(context);
|
|
65
86
|
// ###TODO args.boundingRange = args.tree.getTransformNodeRange(this._animationTransformNodeId);
|
|
87
|
+
// ###TODO if PlanProjectionSettings.enforceDisplayPriority, createGraphicLayerContainer.
|
|
66
88
|
return args;
|
|
67
89
|
}
|
|
68
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedTileTreeReference.js","sourceRoot":"","sources":["../../src/BatchedTileTreeReference.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;
|
|
1
|
+
{"version":3,"file":"BatchedTileTreeReference.js","sourceRoot":"","sources":["../../src/BatchedTileTreeReference.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\nimport { assert } from \"@itwin/core-bentley\";\nimport { Range3d, Transform } from \"@itwin/core-geometry\";\nimport {\n BatchType, FeatureAppearance, FeatureAppearanceProvider, FeatureAppearanceSource, GeometryClass, ViewFlagOverrides,\n} from \"@itwin/core-common\";\nimport {\n formatAnimationBranchId, RenderClipVolume, SceneContext, TileDrawArgs, TileGraphicType, TileTree, TileTreeOwner, TileTreeReference,\n} from \"@itwin/core-frontend\";\nimport { BatchedModels } from \"./BatchedModels\";\nimport { ModelGroupInfo } from \"./ModelGroup\";\n\nexport interface BatchedTileTreeReferenceArgs {\n readonly models: BatchedModels;\n readonly groups: ReadonlyArray<ModelGroupInfo>;\n readonly treeOwner: TileTreeOwner;\n readonly getCurrentTimePoint: () => number;\n}\n\nexport class BatchedTileTreeReference extends TileTreeReference implements FeatureAppearanceProvider {\n private readonly _args: BatchedTileTreeReferenceArgs;\n private readonly _groupIndex: number;\n private readonly _animationNodeId?: number;\n private readonly _branchId?: string;\n\n public constructor(args: BatchedTileTreeReferenceArgs, groupIndex: number, animationNodeId: number | undefined) {\n super();\n this._args = args;\n this._groupIndex = groupIndex;\n this._animationNodeId = animationNodeId;\n if (undefined !== animationNodeId) {\n assert(undefined !== this._groupInfo.timeline);\n this._branchId = formatAnimationBranchId(this._groupInfo.timeline.modelId, animationNodeId);\n }\n }\n\n private get _groupInfo(): ModelGroupInfo {\n assert(this._groupIndex < this._args.groups.length);\n return this._args.groups[this._groupIndex];\n }\n\n public override get treeOwner(): TileTreeOwner {\n return this._args.treeOwner;\n }\n\n public override getAppearanceProvider(): FeatureAppearanceProvider {\n return this;\n }\n\n protected override getClipVolume(): RenderClipVolume | undefined {\n return this._groupInfo.clip;\n }\n\n public getFeatureAppearance(\n source: FeatureAppearanceSource,\n elemLo: number, elemHi: number,\n subcatLo: number, subcatHi: number,\n geomClass: GeometryClass,\n modelLo: number, modelHi: number,\n type: BatchType,\n animationNodeId: number,\n ): FeatureAppearance | undefined {\n if (!this._args.models.isViewed(modelLo, modelHi))\n return undefined;\n\n return source.getAppearance(elemLo, elemHi, subcatLo, subcatHi, geomClass, modelLo, modelHi, type, animationNodeId);\n }\n\n public override unionFitRange(range: Range3d): void {\n this._args.models.unionRange(range);\n }\n\n public override get castsShadows(): boolean {\n if (this._groupInfo.planProjection)\n return false;\n\n return super.castsShadows;\n }\n\n public override getViewFlagOverrides(): ViewFlagOverrides {\n return this._groupInfo.viewFlags;\n }\n\n public override draw(args: TileDrawArgs): void {\n if (this._groupInfo.planProjection?.overlay)\n args.context.withGraphicType(TileGraphicType.Overlay, () => args.tree.draw(args));\n else\n super.draw(args);\n }\n\n protected override computeTransform(tree: TileTree): Transform {\n const group = this._groupInfo;\n let baseTf = super.computeTransform(tree);\n\n if (group.planProjection) {\n baseTf = baseTf.clone();\n baseTf.origin.z += group.planProjection.elevation;\n }\n\n if (group.timeline) {\n assert(undefined !== this._animationNodeId);\n const animTf = group.timeline.getTransform(this._animationNodeId, this._args.getCurrentTimePoint());\n if (animTf)\n animTf.multiplyTransformTransform(baseTf, baseTf);\n }\n\n const displayTf = group.displayTransform;\n if (!displayTf)\n return baseTf;\n\n return displayTf.premultiply ? displayTf.transform.multiplyTransformTransform(baseTf) : baseTf.multiplyTransformTransform(displayTf.transform);\n }\n\n protected override getAnimationTransformNodeId() {\n return this._animationNodeId;\n }\n\n protected override getGroupNodeId() {\n return this._args.groups.length > 1 ? this._groupIndex : undefined;\n }\n\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\n if (this._branchId) {\n const branch = context.viewport.target.animationBranches?.branchStates.get(this._branchId);\n if (branch?.omit) {\n // This branch is not supposed to be drawn\n return undefined;\n }\n }\n\n const args = super.createDrawArgs(context);\n\n // ###TODO args.boundingRange = args.tree.getTransformNodeRange(this._animationTransformNodeId);\n // ###TODO if PlanProjectionSettings.enforceDisplayPriority, createGraphicLayerContainer.\n\n return args;\n }\n}\n"]}
|
|
@@ -5,6 +5,11 @@ import { BatchedTilesetSpec } from "./BatchedTilesetReader";
|
|
|
5
5
|
export interface BatchedTileTreeId {
|
|
6
6
|
spec: BatchedTilesetSpec;
|
|
7
7
|
script?: RenderSchedule.Script;
|
|
8
|
+
/** A stringified representation of the [[ModelGroup]]s by which to structure the contents of the tiles.
|
|
9
|
+
* Every unique combination of model groups has a corresponding unique string representation.
|
|
10
|
+
* @see [[BatchedModelGroups.guid]].
|
|
11
|
+
*/
|
|
12
|
+
modelGroups: string;
|
|
8
13
|
}
|
|
9
14
|
/** @internal */
|
|
10
15
|
export declare function getBatchedTileTreeOwner(iModel: IModelConnection, treeId: BatchedTileTreeId): TileTreeOwner;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedTileTreeSupplier.d.ts","sourceRoot":"","sources":["../../src/BatchedTileTreeSupplier.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACL,gBAAgB,EAAY,aAAa,EAC1C,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAwB,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGlF,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"BatchedTileTreeSupplier.d.ts","sourceRoot":"","sources":["../../src/BatchedTileTreeSupplier.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EACL,gBAAgB,EAAY,aAAa,EAC1C,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAwB,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGlF,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC;IAC/B;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AA2BD,gBAAgB;AAChB,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,GAAG,aAAa,CAE1G"}
|
|
@@ -2,19 +2,21 @@
|
|
|
2
2
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
-
import { comparePossiblyUndefined, compareStrings, Logger } from "@itwin/core-bentley";
|
|
5
|
+
import { comparePossiblyUndefined, compareStrings, CompressedId64Set, Logger } from "@itwin/core-bentley";
|
|
6
6
|
import { loggerCategory } from "./LoggerCategory";
|
|
7
7
|
import { BatchedTilesetReader } from "./BatchedTilesetReader";
|
|
8
8
|
import { BatchedTileTree } from "./BatchedTileTree";
|
|
9
9
|
class BatchedTileTreeSupplier {
|
|
10
10
|
compareTileTreeIds(lhs, rhs) {
|
|
11
|
-
return compareStrings(lhs.toString(), rhs.toString())
|
|
11
|
+
return compareStrings(lhs.spec.baseUrl.toString(), rhs.spec.baseUrl.toString())
|
|
12
|
+
|| compareStrings(lhs.modelGroups, rhs.modelGroups)
|
|
12
13
|
|| comparePossiblyUndefined((x, y) => x.compareTo(y), lhs.script, rhs.script);
|
|
13
14
|
}
|
|
14
15
|
async createTileTree(treeId, iModel) {
|
|
15
16
|
const spec = treeId.spec;
|
|
16
17
|
try {
|
|
17
|
-
const
|
|
18
|
+
const modelGroups = treeId.modelGroups ? treeId.modelGroups.split("_").map((x) => CompressedId64Set.decompressSet(x)) : undefined;
|
|
19
|
+
const reader = new BatchedTilesetReader(spec, iModel, modelGroups);
|
|
18
20
|
const params = await reader.readTileTreeParams();
|
|
19
21
|
params.script = treeId.script;
|
|
20
22
|
return new BatchedTileTree(params);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedTileTreeSupplier.js","sourceRoot":"","sources":["../../src/BatchedTileTreeSupplier.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"BatchedTileTreeSupplier.js","sourceRoot":"","sources":["../../src/BatchedTileTreeSupplier.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAK1G,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAsB,MAAM,wBAAwB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAapD,MAAM,uBAAuB;IACpB,kBAAkB,CAAC,GAAsB,EAAE,GAAsB;QACtE,OAAO,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;eAC1E,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC;eAChD,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClF,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,MAAyB,EAAE,MAAwB;QAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAClI,MAAM,MAAM,GAAG,IAAI,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;YACnE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAEjD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC9B,OAAO,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;SACpC;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YACzC,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;CACF;AAED,MAAM,uBAAuB,GAAqB,IAAI,uBAAuB,EAAE,CAAC;AAEhF,gBAAgB;AAChB,MAAM,UAAU,uBAAuB,CAAC,MAAwB,EAAE,MAAyB;IACzF,OAAO,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;AACxE,CAAC","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\nimport { comparePossiblyUndefined, compareStrings, CompressedId64Set, Logger } from \"@itwin/core-bentley\";\nimport { RenderSchedule } from \"@itwin/core-common\";\nimport {\n IModelConnection, TileTree, TileTreeOwner, TileTreeSupplier,\n} from \"@itwin/core-frontend\";\nimport { loggerCategory } from \"./LoggerCategory\";\nimport { BatchedTilesetReader, BatchedTilesetSpec } from \"./BatchedTilesetReader\";\nimport { BatchedTileTree } from \"./BatchedTileTree\";\n\n/** @internal */\nexport interface BatchedTileTreeId {\n spec: BatchedTilesetSpec;\n script?: RenderSchedule.Script;\n /** A stringified representation of the [[ModelGroup]]s by which to structure the contents of the tiles.\n * Every unique combination of model groups has a corresponding unique string representation.\n * @see [[BatchedModelGroups.guid]].\n */\n modelGroups: string;\n}\n\nclass BatchedTileTreeSupplier implements TileTreeSupplier {\n public compareTileTreeIds(lhs: BatchedTileTreeId, rhs: BatchedTileTreeId): number {\n return compareStrings(lhs.spec.baseUrl.toString(), rhs.spec.baseUrl.toString())\n || compareStrings(lhs.modelGroups, rhs.modelGroups)\n || comparePossiblyUndefined((x, y) => x.compareTo(y), lhs.script, rhs.script);\n }\n\n public async createTileTree(treeId: BatchedTileTreeId, iModel: IModelConnection): Promise<TileTree | undefined> {\n const spec = treeId.spec;\n try {\n const modelGroups = treeId.modelGroups ? treeId.modelGroups.split(\"_\").map((x) => CompressedId64Set.decompressSet(x)) : undefined;\n const reader = new BatchedTilesetReader(spec, iModel, modelGroups);\n const params = await reader.readTileTreeParams();\n\n params.script = treeId.script;\n return new BatchedTileTree(params);\n } catch (err) {\n Logger.logException(loggerCategory, err);\n return undefined;\n }\n }\n}\n\nconst batchedTileTreeSupplier: TileTreeSupplier = new BatchedTileTreeSupplier();\n\n/** @internal */\nexport function getBatchedTileTreeOwner(iModel: IModelConnection, treeId: BatchedTileTreeId): TileTreeOwner {\n return iModel.tiles.getTileTreeOwner(treeId, batchedTileTreeSupplier);\n}\n"]}
|
|
@@ -1,13 +1,31 @@
|
|
|
1
|
-
import { Id64String } from "@itwin/core-bentley";
|
|
2
|
-
import {
|
|
1
|
+
import { Id64Set, Id64String } from "@itwin/core-bentley";
|
|
2
|
+
import { Range3d, Range3dProps } from "@itwin/core-geometry";
|
|
3
|
+
import { Tileset3dSchema as schema, ViewFlagOverrides } from "@itwin/core-common";
|
|
3
4
|
import { IModelConnection } from "@itwin/core-frontend";
|
|
4
5
|
import { BatchedTileTreeParams } from "./BatchedTileTree";
|
|
5
6
|
import { BatchedTile, BatchedTileParams } from "./BatchedTile";
|
|
6
7
|
/** @internal */
|
|
8
|
+
export interface ModelMetadataProps {
|
|
9
|
+
/** The spatial volume occupied by this model's geometry. */
|
|
10
|
+
extents: Range3dProps;
|
|
11
|
+
/** Overrides to be applied to the view's [ViewFlags]($common) when rendering this model, if any. */
|
|
12
|
+
viewFlags?: ViewFlagOverrides;
|
|
13
|
+
}
|
|
14
|
+
/** @internal */
|
|
15
|
+
export interface ModelMetadata {
|
|
16
|
+
/** The spatial volume occupied by this model's geometry. */
|
|
17
|
+
extents: Range3d;
|
|
18
|
+
/** Overrides to be applied to the view's [ViewFlags]($common) when rendering this model, if any. */
|
|
19
|
+
viewFlags?: ViewFlagOverrides;
|
|
20
|
+
}
|
|
21
|
+
/** @internal */
|
|
7
22
|
export interface BatchedTilesetProps extends schema.Tileset {
|
|
8
|
-
extensions
|
|
9
|
-
BENTLEY_BatchedTileSet
|
|
10
|
-
|
|
23
|
+
extensions: {
|
|
24
|
+
BENTLEY_BatchedTileSet: {
|
|
25
|
+
/** Contains an entry for every model that was processed during publishing of the tileset. */
|
|
26
|
+
models: {
|
|
27
|
+
[modelId: Id64String]: ModelMetadataProps | undefined;
|
|
28
|
+
};
|
|
11
29
|
};
|
|
12
30
|
};
|
|
13
31
|
}
|
|
@@ -15,20 +33,19 @@ export interface BatchedTilesetProps extends schema.Tileset {
|
|
|
15
33
|
export interface BatchedTilesetSpec {
|
|
16
34
|
baseUrl: URL;
|
|
17
35
|
props: BatchedTilesetProps;
|
|
36
|
+
models: Map<Id64String, ModelMetadata>;
|
|
18
37
|
}
|
|
19
38
|
/** @internal */
|
|
20
39
|
export declare namespace BatchedTilesetSpec {
|
|
21
|
-
function create(baseUrl: URL, json: unknown):
|
|
22
|
-
baseUrl: URL;
|
|
23
|
-
props: BatchedTilesetProps;
|
|
24
|
-
};
|
|
40
|
+
function create(baseUrl: URL, json: unknown): BatchedTilesetSpec;
|
|
25
41
|
}
|
|
26
42
|
/** @internal */
|
|
27
43
|
export declare class BatchedTilesetReader {
|
|
28
44
|
private readonly _iModel;
|
|
29
|
-
private readonly
|
|
30
|
-
readonly
|
|
31
|
-
constructor(spec: BatchedTilesetSpec, iModel: IModelConnection);
|
|
45
|
+
private readonly _spec;
|
|
46
|
+
private readonly _modelGroups;
|
|
47
|
+
constructor(spec: BatchedTilesetSpec, iModel: IModelConnection, modelGroups: Id64Set[] | undefined);
|
|
48
|
+
get baseUrl(): URL;
|
|
32
49
|
readTileParams(json: schema.Tile, parent?: BatchedTile): BatchedTileParams;
|
|
33
50
|
readTileTreeParams(): Promise<BatchedTileTreeParams>;
|
|
34
51
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedTilesetReader.d.ts","sourceRoot":"","sources":["../../src/BatchedTilesetReader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"BatchedTilesetReader.d.ts","sourceRoot":"","sources":["../../src/BatchedTilesetReader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAQ,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EACc,OAAO,EAAE,YAAY,EACzC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,IAAI,MAAM,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAA2C,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE/D,gBAAgB;AAChB,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,OAAO,EAAE,YAAY,CAAC;IACtB,oGAAoG;IACpG,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED,gBAAgB;AAChB,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,OAAO,EAAE,OAAO,CAAC;IACjB,oGAAoG;IACpG,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED,gBAAgB;AAChB,MAAM,WAAW,mBAAoB,SAAQ,MAAM,CAAC,OAAO;IACzD,UAAU,EAAE;QACV,sBAAsB,EAAE;YACtB,6FAA6F;YAC7F,MAAM,EAAE;gBACN,CAAC,OAAO,EAAE,UAAU,GAAG,kBAAkB,GAAG,SAAS,CAAC;aACvD,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAuBD,gBAAgB;AAChB,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,GAAG,CAAC;IACb,KAAK,EAAE,mBAAmB,CAAC;IAC3B,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;CACxC;AAED,gBAAgB;AAChB,yBAAiB,kBAAkB,CAAC;IAClC,SAAgB,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,GAAG,kBAAkB,CAYtE;CACF;AAqCD,gBAAgB;AAChB,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;gBAElC,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,SAAS;IAMzG,IAAW,OAAO,IAAI,GAAG,CAA+B;IAEjD,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,iBAAiB;IAkCpE,kBAAkB,IAAI,OAAO,CAAC,qBAAqB,CAAC;CAgBlE"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
3
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { Id64 } from "@itwin/core-bentley";
|
|
5
6
|
import { Matrix3d, Point3d, Range3d, Transform, Vector3d, } from "@itwin/core-geometry";
|
|
6
7
|
import { RealityModelTileUtils, TileLoadPriority } from "@itwin/core-frontend";
|
|
7
8
|
function isBatchedTileset(json) {
|
|
@@ -10,6 +11,10 @@ function isBatchedTileset(json) {
|
|
|
10
11
|
const props = json;
|
|
11
12
|
if (!props.root || !props.asset)
|
|
12
13
|
return false;
|
|
14
|
+
// The extension is required.
|
|
15
|
+
const models = props.extensions?.BENTLEY_BatchedTileSet?.models;
|
|
16
|
+
if (!models || typeof models !== "object")
|
|
17
|
+
return false;
|
|
13
18
|
// ###TODO spec requires geometricError to be present on tileset and all tiles; exporter is omitting from tileset.
|
|
14
19
|
if (undefined === props.geometricError)
|
|
15
20
|
props.geometricError = props.root.geometricError;
|
|
@@ -21,7 +26,13 @@ export var BatchedTilesetSpec;
|
|
|
21
26
|
function create(baseUrl, json) {
|
|
22
27
|
if (!isBatchedTileset(json))
|
|
23
28
|
throw new Error("Invalid tileset JSON");
|
|
24
|
-
|
|
29
|
+
const models = new Map();
|
|
30
|
+
for (const [modelId, value] of Object.entries(json.extensions.BENTLEY_BatchedTileSet.models)) {
|
|
31
|
+
if (Id64.isValidId64(modelId) && value) {
|
|
32
|
+
models.set(modelId, { extents: Range3d.fromJSON(value.extents), viewFlags: value.viewFlags ? { ...value.viewFlags } : undefined });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return { baseUrl, props: json, models };
|
|
25
36
|
}
|
|
26
37
|
BatchedTilesetSpec.create = create;
|
|
27
38
|
})(BatchedTilesetSpec || (BatchedTilesetSpec = {}));
|
|
@@ -53,11 +64,12 @@ function transformFromJSON(json) {
|
|
|
53
64
|
}
|
|
54
65
|
/** @internal */
|
|
55
66
|
export class BatchedTilesetReader {
|
|
56
|
-
constructor(spec, iModel) {
|
|
67
|
+
constructor(spec, iModel, modelGroups) {
|
|
57
68
|
this._iModel = iModel;
|
|
58
|
-
this.
|
|
59
|
-
this.
|
|
69
|
+
this._spec = spec;
|
|
70
|
+
this._modelGroups = modelGroups;
|
|
60
71
|
}
|
|
72
|
+
get baseUrl() { return this._spec.baseUrl; }
|
|
61
73
|
readTileParams(json, parent) {
|
|
62
74
|
const content = json.content;
|
|
63
75
|
const geometricError = json.geometricError;
|
|
@@ -90,10 +102,8 @@ export class BatchedTilesetReader {
|
|
|
90
102
|
};
|
|
91
103
|
}
|
|
92
104
|
async readTileTreeParams() {
|
|
93
|
-
const root = this.
|
|
105
|
+
const root = this._spec.props.root;
|
|
94
106
|
const location = root.transform ? transformFromJSON(root.transform) : Transform.createIdentity();
|
|
95
|
-
const extension = this._tileset.extensions?.BENTLEY_BatchedTileSet;
|
|
96
|
-
const includedModels = extension ? new Set(extension.includedModels) : undefined;
|
|
97
107
|
return {
|
|
98
108
|
id: "spatial-models",
|
|
99
109
|
modelId: this._iModel.transientIds.getNext(),
|
|
@@ -102,7 +112,8 @@ export class BatchedTilesetReader {
|
|
|
102
112
|
priority: TileLoadPriority.Primary,
|
|
103
113
|
rootTile: this.readTileParams(root),
|
|
104
114
|
reader: this,
|
|
105
|
-
|
|
115
|
+
models: this._spec.models,
|
|
116
|
+
modelGroups: this._modelGroups,
|
|
106
117
|
};
|
|
107
118
|
}
|
|
108
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedTilesetReader.js","sourceRoot":"","sources":["../../src/BatchedTilesetReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n Matrix3d, Point3d, Range3d, Transform, Vector3d,\r\n} from \"@itwin/core-geometry\";\r\nimport { Tileset3dSchema as schema } from \"@itwin/core-common\";\r\nimport { IModelConnection, RealityModelTileUtils, TileLoadPriority } from \"@itwin/core-frontend\";\r\nimport { BatchedTileTreeParams } from \"./BatchedTileTree\";\r\nimport { BatchedTile, BatchedTileParams } from \"./BatchedTile\";\r\n\r\n/** @internal */\r\nexport interface BatchedTilesetProps extends schema.Tileset {\r\n extensions?: {\r\n BENTLEY_BatchedTileSet?: { // eslint-disable-line @typescript-eslint/naming-convention\r\n includedModels: Id64String[];\r\n };\r\n };\r\n}\r\n\r\nfunction isBatchedTileset(json: unknown): json is BatchedTilesetProps {\r\n if (typeof json !== \"object\")\r\n return false;\r\n\r\n const props = json as schema.Tileset;\r\n\r\n if (!props.root || !props.asset)\r\n return false;\r\n\r\n // ###TODO spec requires geometricError to be present on tileset and all tiles; exporter is omitting from tileset.\r\n if (undefined === props.geometricError)\r\n props.geometricError = props.root.geometricError;\r\n\r\n return true;\r\n}\r\n\r\n/** @internal */\r\nexport interface BatchedTilesetSpec {\r\n baseUrl: URL;\r\n props: BatchedTilesetProps;\r\n}\r\n\r\n/** @internal */\r\nexport namespace BatchedTilesetSpec {\r\n export function create(baseUrl: URL, json: unknown) {\r\n if (!isBatchedTileset(json))\r\n throw new Error(\"Invalid tileset JSON\");\r\n\r\n return { baseUrl, props: json };\r\n }\r\n}\r\n\r\nfunction rangeFromBoundingVolume(vol: schema.BoundingVolume): Range3d {\r\n if (vol.box) {\r\n const center = new Point3d(vol.box[0], vol.box[1], vol.box[2]);\r\n const ux = new Vector3d(vol.box[3], vol.box[4], vol.box[5]);\r\n const uy = new Vector3d(vol.box[6], vol.box[7], vol.box[8]);\r\n const uz = new Vector3d(vol.box[9], vol.box[10], vol.box[11]);\r\n\r\n const range = Range3d.createNull();\r\n for (let i = -1; i <= 1; i += 2)\r\n for (let j = -1; j <= 1; j += 2)\r\n for (let k = -1; k <= 1; k += 2)\r\n range.extendPoint(center.plus3Scaled(ux, i, uy, j, uz, k));\r\n\r\n return range;\r\n } else if (vol.sphere) {\r\n const center = new Point3d(vol.sphere[0], vol.sphere[1], vol.sphere[2]);\r\n const radius = vol.sphere[3];\r\n return Range3d.createXYZXYZ(center.x - radius, center.y - radius, center.z - radius, center.x + radius, center.y + radius, center.z + radius);\r\n }\r\n\r\n // We won't get region bounding volumes in our tiles.\r\n throw new Error(\"region bounding volume unimplemented\");\r\n}\r\n\r\nfunction transformFromJSON(json: schema.Transform): Transform {\r\n const translation = new Point3d(json[12], json[13], json[14]);\r\n const matrix = Matrix3d.createRowValues(\r\n json[0], json[4], json[8],\r\n json[1], json[5], json[9],\r\n json[2], json[6], json[10],\r\n );\r\n\r\n return Transform.createOriginAndMatrix(translation, matrix);\r\n}\r\n\r\n/** @internal */\r\nexport class BatchedTilesetReader {\r\n private readonly _iModel: IModelConnection;\r\n private readonly _tileset: schema.Tileset;\r\n public readonly baseUrl: URL;\r\n\r\n public constructor(spec: BatchedTilesetSpec, iModel: IModelConnection) {\r\n this._iModel = iModel;\r\n this._tileset = spec.props;\r\n this.baseUrl = spec.baseUrl;\r\n }\r\n\r\n public readTileParams(json: schema.Tile, parent?: BatchedTile): BatchedTileParams {\r\n const content = json.content;\r\n const geometricError = json.geometricError;\r\n const range = rangeFromBoundingVolume(json.boundingVolume);\r\n const isLeaf = undefined === json.children || json.children.length === 0;\r\n\r\n let transformToRoot;\r\n if (undefined !== parent) {\r\n const localToParent = json.transform ? transformFromJSON(json.transform) : undefined;\r\n const parentToRoot = parent.transformToRoot;\r\n if (localToParent) {\r\n if (parentToRoot)\r\n localToParent.multiplyTransformTransform(parentToRoot, localToParent);\r\n\r\n transformToRoot = localToParent;\r\n } else {\r\n transformToRoot = parentToRoot;\r\n }\r\n }\r\n\r\n // ###TODO evaluate this. The geometric errors in the tiles seem far too small.\r\n const maximumSizeScale = 8;\r\n return {\r\n parent,\r\n contentId: content?.uri ?? \"\",\r\n range,\r\n contentRange: content?.boundingVolume ? rangeFromBoundingVolume(content.boundingVolume) : undefined,\r\n isLeaf,\r\n maximumSize: maximumSizeScale * RealityModelTileUtils.maximumSizeFromGeometricTolerance(range, geometricError),\r\n childrenProps: isLeaf ? undefined : json.children,\r\n transformToRoot,\r\n };\r\n }\r\n\r\n public async readTileTreeParams(): Promise<BatchedTileTreeParams> {\r\n const root = this._tileset.root;\r\n const location = root.transform ? transformFromJSON(root.transform) : Transform.createIdentity();\r\n const extension = this._tileset.extensions?.BENTLEY_BatchedTileSet;\r\n const includedModels = extension ? new Set<Id64String>(extension.includedModels) : undefined;\r\n\r\n return {\r\n id: \"spatial-models\",\r\n modelId: this._iModel.transientIds.getNext(),\r\n iModel: this._iModel,\r\n location,\r\n priority: TileLoadPriority.Primary,\r\n rootTile: this.readTileParams(root),\r\n reader: this,\r\n includedModels,\r\n };\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"BatchedTilesetReader.js","sourceRoot":"","sources":["../../src/BatchedTilesetReader.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\nimport { Id64, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport {\n Matrix3d, Point3d, Range3d, Range3dProps, Transform, Vector3d,\n} from \"@itwin/core-geometry\";\nimport { Tileset3dSchema as schema, ViewFlagOverrides } from \"@itwin/core-common\";\nimport { IModelConnection, RealityModelTileUtils, TileLoadPriority } from \"@itwin/core-frontend\";\nimport { BatchedTileTreeParams } from \"./BatchedTileTree\";\nimport { BatchedTile, BatchedTileParams } from \"./BatchedTile\";\n\n/** @internal */\nexport interface ModelMetadataProps {\n /** The spatial volume occupied by this model's geometry. */\n extents: Range3dProps;\n /** Overrides to be applied to the view's [ViewFlags]($common) when rendering this model, if any. */\n viewFlags?: ViewFlagOverrides;\n}\n\n/** @internal */\nexport interface ModelMetadata {\n /** The spatial volume occupied by this model's geometry. */\n extents: Range3d;\n /** Overrides to be applied to the view's [ViewFlags]($common) when rendering this model, if any. */\n viewFlags?: ViewFlagOverrides;\n}\n\n/** @internal */\nexport interface BatchedTilesetProps extends schema.Tileset {\n extensions: {\n BENTLEY_BatchedTileSet: { // eslint-disable-line @typescript-eslint/naming-convention\n /** Contains an entry for every model that was processed during publishing of the tileset. */\n models: {\n [modelId: Id64String]: ModelMetadataProps | undefined;\n };\n };\n };\n}\n\nfunction isBatchedTileset(json: unknown): json is BatchedTilesetProps {\n if (typeof json !== \"object\")\n return false;\n\n const props = json as schema.Tileset;\n\n if (!props.root || !props.asset)\n return false;\n\n // The extension is required.\n const models = props.extensions?.BENTLEY_BatchedTileSet?.models;\n if (!models || typeof models !== \"object\")\n return false;\n\n // ###TODO spec requires geometricError to be present on tileset and all tiles; exporter is omitting from tileset.\n if (undefined === props.geometricError)\n props.geometricError = props.root.geometricError;\n\n return true;\n}\n\n/** @internal */\nexport interface BatchedTilesetSpec {\n baseUrl: URL;\n props: BatchedTilesetProps;\n models: Map<Id64String, ModelMetadata>;\n}\n\n/** @internal */\nexport namespace BatchedTilesetSpec {\n export function create(baseUrl: URL, json: unknown): BatchedTilesetSpec {\n if (!isBatchedTileset(json))\n throw new Error(\"Invalid tileset JSON\");\n\n const models = new Map<Id64String, ModelMetadata>();\n for (const [modelId, value] of Object.entries(json.extensions.BENTLEY_BatchedTileSet.models)) {\n if (Id64.isValidId64(modelId) && value) {\n models.set(modelId, { extents: Range3d.fromJSON(value.extents), viewFlags: value.viewFlags ? { ...value.viewFlags } : undefined });\n }\n }\n\n return { baseUrl, props: json, models };\n }\n}\n\nfunction rangeFromBoundingVolume(vol: schema.BoundingVolume): Range3d {\n if (vol.box) {\n const center = new Point3d(vol.box[0], vol.box[1], vol.box[2]);\n const ux = new Vector3d(vol.box[3], vol.box[4], vol.box[5]);\n const uy = new Vector3d(vol.box[6], vol.box[7], vol.box[8]);\n const uz = new Vector3d(vol.box[9], vol.box[10], vol.box[11]);\n\n const range = Range3d.createNull();\n for (let i = -1; i <= 1; i += 2)\n for (let j = -1; j <= 1; j += 2)\n for (let k = -1; k <= 1; k += 2)\n range.extendPoint(center.plus3Scaled(ux, i, uy, j, uz, k));\n\n return range;\n } else if (vol.sphere) {\n const center = new Point3d(vol.sphere[0], vol.sphere[1], vol.sphere[2]);\n const radius = vol.sphere[3];\n return Range3d.createXYZXYZ(center.x - radius, center.y - radius, center.z - radius, center.x + radius, center.y + radius, center.z + radius);\n }\n\n // We won't get region bounding volumes in our tiles.\n throw new Error(\"region bounding volume unimplemented\");\n}\n\nfunction transformFromJSON(json: schema.Transform): Transform {\n const translation = new Point3d(json[12], json[13], json[14]);\n const matrix = Matrix3d.createRowValues(\n json[0], json[4], json[8],\n json[1], json[5], json[9],\n json[2], json[6], json[10],\n );\n\n return Transform.createOriginAndMatrix(translation, matrix);\n}\n\n/** @internal */\nexport class BatchedTilesetReader {\n private readonly _iModel: IModelConnection;\n private readonly _spec: BatchedTilesetSpec;\n private readonly _modelGroups: Id64Set[] | undefined;\n\n public constructor(spec: BatchedTilesetSpec, iModel: IModelConnection, modelGroups: Id64Set[] | undefined) {\n this._iModel = iModel;\n this._spec = spec;\n this._modelGroups = modelGroups;\n }\n\n public get baseUrl(): URL { return this._spec.baseUrl; }\n\n public readTileParams(json: schema.Tile, parent?: BatchedTile): BatchedTileParams {\n const content = json.content;\n const geometricError = json.geometricError;\n const range = rangeFromBoundingVolume(json.boundingVolume);\n const isLeaf = undefined === json.children || json.children.length === 0;\n\n let transformToRoot;\n if (undefined !== parent) {\n const localToParent = json.transform ? transformFromJSON(json.transform) : undefined;\n const parentToRoot = parent.transformToRoot;\n if (localToParent) {\n if (parentToRoot)\n localToParent.multiplyTransformTransform(parentToRoot, localToParent);\n\n transformToRoot = localToParent;\n } else {\n transformToRoot = parentToRoot;\n }\n }\n\n // ###TODO evaluate this. The geometric errors in the tiles seem far too small.\n const maximumSizeScale = 8;\n return {\n parent,\n contentId: content?.uri ?? \"\",\n range,\n contentRange: content?.boundingVolume ? rangeFromBoundingVolume(content.boundingVolume) : undefined,\n isLeaf,\n maximumSize: maximumSizeScale * RealityModelTileUtils.maximumSizeFromGeometricTolerance(range, geometricError),\n childrenProps: isLeaf ? undefined : json.children,\n transformToRoot,\n };\n }\n\n public async readTileTreeParams(): Promise<BatchedTileTreeParams> {\n const root = this._spec.props.root;\n const location = root.transform ? transformFromJSON(root.transform) : Transform.createIdentity();\n\n return {\n id: \"spatial-models\",\n modelId: this._iModel.transientIds.getNext(),\n iModel: this._iModel,\n location,\n priority: TileLoadPriority.Primary,\n rootTile: this.readTileParams(root),\n reader: this,\n models: this._spec.models,\n modelGroups: this._modelGroups,\n };\n }\n}\n"]}
|