@itwin/core-frontend 3.0.0-dev.131 → 3.0.0-dev.136
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/lib/cjs/SheetViewState.js +2 -0
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts +3 -2
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +3 -2
- package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts +5 -1
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.js +20 -5
- package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts +26 -3
- package/lib/cjs/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/cjs/quantity-formatting/QuantityFormatter.js +46 -7
- package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/cjs/render/RenderSystem.d.ts +0 -2
- package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
- package/lib/cjs/render/RenderSystem.js.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
- package/lib/cjs/render/webgl/DrawCommand.js +3 -1
- package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
- package/lib/cjs/render/webgl/Mesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Mesh.js +1 -2
- package/lib/cjs/render/webgl/Mesh.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PlanarClassifier.js +1 -0
- package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -0
- package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/cjs/render/webgl/SceneCompositor.js +1 -0
- package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts +8 -7
- package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/cjs/render/webgl/ShaderBuilder.js +20 -18
- package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/cjs/render/webgl/SolarShadowMap.js +1 -0
- package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/cjs/render/webgl/System.d.ts +0 -3
- package/lib/cjs/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/render/webgl/System.js +0 -3
- package/lib/cjs/render/webgl/System.js.map +1 -1
- package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Target.js +5 -0
- package/lib/cjs/render/webgl/Target.js.map +1 -1
- package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
- package/lib/cjs/render/webgl/Technique.js +74 -29
- package/lib/cjs/render/webgl/Technique.js.map +1 -1
- package/lib/cjs/render/webgl/TechniqueFlags.d.ts +7 -1
- package/lib/cjs/render/webgl/TechniqueFlags.d.ts.map +1 -1
- package/lib/cjs/render/webgl/TechniqueFlags.js +10 -1
- package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +1 -1
- package/lib/cjs/render/webgl/glsl/Blur.js +1 -1
- package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +2 -2
- package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +2 -2
- package/lib/cjs/render/webgl/glsl/Combine3Textures.js +1 -1
- package/lib/cjs/render/webgl/glsl/CombineTextures.js +1 -1
- package/lib/cjs/render/webgl/glsl/Composite.js +1 -1
- package/lib/cjs/render/webgl/glsl/CopyColor.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyColor.js +17 -2
- package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +2 -2
- package/lib/cjs/render/webgl/glsl/CopyStencil.js +6 -6
- package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +1 -1
- package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +2 -2
- package/lib/cjs/render/webgl/glsl/Fragment.js +10 -10
- package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js +1 -1
- package/lib/cjs/render/webgl/glsl/PlanarClassification.js +3 -3
- package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/RealityMesh.js +5 -2
- package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js +1 -1
- package/lib/cjs/render/webgl/glsl/SkyBox.js +1 -1
- package/lib/cjs/render/webgl/glsl/SkySphere.js +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/cjs/render/webgl/glsl/Surface.js +5 -2
- package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/cjs/render/webgl/glsl/Translucency.js +2 -2
- package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts +9 -0
- package/lib/cjs/render/webgl/glsl/Wiremesh.d.ts.map +1 -0
- package/lib/cjs/render/webgl/glsl/Wiremesh.js +40 -0
- package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -0
- package/lib/cjs/tile/B3dmReader.d.ts +1 -1
- package/lib/cjs/tile/B3dmReader.d.ts.map +1 -1
- package/lib/cjs/tile/B3dmReader.js +4 -4
- package/lib/cjs/tile/B3dmReader.js.map +1 -1
- package/lib/cjs/tile/GltfReader.d.ts +3 -1
- package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
- package/lib/cjs/tile/GltfReader.js +33 -1
- package/lib/cjs/tile/GltfReader.js.map +1 -1
- package/lib/cjs/tile/I3dmReader.d.ts +1 -1
- package/lib/cjs/tile/I3dmReader.d.ts.map +1 -1
- package/lib/cjs/tile/I3dmReader.js +4 -4
- package/lib/cjs/tile/I3dmReader.js.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.d.ts +2 -1
- package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/cjs/tile/RealityModelTileTree.js +29 -10
- package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.d.ts +1 -0
- package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/cjs/tile/RealityTileLoader.js +3 -2
- package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
- package/lib/esm/SheetViewState.js +2 -0
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts +3 -2
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +3 -2
- package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
- package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts +5 -1
- package/lib/esm/quantity-formatting/BasicUnitsProvider.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/BasicUnitsProvider.js +18 -4
- package/lib/esm/quantity-formatting/BasicUnitsProvider.js.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.d.ts +26 -3
- package/lib/esm/quantity-formatting/QuantityFormatter.d.ts.map +1 -1
- package/lib/esm/quantity-formatting/QuantityFormatter.js +45 -7
- package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
- package/lib/esm/render/RenderSystem.d.ts +0 -2
- package/lib/esm/render/RenderSystem.d.ts.map +1 -1
- package/lib/esm/render/RenderSystem.js.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
- package/lib/esm/render/webgl/DrawCommand.js +3 -1
- package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
- package/lib/esm/render/webgl/Mesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/Mesh.js +1 -2
- package/lib/esm/render/webgl/Mesh.js.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
- package/lib/esm/render/webgl/PlanarClassifier.js +1 -0
- package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.d.ts.map +1 -1
- package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -0
- package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
- package/lib/esm/render/webgl/SceneCompositor.js +1 -0
- package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.d.ts +8 -7
- package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
- package/lib/esm/render/webgl/ShaderBuilder.js +20 -18
- package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.d.ts.map +1 -1
- package/lib/esm/render/webgl/SolarShadowMap.js +1 -0
- package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
- package/lib/esm/render/webgl/System.d.ts +0 -3
- package/lib/esm/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/render/webgl/System.js +0 -3
- package/lib/esm/render/webgl/System.js.map +1 -1
- package/lib/esm/render/webgl/Target.d.ts.map +1 -1
- package/lib/esm/render/webgl/Target.js +5 -0
- package/lib/esm/render/webgl/Target.js.map +1 -1
- package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
- package/lib/esm/render/webgl/Technique.js +74 -29
- package/lib/esm/render/webgl/Technique.js.map +1 -1
- package/lib/esm/render/webgl/TechniqueFlags.d.ts +7 -1
- package/lib/esm/render/webgl/TechniqueFlags.d.ts.map +1 -1
- package/lib/esm/render/webgl/TechniqueFlags.js +10 -1
- package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
- package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +1 -1
- package/lib/esm/render/webgl/glsl/Blur.js +1 -1
- package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +2 -2
- package/lib/esm/render/webgl/glsl/ClearTranslucent.js +2 -2
- package/lib/esm/render/webgl/glsl/Combine3Textures.js +1 -1
- package/lib/esm/render/webgl/glsl/CombineTextures.js +1 -1
- package/lib/esm/render/webgl/glsl/Composite.js +1 -1
- package/lib/esm/render/webgl/glsl/CopyColor.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/CopyColor.js +17 -2
- package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
- package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +2 -2
- package/lib/esm/render/webgl/glsl/CopyStencil.js +6 -6
- package/lib/esm/render/webgl/glsl/EVSMFromDepth.js +1 -1
- package/lib/esm/render/webgl/glsl/FeatureSymbology.js +2 -2
- package/lib/esm/render/webgl/glsl/Fragment.js +10 -10
- package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js +1 -1
- package/lib/esm/render/webgl/glsl/PlanarClassification.js +3 -3
- package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/RealityMesh.js +5 -2
- package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
- package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js +1 -1
- package/lib/esm/render/webgl/glsl/SkyBox.js +1 -1
- package/lib/esm/render/webgl/glsl/SkySphere.js +1 -1
- package/lib/esm/render/webgl/glsl/Surface.d.ts.map +1 -1
- package/lib/esm/render/webgl/glsl/Surface.js +5 -2
- package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
- package/lib/esm/render/webgl/glsl/Translucency.js +2 -2
- package/lib/esm/render/webgl/glsl/Wiremesh.d.ts +9 -0
- package/lib/esm/render/webgl/glsl/Wiremesh.d.ts.map +1 -0
- package/lib/esm/render/webgl/glsl/Wiremesh.js +36 -0
- package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -0
- package/lib/esm/tile/B3dmReader.d.ts +1 -1
- package/lib/esm/tile/B3dmReader.d.ts.map +1 -1
- package/lib/esm/tile/B3dmReader.js +4 -4
- package/lib/esm/tile/B3dmReader.js.map +1 -1
- package/lib/esm/tile/GltfReader.d.ts +3 -1
- package/lib/esm/tile/GltfReader.d.ts.map +1 -1
- package/lib/esm/tile/GltfReader.js +33 -1
- package/lib/esm/tile/GltfReader.js.map +1 -1
- package/lib/esm/tile/I3dmReader.d.ts +1 -1
- package/lib/esm/tile/I3dmReader.d.ts.map +1 -1
- package/lib/esm/tile/I3dmReader.js +4 -4
- package/lib/esm/tile/I3dmReader.js.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.d.ts +2 -1
- package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
- package/lib/esm/tile/RealityModelTileTree.js +30 -11
- package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
- package/lib/esm/tile/RealityTileLoader.d.ts +1 -0
- package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
- package/lib/esm/tile/RealityTileLoader.js +3 -2
- package/lib/esm/tile/RealityTileLoader.js.map +1 -1
- package/package.json +22 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"B3dmReader.js","sourceRoot":"","sources":["../../../src/tile/B3dmReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { ByteStream, Id64String, JsonUtils } from \"@itwin/core-bentley\";\r\nimport { Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { B3dmHeader, BatchType, ColorDef, ElementAlignedBox3d, Feature, FeatureTable, GltfBufferData, GltfDataType, TileReadStatus } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { Mesh } from \"../render/primitives/mesh/MeshPrimitives\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport { BatchedTileIdMap, GltfReader, GltfReaderProps, GltfReaderResult, ShouldAbortReadGltf } from \"./internal\";\r\n\r\n/**\r\n * Deserializes a tile in [b3dm](https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification/TileFormats/Batched3DModel) format.\r\n * @internal\r\n */\r\nexport class B3dmReader extends GltfReader {\r\n private _batchIdRemap = new Map<number, number>();\r\n private _colors?: Array<number>;\r\n\r\n public static create(stream: ByteStream, iModel: IModelConnection, modelId: Id64String, is3d: boolean, range: ElementAlignedBox3d,\r\n system: RenderSystem, yAxisUp: boolean, isLeaf: boolean, tileCenter: Point3d, transformToRoot?: Transform,\r\n isCanceled?: ShouldAbortReadGltf, idMap?: BatchedTileIdMap): B3dmReader | undefined {\r\n const header = new B3dmHeader(stream);\r\n if (!header.isValid)\r\n return undefined;\r\n\r\n let returnToCenterTransform, pseudoRtcBias;\r\n if (header.featureTableJson && Array.isArray(header.featureTableJson.RTC_CENTER)) {\r\n returnToCenterTransform = Transform.createTranslationXYZ(header.featureTableJson.RTC_CENTER[0], header.featureTableJson.RTC_CENTER[1], header.featureTableJson.RTC_CENTER[2]);\r\n } else {\r\n /**\r\n * This is a workaround for tiles generated by\r\n * context capture which have a large offset from the tileset origin that exceeds the\r\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\r\n * origin and there is no RTC supplied either with the B3DM of the GLTF.\r\n * as the vertices are supplied in a quantized format, applying the RTC bias to\r\n * quantization origin will make these tiles work correctly.\r\n */\r\n pseudoRtcBias = Vector3d.create(tileCenter.x, tileCenter.y, tileCenter.z);\r\n }\r\n\r\n if (undefined !== returnToCenterTransform)\r\n transformToRoot = transformToRoot ? transformToRoot.multiplyTransformTransform(returnToCenterTransform) : returnToCenterTransform;\r\n\r\n const props = GltfReaderProps.create(stream, yAxisUp);\r\n const batchTableLength = header.featureTableJson ? JsonUtils.asInt(header.featureTableJson.BATCH_LENGTH, 0) : 0;\r\n\r\n return undefined !== props ? new B3dmReader(props, iModel, modelId, is3d, system, range, isLeaf, batchTableLength,\r\n transformToRoot, header.batchTableJson, isCanceled, idMap, pseudoRtcBias) : undefined;\r\n }\r\n\r\n private constructor(props: GltfReaderProps, iModel: IModelConnection, modelId: Id64String, is3d: boolean, system: RenderSystem,\r\n private _range: ElementAlignedBox3d, private _isLeaf: boolean, private _batchTableLength: number, private _transformToRoot?: Transform, private _batchTableJson?: any\r\n , isCanceled?: ShouldAbortReadGltf, private _idMap?: BatchedTileIdMap, private _pseudoRtcBias?: Vector3d) {\r\n super(props, iModel, modelId, is3d, system, BatchType.Primary, isCanceled);\r\n }\r\n\r\n public async read(): Promise<GltfReaderResult> {\r\n // NB: For reality models with no batch table, we want the model ID in the feature table\r\n const featureTable: FeatureTable = new FeatureTable(this._batchTableLength ? this._batchTableLength : 1, this._modelId, this._type);\r\n if (this._batchTableLength > 0 && this._idMap !== undefined && this._batchTableJson !== undefined) {\r\n if (this._batchTableJson.extensions && this._batchTableJson.extensions[\"3DTILES_batch_table_hierarchy\"]) {\r\n const hierarchy = this._batchTableJson.extensions[\"3DTILES_batch_table_hierarchy\"];\r\n const { classIds, classes, parentIds, parentCounts, instancesLength } = hierarchy;\r\n if (classes !== undefined && classIds !== undefined && instancesLength !== 0) {\r\n const classCounts = new Array<number>(classes.length);\r\n classCounts.fill(0);\r\n const classIndexes = new Uint16Array(instancesLength);\r\n for (let i = 0; i < instancesLength; ++i) {\r\n const classId = classIds[i];\r\n classIndexes[i] = classCounts[classId]++;\r\n }\r\n\r\n let parentMap: [][] | undefined;\r\n if (parentIds) {\r\n parentMap = new Array<[]>();\r\n for (let i = 0, parentIndex = 0; i < instancesLength; i++) {\r\n const parentCount = parentCounts === undefined ? 1 : parentCounts[i];\r\n parentMap[i] = parentIds.slice(parentIndex, parentIndex += parentCount);\r\n }\r\n }\r\n\r\n const getProperties = (instance: any, instanceIndex: number) => {\r\n const classId = classIds[instanceIndex];\r\n const instanceClass = classes[classId];\r\n const instances = instanceClass.instances;\r\n const indexInClass = classIndexes[instanceIndex];\r\n for (const key in instances) { // eslint-disable-line guard-for-in\r\n const value = instances[key][indexInClass];\r\n if (value !== undefined && value !== null)\r\n instance[key] = value;\r\n }\r\n if (parentIds !== undefined) {\r\n const thisParents = parentMap![instanceIndex];\r\n for (const parentId of thisParents) {\r\n if (parentId !== instanceIndex)\r\n getProperties(instance, parentId);\r\n }\r\n }\r\n };\r\n for (let batchId = 0; batchId < instancesLength; batchId++) {\r\n const instance: any = {};\r\n getProperties(instance, batchId);\r\n this._batchIdRemap.set(batchId, featureTable.insert(new Feature(this._idMap.getBatchId(instance))));\r\n const cesiumColor = instance[\"cesium#color\"];\r\n if (undefined !== cesiumColor) {\r\n if (!this._colors) {\r\n this._colors = new Array<number>(instancesLength);\r\n this._colors.fill(ColorDef.white.tbgr);\r\n }\r\n this._colors[batchId] = ColorDef.create(cesiumColor).tbgr;\r\n }\r\n }\r\n }\r\n } else {\r\n for (let i = 0; i < this._batchTableLength; i++) {\r\n const feature: any = {};\r\n for (const key in this._batchTableJson) // eslint-disable-line guard-for-in\r\n feature[key] = this._batchTableJson[key][i];\r\n\r\n this._batchIdRemap.set(i, featureTable.insert(new Feature(this._idMap.getBatchId(feature))));\r\n }\r\n }\r\n }\r\n\r\n if (featureTable.isEmpty) {\r\n this._batchIdRemap.set(0, 0);\r\n const feature = new Feature(this._modelId);\r\n featureTable.insert(feature);\r\n }\r\n\r\n await this.loadTextures();\r\n if (this._isCanceled)\r\n return { readStatus: TileReadStatus.Canceled, isLeaf: this._isLeaf };\r\n\r\n return this.readGltfAndCreateGraphics(this._isLeaf, featureTable, this._range, this._transformToRoot, this._pseudoRtcBias);\r\n }\r\n\r\n protected override readBatchTable(mesh: Mesh, json: any) {\r\n if (mesh.features !== undefined) {\r\n if (this._batchTableLength > 0 && undefined !== this._batchTableJson && undefined !== json.attributes) {\r\n const view = this.getBufferView(json.attributes, \"_BATCHID\");\r\n let batchIds: undefined | GltfBufferData;\r\n if (undefined !== view && (undefined !== (batchIds = view.toBufferData(GltfDataType.UInt32)) || undefined !== (batchIds = view.toBufferData(GltfDataType.Float)))) {\r\n const indices = [];\r\n const { colors, colorMap } = mesh;\r\n let colorRemap: Uint32Array | undefined;\r\n if (this._colors && this._colors.length === this._batchTableLength) {\r\n colorRemap = new Uint32Array(this._batchTableLength);\r\n\r\n for (let i = 0; i < this._batchTableLength; i++)\r\n colorRemap[i] = colorMap.insert(this._colors[i]);\r\n }\r\n\r\n for (let i = 0; i < batchIds.count; i++) {\r\n const batchId = batchIds.buffer[i * view.stride];\r\n const remapId = this._batchIdRemap.get(batchId);\r\n indices.push(remapId === undefined ? 0 : remapId);\r\n if (colorRemap)\r\n colors.push(colorRemap[batchId]);\r\n }\r\n mesh.features.setIndices(indices);\r\n\r\n }\r\n } else {\r\n mesh.features.add(new Feature(this._modelId), 1);\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"B3dmReader.js","sourceRoot":"","sources":["../../../src/tile/B3dmReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { ByteStream, Id64String, JsonUtils } from \"@itwin/core-bentley\";\r\nimport { Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { B3dmHeader, BatchType, ColorDef, ElementAlignedBox3d, Feature, FeatureTable, GltfBufferData, GltfDataType, TileReadStatus } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { Mesh } from \"../render/primitives/mesh/MeshPrimitives\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport { BatchedTileIdMap, GltfReader, GltfReaderProps, GltfReaderResult, ShouldAbortReadGltf } from \"./internal\";\r\n\r\n/**\r\n * Deserializes a tile in [b3dm](https://github.com/AnalyticalGraphicsInc/3d-tiles/tree/master/specification/TileFormats/Batched3DModel) format.\r\n * @internal\r\n */\r\nexport class B3dmReader extends GltfReader {\r\n private _batchIdRemap = new Map<number, number>();\r\n private _colors?: Array<number>;\r\n\r\n public static create(stream: ByteStream, iModel: IModelConnection, modelId: Id64String, is3d: boolean, range: ElementAlignedBox3d,\r\n system: RenderSystem, yAxisUp: boolean, isLeaf: boolean, tileCenter: Point3d, transformToRoot?: Transform,\r\n isCanceled?: ShouldAbortReadGltf, idMap?: BatchedTileIdMap, deduplicateVertices=false): B3dmReader | undefined {\r\n const header = new B3dmHeader(stream);\r\n if (!header.isValid)\r\n return undefined;\r\n\r\n let returnToCenterTransform, pseudoRtcBias;\r\n if (header.featureTableJson && Array.isArray(header.featureTableJson.RTC_CENTER)) {\r\n returnToCenterTransform = Transform.createTranslationXYZ(header.featureTableJson.RTC_CENTER[0], header.featureTableJson.RTC_CENTER[1], header.featureTableJson.RTC_CENTER[2]);\r\n } else {\r\n /**\r\n * This is a workaround for tiles generated by\r\n * context capture which have a large offset from the tileset origin that exceeds the\r\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\r\n * origin and there is no RTC supplied either with the B3DM of the GLTF.\r\n * as the vertices are supplied in a quantized format, applying the RTC bias to\r\n * quantization origin will make these tiles work correctly.\r\n */\r\n pseudoRtcBias = Vector3d.create(tileCenter.x, tileCenter.y, tileCenter.z);\r\n }\r\n\r\n if (undefined !== returnToCenterTransform)\r\n transformToRoot = transformToRoot ? transformToRoot.multiplyTransformTransform(returnToCenterTransform) : returnToCenterTransform;\r\n\r\n const props = GltfReaderProps.create(stream, yAxisUp);\r\n const batchTableLength = header.featureTableJson ? JsonUtils.asInt(header.featureTableJson.BATCH_LENGTH, 0) : 0;\r\n\r\n return undefined !== props ? new B3dmReader(props, iModel, modelId, is3d, system, range, isLeaf, batchTableLength,\r\n transformToRoot, header.batchTableJson, isCanceled, idMap, pseudoRtcBias, deduplicateVertices) : undefined;\r\n }\r\n\r\n private constructor(props: GltfReaderProps, iModel: IModelConnection, modelId: Id64String, is3d: boolean, system: RenderSystem,\r\n private _range: ElementAlignedBox3d, private _isLeaf: boolean, private _batchTableLength: number, private _transformToRoot?: Transform, private _batchTableJson?: any\r\n , isCanceled?: ShouldAbortReadGltf, private _idMap?: BatchedTileIdMap, private _pseudoRtcBias?: Vector3d, deduplicateVertices=false) {\r\n super(props, iModel, modelId, is3d, system, BatchType.Primary, isCanceled, deduplicateVertices);\r\n }\r\n\r\n public async read(): Promise<GltfReaderResult> {\r\n // NB: For reality models with no batch table, we want the model ID in the feature table\r\n const featureTable: FeatureTable = new FeatureTable(this._batchTableLength ? this._batchTableLength : 1, this._modelId, this._type);\r\n if (this._batchTableLength > 0 && this._idMap !== undefined && this._batchTableJson !== undefined) {\r\n if (this._batchTableJson.extensions && this._batchTableJson.extensions[\"3DTILES_batch_table_hierarchy\"]) {\r\n const hierarchy = this._batchTableJson.extensions[\"3DTILES_batch_table_hierarchy\"];\r\n const { classIds, classes, parentIds, parentCounts, instancesLength } = hierarchy;\r\n if (classes !== undefined && classIds !== undefined && instancesLength !== 0) {\r\n const classCounts = new Array<number>(classes.length);\r\n classCounts.fill(0);\r\n const classIndexes = new Uint16Array(instancesLength);\r\n for (let i = 0; i < instancesLength; ++i) {\r\n const classId = classIds[i];\r\n classIndexes[i] = classCounts[classId]++;\r\n }\r\n\r\n let parentMap: [][] | undefined;\r\n if (parentIds) {\r\n parentMap = new Array<[]>();\r\n for (let i = 0, parentIndex = 0; i < instancesLength; i++) {\r\n const parentCount = parentCounts === undefined ? 1 : parentCounts[i];\r\n parentMap[i] = parentIds.slice(parentIndex, parentIndex += parentCount);\r\n }\r\n }\r\n\r\n const getProperties = (instance: any, instanceIndex: number) => {\r\n const classId = classIds[instanceIndex];\r\n const instanceClass = classes[classId];\r\n const instances = instanceClass.instances;\r\n const indexInClass = classIndexes[instanceIndex];\r\n for (const key in instances) { // eslint-disable-line guard-for-in\r\n const value = instances[key][indexInClass];\r\n if (value !== undefined && value !== null)\r\n instance[key] = value;\r\n }\r\n if (parentIds !== undefined) {\r\n const thisParents = parentMap![instanceIndex];\r\n for (const parentId of thisParents) {\r\n if (parentId !== instanceIndex)\r\n getProperties(instance, parentId);\r\n }\r\n }\r\n };\r\n for (let batchId = 0; batchId < instancesLength; batchId++) {\r\n const instance: any = {};\r\n getProperties(instance, batchId);\r\n this._batchIdRemap.set(batchId, featureTable.insert(new Feature(this._idMap.getBatchId(instance))));\r\n const cesiumColor = instance[\"cesium#color\"];\r\n if (undefined !== cesiumColor) {\r\n if (!this._colors) {\r\n this._colors = new Array<number>(instancesLength);\r\n this._colors.fill(ColorDef.white.tbgr);\r\n }\r\n this._colors[batchId] = ColorDef.create(cesiumColor).tbgr;\r\n }\r\n }\r\n }\r\n } else {\r\n for (let i = 0; i < this._batchTableLength; i++) {\r\n const feature: any = {};\r\n for (const key in this._batchTableJson) // eslint-disable-line guard-for-in\r\n feature[key] = this._batchTableJson[key][i];\r\n\r\n this._batchIdRemap.set(i, featureTable.insert(new Feature(this._idMap.getBatchId(feature))));\r\n }\r\n }\r\n }\r\n\r\n if (featureTable.isEmpty) {\r\n this._batchIdRemap.set(0, 0);\r\n const feature = new Feature(this._modelId);\r\n featureTable.insert(feature);\r\n }\r\n\r\n await this.loadTextures();\r\n if (this._isCanceled)\r\n return { readStatus: TileReadStatus.Canceled, isLeaf: this._isLeaf };\r\n\r\n return this.readGltfAndCreateGraphics(this._isLeaf, featureTable, this._range, this._transformToRoot, this._pseudoRtcBias);\r\n }\r\n\r\n protected override readBatchTable(mesh: Mesh, json: any) {\r\n if (mesh.features !== undefined) {\r\n if (this._batchTableLength > 0 && undefined !== this._batchTableJson && undefined !== json.attributes) {\r\n const view = this.getBufferView(json.attributes, \"_BATCHID\");\r\n let batchIds: undefined | GltfBufferData;\r\n if (undefined !== view && (undefined !== (batchIds = view.toBufferData(GltfDataType.UInt32)) || undefined !== (batchIds = view.toBufferData(GltfDataType.Float)))) {\r\n const indices = [];\r\n const { colors, colorMap } = mesh;\r\n let colorRemap: Uint32Array | undefined;\r\n if (this._colors && this._colors.length === this._batchTableLength) {\r\n colorRemap = new Uint32Array(this._batchTableLength);\r\n\r\n for (let i = 0; i < this._batchTableLength; i++)\r\n colorRemap[i] = colorMap.insert(this._colors[i]);\r\n }\r\n\r\n for (let i = 0; i < batchIds.count; i++) {\r\n const batchId = batchIds.buffer[i * view.stride];\r\n const remapId = this._batchIdRemap.get(batchId);\r\n indices.push(remapId === undefined ? 0 : remapId);\r\n if (colorRemap)\r\n colors.push(colorRemap[batchId]);\r\n }\r\n mesh.features.setIndices(indices);\r\n\r\n }\r\n } else {\r\n mesh.features.add(new Feature(this._modelId), 1);\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -85,6 +85,7 @@ export declare abstract class GltfReader {
|
|
|
85
85
|
protected readonly _returnToCenter: number[] | undefined;
|
|
86
86
|
protected readonly _yAxisUp: boolean;
|
|
87
87
|
protected readonly _type: BatchType;
|
|
88
|
+
protected readonly _deduplicateVertices: boolean;
|
|
88
89
|
private readonly _canceled?;
|
|
89
90
|
/** Asynchronously deserialize the tile data and return the result. */
|
|
90
91
|
abstract read(): Promise<GltfReaderResult>;
|
|
@@ -98,7 +99,7 @@ export declare abstract class GltfReader {
|
|
|
98
99
|
readBufferData16(json: any, accessorName: string): GltfBufferData | undefined;
|
|
99
100
|
readBufferData8(json: any, accessorName: string): GltfBufferData | undefined;
|
|
100
101
|
readBufferDataFloat(json: any, accessorName: string): GltfBufferData | undefined;
|
|
101
|
-
protected constructor(props: GltfReaderProps, iModel: IModelConnection, modelId: Id64String, is3d: boolean, system: RenderSystem, type?: BatchType, isCanceled?: ShouldAbortReadGltf);
|
|
102
|
+
protected constructor(props: GltfReaderProps, iModel: IModelConnection, modelId: Id64String, is3d: boolean, system: RenderSystem, type?: BatchType, isCanceled?: ShouldAbortReadGltf, deduplicateVertices?: boolean);
|
|
102
103
|
protected readBufferData(json: any, accessorName: string, type: GltfDataType): GltfBufferData | undefined;
|
|
103
104
|
protected readFeatureIndices(_json: any): number[] | undefined;
|
|
104
105
|
private colorFromJson;
|
|
@@ -107,6 +108,7 @@ export declare abstract class GltfReader {
|
|
|
107
108
|
protected createDisplayParams(materialJson: any, hasBakedLighting: boolean): DisplayParams | undefined;
|
|
108
109
|
protected extractReturnToCenter(extensions: any): number[] | undefined;
|
|
109
110
|
protected readMeshPrimitive(primitive: any, featureTable?: FeatureTable, pseudoRtcBias?: Vector3d): GltfMeshData | undefined;
|
|
111
|
+
private deduplicateVertices;
|
|
110
112
|
/**
|
|
111
113
|
*
|
|
112
114
|
* @param positions quantized points
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GltfReader.d.ts","sourceRoot":"","sources":["../../../src/tile/GltfReader.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"GltfReader.d.ts","sourceRoot":"","sources":["../../../src/tile/GltfReader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,UAAU,EAAE,UAAU,EAA2B,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EAAqC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChH,OAAO,EACL,SAAS,EAAY,mBAAmB,EAAE,YAAY,EAAa,cAAc,EAAE,cAAc,EAAE,YAAY,EAChC,gBAAgB,EAAwC,SAAS,EAAE,SAAS,EAE3J,aAAa,EAAE,cAAc,EAAE,cAAc,EAC9C,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,IAAI,EAAmB,MAAM,0CAA0C,CAAC;AAGjF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAWzC;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,WAAW;IACnD,UAAU,EAAE,cAAc,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,eAAe;aACU,MAAM,EAAE,UAAU;aACpC,UAAU,EAAE,UAAU;aACtB,SAAS,EAAE,GAAG;aACd,WAAW,EAAE,GAAG;aAChB,KAAK,EAAE,GAAG;aACV,KAAK,EAAE,GAAG;aACV,MAAM,EAAE,GAAG;aACX,SAAS,EAAE,GAAG;aACd,UAAU,EAAE,GAAG;aACf,QAAQ,EAAE,GAAG;aACb,UAAU,EAAE,GAAG;aACf,OAAO,EAAE,OAAO;IAXlC,OAAO;IAaP,gIAAgI;WAClH,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,GAAE,OAAe,GAAG,eAAe,GAAG,SAAS;CA+BhG;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,WAAW,GAAG,WAAW,CAAC;gBAExB,KAAK,EAAE,IAAI;CAG/B;AAED;;GAEG;AACH,oBAAY,mBAAmB,GAAG,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC;AAalE;;GAEG;AACH,8BAAsB,UAAU;IAC9B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IACvC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IAC/B,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACnC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;IAC/B,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,GAAG,CAAC;IACnC,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,GAAG,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,GAAG,CAAC;IACzC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAC;IACvC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IAChC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;IAC3C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAClC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IACzC,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACzD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACjD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAsB;IAajD,sEAAsE;aACtD,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAEjD,SAAS,KAAK,WAAW,IAAI,OAAO,CAAiE;IACrG,SAAS,KAAK,mBAAmB,IAAI,OAAO,CAAsD;IAElG,SAAS,CAAC,yBAAyB,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,eAAe,CAAC,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,sBAAsB,GAAG,gBAAgB;IA+DhO,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,yBAAyB;IAkE1B,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAgD1E,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAC7E,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAC7E,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAC5E,mBAAmB,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAEvF,SAAS,aAAa,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,GAAE,SAA6B,EAAE,UAAU,CAAC,EAAE,mBAAmB,EAAE,mBAAmB,UAAM;IA6BlO,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,cAAc,GAAG,SAAS;IAKzG,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,SAAS;IAE9D,OAAO,CAAC,aAAa;IAErB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,gBAAgB;IAuCxB,SAAS,CAAC,mBAAmB,CAAC,YAAY,EAAE,GAAG,EAAE,gBAAgB,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS;IAMtG,SAAS,CAAC,qBAAqB,CAAC,UAAU,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,SAAS;IAQtE,SAAS,CAAC,iBAAiB,CAAC,SAAS,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,QAAQ,GAAG,YAAY,GAAG,SAAS;IA8H5H,OAAO,CAAC,mBAAmB;IAuC3B;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY;IAmEpB,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAY5E,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG;IAGhD,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO;IAUjE,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAyCnF,OAAO,CAAC,YAAY;IAgEpB,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,gBAAgB,EAAE,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO;cA6BjG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;cA4B7B,gBAAgB,CAAC,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;cAkD9G,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IASrF,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;CAK5E"}
|
|
@@ -89,7 +89,7 @@ export class GltfMeshData {
|
|
|
89
89
|
* @internal
|
|
90
90
|
*/
|
|
91
91
|
export class GltfReader {
|
|
92
|
-
constructor(props, iModel, modelId, is3d, system, type = BatchType.Primary, isCanceled) {
|
|
92
|
+
constructor(props, iModel, modelId, is3d, system, type = BatchType.Primary, isCanceled, deduplicateVertices = false) {
|
|
93
93
|
this._buffer = props.buffer;
|
|
94
94
|
this._scene = props.scene;
|
|
95
95
|
this._binaryData = props.binaryData;
|
|
@@ -113,6 +113,7 @@ export class GltfReader {
|
|
|
113
113
|
this._system = system;
|
|
114
114
|
this._type = type;
|
|
115
115
|
this._canceled = isCanceled;
|
|
116
|
+
this._deduplicateVertices = deduplicateVertices;
|
|
116
117
|
}
|
|
117
118
|
get _isCanceled() { return undefined !== this._canceled && this._canceled(this); }
|
|
118
119
|
get _isVolumeClassifier() { return BatchType.VolumeClassifier === this._type; }
|
|
@@ -455,6 +456,8 @@ export class GltfReader {
|
|
|
455
456
|
return undefined;
|
|
456
457
|
if (!mesh.uvs)
|
|
457
458
|
this.readUVParams(mesh, primitive.attributes, "TEXCOORD_0");
|
|
459
|
+
if (this._deduplicateVertices && !this.deduplicateVertices(mesh))
|
|
460
|
+
return undefined;
|
|
458
461
|
break;
|
|
459
462
|
}
|
|
460
463
|
case Mesh.PrimitiveType.Polyline:
|
|
@@ -481,6 +484,35 @@ export class GltfReader {
|
|
|
481
484
|
}
|
|
482
485
|
return mesh;
|
|
483
486
|
}
|
|
487
|
+
deduplicateVertices(mesh) {
|
|
488
|
+
if (!mesh.points || !mesh.indices)
|
|
489
|
+
return false;
|
|
490
|
+
const numPoints = mesh.indices.length;
|
|
491
|
+
assert(0 === numPoints % 3);
|
|
492
|
+
const indices = mesh.indices;
|
|
493
|
+
if (indices instanceof Uint16Array && numPoints > 0xffff)
|
|
494
|
+
mesh.indices = new Uint32Array(numPoints);
|
|
495
|
+
const points = new Uint16Array(3 * numPoints);
|
|
496
|
+
const normals = mesh.normals ? new Uint16Array(numPoints) : undefined;
|
|
497
|
+
const uvs = mesh.uvs ? new Uint16Array(2 * numPoints) : undefined;
|
|
498
|
+
for (let i = 0; i < numPoints; i++) {
|
|
499
|
+
const index = indices[i];
|
|
500
|
+
mesh.indices[i] = i;
|
|
501
|
+
points[i * 3 + 0] = mesh.points[index * 3 + 0];
|
|
502
|
+
points[i * 3 + 1] = mesh.points[index * 3 + 1];
|
|
503
|
+
points[i * 3 + 2] = mesh.points[index * 3 + 2];
|
|
504
|
+
if (normals)
|
|
505
|
+
normals[i] = mesh.normals[index];
|
|
506
|
+
if (uvs) {
|
|
507
|
+
uvs[i * 2 + 0] = mesh.uvs[index * 2 + 0];
|
|
508
|
+
uvs[i * 2 + 1] = mesh.uvs[index * 2 + 1];
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
mesh.points = points;
|
|
512
|
+
mesh.normals = normals;
|
|
513
|
+
mesh.uvs = uvs;
|
|
514
|
+
return true;
|
|
515
|
+
}
|
|
484
516
|
/**
|
|
485
517
|
*
|
|
486
518
|
* @param positions quantized points
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GltfReader.js","sourceRoot":"","sources":["../../../src/tile/GltfReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, ByteStream, Id64String, JsonUtils, utf8ToString } from \"@itwin/core-bentley\";\r\nimport { Angle, Matrix3d, Point2d, Point3d, Range2d, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n BatchType, ColorDef, ElementAlignedBox3d, FeatureTable, FillFlags, GltfBufferData, GltfBufferView, GltfDataType, GltfHeader, GltfMeshMode,\r\n ImageSource, ImageSourceFormat, LinePixels, MeshEdge, MeshEdges, MeshPolyline, MeshPolylineList, OctEncodedNormal, PackedFeatureTable, QParams2d, QParams3d, QPoint2dList, QPoint3dList,\r\n Quantization,\r\n RenderTexture, TextureMapping, TileReadStatus,\r\n} from \"@itwin/core-common\";\r\nimport { getImageSourceFormatForMimeType, imageElementFromImageSource } from \"../ImageUtil\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { GraphicBranch } from \"../render/GraphicBranch\";\r\nimport { InstancedGraphicParams } from \"../render/InstancedGraphicParams\";\r\nimport { DisplayParams } from \"../render/primitives/DisplayParams\";\r\nimport { Mesh, MeshGraphicArgs } from \"../render/primitives/mesh/MeshPrimitives\";\r\nimport { RealityMeshPrimitive } from \"../render/primitives/mesh/RealityMeshPrimitive\";\r\nimport { RenderGraphic } from \"../render/RenderGraphic\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport { TextureTransparency } from \"../render/RenderTexture\";\r\nimport { TileContent } from \"./internal\";\r\n\r\n// eslint-disable-next-line prefer-const\r\nlet forceLUT = false;\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/* -----------------------------------\r\n * To restore the use of web workers to decode jpeg, locate and uncomment the three sections by searching for \"webworker\".\r\n import { WorkerOperation, WebWorkerManager } from \"../WebWorkerManager\";\r\n ------------------------------------ */\r\n\r\n/** The result of [[GltfReader.read]].\r\n * @internal\r\n */\r\nexport interface GltfReaderResult extends TileContent {\r\n readStatus: TileReadStatus;\r\n}\r\n\r\n/** Data required for creating a [[GltfReader]] capable of deserializing [glTF](https://www.khronos.org/gltf/).\r\n * @internal\r\n */\r\nexport class GltfReaderProps {\r\n private constructor(public readonly buffer: ByteStream,\r\n public readonly binaryData: Uint8Array,\r\n public readonly accessors: any,\r\n public readonly bufferViews: any,\r\n public readonly scene: any,\r\n public readonly nodes: any,\r\n public readonly meshes: any,\r\n public readonly materials: any,\r\n public readonly extensions: any,\r\n public readonly samplers: any,\r\n public readonly techniques: any,\r\n public readonly yAxisUp: boolean) { }\r\n\r\n /** Attempt to construct a new GltfReaderProps from the binary data beginning at the supplied stream's current read position. */\r\n public static create(buffer: ByteStream, yAxisUp: boolean = false): GltfReaderProps | undefined {\r\n const header = new GltfHeader(buffer);\r\n if (!header.isValid)\r\n return undefined;\r\n\r\n const binaryData = new Uint8Array(buffer.arrayBuffer, header.binaryPosition);\r\n buffer.curPos = header.scenePosition;\r\n const sceneStrData = buffer.nextBytes(header.sceneStrLength);\r\n const sceneStr = utf8ToString(sceneStrData);\r\n if (undefined === sceneStr)\r\n return undefined;\r\n\r\n try {\r\n const sceneValue = JSON.parse(sceneStr);\r\n const nodes = JsonUtils.asObject(sceneValue.nodes);\r\n const meshes = JsonUtils.asObject(sceneValue.meshes);\r\n const materialValues = JsonUtils.asObject(sceneValue.materials);\r\n const accessors = JsonUtils.asObject(sceneValue.accessors);\r\n const bufferViews = JsonUtils.asObject(sceneValue.bufferViews);\r\n const extensions = JsonUtils.asObject(sceneValue.extensions);\r\n const samplers = JsonUtils.asObject(sceneValue.samplers);\r\n const techniques = JsonUtils.asObject(sceneValue.techniques);\r\n\r\n if (undefined === meshes)\r\n return undefined;\r\n\r\n return new GltfReaderProps(buffer, binaryData, accessors, bufferViews, sceneValue, nodes, meshes, materialValues, extensions, samplers, techniques, yAxisUp);\r\n } catch (e) {\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\n/** The GltfMeshData contains the raw GLTF mesh data. If the data is suitable to create a [[RealityMesh]] directly, basically in the quantized format produced by\r\n * ContextCapture, then a RealityMesh is created directly from this data. Otherwise, the mesh primitive is populated from the raw data and a MeshPrimitive\r\n * is generated. The MeshPrimitve path is much less efficient but should be rarely used.\r\n *\r\n * @internal\r\n */\r\nexport class GltfMeshData {\r\n public primitive: Mesh; // Populated with vertex and indices only if the mesh cannot be represented as [[RealityMesh]]\r\n public pointQParams?: QParams3d;\r\n public points?: Uint16Array;\r\n public pointRange?: Range3d;\r\n public normals?: Uint16Array;\r\n public uvQParams?: QParams2d;\r\n public uvs?: Uint16Array;\r\n public uvRange?: Range2d;\r\n public indices?: Uint16Array | Uint32Array;\r\n\r\n public constructor(props: Mesh) {\r\n this.primitive = props;\r\n }\r\n}\r\n\r\n/** A function that returns true if deserialization of the data supplied by the reader should abort.\r\n * @internal\r\n */\r\nexport type ShouldAbortReadGltf = (reader: GltfReader) => boolean;\r\n\r\n/* -----------------------------------\r\n This is part of the webworker option.\r\n\r\n // input is Uint8Array, the result is an ImageBitMap.\r\n class ImageDecodeWorkerOperation extends WorkerOperation {\r\n constructor(imageBytes: ArrayBuffer, imageMimeType: string) {\r\n super(\"imageBytesToImageBitmap\", [imageBytes, imageMimeType], [imageBytes]);\r\n }\r\n }\r\n-------------------------------------- */\r\n\r\n/** Deserializes [glTF](https://www.khronos.org/gltf/).\r\n * @internal\r\n */\r\nexport abstract class GltfReader {\r\n protected readonly _buffer: ByteStream;\r\n protected readonly _scene: any;\r\n protected readonly _accessors: any;\r\n protected readonly _bufferViews: any;\r\n protected readonly _meshes: any;\r\n protected readonly _nodes: any;\r\n protected readonly _batchData: any;\r\n protected readonly _materialValues: any;\r\n protected readonly _textures: any;\r\n protected readonly _renderMaterials: any; // Materials that may be deserialized and created directly\r\n protected readonly _namedTextures: any; // Textures that may be deserialized and created directly\r\n protected readonly _images: any;\r\n protected readonly _samplers: any;\r\n protected readonly _techniques: any;\r\n protected readonly _extensions: any;\r\n protected readonly _binaryData: Uint8Array;\r\n protected readonly _iModel: IModelConnection;\r\n protected readonly _is3d: boolean;\r\n protected readonly _modelId: Id64String;\r\n protected readonly _system: RenderSystem;\r\n protected readonly _returnToCenter: number[] | undefined;\r\n protected readonly _yAxisUp: boolean;\r\n protected readonly _type: BatchType;\r\n private readonly _canceled?: ShouldAbortReadGltf;\r\n\r\n /* -----------------------------------\r\n private static _webWorkerManager: WebWorkerManager;\r\n\r\n private static get webWorkerManager() {\r\n if (!GltfReader._webWorkerManager) {\r\n GltfReader._webWorkerManager = new WebWorkerManager(\"v\" + BUILD_SEMVER + \"/frontend-webworker.js\", 4);\r\n }\r\n return GltfReader._webWorkerManager;\r\n }\r\n ------------------------------------- */\r\n\r\n /** Asynchronously deserialize the tile data and return the result. */\r\n public abstract read(): Promise<GltfReaderResult>;\r\n\r\n protected get _isCanceled(): boolean { return undefined !== this._canceled && this._canceled(this); }\r\n protected get _isVolumeClassifier(): boolean { return BatchType.VolumeClassifier === this._type; }\r\n\r\n protected readGltfAndCreateGraphics(isLeaf: boolean, featureTable: FeatureTable, contentRange: ElementAlignedBox3d, transformToRoot?: Transform, pseudoRtcBias?: Vector3d, instances?: InstancedGraphicParams): GltfReaderResult {\r\n if (this._isCanceled)\r\n return { readStatus: TileReadStatus.Canceled, isLeaf };\r\n\r\n if (this._returnToCenter !== undefined || this._nodes[0]?.matrix !== undefined || (pseudoRtcBias !== undefined && pseudoRtcBias.magnitude() < 1.0E5))\r\n pseudoRtcBias = undefined;\r\n\r\n const childNodes = new Set<string>();\r\n for (const key of Object.keys(this._nodes)) {\r\n const node = this._nodes[key];\r\n if (node.children)\r\n for (const child of node.children)\r\n childNodes.add(child.toString());\r\n }\r\n\r\n const renderGraphicList: RenderGraphic[] = [];\r\n let readStatus: TileReadStatus = TileReadStatus.InvalidTileData;\r\n for (const nodeKey of Object.keys(this._nodes))\r\n if (!childNodes.has(nodeKey))\r\n if (TileReadStatus.Success !== (readStatus = this.readNodeAndCreateGraphics(renderGraphicList, this._nodes[nodeKey], featureTable, undefined, instances, pseudoRtcBias)))\r\n return { readStatus, isLeaf };\r\n\r\n if (0 === renderGraphicList.length)\r\n return { readStatus: TileReadStatus.InvalidTileData, isLeaf };\r\n\r\n let renderGraphic: RenderGraphic | undefined;\r\n if (1 === renderGraphicList.length)\r\n renderGraphic = renderGraphicList[0];\r\n else\r\n renderGraphic = this._system.createGraphicList(renderGraphicList);\r\n\r\n let transform;\r\n let range = contentRange;\r\n if (undefined !== this._returnToCenter || undefined !== pseudoRtcBias || this._yAxisUp || undefined !== transformToRoot) {\r\n if (undefined !== this._returnToCenter)\r\n transform = Transform.createTranslationXYZ(this._returnToCenter[0], this._returnToCenter[1], this._returnToCenter[2]);\r\n else if (undefined !== pseudoRtcBias)\r\n transform = Transform.createTranslationXYZ(pseudoRtcBias.x, pseudoRtcBias.y, pseudoRtcBias.z);\r\n else\r\n transform = Transform.createIdentity();\r\n\r\n if (this._yAxisUp)\r\n transform = transform.multiplyTransformMatrix3d(Matrix3d.createRotationAroundVector(Vector3d.create(1.0, 0.0, 0.0), Angle.createRadians(Angle.piOver2Radians)) as Matrix3d);\r\n if (undefined !== transformToRoot)\r\n transform = transformToRoot.multiplyTransformTransform(transform);\r\n\r\n range = transform.inverse()!.multiplyRange(contentRange);\r\n }\r\n renderGraphic = this._system.createBatch(renderGraphic, PackedFeatureTable.pack(featureTable), range);\r\n if (transform) {\r\n const branch = new GraphicBranch(true);\r\n branch.add(renderGraphic);\r\n renderGraphic = this._system.createBranch(branch, transform);\r\n }\r\n\r\n return {\r\n readStatus,\r\n isLeaf,\r\n contentRange,\r\n graphic: renderGraphic,\r\n };\r\n }\r\n\r\n private graphicFromMeshData(gltfMesh: GltfMeshData, meshGraphicArgs: MeshGraphicArgs, instances?: InstancedGraphicParams) {\r\n if (!gltfMesh.points || !gltfMesh.pointRange) {\r\n assert(false);\r\n return;\r\n }\r\n const realityMeshPrimitive = (forceLUT || instances) ? undefined : RealityMeshPrimitive.createFromGltfMesh(gltfMesh);\r\n if (realityMeshPrimitive) {\r\n const realityMesh = this._system.createRealityMesh(realityMeshPrimitive);\r\n if (realityMesh)\r\n return realityMesh;\r\n }\r\n const mesh = gltfMesh.primitive;\r\n const pointCount = gltfMesh.points.length / 3;\r\n mesh.points.fromTypedArray(gltfMesh.pointRange, gltfMesh.points);\r\n if (mesh.triangles && gltfMesh.indices)\r\n mesh.triangles.addFromTypedArray(gltfMesh.indices);\r\n\r\n if (gltfMesh.uvs && gltfMesh.uvRange && gltfMesh.uvQParams) {\r\n /** This is ugly and inefficient... unnecessary if Mesh stored uvs as QPoint2dList */\r\n for (let i = 0, j = 0; i < pointCount; i++)\r\n mesh.uvParams.push(gltfMesh.uvQParams.unquantize(gltfMesh.uvs[j++], gltfMesh.uvs[j++]));\r\n }\r\n if (gltfMesh.normals)\r\n for (const normal of gltfMesh.normals)\r\n mesh.normals.push(new OctEncodedNormal(normal));\r\n\r\n return mesh.getGraphics(meshGraphicArgs, this._system, instances);\r\n }\r\n\r\n private readNodeAndCreateGraphics(renderGraphicList: RenderGraphic[], node: any, featureTable: FeatureTable, parentTransform: Transform | undefined, instances?: InstancedGraphicParams, pseudoRtcBias?: Vector3d): TileReadStatus {\r\n if (undefined === node)\r\n return TileReadStatus.InvalidTileData;\r\n\r\n let thisTransform = parentTransform;\r\n let thisBias;\r\n if (Array.isArray(node.matrix)) {\r\n const jTrans = node.matrix;\r\n const nodeTransform = Transform.createOriginAndMatrix(Point3d.create(jTrans[12], jTrans[13], jTrans[14]), Matrix3d.createRowValues(jTrans[0], jTrans[4], jTrans[8], jTrans[1], jTrans[5], jTrans[9], jTrans[2], jTrans[6], jTrans[10]));\r\n thisTransform = thisTransform ? thisTransform.multiplyTransformTransform(nodeTransform) : nodeTransform;\r\n }\r\n /**\r\n * This is a workaround for tiles generated by\r\n * context capture which have a large offset from the tileset origin that exceeds the\r\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\r\n * origin and there is no RTC supplied either with the B3DM of the GLTF.\r\n * as the vertices are supplied in a quantized format, applying the RTC bias to\r\n * quantization origin will make these tiles work correctly.\r\n */\r\n if (undefined !== pseudoRtcBias) {\r\n thisBias = (undefined === thisTransform) ? pseudoRtcBias : thisTransform.matrix.multiplyInverse(pseudoRtcBias);\r\n }\r\n const meshKey = node.meshes ? node.meshes : node.mesh;\r\n if (undefined !== meshKey) {\r\n const nodeMesh = this._meshes[meshKey];\r\n if (nodeMesh) {\r\n const meshGraphicArgs = new MeshGraphicArgs();\r\n const meshes = [];\r\n for (const primitive of nodeMesh.primitives) {\r\n const geometry = this.readMeshPrimitive(primitive, featureTable, thisBias);\r\n if (undefined !== geometry)\r\n meshes.push(geometry);\r\n }\r\n\r\n let renderGraphic: RenderGraphic | undefined;\r\n if (0 !== meshes.length) {\r\n if (1 === meshes.length) {\r\n renderGraphic = this.graphicFromMeshData(meshes[0], meshGraphicArgs, instances);\r\n } else {\r\n const thisList: RenderGraphic[] = [];\r\n for (const mesh of meshes) {\r\n renderGraphic = this.graphicFromMeshData(mesh, meshGraphicArgs, instances);\r\n if (undefined !== renderGraphic)\r\n thisList.push(renderGraphic);\r\n }\r\n if (0 !== thisList.length)\r\n renderGraphic = this._system.createGraphicList(thisList);\r\n }\r\n if (renderGraphic) {\r\n if (thisTransform && !thisTransform.isIdentity) {\r\n const branch = new GraphicBranch(true);\r\n branch.add(renderGraphic);\r\n renderGraphic = this._system.createBranch(branch, thisTransform);\r\n }\r\n renderGraphicList.push(renderGraphic);\r\n }\r\n }\r\n }\r\n }\r\n if (node.children) {\r\n for (const child of node.children)\r\n this.readNodeAndCreateGraphics(renderGraphicList, this._nodes[child], featureTable, thisTransform, instances);\r\n }\r\n return TileReadStatus.Success;\r\n }\r\n\r\n public getBufferView(json: any, accessorName: string): GltfBufferView | undefined {\r\n try {\r\n const accessorValue = JsonUtils.asString(json[accessorName]);\r\n const accessor = 0 < accessorValue.length ? JsonUtils.asObject(this._accessors[accessorValue]) : undefined;\r\n const bufferViewAccessorValue = undefined !== accessor ? JsonUtils.asString(accessor.bufferView) : \"\";\r\n const bufferView = 0 < bufferViewAccessorValue.length ? JsonUtils.asObject(this._bufferViews[bufferViewAccessorValue]) : undefined;\r\n\r\n if (undefined === accessor)\r\n return undefined;\r\n\r\n const type = accessor.componentType as GltfDataType;\r\n let dataSize = 0;\r\n switch (type) {\r\n case GltfDataType.UnsignedByte:\r\n dataSize = 1;\r\n break;\r\n case GltfDataType.UnsignedShort:\r\n dataSize = 2;\r\n break;\r\n case GltfDataType.UInt32:\r\n case GltfDataType.Float:\r\n dataSize = 4;\r\n break;\r\n default:\r\n return undefined;\r\n }\r\n let componentCount = 1;\r\n switch (accessor.type) {\r\n case \"VEC3\":\r\n componentCount = 3;\r\n break;\r\n case \"VEC2\":\r\n componentCount = 2;\r\n break;\r\n }\r\n\r\n const byteStride = bufferView.byteStride ? bufferView.byteStride : componentCount * dataSize;\r\n const offset = ((bufferView && bufferView.byteOffset) ? bufferView.byteOffset : 0) + (accessor.byteOffset ? accessor.byteOffset : 0);\r\n const length = byteStride * accessor.count;\r\n // If the data is misaligned (Scalable mesh tile publisher) use slice to copy -- else use subarray.\r\n // assert(0 === offset % dataSize);\r\n const bytes = (0 === (this._binaryData.byteOffset + offset) % dataSize) ? this._binaryData.subarray(offset, offset + length) : this._binaryData.slice(offset, offset + length);\r\n return new GltfBufferView(bytes, accessor.count as number, type, accessor, byteStride / dataSize);\r\n } catch (e) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public readBufferData32(json: any, accessorName: string): GltfBufferData | undefined { return this.readBufferData(json, accessorName, GltfDataType.UInt32); }\r\n public readBufferData16(json: any, accessorName: string): GltfBufferData | undefined { return this.readBufferData(json, accessorName, GltfDataType.UnsignedShort); }\r\n public readBufferData8(json: any, accessorName: string): GltfBufferData | undefined { return this.readBufferData(json, accessorName, GltfDataType.UnsignedByte); }\r\n public readBufferDataFloat(json: any, accessorName: string): GltfBufferData | undefined { return this.readBufferData(json, accessorName, GltfDataType.Float); }\r\n\r\n protected constructor(props: GltfReaderProps, iModel: IModelConnection, modelId: Id64String, is3d: boolean, system: RenderSystem, type: BatchType = BatchType.Primary, isCanceled?: ShouldAbortReadGltf) {\r\n this._buffer = props.buffer;\r\n this._scene = props.scene;\r\n this._binaryData = props.binaryData;\r\n this._accessors = props.accessors;\r\n this._bufferViews = props.bufferViews;\r\n this._meshes = props.meshes;\r\n this._nodes = props.nodes;\r\n this._materialValues = props.materials;\r\n this._samplers = props.samplers;\r\n this._techniques = props.techniques;\r\n this._extensions = props.extensions;\r\n this._yAxisUp = props.yAxisUp;\r\n this._returnToCenter = this.extractReturnToCenter(props.extensions);\r\n this._textures = props.scene.textures;\r\n this._images = props.scene.images;\r\n\r\n this._renderMaterials = props.scene.renderMaterials;\r\n this._namedTextures = props.scene.namedTextures;\r\n\r\n this._iModel = iModel;\r\n this._modelId = modelId;\r\n this._is3d = is3d;\r\n this._system = system;\r\n this._type = type;\r\n this._canceled = isCanceled;\r\n }\r\n\r\n protected readBufferData(json: any, accessorName: string, type: GltfDataType): GltfBufferData | undefined {\r\n const view = this.getBufferView(json, accessorName);\r\n return undefined !== view ? view.toBufferData(type) : undefined;\r\n }\r\n\r\n protected readFeatureIndices(_json: any): number[] | undefined { return undefined; }\r\n\r\n private colorFromJson(values: number[]): ColorDef { return ColorDef.from(values[0] * 255, values[1] * 255, values[2] * 255, (1.0 - values[3]) * 255); }\r\n\r\n private colorFromMaterial(materialJson: any): ColorDef {\r\n if (materialJson) {\r\n if (materialJson.values && Array.isArray(materialJson.values.color))\r\n return this.colorFromJson(materialJson.values.color);\r\n else if (materialJson.pbrMetallicRoughness && Array.isArray(materialJson.pbrMetallicRoughness.baseColorFactor))\r\n return this.colorFromJson(materialJson.pbrMetallicRoughness.baseColorFactor);\r\n else if (materialJson.extensions && materialJson.extensions.KHR_techniques_webgl && materialJson.extensions.KHR_techniques_webgl.values && materialJson.extensions.KHR_techniques_webgl.values.u_color)\r\n return this.colorFromJson(materialJson.extensions.KHR_techniques_webgl.values.u_color);\r\n }\r\n\r\n return ColorDef.white;\r\n }\r\n\r\n private extractTextureId(materialJson: any): string | undefined {\r\n if (typeof materialJson !== \"object\")\r\n return undefined;\r\n\r\n const extractId = (value: any) => {\r\n switch (typeof value) {\r\n case \"string\":\r\n return value;\r\n case \"number\":\r\n return value.toString();\r\n default:\r\n return undefined;\r\n }\r\n };\r\n\r\n // Bimium's shader value...almost certainly obsolete at this point.\r\n let id = extractId(materialJson.values?.tex);\r\n if (undefined !== id)\r\n return id;\r\n\r\n // KHR_techniques_webgl extension\r\n const techniques = this._extensions?.KHR_techniques_webgl?.techniques;\r\n const ext = Array.isArray(techniques) ? materialJson.extensions?.KHR_techniques_webgl : undefined;\r\n if (undefined !== ext && typeof ext.values === \"object\") {\r\n const uniforms = typeof ext.technique === \"number\" ? techniques[ext.technique].uniforms : undefined;\r\n if (typeof uniforms === \"object\") {\r\n for (const uniformName of Object.keys(uniforms)) {\r\n const uniform = uniforms[uniformName];\r\n if (typeof uniform === \"object\" && uniform.type === GltfDataType.Sampler2d)\r\n return extractId(ext.values[uniformName]?.index);\r\n }\r\n }\r\n }\r\n\r\n id = extractId(materialJson.diffuseTexture?.index);\r\n id = id ?? extractId(materialJson.emissiveTexture?.index);\r\n return id ?? extractId(materialJson.pbrMetallicRoughness?.baseColorTexture?.index);\r\n }\r\n\r\n protected createDisplayParams(materialJson: any, hasBakedLighting: boolean): DisplayParams | undefined {\r\n const textureId = this.extractTextureId(materialJson);\r\n const textureMapping = undefined !== textureId ? this.findTextureMapping(textureId) : undefined;\r\n const color = this.colorFromMaterial(materialJson);\r\n return new DisplayParams(DisplayParams.Type.Mesh, color, color, 1, LinePixels.Solid, FillFlags.Always, undefined, undefined, hasBakedLighting, textureMapping);\r\n }\r\n protected extractReturnToCenter(extensions: any): number[] | undefined {\r\n if (extensions === undefined) { return undefined; }\r\n const cesiumRtc = JsonUtils.asObject(extensions.CESIUM_RTC);\r\n if (cesiumRtc === undefined) return undefined;\r\n const rtc = JsonUtils.asArray(cesiumRtc.center);\r\n return (rtc[0] === 0.0 && rtc[1] === 0.0 && rtc[2] === 0.0) ? undefined : rtc;\r\n }\r\n\r\n protected readMeshPrimitive(primitive: any, featureTable?: FeatureTable, pseudoRtcBias?: Vector3d): GltfMeshData | undefined {\r\n const materialName = JsonUtils.asString(primitive.material);\r\n const hasBakedLighting = undefined === primitive.attributes.NORMAL;\r\n const materialValue = 0 < materialName.length ? JsonUtils.asObject(this._materialValues[materialName]) : undefined;\r\n const displayParams = this.createDisplayParams(materialValue, hasBakedLighting);\r\n if (undefined === displayParams)\r\n return undefined;\r\n\r\n let primitiveType: number = -1;\r\n const meshMode = JsonUtils.asInt(primitive.mode, GltfMeshMode.Triangles);\r\n switch (meshMode) {\r\n case GltfMeshMode.Lines:\r\n primitiveType = Mesh.PrimitiveType.Polyline;\r\n break;\r\n\r\n case GltfMeshMode.Points:\r\n primitiveType = Mesh.PrimitiveType.Point;\r\n break;\r\n\r\n case GltfMeshMode.Triangles:\r\n primitiveType = Mesh.PrimitiveType.Mesh;\r\n break;\r\n\r\n default:\r\n assert(false);\r\n return undefined;\r\n }\r\n const isPlanar = JsonUtils.asBool(primitive.isPlanar);\r\n\r\n const isVolumeClassifier = this._isVolumeClassifier;\r\n const meshPrimitive = Mesh.create({\r\n displayParams,\r\n features: undefined !== featureTable ? new Mesh.Features(featureTable) : undefined,\r\n type: primitiveType,\r\n range: Range3d.createNull(),\r\n is2d: !this._is3d,\r\n isPlanar,\r\n hasBakedLighting,\r\n isVolumeClassifier,\r\n });\r\n const mesh = new GltfMeshData(meshPrimitive);\r\n\r\n // We don't have real colormap - just load material color. This will be used if non-Bentley\r\n // tile or fit the color table is uniform. For a non-Bentley, non-Uniform, we'll set the\r\n // uv parameters to pick the colors out of the color map texture.\r\n meshPrimitive.colorMap.insert(displayParams.fillColor.tbgr); // White...\r\n\r\n const colorIndices = this.readBufferData16(primitive.attributes, \"_COLORINDEX\");\r\n if (undefined !== colorIndices) {\r\n let texStep;\r\n if (materialValue.values !== undefined && Array.isArray(materialValue.values.texStep))\r\n texStep = materialValue.values.texStep;\r\n else if (materialValue.extensions && materialValue.extensions.KHR_techniques_webgl && materialValue.extensions.KHR_techniques_webgl.values && Array.isArray(materialValue.extensions.KHR_techniques_webgl.values.u_texStep))\r\n texStep = materialValue.extensions.KHR_techniques_webgl.values.u_texStep;\r\n\r\n if (texStep) {\r\n const uvParams = [];\r\n for (let i = 0; i < colorIndices.count; i++)\r\n uvParams.push(new Point2d(texStep[1] + texStep[0] * colorIndices.buffer[i], .5));\r\n\r\n const paramList = QPoint2dList.fromPoints(uvParams);\r\n mesh.uvs = paramList.toTypedArray();\r\n mesh.uvQParams = paramList.params;\r\n }\r\n }\r\n\r\n if (primitive.extensions?.KHR_draco_mesh_compression) {\r\n return undefined; // Defer Draco decompression until web workers implementation.\r\n /*\r\n const dracoExtension = primitive.extensions.KHR_draco_mesh_compression;\r\n const bufferView = this._bufferViews[dracoExtension.bufferView];\r\n if (undefined === bufferView) return undefined;\r\n const bufferData = this._binaryData.subarray(bufferView.byteOffset, bufferView.byteOffset + bufferView.byteLength);\r\n\r\n return DracoDecoder.readDracoMesh(mesh, primitive, bufferData, dracoExtension.attributes); */\r\n }\r\n\r\n this.readBatchTable(mesh.primitive, primitive);\r\n\r\n if (!this.readVertices(mesh, primitive, pseudoRtcBias))\r\n return undefined;\r\n\r\n switch (primitiveType) {\r\n case Mesh.PrimitiveType.Mesh: {\r\n if (!this.readMeshIndices(mesh, primitive))\r\n return undefined;\r\n\r\n if (!displayParams.ignoreLighting && !this.readNormals(mesh, primitive.attributes, \"NORMAL\"))\r\n return undefined;\r\n\r\n if (!mesh.uvs)\r\n this.readUVParams(mesh, primitive.attributes, \"TEXCOORD_0\");\r\n break;\r\n }\r\n\r\n case Mesh.PrimitiveType.Polyline:\r\n case Mesh.PrimitiveType.Point: {\r\n if (undefined !== mesh.primitive.polylines && !this.readPolylines(mesh.primitive.polylines, primitive, \"indices\", Mesh.PrimitiveType.Point === primitiveType))\r\n return undefined;\r\n break;\r\n }\r\n default: {\r\n assert(false, \"unhandled primitive type\");\r\n return undefined;\r\n }\r\n }\r\n if (displayParams.textureMapping && !mesh.uvs)\r\n return undefined;\r\n\r\n if (primitive.extensions?.CESIUM_primitive_outline) {\r\n const data = this.readBufferData32(primitive.extensions.CESIUM_primitive_outline, \"indices\");\r\n if (data !== undefined) {\r\n assert(0 === data.count % 2);\r\n mesh.primitive.edges = new MeshEdges();\r\n for (let i = 0; i < data.count;)\r\n mesh.primitive.edges.visible.push(new MeshEdge(data.buffer[i++], data.buffer[i++]));\r\n }\r\n }\r\n\r\n return mesh;\r\n }\r\n\r\n /**\r\n *\r\n * @param positions quantized points\r\n * @param primitive input json\r\n * @param pseudoRtcBias a bias applied to each point - this is a workaround for tiles generated by\r\n * context capture which have a large offset from the tileset origin that exceeds the\r\n * capacity of 32 bit integers. This is essentially an ad hoc RTC applied at read time.\r\n */\r\n private readVertices(mesh: GltfMeshData, primitive: any, pseudoRtcBias?: Vector3d): boolean {\r\n const view = this.getBufferView(primitive.attributes, \"POSITION\");\r\n if (undefined === view)\r\n return false;\r\n\r\n if (GltfDataType.Float === view.type) {\r\n const buffer = view.toBufferData(GltfDataType.Float);\r\n if (undefined === buffer)\r\n return false;\r\n\r\n const strideSkip = view.stride - 3;\r\n mesh.pointRange = Range3d.createNull();\r\n for (let i = 0; i < buffer.buffer.length; i += strideSkip)\r\n mesh.pointRange.extendXYZ(buffer.buffer[i++], buffer.buffer[i++], buffer.buffer[i++]);\r\n\r\n const positions = new QPoint3dList(QParams3d.fromRange(mesh.pointRange));\r\n const scratchPoint = new Point3d();\r\n for (let i = 0, j = 0; i < buffer.count; i++, j += strideSkip) {\r\n scratchPoint.set(buffer.buffer[j++], buffer.buffer[j++], buffer.buffer[j++]);\r\n if (undefined !== pseudoRtcBias)\r\n scratchPoint.subtractInPlace(pseudoRtcBias);\r\n\r\n positions.add(scratchPoint);\r\n }\r\n mesh.pointQParams = positions.params;\r\n mesh.points = positions.toTypedArray();\r\n } else {\r\n if (GltfDataType.UnsignedShort !== view.type)\r\n return false;\r\n\r\n const extensions = JsonUtils.asObject(view.accessor.extensions);\r\n const quantized = undefined !== extensions ? JsonUtils.asObject(extensions.WEB3D_quantized_attributes) : undefined;\r\n if (undefined === quantized)\r\n return false;\r\n\r\n const rangeMin = JsonUtils.asArray(quantized.decodedMin);\r\n const rangeMax = JsonUtils.asArray(quantized.decodedMax);\r\n if (undefined === rangeMin || undefined === rangeMax)\r\n return false;\r\n\r\n const buffer = view.toBufferData(GltfDataType.UnsignedShort);\r\n if (undefined === buffer || !(buffer.buffer instanceof Uint16Array))\r\n return false;\r\n\r\n assert(buffer.buffer instanceof Uint16Array);\r\n mesh.pointRange = Range3d.createXYZXYZ(rangeMin[0], rangeMin[1], rangeMin[2], rangeMax[0], rangeMax[1], rangeMax[2]);\r\n if (undefined !== pseudoRtcBias) {\r\n mesh.pointRange.low.subtractInPlace(pseudoRtcBias);\r\n mesh.pointRange.high.subtractInPlace(pseudoRtcBias);\r\n }\r\n mesh.pointQParams = QParams3d.fromRange(mesh.pointRange);\r\n if (3 === view.stride) {\r\n mesh.points = buffer.buffer;\r\n } else {\r\n mesh.points = new Uint16Array(3 * view.count);\r\n for (let i = 0, j = 0; i < view.count; i++) {\r\n const index = i * view.stride;\r\n mesh.points[j++] = buffer.buffer[index];\r\n mesh.points[j++] = buffer.buffer[index + 1];\r\n mesh.points[j++] = buffer.buffer[index + 2];\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected readIndices(json: any, accessorName: string): number[] | undefined {\r\n const data = this.readBufferData32(json, accessorName);\r\n if (undefined === data)\r\n return undefined;\r\n\r\n const indices = [];\r\n for (let i = 0; i < data.count; i++)\r\n indices.push(data.buffer[i]);\r\n\r\n return indices;\r\n }\r\n\r\n protected readBatchTable(_mesh: Mesh, _json: any) {\r\n }\r\n\r\n protected readMeshIndices(mesh: GltfMeshData, json: any): boolean {\r\n const data = this.readBufferData16(json, \"indices\") || this.readBufferData32(json, \"indices\");\r\n if (undefined === data || (!(data.buffer instanceof (Uint16Array)) && !(data.buffer instanceof (Uint32Array))))\r\n return false;\r\n\r\n mesh.indices = data.buffer;\r\n\r\n return true;\r\n }\r\n\r\n protected readNormals(mesh: GltfMeshData, json: any, accessorName: string): boolean {\r\n const view = this.getBufferView(json, accessorName);\r\n if (undefined === view)\r\n return false;\r\n\r\n switch (view.type) {\r\n case GltfDataType.Float: {\r\n const data = view.toBufferData(GltfDataType.Float);\r\n if (undefined === data)\r\n return false;\r\n\r\n mesh.normals = new Uint16Array(data.count);\r\n const scratchNormal = new Vector3d();\r\n const strideSkip = view.stride - 3;\r\n for (let i = 0, j = 0; i < data.count; i++, j += strideSkip) {\r\n scratchNormal.set(data.buffer[j++], data.buffer[j++], data.buffer[j++]);\r\n mesh.normals[i] = OctEncodedNormal.encode(scratchNormal);\r\n }\r\n return true;\r\n }\r\n\r\n case GltfDataType.UnsignedByte: {\r\n const data = view.toBufferData(GltfDataType.UnsignedByte);\r\n if (undefined === data)\r\n return false;\r\n\r\n // ###TODO: we shouldn't have to allocate OctEncodedNormal objects...just use uint16s / numbers...\r\n mesh.normals = new Uint16Array(data.count);\r\n for (let i = 0; i < data.count; i++) {\r\n // ###TODO? not clear why ray writes these as pairs of uint8...\r\n const index = i * view.stride;\r\n const normal = data.buffer[index] | (data.buffer[index + 1] << 8);\r\n mesh.normals[i] = normal;\r\n }\r\n return true;\r\n }\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private readUVParams(mesh: GltfMeshData, json: any, accessorName: string): boolean {\r\n const view = this.getBufferView(json, accessorName);\r\n let data: any;\r\n\r\n if (view === undefined)\r\n return false;\r\n\r\n switch (view.type) {\r\n case GltfDataType.Float: {\r\n data = this.readBufferDataFloat(json, accessorName);\r\n mesh.uvRange = Range2d.createNull();\r\n\r\n for (let i = 0; i < data.count; i++) {\r\n const index = view.stride * i; // 2 float per param...\r\n mesh.uvRange.extendXY(data.buffer[index], data.buffer[index + 1]);\r\n }\r\n mesh.uvQParams = QParams2d.fromRange(mesh.uvRange);\r\n mesh.uvs = new Uint16Array(data.count * 2);\r\n for (let i = 0, j = 0; i < data.count; i++) {\r\n const index = view.stride * i; // 2 float per param...\r\n mesh.uvs[j++] = Quantization.quantize(data.buffer[index], mesh.uvQParams.origin.x, mesh.uvQParams.scale.x);\r\n mesh.uvs[j++] = Quantization.quantize(data.buffer[index + 1], mesh.uvQParams.origin.y, mesh.uvQParams.scale.y);\r\n }\r\n return true;\r\n }\r\n\r\n case GltfDataType.UnsignedShort: {\r\n const extensions = JsonUtils.asObject(view.accessor.extensions);\r\n const quantized = undefined !== extensions ? JsonUtils.asObject(extensions.WEB3D_quantized_attributes) : undefined;\r\n if (undefined === quantized)\r\n return false;\r\n\r\n const rangeMin = JsonUtils.asArray(quantized.decodedMin);\r\n const rangeMax = JsonUtils.asArray(quantized.decodedMax);\r\n if (undefined === rangeMin || undefined === rangeMax)\r\n return false;\r\n\r\n const qData = view.toBufferData(GltfDataType.UnsignedShort);\r\n if (undefined === qData || !(qData.buffer instanceof Uint16Array))\r\n return false;\r\n\r\n mesh.uvRange = Range2d.createXYXY(rangeMin[0], rangeMin[1], rangeMax[0], rangeMax[1]);\r\n mesh.uvQParams = QParams2d.fromRange(mesh.uvRange);\r\n if (2 === view.stride) {\r\n mesh.uvs = qData.buffer;\r\n } else {\r\n mesh.uvs = new Uint16Array(2 * view.count);\r\n for (let i = 0, j = 0; i < view.count; i++) {\r\n const index = i * view.stride;\r\n mesh.uvs[j++] = qData.buffer[index];\r\n mesh.uvs[j++] = qData.buffer[index + 1];\r\n }\r\n }\r\n return true;\r\n }\r\n default:\r\n assert(false);\r\n return false;\r\n\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected readPolylines(polylines: MeshPolylineList, json: any, accessorName: string, disjoint: boolean): boolean {\r\n const data = this.readBufferData32(json, accessorName);\r\n if (undefined === data)\r\n return false;\r\n\r\n const indices = new Array<number>();\r\n if (disjoint) {\r\n for (let i = 0; i < data.count;)\r\n indices.push(data.buffer[i++]);\r\n } else {\r\n for (let i = 0; i < data.count;) {\r\n const index0 = data.buffer[i++];\r\n const index1 = data.buffer[i++];\r\n if (0 === indices.length || index0 !== indices[indices.length - 1]) {\r\n if (indices.length !== 0) {\r\n polylines.push(new MeshPolyline(indices));\r\n indices.length = 0;\r\n }\r\n indices.push(index0);\r\n }\r\n indices.push(index1);\r\n }\r\n }\r\n if (indices.length !== 0)\r\n polylines.push(new MeshPolyline(indices));\r\n\r\n return true;\r\n }\r\n\r\n protected async loadTextures(): Promise<void> {\r\n if (undefined === this._textures)\r\n return;\r\n\r\n const transparentTextures: Set<string> = new Set<string>();\r\n for (const name of Object.keys(this._materialValues)) {\r\n const materialValue = this._materialValues[name];\r\n let technique;\r\n if (undefined !== materialValue.values &&\r\n undefined !== materialValue.values.tex &&\r\n undefined !== materialValue.technique &&\r\n undefined !== (technique = this._techniques[materialValue.technique]) &&\r\n undefined !== technique.states &&\r\n Array.isArray(technique.states.enable)) {\r\n for (const enable of technique.states.enable)\r\n if (enable === 3042)\r\n transparentTextures.add(materialValue.values.tex);\r\n }\r\n }\r\n\r\n const promises = new Array<Promise<void>>();\r\n for (const name of Object.keys(this._textures))\r\n promises.push(this.loadTexture(name, transparentTextures.has(name)));\r\n\r\n if (promises.length > 0)\r\n await Promise.all(promises);\r\n }\r\n\r\n protected async loadTextureImage(imageJson: any, samplerJson: any, isTransparent: boolean): Promise<RenderTexture | undefined> {\r\n try {\r\n const binaryImageJson = (imageJson.extensions && imageJson.extensions.KHR_binary_glTF) ? JsonUtils.asObject(imageJson.extensions.KHR_binary_glTF) : imageJson;\r\n const bufferView = this._bufferViews[binaryImageJson.bufferView];\r\n const mimeType = JsonUtils.asString(binaryImageJson.mimeType);\r\n const format = getImageSourceFormatForMimeType(mimeType);\r\n if (undefined === format)\r\n return undefined;\r\n\r\n let textureType = RenderTexture.Type.Normal;\r\n if (undefined !== samplerJson &&\r\n (undefined !== samplerJson.wrapS || undefined !== samplerJson.wrapT))\r\n textureType = RenderTexture.Type.TileSection;\r\n\r\n const offset = bufferView.byteOffset;\r\n\r\n /* -----------------------------------\r\n const jpegArray = this._binaryData.slice(offset, offset + bufferView.byteLength);\r\n const jpegArrayBuffer = jpegArray.buffer;\r\n const workerOp = new ImageDecodeWorkerOperation(jpegArrayBuffer, mimeType);\r\n try {\r\n const imageBitmap = await GltfReader.webWorkerManager.queueOperation(workerOp)\r\n return this._isCanceled ? undefined : this._system.createTextureFromImage(imageBitmap, isTransparent && ImageSourceFormat.Png === format, this._iModel, textureParams))\r\n } catch {\r\n return undefined;\r\n }\r\n ------------------------------------- */\r\n\r\n const bytes = this._binaryData.subarray(offset, offset + bufferView.byteLength);\r\n const imageSource = new ImageSource(bytes, format);\r\n try {\r\n const image = await imageElementFromImageSource(imageSource);\r\n if (this._isCanceled)\r\n return undefined;\r\n\r\n return this._system.createTexture({\r\n type: textureType,\r\n image: {\r\n source: image,\r\n transparency: isTransparent && ImageSourceFormat.Png === format ? TextureTransparency.Translucent : TextureTransparency.Opaque,\r\n },\r\n });\r\n } catch {\r\n return undefined;\r\n }\r\n } catch (e) {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected async loadTexture(textureId: string, isTransparent: boolean): Promise<void> {\r\n const textureJson = JsonUtils.asObject(this._textures[textureId]);\r\n if (undefined === textureJson)\r\n return;\r\n\r\n const texture = await this.loadTextureImage(this._images[textureJson.source], undefined === this._samplers ? undefined : this._samplers[textureJson.sampler], isTransparent);\r\n textureJson.renderTexture = texture;\r\n }\r\n\r\n protected findTextureMapping(textureId: string): TextureMapping | undefined {\r\n const textureJson = JsonUtils.asObject(this._textures[textureId]);\r\n const texture = undefined !== textureJson ? textureJson.renderTexture as RenderTexture : undefined;\r\n return undefined !== texture ? new TextureMapping(texture, new TextureMapping.Params()) : undefined;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"GltfReader.js","sourceRoot":"","sources":["../../../src/tile/GltfReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, ByteStream, Id64String, JsonUtils, utf8ToString } from \"@itwin/core-bentley\";\r\nimport { Angle, Matrix3d, Point2d, Point3d, Range2d, Range3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport {\r\n BatchType, ColorDef, ElementAlignedBox3d, FeatureTable, FillFlags, GltfBufferData, GltfBufferView, GltfDataType, GltfHeader, GltfMeshMode,\r\n ImageSource, ImageSourceFormat, LinePixels, MeshEdge, MeshEdges, MeshPolyline, MeshPolylineList, OctEncodedNormal, PackedFeatureTable, QParams2d, QParams3d, QPoint2dList, QPoint3dList,\r\n Quantization,\r\n RenderTexture, TextureMapping, TileReadStatus,\r\n} from \"@itwin/core-common\";\r\nimport { getImageSourceFormatForMimeType, imageElementFromImageSource } from \"../ImageUtil\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { GraphicBranch } from \"../render/GraphicBranch\";\r\nimport { InstancedGraphicParams } from \"../render/InstancedGraphicParams\";\r\nimport { DisplayParams } from \"../render/primitives/DisplayParams\";\r\nimport { Mesh, MeshGraphicArgs } from \"../render/primitives/mesh/MeshPrimitives\";\r\nimport { RealityMeshPrimitive } from \"../render/primitives/mesh/RealityMeshPrimitive\";\r\nimport { RenderGraphic } from \"../render/RenderGraphic\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport { TextureTransparency } from \"../render/RenderTexture\";\r\nimport { TileContent } from \"./internal\";\r\n\r\n// eslint-disable-next-line prefer-const\r\nlet forceLUT = false;\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/* -----------------------------------\r\n * To restore the use of web workers to decode jpeg, locate and uncomment the three sections by searching for \"webworker\".\r\n import { WorkerOperation, WebWorkerManager } from \"../WebWorkerManager\";\r\n ------------------------------------ */\r\n\r\n/** The result of [[GltfReader.read]].\r\n * @internal\r\n */\r\nexport interface GltfReaderResult extends TileContent {\r\n readStatus: TileReadStatus;\r\n}\r\n\r\n/** Data required for creating a [[GltfReader]] capable of deserializing [glTF](https://www.khronos.org/gltf/).\r\n * @internal\r\n */\r\nexport class GltfReaderProps {\r\n private constructor(public readonly buffer: ByteStream,\r\n public readonly binaryData: Uint8Array,\r\n public readonly accessors: any,\r\n public readonly bufferViews: any,\r\n public readonly scene: any,\r\n public readonly nodes: any,\r\n public readonly meshes: any,\r\n public readonly materials: any,\r\n public readonly extensions: any,\r\n public readonly samplers: any,\r\n public readonly techniques: any,\r\n public readonly yAxisUp: boolean) { }\r\n\r\n /** Attempt to construct a new GltfReaderProps from the binary data beginning at the supplied stream's current read position. */\r\n public static create(buffer: ByteStream, yAxisUp: boolean = false): GltfReaderProps | undefined {\r\n const header = new GltfHeader(buffer);\r\n if (!header.isValid)\r\n return undefined;\r\n\r\n const binaryData = new Uint8Array(buffer.arrayBuffer, header.binaryPosition);\r\n buffer.curPos = header.scenePosition;\r\n const sceneStrData = buffer.nextBytes(header.sceneStrLength);\r\n const sceneStr = utf8ToString(sceneStrData);\r\n if (undefined === sceneStr)\r\n return undefined;\r\n\r\n try {\r\n const sceneValue = JSON.parse(sceneStr);\r\n const nodes = JsonUtils.asObject(sceneValue.nodes);\r\n const meshes = JsonUtils.asObject(sceneValue.meshes);\r\n const materialValues = JsonUtils.asObject(sceneValue.materials);\r\n const accessors = JsonUtils.asObject(sceneValue.accessors);\r\n const bufferViews = JsonUtils.asObject(sceneValue.bufferViews);\r\n const extensions = JsonUtils.asObject(sceneValue.extensions);\r\n const samplers = JsonUtils.asObject(sceneValue.samplers);\r\n const techniques = JsonUtils.asObject(sceneValue.techniques);\r\n\r\n if (undefined === meshes)\r\n return undefined;\r\n\r\n return new GltfReaderProps(buffer, binaryData, accessors, bufferViews, sceneValue, nodes, meshes, materialValues, extensions, samplers, techniques, yAxisUp);\r\n } catch (e) {\r\n return undefined;\r\n }\r\n }\r\n}\r\n\r\n/** The GltfMeshData contains the raw GLTF mesh data. If the data is suitable to create a [[RealityMesh]] directly, basically in the quantized format produced by\r\n * ContextCapture, then a RealityMesh is created directly from this data. Otherwise, the mesh primitive is populated from the raw data and a MeshPrimitive\r\n * is generated. The MeshPrimitve path is much less efficient but should be rarely used.\r\n *\r\n * @internal\r\n */\r\nexport class GltfMeshData {\r\n public primitive: Mesh; // Populated with vertex and indices only if the mesh cannot be represented as [[RealityMesh]]\r\n public pointQParams?: QParams3d;\r\n public points?: Uint16Array;\r\n public pointRange?: Range3d;\r\n public normals?: Uint16Array;\r\n public uvQParams?: QParams2d;\r\n public uvs?: Uint16Array;\r\n public uvRange?: Range2d;\r\n public indices?: Uint16Array | Uint32Array;\r\n\r\n public constructor(props: Mesh) {\r\n this.primitive = props;\r\n }\r\n}\r\n\r\n/** A function that returns true if deserialization of the data supplied by the reader should abort.\r\n * @internal\r\n */\r\nexport type ShouldAbortReadGltf = (reader: GltfReader) => boolean;\r\n\r\n/* -----------------------------------\r\n This is part of the webworker option.\r\n\r\n // input is Uint8Array, the result is an ImageBitMap.\r\n class ImageDecodeWorkerOperation extends WorkerOperation {\r\n constructor(imageBytes: ArrayBuffer, imageMimeType: string) {\r\n super(\"imageBytesToImageBitmap\", [imageBytes, imageMimeType], [imageBytes]);\r\n }\r\n }\r\n-------------------------------------- */\r\n\r\n/** Deserializes [glTF](https://www.khronos.org/gltf/).\r\n * @internal\r\n */\r\nexport abstract class GltfReader {\r\n protected readonly _buffer: ByteStream;\r\n protected readonly _scene: any;\r\n protected readonly _accessors: any;\r\n protected readonly _bufferViews: any;\r\n protected readonly _meshes: any;\r\n protected readonly _nodes: any;\r\n protected readonly _batchData: any;\r\n protected readonly _materialValues: any;\r\n protected readonly _textures: any;\r\n protected readonly _renderMaterials: any; // Materials that may be deserialized and created directly\r\n protected readonly _namedTextures: any; // Textures that may be deserialized and created directly\r\n protected readonly _images: any;\r\n protected readonly _samplers: any;\r\n protected readonly _techniques: any;\r\n protected readonly _extensions: any;\r\n protected readonly _binaryData: Uint8Array;\r\n protected readonly _iModel: IModelConnection;\r\n protected readonly _is3d: boolean;\r\n protected readonly _modelId: Id64String;\r\n protected readonly _system: RenderSystem;\r\n protected readonly _returnToCenter: number[] | undefined;\r\n protected readonly _yAxisUp: boolean;\r\n protected readonly _type: BatchType;\r\n protected readonly _deduplicateVertices: boolean;\r\n private readonly _canceled?: ShouldAbortReadGltf;\r\n\r\n /* -----------------------------------\r\n private static _webWorkerManager: WebWorkerManager;\r\n\r\n private static get webWorkerManager() {\r\n if (!GltfReader._webWorkerManager) {\r\n GltfReader._webWorkerManager = new WebWorkerManager(\"v\" + BUILD_SEMVER + \"/frontend-webworker.js\", 4);\r\n }\r\n return GltfReader._webWorkerManager;\r\n }\r\n ------------------------------------- */\r\n\r\n /** Asynchronously deserialize the tile data and return the result. */\r\n public abstract read(): Promise<GltfReaderResult>;\r\n\r\n protected get _isCanceled(): boolean { return undefined !== this._canceled && this._canceled(this); }\r\n protected get _isVolumeClassifier(): boolean { return BatchType.VolumeClassifier === this._type; }\r\n\r\n protected readGltfAndCreateGraphics(isLeaf: boolean, featureTable: FeatureTable, contentRange: ElementAlignedBox3d, transformToRoot?: Transform, pseudoRtcBias?: Vector3d, instances?: InstancedGraphicParams): GltfReaderResult {\r\n if (this._isCanceled)\r\n return { readStatus: TileReadStatus.Canceled, isLeaf };\r\n\r\n if (this._returnToCenter !== undefined || this._nodes[0]?.matrix !== undefined || (pseudoRtcBias !== undefined && pseudoRtcBias.magnitude() < 1.0E5))\r\n pseudoRtcBias = undefined;\r\n\r\n const childNodes = new Set<string>();\r\n for (const key of Object.keys(this._nodes)) {\r\n const node = this._nodes[key];\r\n if (node.children)\r\n for (const child of node.children)\r\n childNodes.add(child.toString());\r\n }\r\n\r\n const renderGraphicList: RenderGraphic[] = [];\r\n let readStatus: TileReadStatus = TileReadStatus.InvalidTileData;\r\n for (const nodeKey of Object.keys(this._nodes))\r\n if (!childNodes.has(nodeKey))\r\n if (TileReadStatus.Success !== (readStatus = this.readNodeAndCreateGraphics(renderGraphicList, this._nodes[nodeKey], featureTable, undefined, instances, pseudoRtcBias)))\r\n return { readStatus, isLeaf };\r\n\r\n if (0 === renderGraphicList.length)\r\n return { readStatus: TileReadStatus.InvalidTileData, isLeaf };\r\n\r\n let renderGraphic: RenderGraphic | undefined;\r\n if (1 === renderGraphicList.length)\r\n renderGraphic = renderGraphicList[0];\r\n else\r\n renderGraphic = this._system.createGraphicList(renderGraphicList);\r\n\r\n let transform;\r\n let range = contentRange;\r\n if (undefined !== this._returnToCenter || undefined !== pseudoRtcBias || this._yAxisUp || undefined !== transformToRoot) {\r\n if (undefined !== this._returnToCenter)\r\n transform = Transform.createTranslationXYZ(this._returnToCenter[0], this._returnToCenter[1], this._returnToCenter[2]);\r\n else if (undefined !== pseudoRtcBias)\r\n transform = Transform.createTranslationXYZ(pseudoRtcBias.x, pseudoRtcBias.y, pseudoRtcBias.z);\r\n else\r\n transform = Transform.createIdentity();\r\n\r\n if (this._yAxisUp)\r\n transform = transform.multiplyTransformMatrix3d(Matrix3d.createRotationAroundVector(Vector3d.create(1.0, 0.0, 0.0), Angle.createRadians(Angle.piOver2Radians)) as Matrix3d);\r\n if (undefined !== transformToRoot)\r\n transform = transformToRoot.multiplyTransformTransform(transform);\r\n\r\n range = transform.inverse()!.multiplyRange(contentRange);\r\n }\r\n renderGraphic = this._system.createBatch(renderGraphic, PackedFeatureTable.pack(featureTable), range);\r\n if (transform) {\r\n const branch = new GraphicBranch(true);\r\n branch.add(renderGraphic);\r\n renderGraphic = this._system.createBranch(branch, transform);\r\n }\r\n\r\n return {\r\n readStatus,\r\n isLeaf,\r\n contentRange,\r\n graphic: renderGraphic,\r\n };\r\n }\r\n\r\n private graphicFromMeshData(gltfMesh: GltfMeshData, meshGraphicArgs: MeshGraphicArgs, instances?: InstancedGraphicParams) {\r\n if (!gltfMesh.points || !gltfMesh.pointRange) {\r\n assert(false);\r\n return;\r\n }\r\n const realityMeshPrimitive = (forceLUT || instances) ? undefined : RealityMeshPrimitive.createFromGltfMesh(gltfMesh);\r\n if (realityMeshPrimitive) {\r\n const realityMesh = this._system.createRealityMesh(realityMeshPrimitive);\r\n if (realityMesh)\r\n return realityMesh;\r\n }\r\n const mesh = gltfMesh.primitive;\r\n const pointCount = gltfMesh.points.length / 3;\r\n mesh.points.fromTypedArray(gltfMesh.pointRange, gltfMesh.points);\r\n if (mesh.triangles && gltfMesh.indices)\r\n mesh.triangles.addFromTypedArray(gltfMesh.indices);\r\n\r\n if (gltfMesh.uvs && gltfMesh.uvRange && gltfMesh.uvQParams) {\r\n /** This is ugly and inefficient... unnecessary if Mesh stored uvs as QPoint2dList */\r\n for (let i = 0, j = 0; i < pointCount; i++)\r\n mesh.uvParams.push(gltfMesh.uvQParams.unquantize(gltfMesh.uvs[j++], gltfMesh.uvs[j++]));\r\n }\r\n if (gltfMesh.normals)\r\n for (const normal of gltfMesh.normals)\r\n mesh.normals.push(new OctEncodedNormal(normal));\r\n\r\n return mesh.getGraphics(meshGraphicArgs, this._system, instances);\r\n }\r\n\r\n private readNodeAndCreateGraphics(renderGraphicList: RenderGraphic[], node: any, featureTable: FeatureTable, parentTransform: Transform | undefined, instances?: InstancedGraphicParams, pseudoRtcBias?: Vector3d): TileReadStatus {\r\n if (undefined === node)\r\n return TileReadStatus.InvalidTileData;\r\n\r\n let thisTransform = parentTransform;\r\n let thisBias;\r\n if (Array.isArray(node.matrix)) {\r\n const jTrans = node.matrix;\r\n const nodeTransform = Transform.createOriginAndMatrix(Point3d.create(jTrans[12], jTrans[13], jTrans[14]), Matrix3d.createRowValues(jTrans[0], jTrans[4], jTrans[8], jTrans[1], jTrans[5], jTrans[9], jTrans[2], jTrans[6], jTrans[10]));\r\n thisTransform = thisTransform ? thisTransform.multiplyTransformTransform(nodeTransform) : nodeTransform;\r\n }\r\n /**\r\n * This is a workaround for tiles generated by\r\n * context capture which have a large offset from the tileset origin that exceeds the\r\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\r\n * origin and there is no RTC supplied either with the B3DM of the GLTF.\r\n * as the vertices are supplied in a quantized format, applying the RTC bias to\r\n * quantization origin will make these tiles work correctly.\r\n */\r\n if (undefined !== pseudoRtcBias) {\r\n thisBias = (undefined === thisTransform) ? pseudoRtcBias : thisTransform.matrix.multiplyInverse(pseudoRtcBias);\r\n }\r\n const meshKey = node.meshes ? node.meshes : node.mesh;\r\n if (undefined !== meshKey) {\r\n const nodeMesh = this._meshes[meshKey];\r\n if (nodeMesh) {\r\n const meshGraphicArgs = new MeshGraphicArgs();\r\n const meshes = [];\r\n for (const primitive of nodeMesh.primitives) {\r\n const geometry = this.readMeshPrimitive(primitive, featureTable, thisBias);\r\n if (undefined !== geometry)\r\n meshes.push(geometry);\r\n }\r\n\r\n let renderGraphic: RenderGraphic | undefined;\r\n if (0 !== meshes.length) {\r\n if (1 === meshes.length) {\r\n renderGraphic = this.graphicFromMeshData(meshes[0], meshGraphicArgs, instances);\r\n } else {\r\n const thisList: RenderGraphic[] = [];\r\n for (const mesh of meshes) {\r\n renderGraphic = this.graphicFromMeshData(mesh, meshGraphicArgs, instances);\r\n if (undefined !== renderGraphic)\r\n thisList.push(renderGraphic);\r\n }\r\n if (0 !== thisList.length)\r\n renderGraphic = this._system.createGraphicList(thisList);\r\n }\r\n if (renderGraphic) {\r\n if (thisTransform && !thisTransform.isIdentity) {\r\n const branch = new GraphicBranch(true);\r\n branch.add(renderGraphic);\r\n renderGraphic = this._system.createBranch(branch, thisTransform);\r\n }\r\n renderGraphicList.push(renderGraphic);\r\n }\r\n }\r\n }\r\n }\r\n if (node.children) {\r\n for (const child of node.children)\r\n this.readNodeAndCreateGraphics(renderGraphicList, this._nodes[child], featureTable, thisTransform, instances);\r\n }\r\n return TileReadStatus.Success;\r\n }\r\n\r\n public getBufferView(json: any, accessorName: string): GltfBufferView | undefined {\r\n try {\r\n const accessorValue = JsonUtils.asString(json[accessorName]);\r\n const accessor = 0 < accessorValue.length ? JsonUtils.asObject(this._accessors[accessorValue]) : undefined;\r\n const bufferViewAccessorValue = undefined !== accessor ? JsonUtils.asString(accessor.bufferView) : \"\";\r\n const bufferView = 0 < bufferViewAccessorValue.length ? JsonUtils.asObject(this._bufferViews[bufferViewAccessorValue]) : undefined;\r\n\r\n if (undefined === accessor)\r\n return undefined;\r\n\r\n const type = accessor.componentType as GltfDataType;\r\n let dataSize = 0;\r\n switch (type) {\r\n case GltfDataType.UnsignedByte:\r\n dataSize = 1;\r\n break;\r\n case GltfDataType.UnsignedShort:\r\n dataSize = 2;\r\n break;\r\n case GltfDataType.UInt32:\r\n case GltfDataType.Float:\r\n dataSize = 4;\r\n break;\r\n default:\r\n return undefined;\r\n }\r\n let componentCount = 1;\r\n switch (accessor.type) {\r\n case \"VEC3\":\r\n componentCount = 3;\r\n break;\r\n case \"VEC2\":\r\n componentCount = 2;\r\n break;\r\n }\r\n\r\n const byteStride = bufferView.byteStride ? bufferView.byteStride : componentCount * dataSize;\r\n const offset = ((bufferView && bufferView.byteOffset) ? bufferView.byteOffset : 0) + (accessor.byteOffset ? accessor.byteOffset : 0);\r\n const length = byteStride * accessor.count;\r\n // If the data is misaligned (Scalable mesh tile publisher) use slice to copy -- else use subarray.\r\n // assert(0 === offset % dataSize);\r\n const bytes = (0 === (this._binaryData.byteOffset + offset) % dataSize) ? this._binaryData.subarray(offset, offset + length) : this._binaryData.slice(offset, offset + length);\r\n return new GltfBufferView(bytes, accessor.count as number, type, accessor, byteStride / dataSize);\r\n } catch (e) {\r\n return undefined;\r\n }\r\n }\r\n\r\n public readBufferData32(json: any, accessorName: string): GltfBufferData | undefined { return this.readBufferData(json, accessorName, GltfDataType.UInt32); }\r\n public readBufferData16(json: any, accessorName: string): GltfBufferData | undefined { return this.readBufferData(json, accessorName, GltfDataType.UnsignedShort); }\r\n public readBufferData8(json: any, accessorName: string): GltfBufferData | undefined { return this.readBufferData(json, accessorName, GltfDataType.UnsignedByte); }\r\n public readBufferDataFloat(json: any, accessorName: string): GltfBufferData | undefined { return this.readBufferData(json, accessorName, GltfDataType.Float); }\r\n\r\n protected constructor(props: GltfReaderProps, iModel: IModelConnection, modelId: Id64String, is3d: boolean, system: RenderSystem, type: BatchType = BatchType.Primary, isCanceled?: ShouldAbortReadGltf, deduplicateVertices=false) {\r\n this._buffer = props.buffer;\r\n this._scene = props.scene;\r\n this._binaryData = props.binaryData;\r\n this._accessors = props.accessors;\r\n this._bufferViews = props.bufferViews;\r\n this._meshes = props.meshes;\r\n this._nodes = props.nodes;\r\n this._materialValues = props.materials;\r\n this._samplers = props.samplers;\r\n this._techniques = props.techniques;\r\n this._extensions = props.extensions;\r\n this._yAxisUp = props.yAxisUp;\r\n this._returnToCenter = this.extractReturnToCenter(props.extensions);\r\n this._textures = props.scene.textures;\r\n this._images = props.scene.images;\r\n\r\n this._renderMaterials = props.scene.renderMaterials;\r\n this._namedTextures = props.scene.namedTextures;\r\n\r\n this._iModel = iModel;\r\n this._modelId = modelId;\r\n this._is3d = is3d;\r\n this._system = system;\r\n this._type = type;\r\n this._canceled = isCanceled;\r\n this._deduplicateVertices = deduplicateVertices;\r\n }\r\n\r\n protected readBufferData(json: any, accessorName: string, type: GltfDataType): GltfBufferData | undefined {\r\n const view = this.getBufferView(json, accessorName);\r\n return undefined !== view ? view.toBufferData(type) : undefined;\r\n }\r\n\r\n protected readFeatureIndices(_json: any): number[] | undefined { return undefined; }\r\n\r\n private colorFromJson(values: number[]): ColorDef { return ColorDef.from(values[0] * 255, values[1] * 255, values[2] * 255, (1.0 - values[3]) * 255); }\r\n\r\n private colorFromMaterial(materialJson: any): ColorDef {\r\n if (materialJson) {\r\n if (materialJson.values && Array.isArray(materialJson.values.color))\r\n return this.colorFromJson(materialJson.values.color);\r\n else if (materialJson.pbrMetallicRoughness && Array.isArray(materialJson.pbrMetallicRoughness.baseColorFactor))\r\n return this.colorFromJson(materialJson.pbrMetallicRoughness.baseColorFactor);\r\n else if (materialJson.extensions && materialJson.extensions.KHR_techniques_webgl && materialJson.extensions.KHR_techniques_webgl.values && materialJson.extensions.KHR_techniques_webgl.values.u_color)\r\n return this.colorFromJson(materialJson.extensions.KHR_techniques_webgl.values.u_color);\r\n }\r\n\r\n return ColorDef.white;\r\n }\r\n\r\n private extractTextureId(materialJson: any): string | undefined {\r\n if (typeof materialJson !== \"object\")\r\n return undefined;\r\n\r\n const extractId = (value: any) => {\r\n switch (typeof value) {\r\n case \"string\":\r\n return value;\r\n case \"number\":\r\n return value.toString();\r\n default:\r\n return undefined;\r\n }\r\n };\r\n\r\n // Bimium's shader value...almost certainly obsolete at this point.\r\n let id = extractId(materialJson.values?.tex);\r\n if (undefined !== id)\r\n return id;\r\n\r\n // KHR_techniques_webgl extension\r\n const techniques = this._extensions?.KHR_techniques_webgl?.techniques;\r\n const ext = Array.isArray(techniques) ? materialJson.extensions?.KHR_techniques_webgl : undefined;\r\n if (undefined !== ext && typeof ext.values === \"object\") {\r\n const uniforms = typeof ext.technique === \"number\" ? techniques[ext.technique].uniforms : undefined;\r\n if (typeof uniforms === \"object\") {\r\n for (const uniformName of Object.keys(uniforms)) {\r\n const uniform = uniforms[uniformName];\r\n if (typeof uniform === \"object\" && uniform.type === GltfDataType.Sampler2d)\r\n return extractId(ext.values[uniformName]?.index);\r\n }\r\n }\r\n }\r\n\r\n id = extractId(materialJson.diffuseTexture?.index);\r\n id = id ?? extractId(materialJson.emissiveTexture?.index);\r\n return id ?? extractId(materialJson.pbrMetallicRoughness?.baseColorTexture?.index);\r\n }\r\n\r\n protected createDisplayParams(materialJson: any, hasBakedLighting: boolean): DisplayParams | undefined {\r\n const textureId = this.extractTextureId(materialJson);\r\n const textureMapping = undefined !== textureId ? this.findTextureMapping(textureId) : undefined;\r\n const color = this.colorFromMaterial(materialJson);\r\n return new DisplayParams(DisplayParams.Type.Mesh, color, color, 1, LinePixels.Solid, FillFlags.Always, undefined, undefined, hasBakedLighting, textureMapping);\r\n }\r\n protected extractReturnToCenter(extensions: any): number[] | undefined {\r\n if (extensions === undefined) { return undefined; }\r\n const cesiumRtc = JsonUtils.asObject(extensions.CESIUM_RTC);\r\n if (cesiumRtc === undefined) return undefined;\r\n const rtc = JsonUtils.asArray(cesiumRtc.center);\r\n return (rtc[0] === 0.0 && rtc[1] === 0.0 && rtc[2] === 0.0) ? undefined : rtc;\r\n }\r\n\r\n protected readMeshPrimitive(primitive: any, featureTable?: FeatureTable, pseudoRtcBias?: Vector3d): GltfMeshData | undefined {\r\n const materialName = JsonUtils.asString(primitive.material);\r\n const hasBakedLighting = undefined === primitive.attributes.NORMAL;\r\n const materialValue = 0 < materialName.length ? JsonUtils.asObject(this._materialValues[materialName]) : undefined;\r\n const displayParams = this.createDisplayParams(materialValue, hasBakedLighting);\r\n if (undefined === displayParams)\r\n return undefined;\r\n\r\n let primitiveType: number = -1;\r\n const meshMode = JsonUtils.asInt(primitive.mode, GltfMeshMode.Triangles);\r\n switch (meshMode) {\r\n case GltfMeshMode.Lines:\r\n primitiveType = Mesh.PrimitiveType.Polyline;\r\n break;\r\n\r\n case GltfMeshMode.Points:\r\n primitiveType = Mesh.PrimitiveType.Point;\r\n break;\r\n\r\n case GltfMeshMode.Triangles:\r\n primitiveType = Mesh.PrimitiveType.Mesh;\r\n break;\r\n\r\n default:\r\n assert(false);\r\n return undefined;\r\n }\r\n const isPlanar = JsonUtils.asBool(primitive.isPlanar);\r\n\r\n const isVolumeClassifier = this._isVolumeClassifier;\r\n const meshPrimitive = Mesh.create({\r\n displayParams,\r\n features: undefined !== featureTable ? new Mesh.Features(featureTable) : undefined,\r\n type: primitiveType,\r\n range: Range3d.createNull(),\r\n is2d: !this._is3d,\r\n isPlanar,\r\n hasBakedLighting,\r\n isVolumeClassifier,\r\n });\r\n const mesh = new GltfMeshData(meshPrimitive);\r\n\r\n // We don't have real colormap - just load material color. This will be used if non-Bentley\r\n // tile or fit the color table is uniform. For a non-Bentley, non-Uniform, we'll set the\r\n // uv parameters to pick the colors out of the color map texture.\r\n meshPrimitive.colorMap.insert(displayParams.fillColor.tbgr); // White...\r\n\r\n const colorIndices = this.readBufferData16(primitive.attributes, \"_COLORINDEX\");\r\n if (undefined !== colorIndices) {\r\n let texStep;\r\n if (materialValue.values !== undefined && Array.isArray(materialValue.values.texStep))\r\n texStep = materialValue.values.texStep;\r\n else if (materialValue.extensions && materialValue.extensions.KHR_techniques_webgl && materialValue.extensions.KHR_techniques_webgl.values && Array.isArray(materialValue.extensions.KHR_techniques_webgl.values.u_texStep))\r\n texStep = materialValue.extensions.KHR_techniques_webgl.values.u_texStep;\r\n\r\n if (texStep) {\r\n const uvParams = [];\r\n for (let i = 0; i < colorIndices.count; i++)\r\n uvParams.push(new Point2d(texStep[1] + texStep[0] * colorIndices.buffer[i], .5));\r\n\r\n const paramList = QPoint2dList.fromPoints(uvParams);\r\n mesh.uvs = paramList.toTypedArray();\r\n mesh.uvQParams = paramList.params;\r\n }\r\n }\r\n\r\n if (primitive.extensions?.KHR_draco_mesh_compression) {\r\n return undefined; // Defer Draco decompression until web workers implementation.\r\n /*\r\n const dracoExtension = primitive.extensions.KHR_draco_mesh_compression;\r\n const bufferView = this._bufferViews[dracoExtension.bufferView];\r\n if (undefined === bufferView) return undefined;\r\n const bufferData = this._binaryData.subarray(bufferView.byteOffset, bufferView.byteOffset + bufferView.byteLength);\r\n\r\n return DracoDecoder.readDracoMesh(mesh, primitive, bufferData, dracoExtension.attributes); */\r\n }\r\n\r\n this.readBatchTable(mesh.primitive, primitive);\r\n\r\n if (!this.readVertices(mesh, primitive, pseudoRtcBias))\r\n return undefined;\r\n\r\n switch (primitiveType) {\r\n case Mesh.PrimitiveType.Mesh: {\r\n if (!this.readMeshIndices(mesh, primitive))\r\n return undefined;\r\n\r\n if (!displayParams.ignoreLighting && !this.readNormals(mesh, primitive.attributes, \"NORMAL\"))\r\n return undefined;\r\n\r\n if (!mesh.uvs)\r\n this.readUVParams(mesh, primitive.attributes, \"TEXCOORD_0\");\r\n\r\n if (this._deduplicateVertices && !this.deduplicateVertices(mesh))\r\n return undefined;\r\n\r\n break;\r\n }\r\n\r\n case Mesh.PrimitiveType.Polyline:\r\n case Mesh.PrimitiveType.Point: {\r\n if (undefined !== mesh.primitive.polylines && !this.readPolylines(mesh.primitive.polylines, primitive, \"indices\", Mesh.PrimitiveType.Point === primitiveType))\r\n return undefined;\r\n break;\r\n }\r\n default: {\r\n assert(false, \"unhandled primitive type\");\r\n return undefined;\r\n }\r\n }\r\n if (displayParams.textureMapping && !mesh.uvs)\r\n return undefined;\r\n\r\n if (primitive.extensions?.CESIUM_primitive_outline) {\r\n const data = this.readBufferData32(primitive.extensions.CESIUM_primitive_outline, \"indices\");\r\n if (data !== undefined) {\r\n assert(0 === data.count % 2);\r\n mesh.primitive.edges = new MeshEdges();\r\n for (let i = 0; i < data.count;)\r\n mesh.primitive.edges.visible.push(new MeshEdge(data.buffer[i++], data.buffer[i++]));\r\n }\r\n }\r\n\r\n return mesh;\r\n }\r\n\r\n private deduplicateVertices(mesh: GltfMeshData): boolean {\r\n if (!mesh.points || !mesh.indices)\r\n return false;\r\n\r\n const numPoints = mesh.indices.length;\r\n assert(0 === numPoints % 3);\r\n\r\n const indices = mesh.indices;\r\n if (indices instanceof Uint16Array && numPoints > 0xffff)\r\n mesh.indices = new Uint32Array(numPoints);\r\n\r\n const points = new Uint16Array(3 * numPoints);\r\n const normals = mesh.normals ? new Uint16Array(numPoints) : undefined;\r\n const uvs = mesh.uvs ? new Uint16Array(2 * numPoints) : undefined;\r\n\r\n for (let i = 0; i < numPoints; i++) {\r\n const index = indices[i];\r\n mesh.indices[i] = i;\r\n\r\n points[i * 3 + 0] = mesh.points[index * 3 + 0];\r\n points[i * 3 + 1] = mesh.points[index * 3 + 1];\r\n points[i * 3 + 2] = mesh.points[index * 3 + 2];\r\n\r\n if (normals)\r\n normals[i] = mesh.normals![index];\r\n\r\n if (uvs) {\r\n uvs[i * 2 + 0] = mesh.uvs![index * 2 + 0];\r\n uvs[i * 2 + 1] = mesh.uvs![index * 2 + 1];\r\n }\r\n }\r\n\r\n mesh.points = points;\r\n mesh.normals = normals;\r\n mesh.uvs = uvs;\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n *\r\n * @param positions quantized points\r\n * @param primitive input json\r\n * @param pseudoRtcBias a bias applied to each point - this is a workaround for tiles generated by\r\n * context capture which have a large offset from the tileset origin that exceeds the\r\n * capacity of 32 bit integers. This is essentially an ad hoc RTC applied at read time.\r\n */\r\n private readVertices(mesh: GltfMeshData, primitive: any, pseudoRtcBias?: Vector3d): boolean {\r\n const view = this.getBufferView(primitive.attributes, \"POSITION\");\r\n if (undefined === view)\r\n return false;\r\n\r\n if (GltfDataType.Float === view.type) {\r\n const buffer = view.toBufferData(GltfDataType.Float);\r\n if (undefined === buffer)\r\n return false;\r\n\r\n const strideSkip = view.stride - 3;\r\n mesh.pointRange = Range3d.createNull();\r\n for (let i = 0; i < buffer.buffer.length; i += strideSkip)\r\n mesh.pointRange.extendXYZ(buffer.buffer[i++], buffer.buffer[i++], buffer.buffer[i++]);\r\n\r\n const positions = new QPoint3dList(QParams3d.fromRange(mesh.pointRange));\r\n const scratchPoint = new Point3d();\r\n for (let i = 0, j = 0; i < buffer.count; i++, j += strideSkip) {\r\n scratchPoint.set(buffer.buffer[j++], buffer.buffer[j++], buffer.buffer[j++]);\r\n if (undefined !== pseudoRtcBias)\r\n scratchPoint.subtractInPlace(pseudoRtcBias);\r\n\r\n positions.add(scratchPoint);\r\n }\r\n mesh.pointQParams = positions.params;\r\n mesh.points = positions.toTypedArray();\r\n } else {\r\n if (GltfDataType.UnsignedShort !== view.type)\r\n return false;\r\n\r\n const extensions = JsonUtils.asObject(view.accessor.extensions);\r\n const quantized = undefined !== extensions ? JsonUtils.asObject(extensions.WEB3D_quantized_attributes) : undefined;\r\n if (undefined === quantized)\r\n return false;\r\n\r\n const rangeMin = JsonUtils.asArray(quantized.decodedMin);\r\n const rangeMax = JsonUtils.asArray(quantized.decodedMax);\r\n if (undefined === rangeMin || undefined === rangeMax)\r\n return false;\r\n\r\n const buffer = view.toBufferData(GltfDataType.UnsignedShort);\r\n if (undefined === buffer || !(buffer.buffer instanceof Uint16Array))\r\n return false;\r\n\r\n assert(buffer.buffer instanceof Uint16Array);\r\n mesh.pointRange = Range3d.createXYZXYZ(rangeMin[0], rangeMin[1], rangeMin[2], rangeMax[0], rangeMax[1], rangeMax[2]);\r\n if (undefined !== pseudoRtcBias) {\r\n mesh.pointRange.low.subtractInPlace(pseudoRtcBias);\r\n mesh.pointRange.high.subtractInPlace(pseudoRtcBias);\r\n }\r\n mesh.pointQParams = QParams3d.fromRange(mesh.pointRange);\r\n if (3 === view.stride) {\r\n mesh.points = buffer.buffer;\r\n } else {\r\n mesh.points = new Uint16Array(3 * view.count);\r\n for (let i = 0, j = 0; i < view.count; i++) {\r\n const index = i * view.stride;\r\n mesh.points[j++] = buffer.buffer[index];\r\n mesh.points[j++] = buffer.buffer[index + 1];\r\n mesh.points[j++] = buffer.buffer[index + 2];\r\n }\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected readIndices(json: any, accessorName: string): number[] | undefined {\r\n const data = this.readBufferData32(json, accessorName);\r\n if (undefined === data)\r\n return undefined;\r\n\r\n const indices = [];\r\n for (let i = 0; i < data.count; i++)\r\n indices.push(data.buffer[i]);\r\n\r\n return indices;\r\n }\r\n\r\n protected readBatchTable(_mesh: Mesh, _json: any) {\r\n }\r\n\r\n protected readMeshIndices(mesh: GltfMeshData, json: any): boolean {\r\n const data = this.readBufferData16(json, \"indices\") || this.readBufferData32(json, \"indices\");\r\n if (undefined === data || (!(data.buffer instanceof (Uint16Array)) && !(data.buffer instanceof (Uint32Array))))\r\n return false;\r\n\r\n mesh.indices = data.buffer;\r\n\r\n return true;\r\n }\r\n\r\n protected readNormals(mesh: GltfMeshData, json: any, accessorName: string): boolean {\r\n const view = this.getBufferView(json, accessorName);\r\n if (undefined === view)\r\n return false;\r\n\r\n switch (view.type) {\r\n case GltfDataType.Float: {\r\n const data = view.toBufferData(GltfDataType.Float);\r\n if (undefined === data)\r\n return false;\r\n\r\n mesh.normals = new Uint16Array(data.count);\r\n const scratchNormal = new Vector3d();\r\n const strideSkip = view.stride - 3;\r\n for (let i = 0, j = 0; i < data.count; i++, j += strideSkip) {\r\n scratchNormal.set(data.buffer[j++], data.buffer[j++], data.buffer[j++]);\r\n mesh.normals[i] = OctEncodedNormal.encode(scratchNormal);\r\n }\r\n return true;\r\n }\r\n\r\n case GltfDataType.UnsignedByte: {\r\n const data = view.toBufferData(GltfDataType.UnsignedByte);\r\n if (undefined === data)\r\n return false;\r\n\r\n // ###TODO: we shouldn't have to allocate OctEncodedNormal objects...just use uint16s / numbers...\r\n mesh.normals = new Uint16Array(data.count);\r\n for (let i = 0; i < data.count; i++) {\r\n // ###TODO? not clear why ray writes these as pairs of uint8...\r\n const index = i * view.stride;\r\n const normal = data.buffer[index] | (data.buffer[index + 1] << 8);\r\n mesh.normals[i] = normal;\r\n }\r\n return true;\r\n }\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n private readUVParams(mesh: GltfMeshData, json: any, accessorName: string): boolean {\r\n const view = this.getBufferView(json, accessorName);\r\n let data: any;\r\n\r\n if (view === undefined)\r\n return false;\r\n\r\n switch (view.type) {\r\n case GltfDataType.Float: {\r\n data = this.readBufferDataFloat(json, accessorName);\r\n mesh.uvRange = Range2d.createNull();\r\n\r\n for (let i = 0; i < data.count; i++) {\r\n const index = view.stride * i; // 2 float per param...\r\n mesh.uvRange.extendXY(data.buffer[index], data.buffer[index + 1]);\r\n }\r\n mesh.uvQParams = QParams2d.fromRange(mesh.uvRange);\r\n mesh.uvs = new Uint16Array(data.count * 2);\r\n for (let i = 0, j = 0; i < data.count; i++) {\r\n const index = view.stride * i; // 2 float per param...\r\n mesh.uvs[j++] = Quantization.quantize(data.buffer[index], mesh.uvQParams.origin.x, mesh.uvQParams.scale.x);\r\n mesh.uvs[j++] = Quantization.quantize(data.buffer[index + 1], mesh.uvQParams.origin.y, mesh.uvQParams.scale.y);\r\n }\r\n return true;\r\n }\r\n\r\n case GltfDataType.UnsignedShort: {\r\n const extensions = JsonUtils.asObject(view.accessor.extensions);\r\n const quantized = undefined !== extensions ? JsonUtils.asObject(extensions.WEB3D_quantized_attributes) : undefined;\r\n if (undefined === quantized)\r\n return false;\r\n\r\n const rangeMin = JsonUtils.asArray(quantized.decodedMin);\r\n const rangeMax = JsonUtils.asArray(quantized.decodedMax);\r\n if (undefined === rangeMin || undefined === rangeMax)\r\n return false;\r\n\r\n const qData = view.toBufferData(GltfDataType.UnsignedShort);\r\n if (undefined === qData || !(qData.buffer instanceof Uint16Array))\r\n return false;\r\n\r\n mesh.uvRange = Range2d.createXYXY(rangeMin[0], rangeMin[1], rangeMax[0], rangeMax[1]);\r\n mesh.uvQParams = QParams2d.fromRange(mesh.uvRange);\r\n if (2 === view.stride) {\r\n mesh.uvs = qData.buffer;\r\n } else {\r\n mesh.uvs = new Uint16Array(2 * view.count);\r\n for (let i = 0, j = 0; i < view.count; i++) {\r\n const index = i * view.stride;\r\n mesh.uvs[j++] = qData.buffer[index];\r\n mesh.uvs[j++] = qData.buffer[index + 1];\r\n }\r\n }\r\n return true;\r\n }\r\n default:\r\n assert(false);\r\n return false;\r\n\r\n }\r\n\r\n return true;\r\n }\r\n\r\n protected readPolylines(polylines: MeshPolylineList, json: any, accessorName: string, disjoint: boolean): boolean {\r\n const data = this.readBufferData32(json, accessorName);\r\n if (undefined === data)\r\n return false;\r\n\r\n const indices = new Array<number>();\r\n if (disjoint) {\r\n for (let i = 0; i < data.count;)\r\n indices.push(data.buffer[i++]);\r\n } else {\r\n for (let i = 0; i < data.count;) {\r\n const index0 = data.buffer[i++];\r\n const index1 = data.buffer[i++];\r\n if (0 === indices.length || index0 !== indices[indices.length - 1]) {\r\n if (indices.length !== 0) {\r\n polylines.push(new MeshPolyline(indices));\r\n indices.length = 0;\r\n }\r\n indices.push(index0);\r\n }\r\n indices.push(index1);\r\n }\r\n }\r\n if (indices.length !== 0)\r\n polylines.push(new MeshPolyline(indices));\r\n\r\n return true;\r\n }\r\n\r\n protected async loadTextures(): Promise<void> {\r\n if (undefined === this._textures)\r\n return;\r\n\r\n const transparentTextures: Set<string> = new Set<string>();\r\n for (const name of Object.keys(this._materialValues)) {\r\n const materialValue = this._materialValues[name];\r\n let technique;\r\n if (undefined !== materialValue.values &&\r\n undefined !== materialValue.values.tex &&\r\n undefined !== materialValue.technique &&\r\n undefined !== (technique = this._techniques[materialValue.technique]) &&\r\n undefined !== technique.states &&\r\n Array.isArray(technique.states.enable)) {\r\n for (const enable of technique.states.enable)\r\n if (enable === 3042)\r\n transparentTextures.add(materialValue.values.tex);\r\n }\r\n }\r\n\r\n const promises = new Array<Promise<void>>();\r\n for (const name of Object.keys(this._textures))\r\n promises.push(this.loadTexture(name, transparentTextures.has(name)));\r\n\r\n if (promises.length > 0)\r\n await Promise.all(promises);\r\n }\r\n\r\n protected async loadTextureImage(imageJson: any, samplerJson: any, isTransparent: boolean): Promise<RenderTexture | undefined> {\r\n try {\r\n const binaryImageJson = (imageJson.extensions && imageJson.extensions.KHR_binary_glTF) ? JsonUtils.asObject(imageJson.extensions.KHR_binary_glTF) : imageJson;\r\n const bufferView = this._bufferViews[binaryImageJson.bufferView];\r\n const mimeType = JsonUtils.asString(binaryImageJson.mimeType);\r\n const format = getImageSourceFormatForMimeType(mimeType);\r\n if (undefined === format)\r\n return undefined;\r\n\r\n let textureType = RenderTexture.Type.Normal;\r\n if (undefined !== samplerJson &&\r\n (undefined !== samplerJson.wrapS || undefined !== samplerJson.wrapT))\r\n textureType = RenderTexture.Type.TileSection;\r\n\r\n const offset = bufferView.byteOffset;\r\n\r\n /* -----------------------------------\r\n const jpegArray = this._binaryData.slice(offset, offset + bufferView.byteLength);\r\n const jpegArrayBuffer = jpegArray.buffer;\r\n const workerOp = new ImageDecodeWorkerOperation(jpegArrayBuffer, mimeType);\r\n try {\r\n const imageBitmap = await GltfReader.webWorkerManager.queueOperation(workerOp)\r\n return this._isCanceled ? undefined : this._system.createTextureFromImage(imageBitmap, isTransparent && ImageSourceFormat.Png === format, this._iModel, textureParams))\r\n } catch {\r\n return undefined;\r\n }\r\n ------------------------------------- */\r\n\r\n const bytes = this._binaryData.subarray(offset, offset + bufferView.byteLength);\r\n const imageSource = new ImageSource(bytes, format);\r\n try {\r\n const image = await imageElementFromImageSource(imageSource);\r\n if (this._isCanceled)\r\n return undefined;\r\n\r\n return this._system.createTexture({\r\n type: textureType,\r\n image: {\r\n source: image,\r\n transparency: isTransparent && ImageSourceFormat.Png === format ? TextureTransparency.Translucent : TextureTransparency.Opaque,\r\n },\r\n });\r\n } catch {\r\n return undefined;\r\n }\r\n } catch (e) {\r\n return undefined;\r\n }\r\n }\r\n\r\n protected async loadTexture(textureId: string, isTransparent: boolean): Promise<void> {\r\n const textureJson = JsonUtils.asObject(this._textures[textureId]);\r\n if (undefined === textureJson)\r\n return;\r\n\r\n const texture = await this.loadTextureImage(this._images[textureJson.source], undefined === this._samplers ? undefined : this._samplers[textureJson.sampler], isTransparent);\r\n textureJson.renderTexture = texture;\r\n }\r\n\r\n protected findTextureMapping(textureId: string): TextureMapping | undefined {\r\n const textureJson = JsonUtils.asObject(this._textures[textureId]);\r\n const texture = undefined !== textureJson ? textureJson.renderTexture as RenderTexture : undefined;\r\n return undefined !== texture ? new TextureMapping(texture, new TextureMapping.Params()) : undefined;\r\n }\r\n}\r\n"]}
|
|
@@ -20,7 +20,7 @@ export declare class I3dmReader extends GltfReader {
|
|
|
20
20
|
private _idMap?;
|
|
21
21
|
private _instanceCount;
|
|
22
22
|
private _featureTable?;
|
|
23
|
-
static create(stream: ByteStream, iModel: IModelConnection, modelId: Id64String, is3d: boolean, range: ElementAlignedBox3d, system: RenderSystem, yAxisUp: boolean, isLeaf: boolean, isCanceled?: ShouldAbortReadGltf, idMap?: BatchedTileIdMap): I3dmReader | undefined;
|
|
23
|
+
static create(stream: ByteStream, iModel: IModelConnection, modelId: Id64String, is3d: boolean, range: ElementAlignedBox3d, system: RenderSystem, yAxisUp: boolean, isLeaf: boolean, isCanceled?: ShouldAbortReadGltf, idMap?: BatchedTileIdMap, deduplicateVertices?: boolean): I3dmReader | undefined;
|
|
24
24
|
private constructor();
|
|
25
25
|
read(): Promise<GltfReaderResult>;
|
|
26
26
|
protected readFeatures(_features: Mesh.Features, _json: any): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"I3dmReader.d.ts","sourceRoot":"","sources":["../../../src/tile/I3dmReader.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAA2B,MAAM,qBAAqB,CAAC;AAEtF,OAAO,EAAa,mBAAmB,EAAqD,MAAM,oBAAoB,CAAC;AACvH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAmB,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA8BlH;;;GAGG;AACH,qBAAa,UAAW,SAAQ,UAAU;IAwBpB,OAAO,CAAC,cAAc;IAAc,OAAO,CAAC,YAAY;IAAO,OAAO,CAAC,eAAe;IACpB,OAAO,CAAC,MAAM;IAClG,OAAO,CAAC,OAAO;IAA6C,OAAO,CAAC,MAAM,CAAC;IAzB7E,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,aAAa,CAAC,CAAe;WAEvB,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAC/H,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,mBAAmB,EAAE,KAAK,CAAC,EAAE,gBAAgB,GAAG,UAAU,GAAG,SAAS;
|
|
1
|
+
{"version":3,"file":"I3dmReader.d.ts","sourceRoot":"","sources":["../../../src/tile/I3dmReader.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,UAAU,EAA2B,MAAM,qBAAqB,CAAC;AAEtF,OAAO,EAAa,mBAAmB,EAAqD,MAAM,oBAAoB,CAAC;AACvH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAmB,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA8BlH;;;GAGG;AACH,qBAAa,UAAW,SAAQ,UAAU;IAwBpB,OAAO,CAAC,cAAc;IAAc,OAAO,CAAC,YAAY;IAAO,OAAO,CAAC,eAAe;IACpB,OAAO,CAAC,MAAM;IAClG,OAAO,CAAC,OAAO;IAA6C,OAAO,CAAC,MAAM,CAAC;IAzB7E,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,aAAa,CAAC,CAAe;WAEvB,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAC/H,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,mBAAmB,EAAE,KAAK,CAAC,EAAE,gBAAgB,EAAE,mBAAmB,UAAM,GAAG,UAAU,GAAG,SAAS;IAmBzK,OAAO;IAMM,IAAI,IAAI,OAAO,CAAC,gBAAgB,CAAC;IA8B9C,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO;IAIrE,OAAO,CAAC,aAAa;CAkEtB"}
|