@itwin/frontend-tiles 4.4.0-dev.9 → 4.5.0-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedTile.js","sourceRoot":"","sources":["../../src/BatchedTile.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, BeTimePoint, ByteStream, Logger } from \"@itwin/core-bentley\";\r\nimport { Transform } from \"@itwin/core-geometry\";\r\nimport { ColorDef, Tileset3dSchema } from \"@itwin/core-common\";\r\nimport {\r\n GraphicBranch, GraphicBuilder, IModelApp, RealityTileLoader, RenderSystem, Tile, TileBoundingBoxes, TileContent,\r\n TileDrawArgs, TileParams, TileRequest, TileRequestChannel, TileTreeLoadStatus, TileUser, TileVisibility, Viewport,\r\n} from \"@itwin/core-frontend\";\r\nimport { loggerCategory } from \"./LoggerCategory\";\r\nimport { BatchedTileTree } from \"./BatchedTileTree\";\r\nimport { frontendTilesOptions } from \"./FrontendTiles\";\r\n\r\n/** @internal */\r\nexport interface BatchedTileParams extends TileParams {\r\n childrenProps: Tileset3dSchema.Tile[] | undefined;\r\n /** See BatchedTile.transformToRoot. */\r\n transformToRoot: Transform | undefined;\r\n}\r\n\r\nlet channel: TileRequestChannel | undefined;\r\n\r\n/** @internal */\r\nexport class BatchedTile extends Tile {\r\n private readonly _childrenProps?: Tileset3dSchema.Tile[];\r\n private readonly _unskippable: boolean;\r\n /** Transform from the tile's local coordinate system to that of the tileset. */\r\n public readonly transformToRoot?: Transform;\r\n\r\n public get batchedTree(): BatchedTileTree {\r\n return this.tree as BatchedTileTree;\r\n }\r\n\r\n public constructor(params: BatchedTileParams, tree: BatchedTileTree) {\r\n super(params, tree);\r\n\r\n // The root tile never has content, so it doesn't count toward max levels to skip.\r\n this._unskippable = 0 === (this.depth % frontendTilesOptions.maxLevelsToSkip);\r\n\r\n if (params.childrenProps?.length)\r\n this._childrenProps = params.childrenProps;\r\n\r\n if (!this.contentId) {\r\n this.setIsReady();\r\n // mark \"undisplayable\"\r\n this._maximumSize = 0;\r\n }\r\n\r\n if (!params.transformToRoot)\r\n return;\r\n\r\n this.transformToRoot = params.transformToRoot;\r\n this.boundingSphere.transformBy(this.transformToRoot, this.boundingSphere);\r\n this.transformToRoot.multiplyRange(this.range, this.range);\r\n if (this._contentRange)\r\n this.transformToRoot.multiplyRange(this._contentRange, this._contentRange);\r\n }\r\n\r\n private get _batchedChildren(): BatchedTile[] | undefined {\r\n return this.children as BatchedTile[] | undefined;\r\n }\r\n\r\n public override computeLoadPriority(viewports: Iterable<Viewport>, _users: Iterable<TileUser>): number {\r\n // Prioritize tiles closer to camera and center of attention (zoom point or screen center).\r\n return RealityTileLoader.computeTileLocationPriority(this, viewports, this.tree.iModelTransform);\r\n }\r\n\r\n public selectTiles(selected: Set<BatchedTile>, args: TileDrawArgs, closestDisplayableAncestor: BatchedTile | undefined): void {\r\n const vis = this.computeVisibility(args);\r\n if (TileVisibility.OutsideFrustum === vis)\r\n return;\r\n\r\n if (this._unskippable) {\r\n // Prevent this tile's content from being unloaded due to memory pressure.\r\n args.touchedTiles.add(this);\r\n args.markUsed(this);\r\n }\r\n\r\n closestDisplayableAncestor = this.hasGraphics ? this : closestDisplayableAncestor;\r\n if (TileVisibility.TooCoarse === vis && (this.isReady || !this._unskippable)) {\r\n args.markUsed(this);\r\n args.markReady(this);\r\n const childrenLoadStatus = this.loadChildren();\r\n if (TileTreeLoadStatus.Loading === childrenLoadStatus)\r\n args.markChildrenLoading();\r\n\r\n const children = this._batchedChildren;\r\n if (children) {\r\n for (const child of children)\r\n child.selectTiles(selected, args, closestDisplayableAncestor);\r\n\r\n return;\r\n }\r\n }\r\n\r\n // We want to display this tile. Request its content if not already loaded.\r\n if ((TileVisibility.Visible === vis || this._unskippable) && !this.isReady)\r\n args.insertMissing(this);\r\n\r\n if (closestDisplayableAncestor)\r\n selected.add(closestDisplayableAncestor);\r\n }\r\n\r\n protected override _loadChildren(resolve: (children: Tile[] | undefined) => void, reject: (error: Error) => void): void {\r\n let children: BatchedTile[] | undefined;\r\n if (this._childrenProps) {\r\n try {\r\n for (const childProps of this._childrenProps) {\r\n const params = this.batchedTree.reader.readTileParams(childProps, this);\r\n const child = new BatchedTile(params, this.batchedTree);\r\n children = children ?? [];\r\n children.push(child);\r\n }\r\n } catch (err) {\r\n Logger.logException(loggerCategory, err);\r\n children = undefined;\r\n if (err instanceof Error)\r\n reject(err);\r\n }\r\n }\r\n\r\n resolve(children);\r\n }\r\n\r\n public override get channel(): TileRequestChannel {\r\n if (!channel) {\r\n channel = new TileRequestChannel(\"itwinjs-batched-models\", 20);\r\n IModelApp.tileAdmin.channels.add(channel);\r\n }\r\n\r\n return channel;\r\n }\r\n\r\n public override async requestContent(_isCanceled: () => boolean): Promise<TileRequest.Response> {\r\n const url = new URL(this.contentId, this.batchedTree.reader.baseUrl);\r\n url.search = this.batchedTree.reader.baseUrl.search;\r\n const response = await fetch(url.toString());\r\n return response.arrayBuffer();\r\n }\r\n\r\n public override async readContent(data: TileRequest.ResponseData, system: RenderSystem, isCanceled?: () => boolean): Promise<TileContent> {\r\n assert(data instanceof Uint8Array);\r\n if (!(data instanceof Uint8Array))\r\n return { };\r\n\r\n try {\r\n const content = await this.batchedTree.decoder.decode({\r\n stream: ByteStream.fromUint8Array(data),\r\n options: { tileId: this.contentId },\r\n system,\r\n isCanceled,\r\n isLeaf: this.isLeaf,\r\n });\r\n\r\n if (this.transformToRoot) {\r\n if (content.graphic) {\r\n const branch = new GraphicBranch(true);\r\n branch.add(content.graphic);\r\n content.graphic = system.createBranch(branch, this.transformToRoot);\r\n }\r\n\r\n if (content.contentRange)\r\n content.contentRange = this.transformToRoot.multiplyRange(content.contentRange);\r\n }\r\n\r\n return content;\r\n } catch {\r\n return { isLeaf: true };\r\n }\r\n }\r\n\r\n protected override addRangeGraphic(builder: GraphicBuilder, type: TileBoundingBoxes): void {\r\n if (TileBoundingBoxes.ChildVolumes !== type) {\r\n super.addRangeGraphic(builder, type);\r\n return;\r\n }\r\n\r\n builder.setSymbology(ColorDef.green, ColorDef.green, 2);\r\n builder.addRangeBox(this.range);\r\n\r\n this.loadChildren();\r\n const children = this.children;\r\n if (!children)\r\n return;\r\n\r\n builder.setSymbology(ColorDef.blue, ColorDef.blue.withTransparency(0xdf), 1);\r\n for (const child of children) {\r\n const range = child.range;\r\n builder.addRangeBox(range);\r\n builder.addRangeBox(range, true);\r\n }\r\n }\r\n\r\n public prune(olderThan: BeTimePoint): void {\r\n const children = this._batchedChildren;\r\n if (!children)\r\n return;\r\n\r\n if (this.usageMarker.isExpired(olderThan)) {\r\n this.disposeChildren();\r\n } else {\r\n for (const child of children)\r\n child.prune(olderThan);\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"BatchedTile.js","sourceRoot":"","sources":["../../src/BatchedTile.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, BeTimePoint, ByteStream, Logger } from \"@itwin/core-bentley\";\nimport { Transform } from \"@itwin/core-geometry\";\nimport { ColorDef, Tileset3dSchema } from \"@itwin/core-common\";\nimport {\n GraphicBranch, GraphicBuilder, IModelApp, RealityTileLoader, RenderSystem, Tile, TileBoundingBoxes, TileContent,\n TileDrawArgs, TileParams, TileRequest, TileRequestChannel, TileTreeLoadStatus, TileUser, TileVisibility, Viewport,\n} from \"@itwin/core-frontend\";\nimport { loggerCategory } from \"./LoggerCategory\";\nimport { BatchedTileTree } from \"./BatchedTileTree\";\nimport { frontendTilesOptions } from \"./FrontendTiles\";\n\n/** @internal */\nexport interface BatchedTileParams extends TileParams {\n childrenProps: Tileset3dSchema.Tile[] | undefined;\n /** See BatchedTile.transformToRoot. */\n transformToRoot: Transform | undefined;\n}\n\nlet channel: TileRequestChannel | undefined;\n\n/** @internal */\nexport class BatchedTile extends Tile {\n private readonly _childrenProps?: Tileset3dSchema.Tile[];\n private readonly _unskippable: boolean;\n /** Transform from the tile's local coordinate system to that of the tileset. */\n public readonly transformToRoot?: Transform;\n\n public get batchedTree(): BatchedTileTree {\n return this.tree as BatchedTileTree;\n }\n\n public constructor(params: BatchedTileParams, tree: BatchedTileTree) {\n super(params, tree);\n\n // The root tile never has content, so it doesn't count toward max levels to skip.\n this._unskippable = 0 === (this.depth % frontendTilesOptions.maxLevelsToSkip);\n\n if (params.childrenProps?.length)\n this._childrenProps = params.childrenProps;\n\n if (!this.contentId) {\n this.setIsReady();\n // mark \"undisplayable\"\n this._maximumSize = 0;\n }\n\n if (!params.transformToRoot)\n return;\n\n this.transformToRoot = params.transformToRoot;\n this.boundingSphere.transformBy(this.transformToRoot, this.boundingSphere);\n this.transformToRoot.multiplyRange(this.range, this.range);\n if (this._contentRange)\n this.transformToRoot.multiplyRange(this._contentRange, this._contentRange);\n }\n\n private get _batchedChildren(): BatchedTile[] | undefined {\n return this.children as BatchedTile[] | undefined;\n }\n\n public override computeLoadPriority(viewports: Iterable<Viewport>, _users: Iterable<TileUser>): number {\n // Prioritize tiles closer to camera and center of attention (zoom point or screen center).\n return RealityTileLoader.computeTileLocationPriority(this, viewports, this.tree.iModelTransform);\n }\n\n public selectTiles(selected: Set<BatchedTile>, args: TileDrawArgs, closestDisplayableAncestor: BatchedTile | undefined): void {\n const vis = this.computeVisibility(args);\n if (TileVisibility.OutsideFrustum === vis)\n return;\n\n if (this._unskippable) {\n // Prevent this tile's content from being unloaded due to memory pressure.\n args.touchedTiles.add(this);\n args.markUsed(this);\n }\n\n closestDisplayableAncestor = this.hasGraphics ? this : closestDisplayableAncestor;\n if (TileVisibility.TooCoarse === vis && (this.isReady || !this._unskippable)) {\n args.markUsed(this);\n args.markReady(this);\n const childrenLoadStatus = this.loadChildren();\n if (TileTreeLoadStatus.Loading === childrenLoadStatus)\n args.markChildrenLoading();\n\n const children = this._batchedChildren;\n if (children) {\n for (const child of children)\n child.selectTiles(selected, args, closestDisplayableAncestor);\n\n return;\n }\n }\n\n // We want to display this tile. Request its content if not already loaded.\n if ((TileVisibility.Visible === vis || this._unskippable) && !this.isReady)\n args.insertMissing(this);\n\n if (closestDisplayableAncestor)\n selected.add(closestDisplayableAncestor);\n }\n\n protected override _loadChildren(resolve: (children: Tile[] | undefined) => void, reject: (error: Error) => void): void {\n let children: BatchedTile[] | undefined;\n if (this._childrenProps) {\n try {\n for (const childProps of this._childrenProps) {\n const params = this.batchedTree.reader.readTileParams(childProps, this);\n const child = new BatchedTile(params, this.batchedTree);\n children = children ?? [];\n children.push(child);\n }\n } catch (err) {\n Logger.logException(loggerCategory, err);\n children = undefined;\n if (err instanceof Error)\n reject(err);\n }\n }\n\n resolve(children);\n }\n\n public override get channel(): TileRequestChannel {\n if (!channel) {\n channel = new TileRequestChannel(\"itwinjs-batched-models\", 20);\n IModelApp.tileAdmin.channels.add(channel);\n }\n\n return channel;\n }\n\n public override async requestContent(_isCanceled: () => boolean): Promise<TileRequest.Response> {\n const url = new URL(this.contentId, this.batchedTree.reader.baseUrl);\n url.search = this.batchedTree.reader.baseUrl.search;\n const response = await fetch(url.toString());\n return response.arrayBuffer();\n }\n\n public override async readContent(data: TileRequest.ResponseData, system: RenderSystem, isCanceled?: () => boolean): Promise<TileContent> {\n assert(data instanceof Uint8Array);\n if (!(data instanceof Uint8Array))\n return { };\n\n try {\n const modelGroups = this.batchedTree.modelGroups;\n\n const content = await this.batchedTree.decoder.decode({\n stream: ByteStream.fromUint8Array(data),\n options: { tileId: this.contentId },\n system,\n isCanceled,\n isLeaf: this.isLeaf,\n // Don't waste time attempting to split based on model groupings if all models are in the same group.\n modelGroups: modelGroups && modelGroups.length > 1 ? modelGroups : undefined,\n });\n\n if (this.transformToRoot) {\n if (content.graphic) {\n const branch = new GraphicBranch(true);\n branch.add(content.graphic);\n content.graphic = system.createBranch(branch, this.transformToRoot);\n }\n\n if (content.contentRange)\n content.contentRange = this.transformToRoot.multiplyRange(content.contentRange);\n }\n\n return content;\n } catch {\n return { isLeaf: true };\n }\n }\n\n protected override addRangeGraphic(builder: GraphicBuilder, type: TileBoundingBoxes): void {\n if (TileBoundingBoxes.ChildVolumes !== type) {\n super.addRangeGraphic(builder, type);\n return;\n }\n\n builder.setSymbology(ColorDef.green, ColorDef.green, 2);\n builder.addRangeBox(this.range);\n\n this.loadChildren();\n const children = this.children;\n if (!children)\n return;\n\n builder.setSymbology(ColorDef.blue, ColorDef.blue.withTransparency(0xdf), 1);\n for (const child of children) {\n const range = child.range;\n builder.addRangeBox(range);\n builder.addRangeBox(range, true);\n }\n }\n\n public prune(olderThan: BeTimePoint): void {\n const children = this._batchedChildren;\n if (!children)\n return;\n\n if (this.usageMarker.isExpired(olderThan)) {\n this.disposeChildren();\n } else {\n for (const child of children)\n child.prune(olderThan);\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedTileContentReader.js","sourceRoot":"","sources":["../../src/BatchedTileContentReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\
|
|
1
|
+
{"version":3,"file":"BatchedTileContentReader.js","sourceRoot":"","sources":["../../src/BatchedTileContentReader.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, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { Range3d } from \"@itwin/core-geometry\";\nimport { Feature, FeatureTable, TileReadStatus } from \"@itwin/core-common\";\nimport {\n GltfDataType, GltfMeshPrimitive, GltfReader, GltfReaderArgs, GltfReaderResult,\n} from \"@itwin/core-frontend\";\n\ninterface BatchedTileReaderArgs extends GltfReaderArgs {\n modelId: Id64String;\n isLeaf: boolean;\n range: Range3d;\n}\n\n/** Read batched tiles in 3d Tiles 1.1 format. Currently, we prefer to produce tiles in iMdl format, so this goes unused for now.\n * @internal\n */\nexport class BatchedTileContentReader extends GltfReader {\n private readonly _modelId: Id64String;\n private readonly _isLeaf: boolean;\n private readonly _range: Range3d;\n\n public constructor(args: BatchedTileReaderArgs) {\n super(args);\n this._modelId = args.modelId;\n this._isLeaf = args.isLeaf;\n this._range = args.range;\n }\n\n public override async read(): Promise<GltfReaderResult> {\n const featureTable = this.readFeatureTable();\n await this.resolveResources();\n if (this._isCanceled)\n return { readStatus: TileReadStatus.Canceled, isLeaf: this._isLeaf };\n\n return this.readGltfAndCreateGraphics(this._isLeaf, featureTable, this._range);\n }\n\n private readFeatureTable(): FeatureTable | undefined {\n // ###TODO we're just assuming there's one property table with one u64 property containing element Ids.\n const tables = this._glTF.extensions?.EXT_structural_metadata?.propertyTables;\n const table = tables ? tables[0] : undefined;\n const elementIdProperty = table?.properties ? table.properties.ElementId : undefined;\n if (!elementIdProperty)\n return undefined;\n\n const bufferView = this._bufferViews[elementIdProperty.values];\n if (!bufferView || undefined === bufferView.buffer)\n return undefined;\n\n const bufferData = this._buffers[bufferView.buffer]?.resolvedBuffer;\n if (!bufferData)\n return undefined;\n\n assert(undefined !== bufferView.byteLength); // required by spec; TypeScript interface is wrong.\n const byteOffset = bufferView.byteOffset ?? 0;\n const bytes = bufferData.subarray(byteOffset, byteOffset + bufferView.byteLength);\n\n // 2 u32s per element Id.\n const elementIds = new Uint32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / 4);\n const numFeatures = elementIds.length / 2;\n const featureTable = new FeatureTable(numFeatures, this._modelId);\n for (let i = 0; i < numFeatures; i++) {\n const elementId = Id64.fromUint32Pair(elementIds[i * 2], elementIds[i * 2 + 1]);\n featureTable.insertWithIndex(new Feature(elementId), i);\n }\n\n return featureTable;\n }\n\n protected override readPrimitiveFeatures(primitive: GltfMeshPrimitive): Feature | number[] | undefined {\n const ext = primitive.extensions?.EXT_mesh_features;\n if (ext) {\n // ###TODO making assumptions here.\n const view = this.getBufferView(primitive.attributes, `_FEATURE_ID_${ext.featureIds[0].attribute}`);\n // NB: 32-bit integers are not supported, but 8- and 16-bit integers will be converted to them.\n // With more than 64k features in the tile we represent the Ids as floats instead.\n const featureIds = view?.toBufferData(GltfDataType.Float) ?? view?.toBufferData(GltfDataType.UInt32);\n if (view && featureIds) {\n const indices = [];\n for (let i = 0; i < featureIds.count; i++) {\n const featureId = featureIds.buffer[i * view.stride];\n indices.push(featureId);\n }\n\n return indices;\n }\n }\n\n return new Feature(this._modelId);\n }\n}\n"]}
|
|
@@ -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"}
|
|
@@ -21,6 +21,7 @@ class BatchedTileTree extends core_frontend_1.TileTree {
|
|
|
21
21
|
this._rootTile = new BatchedTile_1.BatchedTile(params.rootTile, this);
|
|
22
22
|
this.reader = params.reader;
|
|
23
23
|
this.scheduleScript = params.script;
|
|
24
|
+
this.modelGroups = params.modelGroups;
|
|
24
25
|
this.decoder = (0, core_frontend_1.acquireImdlDecoder)({
|
|
25
26
|
type: core_common_1.BatchType.Primary,
|
|
26
27
|
timeline: this.scheduleScript,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedTileTree.js","sourceRoot":"","sources":["../../src/BatchedTileTree.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,
|
|
1
|
+
{"version":3,"file":"BatchedTileTree.js","sourceRoot":"","sources":["../../src/BatchedTileTree.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,sDAAuE;AACvE,oDAA8F;AAC9F,wDAE8B;AAC9B,+CAA+D;AAE/D,mDAAuD;AAEvD,MAAM,gBAAgB,GAAsB;IAC1C,UAAU,EAAE,wBAAU,CAAC,WAAW;IAClC,YAAY,EAAE,KAAK;CACpB,CAAC;AAWF,gBAAgB;AAChB,MAAa,eAAgB,SAAQ,wBAAQ;IAO3C,YAAmB,MAA6B;QAC9C,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,SAAS,GAAG,IAAI,yBAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACxD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QAEtC,IAAI,CAAC,OAAO,GAAG,IAAA,kCAAkB,EAAC;YAChC,IAAI,EAAE,uBAAS,CAAC,OAAO;YACvB,QAAQ,EAAE,IAAI,CAAC,cAAc;YAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,YAAY,EAAE,IAAI,CAAC,OAAO;YAC1B,IAAI,EAAE,IAAI;YACV,sBAAsB,EAAE,KAAK;YAC7B,QAAQ,EAAE,CAAC,yBAAS,CAAC,SAAS,CAAC,kBAAkB;SAClD,CAAC,CAAC;IACL,CAAC;IAEe,OAAO;QACrB,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvB,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC;IAED,IAAoB,QAAQ;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAoB,IAAI;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAoB,QAAQ;QAC1B,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAoB,iBAAiB;QACnC,OAAO,oCAAoB,CAAC,WAAW,CAAC,CAAC,CAAA,EAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC;IAClE,CAAC;IAED,gEAAgE;IAChD,YAAY,CAAC,IAAkB;QAC7C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAe,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACrD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAEe,IAAI,CAAC,IAAkB;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,KAAK;YACtB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAEe,KAAK;QACnB,MAAM,SAAS,GAAG,0BAAW,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;CACF;AAjED,0CAiEC","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"}
|
|
@@ -4,72 +4,92 @@
|
|
|
4
4
|
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
5
|
*--------------------------------------------------------------------------------------------*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.
|
|
7
|
+
exports.BatchedTileTreeReference = void 0;
|
|
8
|
+
const core_bentley_1 = require("@itwin/core-bentley");
|
|
8
9
|
const core_frontend_1 = require("@itwin/core-frontend");
|
|
9
|
-
/** @internal */
|
|
10
10
|
class BatchedTileTreeReference extends core_frontend_1.TileTreeReference {
|
|
11
|
-
constructor(
|
|
11
|
+
constructor(args, groupIndex, animationNodeId) {
|
|
12
12
|
super();
|
|
13
|
-
this.
|
|
13
|
+
this._args = args;
|
|
14
|
+
this._groupIndex = groupIndex;
|
|
15
|
+
this._animationNodeId = animationNodeId;
|
|
16
|
+
if (undefined !== animationNodeId) {
|
|
17
|
+
(0, core_bentley_1.assert)(undefined !== this._groupInfo.timeline);
|
|
18
|
+
this._branchId = (0, core_frontend_1.formatAnimationBranchId)(this._groupInfo.timeline.modelId, animationNodeId);
|
|
19
|
+
}
|
|
14
20
|
}
|
|
15
|
-
get
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
computeBaseTransform(tree) {
|
|
19
|
-
return super.computeTransform(tree);
|
|
20
|
-
}
|
|
21
|
-
computeTransform(tree) {
|
|
22
|
-
const baseTf = this.computeBaseTransform(tree);
|
|
23
|
-
// ###TODO this.view.modelDisplayTransformProvider?.getModelDisplayTransform(modelId...)
|
|
24
|
-
return baseTf;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
exports.BatchedTileTreeReference = BatchedTileTreeReference;
|
|
28
|
-
class PrimaryBatchedTileTreeReference extends BatchedTileTreeReference {
|
|
29
|
-
constructor(treeOwner, models) {
|
|
30
|
-
super(treeOwner);
|
|
31
|
-
this._models = models;
|
|
21
|
+
get _groupInfo() {
|
|
22
|
+
(0, core_bentley_1.assert)(this._groupIndex < this._args.groups.length);
|
|
23
|
+
return this._args.groups[this._groupIndex];
|
|
32
24
|
}
|
|
33
|
-
|
|
34
|
-
this.
|
|
25
|
+
get treeOwner() {
|
|
26
|
+
return this._args.treeOwner;
|
|
35
27
|
}
|
|
36
28
|
getAppearanceProvider() {
|
|
37
29
|
return this;
|
|
38
30
|
}
|
|
31
|
+
getClipVolume() {
|
|
32
|
+
return this._groupInfo.clip;
|
|
33
|
+
}
|
|
39
34
|
getFeatureAppearance(source, elemLo, elemHi, subcatLo, subcatHi, geomClass, modelLo, modelHi, type, animationNodeId) {
|
|
40
|
-
if (!this.
|
|
35
|
+
if (!this._args.models.isViewed(modelLo, modelHi))
|
|
41
36
|
return undefined;
|
|
42
37
|
return source.getAppearance(elemLo, elemHi, subcatLo, subcatHi, geomClass, modelLo, modelHi, type, animationNodeId);
|
|
43
38
|
}
|
|
44
|
-
|
|
45
|
-
|
|
39
|
+
unionFitRange(range) {
|
|
40
|
+
this._args.models.unionRange(range);
|
|
46
41
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
this.
|
|
42
|
+
get castsShadows() {
|
|
43
|
+
if (this._groupInfo.planProjection)
|
|
44
|
+
return false;
|
|
45
|
+
return super.castsShadows;
|
|
46
|
+
}
|
|
47
|
+
getViewFlagOverrides() {
|
|
48
|
+
return this._groupInfo.viewFlags;
|
|
49
|
+
}
|
|
50
|
+
draw(args) {
|
|
51
|
+
if (this._groupInfo.planProjection?.overlay)
|
|
52
|
+
args.context.withGraphicType(core_frontend_1.TileGraphicType.Overlay, () => args.tree.draw(args));
|
|
53
|
+
else
|
|
54
|
+
super.draw(args);
|
|
55
|
+
}
|
|
56
|
+
computeTransform(tree) {
|
|
57
|
+
const group = this._groupInfo;
|
|
58
|
+
let baseTf = super.computeTransform(tree);
|
|
59
|
+
if (group.planProjection) {
|
|
60
|
+
baseTf = baseTf.clone();
|
|
61
|
+
baseTf.origin.z += group.planProjection.elevation;
|
|
62
|
+
}
|
|
63
|
+
if (group.timeline) {
|
|
64
|
+
(0, core_bentley_1.assert)(undefined !== this._animationNodeId);
|
|
65
|
+
const animTf = group.timeline.getTransform(this._animationNodeId, this._args.getCurrentTimePoint());
|
|
66
|
+
if (animTf)
|
|
67
|
+
animTf.multiplyTransformTransform(baseTf, baseTf);
|
|
68
|
+
}
|
|
69
|
+
const displayTf = group.displayTransform;
|
|
70
|
+
if (!displayTf)
|
|
71
|
+
return baseTf;
|
|
72
|
+
return displayTf.premultiply ? displayTf.transform.multiplyTransformTransform(baseTf) : baseTf.multiplyTransformTransform(displayTf.transform);
|
|
54
73
|
}
|
|
55
74
|
getAnimationTransformNodeId() {
|
|
56
|
-
return this.
|
|
75
|
+
return this._animationNodeId;
|
|
57
76
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const animTf = this._node.timeline.getTransform(this._node.nodeId, this._node.getCurrentTimePoint());
|
|
61
|
-
if (animTf)
|
|
62
|
-
animTf.multiplyTransformTransform(tf, tf);
|
|
63
|
-
return tf;
|
|
77
|
+
getGroupNodeId() {
|
|
78
|
+
return this._args.groups.length > 1 ? this._groupIndex : undefined;
|
|
64
79
|
}
|
|
65
80
|
createDrawArgs(context) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
81
|
+
if (this._branchId) {
|
|
82
|
+
const branch = context.viewport.target.animationBranches?.branchStates.get(this._branchId);
|
|
83
|
+
if (branch?.omit) {
|
|
84
|
+
// This branch is not supposed to be drawn
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
69
88
|
const args = super.createDrawArgs(context);
|
|
70
89
|
// ###TODO args.boundingRange = args.tree.getTransformNodeRange(this._animationTransformNodeId);
|
|
90
|
+
// ###TODO if PlanProjectionSettings.enforceDisplayPriority, createGraphicLayerContainer.
|
|
71
91
|
return args;
|
|
72
92
|
}
|
|
73
93
|
}
|
|
74
|
-
exports.
|
|
94
|
+
exports.BatchedTileTreeReference = BatchedTileTreeReference;
|
|
75
95
|
//# sourceMappingURL=BatchedTileTreeReference.js.map
|
|
@@ -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"}
|
|
@@ -11,13 +11,15 @@ const BatchedTilesetReader_1 = require("./BatchedTilesetReader");
|
|
|
11
11
|
const BatchedTileTree_1 = require("./BatchedTileTree");
|
|
12
12
|
class BatchedTileTreeSupplier {
|
|
13
13
|
compareTileTreeIds(lhs, rhs) {
|
|
14
|
-
return (0, core_bentley_1.compareStrings)(lhs.toString(), rhs.toString())
|
|
14
|
+
return (0, core_bentley_1.compareStrings)(lhs.spec.baseUrl.toString(), rhs.spec.baseUrl.toString())
|
|
15
|
+
|| (0, core_bentley_1.compareStrings)(lhs.modelGroups, rhs.modelGroups)
|
|
15
16
|
|| (0, core_bentley_1.comparePossiblyUndefined)((x, y) => x.compareTo(y), lhs.script, rhs.script);
|
|
16
17
|
}
|
|
17
18
|
async createTileTree(treeId, iModel) {
|
|
18
19
|
const spec = treeId.spec;
|
|
19
20
|
try {
|
|
20
|
-
const
|
|
21
|
+
const modelGroups = treeId.modelGroups ? treeId.modelGroups.split("_").map((x) => core_bentley_1.CompressedId64Set.decompressSet(x)) : undefined;
|
|
22
|
+
const reader = new BatchedTilesetReader_1.BatchedTilesetReader(spec, iModel, modelGroups);
|
|
21
23
|
const params = await reader.readTileTreeParams();
|
|
22
24
|
params.script = treeId.script;
|
|
23
25
|
return new BatchedTileTree_1.BatchedTileTree(params);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BatchedTileTreeSupplier.js","sourceRoot":"","sources":["../../src/BatchedTileTreeSupplier.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,
|
|
1
|
+
{"version":3,"file":"BatchedTileTreeSupplier.js","sourceRoot":"","sources":["../../src/BatchedTileTreeSupplier.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;;AAE/F,sDAA0G;AAK1G,qDAAkD;AAClD,iEAAkF;AAClF,uDAAoD;AAapD,MAAM,uBAAuB;IACpB,kBAAkB,CAAC,GAAsB,EAAE,GAAsB;QACtE,OAAO,IAAA,6BAAc,EAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;eAC1E,IAAA,6BAAc,EAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC;eAChD,IAAA,uCAAwB,EAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClF,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,MAAyB,EAAE,MAAwB;QAC7E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,gCAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAClI,MAAM,MAAM,GAAG,IAAI,2CAAoB,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,iCAAe,CAAC,MAAM,CAAC,CAAC;SACpC;QAAC,OAAO,GAAG,EAAE;YACZ,qBAAM,CAAC,YAAY,CAAC,+BAAc,EAAE,GAAG,CAAC,CAAC;YACzC,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;CACF;AAED,MAAM,uBAAuB,GAAqB,IAAI,uBAAuB,EAAE,CAAC;AAEhF,gBAAgB;AAChB,SAAgB,uBAAuB,CAAC,MAAwB,EAAE,MAAyB;IACzF,OAAO,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;AACxE,CAAC;AAFD,0DAEC","sourcesContent":["/*---------------------------------------------------------------------------------------------\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"}
|