@itwin/core-frontend 5.3.0-dev.9 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +39 -1
- package/lib/cjs/IModelApp.d.ts +4 -0
- package/lib/cjs/IModelApp.d.ts.map +1 -1
- package/lib/cjs/IModelApp.js +5 -1
- package/lib/cjs/IModelApp.js.map +1 -1
- package/lib/cjs/IModeljs-css.d.ts.map +1 -1
- package/lib/cjs/IModeljs-css.js +4 -0
- package/lib/cjs/IModeljs-css.js.map +1 -1
- package/lib/cjs/SubCategoriesCache.d.ts +1 -1
- package/lib/cjs/SubCategoriesCache.d.ts.map +1 -1
- package/lib/cjs/SubCategoriesCache.js +3 -3
- package/lib/cjs/SubCategoriesCache.js.map +1 -1
- package/lib/cjs/ViewManager.d.ts +4 -2
- package/lib/cjs/ViewManager.d.ts.map +1 -1
- package/lib/cjs/ViewManager.js +3 -1
- package/lib/cjs/ViewManager.js.map +1 -1
- package/lib/cjs/Viewport.d.ts.map +1 -1
- package/lib/cjs/Viewport.js +9 -3
- package/lib/cjs/Viewport.js.map +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
- package/lib/cjs/common/imdl/ParseImdlDocument.js +1 -43
- package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
- package/lib/cjs/common/internal/Symbols.d.ts +1 -0
- package/lib/cjs/common/internal/Symbols.d.ts.map +1 -1
- package/lib/cjs/common/internal/Symbols.js +1 -0
- package/lib/cjs/common/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/cross-package.d.ts +4 -0
- package/lib/cjs/internal/cross-package.d.ts.map +1 -1
- package/lib/cjs/internal/cross-package.js +3 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/render/RenderAreaPattern.d.ts +1 -0
- package/lib/cjs/internal/render/RenderAreaPattern.d.ts.map +1 -1
- package/lib/cjs/internal/render/RenderAreaPattern.js.map +1 -1
- package/lib/cjs/internal/render/RenderGeometry.d.ts +3 -1
- package/lib/cjs/internal/render/RenderGeometry.d.ts.map +1 -1
- package/lib/cjs/internal/render/RenderGeometry.js.map +1 -1
- package/lib/cjs/internal/render/RenderPlan.d.ts +3 -1
- package/lib/cjs/internal/render/RenderPlan.d.ts.map +1 -1
- package/lib/cjs/internal/render/RenderPlan.js.map +1 -1
- package/lib/cjs/internal/render/webgl/System.d.ts +1 -1
- package/lib/cjs/internal/render/webgl/System.d.ts.map +1 -1
- package/lib/cjs/internal/render/webgl/System.js.map +1 -1
- package/lib/cjs/internal/tile/DynamicIModelTile.d.ts +2 -0
- package/lib/cjs/internal/tile/DynamicIModelTile.d.ts.map +1 -1
- package/lib/cjs/internal/tile/DynamicIModelTile.js +3 -0
- package/lib/cjs/internal/tile/DynamicIModelTile.js.map +1 -1
- package/lib/cjs/internal/tile/IModelTileTree.d.ts +2 -0
- package/lib/cjs/internal/tile/IModelTileTree.d.ts.map +1 -1
- package/lib/cjs/internal/tile/IModelTileTree.js +5 -0
- package/lib/cjs/internal/tile/IModelTileTree.js.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISImageryProvider.js +1 -0
- package/lib/cjs/internal/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerAuthentication.d.ts +4 -0
- package/lib/cjs/tile/map/MapLayerAuthentication.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerAuthentication.js.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts +17 -2
- package/lib/cjs/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/cjs/tile/map/MapLayerImageryProvider.js +29 -2
- package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/cjs/tools/AccuDrawViewportUI.d.ts +82 -26
- package/lib/cjs/tools/AccuDrawViewportUI.d.ts.map +1 -1
- package/lib/cjs/tools/AccuDrawViewportUI.js +171 -87
- package/lib/cjs/tools/AccuDrawViewportUI.js.map +1 -1
- package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/cjs/tools/ToolAdmin.js +3 -0
- package/lib/cjs/tools/ToolAdmin.js.map +1 -1
- package/lib/esm/IModelApp.d.ts +4 -0
- package/lib/esm/IModelApp.d.ts.map +1 -1
- package/lib/esm/IModelApp.js +5 -1
- package/lib/esm/IModelApp.js.map +1 -1
- package/lib/esm/IModeljs-css.d.ts.map +1 -1
- package/lib/esm/IModeljs-css.js +4 -0
- package/lib/esm/IModeljs-css.js.map +1 -1
- package/lib/esm/SubCategoriesCache.d.ts +1 -1
- package/lib/esm/SubCategoriesCache.d.ts.map +1 -1
- package/lib/esm/SubCategoriesCache.js +3 -3
- package/lib/esm/SubCategoriesCache.js.map +1 -1
- package/lib/esm/ViewManager.d.ts +4 -2
- package/lib/esm/ViewManager.d.ts.map +1 -1
- package/lib/esm/ViewManager.js +3 -1
- package/lib/esm/ViewManager.js.map +1 -1
- package/lib/esm/Viewport.d.ts.map +1 -1
- package/lib/esm/Viewport.js +9 -3
- package/lib/esm/Viewport.js.map +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
- package/lib/esm/common/imdl/ParseImdlDocument.js +1 -43
- package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
- package/lib/esm/common/internal/Symbols.d.ts +1 -0
- package/lib/esm/common/internal/Symbols.d.ts.map +1 -1
- package/lib/esm/common/internal/Symbols.js +1 -0
- package/lib/esm/common/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/cross-package.d.ts +4 -0
- package/lib/esm/internal/cross-package.d.ts.map +1 -1
- package/lib/esm/internal/cross-package.js +1 -0
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/render/RenderAreaPattern.d.ts +1 -0
- package/lib/esm/internal/render/RenderAreaPattern.d.ts.map +1 -1
- package/lib/esm/internal/render/RenderAreaPattern.js.map +1 -1
- package/lib/esm/internal/render/RenderGeometry.d.ts +3 -1
- package/lib/esm/internal/render/RenderGeometry.d.ts.map +1 -1
- package/lib/esm/internal/render/RenderGeometry.js.map +1 -1
- package/lib/esm/internal/render/RenderPlan.d.ts +3 -1
- package/lib/esm/internal/render/RenderPlan.d.ts.map +1 -1
- package/lib/esm/internal/render/RenderPlan.js.map +1 -1
- package/lib/esm/internal/render/webgl/System.d.ts +1 -1
- package/lib/esm/internal/render/webgl/System.d.ts.map +1 -1
- package/lib/esm/internal/render/webgl/System.js.map +1 -1
- package/lib/esm/internal/tile/DynamicIModelTile.d.ts +2 -0
- package/lib/esm/internal/tile/DynamicIModelTile.d.ts.map +1 -1
- package/lib/esm/internal/tile/DynamicIModelTile.js +3 -0
- package/lib/esm/internal/tile/DynamicIModelTile.js.map +1 -1
- package/lib/esm/internal/tile/IModelTileTree.d.ts +2 -0
- package/lib/esm/internal/tile/IModelTileTree.d.ts.map +1 -1
- package/lib/esm/internal/tile/IModelTileTree.js +5 -0
- package/lib/esm/internal/tile/IModelTileTree.js.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISImageryProvider.d.ts.map +1 -1
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISImageryProvider.js +1 -0
- package/lib/esm/internal/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
- package/lib/esm/tile/map/MapLayerAuthentication.d.ts +4 -0
- package/lib/esm/tile/map/MapLayerAuthentication.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerAuthentication.js.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts +17 -2
- package/lib/esm/tile/map/MapLayerImageryProvider.d.ts.map +1 -1
- package/lib/esm/tile/map/MapLayerImageryProvider.js +29 -2
- package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
- package/lib/esm/tools/AccuDrawViewportUI.d.ts +82 -26
- package/lib/esm/tools/AccuDrawViewportUI.d.ts.map +1 -1
- package/lib/esm/tools/AccuDrawViewportUI.js +171 -87
- package/lib/esm/tools/AccuDrawViewportUI.js.map +1 -1
- package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
- package/lib/esm/tools/ToolAdmin.js +3 -0
- package/lib/esm/tools/ToolAdmin.js.map +1 -1
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +21 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParseImdlDocument.d.ts","sourceRoot":"","sources":["../../../../src/common/imdl/ParseImdlDocument.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAA4B,OAAO,EAAE,UAAU,EAA2B,MAAM,qBAAqB,CAAC;AAE7G,OAAO,EAEwD,kBAAkB,EAAwC,cAAc,
|
|
1
|
+
{"version":3,"file":"ParseImdlDocument.d.ts","sourceRoot":"","sources":["../../../../src/common/imdl/ParseImdlDocument.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAA4B,OAAO,EAAE,UAAU,EAA2B,MAAM,qBAAqB,CAAC;AAE7G,OAAO,EAEwD,kBAAkB,EAAwC,cAAc,EACrH,cAAc,EAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,IAAI,IAAI,EAAE,MAAM,aAAa,CAAC;AAWhD,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAK1D;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,cAAc,CAAC,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,YAAY,EAAE,UAAU,CAAC;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,8DAA8D;IAC9D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2BAA2B,CAAC,EAAE,OAAO,CAAC;IAEtC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,QAAQ,EAAE,YAAY,GAAG,SAAS,CAAC;CACpC;AAKD;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;AAqG7E,gBAAgB;AAChB,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAOjE;AAWD,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,GAAG,UAAU,CAuBpE;AAED,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC,UAAU,CAqBpE;AAu+BD,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,qBAAqB,GAAG,cAAc,CAkBhF;AAED,gBAAgB;AAChB,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,GAAG,kBAAkB,CAOrH;AAED,gBAAgB;AAChB,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC,CA0D/G"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { assert, ByteStream, Id64, JsonUtils, utf8ToString } from "@itwin/core-bentley";
|
|
9
9
|
import { Point3d, Range2d, Range3d } from "@itwin/core-geometry";
|
|
10
|
-
import { BatchType, ColorDef, FeatureTableHeader, FillFlags,
|
|
10
|
+
import { BatchType, ColorDef, FeatureTableHeader, FillFlags, GltfHeader, Gradient, ImdlFlags, ImdlHeader, LinePixels, MultiModelPackedFeatureTable, PackedFeatureTable, PolylineTypeFlags, QParams2d, QParams3d, RenderMaterial, RenderMaterialParams, RenderTexture, RgbColor, TextureMapping, TileReadStatus, } from "@itwin/core-common";
|
|
11
11
|
import { MeshPrimitiveType } from "../internal/render/MeshPrimitive";
|
|
12
12
|
import { isValidSurfaceType } from "../internal/render/SurfaceParams";
|
|
13
13
|
import { DisplayParams } from "../internal/render/DisplayParams";
|
|
@@ -17,48 +17,6 @@ import { AnimationNodeId } from "../internal/render/AnimationNodeId";
|
|
|
17
17
|
import { VertexIndices } from "../internal/render/VertexIndices";
|
|
18
18
|
import { indexedEdgeParamsFromCompactEdges } from "./CompactEdges";
|
|
19
19
|
import { getMeshoptDecoder } from "../../tile/internal";
|
|
20
|
-
/** Header preceding "glTF" data in iMdl tile. */
|
|
21
|
-
class GltfHeader extends TileHeader {
|
|
22
|
-
gltfLength;
|
|
23
|
-
scenePosition = 0;
|
|
24
|
-
sceneStrLength = 0;
|
|
25
|
-
binaryPosition = 0;
|
|
26
|
-
get isValid() { return TileFormat.Gltf === this.format; }
|
|
27
|
-
constructor(stream) {
|
|
28
|
-
super(stream);
|
|
29
|
-
this.gltfLength = stream.readUint32();
|
|
30
|
-
this.sceneStrLength = stream.readUint32();
|
|
31
|
-
const value5 = stream.readUint32();
|
|
32
|
-
// Early versions of the reality data tile publisher incorrectly put version 2 into header - handle these old tiles
|
|
33
|
-
// validating the chunk type.
|
|
34
|
-
if (this.version === GltfVersions.Version2 && value5 === GltfVersions.Gltf1SceneFormat)
|
|
35
|
-
this.version = GltfVersions.Version1;
|
|
36
|
-
if (this.version === GltfVersions.Version1) {
|
|
37
|
-
const gltfSceneFormat = value5;
|
|
38
|
-
if (GltfVersions.Gltf1SceneFormat !== gltfSceneFormat) {
|
|
39
|
-
this.invalidate();
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
this.scenePosition = stream.curPos;
|
|
43
|
-
this.binaryPosition = stream.curPos + this.sceneStrLength;
|
|
44
|
-
}
|
|
45
|
-
else if (this.version === GltfVersions.Version2) {
|
|
46
|
-
const sceneChunkType = value5;
|
|
47
|
-
this.scenePosition = stream.curPos;
|
|
48
|
-
stream.curPos = stream.curPos + this.sceneStrLength;
|
|
49
|
-
const binaryLength = stream.readUint32();
|
|
50
|
-
const binaryChunkType = stream.readUint32();
|
|
51
|
-
if (GltfV2ChunkTypes.JSON !== sceneChunkType || GltfV2ChunkTypes.Binary !== binaryChunkType || 0 === binaryLength) {
|
|
52
|
-
this.invalidate();
|
|
53
|
-
return;
|
|
54
|
-
}
|
|
55
|
-
this.binaryPosition = stream.curPos;
|
|
56
|
-
}
|
|
57
|
-
else {
|
|
58
|
-
this.invalidate();
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
20
|
const nodeIdRegex = /Node_(.*)/;
|
|
63
21
|
function extractNodeId(nodeName) {
|
|
64
22
|
const match = nodeName.match(nodeIdRegex);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParseImdlDocument.js","sourceRoot":"","sources":["../../../../src/common/imdl/ParseImdlDocument.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, ByteStream, Id64, Id64Set, Id64String, JsonUtils, utf8ToString } from \"@itwin/core-bentley\";\nimport { Point3d, Range2d, Range3d } from \"@itwin/core-geometry\";\nimport {\n BatchType, ColorDef, FeatureTableHeader, FillFlags, GltfV2ChunkTypes, GltfVersions, Gradient, ImdlFlags, ImdlHeader, LinePixels, MultiModelPackedFeatureTable,\n PackedFeatureTable, PolylineTypeFlags, QParams2d, QParams3d, RenderFeatureTable, RenderMaterial, RenderMaterialParams, RenderSchedule, RenderTexture, RgbColor,\n TextureMapping, TileFormat, TileHeader, TileReadStatus,\n} from \"@itwin/core-common\";\nimport { ImdlModel as Imdl } from \"./ImdlModel\";\nimport {\n AnyImdlPrimitive, ImdlAreaPattern, ImdlColorDef, ImdlCompactEdges, ImdlDisplayParams, ImdlDocument, ImdlIndexedEdges, ImdlMesh, ImdlMeshEdges,\n ImdlMeshPrimitive, ImdlNamedTexture, ImdlPolyline, ImdlSegmentEdges, ImdlSilhouetteEdges, ImdlTextureMapping,\n} from \"./ImdlSchema\";\nimport { MeshPrimitiveType } from \"../internal/render/MeshPrimitive\";\nimport { isValidSurfaceType, SurfaceMaterial } from \"../internal/render/SurfaceParams\";\nimport { DisplayParams } from \"../internal/render/DisplayParams\";\nimport { AuxChannelTable, AuxChannelTableProps } from \"../internal/render/AuxChannelTable\";\nimport { ComputeAnimationNodeId, splitMeshParams, splitPointStringParams, splitPolylineParams } from \"../internal/render/VertexTableSplitter\";\nimport { AnimationNodeId } from \"../internal/render/AnimationNodeId\";\nimport { EdgeParams } from \"../internal/render/EdgeParams\";\nimport { MeshParams } from \"../internal/render/MeshParams\";\nimport { VertexTable } from \"../internal/render/VertexTable\";\nimport { MaterialParams } from \"../render/MaterialParams\";\nimport { VertexIndices } from \"../internal/render/VertexIndices\";\nimport { indexedEdgeParamsFromCompactEdges } from \"./CompactEdges\";\nimport { getMeshoptDecoder, MeshoptDecoder } from \"../../tile/internal\";\n\n/** Timeline used to reassemble iMdl content into animatable nodes.\n * @internal\n */\nexport type ImdlTimeline = RenderSchedule.ModelTimeline | RenderSchedule.Script;\n\n/** Options provided to [[ImdlParser.parse]].\n * @internal\n */\nexport interface ImdlParserOptions {\n data: Uint8Array;\n batchModelId: Id64String;\n is3d: boolean;\n /** The limit on the width and height of a [[VertexTable]]. */\n maxVertexTableSize: number;\n omitEdges?: boolean;\n createUntransformedRootNode?: boolean;\n /* see [[ImdlDecodeArgs.modelGroups]]. */\n modelGroups?: Id64Set[];\n}\n\n/** Arguments provided to [[parseImdlDocument]].\n * @internal\n */\nexport interface ParseImdlDocumentArgs extends ImdlParserOptions {\n timeline: ImdlTimeline | undefined;\n}\n\n/** Header preceding \"glTF\" data in iMdl tile. */\nclass GltfHeader extends TileHeader {\n public readonly gltfLength: number;\n public readonly scenePosition: number = 0;\n public readonly sceneStrLength: number = 0;\n public readonly binaryPosition: number = 0;\n public get isValid(): boolean { return TileFormat.Gltf === this.format; }\n\n public constructor(stream: ByteStream) {\n super(stream);\n this.gltfLength = stream.readUint32();\n\n this.sceneStrLength = stream.readUint32();\n const value5 = stream.readUint32();\n\n // Early versions of the reality data tile publisher incorrectly put version 2 into header - handle these old tiles\n // validating the chunk type.\n if (this.version === GltfVersions.Version2 && value5 === GltfVersions.Gltf1SceneFormat)\n this.version = GltfVersions.Version1;\n\n if (this.version === GltfVersions.Version1) {\n const gltfSceneFormat = value5;\n if (GltfVersions.Gltf1SceneFormat !== gltfSceneFormat) {\n this.invalidate();\n return;\n }\n\n this.scenePosition = stream.curPos;\n this.binaryPosition = stream.curPos + this.sceneStrLength;\n } else if (this.version === GltfVersions.Version2) {\n const sceneChunkType = value5;\n this.scenePosition = stream.curPos;\n stream.curPos = stream.curPos + this.sceneStrLength;\n const binaryLength = stream.readUint32();\n const binaryChunkType = stream.readUint32();\n if (GltfV2ChunkTypes.JSON !== sceneChunkType || GltfV2ChunkTypes.Binary !== binaryChunkType || 0 === binaryLength) {\n this.invalidate();\n return;\n }\n\n this.binaryPosition = stream.curPos;\n } else {\n this.invalidate();\n }\n }\n}\n\ntype OptionalDocumentProperties = \"rtcCenter\" | \"animationNodes\";\ntype Document = Required<Omit<ImdlDocument, OptionalDocumentProperties>> & Pick<ImdlDocument, OptionalDocumentProperties>;\n\n/** Error codes resulting from [[parseImdlDocument]].\n * @internal\n */\nexport type ImdlParseError = Exclude<TileReadStatus, TileReadStatus.Success>;\n\ninterface FeatureTableInfo {\n startPos: number;\n multiModel: boolean;\n}\n\nconst nodeIdRegex = /Node_(.*)/;\nfunction extractNodeId(nodeName: string): number {\n const match = nodeName.match(nodeIdRegex);\n assert(!!match && match.length === 2);\n if (!match || match.length !== 2)\n return 0;\n\n const nodeId = Number.parseInt(match[1], 10);\n assert(!Number.isNaN(nodeId));\n return Number.isNaN(nodeId) ? 0 : nodeId;\n}\n\nabstract class Texture extends RenderTexture {\n protected constructor(type: RenderTexture.Type) {\n super(type);\n }\n\n public abstract toImdl(): string | Gradient.SymbProps;\n\n public override dispose() { }\n public override get bytesUsed() { return 0; }\n}\n\nclass NamedTexture extends Texture {\n public constructor(private readonly _name: string, type: RenderTexture.Type) {\n super(type);\n }\n\n public override toImdl(): string {\n return this._name;\n }\n}\n\nclass GradientTexture extends Texture {\n public constructor(private readonly _gradient: Gradient.SymbProps) {\n super(RenderTexture.Type.Normal);\n }\n\n public override toImdl(): Gradient.SymbProps {\n return this._gradient;\n }\n}\n\nclass Material extends RenderMaterial {\n public readonly materialParams: Imdl.SurfaceMaterialParams;\n\n public toImdl(): Imdl.SurfaceMaterial {\n const material = this.key ?? this.materialParams;\n return { isAtlas: false, material };\n }\n\n public constructor(params: RenderMaterialParams, imdl?: Imdl.SurfaceMaterialParams) {\n super(params);\n\n this.materialParams = imdl ?? {\n alpha: params.alpha,\n diffuse: {\n color: params.diffuseColor?.toJSON(),\n weight: params.diffuse,\n },\n specular: {\n color: params.specularColor?.toJSON(),\n weight: params.specular,\n exponent: params.specularExponent,\n },\n };\n }\n\n public static create(args: MaterialParams): Material {\n const params = new RenderMaterialParams();\n params.alpha = args.alpha;\n if (args.diffuse) {\n if (undefined !== args.diffuse.weight)\n params.diffuse = args.diffuse?.weight;\n\n if (args.diffuse?.color)\n params.diffuseColor = args.diffuse.color instanceof ColorDef ? args.diffuse.color : RgbColor.fromJSON(args.diffuse.color).toColorDef();\n }\n\n if (args.specular) {\n if (undefined !== args.specular.weight)\n params.specular = args.specular.weight;\n\n if (undefined !== args.specular.exponent)\n params.specularExponent = args.specular.exponent;\n\n if (args.specular.color)\n params.specularColor = args.specular.color instanceof ColorDef ? args.specular.color : RgbColor.fromJSON(args.specular.color).toColorDef();\n }\n\n return new Material(params);\n }\n}\n\n/** @internal */\nexport function toVertexTable(imdl: Imdl.VertexTable): VertexTable {\n return {\n ...imdl,\n uniformColor: undefined !== imdl.uniformColor ? ColorDef.fromJSON(imdl.uniformColor) : undefined,\n qparams: QParams3d.fromJSON(imdl.qparams),\n uvParams: imdl.uvParams ? QParams2d.fromJSON(imdl.uvParams) : undefined,\n };\n}\n\nfunction fromVertexTable(table: VertexTable): Imdl.VertexTable {\n return {\n ...table,\n uniformColor: table.uniformColor?.toJSON(),\n qparams: table.qparams.toJSON(),\n uvParams: table.uvParams?.toJSON(),\n };\n}\n\n/** @internal */\nexport function edgeParamsFromImdl(imdl: Imdl.EdgeParams): EdgeParams {\n return {\n ...imdl,\n segments: imdl.segments ? {\n ...imdl.segments,\n indices: new VertexIndices(imdl.segments.indices),\n } : undefined,\n silhouettes: imdl.silhouettes ? {\n ...imdl.silhouettes,\n indices: new VertexIndices(imdl.silhouettes.indices),\n } : undefined,\n polylineGroups: imdl.polylines ? [{\n polyline: {\n ...imdl.polylines,\n indices: new VertexIndices(imdl.polylines.indices),\n prevIndices: new VertexIndices(imdl.polylines.prevIndices),\n },\n }] : undefined,\n indexed: imdl.indexed ? {\n indices: new VertexIndices(imdl.indexed.indices),\n edges: imdl.indexed.edges,\n } : undefined,\n };\n}\n\n/** @internal */\nexport function edgeParamsToImdl(params: EdgeParams): Imdl.EdgeParams {\n return {\n ...params,\n segments: params.segments ? {\n ...params.segments,\n indices: params.segments.indices.data,\n } : undefined,\n silhouettes: params.silhouettes ? {\n ...params.silhouettes,\n indices: params.silhouettes.indices.data,\n } : undefined,\n polylines: params.polylineGroups?.length === 1 ? {\n ...params.polylineGroups[0].polyline,\n indices: params.polylineGroups[0].polyline.indices.data,\n prevIndices: params.polylineGroups[0].polyline.prevIndices.data,\n } : undefined,\n indexed: params.indexed ? {\n indices: params.indexed.indices.data,\n edges: params.indexed.edges,\n } : undefined,\n };\n}\n\nclass Parser {\n private readonly _document: Document;\n private readonly _binaryData: Uint8Array;\n private readonly _options: ImdlParserOptions;\n private readonly _featureTableInfo: FeatureTableInfo;\n private readonly _patterns = new Map<string, Imdl.Primitive[]>();\n private readonly _stream: ByteStream;\n private readonly _timeline?: ImdlTimeline;\n private _meshoptDecoder?: MeshoptDecoder;\n\n public constructor(doc: Document, binaryData: Uint8Array, options: ParseImdlDocumentArgs, featureTableInfo: FeatureTableInfo, stream: ByteStream) {\n this._document = doc;\n this._binaryData = binaryData;\n this._options = options;\n this._featureTableInfo = featureTableInfo;\n this._stream = stream;\n this._timeline = options.timeline;\n }\n\n public async parse(): Promise<Imdl.Document | ImdlParseError> {\n const featureTable = this.parseFeatureTable();\n if (!featureTable)\n return TileReadStatus.InvalidFeatureTable;\n\n if (this.hasMeshoptCompression()) {\n this._meshoptDecoder = await getMeshoptDecoder();\n if (!this._meshoptDecoder)\n return TileReadStatus.InvalidTileData;\n }\n\n const rtcCenter = this._document.rtcCenter ? {\n x: this._document.rtcCenter[0] ?? 0,\n y: this._document.rtcCenter[1] ?? 0,\n z: this._document.rtcCenter[2] ?? 0,\n } : undefined;\n\n const primitiveNodes = this.parseNodes(featureTable);\n const nodes = this.groupPrimitiveNodes(primitiveNodes, featureTable);\n\n return {\n featureTable,\n nodes,\n rtcCenter,\n binaryData: this._binaryData,\n json: this._document,\n patterns: this._patterns,\n };\n }\n\n private hasMeshoptCompression(): boolean {\n let hasMeshoptCompression = false;\n for (const meshKey of Object.keys(this._document.meshes)) {\n const mesh = this._document.meshes[meshKey];\n mesh?.primitives?.forEach((primitive) => {\n if (primitive.type !== \"areaPattern\") {\n const imdlPrimitive = primitive as ImdlMeshPrimitive;\n const vertexTable = imdlPrimitive.vertices;\n if (vertexTable.compressedSize && vertexTable.compressedSize > 0) {\n hasMeshoptCompression = true;\n }\n\n const surf = imdlPrimitive.surface;\n if (surf && surf.compressedIndexCount && surf.compressedIndexCount > 0) {\n hasMeshoptCompression = true;\n }\n }\n });\n }\n return hasMeshoptCompression;\n }\n\n private parseFeatureTable(): Imdl.FeatureTable | undefined {\n this._stream.curPos = this._featureTableInfo.startPos;\n const header = FeatureTableHeader.readFrom(this._stream);\n if (!header || 0 !== header.length % 4)\n return undefined;\n\n // NB: We make a copy of the sub-array because we don't want to pin the entire data array in memory.\n const numUint32s = (header.length - FeatureTableHeader.sizeInBytes) / 4;\n const packedFeatureArray = new Uint32Array(this._stream.nextUint32s(numUint32s));\n if (this._stream.isPastTheEnd)\n return undefined;\n\n let featureTable: Imdl.FeatureTable;\n if (this._featureTableInfo.multiModel) {\n featureTable = {\n multiModel: true,\n data: packedFeatureArray,\n numFeatures: header.count,\n numSubCategories: header.numSubCategories,\n };\n } else {\n let animNodesArray: Uint8Array | Uint16Array | Uint32Array | undefined;\n const animationNodes = this._document.animationNodes;\n if (undefined !== animationNodes) {\n const bytesPerId = JsonUtils.asInt(animationNodes.bytesPerId);\n const bufferViewId = JsonUtils.asString(animationNodes.bufferView);\n const bufferViewJson = this._document.bufferViews[bufferViewId];\n if (undefined !== bufferViewJson) {\n const byteOffset = JsonUtils.asInt(bufferViewJson.byteOffset);\n const byteLength = JsonUtils.asInt(bufferViewJson.byteLength);\n const bytes = this._binaryData.subarray(byteOffset, byteOffset + byteLength);\n switch (bytesPerId) {\n case 1:\n animNodesArray = new Uint8Array(bytes);\n break;\n case 2:\n // NB: A *copy* of the subarray.\n animNodesArray = Uint16Array.from(new Uint16Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / 2));\n break;\n case 4:\n // NB: A *copy* of the subarray.\n animNodesArray = Uint32Array.from(new Uint32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / 4));\n break;\n }\n }\n }\n\n featureTable = {\n multiModel: false,\n data: packedFeatureArray,\n numFeatures: header.count,\n animationNodeIds: animNodesArray,\n };\n }\n\n this._stream.curPos = this._featureTableInfo.startPos + header.length;\n return featureTable;\n }\n\n private parseNodes(featureTable: Imdl.FeatureTable): Imdl.PrimitivesNode[] {\n const nodes: Imdl.PrimitivesNode[] = [];\n const docNodes = this._document.nodes;\n const docMeshes = this._document.meshes;\n if (undefined === docNodes.Node_Root) {\n // A veeeery early version of the tile format (prior to introduction of schedule animation support) just supplied a flat list of meshes.\n // We shall never encounter such tiles again.\n return nodes;\n }\n\n for (const nodeKey of Object.keys(docNodes)) {\n const docNode = this._document.nodes[nodeKey];\n assert(undefined !== docNode); // we're iterating the keys...\n const docMesh = docMeshes[docNode];\n const docPrimitives = docMesh?.primitives;\n if (!docPrimitives)\n continue;\n\n const layerId = docMesh.layer;\n if (\"Node_Root\" === nodeKey) {\n if (this._timeline) {\n // Split up the root node into transform nodes.\n this.parseAnimationBranches(nodes, docMesh, featureTable, this._timeline);\n } else if (this._options.createUntransformedRootNode) {\n // If transform nodes exist in the tile tree, then we need to create a branch for the root node so that elements not associated with\n // any node in the schedule script can be grouped together.\n nodes.push({\n animationNodeId: AnimationNodeId.Untransformed,\n primitives: this.parseNodePrimitives(docPrimitives),\n });\n } else {\n nodes.push({ primitives: this.parseNodePrimitives(docPrimitives) });\n }\n } else if (undefined === layerId) {\n nodes.push({\n animationNodeId: extractNodeId(nodeKey),\n animationId: `${this._options.batchModelId}_${nodeKey}`,\n primitives: this.parseNodePrimitives(docPrimitives),\n });\n } else {\n nodes.push({\n layerId,\n primitives: this.parseNodePrimitives(docPrimitives),\n });\n }\n }\n\n return nodes;\n }\n\n private parseAnimationBranches(output: Imdl.Node[], docMesh: ImdlMesh, imdlFeatureTable: Imdl.FeatureTable, timeline: ImdlTimeline): void {\n const docPrimitives = docMesh.primitives;\n if (!docPrimitives)\n return;\n\n const primitives = docPrimitives.map((x) => this.parseNodePrimitive(x)).filter<Imdl.NodePrimitive>((x): x is Imdl.NodePrimitive => x !== undefined);\n if (primitives.length === 0)\n return;\n\n const nodesById = new Map<number, Imdl.AnimationNode>();\n const getNode = (nodeId: number | undefined): Imdl.AnimationNode => {\n nodeId = nodeId ?? AnimationNodeId.Untransformed;\n let node = nodesById.get(nodeId);\n if (!node) {\n node = {\n animationNodeId: nodeId,\n animationId: `${this._options.batchModelId}_Node_${nodeId}`,\n primitives: [],\n };\n\n nodesById.set(nodeId, node);\n output.push(node);\n }\n\n return node;\n };\n\n // NB: The BatchType is irrelevant - just use Primary.\n assert(undefined === imdlFeatureTable.animationNodeIds);\n const featureTable = convertFeatureTable(imdlFeatureTable, this._options.batchModelId);\n featureTable.populateAnimationNodeIds((feature) => timeline.getBatchIdForFeature(feature), timeline.maxBatchId);\n imdlFeatureTable.animationNodeIds = featureTable.animationNodeIds;\n\n const discreteNodeIds = timeline.discreteBatchIds;\n const computeNodeId: ComputeAnimationNodeId = (featureIndex) => {\n const nodeId = featureTable.getAnimationNodeId(featureIndex);\n return 0 !== nodeId && discreteNodeIds.has(nodeId) ? nodeId : 0;\n };\n\n this.splitPrimitives(primitives, featureTable, computeNodeId, getNode);\n }\n\n private splitPrimitives(primitives: Imdl.NodePrimitive[], featureTable: RenderFeatureTable, computeNodeId: ComputeAnimationNodeId, getPrimitivesNode: (nodeId: number | undefined) => Imdl.PrimitivesNode): void {\n const splitArgs = {\n maxDimension: this._options.maxVertexTableSize,\n computeNodeId,\n featureTable,\n };\n\n const convertMaterial = (imdl: Imdl.SurfaceMaterial | undefined): SurfaceMaterial | undefined => {\n if (!imdl)\n return undefined;\n else if (imdl.isAtlas)\n return imdl;\n\n const material = (typeof imdl.material === \"string\") ? this.materialFromJson(imdl.material) : Material.create(toMaterialParams(imdl.material));\n return material ? { isAtlas: false, material } : undefined;\n };\n\n for (const primitive of primitives) {\n switch (primitive.type) {\n case \"pattern\": {\n // ###TODO splitting area patterns\n getPrimitivesNode(undefined).primitives.push(primitive);\n break;\n }\n case \"mesh\": {\n const mesh = primitive.params;\n const texMap = mesh.surface.textureMapping;\n const params: MeshParams = {\n vertices: toVertexTable(primitive.params.vertices),\n surface: {\n ...primitive.params.surface,\n indices: new VertexIndices(primitive.params.surface.indices),\n material: convertMaterial(mesh.surface.material),\n textureMapping: texMap ? {\n alwaysDisplayed: texMap.alwaysDisplayed,\n // The texture type doesn't actually matter here.\n texture: typeof texMap.texture === \"string\" ? new NamedTexture(texMap.texture, RenderTexture.Type.Normal) : new GradientTexture(texMap.texture),\n } : undefined,\n },\n edges: primitive.params.edges ? edgeParamsFromImdl(primitive.params.edges) : undefined,\n isPlanar: primitive.params.isPlanar,\n auxChannels: primitive.params.auxChannels ? AuxChannelTable.fromJSON(primitive.params.auxChannels) : undefined,\n };\n\n const split = splitMeshParams({\n ...splitArgs,\n params,\n createMaterial: (args) => Material.create(args),\n });\n for (const [nodeId, p] of split) {\n let material: Imdl.SurfaceMaterial | undefined;\n if (p.surface.material) {\n if (p.surface.material.isAtlas) {\n material = p.surface.material;\n } else {\n assert(p.surface.material.material instanceof Material);\n material = p.surface.material.material.toImdl();\n }\n }\n\n assert(p.surface.textureMapping === undefined || p.surface.textureMapping.texture instanceof Texture);\n getPrimitivesNode(nodeId).primitives.push({\n type: \"mesh\",\n modifier: primitive.modifier,\n params: {\n vertices: fromVertexTable(p.vertices),\n surface: {\n ...p.surface,\n indices: p.surface.indices.data,\n material,\n textureMapping: p.surface.textureMapping?.texture instanceof Texture ? {\n texture: p.surface.textureMapping.texture.toImdl(),\n alwaysDisplayed: p.surface.textureMapping.alwaysDisplayed,\n } : undefined,\n },\n edges: p.edges ? edgeParamsToImdl(p.edges) : undefined,\n isPlanar: p.isPlanar,\n auxChannels: p.auxChannels?.toJSON(),\n },\n });\n }\n\n break;\n }\n case \"point\": {\n const params = {\n vertices: toVertexTable(primitive.params.vertices),\n indices: new VertexIndices(primitive.params.indices),\n weight: primitive.params.weight,\n };\n\n const split = splitPointStringParams({ ...splitArgs, params });\n for (const [nodeId, p] of split) {\n getPrimitivesNode(nodeId).primitives.push({\n type: \"point\",\n modifier: primitive.modifier,\n params: {\n vertices: fromVertexTable(p.vertices),\n indices: p.indices.data,\n weight: p.weight,\n },\n });\n }\n\n break;\n }\n case \"polyline\": {\n const params = {\n ...primitive.params,\n vertices: toVertexTable(primitive.params.vertices),\n polyline: {\n indices: new VertexIndices(primitive.params.polyline.indices),\n prevIndices: new VertexIndices(primitive.params.polyline.prevIndices),\n nextIndicesAndParams: primitive.params.polyline.nextIndicesAndParams,\n },\n };\n\n const split = splitPolylineParams({ ...splitArgs, params });\n for (const [nodeId, p] of split) {\n getPrimitivesNode(nodeId).primitives.push({\n type: \"polyline\",\n modifier: primitive.modifier,\n params: {\n ...p,\n vertices: fromVertexTable(p.vertices),\n polyline: {\n indices: p.polyline.indices.data,\n prevIndices: p.polyline.prevIndices.data,\n nextIndicesAndParams: p.polyline.nextIndicesAndParams,\n },\n },\n });\n }\n\n break;\n }\n }\n }\n }\n\n private groupPrimitiveNodes(inputNodes: Imdl.PrimitivesNode[], imdlFeatureTable: Imdl.FeatureTable): Imdl.Node[] {\n const modelGroups = this._options.modelGroups;\n if (!modelGroups?.length)\n return inputNodes;\n\n const groupNodes: Imdl.GroupNode[] = [];\n let orphanNode: Imdl.GroupNode | undefined;\n const getGroupNode = (groupId: number): Imdl.GroupNode => {\n assert(groupId <= modelGroups.length);\n if (groupId === modelGroups.length) {\n // This would happen if:\n // - The tile contains geometry from a model not present in modelGroups (should never occur); or\n // - The tile contains an area pattern (we haven't yet implemented splitting for them).\n // In either case, orphaned geometry will end up getting discarded.\n return orphanNode ?? (orphanNode = { groupId, nodes: [] });\n }\n\n let groupNode = groupNodes[groupId];\n if (!groupNode)\n groupNodes[groupId] = groupNode = { groupId, nodes: [] };\n\n return groupNode;\n };\n\n const featureTable = convertFeatureTable(imdlFeatureTable, this._options.batchModelId);\n const modelIdPair = { lower: 0, upper: 0 };\n const computeNodeId: ComputeAnimationNodeId = (featureIndex) => {\n featureTable.getModelIdPair(featureIndex, modelIdPair);\n const modelId = Id64.fromUint32PairObject(modelIdPair);\n for (let i = 0; i < modelGroups.length; i++) {\n if (modelGroups[i].has(modelId))\n return i;\n }\n\n return modelGroups.length;\n };\n\n for (const inputNode of inputNodes) {\n // Indexed by model group index.\n const splitNodes: Imdl.PrimitivesNode[] = [];\n const getSplitNode = (groupIndex: number | undefined) => {\n groupIndex = groupIndex ?? modelGroups.length;\n if (!splitNodes[groupIndex]) {\n const splitNode = splitNodes[groupIndex] = { ...inputNode, primitives: [] };\n getGroupNode(groupIndex).nodes.push(splitNode);\n }\n\n return splitNodes[groupIndex];\n };\n\n this.splitPrimitives(inputNode.primitives, featureTable, computeNodeId, getSplitNode);\n }\n\n return groupNodes.filter<Imdl.GroupNode>((x): x is Imdl.GroupNode => undefined !== x);\n }\n\n private parseTesselatedPolyline(json: ImdlPolyline): Imdl.TesselatedPolyline | undefined {\n const indices = this.findBuffer(json.indices);\n const prevIndices = this.findBuffer(json.prevIndices);\n const nextIndicesAndParams = this.findBuffer(json.nextIndicesAndParams);\n\n return indices && prevIndices && nextIndicesAndParams ? { indices, prevIndices, nextIndicesAndParams } : undefined;\n }\n\n private parseSegmentEdges(imdl: ImdlSegmentEdges): Imdl.SegmentEdgeParams | undefined {\n const indices = this.findBuffer(imdl.indices);\n const endPointAndQuadIndices = this.findBuffer(imdl.endPointAndQuadIndices);\n return indices && endPointAndQuadIndices ? { indices, endPointAndQuadIndices } : undefined;\n }\n\n private parseSilhouetteEdges(imdl: ImdlSilhouetteEdges): Imdl.SilhouetteParams | undefined {\n const segments = this.parseSegmentEdges(imdl);\n const normalPairs = this.findBuffer(imdl.normalPairs);\n return segments && normalPairs ? { ...segments, normalPairs } : undefined;\n }\n\n private parseIndexedEdges(imdl: ImdlIndexedEdges): Imdl.IndexedEdgeParams | undefined {\n const indices = this.findBuffer(imdl.indices);\n const edgeTable = this.findBuffer(imdl.edges);\n if (!indices || !edgeTable)\n return undefined;\n\n return {\n indices,\n edges: {\n data: edgeTable,\n width: imdl.width,\n height: imdl.height,\n silhouettePadding: imdl.silhouettePadding,\n numSegments: imdl.numSegments,\n },\n };\n }\n\n private parseCompactEdges(imdl: ImdlCompactEdges, vertexIndices: VertexIndices): Imdl.IndexedEdgeParams | undefined {\n const visibility = this.findBuffer(imdl.visibility);\n if (!visibility)\n return undefined;\n\n const normals = undefined !== imdl.normalPairs ? this.findBuffer(imdl.normalPairs) : undefined;\n return indexedEdgeParamsFromCompactEdges({\n numVisibleEdges: imdl.numVisible,\n visibility,\n vertexIndices,\n normalPairs: normals ? new Uint32Array(normals.buffer, normals.byteOffset, normals.byteLength / 4) : undefined,\n maxEdgeTableDimension: this._options.maxVertexTableSize,\n });\n }\n\n private parseEdges(imdl: ImdlMeshEdges | undefined, displayParams: DisplayParams, indices: Uint8Array): Imdl.EdgeParams | undefined {\n if (!imdl)\n return undefined;\n\n const segments = imdl.segments ? this.parseSegmentEdges(imdl.segments) : undefined;\n const silhouettes = imdl.silhouettes ? this.parseSilhouetteEdges(imdl.silhouettes) : undefined;\n const polylines = imdl.polylines ? this.parseTesselatedPolyline(imdl.polylines) : undefined;\n\n let indexed = imdl.indexed ? this.parseIndexedEdges(imdl.indexed) : undefined;\n if (!indexed && imdl.compact)\n indexed = this.parseCompactEdges(imdl.compact, new VertexIndices(indices));\n\n if (!segments && !silhouettes && !indexed && !polylines)\n return undefined;\n\n return {\n segments,\n silhouettes,\n polylines,\n indexed,\n weight: displayParams.width,\n linePixels: displayParams.linePixels,\n };\n }\n\n private getPattern(name: string): Imdl.Primitive[] | undefined {\n let primitives = this._patterns.get(name);\n if (!primitives) {\n const symbol = this._document.patternSymbols[name];\n primitives = symbol ? this.parsePrimitives(symbol.primitives) : [];\n this._patterns.set(name, primitives);\n }\n\n return primitives.length > 0 ? primitives : undefined;\n }\n\n private parseAreaPattern(json: ImdlAreaPattern): Imdl.NodePrimitive | undefined {\n const primitives = this.getPattern(json.symbolName);\n if (!primitives || primitives.length === 0)\n return undefined;\n\n const xyOffsets = this.findBuffer(json.xyOffsets);\n if (!xyOffsets)\n return undefined;\n\n return {\n type: \"pattern\",\n params: {\n ...json,\n xyOffsets: new Float32Array(xyOffsets.buffer, xyOffsets.byteOffset, xyOffsets.byteLength / 4),\n },\n };\n }\n\n private parseNodePrimitives(docPrimitives: Array<AnyImdlPrimitive | ImdlAreaPattern>): Imdl.NodePrimitive[] {\n const primitives = [];\n for (const docPrimitive of docPrimitives) {\n const primitive = this.parseNodePrimitive(docPrimitive);\n if (primitive)\n primitives.push(primitive);\n }\n\n return primitives;\n }\n\n private parseNodePrimitive(docPrimitive: AnyImdlPrimitive | ImdlAreaPattern): Imdl.NodePrimitive | undefined {\n return docPrimitive.type === \"areaPattern\" ? this.parseAreaPattern(docPrimitive) : this.parsePrimitive(docPrimitive);\n }\n\n private parsePrimitives(docPrimitives: Array<AnyImdlPrimitive>): Imdl.Primitive[] {\n const primitives = [];\n for (const docPrimitive of docPrimitives) {\n const primitive = this.parsePrimitive(docPrimitive);\n if (primitive)\n primitives.push(primitive);\n }\n\n return primitives;\n }\n\n private parsePrimitive(docPrimitive: AnyImdlPrimitive): Imdl.Primitive | undefined {\n let modifier: Imdl.PrimitiveModifier | undefined = this.parseInstances(docPrimitive);\n if (!modifier && docPrimitive.viewIndependentOrigin) {\n const origin = Point3d.fromJSON(docPrimitive.viewIndependentOrigin);\n modifier = {\n type: \"viewIndependentOrigin\",\n origin: { x: origin.x, y: origin.y, z: origin.z },\n };\n }\n\n const materialName = docPrimitive.material ?? \"\";\n const dpMaterial = materialName.length ? JsonUtils.asObject(this._document.materials[materialName]) : undefined;\n const displayParams = dpMaterial ? this.parseDisplayParams(dpMaterial) : undefined;\n if (!displayParams)\n return undefined;\n\n const vertices = this.parseVertexTable(docPrimitive);\n if (!vertices)\n return undefined;\n\n let primitive: Imdl.Primitive | undefined;\n const isPlanar = !this._options.is3d || JsonUtils.asBool(docPrimitive.isPlanar);\n switch (docPrimitive.type) {\n case MeshPrimitiveType.Mesh: {\n const surface = this.parseSurface(docPrimitive, displayParams);\n if (surface) {\n primitive = {\n type: \"mesh\",\n params: {\n vertices,\n surface,\n isPlanar,\n auxChannels: this.parseAuxChannelTable(docPrimitive),\n edges: this.parseEdges(docPrimitive.edges, displayParams, surface.indices),\n },\n };\n }\n\n break;\n }\n case MeshPrimitiveType.Polyline: {\n const polyline = this.parseTesselatedPolyline(docPrimitive);\n if (polyline) {\n let type = PolylineTypeFlags.Normal;\n if (DisplayParams.RegionEdgeType.Outline === displayParams.regionEdgeType)\n type = (!displayParams.gradient || displayParams.gradient.isOutlined) ? PolylineTypeFlags.Edge : PolylineTypeFlags.Outline;\n\n primitive = {\n type: \"polyline\",\n params: {\n vertices,\n polyline,\n isPlanar,\n type,\n weight: displayParams.width,\n linePixels: displayParams.linePixels,\n },\n };\n }\n\n break;\n }\n case MeshPrimitiveType.Point: {\n const indices = this.findBuffer(docPrimitive.indices);\n const weight = displayParams.width;\n if (indices) {\n primitive = {\n type: \"point\",\n params: { vertices, indices, weight },\n };\n }\n\n break;\n }\n }\n\n if (primitive)\n primitive.modifier = modifier;\n\n return primitive;\n }\n\n private parseSurface(mesh: ImdlMeshPrimitive, displayParams: DisplayParams): Imdl.SurfaceParams | undefined {\n const surf = mesh.surface;\n if (!surf)\n return undefined;\n\n let indices = this.findBuffer(surf.indices);\n if (!indices)\n return undefined;\n\n if (surf.compressedIndexCount && surf.compressedIndexCount > 0) {\n\n if (!this._meshoptDecoder) {\n return undefined;\n }\n\n const decompressedIndices = new Uint8Array(surf.compressedIndexCount * 4);\n this._meshoptDecoder.decodeIndexSequence(decompressedIndices, surf.compressedIndexCount, 4, indices);\n\n // reduce from 32 to 24 bits\n indices = new Uint8Array(surf.compressedIndexCount * 3);\n for (let i = 0; i < surf.compressedIndexCount; i++) {\n const srcIndex = i * 4;\n const dstIndex = i * 3;\n indices[dstIndex + 0] = decompressedIndices[srcIndex + 0];\n indices[dstIndex + 1] = decompressedIndices[srcIndex + 1];\n indices[dstIndex + 2] = decompressedIndices[srcIndex + 2];\n }\n }\n\n const type = surf.type;\n if (!isValidSurfaceType(type))\n return undefined;\n\n const texture = displayParams.textureMapping?.texture;\n let material: Imdl.SurfaceMaterial | undefined;\n const atlas = mesh.vertices.materialAtlas;\n const numColors = mesh.vertices.numColors;\n if (atlas && undefined !== numColors) {\n material = {\n isAtlas: true,\n hasTranslucency: JsonUtils.asBool(atlas.hasTranslucency),\n overridesAlpha: JsonUtils.asBool(atlas.overridesAlpha, false),\n vertexTableOffset: JsonUtils.asInt(numColors),\n numMaterials: JsonUtils.asInt(atlas.numMaterials),\n };\n } else if (displayParams.material) {\n assert(displayParams.material instanceof Material);\n material = displayParams.material.toImdl();\n }\n\n let textureMapping;\n if (texture) {\n assert(texture instanceof Texture);\n textureMapping = {\n texture: texture.toImdl(),\n alwaysDisplayed: JsonUtils.asBool(surf.alwaysDisplayTexture),\n };\n }\n\n return {\n type,\n indices,\n fillFlags: displayParams.fillFlags,\n hasBakedLighting: false,\n material,\n textureMapping,\n };\n }\n\n private parseAuxChannelTable(primitive: ImdlMeshPrimitive): AuxChannelTableProps | undefined {\n const json = primitive.auxChannels;\n if (undefined === json)\n return undefined;\n\n const bytes = this.findBuffer(JsonUtils.asString(json.bufferView));\n if (undefined === bytes)\n return undefined;\n\n return {\n data: bytes,\n width: json.width,\n height: json.height,\n count: json.count,\n numBytesPerVertex: json.numBytesPerVertex,\n displacements: json.displacements,\n normals: json.normals,\n params: json.params,\n };\n }\n\n private parseVertexTable(primitive: AnyImdlPrimitive): Imdl.VertexTable | undefined {\n const json = primitive.vertices;\n if (!json)\n return undefined;\n\n let bytes: Uint8Array | undefined;\n if (json.compressedSize && json.compressedSize > 0) {\n\n if (!this._meshoptDecoder) {\n return undefined;\n }\n\n const bufferViewJson = this._document.bufferViews[JsonUtils.asString(json.bufferView)];\n if (undefined === bufferViewJson)\n return undefined;\n\n const byteOffset = JsonUtils.asInt(bufferViewJson.byteOffset);\n const byteLength = JsonUtils.asInt(bufferViewJson.byteLength);\n if (0 === byteLength)\n return undefined;\n\n const compressedBytes = this._binaryData.subarray(byteOffset, byteOffset + json.compressedSize);\n if (!compressedBytes)\n return undefined;\n\n bytes = new Uint8Array(json.width * json.height * 4);\n this._meshoptDecoder.decodeVertexBuffer(bytes, json.count, json.numRgbaPerVertex * 4, compressedBytes);\n\n const remainingBytesSize = byteLength - json.compressedSize;\n\n // if there are remaining bytes, copy the data that did not go through the compression\n if (remainingBytesSize > 0) {\n const remainingBytes = this._binaryData.subarray(byteOffset + json.compressedSize, byteOffset + byteLength);\n if (!remainingBytes)\n return undefined;\n\n const decompressedSize = json.count * json.numRgbaPerVertex * 4;\n for (let i = 0; i < remainingBytesSize; i++) {\n bytes[decompressedSize + i] = remainingBytes[i];\n }\n }\n\n } else {\n bytes = this.findBuffer(JsonUtils.asString(json.bufferView));\n if (!bytes)\n return undefined;\n }\n\n const uniformFeatureID = undefined !== json.featureID ? JsonUtils.asInt(json.featureID) : undefined;\n\n const rangeMin = JsonUtils.asArray(json.params.decodedMin);\n const rangeMax = JsonUtils.asArray(json.params.decodedMax);\n if (undefined === rangeMin || undefined === rangeMax)\n return undefined;\n\n const qparams = QParams3d.fromRange(Range3d.create(Point3d.create(rangeMin[0], rangeMin[1], rangeMin[2]), Point3d.create(rangeMax[0], rangeMax[1], rangeMax[2])));\n\n const uniformColor = undefined !== json.uniformColor ? ColorDef.fromJSON(json.uniformColor) : undefined;\n let uvParams: QParams2d | undefined;\n if (MeshPrimitiveType.Mesh === primitive.type && primitive.surface && primitive.surface.uvParams) {\n const uvMin = primitive.surface.uvParams.decodedMin;\n const uvMax = primitive.surface.uvParams.decodedMax;\n const uvRange = new Range2d(uvMin[0], uvMin[1], uvMax[0], uvMax[1]);\n uvParams = QParams2d.fromRange(uvRange);\n }\n\n return {\n data: bytes,\n usesUnquantizedPositions: true === json.usesUnquantizedPositions,\n qparams: qparams.toJSON(),\n width: json.width,\n height: json.height,\n hasTranslucency: json.hasTranslucency,\n uniformColor: uniformColor?.toJSON(),\n featureIndexType: json.featureIndexType,\n uniformFeatureID,\n numVertices: json.count,\n numRgbaPerVertex: json.numRgbaPerVertex,\n uvParams: uvParams?.toJSON(),\n };\n }\n\n private parseInstances(primitive: AnyImdlPrimitive): Imdl.Instances | undefined {\n const json = primitive.instances;\n if (!json)\n return undefined;\n\n const count = JsonUtils.asInt(json.count, 0);\n if (count <= 0)\n return undefined;\n\n const centerComponents = JsonUtils.asArray(json.transformCenter);\n if (undefined === centerComponents || 3 !== centerComponents.length)\n return undefined;\n\n const transformCenter = Point3d.create(centerComponents[0], centerComponents[1], centerComponents[2]);\n\n const featureIds = this.findBuffer(JsonUtils.asString(json.featureIds));\n if (undefined === featureIds)\n return undefined;\n\n const transformBytes = this.findBuffer(JsonUtils.asString(json.transforms));\n if (undefined === transformBytes)\n return undefined;\n\n // 1 transform = 3 rows of 4 floats = 12 floats per instance\n const numFloats = transformBytes.byteLength / 4;\n assert(Math.floor(numFloats) === numFloats);\n assert(0 === numFloats % 12);\n\n const transforms = new Float32Array(transformBytes.buffer, transformBytes.byteOffset, numFloats);\n\n let symbologyOverrides: Uint8Array | undefined;\n if (undefined !== json.symbologyOverrides)\n symbologyOverrides = this.findBuffer(JsonUtils.asString(json.symbologyOverrides));\n\n return {\n type: \"instances\",\n count,\n transforms,\n transformCenter,\n featureIds,\n symbologyOverrides,\n };\n }\n\n private findBuffer(bufferViewId: string): Uint8Array | undefined {\n if (typeof bufferViewId !== \"string\" || 0 === bufferViewId.length)\n return undefined;\n\n const bufferViewJson = this._document.bufferViews[bufferViewId];\n if (undefined === bufferViewJson)\n return undefined;\n\n const byteOffset = JsonUtils.asInt(bufferViewJson.byteOffset);\n const byteLength = JsonUtils.asInt(bufferViewJson.byteLength);\n if (0 === byteLength)\n return undefined;\n\n return this._binaryData.subarray(byteOffset, byteOffset + byteLength);\n }\n\n private colorDefFromMaterialJson(json: ImdlColorDef | undefined): ColorDef | undefined {\n return undefined !== json ? ColorDef.from(json[0] * 255 + 0.5, json[1] * 255 + 0.5, json[2] * 255 + 0.5) : undefined;\n }\n\n private materialFromJson(key: string): RenderMaterial | undefined {\n const materialJson = this._document.renderMaterials[key];\n if (!materialJson)\n return undefined;\n\n const materialParams = new RenderMaterialParams(key);\n materialParams.diffuseColor = this.colorDefFromMaterialJson(materialJson.diffuseColor);\n if (materialJson.diffuse !== undefined)\n materialParams.diffuse = JsonUtils.asDouble(materialJson.diffuse);\n\n materialParams.specularColor = this.colorDefFromMaterialJson(materialJson.specularColor);\n if (materialJson.specular !== undefined)\n materialParams.specular = JsonUtils.asDouble(materialJson.specular);\n\n materialParams.reflectColor = this.colorDefFromMaterialJson(materialJson.reflectColor);\n if (materialJson.reflect !== undefined)\n materialParams.reflect = JsonUtils.asDouble(materialJson.reflect);\n\n if (materialJson.specularExponent !== undefined)\n materialParams.specularExponent = materialJson.specularExponent;\n\n if (undefined !== materialJson.transparency)\n materialParams.alpha = 1.0 - materialJson.transparency;\n\n materialParams.refract = JsonUtils.asDouble(materialJson.refract);\n materialParams.shadows = JsonUtils.asBool(materialJson.shadows);\n materialParams.ambient = JsonUtils.asDouble(materialJson.ambient);\n\n if (undefined !== materialJson.textureMapping)\n materialParams.textureMapping = this.textureMappingFromJson(materialJson.textureMapping.texture);\n return new Material(materialParams);\n }\n\n private parseNamedTexture(namedTex: ImdlNamedTexture, name: string): RenderTexture | undefined {\n const textureType = JsonUtils.asBool(namedTex.isGlyph) ? RenderTexture.Type.Glyph :\n (JsonUtils.asBool(namedTex.isTileSection) ? RenderTexture.Type.TileSection : RenderTexture.Type.Normal);\n\n return new NamedTexture(name, textureType);\n }\n\n private parseConstantLodProps(propsJson: { repetitions?: number, offset?: number[], minDistClamp?: number, maxDistClamp?: number } | undefined): TextureMapping.ConstantLodParamProps | undefined {\n if (undefined === propsJson)\n return undefined;\n\n return {\n repetitions: JsonUtils.asDouble(propsJson.repetitions, 1.0),\n offset: { x: propsJson.offset ? JsonUtils.asDouble(propsJson.offset[0]) : 0.0, y: propsJson.offset ? JsonUtils.asDouble(propsJson.offset[1]) : 0.0 },\n minDistClamp: JsonUtils.asDouble(propsJson.minDistClamp, 1.0),\n maxDistClamp: JsonUtils.asDouble(propsJson.maxDistClamp, 4096.0 * 1024.0 * 1024.0),\n };\n }\n\n private textureMappingFromJson(json: ImdlTextureMapping | undefined): TextureMapping | undefined {\n if (!json)\n return undefined;\n\n const name = JsonUtils.asString(json.name);\n const namedTex = 0 !== name.length ? this._document.namedTextures[name] : undefined;\n const texture = namedTex ? this.parseNamedTexture(namedTex, name) : undefined;\n if (!texture)\n return undefined;\n\n const paramsJson = json.params;\n const tf = paramsJson.transform;\n const paramProps: TextureMapping.ParamProps = {\n textureMat2x3: new TextureMapping.Trans2x3(tf[0][0], tf[0][1], tf[0][2], tf[1][0], tf[1][1], tf[1][2]),\n textureWeight: JsonUtils.asDouble(paramsJson.weight, 1.0),\n mapMode: JsonUtils.asInt(paramsJson.mode),\n worldMapping: JsonUtils.asBool(paramsJson.worldMapping),\n useConstantLod: JsonUtils.asBool(paramsJson.useConstantLod),\n constantLodProps: this.parseConstantLodProps(paramsJson.constantLodParams),\n };\n\n const textureMapping = new TextureMapping(texture, new TextureMapping.Params(paramProps));\n\n const normalMapJson = json.normalMapParams;\n if (normalMapJson) {\n const normalTexName = JsonUtils.asString(normalMapJson.textureName);\n const namedNormalTex = normalTexName.length > 0 ? this._document.namedTextures[normalTexName] : undefined;\n const normalMap = namedNormalTex ? this.parseNamedTexture(namedNormalTex, normalTexName) : undefined;\n if (normalMap) {\n textureMapping.normalMapParams = {\n normalMap,\n greenUp: JsonUtils.asBool(normalMapJson.greenUp),\n scale: JsonUtils.asDouble(normalMapJson.scale, 1),\n useConstantLod: JsonUtils.asBool(normalMapJson.useConstantLod),\n };\n }\n }\n\n return textureMapping;\n }\n\n private parseDisplayParams(json: ImdlDisplayParams): DisplayParams | undefined {\n const type = JsonUtils.asInt(json.type, DisplayParams.Type.Mesh);\n const lineColor = ColorDef.create(JsonUtils.asInt(json.lineColor));\n const fillColor = ColorDef.create(JsonUtils.asInt(json.fillColor));\n const width = JsonUtils.asInt(json.lineWidth);\n const linePixels = JsonUtils.asInt(json.linePixels, LinePixels.Solid);\n const fillFlags = JsonUtils.asInt(json.fillFlags, FillFlags.None);\n const ignoreLighting = JsonUtils.asBool(json.ignoreLighting);\n\n // Material will always contain its own texture if it has one\n const materialKey = json.materialId;\n const material = undefined !== materialKey ? this.materialFromJson(materialKey) : undefined;\n\n // We will only attempt to include the texture if material is undefined\n let textureMapping;\n let gradient: Gradient.Symb | undefined;\n if (!material) {\n const textureJson = json.texture;\n textureMapping = undefined !== textureJson ? this.textureMappingFromJson(textureJson) : undefined;\n\n if (undefined === textureMapping) {\n const gradientProps = json.gradient;\n gradient = undefined !== gradientProps ? Gradient.Symb.fromJSON(gradientProps) : undefined;\n if (gradient) {\n assert(undefined !== gradientProps);\n const texture = new GradientTexture(gradientProps);\n textureMapping = new TextureMapping(texture, new TextureMapping.Params({ textureMat2x3: new TextureMapping.Trans2x3(0, 1, 0, 1, 0, 0) }));\n }\n }\n }\n\n return new DisplayParams(type, lineColor, fillColor, width, linePixels, fillFlags, material, gradient, ignoreLighting, textureMapping);\n }\n}\n\n/** @internal */\nexport function toMaterialParams(mat: Imdl.SurfaceMaterialParams): MaterialParams {\n const args: MaterialParams = { alpha: mat.alpha };\n if (mat.diffuse) {\n args.diffuse = {\n weight: mat.diffuse.weight,\n color: undefined !== mat.diffuse.color ? ColorDef.fromJSON(mat.diffuse.color) : undefined,\n };\n }\n\n if (mat.specular) {\n args.specular = {\n weight: mat.specular.weight,\n exponent: mat.specular.exponent,\n color: undefined !== mat.specular.color ? ColorDef.fromJSON(mat.specular.color) : undefined,\n };\n }\n\n return args;\n}\n\n/** @internal */\nexport function convertFeatureTable(imdlFeatureTable: Imdl.FeatureTable, batchModelId: Id64String): RenderFeatureTable {\n const table = imdlFeatureTable.multiModel\n ? MultiModelPackedFeatureTable.create(imdlFeatureTable.data, batchModelId, imdlFeatureTable.numFeatures, BatchType.Primary, imdlFeatureTable.numSubCategories)\n : new PackedFeatureTable(imdlFeatureTable.data, batchModelId, imdlFeatureTable.numFeatures, BatchType.Primary);\n\n table.animationNodeIds = imdlFeatureTable.animationNodeIds;\n return table;\n}\n\n/** @internal */\nexport async function parseImdlDocument(options: ParseImdlDocumentArgs): Promise<Imdl.Document | ImdlParseError> {\n\n const stream = ByteStream.fromUint8Array(options.data);\n const imdlHeader = new ImdlHeader(stream);\n if (!imdlHeader.isValid)\n return TileReadStatus.InvalidHeader;\n else if (!imdlHeader.isReadableVersion)\n return TileReadStatus.NewerMajorVersion;\n\n // Skip the feature table - we need to parse the JSON segment first to access its animationNodeIds.\n const ftStartPos = stream.curPos;\n const ftHeader = FeatureTableHeader.readFrom(stream);\n if (!ftHeader)\n return TileReadStatus.InvalidFeatureTable;\n\n stream.curPos = ftStartPos + ftHeader.length;\n\n // A glTF header follows the feature table\n const gltfHeader = new GltfHeader(stream);\n if (!gltfHeader.isValid)\n return TileReadStatus.InvalidTileData;\n\n stream.curPos = gltfHeader.scenePosition;\n const sceneStrData = stream.nextBytes(gltfHeader.sceneStrLength);\n const sceneStr = utf8ToString(sceneStrData);\n if (!sceneStr)\n return TileReadStatus.InvalidScene;\n\n try {\n const sceneValue = JSON.parse(sceneStr);\n const imdlDoc: Document = {\n scene: JsonUtils.asString(sceneValue.scene),\n scenes: JsonUtils.asArray(sceneValue.scenes),\n animationNodes: JsonUtils.asObject(sceneValue.animationNodes),\n bufferViews: JsonUtils.asObject(sceneValue.bufferViews) ?? {},\n meshes: JsonUtils.asObject(sceneValue.meshes),\n nodes: JsonUtils.asObject(sceneValue.nodes) ?? {},\n materials: JsonUtils.asObject(sceneValue.materials) ?? {},\n renderMaterials: JsonUtils.asObject(sceneValue.renderMaterials) ?? {},\n namedTextures: JsonUtils.asObject(sceneValue.namedTextures) ?? {},\n patternSymbols: JsonUtils.asObject(sceneValue.patternSymbols) ?? {},\n rtcCenter: JsonUtils.asArray(sceneValue.rtcCenter),\n };\n\n if (!imdlDoc.meshes)\n return TileReadStatus.InvalidTileData;\n\n const binaryData = new Uint8Array(stream.arrayBuffer, gltfHeader.binaryPosition);\n const featureTable = {\n startPos: ftStartPos,\n multiModel: 0 !== (imdlHeader.flags & ImdlFlags.MultiModelFeatureTable),\n };\n\n const parser = new Parser(imdlDoc, binaryData, options, featureTable, stream);\n return await parser.parse();\n } catch {\n return TileReadStatus.InvalidTileData;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ParseImdlDocument.js","sourceRoot":"","sources":["../../../../src/common/imdl/ParseImdlDocument.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Tiles\n */\n\nimport { assert, ByteStream, Id64, Id64Set, Id64String, JsonUtils, utf8ToString } from \"@itwin/core-bentley\";\nimport { Point3d, Range2d, Range3d } from \"@itwin/core-geometry\";\nimport {\n BatchType, ColorDef, FeatureTableHeader, FillFlags, GltfHeader, Gradient, ImdlFlags, ImdlHeader, LinePixels, MultiModelPackedFeatureTable,\n PackedFeatureTable, PolylineTypeFlags, QParams2d, QParams3d, RenderFeatureTable, RenderMaterial, RenderMaterialParams, RenderSchedule, RenderTexture, RgbColor,\n TextureMapping, TileReadStatus,\n} from \"@itwin/core-common\";\nimport { ImdlModel as Imdl } from \"./ImdlModel\";\nimport {\n AnyImdlPrimitive, ImdlAreaPattern, ImdlColorDef, ImdlCompactEdges, ImdlDisplayParams, ImdlDocument, ImdlIndexedEdges, ImdlMesh, ImdlMeshEdges,\n ImdlMeshPrimitive, ImdlNamedTexture, ImdlPolyline, ImdlSegmentEdges, ImdlSilhouetteEdges, ImdlTextureMapping,\n} from \"./ImdlSchema\";\nimport { MeshPrimitiveType } from \"../internal/render/MeshPrimitive\";\nimport { isValidSurfaceType, SurfaceMaterial } from \"../internal/render/SurfaceParams\";\nimport { DisplayParams } from \"../internal/render/DisplayParams\";\nimport { AuxChannelTable, AuxChannelTableProps } from \"../internal/render/AuxChannelTable\";\nimport { ComputeAnimationNodeId, splitMeshParams, splitPointStringParams, splitPolylineParams } from \"../internal/render/VertexTableSplitter\";\nimport { AnimationNodeId } from \"../internal/render/AnimationNodeId\";\nimport { EdgeParams } from \"../internal/render/EdgeParams\";\nimport { MeshParams } from \"../internal/render/MeshParams\";\nimport { VertexTable } from \"../internal/render/VertexTable\";\nimport { MaterialParams } from \"../render/MaterialParams\";\nimport { VertexIndices } from \"../internal/render/VertexIndices\";\nimport { indexedEdgeParamsFromCompactEdges } from \"./CompactEdges\";\nimport { getMeshoptDecoder, MeshoptDecoder } from \"../../tile/internal\";\n\n/** Timeline used to reassemble iMdl content into animatable nodes.\n * @internal\n */\nexport type ImdlTimeline = RenderSchedule.ModelTimeline | RenderSchedule.Script;\n\n/** Options provided to [[ImdlParser.parse]].\n * @internal\n */\nexport interface ImdlParserOptions {\n data: Uint8Array;\n batchModelId: Id64String;\n is3d: boolean;\n /** The limit on the width and height of a [[VertexTable]]. */\n maxVertexTableSize: number;\n omitEdges?: boolean;\n createUntransformedRootNode?: boolean;\n /* see [[ImdlDecodeArgs.modelGroups]]. */\n modelGroups?: Id64Set[];\n}\n\n/** Arguments provided to [[parseImdlDocument]].\n * @internal\n */\nexport interface ParseImdlDocumentArgs extends ImdlParserOptions {\n timeline: ImdlTimeline | undefined;\n}\n\ntype OptionalDocumentProperties = \"rtcCenter\" | \"animationNodes\";\ntype Document = Required<Omit<ImdlDocument, OptionalDocumentProperties>> & Pick<ImdlDocument, OptionalDocumentProperties>;\n\n/** Error codes resulting from [[parseImdlDocument]].\n * @internal\n */\nexport type ImdlParseError = Exclude<TileReadStatus, TileReadStatus.Success>;\n\ninterface FeatureTableInfo {\n startPos: number;\n multiModel: boolean;\n}\n\nconst nodeIdRegex = /Node_(.*)/;\nfunction extractNodeId(nodeName: string): number {\n const match = nodeName.match(nodeIdRegex);\n assert(!!match && match.length === 2);\n if (!match || match.length !== 2)\n return 0;\n\n const nodeId = Number.parseInt(match[1], 10);\n assert(!Number.isNaN(nodeId));\n return Number.isNaN(nodeId) ? 0 : nodeId;\n}\n\nabstract class Texture extends RenderTexture {\n protected constructor(type: RenderTexture.Type) {\n super(type);\n }\n\n public abstract toImdl(): string | Gradient.SymbProps;\n\n public override dispose() { }\n public override get bytesUsed() { return 0; }\n}\n\nclass NamedTexture extends Texture {\n public constructor(private readonly _name: string, type: RenderTexture.Type) {\n super(type);\n }\n\n public override toImdl(): string {\n return this._name;\n }\n}\n\nclass GradientTexture extends Texture {\n public constructor(private readonly _gradient: Gradient.SymbProps) {\n super(RenderTexture.Type.Normal);\n }\n\n public override toImdl(): Gradient.SymbProps {\n return this._gradient;\n }\n}\n\nclass Material extends RenderMaterial {\n public readonly materialParams: Imdl.SurfaceMaterialParams;\n\n public toImdl(): Imdl.SurfaceMaterial {\n const material = this.key ?? this.materialParams;\n return { isAtlas: false, material };\n }\n\n public constructor(params: RenderMaterialParams, imdl?: Imdl.SurfaceMaterialParams) {\n super(params);\n\n this.materialParams = imdl ?? {\n alpha: params.alpha,\n diffuse: {\n color: params.diffuseColor?.toJSON(),\n weight: params.diffuse,\n },\n specular: {\n color: params.specularColor?.toJSON(),\n weight: params.specular,\n exponent: params.specularExponent,\n },\n };\n }\n\n public static create(args: MaterialParams): Material {\n const params = new RenderMaterialParams();\n params.alpha = args.alpha;\n if (args.diffuse) {\n if (undefined !== args.diffuse.weight)\n params.diffuse = args.diffuse?.weight;\n\n if (args.diffuse?.color)\n params.diffuseColor = args.diffuse.color instanceof ColorDef ? args.diffuse.color : RgbColor.fromJSON(args.diffuse.color).toColorDef();\n }\n\n if (args.specular) {\n if (undefined !== args.specular.weight)\n params.specular = args.specular.weight;\n\n if (undefined !== args.specular.exponent)\n params.specularExponent = args.specular.exponent;\n\n if (args.specular.color)\n params.specularColor = args.specular.color instanceof ColorDef ? args.specular.color : RgbColor.fromJSON(args.specular.color).toColorDef();\n }\n\n return new Material(params);\n }\n}\n\n/** @internal */\nexport function toVertexTable(imdl: Imdl.VertexTable): VertexTable {\n return {\n ...imdl,\n uniformColor: undefined !== imdl.uniformColor ? ColorDef.fromJSON(imdl.uniformColor) : undefined,\n qparams: QParams3d.fromJSON(imdl.qparams),\n uvParams: imdl.uvParams ? QParams2d.fromJSON(imdl.uvParams) : undefined,\n };\n}\n\nfunction fromVertexTable(table: VertexTable): Imdl.VertexTable {\n return {\n ...table,\n uniformColor: table.uniformColor?.toJSON(),\n qparams: table.qparams.toJSON(),\n uvParams: table.uvParams?.toJSON(),\n };\n}\n\n/** @internal */\nexport function edgeParamsFromImdl(imdl: Imdl.EdgeParams): EdgeParams {\n return {\n ...imdl,\n segments: imdl.segments ? {\n ...imdl.segments,\n indices: new VertexIndices(imdl.segments.indices),\n } : undefined,\n silhouettes: imdl.silhouettes ? {\n ...imdl.silhouettes,\n indices: new VertexIndices(imdl.silhouettes.indices),\n } : undefined,\n polylineGroups: imdl.polylines ? [{\n polyline: {\n ...imdl.polylines,\n indices: new VertexIndices(imdl.polylines.indices),\n prevIndices: new VertexIndices(imdl.polylines.prevIndices),\n },\n }] : undefined,\n indexed: imdl.indexed ? {\n indices: new VertexIndices(imdl.indexed.indices),\n edges: imdl.indexed.edges,\n } : undefined,\n };\n}\n\n/** @internal */\nexport function edgeParamsToImdl(params: EdgeParams): Imdl.EdgeParams {\n return {\n ...params,\n segments: params.segments ? {\n ...params.segments,\n indices: params.segments.indices.data,\n } : undefined,\n silhouettes: params.silhouettes ? {\n ...params.silhouettes,\n indices: params.silhouettes.indices.data,\n } : undefined,\n polylines: params.polylineGroups?.length === 1 ? {\n ...params.polylineGroups[0].polyline,\n indices: params.polylineGroups[0].polyline.indices.data,\n prevIndices: params.polylineGroups[0].polyline.prevIndices.data,\n } : undefined,\n indexed: params.indexed ? {\n indices: params.indexed.indices.data,\n edges: params.indexed.edges,\n } : undefined,\n };\n}\n\nclass Parser {\n private readonly _document: Document;\n private readonly _binaryData: Uint8Array;\n private readonly _options: ImdlParserOptions;\n private readonly _featureTableInfo: FeatureTableInfo;\n private readonly _patterns = new Map<string, Imdl.Primitive[]>();\n private readonly _stream: ByteStream;\n private readonly _timeline?: ImdlTimeline;\n private _meshoptDecoder?: MeshoptDecoder;\n\n public constructor(doc: Document, binaryData: Uint8Array, options: ParseImdlDocumentArgs, featureTableInfo: FeatureTableInfo, stream: ByteStream) {\n this._document = doc;\n this._binaryData = binaryData;\n this._options = options;\n this._featureTableInfo = featureTableInfo;\n this._stream = stream;\n this._timeline = options.timeline;\n }\n\n public async parse(): Promise<Imdl.Document | ImdlParseError> {\n const featureTable = this.parseFeatureTable();\n if (!featureTable)\n return TileReadStatus.InvalidFeatureTable;\n\n if (this.hasMeshoptCompression()) {\n this._meshoptDecoder = await getMeshoptDecoder();\n if (!this._meshoptDecoder)\n return TileReadStatus.InvalidTileData;\n }\n\n const rtcCenter = this._document.rtcCenter ? {\n x: this._document.rtcCenter[0] ?? 0,\n y: this._document.rtcCenter[1] ?? 0,\n z: this._document.rtcCenter[2] ?? 0,\n } : undefined;\n\n const primitiveNodes = this.parseNodes(featureTable);\n const nodes = this.groupPrimitiveNodes(primitiveNodes, featureTable);\n\n return {\n featureTable,\n nodes,\n rtcCenter,\n binaryData: this._binaryData,\n json: this._document,\n patterns: this._patterns,\n };\n }\n\n private hasMeshoptCompression(): boolean {\n let hasMeshoptCompression = false;\n for (const meshKey of Object.keys(this._document.meshes)) {\n const mesh = this._document.meshes[meshKey];\n mesh?.primitives?.forEach((primitive) => {\n if (primitive.type !== \"areaPattern\") {\n const imdlPrimitive = primitive as ImdlMeshPrimitive;\n const vertexTable = imdlPrimitive.vertices;\n if (vertexTable.compressedSize && vertexTable.compressedSize > 0) {\n hasMeshoptCompression = true;\n }\n\n const surf = imdlPrimitive.surface;\n if (surf && surf.compressedIndexCount && surf.compressedIndexCount > 0) {\n hasMeshoptCompression = true;\n }\n }\n });\n }\n return hasMeshoptCompression;\n }\n\n private parseFeatureTable(): Imdl.FeatureTable | undefined {\n this._stream.curPos = this._featureTableInfo.startPos;\n const header = FeatureTableHeader.readFrom(this._stream);\n if (!header || 0 !== header.length % 4)\n return undefined;\n\n // NB: We make a copy of the sub-array because we don't want to pin the entire data array in memory.\n const numUint32s = (header.length - FeatureTableHeader.sizeInBytes) / 4;\n const packedFeatureArray = new Uint32Array(this._stream.nextUint32s(numUint32s));\n if (this._stream.isPastTheEnd)\n return undefined;\n\n let featureTable: Imdl.FeatureTable;\n if (this._featureTableInfo.multiModel) {\n featureTable = {\n multiModel: true,\n data: packedFeatureArray,\n numFeatures: header.count,\n numSubCategories: header.numSubCategories,\n };\n } else {\n let animNodesArray: Uint8Array | Uint16Array | Uint32Array | undefined;\n const animationNodes = this._document.animationNodes;\n if (undefined !== animationNodes) {\n const bytesPerId = JsonUtils.asInt(animationNodes.bytesPerId);\n const bufferViewId = JsonUtils.asString(animationNodes.bufferView);\n const bufferViewJson = this._document.bufferViews[bufferViewId];\n if (undefined !== bufferViewJson) {\n const byteOffset = JsonUtils.asInt(bufferViewJson.byteOffset);\n const byteLength = JsonUtils.asInt(bufferViewJson.byteLength);\n const bytes = this._binaryData.subarray(byteOffset, byteOffset + byteLength);\n switch (bytesPerId) {\n case 1:\n animNodesArray = new Uint8Array(bytes);\n break;\n case 2:\n // NB: A *copy* of the subarray.\n animNodesArray = Uint16Array.from(new Uint16Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / 2));\n break;\n case 4:\n // NB: A *copy* of the subarray.\n animNodesArray = Uint32Array.from(new Uint32Array(bytes.buffer, bytes.byteOffset, bytes.byteLength / 4));\n break;\n }\n }\n }\n\n featureTable = {\n multiModel: false,\n data: packedFeatureArray,\n numFeatures: header.count,\n animationNodeIds: animNodesArray,\n };\n }\n\n this._stream.curPos = this._featureTableInfo.startPos + header.length;\n return featureTable;\n }\n\n private parseNodes(featureTable: Imdl.FeatureTable): Imdl.PrimitivesNode[] {\n const nodes: Imdl.PrimitivesNode[] = [];\n const docNodes = this._document.nodes;\n const docMeshes = this._document.meshes;\n if (undefined === docNodes.Node_Root) {\n // A veeeery early version of the tile format (prior to introduction of schedule animation support) just supplied a flat list of meshes.\n // We shall never encounter such tiles again.\n return nodes;\n }\n\n for (const nodeKey of Object.keys(docNodes)) {\n const docNode = this._document.nodes[nodeKey];\n assert(undefined !== docNode); // we're iterating the keys...\n const docMesh = docMeshes[docNode];\n const docPrimitives = docMesh?.primitives;\n if (!docPrimitives)\n continue;\n\n const layerId = docMesh.layer;\n if (\"Node_Root\" === nodeKey) {\n if (this._timeline) {\n // Split up the root node into transform nodes.\n this.parseAnimationBranches(nodes, docMesh, featureTable, this._timeline);\n } else if (this._options.createUntransformedRootNode) {\n // If transform nodes exist in the tile tree, then we need to create a branch for the root node so that elements not associated with\n // any node in the schedule script can be grouped together.\n nodes.push({\n animationNodeId: AnimationNodeId.Untransformed,\n primitives: this.parseNodePrimitives(docPrimitives),\n });\n } else {\n nodes.push({ primitives: this.parseNodePrimitives(docPrimitives) });\n }\n } else if (undefined === layerId) {\n nodes.push({\n animationNodeId: extractNodeId(nodeKey),\n animationId: `${this._options.batchModelId}_${nodeKey}`,\n primitives: this.parseNodePrimitives(docPrimitives),\n });\n } else {\n nodes.push({\n layerId,\n primitives: this.parseNodePrimitives(docPrimitives),\n });\n }\n }\n\n return nodes;\n }\n\n private parseAnimationBranches(output: Imdl.Node[], docMesh: ImdlMesh, imdlFeatureTable: Imdl.FeatureTable, timeline: ImdlTimeline): void {\n const docPrimitives = docMesh.primitives;\n if (!docPrimitives)\n return;\n\n const primitives = docPrimitives.map((x) => this.parseNodePrimitive(x)).filter<Imdl.NodePrimitive>((x): x is Imdl.NodePrimitive => x !== undefined);\n if (primitives.length === 0)\n return;\n\n const nodesById = new Map<number, Imdl.AnimationNode>();\n const getNode = (nodeId: number | undefined): Imdl.AnimationNode => {\n nodeId = nodeId ?? AnimationNodeId.Untransformed;\n let node = nodesById.get(nodeId);\n if (!node) {\n node = {\n animationNodeId: nodeId,\n animationId: `${this._options.batchModelId}_Node_${nodeId}`,\n primitives: [],\n };\n\n nodesById.set(nodeId, node);\n output.push(node);\n }\n\n return node;\n };\n\n // NB: The BatchType is irrelevant - just use Primary.\n assert(undefined === imdlFeatureTable.animationNodeIds);\n const featureTable = convertFeatureTable(imdlFeatureTable, this._options.batchModelId);\n featureTable.populateAnimationNodeIds((feature) => timeline.getBatchIdForFeature(feature), timeline.maxBatchId);\n imdlFeatureTable.animationNodeIds = featureTable.animationNodeIds;\n\n const discreteNodeIds = timeline.discreteBatchIds;\n const computeNodeId: ComputeAnimationNodeId = (featureIndex) => {\n const nodeId = featureTable.getAnimationNodeId(featureIndex);\n return 0 !== nodeId && discreteNodeIds.has(nodeId) ? nodeId : 0;\n };\n\n this.splitPrimitives(primitives, featureTable, computeNodeId, getNode);\n }\n\n private splitPrimitives(primitives: Imdl.NodePrimitive[], featureTable: RenderFeatureTable, computeNodeId: ComputeAnimationNodeId, getPrimitivesNode: (nodeId: number | undefined) => Imdl.PrimitivesNode): void {\n const splitArgs = {\n maxDimension: this._options.maxVertexTableSize,\n computeNodeId,\n featureTable,\n };\n\n const convertMaterial = (imdl: Imdl.SurfaceMaterial | undefined): SurfaceMaterial | undefined => {\n if (!imdl)\n return undefined;\n else if (imdl.isAtlas)\n return imdl;\n\n const material = (typeof imdl.material === \"string\") ? this.materialFromJson(imdl.material) : Material.create(toMaterialParams(imdl.material));\n return material ? { isAtlas: false, material } : undefined;\n };\n\n for (const primitive of primitives) {\n switch (primitive.type) {\n case \"pattern\": {\n // ###TODO splitting area patterns\n getPrimitivesNode(undefined).primitives.push(primitive);\n break;\n }\n case \"mesh\": {\n const mesh = primitive.params;\n const texMap = mesh.surface.textureMapping;\n const params: MeshParams = {\n vertices: toVertexTable(primitive.params.vertices),\n surface: {\n ...primitive.params.surface,\n indices: new VertexIndices(primitive.params.surface.indices),\n material: convertMaterial(mesh.surface.material),\n textureMapping: texMap ? {\n alwaysDisplayed: texMap.alwaysDisplayed,\n // The texture type doesn't actually matter here.\n texture: typeof texMap.texture === \"string\" ? new NamedTexture(texMap.texture, RenderTexture.Type.Normal) : new GradientTexture(texMap.texture),\n } : undefined,\n },\n edges: primitive.params.edges ? edgeParamsFromImdl(primitive.params.edges) : undefined,\n isPlanar: primitive.params.isPlanar,\n auxChannels: primitive.params.auxChannels ? AuxChannelTable.fromJSON(primitive.params.auxChannels) : undefined,\n };\n\n const split = splitMeshParams({\n ...splitArgs,\n params,\n createMaterial: (args) => Material.create(args),\n });\n for (const [nodeId, p] of split) {\n let material: Imdl.SurfaceMaterial | undefined;\n if (p.surface.material) {\n if (p.surface.material.isAtlas) {\n material = p.surface.material;\n } else {\n assert(p.surface.material.material instanceof Material);\n material = p.surface.material.material.toImdl();\n }\n }\n\n assert(p.surface.textureMapping === undefined || p.surface.textureMapping.texture instanceof Texture);\n getPrimitivesNode(nodeId).primitives.push({\n type: \"mesh\",\n modifier: primitive.modifier,\n params: {\n vertices: fromVertexTable(p.vertices),\n surface: {\n ...p.surface,\n indices: p.surface.indices.data,\n material,\n textureMapping: p.surface.textureMapping?.texture instanceof Texture ? {\n texture: p.surface.textureMapping.texture.toImdl(),\n alwaysDisplayed: p.surface.textureMapping.alwaysDisplayed,\n } : undefined,\n },\n edges: p.edges ? edgeParamsToImdl(p.edges) : undefined,\n isPlanar: p.isPlanar,\n auxChannels: p.auxChannels?.toJSON(),\n },\n });\n }\n\n break;\n }\n case \"point\": {\n const params = {\n vertices: toVertexTable(primitive.params.vertices),\n indices: new VertexIndices(primitive.params.indices),\n weight: primitive.params.weight,\n };\n\n const split = splitPointStringParams({ ...splitArgs, params });\n for (const [nodeId, p] of split) {\n getPrimitivesNode(nodeId).primitives.push({\n type: \"point\",\n modifier: primitive.modifier,\n params: {\n vertices: fromVertexTable(p.vertices),\n indices: p.indices.data,\n weight: p.weight,\n },\n });\n }\n\n break;\n }\n case \"polyline\": {\n const params = {\n ...primitive.params,\n vertices: toVertexTable(primitive.params.vertices),\n polyline: {\n indices: new VertexIndices(primitive.params.polyline.indices),\n prevIndices: new VertexIndices(primitive.params.polyline.prevIndices),\n nextIndicesAndParams: primitive.params.polyline.nextIndicesAndParams,\n },\n };\n\n const split = splitPolylineParams({ ...splitArgs, params });\n for (const [nodeId, p] of split) {\n getPrimitivesNode(nodeId).primitives.push({\n type: \"polyline\",\n modifier: primitive.modifier,\n params: {\n ...p,\n vertices: fromVertexTable(p.vertices),\n polyline: {\n indices: p.polyline.indices.data,\n prevIndices: p.polyline.prevIndices.data,\n nextIndicesAndParams: p.polyline.nextIndicesAndParams,\n },\n },\n });\n }\n\n break;\n }\n }\n }\n }\n\n private groupPrimitiveNodes(inputNodes: Imdl.PrimitivesNode[], imdlFeatureTable: Imdl.FeatureTable): Imdl.Node[] {\n const modelGroups = this._options.modelGroups;\n if (!modelGroups?.length)\n return inputNodes;\n\n const groupNodes: Imdl.GroupNode[] = [];\n let orphanNode: Imdl.GroupNode | undefined;\n const getGroupNode = (groupId: number): Imdl.GroupNode => {\n assert(groupId <= modelGroups.length);\n if (groupId === modelGroups.length) {\n // This would happen if:\n // - The tile contains geometry from a model not present in modelGroups (should never occur); or\n // - The tile contains an area pattern (we haven't yet implemented splitting for them).\n // In either case, orphaned geometry will end up getting discarded.\n return orphanNode ?? (orphanNode = { groupId, nodes: [] });\n }\n\n let groupNode = groupNodes[groupId];\n if (!groupNode)\n groupNodes[groupId] = groupNode = { groupId, nodes: [] };\n\n return groupNode;\n };\n\n const featureTable = convertFeatureTable(imdlFeatureTable, this._options.batchModelId);\n const modelIdPair = { lower: 0, upper: 0 };\n const computeNodeId: ComputeAnimationNodeId = (featureIndex) => {\n featureTable.getModelIdPair(featureIndex, modelIdPair);\n const modelId = Id64.fromUint32PairObject(modelIdPair);\n for (let i = 0; i < modelGroups.length; i++) {\n if (modelGroups[i].has(modelId))\n return i;\n }\n\n return modelGroups.length;\n };\n\n for (const inputNode of inputNodes) {\n // Indexed by model group index.\n const splitNodes: Imdl.PrimitivesNode[] = [];\n const getSplitNode = (groupIndex: number | undefined) => {\n groupIndex = groupIndex ?? modelGroups.length;\n if (!splitNodes[groupIndex]) {\n const splitNode = splitNodes[groupIndex] = { ...inputNode, primitives: [] };\n getGroupNode(groupIndex).nodes.push(splitNode);\n }\n\n return splitNodes[groupIndex];\n };\n\n this.splitPrimitives(inputNode.primitives, featureTable, computeNodeId, getSplitNode);\n }\n\n return groupNodes.filter<Imdl.GroupNode>((x): x is Imdl.GroupNode => undefined !== x);\n }\n\n private parseTesselatedPolyline(json: ImdlPolyline): Imdl.TesselatedPolyline | undefined {\n const indices = this.findBuffer(json.indices);\n const prevIndices = this.findBuffer(json.prevIndices);\n const nextIndicesAndParams = this.findBuffer(json.nextIndicesAndParams);\n\n return indices && prevIndices && nextIndicesAndParams ? { indices, prevIndices, nextIndicesAndParams } : undefined;\n }\n\n private parseSegmentEdges(imdl: ImdlSegmentEdges): Imdl.SegmentEdgeParams | undefined {\n const indices = this.findBuffer(imdl.indices);\n const endPointAndQuadIndices = this.findBuffer(imdl.endPointAndQuadIndices);\n return indices && endPointAndQuadIndices ? { indices, endPointAndQuadIndices } : undefined;\n }\n\n private parseSilhouetteEdges(imdl: ImdlSilhouetteEdges): Imdl.SilhouetteParams | undefined {\n const segments = this.parseSegmentEdges(imdl);\n const normalPairs = this.findBuffer(imdl.normalPairs);\n return segments && normalPairs ? { ...segments, normalPairs } : undefined;\n }\n\n private parseIndexedEdges(imdl: ImdlIndexedEdges): Imdl.IndexedEdgeParams | undefined {\n const indices = this.findBuffer(imdl.indices);\n const edgeTable = this.findBuffer(imdl.edges);\n if (!indices || !edgeTable)\n return undefined;\n\n return {\n indices,\n edges: {\n data: edgeTable,\n width: imdl.width,\n height: imdl.height,\n silhouettePadding: imdl.silhouettePadding,\n numSegments: imdl.numSegments,\n },\n };\n }\n\n private parseCompactEdges(imdl: ImdlCompactEdges, vertexIndices: VertexIndices): Imdl.IndexedEdgeParams | undefined {\n const visibility = this.findBuffer(imdl.visibility);\n if (!visibility)\n return undefined;\n\n const normals = undefined !== imdl.normalPairs ? this.findBuffer(imdl.normalPairs) : undefined;\n return indexedEdgeParamsFromCompactEdges({\n numVisibleEdges: imdl.numVisible,\n visibility,\n vertexIndices,\n normalPairs: normals ? new Uint32Array(normals.buffer, normals.byteOffset, normals.byteLength / 4) : undefined,\n maxEdgeTableDimension: this._options.maxVertexTableSize,\n });\n }\n\n private parseEdges(imdl: ImdlMeshEdges | undefined, displayParams: DisplayParams, indices: Uint8Array): Imdl.EdgeParams | undefined {\n if (!imdl)\n return undefined;\n\n const segments = imdl.segments ? this.parseSegmentEdges(imdl.segments) : undefined;\n const silhouettes = imdl.silhouettes ? this.parseSilhouetteEdges(imdl.silhouettes) : undefined;\n const polylines = imdl.polylines ? this.parseTesselatedPolyline(imdl.polylines) : undefined;\n\n let indexed = imdl.indexed ? this.parseIndexedEdges(imdl.indexed) : undefined;\n if (!indexed && imdl.compact)\n indexed = this.parseCompactEdges(imdl.compact, new VertexIndices(indices));\n\n if (!segments && !silhouettes && !indexed && !polylines)\n return undefined;\n\n return {\n segments,\n silhouettes,\n polylines,\n indexed,\n weight: displayParams.width,\n linePixels: displayParams.linePixels,\n };\n }\n\n private getPattern(name: string): Imdl.Primitive[] | undefined {\n let primitives = this._patterns.get(name);\n if (!primitives) {\n const symbol = this._document.patternSymbols[name];\n primitives = symbol ? this.parsePrimitives(symbol.primitives) : [];\n this._patterns.set(name, primitives);\n }\n\n return primitives.length > 0 ? primitives : undefined;\n }\n\n private parseAreaPattern(json: ImdlAreaPattern): Imdl.NodePrimitive | undefined {\n const primitives = this.getPattern(json.symbolName);\n if (!primitives || primitives.length === 0)\n return undefined;\n\n const xyOffsets = this.findBuffer(json.xyOffsets);\n if (!xyOffsets)\n return undefined;\n\n return {\n type: \"pattern\",\n params: {\n ...json,\n xyOffsets: new Float32Array(xyOffsets.buffer, xyOffsets.byteOffset, xyOffsets.byteLength / 4),\n },\n };\n }\n\n private parseNodePrimitives(docPrimitives: Array<AnyImdlPrimitive | ImdlAreaPattern>): Imdl.NodePrimitive[] {\n const primitives = [];\n for (const docPrimitive of docPrimitives) {\n const primitive = this.parseNodePrimitive(docPrimitive);\n if (primitive)\n primitives.push(primitive);\n }\n\n return primitives;\n }\n\n private parseNodePrimitive(docPrimitive: AnyImdlPrimitive | ImdlAreaPattern): Imdl.NodePrimitive | undefined {\n return docPrimitive.type === \"areaPattern\" ? this.parseAreaPattern(docPrimitive) : this.parsePrimitive(docPrimitive);\n }\n\n private parsePrimitives(docPrimitives: Array<AnyImdlPrimitive>): Imdl.Primitive[] {\n const primitives = [];\n for (const docPrimitive of docPrimitives) {\n const primitive = this.parsePrimitive(docPrimitive);\n if (primitive)\n primitives.push(primitive);\n }\n\n return primitives;\n }\n\n private parsePrimitive(docPrimitive: AnyImdlPrimitive): Imdl.Primitive | undefined {\n let modifier: Imdl.PrimitiveModifier | undefined = this.parseInstances(docPrimitive);\n if (!modifier && docPrimitive.viewIndependentOrigin) {\n const origin = Point3d.fromJSON(docPrimitive.viewIndependentOrigin);\n modifier = {\n type: \"viewIndependentOrigin\",\n origin: { x: origin.x, y: origin.y, z: origin.z },\n };\n }\n\n const materialName = docPrimitive.material ?? \"\";\n const dpMaterial = materialName.length ? JsonUtils.asObject(this._document.materials[materialName]) : undefined;\n const displayParams = dpMaterial ? this.parseDisplayParams(dpMaterial) : undefined;\n if (!displayParams)\n return undefined;\n\n const vertices = this.parseVertexTable(docPrimitive);\n if (!vertices)\n return undefined;\n\n let primitive: Imdl.Primitive | undefined;\n const isPlanar = !this._options.is3d || JsonUtils.asBool(docPrimitive.isPlanar);\n switch (docPrimitive.type) {\n case MeshPrimitiveType.Mesh: {\n const surface = this.parseSurface(docPrimitive, displayParams);\n if (surface) {\n primitive = {\n type: \"mesh\",\n params: {\n vertices,\n surface,\n isPlanar,\n auxChannels: this.parseAuxChannelTable(docPrimitive),\n edges: this.parseEdges(docPrimitive.edges, displayParams, surface.indices),\n },\n };\n }\n\n break;\n }\n case MeshPrimitiveType.Polyline: {\n const polyline = this.parseTesselatedPolyline(docPrimitive);\n if (polyline) {\n let type = PolylineTypeFlags.Normal;\n if (DisplayParams.RegionEdgeType.Outline === displayParams.regionEdgeType)\n type = (!displayParams.gradient || displayParams.gradient.isOutlined) ? PolylineTypeFlags.Edge : PolylineTypeFlags.Outline;\n\n primitive = {\n type: \"polyline\",\n params: {\n vertices,\n polyline,\n isPlanar,\n type,\n weight: displayParams.width,\n linePixels: displayParams.linePixels,\n },\n };\n }\n\n break;\n }\n case MeshPrimitiveType.Point: {\n const indices = this.findBuffer(docPrimitive.indices);\n const weight = displayParams.width;\n if (indices) {\n primitive = {\n type: \"point\",\n params: { vertices, indices, weight },\n };\n }\n\n break;\n }\n }\n\n if (primitive)\n primitive.modifier = modifier;\n\n return primitive;\n }\n\n private parseSurface(mesh: ImdlMeshPrimitive, displayParams: DisplayParams): Imdl.SurfaceParams | undefined {\n const surf = mesh.surface;\n if (!surf)\n return undefined;\n\n let indices = this.findBuffer(surf.indices);\n if (!indices)\n return undefined;\n\n if (surf.compressedIndexCount && surf.compressedIndexCount > 0) {\n\n if (!this._meshoptDecoder) {\n return undefined;\n }\n\n const decompressedIndices = new Uint8Array(surf.compressedIndexCount * 4);\n this._meshoptDecoder.decodeIndexSequence(decompressedIndices, surf.compressedIndexCount, 4, indices);\n\n // reduce from 32 to 24 bits\n indices = new Uint8Array(surf.compressedIndexCount * 3);\n for (let i = 0; i < surf.compressedIndexCount; i++) {\n const srcIndex = i * 4;\n const dstIndex = i * 3;\n indices[dstIndex + 0] = decompressedIndices[srcIndex + 0];\n indices[dstIndex + 1] = decompressedIndices[srcIndex + 1];\n indices[dstIndex + 2] = decompressedIndices[srcIndex + 2];\n }\n }\n\n const type = surf.type;\n if (!isValidSurfaceType(type))\n return undefined;\n\n const texture = displayParams.textureMapping?.texture;\n let material: Imdl.SurfaceMaterial | undefined;\n const atlas = mesh.vertices.materialAtlas;\n const numColors = mesh.vertices.numColors;\n if (atlas && undefined !== numColors) {\n material = {\n isAtlas: true,\n hasTranslucency: JsonUtils.asBool(atlas.hasTranslucency),\n overridesAlpha: JsonUtils.asBool(atlas.overridesAlpha, false),\n vertexTableOffset: JsonUtils.asInt(numColors),\n numMaterials: JsonUtils.asInt(atlas.numMaterials),\n };\n } else if (displayParams.material) {\n assert(displayParams.material instanceof Material);\n material = displayParams.material.toImdl();\n }\n\n let textureMapping;\n if (texture) {\n assert(texture instanceof Texture);\n textureMapping = {\n texture: texture.toImdl(),\n alwaysDisplayed: JsonUtils.asBool(surf.alwaysDisplayTexture),\n };\n }\n\n return {\n type,\n indices,\n fillFlags: displayParams.fillFlags,\n hasBakedLighting: false,\n material,\n textureMapping,\n };\n }\n\n private parseAuxChannelTable(primitive: ImdlMeshPrimitive): AuxChannelTableProps | undefined {\n const json = primitive.auxChannels;\n if (undefined === json)\n return undefined;\n\n const bytes = this.findBuffer(JsonUtils.asString(json.bufferView));\n if (undefined === bytes)\n return undefined;\n\n return {\n data: bytes,\n width: json.width,\n height: json.height,\n count: json.count,\n numBytesPerVertex: json.numBytesPerVertex,\n displacements: json.displacements,\n normals: json.normals,\n params: json.params,\n };\n }\n\n private parseVertexTable(primitive: AnyImdlPrimitive): Imdl.VertexTable | undefined {\n const json = primitive.vertices;\n if (!json)\n return undefined;\n\n let bytes: Uint8Array | undefined;\n if (json.compressedSize && json.compressedSize > 0) {\n\n if (!this._meshoptDecoder) {\n return undefined;\n }\n\n const bufferViewJson = this._document.bufferViews[JsonUtils.asString(json.bufferView)];\n if (undefined === bufferViewJson)\n return undefined;\n\n const byteOffset = JsonUtils.asInt(bufferViewJson.byteOffset);\n const byteLength = JsonUtils.asInt(bufferViewJson.byteLength);\n if (0 === byteLength)\n return undefined;\n\n const compressedBytes = this._binaryData.subarray(byteOffset, byteOffset + json.compressedSize);\n if (!compressedBytes)\n return undefined;\n\n bytes = new Uint8Array(json.width * json.height * 4);\n this._meshoptDecoder.decodeVertexBuffer(bytes, json.count, json.numRgbaPerVertex * 4, compressedBytes);\n\n const remainingBytesSize = byteLength - json.compressedSize;\n\n // if there are remaining bytes, copy the data that did not go through the compression\n if (remainingBytesSize > 0) {\n const remainingBytes = this._binaryData.subarray(byteOffset + json.compressedSize, byteOffset + byteLength);\n if (!remainingBytes)\n return undefined;\n\n const decompressedSize = json.count * json.numRgbaPerVertex * 4;\n for (let i = 0; i < remainingBytesSize; i++) {\n bytes[decompressedSize + i] = remainingBytes[i];\n }\n }\n\n } else {\n bytes = this.findBuffer(JsonUtils.asString(json.bufferView));\n if (!bytes)\n return undefined;\n }\n\n const uniformFeatureID = undefined !== json.featureID ? JsonUtils.asInt(json.featureID) : undefined;\n\n const rangeMin = JsonUtils.asArray(json.params.decodedMin);\n const rangeMax = JsonUtils.asArray(json.params.decodedMax);\n if (undefined === rangeMin || undefined === rangeMax)\n return undefined;\n\n const qparams = QParams3d.fromRange(Range3d.create(Point3d.create(rangeMin[0], rangeMin[1], rangeMin[2]), Point3d.create(rangeMax[0], rangeMax[1], rangeMax[2])));\n\n const uniformColor = undefined !== json.uniformColor ? ColorDef.fromJSON(json.uniformColor) : undefined;\n let uvParams: QParams2d | undefined;\n if (MeshPrimitiveType.Mesh === primitive.type && primitive.surface && primitive.surface.uvParams) {\n const uvMin = primitive.surface.uvParams.decodedMin;\n const uvMax = primitive.surface.uvParams.decodedMax;\n const uvRange = new Range2d(uvMin[0], uvMin[1], uvMax[0], uvMax[1]);\n uvParams = QParams2d.fromRange(uvRange);\n }\n\n return {\n data: bytes,\n usesUnquantizedPositions: true === json.usesUnquantizedPositions,\n qparams: qparams.toJSON(),\n width: json.width,\n height: json.height,\n hasTranslucency: json.hasTranslucency,\n uniformColor: uniformColor?.toJSON(),\n featureIndexType: json.featureIndexType,\n uniformFeatureID,\n numVertices: json.count,\n numRgbaPerVertex: json.numRgbaPerVertex,\n uvParams: uvParams?.toJSON(),\n };\n }\n\n private parseInstances(primitive: AnyImdlPrimitive): Imdl.Instances | undefined {\n const json = primitive.instances;\n if (!json)\n return undefined;\n\n const count = JsonUtils.asInt(json.count, 0);\n if (count <= 0)\n return undefined;\n\n const centerComponents = JsonUtils.asArray(json.transformCenter);\n if (undefined === centerComponents || 3 !== centerComponents.length)\n return undefined;\n\n const transformCenter = Point3d.create(centerComponents[0], centerComponents[1], centerComponents[2]);\n\n const featureIds = this.findBuffer(JsonUtils.asString(json.featureIds));\n if (undefined === featureIds)\n return undefined;\n\n const transformBytes = this.findBuffer(JsonUtils.asString(json.transforms));\n if (undefined === transformBytes)\n return undefined;\n\n // 1 transform = 3 rows of 4 floats = 12 floats per instance\n const numFloats = transformBytes.byteLength / 4;\n assert(Math.floor(numFloats) === numFloats);\n assert(0 === numFloats % 12);\n\n const transforms = new Float32Array(transformBytes.buffer, transformBytes.byteOffset, numFloats);\n\n let symbologyOverrides: Uint8Array | undefined;\n if (undefined !== json.symbologyOverrides)\n symbologyOverrides = this.findBuffer(JsonUtils.asString(json.symbologyOverrides));\n\n return {\n type: \"instances\",\n count,\n transforms,\n transformCenter,\n featureIds,\n symbologyOverrides,\n };\n }\n\n private findBuffer(bufferViewId: string): Uint8Array | undefined {\n if (typeof bufferViewId !== \"string\" || 0 === bufferViewId.length)\n return undefined;\n\n const bufferViewJson = this._document.bufferViews[bufferViewId];\n if (undefined === bufferViewJson)\n return undefined;\n\n const byteOffset = JsonUtils.asInt(bufferViewJson.byteOffset);\n const byteLength = JsonUtils.asInt(bufferViewJson.byteLength);\n if (0 === byteLength)\n return undefined;\n\n return this._binaryData.subarray(byteOffset, byteOffset + byteLength);\n }\n\n private colorDefFromMaterialJson(json: ImdlColorDef | undefined): ColorDef | undefined {\n return undefined !== json ? ColorDef.from(json[0] * 255 + 0.5, json[1] * 255 + 0.5, json[2] * 255 + 0.5) : undefined;\n }\n\n private materialFromJson(key: string): RenderMaterial | undefined {\n const materialJson = this._document.renderMaterials[key];\n if (!materialJson)\n return undefined;\n\n const materialParams = new RenderMaterialParams(key);\n materialParams.diffuseColor = this.colorDefFromMaterialJson(materialJson.diffuseColor);\n if (materialJson.diffuse !== undefined)\n materialParams.diffuse = JsonUtils.asDouble(materialJson.diffuse);\n\n materialParams.specularColor = this.colorDefFromMaterialJson(materialJson.specularColor);\n if (materialJson.specular !== undefined)\n materialParams.specular = JsonUtils.asDouble(materialJson.specular);\n\n materialParams.reflectColor = this.colorDefFromMaterialJson(materialJson.reflectColor);\n if (materialJson.reflect !== undefined)\n materialParams.reflect = JsonUtils.asDouble(materialJson.reflect);\n\n if (materialJson.specularExponent !== undefined)\n materialParams.specularExponent = materialJson.specularExponent;\n\n if (undefined !== materialJson.transparency)\n materialParams.alpha = 1.0 - materialJson.transparency;\n\n materialParams.refract = JsonUtils.asDouble(materialJson.refract);\n materialParams.shadows = JsonUtils.asBool(materialJson.shadows);\n materialParams.ambient = JsonUtils.asDouble(materialJson.ambient);\n\n if (undefined !== materialJson.textureMapping)\n materialParams.textureMapping = this.textureMappingFromJson(materialJson.textureMapping.texture);\n return new Material(materialParams);\n }\n\n private parseNamedTexture(namedTex: ImdlNamedTexture, name: string): RenderTexture | undefined {\n const textureType = JsonUtils.asBool(namedTex.isGlyph) ? RenderTexture.Type.Glyph :\n (JsonUtils.asBool(namedTex.isTileSection) ? RenderTexture.Type.TileSection : RenderTexture.Type.Normal);\n\n return new NamedTexture(name, textureType);\n }\n\n private parseConstantLodProps(propsJson: { repetitions?: number, offset?: number[], minDistClamp?: number, maxDistClamp?: number } | undefined): TextureMapping.ConstantLodParamProps | undefined {\n if (undefined === propsJson)\n return undefined;\n\n return {\n repetitions: JsonUtils.asDouble(propsJson.repetitions, 1.0),\n offset: { x: propsJson.offset ? JsonUtils.asDouble(propsJson.offset[0]) : 0.0, y: propsJson.offset ? JsonUtils.asDouble(propsJson.offset[1]) : 0.0 },\n minDistClamp: JsonUtils.asDouble(propsJson.minDistClamp, 1.0),\n maxDistClamp: JsonUtils.asDouble(propsJson.maxDistClamp, 4096.0 * 1024.0 * 1024.0),\n };\n }\n\n private textureMappingFromJson(json: ImdlTextureMapping | undefined): TextureMapping | undefined {\n if (!json)\n return undefined;\n\n const name = JsonUtils.asString(json.name);\n const namedTex = 0 !== name.length ? this._document.namedTextures[name] : undefined;\n const texture = namedTex ? this.parseNamedTexture(namedTex, name) : undefined;\n if (!texture)\n return undefined;\n\n const paramsJson = json.params;\n const tf = paramsJson.transform;\n const paramProps: TextureMapping.ParamProps = {\n textureMat2x3: new TextureMapping.Trans2x3(tf[0][0], tf[0][1], tf[0][2], tf[1][0], tf[1][1], tf[1][2]),\n textureWeight: JsonUtils.asDouble(paramsJson.weight, 1.0),\n mapMode: JsonUtils.asInt(paramsJson.mode),\n worldMapping: JsonUtils.asBool(paramsJson.worldMapping),\n useConstantLod: JsonUtils.asBool(paramsJson.useConstantLod),\n constantLodProps: this.parseConstantLodProps(paramsJson.constantLodParams),\n };\n\n const textureMapping = new TextureMapping(texture, new TextureMapping.Params(paramProps));\n\n const normalMapJson = json.normalMapParams;\n if (normalMapJson) {\n const normalTexName = JsonUtils.asString(normalMapJson.textureName);\n const namedNormalTex = normalTexName.length > 0 ? this._document.namedTextures[normalTexName] : undefined;\n const normalMap = namedNormalTex ? this.parseNamedTexture(namedNormalTex, normalTexName) : undefined;\n if (normalMap) {\n textureMapping.normalMapParams = {\n normalMap,\n greenUp: JsonUtils.asBool(normalMapJson.greenUp),\n scale: JsonUtils.asDouble(normalMapJson.scale, 1),\n useConstantLod: JsonUtils.asBool(normalMapJson.useConstantLod),\n };\n }\n }\n\n return textureMapping;\n }\n\n private parseDisplayParams(json: ImdlDisplayParams): DisplayParams | undefined {\n const type = JsonUtils.asInt(json.type, DisplayParams.Type.Mesh);\n const lineColor = ColorDef.create(JsonUtils.asInt(json.lineColor));\n const fillColor = ColorDef.create(JsonUtils.asInt(json.fillColor));\n const width = JsonUtils.asInt(json.lineWidth);\n const linePixels = JsonUtils.asInt(json.linePixels, LinePixels.Solid);\n const fillFlags = JsonUtils.asInt(json.fillFlags, FillFlags.None);\n const ignoreLighting = JsonUtils.asBool(json.ignoreLighting);\n\n // Material will always contain its own texture if it has one\n const materialKey = json.materialId;\n const material = undefined !== materialKey ? this.materialFromJson(materialKey) : undefined;\n\n // We will only attempt to include the texture if material is undefined\n let textureMapping;\n let gradient: Gradient.Symb | undefined;\n if (!material) {\n const textureJson = json.texture;\n textureMapping = undefined !== textureJson ? this.textureMappingFromJson(textureJson) : undefined;\n\n if (undefined === textureMapping) {\n const gradientProps = json.gradient;\n gradient = undefined !== gradientProps ? Gradient.Symb.fromJSON(gradientProps) : undefined;\n if (gradient) {\n assert(undefined !== gradientProps);\n const texture = new GradientTexture(gradientProps);\n textureMapping = new TextureMapping(texture, new TextureMapping.Params({ textureMat2x3: new TextureMapping.Trans2x3(0, 1, 0, 1, 0, 0) }));\n }\n }\n }\n\n return new DisplayParams(type, lineColor, fillColor, width, linePixels, fillFlags, material, gradient, ignoreLighting, textureMapping);\n }\n}\n\n/** @internal */\nexport function toMaterialParams(mat: Imdl.SurfaceMaterialParams): MaterialParams {\n const args: MaterialParams = { alpha: mat.alpha };\n if (mat.diffuse) {\n args.diffuse = {\n weight: mat.diffuse.weight,\n color: undefined !== mat.diffuse.color ? ColorDef.fromJSON(mat.diffuse.color) : undefined,\n };\n }\n\n if (mat.specular) {\n args.specular = {\n weight: mat.specular.weight,\n exponent: mat.specular.exponent,\n color: undefined !== mat.specular.color ? ColorDef.fromJSON(mat.specular.color) : undefined,\n };\n }\n\n return args;\n}\n\n/** @internal */\nexport function convertFeatureTable(imdlFeatureTable: Imdl.FeatureTable, batchModelId: Id64String): RenderFeatureTable {\n const table = imdlFeatureTable.multiModel\n ? MultiModelPackedFeatureTable.create(imdlFeatureTable.data, batchModelId, imdlFeatureTable.numFeatures, BatchType.Primary, imdlFeatureTable.numSubCategories)\n : new PackedFeatureTable(imdlFeatureTable.data, batchModelId, imdlFeatureTable.numFeatures, BatchType.Primary);\n\n table.animationNodeIds = imdlFeatureTable.animationNodeIds;\n return table;\n}\n\n/** @internal */\nexport async function parseImdlDocument(options: ParseImdlDocumentArgs): Promise<Imdl.Document | ImdlParseError> {\n\n const stream = ByteStream.fromUint8Array(options.data);\n const imdlHeader = new ImdlHeader(stream);\n if (!imdlHeader.isValid)\n return TileReadStatus.InvalidHeader;\n else if (!imdlHeader.isReadableVersion)\n return TileReadStatus.NewerMajorVersion;\n\n // Skip the feature table - we need to parse the JSON segment first to access its animationNodeIds.\n const ftStartPos = stream.curPos;\n const ftHeader = FeatureTableHeader.readFrom(stream);\n if (!ftHeader)\n return TileReadStatus.InvalidFeatureTable;\n\n stream.curPos = ftStartPos + ftHeader.length;\n\n // A glTF header follows the feature table\n const gltfHeader = new GltfHeader(stream);\n if (!gltfHeader.isValid)\n return TileReadStatus.InvalidTileData;\n\n stream.curPos = gltfHeader.scenePosition;\n const sceneStrData = stream.nextBytes(gltfHeader.sceneStrLength);\n const sceneStr = utf8ToString(sceneStrData);\n if (!sceneStr)\n return TileReadStatus.InvalidScene;\n\n try {\n const sceneValue = JSON.parse(sceneStr);\n const imdlDoc: Document = {\n scene: JsonUtils.asString(sceneValue.scene),\n scenes: JsonUtils.asArray(sceneValue.scenes),\n animationNodes: JsonUtils.asObject(sceneValue.animationNodes),\n bufferViews: JsonUtils.asObject(sceneValue.bufferViews) ?? {},\n meshes: JsonUtils.asObject(sceneValue.meshes),\n nodes: JsonUtils.asObject(sceneValue.nodes) ?? {},\n materials: JsonUtils.asObject(sceneValue.materials) ?? {},\n renderMaterials: JsonUtils.asObject(sceneValue.renderMaterials) ?? {},\n namedTextures: JsonUtils.asObject(sceneValue.namedTextures) ?? {},\n patternSymbols: JsonUtils.asObject(sceneValue.patternSymbols) ?? {},\n rtcCenter: JsonUtils.asArray(sceneValue.rtcCenter),\n };\n\n if (!imdlDoc.meshes)\n return TileReadStatus.InvalidTileData;\n\n const binaryData = new Uint8Array(stream.arrayBuffer, gltfHeader.binaryPosition);\n const featureTable = {\n startPos: ftStartPos,\n multiModel: 0 !== (imdlHeader.flags & ImdlFlags.MultiModelFeatureTable),\n };\n\n const parser = new Parser(imdlDoc, binaryData, options, featureTable, stream);\n return await parser.parse();\n } catch {\n return TileReadStatus.InvalidTileData;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Symbols.d.ts","sourceRoot":"","sources":["../../../../src/common/internal/Symbols.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,eAAO,MAAM,yBAAyB,eAAmG,CAAC;AAM1I,eAAO,MAAM,YAAY,eAAiC,CAAC;AAC3D,eAAO,MAAM,MAAM,eAA2B,CAAC;AAC/C,eAAO,MAAM,OAAO,eAA4B,CAAC;AACjD,gBAAgB;AAChB,eAAO,MAAM,eAAe,eAAoC,CAAC;AACjE,eAAO,MAAM,aAAa,eAAkC,CAAC;AAC7D,eAAO,MAAM,MAAM,eAA2B,CAAC;AAC/C,eAAO,MAAM,iCAAiC,eAAsD,CAAC;AACrG,eAAO,MAAM,YAAY,eAAiC,CAAC;AAC3D,eAAO,MAAM,aAAa,eAAkC,CAAC;AAC7D,gBAAgB;AAChB,eAAO,MAAM,wBAAwB,eAA6C,CAAC;AACnF,eAAO,MAAM,SAAS,eAA8B,CAAC;AACrD,eAAO,MAAM,gBAAgB,eAAqC,CAAC;AACnE,eAAO,MAAM,WAAW,eAAgC,CAAC"}
|
|
1
|
+
{"version":3,"file":"Symbols.d.ts","sourceRoot":"","sources":["../../../../src/common/internal/Symbols.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,gBAAgB;AAChB,eAAO,MAAM,yBAAyB,eAAmG,CAAC;AAM1I,eAAO,MAAM,YAAY,eAAiC,CAAC;AAC3D,eAAO,MAAM,MAAM,eAA2B,CAAC;AAC/C,eAAO,MAAM,OAAO,eAA4B,CAAC;AACjD,gBAAgB;AAChB,eAAO,MAAM,eAAe,eAAoC,CAAC;AACjE,eAAO,MAAM,aAAa,eAAkC,CAAC;AAC7D,eAAO,MAAM,MAAM,eAA2B,CAAC;AAC/C,eAAO,MAAM,iCAAiC,eAAsD,CAAC;AACrG,eAAO,MAAM,YAAY,eAAiC,CAAC;AAC3D,eAAO,MAAM,aAAa,eAAkC,CAAC;AAC7D,gBAAgB;AAChB,eAAO,MAAM,wBAAwB,eAA6C,CAAC;AACnF,eAAO,MAAM,SAAS,eAA8B,CAAC;AACrD,eAAO,MAAM,gBAAgB,eAAqC,CAAC;AACnE,eAAO,MAAM,WAAW,eAAgC,CAAC"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
/** @packageDocumentation
|
|
6
6
|
* @module Utils
|
|
7
7
|
*/
|
|
8
|
+
/** @internal */
|
|
8
9
|
export const _implementationProhibited = Symbol.for("Implementations of this interface can only be obtained from the containing package");
|
|
9
10
|
function sym(name) {
|
|
10
11
|
return `${name}_core-frontend_INTERNAL_ONLY_DO_NOT_USE`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Symbols.js","sourceRoot":"","sources":["../../../../src/common/internal/Symbols.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAC;AAE1I,SAAS,GAAG,CAAC,IAAY;IACvB,OAAO,GAAG,IAAI,yCAAyC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjD,gBAAgB;AAChB,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,iCAAiC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;AACrG,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;AAC7D,gBAAgB;AAChB,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;AACnF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utils\n */\n\nexport const _implementationProhibited = Symbol.for(\"Implementations of this interface can only be obtained from the containing package\");\n\nfunction sym(name: string): string {\n return `${name}_core-frontend_INTERNAL_ONLY_DO_NOT_USE`;\n}\n\nexport const _accumulator = Symbol.for(sym(\"accumulator\"));\nexport const _batch = Symbol.for(sym(\"batch\"));\nexport const _branch = Symbol.for(sym(\"branch\"));\n/** @internal */\nexport const _callIpcChannel = Symbol.for(sym(\"callIpcChannel\"));\nexport const _featureTable = Symbol.for(sym(\"featureTable\"));\nexport const _nodes = Symbol.for(sym(\"nodes\"));\nexport const _onScheduleScriptReferenceChanged = Symbol.for(sym(\"onScheduleScriptReferenceChanged\"));\nexport const _requestSnap = Symbol.for(sym(\"requestSnap\"));\nexport const _renderSystem = Symbol.for(sym(\"renderSystem\"));\n/** @internal */\nexport const _scheduleScriptReference = Symbol.for(sym(\"scheduleScriptReference\"));\nexport const _textures = Symbol.for(sym(\"textures\"));\nexport const _transformCenter = Symbol.for(sym(\"transformCenter\"));\nexport const _transforms = Symbol.for(sym(\"transforms\"));\n"]}
|
|
1
|
+
{"version":3,"file":"Symbols.js","sourceRoot":"","sources":["../../../../src/common/internal/Symbols.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,gBAAgB;AAChB,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAC;AAE1I,SAAS,GAAG,CAAC,IAAY;IACvB,OAAO,GAAG,IAAI,yCAAyC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjD,gBAAgB;AAChB,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/C,MAAM,CAAC,MAAM,iCAAiC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;AACrG,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;AAC7D,gBAAgB;AAChB,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;AACnF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;AACrD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;AACnE,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utils\n */\n\n/** @internal */\nexport const _implementationProhibited = Symbol.for(\"Implementations of this interface can only be obtained from the containing package\");\n\nfunction sym(name: string): string {\n return `${name}_core-frontend_INTERNAL_ONLY_DO_NOT_USE`;\n}\n\nexport const _accumulator = Symbol.for(sym(\"accumulator\"));\nexport const _batch = Symbol.for(sym(\"batch\"));\nexport const _branch = Symbol.for(sym(\"branch\"));\n/** @internal */\nexport const _callIpcChannel = Symbol.for(sym(\"callIpcChannel\"));\nexport const _featureTable = Symbol.for(sym(\"featureTable\"));\nexport const _nodes = Symbol.for(sym(\"nodes\"));\nexport const _onScheduleScriptReferenceChanged = Symbol.for(sym(\"onScheduleScriptReferenceChanged\"));\nexport const _requestSnap = Symbol.for(sym(\"requestSnap\"));\nexport const _renderSystem = Symbol.for(sym(\"renderSystem\"));\n/** @internal */\nexport const _scheduleScriptReference = Symbol.for(sym(\"scheduleScriptReference\"));\nexport const _textures = Symbol.for(sym(\"textures\"));\nexport const _transformCenter = Symbol.for(sym(\"transformCenter\"));\nexport const _transforms = Symbol.for(sym(\"transforms\"));\n"]}
|
|
@@ -13,4 +13,8 @@ export { acquireImdlDecoder, appendQueryParams, ArcGisErrorCode, ArcGisGeometryR
|
|
|
13
13
|
export { GoogleMapsDecorator, LogoDecoration } from "./GoogleMapsDecorator";
|
|
14
14
|
export { DebugShaderFile } from "./render/RenderSystemDebugControl";
|
|
15
15
|
export { IModelTileTree } from "./tile/IModelTileTree";
|
|
16
|
+
export { type RenderPlan } from "./render/RenderPlan";
|
|
17
|
+
export { type RenderAreaPattern } from "./render/RenderAreaPattern";
|
|
18
|
+
export { type RenderGeometry } from "./render/RenderGeometry";
|
|
19
|
+
export { _implementationProhibited } from "../common/internal/Symbols";
|
|
16
20
|
//# sourceMappingURL=cross-package.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross-package.d.ts","sourceRoot":"","sources":["../../../src/internal/cross-package.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,KAAK,aAAa,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AACzH,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAGvG,OAAO,EACN,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,KAAK,wBAAwB,EAC7B,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,eAAe,EACf,KAAK,wBAAwB,EAC7B,eAAe,EACf,+BAA+B,EAC/B,kBAAkB,EAClB,KAAK,+BAA+B,EACpC,2BAA2B,EAC3B,KAAK,uBAAuB,EAC5B,uBAAuB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,kBAAkB,EAClB,KAAK,WAAW,EAChB,UAAU,EACV,KAAK,wBAAwB,EAC7B,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,KAAK,WAAW,EAChB,YAAY,EACZ,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,6BAA6B,EAC7E,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"cross-package.d.ts","sourceRoot":"","sources":["../../../src/internal/cross-package.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,KAAK,aAAa,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AACzH,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAGvG,OAAO,EACN,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,wBAAwB,EACxB,KAAK,wBAAwB,EAC7B,qBAAqB,EACrB,KAAK,qBAAqB,EAC1B,eAAe,EACf,KAAK,wBAAwB,EAC7B,eAAe,EACf,+BAA+B,EAC/B,kBAAkB,EAClB,KAAK,+BAA+B,EACpC,2BAA2B,EAC3B,KAAK,uBAAuB,EAC5B,uBAAuB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,kBAAkB,EAClB,KAAK,WAAW,EAChB,UAAU,EACV,KAAK,wBAAwB,EAC7B,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,KAAK,WAAW,EAChB,YAAY,EACZ,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,6BAA6B,EAC7E,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC"}
|
|
@@ -20,4 +20,5 @@ export { GoogleMapsDecorator, LogoDecoration } from "./GoogleMapsDecorator";
|
|
|
20
20
|
// Remove once CommonJS is dropped.
|
|
21
21
|
export { DebugShaderFile } from "./render/RenderSystemDebugControl";
|
|
22
22
|
export { IModelTileTree } from "./tile/IModelTileTree";
|
|
23
|
+
export { _implementationProhibited } from "../common/internal/Symbols";
|
|
23
24
|
//# sourceMappingURL=cross-package.js.map
|