@itwin/core-frontend 4.8.0-dev.29 → 4.8.0-dev.31
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 +8 -1
- package/ThirdPartyNotices.md +3 -3
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts +3 -0
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.js +15 -4
- package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
- package/lib/cjs/common/gltf/GltfSchema.d.ts +15 -1
- package/lib/cjs/common/gltf/GltfSchema.d.ts.map +1 -1
- package/lib/cjs/common/gltf/GltfSchema.js.map +1 -1
- package/lib/cjs/render/FeatureSymbology.js +3 -3
- package/lib/cjs/render/FeatureSymbology.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
- package/lib/cjs/tile/B3dmReader.d.ts +0 -1
- package/lib/cjs/tile/B3dmReader.d.ts.map +1 -1
- package/lib/cjs/tile/B3dmReader.js +1 -2
- package/lib/cjs/tile/B3dmReader.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts +25 -1
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +239 -3
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/I3dmReader.d.ts +0 -1
- package/lib/cjs/tile/I3dmReader.d.ts.map +1 -1
- package/lib/cjs/tile/I3dmReader.js +1 -2
- package/lib/cjs/tile/I3dmReader.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.js +1 -0
- package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts +3 -0
- package/lib/esm/RealityDataSourceTilesetUrlImpl.d.ts.map +1 -1
- package/lib/esm/RealityDataSourceTilesetUrlImpl.js +15 -4
- package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
- package/lib/esm/common/gltf/GltfSchema.d.ts +15 -1
- package/lib/esm/common/gltf/GltfSchema.d.ts.map +1 -1
- package/lib/esm/common/gltf/GltfSchema.js.map +1 -1
- package/lib/esm/render/FeatureSymbology.js +3 -3
- package/lib/esm/render/FeatureSymbology.js.map +1 -1
- package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
- package/lib/esm/tile/B3dmReader.d.ts +0 -1
- package/lib/esm/tile/B3dmReader.d.ts.map +1 -1
- package/lib/esm/tile/B3dmReader.js +1 -2
- package/lib/esm/tile/B3dmReader.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts +25 -1
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +239 -3
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/I3dmReader.d.ts +0 -1
- package/lib/esm/tile/I3dmReader.d.ts.map +1 -1
- package/lib/esm/tile/I3dmReader.js +1 -2
- package/lib/esm/tile/I3dmReader.js.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.js +1 -1
- package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileLoader.js +1 -0
- package/lib/esm/tile/RealityTileLoader.js.map +1 -1
- package/package.json +18 -18
|
@@ -46,14 +46,13 @@ class B3dmReader extends internal_1.GltfReader {
|
|
|
46
46
|
constructor(props, iModel, modelId, is3d, system, _range, _isLeaf, _batchTableLength, _transformToRoot, _batchTableJson, shouldAbort, _idMap, _pseudoRtcBias, deduplicateVertices = false) {
|
|
47
47
|
super({
|
|
48
48
|
props, iModel, system, shouldAbort, deduplicateVertices,
|
|
49
|
-
is2d: !is3d,
|
|
49
|
+
is2d: !is3d, idMap: _idMap,
|
|
50
50
|
});
|
|
51
51
|
this._range = _range;
|
|
52
52
|
this._isLeaf = _isLeaf;
|
|
53
53
|
this._batchTableLength = _batchTableLength;
|
|
54
54
|
this._transformToRoot = _transformToRoot;
|
|
55
55
|
this._batchTableJson = _batchTableJson;
|
|
56
|
-
this._idMap = _idMap;
|
|
57
56
|
this._pseudoRtcBias = _pseudoRtcBias;
|
|
58
57
|
this._batchIdRemap = new Map();
|
|
59
58
|
this._modelId = modelId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"B3dmReader.js","sourceRoot":"","sources":["../../../src/tile/B3dmReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { ByteStream, Id64String, JsonUtils } from \"@itwin/core-bentley\";\nimport { Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\nimport { B3dmHeader, ColorDef, ElementAlignedBox3d, Feature, FeatureTable, TileReadStatus } from \"@itwin/core-common\";\nimport { IModelConnection } from \"../IModelConnection\";\nimport { Mesh } from \"../render/primitives/mesh/MeshPrimitives\";\nimport { RenderSystem } from \"../render/RenderSystem\";\nimport { GltfDataType, GltfMeshPrimitive } from \"../common/gltf/GltfSchema\";\nimport {\n BatchedTileIdMap, GltfBufferData, GltfReader, GltfReaderProps, GltfReaderResult, ShouldAbortReadGltf,\n} from \"./internal\";\n\n/**\n * Deserializes a tile in [b3dm](https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification/TileFormats/Batched3DModel) format.\n * @internal\n */\nexport class B3dmReader extends GltfReader {\n private _batchIdRemap = new Map<number, number>();\n private _colors?: Array<number>;\n private readonly _modelId: Id64String;\n\n public static create(stream: ByteStream, iModel: IModelConnection, modelId: Id64String, is3d: boolean, range: ElementAlignedBox3d,\n system: RenderSystem, yAxisUp: boolean, isLeaf: boolean, tileCenter: Point3d, transformToRoot?: Transform,\n isCanceled?: ShouldAbortReadGltf, idMap?: BatchedTileIdMap, deduplicateVertices=false): B3dmReader | undefined {\n const header = new B3dmHeader(stream);\n if (!header.isValid)\n return undefined;\n\n let returnToCenterTransform, pseudoRtcBias;\n if (header.featureTableJson && Array.isArray(header.featureTableJson.RTC_CENTER)) {\n returnToCenterTransform = Transform.createTranslationXYZ(header.featureTableJson.RTC_CENTER[0], header.featureTableJson.RTC_CENTER[1], header.featureTableJson.RTC_CENTER[2]);\n } else {\n /**\n * This is a workaround for tiles generated by\n * context capture which have a large offset from the tileset origin that exceeds the\n * capacity of 32 bit integers. It is essentially an ad hoc RTC applied at read time only if the tile is far from the\n * origin and there is no RTC supplied either with the B3DM of the GLTF.\n * as the vertices are supplied in a quantized format, applying the RTC bias to\n * quantization origin will make these tiles work correctly.\n */\n pseudoRtcBias = Vector3d.create(tileCenter.x, tileCenter.y, tileCenter.z);\n }\n\n if (undefined !== returnToCenterTransform)\n transformToRoot = transformToRoot ? transformToRoot.multiplyTransformTransform(returnToCenterTransform) : returnToCenterTransform;\n\n const props = GltfReaderProps.create(stream.nextBytes(header.length - stream.curPos), yAxisUp);\n const batchTableLength = header.featureTableJson ? JsonUtils.asInt(header.featureTableJson.BATCH_LENGTH, 0) : 0;\n\n return undefined !== props ? new B3dmReader(props, iModel, modelId, is3d, system, range, isLeaf, batchTableLength,\n transformToRoot, header.batchTableJson, isCanceled, idMap, pseudoRtcBias, deduplicateVertices) : undefined;\n }\n\n private constructor(props: GltfReaderProps, iModel: IModelConnection, modelId: Id64String, is3d: boolean, system: RenderSystem,\n private _range: ElementAlignedBox3d, private _isLeaf: boolean, private _batchTableLength: number, private _transformToRoot?: Transform, private _batchTableJson?: any\n , shouldAbort?: ShouldAbortReadGltf, private _idMap?: BatchedTileIdMap, private _pseudoRtcBias?: Vector3d, deduplicateVertices=false) {\n super({\n props, iModel, system, shouldAbort, deduplicateVertices,\n is2d: !is3d,\n });\n this._modelId = modelId;\n }\n\n public async read(): Promise<GltfReaderResult> {\n // NB: For reality models with no batch table, we want the model ID in the feature table\n const featureTable: FeatureTable = new FeatureTable(this._batchTableLength ? this._batchTableLength : 1, this._modelId, this._type);\n if (this._batchTableLength > 0 && this._idMap !== undefined && this._batchTableJson !== undefined) {\n if (this._batchTableJson.extensions && this._batchTableJson.extensions[\"3DTILES_batch_table_hierarchy\"]) {\n const hierarchy = this._batchTableJson.extensions[\"3DTILES_batch_table_hierarchy\"];\n const { classIds, classes, parentIds, parentCounts, instancesLength } = hierarchy;\n if (classes !== undefined && classIds !== undefined && instancesLength !== 0) {\n const classCounts = new Array<number>(classes.length);\n classCounts.fill(0);\n const classIndexes = new Uint16Array(instancesLength);\n for (let i = 0; i < instancesLength; ++i) {\n const classId = classIds[i];\n classIndexes[i] = classCounts[classId]++;\n }\n\n let parentMap: [][] | undefined;\n if (parentIds) {\n parentMap = new Array<[]>();\n for (let i = 0, parentIndex = 0; i < instancesLength; i++) {\n const parentCount = parentCounts === undefined ? 1 : parentCounts[i];\n parentMap[i] = parentIds.slice(parentIndex, parentIndex += parentCount);\n }\n }\n\n const getProperties = (instance: any, instanceIndex: number) => {\n const classId = classIds[instanceIndex];\n const instanceClass = classes[classId];\n const instances = instanceClass.instances;\n const indexInClass = classIndexes[instanceIndex];\n for (const key in instances) { // eslint-disable-line guard-for-in\n const value = instances[key][indexInClass];\n if (value !== undefined && value !== null)\n instance[key] = value;\n }\n if (parentIds !== undefined) {\n const thisParents = parentMap![instanceIndex];\n for (const parentId of thisParents) {\n if (parentId !== instanceIndex)\n getProperties(instance, parentId);\n }\n }\n };\n for (let batchId = 0; batchId < instancesLength; batchId++) {\n const instance: any = {};\n getProperties(instance, batchId);\n this._batchIdRemap.set(batchId, featureTable.insert(new Feature(this._idMap.getBatchId(instance))));\n const cesiumColor = instance[\"cesium#color\"];\n if (undefined !== cesiumColor) {\n if (!this._colors) {\n this._colors = new Array<number>(instancesLength);\n this._colors.fill(ColorDef.white.tbgr);\n }\n this._colors[batchId] = ColorDef.create(cesiumColor).tbgr;\n }\n }\n }\n } else {\n for (let i = 0; i < this._batchTableLength; i++) {\n const feature: any = {};\n for (const key in this._batchTableJson) // eslint-disable-line guard-for-in\n feature[key] = this._batchTableJson[key][i];\n\n this._batchIdRemap.set(i, featureTable.insert(new Feature(this._idMap.getBatchId(feature))));\n }\n }\n }\n\n if (featureTable.isEmpty) {\n this._batchIdRemap.set(0, 0);\n const feature = new Feature(this._modelId);\n featureTable.insert(feature);\n }\n\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, this._transformToRoot, this._pseudoRtcBias);\n }\n\n protected override readBatchTable(mesh: Mesh, json: GltfMeshPrimitive) {\n if (mesh.features !== undefined) {\n if (this._batchTableLength > 0 && undefined !== this._batchTableJson && undefined !== json.attributes) {\n const view = this.getBufferView(json.attributes, \"_BATCHID\");\n let batchIds: undefined | GltfBufferData;\n if (undefined !== view && (undefined !== (batchIds = view.toBufferData(GltfDataType.UInt32)) || undefined !== (batchIds = view.toBufferData(GltfDataType.Float)))) {\n const indices = [];\n const { colors, colorMap } = mesh;\n let colorRemap: Uint32Array | undefined;\n if (this._colors && this._colors.length === this._batchTableLength) {\n colorRemap = new Uint32Array(this._batchTableLength);\n\n for (let i = 0; i < this._batchTableLength; i++)\n colorRemap[i] = colorMap.insert(this._colors[i]);\n }\n\n for (let i = 0; i < batchIds.count; i++) {\n const batchId = batchIds.buffer[i * view.stride];\n const remapId = this._batchIdRemap.get(batchId);\n indices.push(remapId === undefined ? 0 : remapId);\n if (colorRemap)\n colors.push(colorRemap[batchId]);\n }\n mesh.features.setIndices(indices);\n\n }\n } else {\n mesh.features.add(new Feature(this._modelId), 1);\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"B3dmReader.js","sourceRoot":"","sources":["../../../src/tile/B3dmReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { ByteStream, Id64String, JsonUtils } from \"@itwin/core-bentley\";\nimport { Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\nimport { B3dmHeader, ColorDef, ElementAlignedBox3d, Feature, FeatureTable, TileReadStatus } from \"@itwin/core-common\";\nimport { IModelConnection } from \"../IModelConnection\";\nimport { Mesh } from \"../render/primitives/mesh/MeshPrimitives\";\nimport { RenderSystem } from \"../render/RenderSystem\";\nimport { GltfDataType, GltfMeshPrimitive } from \"../common/gltf/GltfSchema\";\nimport {\n BatchedTileIdMap, GltfBufferData, GltfReader, GltfReaderProps, GltfReaderResult, ShouldAbortReadGltf,\n} from \"./internal\";\n\n/**\n * Deserializes a tile in [b3dm](https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification/TileFormats/Batched3DModel) format.\n * @internal\n */\nexport class B3dmReader extends GltfReader {\n private _batchIdRemap = new Map<number, number>();\n private _colors?: Array<number>;\n private readonly _modelId: Id64String;\n\n public static create(stream: ByteStream, iModel: IModelConnection, modelId: Id64String, is3d: boolean, range: ElementAlignedBox3d,\n system: RenderSystem, yAxisUp: boolean, isLeaf: boolean, tileCenter: Point3d, transformToRoot?: Transform,\n isCanceled?: ShouldAbortReadGltf, idMap?: BatchedTileIdMap, deduplicateVertices=false): B3dmReader | undefined {\n const header = new B3dmHeader(stream);\n if (!header.isValid)\n return undefined;\n\n let returnToCenterTransform, pseudoRtcBias;\n if (header.featureTableJson && Array.isArray(header.featureTableJson.RTC_CENTER)) {\n returnToCenterTransform = Transform.createTranslationXYZ(header.featureTableJson.RTC_CENTER[0], header.featureTableJson.RTC_CENTER[1], header.featureTableJson.RTC_CENTER[2]);\n } else {\n /**\n * This is a workaround for tiles generated by\n * context capture which have a large offset from the tileset origin that exceeds the\n * capacity of 32 bit integers. It is essentially an ad hoc RTC applied at read time only if the tile is far from the\n * origin and there is no RTC supplied either with the B3DM of the GLTF.\n * as the vertices are supplied in a quantized format, applying the RTC bias to\n * quantization origin will make these tiles work correctly.\n */\n pseudoRtcBias = Vector3d.create(tileCenter.x, tileCenter.y, tileCenter.z);\n }\n\n if (undefined !== returnToCenterTransform)\n transformToRoot = transformToRoot ? transformToRoot.multiplyTransformTransform(returnToCenterTransform) : returnToCenterTransform;\n\n const props = GltfReaderProps.create(stream.nextBytes(header.length - stream.curPos), yAxisUp);\n const batchTableLength = header.featureTableJson ? JsonUtils.asInt(header.featureTableJson.BATCH_LENGTH, 0) : 0;\n\n return undefined !== props ? new B3dmReader(props, iModel, modelId, is3d, system, range, isLeaf, batchTableLength,\n transformToRoot, header.batchTableJson, isCanceled, idMap, pseudoRtcBias, deduplicateVertices) : undefined;\n }\n\n private constructor(props: GltfReaderProps, iModel: IModelConnection, modelId: Id64String, is3d: boolean, system: RenderSystem,\n private _range: ElementAlignedBox3d, private _isLeaf: boolean, private _batchTableLength: number, private _transformToRoot?: Transform, private _batchTableJson?: any\n , shouldAbort?: ShouldAbortReadGltf, _idMap?: BatchedTileIdMap, private _pseudoRtcBias?: Vector3d, deduplicateVertices=false) {\n super({\n props, iModel, system, shouldAbort, deduplicateVertices,\n is2d: !is3d, idMap: _idMap,\n });\n this._modelId = modelId;\n }\n\n public async read(): Promise<GltfReaderResult> {\n // NB: For reality models with no batch table, we want the model ID in the feature table\n const featureTable: FeatureTable = new FeatureTable(this._batchTableLength ? this._batchTableLength : 1, this._modelId, this._type);\n if (this._batchTableLength > 0 && this._idMap !== undefined && this._batchTableJson !== undefined) {\n if (this._batchTableJson.extensions && this._batchTableJson.extensions[\"3DTILES_batch_table_hierarchy\"]) {\n const hierarchy = this._batchTableJson.extensions[\"3DTILES_batch_table_hierarchy\"];\n const { classIds, classes, parentIds, parentCounts, instancesLength } = hierarchy;\n if (classes !== undefined && classIds !== undefined && instancesLength !== 0) {\n const classCounts = new Array<number>(classes.length);\n classCounts.fill(0);\n const classIndexes = new Uint16Array(instancesLength);\n for (let i = 0; i < instancesLength; ++i) {\n const classId = classIds[i];\n classIndexes[i] = classCounts[classId]++;\n }\n\n let parentMap: [][] | undefined;\n if (parentIds) {\n parentMap = new Array<[]>();\n for (let i = 0, parentIndex = 0; i < instancesLength; i++) {\n const parentCount = parentCounts === undefined ? 1 : parentCounts[i];\n parentMap[i] = parentIds.slice(parentIndex, parentIndex += parentCount);\n }\n }\n\n const getProperties = (instance: any, instanceIndex: number) => {\n const classId = classIds[instanceIndex];\n const instanceClass = classes[classId];\n const instances = instanceClass.instances;\n const indexInClass = classIndexes[instanceIndex];\n for (const key in instances) { // eslint-disable-line guard-for-in\n const value = instances[key][indexInClass];\n if (value !== undefined && value !== null)\n instance[key] = value;\n }\n if (parentIds !== undefined) {\n const thisParents = parentMap![instanceIndex];\n for (const parentId of thisParents) {\n if (parentId !== instanceIndex)\n getProperties(instance, parentId);\n }\n }\n };\n for (let batchId = 0; batchId < instancesLength; batchId++) {\n const instance: any = {};\n getProperties(instance, batchId);\n this._batchIdRemap.set(batchId, featureTable.insert(new Feature(this._idMap.getBatchId(instance))));\n const cesiumColor = instance[\"cesium#color\"];\n if (undefined !== cesiumColor) {\n if (!this._colors) {\n this._colors = new Array<number>(instancesLength);\n this._colors.fill(ColorDef.white.tbgr);\n }\n this._colors[batchId] = ColorDef.create(cesiumColor).tbgr;\n }\n }\n }\n } else {\n for (let i = 0; i < this._batchTableLength; i++) {\n const feature: any = {};\n for (const key in this._batchTableJson) // eslint-disable-line guard-for-in\n feature[key] = this._batchTableJson[key][i];\n\n this._batchIdRemap.set(i, featureTable.insert(new Feature(this._idMap.getBatchId(feature))));\n }\n }\n }\n\n if (featureTable.isEmpty) {\n this._batchIdRemap.set(0, 0);\n const feature = new Feature(this._modelId);\n featureTable.insert(feature);\n }\n\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, this._transformToRoot, this._pseudoRtcBias);\n }\n\n protected override readBatchTable(mesh: Mesh, json: GltfMeshPrimitive) {\n if (mesh.features !== undefined) {\n if (this._batchTableLength > 0 && undefined !== this._batchTableJson && undefined !== json.attributes) {\n const view = this.getBufferView(json.attributes, \"_BATCHID\");\n let batchIds: undefined | GltfBufferData;\n if (undefined !== view && (undefined !== (batchIds = view.toBufferData(GltfDataType.UInt32)) || undefined !== (batchIds = view.toBufferData(GltfDataType.Float)))) {\n const indices = [];\n const { colors, colorMap } = mesh;\n let colorRemap: Uint32Array | undefined;\n if (this._colors && this._colors.length === this._batchTableLength) {\n colorRemap = new Uint32Array(this._batchTableLength);\n\n for (let i = 0; i < this._batchTableLength; i++)\n colorRemap[i] = colorMap.insert(this._colors[i]);\n }\n\n for (let i = 0; i < batchIds.count; i++) {\n const batchId = batchIds.buffer[i * view.stride];\n const remapId = this._batchIdRemap.get(batchId);\n indices.push(remapId === undefined ? 0 : remapId);\n if (colorRemap)\n colors.push(colorRemap[batchId]);\n }\n mesh.features.setIndices(indices);\n\n }\n } else {\n mesh.features.add(new Feature(this._modelId), 1);\n }\n }\n }\n}\n"]}
|
|
@@ -9,7 +9,7 @@ import { InstancedGraphicParams } from "../render/InstancedGraphicParams";
|
|
|
9
9
|
import { Mesh } from "../render/primitives/mesh/MeshPrimitives";
|
|
10
10
|
import { RenderGraphic } from "../render/RenderGraphic";
|
|
11
11
|
import { RenderSystem } from "../render/RenderSystem";
|
|
12
|
-
import { RealityTileGeometry, TileContent } from "./internal";
|
|
12
|
+
import { BatchedTileIdMap, RealityTileGeometry, TileContent } from "./internal";
|
|
13
13
|
import { DisplayParams } from "../common/render/primitives/DisplayParams";
|
|
14
14
|
import { PointCloudArgs } from "../render/primitives/PointCloudPrimitive";
|
|
15
15
|
import { TextureImageSource } from "../common/render/TextureParams";
|
|
@@ -127,6 +127,20 @@ export interface GltfReaderArgs {
|
|
|
127
127
|
* Reality meshes are simpler but do not support some features like lighting.
|
|
128
128
|
*/
|
|
129
129
|
vertexTableRequired?: boolean;
|
|
130
|
+
/** A table structure to store the Gltf structural metadata if present.
|
|
131
|
+
*/
|
|
132
|
+
idMap?: BatchedTileIdMap;
|
|
133
|
+
}
|
|
134
|
+
interface StructuralMetadataTableEntries {
|
|
135
|
+
name: string;
|
|
136
|
+
values: any[];
|
|
137
|
+
}
|
|
138
|
+
interface StructuralMetadataTable {
|
|
139
|
+
name: string;
|
|
140
|
+
entries: StructuralMetadataTableEntries[];
|
|
141
|
+
}
|
|
142
|
+
interface StructuralMetadata {
|
|
143
|
+
tables: StructuralMetadataTable[];
|
|
130
144
|
}
|
|
131
145
|
/** Deserializes [glTF](https://www.khronos.org/gltf/).
|
|
132
146
|
* @internal
|
|
@@ -149,6 +163,10 @@ export declare abstract class GltfReader {
|
|
|
149
163
|
private readonly _resolvedTextures;
|
|
150
164
|
private readonly _dracoMeshes;
|
|
151
165
|
private _containsPointCloud;
|
|
166
|
+
protected _instanceFeatures: Feature[];
|
|
167
|
+
protected _instanceElementIdToFeatureId: Map<string, number>;
|
|
168
|
+
protected _structuralMetadata?: StructuralMetadata;
|
|
169
|
+
protected readonly _idMap?: BatchedTileIdMap;
|
|
152
170
|
protected get _nodes(): GltfDictionary<GltfNode>;
|
|
153
171
|
protected get _meshes(): GltfDictionary<GltfMesh>;
|
|
154
172
|
protected get _accessors(): GltfDictionary<GltfAccessor>;
|
|
@@ -288,6 +306,8 @@ export interface ReadGltfGraphicsArgs {
|
|
|
288
306
|
transform?: Transform;
|
|
289
307
|
/** @alpha */
|
|
290
308
|
hasChildren?: boolean;
|
|
309
|
+
/** @internal */
|
|
310
|
+
idMap?: BatchedTileIdMap;
|
|
291
311
|
}
|
|
292
312
|
/** The output of [[readGltf]].
|
|
293
313
|
* @public
|
|
@@ -332,7 +352,11 @@ export declare class GltfGraphicsReader extends GltfReader {
|
|
|
332
352
|
readonly binaryData?: Uint8Array;
|
|
333
353
|
constructor(props: GltfReaderProps, args: ReadGltfGraphicsArgs);
|
|
334
354
|
protected get viewFlagOverrides(): ViewFlagOverrides;
|
|
355
|
+
private getGltfStructuralMetadataBuffer;
|
|
356
|
+
private getGltfStructuralMetadataPropertyValues;
|
|
357
|
+
private readGltfStructuralMetadata;
|
|
335
358
|
read(): Promise<GltfReaderResult>;
|
|
359
|
+
get structuralMetadata(): StructuralMetadata | undefined;
|
|
336
360
|
get nodes(): GltfDictionary<GltfNode>;
|
|
337
361
|
get scenes(): GltfDictionary<GltfScene>;
|
|
338
362
|
get sceneNodes(): GltfId[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GltfReader.d.ts","sourceRoot":"","sources":["../../../src/tile/GltfReader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH,OAAO,EACsC,OAAO,EAAW,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EACnG,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,gBAAgB,EAAE,SAAS,EAAY,mBAAmB,EAAE,OAAO,EAAkC,YAAY,EACxF,gBAAgB,EAAwC,SAAS,EAAE,SAAS,EAC7C,aAAa,EAAE,cAAc,EAAmC,cAAc,EAAE,iBAAiB,EAC1J,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE1E,OAAO,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAuB,mBAAmB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"GltfReader.d.ts","sourceRoot":"","sources":["../../../src/tile/GltfReader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAKH,OAAO,EACsC,OAAO,EAAW,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EACnG,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,gBAAgB,EAAE,SAAS,EAAY,mBAAmB,EAAE,OAAO,EAAkC,YAAY,EACxF,gBAAgB,EAAwC,SAAS,EAAE,SAAS,EAC7C,aAAa,EAAE,cAAc,EAAmC,cAAc,EAAE,iBAAiB,EAC1J,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAE1E,OAAO,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAuB,mBAAmB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGrG,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI1E,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EACgD,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,YAAY,EAAE,cAAc,EAA0B,YAAY,EAAE,MAAM,EAC9K,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAgB,iBAAiB,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAA8C,WAAW,EAAE,YAAY,EAC5K,MAAM,2BAA2B,CAAC;AAInC,gBAAgB;AAChB,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;AAEnF;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,SAAgB,MAAM,EAAE,cAAc,CAAC;IACvC,SAAgB,KAAK,EAAE,MAAM,CAAC;gBAEX,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM;IAKxD;;;;OAIG;WACW,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAsBxI,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAgBhC;AAED;;;;;;;;GAQG;AACH,cAAM,cAAc;IAClB,SAAgB,IAAI,EAAE,UAAU,CAAC;IACjC,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,IAAI,EAAE,YAAY,CAAC;IACnC,SAAgB,QAAQ,EAAE,YAAY,CAAC;IACvC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,IAAW,UAAU,IAAI,MAAM,CAA6B;gBAEzC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM;IAQvG,YAAY,CAAC,WAAW,EAAE,YAAY,GAAG,cAAc,GAAG,SAAS;CAG3E;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,UAAU,EAAE,cAAc,CAAC;IAC3B,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,SAAgB,IAAI,EAAE,YAAY,CAAC;IACnC,SAAgB,OAAO,EAAE,OAAO,CAAC;IACjC,SAAgB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxC,SAAgB,OAAO,CAAC,EAAE,GAAG,CAAC;IAE9B,OAAO;IAQP,gIAAgI;WAClH,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,YAAY,EAAE,OAAO,GAAE,OAAe,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,eAAe,GAAG,SAAS;CAuE9H;AAED;;;;;IAKI;AACJ,qBAAa,YAAY;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;IACxD,SAAgB,IAAI,SAAmB;gBAEpB,KAAK,EAAE,IAAI;CAG/B;AAED,UAAU,cAAe,SAAQ,cAAc;IAC7C,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,KAAK,iBAAiB,GAAG,YAAY,GAAG,cAAc,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC;AAkFlE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,KAAK,EAAE,eAAe,CAAC;IACvB,+DAA+D;IAC/D,MAAM,EAAE,gBAAgB,CAAC;IACzB,mCAAmC;IACnC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,gGAAgG;IAChG,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;OAEG;IACH,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,8JAA8J;IAC9J,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;OACG;IACH,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAsBD,UAAU,8BAA8B;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,GAAG,EAAE,CAAC;CACf;AAED,UAAU,uBAAuB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,8BAA8B,EAAE,CAAC;CAC3C;AAED,UAAU,kBAAkB;IAC1B,MAAM,EAAE,uBAAuB,EAAE,CAAC;CACnC;AAED;;GAEG;AACH,8BAAsB,UAAU;IAC9B,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IACvC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IACzC,SAAS,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACjD,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAsB;IACjD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IACzC,SAAS,CAAC,qBAAqB,CAAC,EAAE,mBAAmB,CAAC;IACtD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAiG;IACnI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA8C;IAC3E,OAAO,CAAC,mBAAmB,CAAS;IACpC,SAAS,CAAC,iBAAiB,EAAE,OAAO,EAAE,CAAM;IAC5C,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAA6B;IACzF,SAAS,CAAC,mBAAmB,CAAC,EAAE,kBAAkB,CAAC;IACnD,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAE7C,SAAS,KAAK,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,CAA0C;IAC1F,SAAS,KAAK,OAAO,IAAI,cAAc,CAAC,QAAQ,CAAC,CAA2C;IAC5F,SAAS,KAAK,UAAU,IAAI,cAAc,CAAC,YAAY,CAAC,CAA8C;IACtG,SAAS,KAAK,YAAY,IAAI,cAAc,CAAC,mBAAmB,GAAG;QAAE,cAAc,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC,CAAgD;IACnJ,SAAS,KAAK,UAAU,IAAI,cAAc,CAAC,YAAY,CAAC,CAA8C;IACtG,SAAS,KAAK,SAAS,IAAI,cAAc,CAAC,WAAW,CAAC,CAA6C;IACnG,SAAS,KAAK,SAAS,IAAI,cAAc,CAAC,WAAW,CAAC,CAA6C;IAEnG,SAAS,KAAK,OAAO,IAAI,cAAc,CAAC,SAAS,GAAG;QAAE,aAAa,CAAC,EAAE,kBAAkB,CAAA;KAAE,CAAC,CAA2C;IACtI,SAAS,KAAK,QAAQ,IAAI,cAAc,CAAC,UAAU,GAAG;QAAE,cAAc,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC,CAA4C;IAElI,sEAAsE;aACtD,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAEjD,SAAS,KAAK,WAAW,IAAI,OAAO,CAAiE;IACrG,SAAS,KAAK,mBAAmB,IAAI,OAAO,CAAsD;IAElG;;;OAGG;IACI,aAAa,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAInE;;OAEG;IACI,aAAa,IAAI,QAAQ,CAAC,QAAQ,CAAC;IAI1C,SAAS,KAAK,iBAAiB,IAAI,iBAAiB,GAAG,SAAS,CAE/D;IAED,OAAO,CAAC,gBAAgB;IAqBxB,SAAS,CAAC,yBAAyB,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,GAAG,SAAS,EAAE,YAAY,EAAE,mBAAmB,GAAG,SAAS,EAAE,eAAe,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,sBAAsB,GAAG,gBAAgB;IAmFjP,yBAAyB,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,WAAW,UAAQ,EAAE,UAAU,UAAQ,GAAG,mBAAmB;IAY3H,OAAO,CAAC,mBAAmB;IAkC3B,OAAO,CAAC,sBAAsB;IA6I9B,OAAO,CAAC,yBAAyB;IAoEjC,OAAO,CAAC,0BAA0B;IAsBlC,OAAO,CAAC,oBAAoB;IA2CrB,aAAa,CAAC,IAAI,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAkE3F,gBAAgB,CAAC,IAAI,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAC9F,gBAAgB,CAAC,IAAI,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAC9F,eAAe,CAAC,IAAI,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAC7F,mBAAmB,CAAC,IAAI,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAExG,SAAS,aAAa,IAAI,EAAE,cAAc;IAyC1C,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,cAAc,GAAG,SAAS;IAK1H,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,SAAS;IAE9D,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,qBAAqB;IAgB7B,SAAS,CAAC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS;IAmB3G,OAAO,CAAC,kBAAkB;IA+C1B,SAAS,CAAC,iBAAiB,CAAC,SAAS,EAAE,iBAAiB,EAAE,YAAY,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,QAAQ,GAAG,iBAAiB,GAAG,SAAS;IAkJ/I,OAAO,CAAC,eAAe;IA8FvB,OAAO,CAAC,sBAAsB;IAgE9B,OAAO,CAAC,mBAAmB;IAyC3B;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;IAwEpB,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAY7F,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,iBAAiB;IAG9D,SAAS,CAAC,qBAAqB,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS;IAI9F,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,GAAG,OAAO;IAuBlF,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAyCpG,SAAS,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAyBxG,OAAO,CAAC,YAAY;IA8DpB,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,gBAAgB,EAAE,IAAI,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO;cA6BlH,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;YAoDnC,iBAAiB;YAuBjB,eAAe;IAgB7B,OAAO,CAAC,UAAU;YAUJ,aAAa;YAqBb,YAAY;IAoC1B;;;;OAIG;IACI,eAAe,eAAuB;IAE7C,oCAAoC;IAC7B,cAAc,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,aAAa,CAAC,IAAI;IAahE,OAAO,CAAC,cAAc;IAuBtB,SAAS,CAAC,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,GAAG,SAAS;CAuC1I;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC1B,sIAAsI;IACtI,MAAM,EAAE,gBAAgB,CAAC;IACzB;;;OAGG;IACH,eAAe,CAAC,EAAE,sBAAsB,CAAC;IACzC;;OAEG;IACH,OAAO,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC;IACvB,aAAa;IACb,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,aAAa;IACb,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,aAAa;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB;IAChB,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,OAAO,EAAE,aAAa,CAAC;IACvB,uEAAuE;IACvE,gBAAgB,EAAE,mBAAmB,CAAC;IACtC,uEAAuE;IACvE,WAAW,EAAE,gBAAgB,CAAC;CAC/B;AAED;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAGrG;AAED;;;;;;;;GAQG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAmB3F;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,UAAU;IAChD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAe;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAsB;IACrD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAY;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,SAAgB,UAAU,CAAC,EAAE,UAAU,CAAC;gBAErB,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,oBAAoB;IAoBrE,cAAuB,iBAAiB,IAAI,iBAAiB,CAK5D;IAED,OAAO,CAAC,+BAA+B;IA0CvC,OAAO,CAAC,uCAAuC;IA+F/C,OAAO,CAAC,0BAA0B;IA+CrB,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAM9C,IAAW,kBAAkB,IAAI,kBAAkB,GAAG,SAAS,CAAqC;IACpG,IAAW,KAAK,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAwB;IACpE,IAAW,MAAM,IAAI,cAAc,CAAC,SAAS,CAAC,CAA2C;IACzF,IAAW,UAAU,IAAI,MAAM,EAAE,CAA6B;IAC9D,IAAW,QAAQ,IAAI,cAAc,CAAC,WAAW,CAAC,CAA2B;CAC9E"}
|
|
@@ -292,6 +292,8 @@ function compareTextureKeys(lhs, rhs) {
|
|
|
292
292
|
(0, core_bentley_1.assert)("number" === typeof lhs.id && "number" === typeof rhs.id);
|
|
293
293
|
return (0, core_bentley_1.compareNumbers)(lhs.id, rhs.id);
|
|
294
294
|
}
|
|
295
|
+
;
|
|
296
|
+
;
|
|
295
297
|
/** Deserializes [glTF](https://www.khronos.org/gltf/).
|
|
296
298
|
* @internal
|
|
297
299
|
*/
|
|
@@ -347,6 +349,12 @@ class GltfReader {
|
|
|
347
349
|
this._computedContentRange = contentRange = core_geometry_1.Range3d.createNull();
|
|
348
350
|
else
|
|
349
351
|
this._computedContentRange = undefined;
|
|
352
|
+
// Save feature table model id in case we need to recreate it after reading instances
|
|
353
|
+
const featureTableModelId = featureTable?.modelId;
|
|
354
|
+
// Flush feature table if instance features are used
|
|
355
|
+
if (this._structuralMetadata && this._glTF.extensionsUsed?.includes("EXT_instance_features") && this._idMap) {
|
|
356
|
+
featureTable = undefined;
|
|
357
|
+
}
|
|
350
358
|
// ###TODO this looks like a hack? Why does it assume the first node's transform is special, or that the transform will be specified as a matrix instead of translation+rot+scale?
|
|
351
359
|
if (this._returnToCenter || this._nodes[0]?.matrix || (pseudoRtcBias && pseudoRtcBias.magnitude() < 1.0E5))
|
|
352
360
|
pseudoRtcBias = undefined;
|
|
@@ -359,6 +367,14 @@ class GltfReader {
|
|
|
359
367
|
if (node && core_common_1.TileReadStatus.Success !== (readStatus = this.readNodeAndCreateGraphics(renderGraphicList, node, featureTable, transformStack, instances, pseudoRtcBias)))
|
|
360
368
|
return { readStatus, isLeaf };
|
|
361
369
|
}
|
|
370
|
+
// Creates a feature table based on instance features
|
|
371
|
+
// The table must be created after reading instances, since the maximum number of features is not known until all instances have been read.
|
|
372
|
+
if (this._instanceFeatures.length > 0 && this._idMap) {
|
|
373
|
+
featureTable = new core_common_1.FeatureTable(this._instanceFeatures.length, featureTableModelId);
|
|
374
|
+
for (let instanceFeatureId = 0; instanceFeatureId < this._instanceFeatures.length; instanceFeatureId++) {
|
|
375
|
+
featureTable.insertWithIndex(this._instanceFeatures[instanceFeatureId], instanceFeatureId);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
362
378
|
if (0 === renderGraphicList.length)
|
|
363
379
|
return { readStatus: core_common_1.TileReadStatus.InvalidTileData, isLeaf };
|
|
364
380
|
let renderGraphic;
|
|
@@ -489,9 +505,67 @@ class GltfReader {
|
|
|
489
505
|
transforms[idx + 10] = tf.matrix.coffs[8];
|
|
490
506
|
transforms[idx + 11] = tf.origin.z;
|
|
491
507
|
}
|
|
492
|
-
|
|
493
|
-
//
|
|
494
|
-
const
|
|
508
|
+
let featureIds = ((featureTable && featureTable.isUniform)) ? new Uint8Array(3 * count) : undefined;
|
|
509
|
+
// Resolve instance features if the EXT_instance_features if present
|
|
510
|
+
const instanceFeaturesExt = node.extensions?.EXT_instance_features;
|
|
511
|
+
if (this._structuralMetadata && instanceFeaturesExt && this._idMap) {
|
|
512
|
+
if (!featureIds)
|
|
513
|
+
featureIds = new Uint8Array(3 * count);
|
|
514
|
+
// Resolve feature buffers before creating instance table
|
|
515
|
+
const featureBuffers = new Map();
|
|
516
|
+
for (const featureIdDesc of instanceFeaturesExt.featureIds) {
|
|
517
|
+
if (featureIdDesc.attribute !== undefined) {
|
|
518
|
+
const bufferView = this.getBufferView(ext.attributes, `_FEATURE_ID_${featureIdDesc.attribute}`);
|
|
519
|
+
if (bufferView) {
|
|
520
|
+
const bufferData = bufferView.toBufferData(bufferView.type)?.buffer;
|
|
521
|
+
if (bufferData) {
|
|
522
|
+
featureBuffers.set(featureIdDesc.attribute, bufferData);
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
for (let localInstanceId = 0; localInstanceId < count; localInstanceId++) {
|
|
528
|
+
const instanceProps = {};
|
|
529
|
+
for (const featureIdDesc of instanceFeaturesExt.featureIds) {
|
|
530
|
+
const table = this._structuralMetadata.tables[featureIdDesc.propertyTable];
|
|
531
|
+
instanceProps[table.name] = {};
|
|
532
|
+
// If the attribute is not defined, then the feature id corresponds to the instance id
|
|
533
|
+
if (featureIdDesc.attribute === undefined) {
|
|
534
|
+
for (const entries of table.entries) {
|
|
535
|
+
if (entries.values[localInstanceId] !== undefined) {
|
|
536
|
+
instanceProps[table.name][entries.name] = entries.values[localInstanceId];
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
else if (featureBuffers.has(featureIdDesc.attribute)) {
|
|
541
|
+
const featureBuffer = featureBuffers.get(featureIdDesc.attribute);
|
|
542
|
+
if (!featureBuffer) {
|
|
543
|
+
continue;
|
|
544
|
+
}
|
|
545
|
+
const featureId = featureBuffer[localInstanceId];
|
|
546
|
+
if (featureIdDesc.nullFeatureId !== undefined && featureId === featureIdDesc.nullFeatureId) {
|
|
547
|
+
continue;
|
|
548
|
+
}
|
|
549
|
+
for (const entries of table.entries) {
|
|
550
|
+
if (entries.values[featureId] !== undefined) {
|
|
551
|
+
instanceProps[table.name][entries.name] = entries.values[featureId];
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
const instanceElementId = this._idMap.getBatchId(instanceProps);
|
|
557
|
+
// If the element id is already assigned to a previous instance,
|
|
558
|
+
// reuse the previous feature id to avoid collision in the feature table
|
|
559
|
+
if (!this._instanceElementIdToFeatureId.has(instanceElementId)) {
|
|
560
|
+
this._instanceElementIdToFeatureId.set(instanceElementId, this._instanceFeatures.length);
|
|
561
|
+
this._instanceFeatures.push(new core_common_1.Feature(instanceElementId));
|
|
562
|
+
}
|
|
563
|
+
const instanceFeatureId = this._instanceElementIdToFeatureId.get(instanceElementId);
|
|
564
|
+
featureIds[localInstanceId * 3 + 0] = instanceFeatureId & 0xFF;
|
|
565
|
+
featureIds[localInstanceId * 3 + 1] = (instanceFeatureId >> 8) & 0xFF;
|
|
566
|
+
featureIds[localInstanceId * 3 + 2] = (instanceFeatureId >> 16) & 0xFF;
|
|
567
|
+
}
|
|
568
|
+
}
|
|
495
569
|
return { count, transforms, transformCenter, featureIds };
|
|
496
570
|
}
|
|
497
571
|
readNodeAndCreateGraphics(renderGraphicList, node, featureTable, transformStack, batchInstances, pseudoRtcBias) {
|
|
@@ -670,6 +744,8 @@ class GltfReader {
|
|
|
670
744
|
this._resolvedTextures = new core_bentley_1.Dictionary((lhs, rhs) => compareTextureKeys(lhs, rhs));
|
|
671
745
|
this._dracoMeshes = new Map();
|
|
672
746
|
this._containsPointCloud = false;
|
|
747
|
+
this._instanceFeatures = [];
|
|
748
|
+
this._instanceElementIdToFeatureId = new Map();
|
|
673
749
|
/** The glTF spec says that if GltfSampler.wrapS/T are omitted, they default to Repeat.
|
|
674
750
|
* However, the reality data service serves tiles that lack any wrapS/T property, and we want those clamped to edge, not repeated.
|
|
675
751
|
* (We also don't want to produce mip-maps for them, which is determined indirectly from the wrap mode).
|
|
@@ -707,6 +783,7 @@ class GltfReader {
|
|
|
707
783
|
if (!sceneNodes)
|
|
708
784
|
sceneNodes = Object.keys(this._nodes);
|
|
709
785
|
this._sceneNodes = sceneNodes;
|
|
786
|
+
this._idMap = args.idMap;
|
|
710
787
|
}
|
|
711
788
|
readBufferData(json, accessorName, type) {
|
|
712
789
|
const view = this.getBufferView(json, accessorName);
|
|
@@ -1608,6 +1685,7 @@ class GltfGraphicsReader extends GltfReader {
|
|
|
1608
1685
|
props,
|
|
1609
1686
|
iModel: args.iModel,
|
|
1610
1687
|
vertexTableRequired: true,
|
|
1688
|
+
idMap: args.idMap,
|
|
1611
1689
|
});
|
|
1612
1690
|
this._contentRange = args.contentRange;
|
|
1613
1691
|
this._transform = args.transform;
|
|
@@ -1625,10 +1703,168 @@ class GltfGraphicsReader extends GltfReader {
|
|
|
1625
1703
|
renderMode: core_common_1.RenderMode.SmoothShade,
|
|
1626
1704
|
};
|
|
1627
1705
|
}
|
|
1706
|
+
getGltfStructuralMetadataBuffer(id, type) {
|
|
1707
|
+
const bufferView = this._bufferViews[id];
|
|
1708
|
+
if (!bufferView || undefined === bufferView.buffer)
|
|
1709
|
+
return undefined;
|
|
1710
|
+
if (!bufferView.byteLength || bufferView.byteLength === 0) {
|
|
1711
|
+
return undefined;
|
|
1712
|
+
}
|
|
1713
|
+
const bufferData = this._buffers[bufferView.buffer]?.resolvedBuffer;
|
|
1714
|
+
if (!bufferData)
|
|
1715
|
+
return undefined;
|
|
1716
|
+
(0, core_bentley_1.assert)(undefined !== bufferView.byteLength); // required by spec; TypeScript interface is wrong.
|
|
1717
|
+
const byteOffset = bufferView.byteOffset ?? 0;
|
|
1718
|
+
const subarray = bufferData.slice(byteOffset, byteOffset + bufferView.byteLength);
|
|
1719
|
+
switch (type) {
|
|
1720
|
+
case "INT8":
|
|
1721
|
+
return new Int8Array(subarray.buffer, 0, bufferView.byteLength);
|
|
1722
|
+
case "UINT8":
|
|
1723
|
+
return new Uint8Array(subarray.buffer, 0, bufferView.byteLength);
|
|
1724
|
+
case "INT16":
|
|
1725
|
+
return new Int16Array(subarray.buffer, 0, bufferView.byteLength / 2);
|
|
1726
|
+
case "UINT16":
|
|
1727
|
+
return new Uint16Array(subarray.buffer, 0, bufferView.byteLength / 2);
|
|
1728
|
+
case "INT32":
|
|
1729
|
+
return new Int32Array(subarray.buffer, 0, bufferView.byteLength / 4);
|
|
1730
|
+
case "UINT32":
|
|
1731
|
+
return new Uint32Array(subarray.buffer, 0, bufferView.byteLength / 4);
|
|
1732
|
+
case "INT64":
|
|
1733
|
+
return new BigInt64Array(subarray.buffer, 0, bufferView.byteLength / 8);
|
|
1734
|
+
case "UINT64":
|
|
1735
|
+
return new BigUint64Array(subarray.buffer, 0, bufferView.byteLength / 8);
|
|
1736
|
+
case "FLOAT32":
|
|
1737
|
+
return new Float32Array(subarray.buffer, 0, bufferView.byteLength / 4);
|
|
1738
|
+
case "FLOAT64":
|
|
1739
|
+
return new Float64Array(subarray.buffer, 0, bufferView.byteLength / 8);
|
|
1740
|
+
}
|
|
1741
|
+
return undefined;
|
|
1742
|
+
}
|
|
1743
|
+
getGltfStructuralMetadataPropertyValues(property, classProperty, count) {
|
|
1744
|
+
// Not supported for now
|
|
1745
|
+
if (classProperty.type === "ENUM" || classProperty.type === "BOOLEAN") {
|
|
1746
|
+
return undefined;
|
|
1747
|
+
}
|
|
1748
|
+
let getPropertyValue;
|
|
1749
|
+
if (classProperty.type === "STRING" && property.stringOffsets) {
|
|
1750
|
+
const stringValues = this.getGltfStructuralMetadataBuffer(property.values, "UINT8");
|
|
1751
|
+
if (!stringValues) {
|
|
1752
|
+
return undefined;
|
|
1753
|
+
}
|
|
1754
|
+
const stringOffsets = this.getGltfStructuralMetadataBuffer(property.stringOffsets, "UINT32");
|
|
1755
|
+
if (!stringOffsets) {
|
|
1756
|
+
return undefined;
|
|
1757
|
+
}
|
|
1758
|
+
getPropertyValue = (index) => {
|
|
1759
|
+
const begin = stringOffsets[index];
|
|
1760
|
+
const end = stringOffsets[index + 1];
|
|
1761
|
+
return (0, core_bentley_1.utf8ToString)(stringValues.subarray(begin, end));
|
|
1762
|
+
};
|
|
1763
|
+
}
|
|
1764
|
+
else {
|
|
1765
|
+
if (!classProperty.componentType) {
|
|
1766
|
+
return undefined;
|
|
1767
|
+
}
|
|
1768
|
+
let numComponents = -1;
|
|
1769
|
+
switch (classProperty.type) {
|
|
1770
|
+
case "SCALAR":
|
|
1771
|
+
numComponents = 1;
|
|
1772
|
+
break;
|
|
1773
|
+
case "VEC2":
|
|
1774
|
+
numComponents = 2;
|
|
1775
|
+
break;
|
|
1776
|
+
case "VEC3":
|
|
1777
|
+
numComponents = 3;
|
|
1778
|
+
break;
|
|
1779
|
+
case "VEC4":
|
|
1780
|
+
numComponents = 4;
|
|
1781
|
+
break;
|
|
1782
|
+
case "MAT2":
|
|
1783
|
+
numComponents = 4;
|
|
1784
|
+
break;
|
|
1785
|
+
case "MAT3":
|
|
1786
|
+
numComponents = 9;
|
|
1787
|
+
break;
|
|
1788
|
+
case "MAT4":
|
|
1789
|
+
numComponents = 16;
|
|
1790
|
+
break;
|
|
1791
|
+
}
|
|
1792
|
+
if (numComponents === -1) {
|
|
1793
|
+
return undefined;
|
|
1794
|
+
}
|
|
1795
|
+
const values = this.getGltfStructuralMetadataBuffer(property.values, classProperty.componentType);
|
|
1796
|
+
if (!values) {
|
|
1797
|
+
return undefined;
|
|
1798
|
+
}
|
|
1799
|
+
if (numComponents === 1) {
|
|
1800
|
+
getPropertyValue = (index) => {
|
|
1801
|
+
return values[index];
|
|
1802
|
+
};
|
|
1803
|
+
}
|
|
1804
|
+
else {
|
|
1805
|
+
getPropertyValue = (index) => {
|
|
1806
|
+
const result = [];
|
|
1807
|
+
for (let i = 0; i < numComponents; i++) {
|
|
1808
|
+
result.push(values[index * numComponents + i]);
|
|
1809
|
+
}
|
|
1810
|
+
return result;
|
|
1811
|
+
};
|
|
1812
|
+
}
|
|
1813
|
+
}
|
|
1814
|
+
const propertyValues = [];
|
|
1815
|
+
for (let i = 0; i < count; i++) {
|
|
1816
|
+
const value = getPropertyValue(i);
|
|
1817
|
+
const propertyValue = (typeof value === "bigint") ? value.toString() : value;
|
|
1818
|
+
if (!classProperty.noData || propertyValue !== classProperty.noData) {
|
|
1819
|
+
propertyValues.push(propertyValue);
|
|
1820
|
+
}
|
|
1821
|
+
else {
|
|
1822
|
+
propertyValues.push(undefined);
|
|
1823
|
+
}
|
|
1824
|
+
}
|
|
1825
|
+
return propertyValues;
|
|
1826
|
+
}
|
|
1827
|
+
readGltfStructuralMetadata() {
|
|
1828
|
+
const propertyTables = this._glTF.extensions?.EXT_structural_metadata?.propertyTables;
|
|
1829
|
+
const schema = this._glTF.extensions?.EXT_structural_metadata?.schema;
|
|
1830
|
+
if (propertyTables && schema && schema.classes) {
|
|
1831
|
+
this._structuralMetadata = { tables: [] };
|
|
1832
|
+
for (const propertyTable of propertyTables) {
|
|
1833
|
+
if (!propertyTable.properties || !schema.classes) {
|
|
1834
|
+
continue;
|
|
1835
|
+
}
|
|
1836
|
+
const propertyTableSchema = schema.classes[propertyTable.class];
|
|
1837
|
+
if (!propertyTableSchema || !propertyTableSchema.properties) {
|
|
1838
|
+
continue;
|
|
1839
|
+
}
|
|
1840
|
+
const structuralMetadataTable = {
|
|
1841
|
+
name: propertyTableSchema.name ?? propertyTable.class,
|
|
1842
|
+
entries: [],
|
|
1843
|
+
};
|
|
1844
|
+
for (const [propertyName, property] of Object.entries(propertyTable.properties)) {
|
|
1845
|
+
const propertySchema = propertyTableSchema.properties[propertyName];
|
|
1846
|
+
if (!property || !propertySchema) {
|
|
1847
|
+
continue;
|
|
1848
|
+
}
|
|
1849
|
+
const propertyValues = this.getGltfStructuralMetadataPropertyValues(property, propertySchema, propertyTable.count);
|
|
1850
|
+
if (!propertyValues) {
|
|
1851
|
+
continue;
|
|
1852
|
+
}
|
|
1853
|
+
structuralMetadataTable.entries.push({
|
|
1854
|
+
name: propertySchema.name ?? propertyName,
|
|
1855
|
+
values: propertyValues,
|
|
1856
|
+
});
|
|
1857
|
+
}
|
|
1858
|
+
this._structuralMetadata.tables.push(structuralMetadataTable);
|
|
1859
|
+
}
|
|
1860
|
+
}
|
|
1861
|
+
}
|
|
1628
1862
|
async read() {
|
|
1629
1863
|
await this.resolveResources();
|
|
1864
|
+
this.readGltfStructuralMetadata();
|
|
1630
1865
|
return this.readGltfAndCreateGraphics(this._isLeaf, this._featureTable, this._contentRange, this._transform);
|
|
1631
1866
|
}
|
|
1867
|
+
get structuralMetadata() { return this._structuralMetadata; }
|
|
1632
1868
|
get nodes() { return this._nodes; }
|
|
1633
1869
|
get scenes() { return this._glTF.scenes ?? emptyDict; }
|
|
1634
1870
|
get sceneNodes() { return this._sceneNodes; }
|