@itwin/core-common 4.1.0-dev.6 → 4.1.0-dev.62
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 +58 -1
- package/lib/cjs/BriefcaseTypes.d.ts +13 -1
- package/lib/cjs/BriefcaseTypes.d.ts.map +1 -1
- package/lib/cjs/BriefcaseTypes.js.map +1 -1
- package/lib/cjs/ChangedElements.d.ts +2 -0
- package/lib/cjs/ChangedElements.d.ts.map +1 -1
- package/lib/cjs/ChangedElements.js +2 -0
- package/lib/cjs/ChangedElements.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.d.ts +26 -2
- package/lib/cjs/ConcurrentQuery.d.ts.map +1 -1
- package/lib/cjs/ConcurrentQuery.js +29 -3
- package/lib/cjs/ConcurrentQuery.js.map +1 -1
- package/lib/cjs/DisplayStyleSettings.d.ts +1 -15
- package/lib/cjs/DisplayStyleSettings.d.ts.map +1 -1
- package/lib/cjs/DisplayStyleSettings.js +1 -15
- package/lib/cjs/DisplayStyleSettings.js.map +1 -1
- package/lib/cjs/ECSqlReader.d.ts +164 -7
- package/lib/cjs/ECSqlReader.d.ts.map +1 -1
- package/lib/cjs/ECSqlReader.js +124 -12
- package/lib/cjs/ECSqlReader.js.map +1 -1
- package/lib/cjs/ElementProps.d.ts +2 -2
- package/lib/cjs/ElementProps.js.map +1 -1
- package/lib/cjs/FeatureIndex.d.ts +50 -4
- package/lib/cjs/FeatureIndex.d.ts.map +1 -1
- package/lib/cjs/FeatureIndex.js +44 -4
- package/lib/cjs/FeatureIndex.js.map +1 -1
- package/lib/cjs/FeatureTable.d.ts +48 -25
- package/lib/cjs/FeatureTable.d.ts.map +1 -1
- package/lib/cjs/FeatureTable.js +24 -14
- package/lib/cjs/FeatureTable.js.map +1 -1
- package/lib/cjs/IModel.d.ts +1 -1
- package/lib/cjs/IModel.d.ts.map +1 -1
- package/lib/cjs/IModel.js +1 -1
- package/lib/cjs/IModel.js.map +1 -1
- package/lib/cjs/IpcAppProps.d.ts +6 -6
- package/lib/cjs/IpcAppProps.d.ts.map +1 -1
- package/lib/cjs/IpcAppProps.js +8 -9
- package/lib/cjs/IpcAppProps.js.map +1 -1
- package/lib/cjs/NativeAppProps.d.ts +4 -3
- package/lib/cjs/NativeAppProps.d.ts.map +1 -1
- package/lib/cjs/NativeAppProps.js +5 -4
- package/lib/cjs/NativeAppProps.js.map +1 -1
- package/lib/cjs/QPoint.d.ts +21 -3
- package/lib/cjs/QPoint.d.ts.map +1 -1
- package/lib/cjs/QPoint.js +25 -3
- package/lib/cjs/QPoint.js.map +1 -1
- package/lib/cjs/Render.d.ts +27 -35
- package/lib/cjs/Render.d.ts.map +1 -1
- package/lib/cjs/Render.js +4 -67
- package/lib/cjs/Render.js.map +1 -1
- package/lib/cjs/RpcInterface.d.ts.map +1 -1
- package/lib/cjs/RpcInterface.js +25 -24
- package/lib/cjs/RpcInterface.js.map +1 -1
- package/lib/cjs/SkyBox.d.ts +3 -3
- package/lib/cjs/SkyBox.d.ts.map +1 -1
- package/lib/cjs/SkyBox.js +3 -3
- package/lib/cjs/SkyBox.js.map +1 -1
- package/lib/cjs/ViewFlags.d.ts +4 -4
- package/lib/cjs/ViewFlags.d.ts.map +1 -1
- package/lib/cjs/ViewFlags.js +4 -4
- package/lib/cjs/ViewFlags.js.map +1 -1
- package/lib/cjs/ViewProps.d.ts +429 -5
- package/lib/cjs/ViewProps.d.ts.map +1 -1
- package/lib/cjs/ViewProps.js +16 -0
- package/lib/cjs/ViewProps.js.map +1 -1
- package/lib/cjs/geometry/ElementGeometry.d.ts +6 -6
- package/lib/cjs/geometry/ElementGeometry.js +1 -1
- package/lib/cjs/geometry/ElementGeometry.js.map +1 -1
- package/lib/cjs/ipc/IpcSession.d.ts +4 -0
- package/lib/cjs/ipc/IpcSession.d.ts.map +1 -1
- package/lib/cjs/ipc/IpcSession.js +6 -6
- package/lib/cjs/ipc/IpcSession.js.map +1 -1
- package/lib/cjs/rpc/IModelReadRpcInterface.d.ts +4 -2
- package/lib/cjs/rpc/IModelReadRpcInterface.d.ts.map +1 -1
- package/lib/cjs/rpc/IModelReadRpcInterface.js +6 -4
- package/lib/cjs/rpc/IModelReadRpcInterface.js.map +1 -1
- package/lib/cjs/rpc/core/RpcInvocation.d.ts +2 -0
- package/lib/cjs/rpc/core/RpcInvocation.d.ts.map +1 -1
- package/lib/cjs/rpc/core/RpcInvocation.js +1 -0
- package/lib/cjs/rpc/core/RpcInvocation.js.map +1 -1
- package/lib/cjs/rpc/core/RpcRequest.d.ts.map +1 -1
- package/lib/cjs/rpc/core/RpcRequest.js.map +1 -1
- package/lib/cjs/rpc/web/BentleyCloudRpcProtocol.js +1 -1
- package/lib/cjs/rpc/web/BentleyCloudRpcProtocol.js.map +1 -1
- package/lib/cjs/tile/IModelTileIO.d.ts +2 -2
- package/lib/cjs/tile/IModelTileIO.js +2 -2
- package/lib/cjs/tile/IModelTileIO.js.map +1 -1
- package/lib/cjs/tile/TileMetadata.d.ts +14 -13
- package/lib/cjs/tile/TileMetadata.d.ts.map +1 -1
- package/lib/cjs/tile/TileMetadata.js +56 -44
- package/lib/cjs/tile/TileMetadata.js.map +1 -1
- package/lib/esm/BriefcaseTypes.d.ts +13 -1
- package/lib/esm/BriefcaseTypes.d.ts.map +1 -1
- package/lib/esm/BriefcaseTypes.js.map +1 -1
- package/lib/esm/ChangedElements.d.ts +2 -0
- package/lib/esm/ChangedElements.d.ts.map +1 -1
- package/lib/esm/ChangedElements.js +2 -0
- package/lib/esm/ChangedElements.js.map +1 -1
- package/lib/esm/ConcurrentQuery.d.ts +26 -2
- package/lib/esm/ConcurrentQuery.d.ts.map +1 -1
- package/lib/esm/ConcurrentQuery.js +29 -3
- package/lib/esm/ConcurrentQuery.js.map +1 -1
- package/lib/esm/DisplayStyleSettings.d.ts +1 -15
- package/lib/esm/DisplayStyleSettings.d.ts.map +1 -1
- package/lib/esm/DisplayStyleSettings.js +1 -15
- package/lib/esm/DisplayStyleSettings.js.map +1 -1
- package/lib/esm/ECSqlReader.d.ts +164 -7
- package/lib/esm/ECSqlReader.d.ts.map +1 -1
- package/lib/esm/ECSqlReader.js +124 -12
- package/lib/esm/ECSqlReader.js.map +1 -1
- package/lib/esm/ElementProps.d.ts +2 -2
- package/lib/esm/ElementProps.js.map +1 -1
- package/lib/esm/FeatureIndex.d.ts +50 -4
- package/lib/esm/FeatureIndex.d.ts.map +1 -1
- package/lib/esm/FeatureIndex.js +44 -4
- package/lib/esm/FeatureIndex.js.map +1 -1
- package/lib/esm/FeatureTable.d.ts +48 -25
- package/lib/esm/FeatureTable.d.ts.map +1 -1
- package/lib/esm/FeatureTable.js +24 -14
- package/lib/esm/FeatureTable.js.map +1 -1
- package/lib/esm/IModel.d.ts +1 -1
- package/lib/esm/IModel.d.ts.map +1 -1
- package/lib/esm/IModel.js +1 -1
- package/lib/esm/IModel.js.map +1 -1
- package/lib/esm/IpcAppProps.d.ts +6 -6
- package/lib/esm/IpcAppProps.d.ts.map +1 -1
- package/lib/esm/IpcAppProps.js +7 -8
- package/lib/esm/IpcAppProps.js.map +1 -1
- package/lib/esm/NativeAppProps.d.ts +4 -3
- package/lib/esm/NativeAppProps.d.ts.map +1 -1
- package/lib/esm/NativeAppProps.js +4 -3
- package/lib/esm/NativeAppProps.js.map +1 -1
- package/lib/esm/QPoint.d.ts +21 -3
- package/lib/esm/QPoint.d.ts.map +1 -1
- package/lib/esm/QPoint.js +25 -3
- package/lib/esm/QPoint.js.map +1 -1
- package/lib/esm/Render.d.ts +27 -35
- package/lib/esm/Render.d.ts.map +1 -1
- package/lib/esm/Render.js +3 -64
- package/lib/esm/Render.js.map +1 -1
- package/lib/esm/RpcInterface.d.ts.map +1 -1
- package/lib/esm/RpcInterface.js +25 -24
- package/lib/esm/RpcInterface.js.map +1 -1
- package/lib/esm/SkyBox.d.ts +3 -3
- package/lib/esm/SkyBox.d.ts.map +1 -1
- package/lib/esm/SkyBox.js +3 -3
- package/lib/esm/SkyBox.js.map +1 -1
- package/lib/esm/ViewFlags.d.ts +4 -4
- package/lib/esm/ViewFlags.d.ts.map +1 -1
- package/lib/esm/ViewFlags.js +4 -4
- package/lib/esm/ViewFlags.js.map +1 -1
- package/lib/esm/ViewProps.d.ts +429 -5
- package/lib/esm/ViewProps.d.ts.map +1 -1
- package/lib/esm/ViewProps.js +15 -1
- package/lib/esm/ViewProps.js.map +1 -1
- package/lib/esm/geometry/ElementGeometry.d.ts +6 -6
- package/lib/esm/geometry/ElementGeometry.js +1 -1
- package/lib/esm/geometry/ElementGeometry.js.map +1 -1
- package/lib/esm/ipc/IpcSession.d.ts +4 -0
- package/lib/esm/ipc/IpcSession.d.ts.map +1 -1
- package/lib/esm/ipc/IpcSession.js +5 -5
- package/lib/esm/ipc/IpcSession.js.map +1 -1
- package/lib/esm/rpc/IModelReadRpcInterface.d.ts +4 -2
- package/lib/esm/rpc/IModelReadRpcInterface.d.ts.map +1 -1
- package/lib/esm/rpc/IModelReadRpcInterface.js +6 -4
- package/lib/esm/rpc/IModelReadRpcInterface.js.map +1 -1
- package/lib/esm/rpc/core/RpcInvocation.d.ts +2 -0
- package/lib/esm/rpc/core/RpcInvocation.d.ts.map +1 -1
- package/lib/esm/rpc/core/RpcInvocation.js +1 -0
- package/lib/esm/rpc/core/RpcInvocation.js.map +1 -1
- package/lib/esm/rpc/core/RpcRequest.d.ts.map +1 -1
- package/lib/esm/rpc/core/RpcRequest.js.map +1 -1
- package/lib/esm/rpc/web/BentleyCloudRpcProtocol.js +1 -1
- package/lib/esm/rpc/web/BentleyCloudRpcProtocol.js.map +1 -1
- package/lib/esm/tile/IModelTileIO.d.ts +2 -2
- package/lib/esm/tile/IModelTileIO.js +2 -2
- package/lib/esm/tile/IModelTileIO.js.map +1 -1
- package/lib/esm/tile/TileMetadata.d.ts +14 -13
- package/lib/esm/tile/TileMetadata.d.ts.map +1 -1
- package/lib/esm/tile/TileMetadata.js +57 -45
- package/lib/esm/tile/TileMetadata.js.map +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TileMetadata.js","sourceRoot":"","sources":["../../../src/tile/TileMetadata.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tile\r\n */\r\n\r\nimport {\r\n assert, ByteStream, compareBooleans, compareBooleansOrUndefined, compareNumbers, compareStringsOrUndefined, Id64, Id64String,\r\n} from \"@itwin/core-bentley\";\r\nimport { Range3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { BatchType } from \"../FeatureTable\";\r\nimport { TileProps } from \"../TileProps\";\r\nimport { CurrentImdlVersion, FeatureTableHeader, ImdlFlags, ImdlHeader } from \"./IModelTileIO\";\r\nimport { TileReadError, TileReadStatus } from \"./TileIO\";\r\n\r\n// cspell:ignore imdl mult bitfield\r\n\r\n// NB: These constants correspond to those defined in Tile.cpp.\r\nnamespace Constants {\r\n export const minToleranceRatioMultiplier = 2;\r\n}\r\n\r\n/** Describes an iModel tile tree.\r\n * @internal\r\n */\r\nexport interface TileTreeMetadata {\r\n readonly modelId: Id64String;\r\n readonly is2d: boolean;\r\n readonly contentRange?: Range3d;\r\n readonly tileScreenSize: number;\r\n}\r\n\r\n/** Describes the contents of an iModel tile.\r\n * @internal\r\n */\r\nexport interface TileContentMetadata {\r\n readonly contentRange: Range3d;\r\n readonly isLeaf: boolean;\r\n readonly sizeMultiplier?: number;\r\n readonly emptySubRangeMask: number;\r\n}\r\n\r\n/** Describes an iModel tile.\r\n * @internal\r\n */\r\nexport interface TileMetadata extends TileContentMetadata {\r\n readonly contentId: string;\r\n readonly range: Range3d;\r\n}\r\n\r\n/** @internal */\r\nexport interface TileOptions {\r\n readonly maximumMajorTileFormatVersion: number;\r\n readonly enableInstancing: boolean;\r\n readonly enableImprovedElision: boolean;\r\n readonly ignoreAreaPatterns: boolean;\r\n readonly enableExternalTextures: boolean;\r\n readonly useProjectExtents: boolean;\r\n readonly optimizeBRepProcessing: boolean;\r\n readonly useLargerTiles: boolean;\r\n readonly disableMagnification: boolean;\r\n readonly alwaysSubdivideIncompleteTiles: boolean;\r\n readonly enableIndexedEdges: boolean;\r\n readonly generateAllPolyfaceEdges: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport namespace TileOptions {\r\n /** Given the string representation of an [[IModelTileTreeId]] and the contentId of a [Tile]($frontend) belonging to that [TileTree]($frontend),\r\n * compute the [[TileOptions]] that were used to generate the Ids.\r\n * @throws Error if `treeId` or `contentId` are not valid Ids.\r\n * @note `treeId` and `contentId` are assumed to be valid Ids. They are not fully parsed and validated - only the information required by this function is extracted.\r\n * @note `treeId` and `contentId` are assumed to have been produced for version 4 or later of the iMdl tile format.\r\n */\r\n export function fromTreeIdAndContentId(treeId: string, contentId: string): TileOptions {\r\n const tree = treeFlagsAndFormatVersionFromId(treeId);\r\n const contentFlags = contentFlagsFromId(contentId);\r\n const edgeOptions = edgeOptionsFromTreeId(treeId);\r\n\r\n return {\r\n maximumMajorTileFormatVersion: tree.version,\r\n enableInstancing: 0 !== (contentFlags & ContentFlags.AllowInstancing),\r\n enableImprovedElision: 0 !== (contentFlags & ContentFlags.ImprovedElision),\r\n ignoreAreaPatterns: 0 !== (contentFlags & ContentFlags.IgnoreAreaPatterns),\r\n enableExternalTextures: 0 !== (contentFlags & ContentFlags.ExternalTextures),\r\n useProjectExtents: 0 !== (tree.flags & TreeFlags.UseProjectExtents),\r\n optimizeBRepProcessing: 0 !== (tree.flags & TreeFlags.OptimizeBRepProcessing),\r\n useLargerTiles: 0 !== (tree.flags & TreeFlags.UseLargerTiles),\r\n disableMagnification: false,\r\n alwaysSubdivideIncompleteTiles: false,\r\n enableIndexedEdges: edgeOptions && edgeOptions.indexed,\r\n generateAllPolyfaceEdges: edgeOptions && edgeOptions.smooth,\r\n };\r\n }\r\n}\r\n\r\ntype ParsedPrimary = Omit<PrimaryTileTreeId, \"type\" | \"animationId\" | \"enforceDisplayPriority\">;\r\ninterface ParsedClassifier {\r\n type: BatchType.VolumeClassifier | BatchType.PlanarClassifier;\r\n expansion: number;\r\n}\r\n\r\n/** The result of [[parseTileTreeIdAndContentId]].\r\n * @internal\r\n */\r\nexport interface ParsedTileTreeIdAndContentId {\r\n modelId: Id64String;\r\n treeId: IModelTileTreeId;\r\n contentId: ContentIdSpec;\r\n options: TileOptions;\r\n}\r\n\r\nclass Parser {\r\n public readonly input: string;\r\n public curPos = 0;\r\n\r\n public constructor(input: string) {\r\n this.input = input;\r\n }\r\n\r\n public parse(contentId: string): ParsedTileTreeIdAndContentId {\r\n this.require(this.input.length > 0);\r\n\r\n // Skip version and flags, they're handled by TileOptions.fromTreeIdAndContentId\r\n while (this.curPos < this.input.length && this.cur() !== \"-\")\r\n this.advance();\r\n\r\n this.eat(\"-\");\r\n this.require(this.curPos < this.input.length);\r\n\r\n const classifier = this.cur() === \"C\" ? this.parseClassifier() : undefined;\r\n const animationId = this.parseAnimation();\r\n\r\n const primary = classifier ? undefined : this.parsePrimary();\r\n this.require((undefined === classifier) !== (undefined === primary));\r\n\r\n const modelId = this.input.substring(this.curPos);\r\n this.require(Id64.isId64(modelId));\r\n\r\n const { flags: treeFlags } = treeFlagsAndFormatVersionFromId(this.input);\r\n const options = TileOptions.fromTreeIdAndContentId(this.input, contentId);\r\n\r\n let parsedContentId: ContentIdSpec;\r\n try {\r\n parsedContentId = ContentIdProvider.create(true, options).specFromId(contentId);\r\n } catch (e) {\r\n this.reject(\"Invalid content Id\");\r\n }\r\n\r\n if (Object.keys(parsedContentId).some((key) => parsedContentId.hasOwnProperty(key) && typeof parsedContentId[key as keyof ContentIdSpec] === \"number\" && !Number.isFinite(parsedContentId[key as keyof ContentIdSpec])))\r\n throw new Error(\"Invalid content Id\");\r\n\r\n let treeId: IModelTileTreeId;\r\n if (classifier) {\r\n treeId = { ...classifier, animationId };\r\n } else {\r\n assert(undefined !== primary);\r\n const enforceDisplayPriority = (treeFlags & TreeFlags.EnforceDisplayPriority) !== 0 ? true : undefined;\r\n treeId = { ...primary, animationId, type: BatchType.Primary, enforceDisplayPriority };\r\n }\r\n\r\n return {\r\n contentId: parsedContentId,\r\n modelId,\r\n options,\r\n treeId,\r\n };\r\n }\r\n\r\n private cur(): string {\r\n this.require(this.curPos < this.input.length);\r\n return this.input[this.curPos];\r\n }\r\n\r\n private advance(): void {\r\n this.require(this.curPos < this.input.length);\r\n ++this.curPos;\r\n }\r\n\r\n private eat(expectedChar: string): void {\r\n this.require(this.cur() === expectedChar);\r\n this.advance();\r\n }\r\n\r\n private reject(message = \"Invalid tree Id\"): never {\r\n throw new Error(message);\r\n }\r\n\r\n private require(condition: boolean, message = \"Invalid tree Id\"): asserts condition {\r\n if (!condition)\r\n this.reject(message);\r\n }\r\n\r\n private parseClassifier(): ParsedClassifier | undefined {\r\n this.eat(\"C\");\r\n let type = BatchType.VolumeClassifier;\r\n if (this.cur() === \"P\") {\r\n type = BatchType.PlanarClassifier;\r\n this.advance();\r\n }\r\n\r\n this.eat(\":\");\r\n\r\n // C: or CP: is always folowed by expansion then an underscore.\r\n let expansionStr = \"\";\r\n while (this.curPos < this.input.length && (this.cur() >= \"0\" && this.cur() <= \"9\" || this.cur() === \".\")) {\r\n expansionStr += this.cur();\r\n this.advance();\r\n }\r\n\r\n this.eat(\"_\");\r\n\r\n const expansion = Number.parseFloat(expansionStr);\r\n this.require(!Number.isNaN(expansion));\r\n\r\n return { type, expansion };\r\n }\r\n\r\n private parseAnimation(): Id64String | undefined {\r\n if (this.cur() !== \"A\")\r\n return undefined;\r\n\r\n this.eat(\"A\");\r\n this.eat(\":\");\r\n\r\n const termPos = this.input.indexOf(\"_\", this.curPos);\r\n this.require(termPos > this.curPos);\r\n\r\n const animationId = this.input.substring(this.curPos, termPos);\r\n this.require(Id64.isId64(animationId));\r\n\r\n this.curPos = termPos + 1; // Skip \"_\"\r\n return animationId;\r\n }\r\n\r\n private parsePrimary(): ParsedPrimary {\r\n const edges = this.parseEdges();\r\n const sectionCut = this.parseSectionCut();\r\n return { edges, sectionCut };\r\n }\r\n\r\n private parseEdges(): EdgeOptions | false {\r\n if (\"E\" !== this.cur())\r\n return { indexed: false, smooth: false };\r\n\r\n this.eat(\"E\");\r\n this.eat(\":\");\r\n\r\n const typeStr = this.cur();\r\n this.eat(typeStr);\r\n this.eat(\"_\");\r\n\r\n switch (typeStr) {\r\n case \"0\": return false;\r\n case \"2\": return { indexed: true, smooth: false };\r\n case \"3\": return { indexed: false, smooth: true };\r\n case \"4\": return { indexed: true, smooth: true };\r\n default: this.reject();\r\n }\r\n }\r\n\r\n private parseSectionCut(): string | undefined {\r\n if (\"S\" !== this.cur())\r\n return undefined;\r\n\r\n this.eat(\"S\");\r\n const termPos = this.input.indexOf(\"s\", this.curPos);\r\n this.require(termPos > this.curPos);\r\n\r\n const sectionCut = this.input.substring(this.curPos, termPos);\r\n this.curPos = termPos + 1; // Skip \"_\";\r\n return sectionCut;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function parseTileTreeIdAndContentId(treeId: string, contentId: string): ParsedTileTreeIdAndContentId {\r\n const parser = new Parser(treeId);\r\n return parser.parse(contentId);\r\n}\r\n\r\n/** @internal */\r\nexport const defaultTileOptions: TileOptions = Object.freeze({\r\n maximumMajorTileFormatVersion: CurrentImdlVersion.Major,\r\n enableInstancing: true,\r\n enableImprovedElision: true,\r\n ignoreAreaPatterns: false,\r\n enableExternalTextures: true,\r\n useProjectExtents: true,\r\n optimizeBRepProcessing: true,\r\n useLargerTiles: true,\r\n disableMagnification: false,\r\n alwaysSubdivideIncompleteTiles: false,\r\n enableIndexedEdges: true,\r\n generateAllPolyfaceEdges: true,\r\n});\r\n\r\nfunction contentFlagsFromId(id: string): ContentFlags {\r\n if (0 === id.length || \"-\" !== id[0])\r\n throw new Error(\"Invalid content Id\");\r\n\r\n // V4: -flags-d-i-j-k-m - version in tree Id\r\n const end = id.indexOf(\"-\", 1);\r\n if (-1 !== end) {\r\n const flags = Number.parseInt(id.substring(1, end), 16);\r\n if (!Number.isNaN(flags))\r\n return flags;\r\n }\r\n\r\n throw new Error(\"Invalid content Id\");\r\n}\r\n\r\nfunction treeFlagsAndFormatVersionFromId(id: string): { flags: TreeFlags, version: number } {\r\n if (0 === id.length)\r\n throw new Error(\"Invalid tree Id\");\r\n\r\n let parts = id.split(\"-\");\r\n if (parts.length > 0) {\r\n parts = parts[0].split(\"_\");\r\n if (parts.length === 2) {\r\n const version = Number.parseInt(parts[0], 16);\r\n const flags = Number.parseInt(parts[1], 16);\r\n if (!Number.isNaN(version) || !Number.isNaN(flags))\r\n return { version, flags };\r\n }\r\n }\r\n\r\n throw new Error(\"Invalid tree Id\");\r\n}\r\n\r\nfunction edgeOptionsFromTreeId(id: string): EdgeOptions {\r\n const pos = id.indexOf(\"E:\");\r\n if (pos <= 0)\r\n return { indexed: false, smooth: false };\r\n\r\n switch (id[pos + 2]) {\r\n case \"0\": return { indexed: defaultTileOptions.enableIndexedEdges, smooth: defaultTileOptions.generateAllPolyfaceEdges };\r\n case \"2\": return { indexed: true, smooth: false };\r\n case \"3\": return { indexed: false, smooth: true };\r\n case \"4\": return { indexed: true, smooth: true };\r\n }\r\n\r\n throw new Error(\"Invalid tree Id\");\r\n}\r\n\r\n/** @internal */\r\nexport function getMaximumMajorTileFormatVersion(maxMajorVersion: number, formatVersion?: number): number {\r\n // The `formatVersion` input is from the backend, telling us precisely the maximum major+minor version it can produce.\r\n // Ensure we do not request tiles of a newer major version than backend can supply or it can read; and also limit major version\r\n // to that optionally configured by the app.\r\n let majorVersion = maxMajorVersion;\r\n if (undefined !== formatVersion)\r\n majorVersion = Math.min((formatVersion >>> 0x10), majorVersion);\r\n\r\n // Version number less than 1 is invalid - ignore\r\n majorVersion = Math.max(majorVersion, 1);\r\n\r\n // Version number greater than current known version ignored\r\n majorVersion = Math.min(majorVersion, CurrentImdlVersion.Major);\r\n\r\n // Version numbers are integers - round down\r\n return Math.max(Math.floor(majorVersion), 1);\r\n}\r\n\r\n/** Flags controlling the structure of a tile tree. The flags are part of the tile tree's Id.\r\n * @alpha\r\n */\r\nexport enum TreeFlags {\r\n None = 0,\r\n UseProjectExtents = 1 << 0, // Use project extents as the basis of the tile tree's range.\r\n EnforceDisplayPriority = 1 << 1, // For 3d plan projection models, group graphics into layers based on subcategory.\r\n OptimizeBRepProcessing = 1 << 2, // Use an optimized pipeline for producing facets from BRep entities.\r\n UseLargerTiles = 1 << 3, // Produce tiles of larger size in screen pixels.\r\n}\r\n\r\n/** Describes how edges should be produced for tiles in a tile tree.\r\n * @internal\r\n */\r\nexport interface EdgeOptions {\r\n /** Generate indexed edges. These use less memory and draw more efficiently than non-indexed edges, but require WebGL 2.\r\n * Generally the display system will determine which to use based on the device's capabilities and application configuration.\r\n */\r\n indexed: boolean;\r\n /** For polyfaces that lack edge visibility information, generate edges for all faces; otherwise, infer edges from mesh topology. */\r\n smooth: boolean;\r\n}\r\n\r\nfunction compareEdgeOptions(a: EdgeOptions | false, b: EdgeOptions | false): number {\r\n if (typeof a !== typeof b)\r\n return a ? 1 : -1;\r\n\r\n if (typeof a === \"boolean\") {\r\n assert(typeof b === \"boolean\");\r\n return compareBooleans(a, b);\r\n }\r\n\r\n assert(typeof b === \"object\");\r\n let cmp = compareBooleans(a.indexed, b.indexed);\r\n if (0 === cmp)\r\n cmp = compareBooleans(a.smooth, b.smooth);\r\n\r\n return cmp;\r\n}\r\n\r\n/** Describes a tile tree used to draw the contents of a model, possibly with embedded animation.\r\n * @internal\r\n */\r\nexport interface PrimaryTileTreeId {\r\n /** Describes the type of tile tree. */\r\n type: BatchType.Primary;\r\n /** The type of edges to include in tile content. */\r\n edges: EdgeOptions | false;\r\n /** Id of the [DisplayStyle]($backend) or [RenderTimeline]($backend) element holding the [[RenderSchedule]] script to be applied to the tiles. */\r\n animationId?: Id64String;\r\n /** If true, meshes within the tiles will be grouped into nodes based on the display priority associated with their subcategories,\r\n * for ensuring the graphics display with correct priority.\r\n */\r\n enforceDisplayPriority?: boolean;\r\n /** If defined, the compact string representation of a clip vector applied to the tiles to produce cut geometry at the intersections with the clip planes.\r\n * Any geometry *not* intersecting the clip planes is omitted from the tiles.\r\n * @see [ClipVector.toCompactString[($core-geometry).\r\n */\r\n sectionCut?: string;\r\n}\r\n\r\n/** Describes a tile tree that can classify the contents of other tile trees using the model's geometry.\r\n * @internal\r\n */\r\nexport interface ClassifierTileTreeId {\r\n type: BatchType.VolumeClassifier | BatchType.PlanarClassifier;\r\n expansion: number;\r\n animationId?: Id64String;\r\n}\r\n\r\nfunction animationIdToString(animationId: Id64String): string {\r\n return `A:${animationId}_`;\r\n}\r\n\r\n/** Describes the Id of an iModel tile tree.\r\n * @internal\r\n */\r\nexport type IModelTileTreeId = PrimaryTileTreeId | ClassifierTileTreeId;\r\n\r\n/** Convert a tile tree Id to its string representation.\r\n * @internal\r\n */\r\nexport function iModelTileTreeIdToString(modelId: Id64String, treeId: IModelTileTreeId, options: TileOptions): string {\r\n let idStr = \"\";\r\n let flags = options.useProjectExtents ? TreeFlags.UseProjectExtents : TreeFlags.None;\r\n if (options.optimizeBRepProcessing)\r\n flags |= TreeFlags.OptimizeBRepProcessing;\r\n\r\n if (options.useLargerTiles)\r\n flags |= TreeFlags.UseLargerTiles;\r\n\r\n if (BatchType.Primary === treeId.type) {\r\n if (undefined !== treeId.animationId)\r\n idStr = `${idStr}${animationIdToString(treeId.animationId)}`;\r\n else if (treeId.enforceDisplayPriority) // animation and priority are currently mutually exclusive\r\n flags |= TreeFlags.EnforceDisplayPriority;\r\n\r\n let edges;\r\n if (!treeId.edges) {\r\n edges = \"E:0_\";\r\n } else {\r\n if (!treeId.edges.smooth)\r\n edges = treeId.edges.indexed ? \"E:2_\" : \"\";\r\n else\r\n edges = treeId.edges.indexed ? \"E:4_\" : \"E:3_\";\r\n }\r\n\r\n const sectionCut = treeId.sectionCut ? `S${treeId.sectionCut}s` : \"\";\r\n idStr = `${idStr}${edges}${sectionCut}`;\r\n } else {\r\n const typeStr = BatchType.PlanarClassifier === treeId.type ? \"CP\" : \"C\";\r\n idStr = `${idStr + typeStr}:${treeId.expansion.toFixed(6)}_`;\r\n\r\n if (BatchType.VolumeClassifier === treeId.type)\r\n flags |= TreeFlags.UseProjectExtents;\r\n\r\n if (undefined !== treeId.animationId)\r\n idStr = `${idStr}${animationIdToString(treeId.animationId)}`;\r\n }\r\n\r\n const version = getMaximumMajorTileFormatVersion(options.maximumMajorTileFormatVersion);\r\n if (version >= 4) {\r\n const prefix = `${version.toString(16)}_${flags.toString(16)}-`;\r\n idStr = prefix + idStr;\r\n }\r\n\r\n return idStr + modelId;\r\n}\r\n\r\n/** Ordinal comparison of two tile tree Ids, e.g., for use in sorted containers.\r\n * @internal\r\n */\r\nexport function compareIModelTileTreeIds(lhs: IModelTileTreeId, rhs: IModelTileTreeId): number {\r\n let cmp = compareNumbers(lhs.type, rhs.type);\r\n if (0 === cmp)\r\n cmp = compareStringsOrUndefined(lhs.animationId, rhs.animationId);\r\n\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n // NB: The redundant checks on BatchType below are to satisfy compiler.\r\n assert(lhs.type === rhs.type);\r\n if (BatchType.Primary === lhs.type && BatchType.Primary === rhs.type) {\r\n cmp = compareEdgeOptions(lhs.edges, rhs.edges);\r\n if (0 === cmp) {\r\n cmp = compareBooleansOrUndefined(lhs.enforceDisplayPriority, rhs.enforceDisplayPriority);\r\n if (0 === cmp)\r\n cmp = compareStringsOrUndefined(lhs.sectionCut, rhs.sectionCut);\r\n }\r\n } else if (BatchType.Primary !== lhs.type && BatchType.Primary !== rhs.type) {\r\n cmp = compareNumbers(lhs.expansion, rhs.expansion);\r\n }\r\n\r\n return cmp;\r\n}\r\n\r\n/** Flags controlling how tile content is produced. The flags are part of the ContentId.\r\n * @alpha\r\n */\r\nexport enum ContentFlags {\r\n None = 0,\r\n AllowInstancing = 1 << 0,\r\n ImprovedElision = 1 << 1,\r\n IgnoreAreaPatterns = 1 << 2,\r\n ExternalTextures = 1 << 3,\r\n}\r\n\r\n/** Describes the components of a tile's content Id.\r\n *\r\n * The depth specifies how many subdivisions from the root tile are to be performed to reach the sub-volume of interest.\r\n *\r\n * The i, j, and k parameters specify how to subdivide the tile's volume. Each sub-division is performed along the longest axis of the\r\n * volume. The volume is first sub-divided based on `i`, then the result sub-divided based on `j`, and finally that result sub-divided\r\n * based on `k`.\r\n *\r\n * The multiplier is an integer - generally a power of two - multiplied by the screen size of a tile (512 pixels) used to\r\n * produce a higher-resolution tile for the same volume.\r\n * @internal\r\n */\r\ninterface ContentIdSpec {\r\n depth: number;\r\n i: number;\r\n j: number;\r\n k: number;\r\n multiplier: number;\r\n}\r\n\r\n/** Contains logic for working with tile content Ids according to a specific content Id scheme. Which scheme is used depends on\r\n * the major version of the tile format.\r\n * @internal\r\n */\r\nexport abstract class ContentIdProvider {\r\n public readonly majorFormatVersion: number;\r\n public readonly contentFlags: ContentFlags;\r\n\r\n protected constructor(formatVersion: number, contentFlags: ContentFlags) {\r\n this.majorFormatVersion = formatVersion;\r\n this.contentFlags = contentFlags;\r\n }\r\n\r\n public get rootContentId(): string {\r\n return this.computeId(0, 0, 0, 0, 1);\r\n }\r\n\r\n public idFromParentAndMultiplier(parentId: string, multiplier: number): string {\r\n const lastSepPos = parentId.lastIndexOf(this._separator);\r\n assert(-1 !== lastSepPos);\r\n return parentId.substring(0, lastSepPos + 1) + multiplier.toString(16);\r\n }\r\n\r\n public specFromId(id: string): ContentIdSpec {\r\n const parts = id.split(this._separator);\r\n const len = parts.length;\r\n assert(len >= 5);\r\n return {\r\n depth: parseInt(parts[len - 5], 16),\r\n i: parseInt(parts[len - 4], 16),\r\n j: parseInt(parts[len - 3], 16),\r\n k: parseInt(parts[len - 2], 16),\r\n multiplier: parseInt(parts[len - 1], 16),\r\n };\r\n }\r\n\r\n public idFromSpec(spec: ContentIdSpec): string {\r\n return this.computeId(spec.depth, spec.i, spec.j, spec.k, spec.multiplier);\r\n }\r\n\r\n protected join(depth: number, i: number, j: number, k: number, mult: number): string {\r\n const sep = this._separator;\r\n return depth.toString(16) + sep + i.toString(16) + sep + j.toString(16) + sep + k.toString(16) + sep + mult.toString(16);\r\n }\r\n\r\n protected abstract get _separator(): string;\r\n protected abstract computeId(depth: number, i: number, j: number, k: number, mult: number): string;\r\n\r\n /** formatVersion is the maximum major version supported by the back-end supplying the tile tree.\r\n * Must ensure front-end does not request tiles of a format the back-end cannot supply, and back-end does\r\n * not supply tiles of a format the front-end doesn't recognize.\r\n */\r\n public static create(allowInstancing: boolean, options: TileOptions, formatVersion?: number): ContentIdProvider {\r\n const majorVersion = getMaximumMajorTileFormatVersion(options.maximumMajorTileFormatVersion, formatVersion);\r\n assert(majorVersion > 0);\r\n assert(Math.floor(majorVersion) === majorVersion);\r\n switch (majorVersion) {\r\n case 0:\r\n case 1:\r\n return new ContentIdV1Provider(majorVersion);\r\n case 2:\r\n case 3:\r\n return new ContentIdV2Provider(majorVersion, allowInstancing, options);\r\n default:\r\n return new ContentIdV4Provider(allowInstancing, options, majorVersion);\r\n }\r\n }\r\n}\r\n\r\n/** The original (major version 1) tile format used a content Id scheme of the format\r\n * `depth/i/j/k/multiplier`.\r\n * @internal\r\n */\r\nclass ContentIdV1Provider extends ContentIdProvider {\r\n public constructor(majorVersion: number) {\r\n super(majorVersion, ContentFlags.None);\r\n }\r\n\r\n protected get _separator() { return \"/\"; }\r\n protected computeId(depth: number, i: number, j: number, k: number, mult: number): string {\r\n return this.join(depth, i, j, k, mult);\r\n }\r\n}\r\n\r\n/** Tile formats 2 and 3 use a content Id scheme encoding styling flags and the major format version\r\n * into the content Id, of the format `_majorVersion_flags_depth_i_j_k_multiplier`.\r\n * @internal\r\n */\r\nclass ContentIdV2Provider extends ContentIdProvider {\r\n private readonly _prefix: string;\r\n\r\n public constructor(majorVersion: number, allowInstancing: boolean, options: TileOptions) {\r\n const flags = (allowInstancing && options.enableInstancing) ? ContentFlags.AllowInstancing : ContentFlags.None;\r\n super(majorVersion, flags);\r\n this._prefix = this._separator + majorVersion.toString(16) + this._separator + flags.toString(16) + this._separator;\r\n }\r\n\r\n protected get _separator() { return \"_\"; }\r\n protected computeId(depth: number, i: number, j: number, k: number, mult: number): string {\r\n return this._prefix + this.join(depth, i, j, k, mult);\r\n }\r\n}\r\n\r\n/** Tile formats 4+ encode styling flags but not major format version. (The version is specified by the tile tree's Id).\r\n * Format: `-flags-depth-i-j-k-multiplier`.\r\n * @internal\r\n */\r\nclass ContentIdV4Provider extends ContentIdProvider {\r\n private readonly _prefix: string;\r\n\r\n public constructor(allowInstancing: boolean, options: TileOptions, majorVersion: number) {\r\n let flags = (allowInstancing && options.enableInstancing) ? ContentFlags.AllowInstancing : ContentFlags.None;\r\n if (options.enableImprovedElision)\r\n flags = flags | ContentFlags.ImprovedElision;\r\n\r\n if (options.ignoreAreaPatterns)\r\n flags = flags | ContentFlags.IgnoreAreaPatterns;\r\n\r\n if (options.enableExternalTextures)\r\n flags = flags | ContentFlags.ExternalTextures;\r\n\r\n super(majorVersion, flags);\r\n this._prefix = this._separator + flags.toString(16) + this._separator;\r\n }\r\n\r\n protected get _separator() { return \"-\"; }\r\n protected computeId(depth: number, i: number, j: number, k: number, mult: number): string {\r\n return this._prefix + this.join(depth, i, j, k, mult);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function bisectTileRange3d(range: Range3d, takeUpper: boolean): void {\r\n const diag = range.diagonal();\r\n const pt = takeUpper ? range.high : range.low;\r\n if (diag.x > diag.y && diag.x > diag.z)\r\n pt.x = (range.low.x + range.high.x) / 2.0;\r\n else if (diag.y > diag.z)\r\n pt.y = (range.low.y + range.high.y) / 2.0;\r\n else\r\n pt.z = (range.low.z + range.high.z) / 2.0;\r\n}\r\n\r\n/** @internal */\r\nexport function bisectTileRange2d(range: Range3d, takeUpper: boolean): void {\r\n const diag = range.diagonal();\r\n const pt = takeUpper ? range.high : range.low;\r\n if (diag.x > diag.y)\r\n pt.x = (range.low.x + range.high.x) / 2.0;\r\n else\r\n pt.y = (range.low.y + range.high.y) / 2.0;\r\n}\r\n\r\n/** Given a description of a tile, compute the ranges which would result from sub-dividing its range into 4 or 8 sub-volumes.\r\n * @internal\r\n */\r\nexport function computeChildTileRanges(tile: TileMetadata, root: TileTreeMetadata): Array<{ range: Range3d, isEmpty: boolean }> {\r\n const emptyMask = tile.emptySubRangeMask;\r\n const is2d = root.is2d;\r\n const bisectRange = is2d ? bisectTileRange2d : bisectTileRange3d;\r\n\r\n const ranges: Array<{ range: Range3d, isEmpty: boolean }> = [];\r\n for (let i = 0; i < 2; i++) {\r\n for (let j = 0; j < 2; j++) {\r\n for (let k = 0; k < (is2d ? 1 : 2); k++) {\r\n const emptyBit = 1 << (i + j * 2 + k * 4);\r\n const isEmpty = 0 !== (emptyMask & emptyBit);\r\n\r\n const range = tile.range.clone();\r\n bisectRange(range, 0 === i);\r\n bisectRange(range, 0 === j);\r\n if (!is2d)\r\n bisectRange(range, 0 === k);\r\n\r\n ranges.push({ range, isEmpty });\r\n }\r\n }\r\n }\r\n\r\n return ranges;\r\n}\r\n\r\n/** Given a description of the parent tile, obtain the properties of its child tiles, and the number of empty children.\r\n * @internal\r\n */\r\nexport function computeChildTileProps(parent: TileMetadata, idProvider: ContentIdProvider, root: TileTreeMetadata): { children: TileProps[], numEmpty: number } {\r\n let numEmpty = 0;\r\n const children: TileProps[] = [];\r\n\r\n // Leaf nodes have no children\r\n if (parent.isLeaf)\r\n return { children, numEmpty };\r\n\r\n // One child, same volume as parent, but higher-resolution.\r\n if (undefined !== parent.sizeMultiplier) {\r\n const sizeMultiplier = parent.sizeMultiplier * 2;\r\n const contentId = idProvider.idFromParentAndMultiplier(parent.contentId, sizeMultiplier);\r\n children.push({\r\n contentId,\r\n range: parent.range,\r\n contentRange: parent.contentRange,\r\n sizeMultiplier,\r\n isLeaf: false,\r\n maximumSize: root.tileScreenSize,\r\n });\r\n\r\n return { children, numEmpty };\r\n }\r\n\r\n // Sub-divide parent's range into 4 (for 2d trees) or 8 (for 3d trees) child tiles.\r\n const parentSpec = idProvider.specFromId(parent.contentId);\r\n const childSpec: ContentIdSpec = { ...parentSpec };\r\n childSpec.depth = parentSpec.depth + 1;\r\n\r\n // This mask is a bitfield in which an 'on' bit indicates sub-volume containing no geometry.\r\n // Don't bother creating children or requesting content for such empty volumes.\r\n const emptyMask = parent.emptySubRangeMask;\r\n\r\n // Spatial tree range == project extents; content range == model range.\r\n // Trivially reject children whose ranges are entirely outside model range.\r\n let treeContentRange = root.contentRange;\r\n if (undefined !== treeContentRange && treeContentRange.containsRange(parent.range)) {\r\n // Parent is wholly within model range - don't bother testing child ranges against it.\r\n treeContentRange = undefined;\r\n }\r\n\r\n const is2d = root.is2d;\r\n const bisectRange = is2d ? bisectTileRange2d : bisectTileRange3d;\r\n for (let i = 0; i < 2; i++) {\r\n for (let j = 0; j < 2; j++) {\r\n for (let k = 0; k < (is2d ? 1 : 2); k++) {\r\n const emptyBit = 1 << (i + j * 2 + k * 4);\r\n if (0 !== (emptyMask & emptyBit)) {\r\n // volume is known to contain no geometry.\r\n ++numEmpty;\r\n continue;\r\n }\r\n\r\n const range = parent.range.clone();\r\n bisectRange(range, 0 === i);\r\n bisectRange(range, 0 === j);\r\n if (!is2d)\r\n bisectRange(range, 0 === k);\r\n\r\n if (undefined !== treeContentRange && !range.intersectsRange(treeContentRange)) {\r\n // volume is within project extents but entirely outside model range\r\n ++numEmpty;\r\n continue;\r\n }\r\n\r\n childSpec.i = parentSpec.i * 2 + i;\r\n childSpec.j = parentSpec.j * 2 + j;\r\n childSpec.k = parentSpec.k * 2 + k;\r\n\r\n const childId = idProvider.idFromSpec(childSpec);\r\n children.push({ contentId: childId, range, maximumSize: root.tileScreenSize });\r\n }\r\n }\r\n }\r\n\r\n return { children, numEmpty };\r\n}\r\n\r\n/** @internal */\r\nexport interface TileContentDescription extends TileContentMetadata {\r\n readonly featureTableStartPos: number;\r\n}\r\n\r\n/** Deserializes tile content metadata.\r\n * @throws [[TileReadError]]\r\n * @internal\r\n * @deprecated in 4.0. Use decodeTileContentDescription. I think tile agents (or their tests) are using this function.\r\n */\r\nexport function readTileContentDescription(stream: ByteStream, sizeMultiplier: number | undefined, is2d: boolean, options: TileOptions, isVolumeClassifier: boolean): TileContentDescription {\r\n return decodeTileContentDescription({ stream, sizeMultiplier, is2d, options, isVolumeClassifier });\r\n}\r\n\r\n/** @internal */\r\nexport interface DecodeTileContentDescriptionArgs {\r\n stream: ByteStream;\r\n options: TileOptions;\r\n isVolumeClassifier?: boolean;\r\n is2d?: boolean;\r\n sizeMultiplier?: number;\r\n isLeaf?: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport function decodeTileContentDescription(args: DecodeTileContentDescriptionArgs): TileContentDescription {\r\n const { stream, options } = args;\r\n const isVolumeClassifier = args.isVolumeClassifier ?? false;\r\n\r\n stream.reset();\r\n\r\n const header = new ImdlHeader(stream);\r\n if (!header.isValid)\r\n throw new TileReadError(TileReadStatus.InvalidHeader);\r\n else if (!header.isReadableVersion)\r\n throw new TileReadError(TileReadStatus.NewerMajorVersion);\r\n\r\n // Skip the feature table.\r\n const featureTableStartPos = stream.curPos;\r\n const ftHeader = FeatureTableHeader.readFrom(stream);\r\n if (undefined === ftHeader)\r\n throw new TileReadError(TileReadStatus.InvalidFeatureTable);\r\n\r\n stream.curPos = featureTableStartPos + ftHeader.length;\r\n\r\n let sizeMultiplier = args.sizeMultiplier;\r\n let isLeaf = args.isLeaf;\r\n if (undefined === isLeaf) {\r\n // Determine subdivision based on header data.\r\n const completeTile = 0 === (header.flags & ImdlFlags.Incomplete);\r\n const emptyTile = completeTile && 0 === header.numElementsIncluded && 0 === header.numElementsExcluded;\r\n isLeaf = (emptyTile || isVolumeClassifier); // Current classifier algorithm supports only a single tile.\r\n if (!isLeaf) {\r\n // Non-spatial (2d) models are of arbitrary scale and contain geometry like line work and especially text which\r\n // can be adversely affected by quantization issues when zooming in closely.\r\n const maxLeafTolerance = 1.0;\r\n\r\n // Must sub-divide if tile explicitly specifies...\r\n let canSkipSubdivision = 0 === (header.flags & ImdlFlags.DisallowMagnification);\r\n // ...or in 2d, or if app explicitly disabled magnification, or tolerance large enough to risk quantization error...\r\n canSkipSubdivision = canSkipSubdivision && !args.is2d && !options.disableMagnification && header.tolerance <= maxLeafTolerance;\r\n // ...or app specifies incomplete tiles must always be sub-divided.\r\n canSkipSubdivision = canSkipSubdivision && (completeTile || !options.alwaysSubdivideIncompleteTiles);\r\n if (canSkipSubdivision) {\r\n const minElementsPerTile = 100;\r\n if (completeTile && 0 === header.numElementsExcluded && header.numElementsIncluded <= minElementsPerTile) {\r\n const containsCurves = 0 !== (header.flags & ImdlFlags.ContainsCurves);\r\n if (!containsCurves)\r\n isLeaf = true;\r\n else if (undefined === sizeMultiplier)\r\n sizeMultiplier = 1.0;\r\n } else if (undefined === sizeMultiplier && header.numElementsIncluded + header.numElementsExcluded <= minElementsPerTile) {\r\n sizeMultiplier = 1.0;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n featureTableStartPos,\r\n contentRange: header.contentRange,\r\n isLeaf,\r\n sizeMultiplier,\r\n emptySubRangeMask: header.emptySubRanges,\r\n };\r\n}\r\n\r\nconst scratchRangeDiagonal = new Vector3d();\r\n\r\n/** Compute the chord tolerance for the specified tile of the given range with the specified size multiplier.\r\n * @internal\r\n */\r\nexport function computeTileChordTolerance(tile: TileMetadata, is3d: boolean, tileScreenSize: number): number {\r\n if (tile.range.isNull)\r\n return 0;\r\n\r\n const diagonal = tile.range.diagonal(scratchRangeDiagonal);\r\n const diagDist = is3d ? diagonal.magnitude() : diagonal.magnitudeXY();\r\n\r\n const mult = Math.max(tile.sizeMultiplier ?? 1, 1);\r\n return diagDist / (tileScreenSize * Constants.minToleranceRatioMultiplier * Math.max(1, mult));\r\n}\r\n\r\n/** Deserializes tile metadata.\r\n * @internal\r\n */\r\nexport class TileMetadataReader {\r\n private readonly _is2d: boolean;\r\n private readonly _isVolumeClassifier: boolean;\r\n private readonly _options: TileOptions;\r\n\r\n public constructor(type: BatchType, is2d: boolean, options: TileOptions) {\r\n this._is2d = is2d;\r\n this._isVolumeClassifier = BatchType.VolumeClassifier === type;\r\n this._options = options;\r\n }\r\n\r\n /** Produce metadata from the specified tile content.\r\n * @throws [[TileReadError]]\r\n */\r\n public read(stream: ByteStream, props: TileProps): TileMetadata {\r\n const content = decodeTileContentDescription({\r\n stream,\r\n sizeMultiplier: props.sizeMultiplier,\r\n is2d: this._is2d,\r\n options: this._options,\r\n isVolumeClassifier: this._isVolumeClassifier,\r\n });\r\n\r\n return {\r\n contentRange: content.contentRange,\r\n isLeaf: content.isLeaf,\r\n sizeMultiplier: content.sizeMultiplier,\r\n emptySubRangeMask: content.emptySubRangeMask,\r\n range: Range3d.fromJSON(props.range),\r\n contentId: props.contentId,\r\n };\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"TileMetadata.js","sourceRoot":"","sources":["../../../src/tile/TileMetadata.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tile\r\n */\r\n\r\nimport {\r\n assert, ByteStream, compareBooleans, compareBooleansOrUndefined, compareNumbers, compareStrings, compareStringsOrUndefined, Id64, Id64String,\r\n} from \"@itwin/core-bentley\";\r\nimport { Range3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { BatchType } from \"../FeatureTable\";\r\nimport { TileProps } from \"../TileProps\";\r\nimport { CurrentImdlVersion, FeatureTableHeader, ImdlFlags, ImdlHeader } from \"./IModelTileIO\";\r\nimport { TileReadError, TileReadStatus } from \"./TileIO\";\r\n\r\n// cspell:ignore imdl mult bitfield\r\n\r\n// NB: These constants correspond to those defined in Tile.cpp.\r\nnamespace Constants {\r\n export const minToleranceRatioMultiplier = 2;\r\n}\r\n\r\n/** Describes an iModel tile tree.\r\n * @internal\r\n */\r\nexport interface TileTreeMetadata {\r\n readonly modelId: Id64String;\r\n readonly is2d: boolean;\r\n readonly contentRange?: Range3d;\r\n readonly tileScreenSize: number;\r\n}\r\n\r\n/** Describes the contents of an iModel tile.\r\n * @internal\r\n */\r\nexport interface TileContentMetadata {\r\n readonly contentRange: Range3d;\r\n readonly isLeaf: boolean;\r\n readonly sizeMultiplier?: number;\r\n readonly emptySubRangeMask: number;\r\n}\r\n\r\n/** Describes an iModel tile.\r\n * @internal\r\n */\r\nexport interface TileMetadata extends TileContentMetadata {\r\n readonly contentId: string;\r\n readonly range: Range3d;\r\n}\r\n\r\n/** The type of edges to be produced for iMdl tiles.\r\n * @see [[EdgeOptions]].\r\n * @internal\r\n */\r\nexport type TileEdgeType = \"compact\" | \"indexed\" | \"non-indexed\";\r\n\r\n/** Describes how edges should be produced for tiles in a tile tree.\r\n * @internal\r\n */\r\nexport interface EdgeOptions {\r\n type: TileEdgeType;\r\n /** For polyfaces that lack edge visibility information, generate edges for all faces; otherwise, infer edges from mesh topology. */\r\n smooth: boolean;\r\n}\r\n\r\nfunction compareEdgeOptions(a: EdgeOptions | false, b: EdgeOptions | false): number {\r\n if (typeof a !== typeof b)\r\n return a ? 1 : -1;\r\n\r\n if (typeof a === \"boolean\") {\r\n assert(typeof b === \"boolean\");\r\n return compareBooleans(a, b);\r\n }\r\n\r\n assert(typeof b === \"object\");\r\n let cmp = compareStrings(a.type, b.type);\r\n if (0 === cmp)\r\n cmp = compareBooleans(a.smooth, b.smooth);\r\n\r\n return cmp;\r\n}\r\n\r\n/** @internal */\r\nexport interface TileOptions {\r\n readonly maximumMajorTileFormatVersion: number;\r\n readonly enableInstancing: boolean;\r\n readonly enableImprovedElision: boolean;\r\n readonly ignoreAreaPatterns: boolean;\r\n readonly enableExternalTextures: boolean;\r\n readonly useProjectExtents: boolean;\r\n readonly optimizeBRepProcessing: boolean;\r\n readonly useLargerTiles: boolean;\r\n readonly disableMagnification: boolean;\r\n readonly alwaysSubdivideIncompleteTiles: boolean;\r\n readonly edgeOptions: EdgeOptions;\r\n}\r\n\r\n/** @internal */\r\nexport namespace TileOptions {\r\n /** Given the string representation of an [[IModelTileTreeId]] and the contentId of a [Tile]($frontend) belonging to that [TileTree]($frontend),\r\n * compute the [[TileOptions]] that were used to generate the Ids.\r\n * @throws Error if `treeId` or `contentId` are not valid Ids.\r\n * @note `treeId` and `contentId` are assumed to be valid Ids. They are not fully parsed and validated - only the information required by this function is extracted.\r\n * @note `treeId` and `contentId` are assumed to have been produced for version 4 or later of the iMdl tile format.\r\n */\r\n export function fromTreeIdAndContentId(treeId: string, contentId: string): TileOptions {\r\n const tree = treeFlagsAndFormatVersionFromId(treeId);\r\n const contentFlags = contentFlagsFromId(contentId);\r\n const edgeOptions = edgeOptionsFromTreeId(treeId);\r\n\r\n return {\r\n maximumMajorTileFormatVersion: tree.version,\r\n enableInstancing: 0 !== (contentFlags & ContentFlags.AllowInstancing),\r\n enableImprovedElision: 0 !== (contentFlags & ContentFlags.ImprovedElision),\r\n ignoreAreaPatterns: 0 !== (contentFlags & ContentFlags.IgnoreAreaPatterns),\r\n enableExternalTextures: 0 !== (contentFlags & ContentFlags.ExternalTextures),\r\n useProjectExtents: 0 !== (tree.flags & TreeFlags.UseProjectExtents),\r\n optimizeBRepProcessing: 0 !== (tree.flags & TreeFlags.OptimizeBRepProcessing),\r\n useLargerTiles: 0 !== (tree.flags & TreeFlags.UseLargerTiles),\r\n disableMagnification: false,\r\n alwaysSubdivideIncompleteTiles: false,\r\n edgeOptions,\r\n };\r\n }\r\n}\r\n\r\ntype ParsedPrimary = Omit<PrimaryTileTreeId, \"type\" | \"animationId\" | \"enforceDisplayPriority\">;\r\ninterface ParsedClassifier {\r\n type: BatchType.VolumeClassifier | BatchType.PlanarClassifier;\r\n expansion: number;\r\n}\r\n\r\n/** The result of [[parseTileTreeIdAndContentId]].\r\n * @internal\r\n */\r\nexport interface ParsedTileTreeIdAndContentId {\r\n modelId: Id64String;\r\n treeId: IModelTileTreeId;\r\n contentId: ContentIdSpec;\r\n options: TileOptions;\r\n}\r\n\r\nclass Parser {\r\n public readonly input: string;\r\n public curPos = 0;\r\n\r\n public constructor(input: string) {\r\n this.input = input;\r\n }\r\n\r\n public parse(contentId: string): ParsedTileTreeIdAndContentId {\r\n this.require(this.input.length > 0);\r\n\r\n // Skip version and flags, they're handled by TileOptions.fromTreeIdAndContentId\r\n while (this.curPos < this.input.length && this.cur() !== \"-\")\r\n this.advance();\r\n\r\n this.eat(\"-\");\r\n this.require(this.curPos < this.input.length);\r\n\r\n const classifier = this.cur() === \"C\" ? this.parseClassifier() : undefined;\r\n const animationId = this.parseAnimation();\r\n\r\n const primary = classifier ? undefined : this.parsePrimary();\r\n this.require((undefined === classifier) !== (undefined === primary));\r\n\r\n const modelId = this.input.substring(this.curPos);\r\n this.require(Id64.isId64(modelId));\r\n\r\n const { flags: treeFlags } = treeFlagsAndFormatVersionFromId(this.input);\r\n const options = TileOptions.fromTreeIdAndContentId(this.input, contentId);\r\n\r\n let parsedContentId: ContentIdSpec;\r\n try {\r\n parsedContentId = ContentIdProvider.create(true, options).specFromId(contentId);\r\n } catch (e) {\r\n this.reject(\"Invalid content Id\");\r\n }\r\n\r\n if (Object.keys(parsedContentId).some((key) => parsedContentId.hasOwnProperty(key) && typeof parsedContentId[key as keyof ContentIdSpec] === \"number\" && !Number.isFinite(parsedContentId[key as keyof ContentIdSpec])))\r\n throw new Error(\"Invalid content Id\");\r\n\r\n let treeId: IModelTileTreeId;\r\n if (classifier) {\r\n treeId = { ...classifier, animationId };\r\n } else {\r\n assert(undefined !== primary);\r\n const enforceDisplayPriority = (treeFlags & TreeFlags.EnforceDisplayPriority) !== 0 ? true : undefined;\r\n treeId = { ...primary, animationId, type: BatchType.Primary, enforceDisplayPriority };\r\n }\r\n\r\n return {\r\n contentId: parsedContentId,\r\n modelId,\r\n options,\r\n treeId,\r\n };\r\n }\r\n\r\n private cur(): string {\r\n this.require(this.curPos < this.input.length);\r\n return this.input[this.curPos];\r\n }\r\n\r\n private advance(): void {\r\n this.require(this.curPos < this.input.length);\r\n ++this.curPos;\r\n }\r\n\r\n private eat(expectedChar: string): void {\r\n this.require(this.cur() === expectedChar);\r\n this.advance();\r\n }\r\n\r\n private reject(message = \"Invalid tree Id\"): never {\r\n throw new Error(message);\r\n }\r\n\r\n private require(condition: boolean, message = \"Invalid tree Id\"): asserts condition {\r\n if (!condition)\r\n this.reject(message);\r\n }\r\n\r\n private parseClassifier(): ParsedClassifier | undefined {\r\n this.eat(\"C\");\r\n let type = BatchType.VolumeClassifier;\r\n if (this.cur() === \"P\") {\r\n type = BatchType.PlanarClassifier;\r\n this.advance();\r\n }\r\n\r\n this.eat(\":\");\r\n\r\n // C: or CP: is always folowed by expansion then an underscore.\r\n let expansionStr = \"\";\r\n while (this.curPos < this.input.length && (this.cur() >= \"0\" && this.cur() <= \"9\" || this.cur() === \".\")) {\r\n expansionStr += this.cur();\r\n this.advance();\r\n }\r\n\r\n this.eat(\"_\");\r\n\r\n const expansion = Number.parseFloat(expansionStr);\r\n this.require(!Number.isNaN(expansion));\r\n\r\n return { type, expansion };\r\n }\r\n\r\n private parseAnimation(): Id64String | undefined {\r\n if (this.cur() !== \"A\")\r\n return undefined;\r\n\r\n this.eat(\"A\");\r\n this.eat(\":\");\r\n\r\n const termPos = this.input.indexOf(\"_\", this.curPos);\r\n this.require(termPos > this.curPos);\r\n\r\n const animationId = this.input.substring(this.curPos, termPos);\r\n this.require(Id64.isId64(animationId));\r\n\r\n this.curPos = termPos + 1; // Skip \"_\"\r\n return animationId;\r\n }\r\n\r\n private parsePrimary(): ParsedPrimary {\r\n const edges = this.parseEdges();\r\n const sectionCut = this.parseSectionCut();\r\n return { edges, sectionCut };\r\n }\r\n\r\n private parseEdges(): EdgeOptions | false {\r\n if (\"E\" !== this.cur())\r\n return { type: \"non-indexed\", smooth: false };\r\n\r\n this.eat(\"E\");\r\n this.eat(\":\");\r\n\r\n const flag = this.cur();\r\n this.eat(flag);\r\n this.eat(\"_\");\r\n\r\n return \"0\" === flag ? false : edgeOptionsFromFlag(flag);\r\n }\r\n\r\n private parseSectionCut(): string | undefined {\r\n if (\"S\" !== this.cur())\r\n return undefined;\r\n\r\n this.eat(\"S\");\r\n const termPos = this.input.indexOf(\"s\", this.curPos);\r\n this.require(termPos > this.curPos);\r\n\r\n const sectionCut = this.input.substring(this.curPos, termPos);\r\n this.curPos = termPos + 1; // Skip \"_\";\r\n return sectionCut;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function parseTileTreeIdAndContentId(treeId: string, contentId: string): ParsedTileTreeIdAndContentId {\r\n const parser = new Parser(treeId);\r\n return parser.parse(contentId);\r\n}\r\n\r\n/** @internal */\r\nexport const defaultTileOptions: TileOptions = Object.freeze({\r\n maximumMajorTileFormatVersion: CurrentImdlVersion.Major,\r\n enableInstancing: true,\r\n enableImprovedElision: true,\r\n ignoreAreaPatterns: false,\r\n enableExternalTextures: true,\r\n useProjectExtents: true,\r\n optimizeBRepProcessing: true,\r\n useLargerTiles: true,\r\n disableMagnification: false,\r\n alwaysSubdivideIncompleteTiles: false,\r\n edgeOptions: {\r\n type: \"compact\" as const,\r\n smooth: true,\r\n },\r\n});\r\n\r\nfunction contentFlagsFromId(id: string): ContentFlags {\r\n if (0 === id.length || \"-\" !== id[0])\r\n throw new Error(\"Invalid content Id\");\r\n\r\n // V4: -flags-d-i-j-k-m - version in tree Id\r\n const end = id.indexOf(\"-\", 1);\r\n if (-1 !== end) {\r\n const flags = Number.parseInt(id.substring(1, end), 16);\r\n if (!Number.isNaN(flags))\r\n return flags;\r\n }\r\n\r\n throw new Error(\"Invalid content Id\");\r\n}\r\n\r\nfunction treeFlagsAndFormatVersionFromId(id: string): { flags: TreeFlags, version: number } {\r\n if (0 === id.length)\r\n throw new Error(\"Invalid tree Id\");\r\n\r\n let parts = id.split(\"-\");\r\n if (parts.length > 0) {\r\n parts = parts[0].split(\"_\");\r\n if (parts.length === 2) {\r\n const version = Number.parseInt(parts[0], 16);\r\n const flags = Number.parseInt(parts[1], 16);\r\n if (!Number.isNaN(version) || !Number.isNaN(flags))\r\n return { version, flags };\r\n }\r\n }\r\n\r\n throw new Error(\"Invalid tree Id\");\r\n}\r\n\r\nfunction edgeOptionsFromTreeId(id: string): EdgeOptions {\r\n const pos = id.indexOf(\"E:\");\r\n if (pos <= 0)\r\n return { type: \"non-indexed\", smooth: false };\r\n\r\n return edgeOptionsFromFlag(id[pos + 2]);\r\n}\r\n\r\nfunction edgeOptionsFromFlag(flag: string): EdgeOptions {\r\n if (\"0\" === flag)\r\n return defaultTileOptions.edgeOptions;\r\n\r\n const smooth = flag !== \"2\" && flag !== \"5\";\r\n let type: TileEdgeType;\r\n switch (flag) {\r\n case \"2\":\r\n case \"4\":\r\n type = \"indexed\";\r\n break;\r\n case \"3\":\r\n type = \"non-indexed\";\r\n break;\r\n case \"5\":\r\n case \"6\":\r\n type = \"compact\";\r\n break;\r\n default:\r\n throw new Error(\"Invalid tree Id\");\r\n }\r\n\r\n return { type, smooth };\r\n}\r\n\r\nfunction edgeOptionsToString(options: EdgeOptions | false) {\r\n if (!options)\r\n return \"E:0_\";\r\n\r\n switch (options.type) {\r\n case \"non-indexed\": return options.smooth ? \"E:3_\" : \"\";\r\n case \"indexed\": return options.smooth ? \"E:4_\" : \"E:2_\";\r\n case \"compact\": return options.smooth ? \"E:6_\" : \"E:5_\";\r\n default: throw new Error(\"Invalid tree Id\");\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function getMaximumMajorTileFormatVersion(maxMajorVersion: number, formatVersion?: number): number {\r\n // The `formatVersion` input is from the backend, telling us precisely the maximum major+minor version it can produce.\r\n // Ensure we do not request tiles of a newer major version than backend can supply or it can read; and also limit major version\r\n // to that optionally configured by the app.\r\n let majorVersion = maxMajorVersion;\r\n if (undefined !== formatVersion)\r\n majorVersion = Math.min((formatVersion >>> 0x10), majorVersion);\r\n\r\n // Version number less than 1 is invalid - ignore\r\n majorVersion = Math.max(majorVersion, 1);\r\n\r\n // Version number greater than current known version ignored\r\n majorVersion = Math.min(majorVersion, CurrentImdlVersion.Major);\r\n\r\n // Version numbers are integers - round down\r\n return Math.max(Math.floor(majorVersion), 1);\r\n}\r\n\r\n/** Flags controlling the structure of a tile tree. The flags are part of the tile tree's Id.\r\n * @alpha\r\n */\r\nexport enum TreeFlags {\r\n None = 0,\r\n UseProjectExtents = 1 << 0, // Use project extents as the basis of the tile tree's range.\r\n EnforceDisplayPriority = 1 << 1, // For 3d plan projection models, group graphics into layers based on subcategory.\r\n OptimizeBRepProcessing = 1 << 2, // Use an optimized pipeline for producing facets from BRep entities.\r\n UseLargerTiles = 1 << 3, // Produce tiles of larger size in screen pixels.\r\n}\r\n\r\n/** Describes a tile tree used to draw the contents of a model, possibly with embedded animation.\r\n * @internal\r\n */\r\nexport interface PrimaryTileTreeId {\r\n /** Describes the type of tile tree. */\r\n type: BatchType.Primary;\r\n /** The type of edges to include in tile content. */\r\n edges: EdgeOptions | false;\r\n /** Id of the [DisplayStyle]($backend) or [RenderTimeline]($backend) element holding the [[RenderSchedule]] script to be applied to the tiles. */\r\n animationId?: Id64String;\r\n /** If true, meshes within the tiles will be grouped into nodes based on the display priority associated with their subcategories,\r\n * for ensuring the graphics display with correct priority.\r\n */\r\n enforceDisplayPriority?: boolean;\r\n /** If defined, the compact string representation of a clip vector applied to the tiles to produce cut geometry at the intersections with the clip planes.\r\n * Any geometry *not* intersecting the clip planes is omitted from the tiles.\r\n * @see [ClipVector.toCompactString[($core-geometry).\r\n */\r\n sectionCut?: string;\r\n}\r\n\r\n/** Describes a tile tree that can classify the contents of other tile trees using the model's geometry.\r\n * @internal\r\n */\r\nexport interface ClassifierTileTreeId {\r\n type: BatchType.VolumeClassifier | BatchType.PlanarClassifier;\r\n expansion: number;\r\n animationId?: Id64String;\r\n}\r\n\r\nfunction animationIdToString(animationId: Id64String): string {\r\n return `A:${animationId}_`;\r\n}\r\n\r\n/** Describes the Id of an iModel tile tree.\r\n * @internal\r\n */\r\nexport type IModelTileTreeId = PrimaryTileTreeId | ClassifierTileTreeId;\r\n\r\n/** Convert a tile tree Id to its string representation.\r\n * @internal\r\n */\r\nexport function iModelTileTreeIdToString(modelId: Id64String, treeId: IModelTileTreeId, options: TileOptions): string {\r\n let idStr = \"\";\r\n let flags = options.useProjectExtents ? TreeFlags.UseProjectExtents : TreeFlags.None;\r\n if (options.optimizeBRepProcessing)\r\n flags |= TreeFlags.OptimizeBRepProcessing;\r\n\r\n if (options.useLargerTiles)\r\n flags |= TreeFlags.UseLargerTiles;\r\n\r\n if (BatchType.Primary === treeId.type) {\r\n if (undefined !== treeId.animationId)\r\n idStr = `${idStr}${animationIdToString(treeId.animationId)}`;\r\n else if (treeId.enforceDisplayPriority) // animation and priority are currently mutually exclusive\r\n flags |= TreeFlags.EnforceDisplayPriority;\r\n\r\n const edges = edgeOptionsToString(treeId.edges);\r\n const sectionCut = treeId.sectionCut ? `S${treeId.sectionCut}s` : \"\";\r\n idStr = `${idStr}${edges}${sectionCut}`;\r\n } else {\r\n const typeStr = BatchType.PlanarClassifier === treeId.type ? \"CP\" : \"C\";\r\n idStr = `${idStr + typeStr}:${treeId.expansion.toFixed(6)}_`;\r\n\r\n if (BatchType.VolumeClassifier === treeId.type)\r\n flags |= TreeFlags.UseProjectExtents;\r\n\r\n if (undefined !== treeId.animationId)\r\n idStr = `${idStr}${animationIdToString(treeId.animationId)}`;\r\n }\r\n\r\n const version = getMaximumMajorTileFormatVersion(options.maximumMajorTileFormatVersion);\r\n if (version >= 4) {\r\n const prefix = `${version.toString(16)}_${flags.toString(16)}-`;\r\n idStr = prefix + idStr;\r\n }\r\n\r\n return idStr + modelId;\r\n}\r\n\r\n/** Ordinal comparison of two tile tree Ids, e.g., for use in sorted containers.\r\n * @internal\r\n */\r\nexport function compareIModelTileTreeIds(lhs: IModelTileTreeId, rhs: IModelTileTreeId): number {\r\n let cmp = compareNumbers(lhs.type, rhs.type);\r\n if (0 === cmp)\r\n cmp = compareStringsOrUndefined(lhs.animationId, rhs.animationId);\r\n\r\n if (0 !== cmp)\r\n return cmp;\r\n\r\n // NB: The redundant checks on BatchType below are to satisfy compiler.\r\n assert(lhs.type === rhs.type);\r\n if (BatchType.Primary === lhs.type && BatchType.Primary === rhs.type) {\r\n cmp = compareEdgeOptions(lhs.edges, rhs.edges);\r\n if (0 === cmp) {\r\n cmp = compareBooleansOrUndefined(lhs.enforceDisplayPriority, rhs.enforceDisplayPriority);\r\n if (0 === cmp)\r\n cmp = compareStringsOrUndefined(lhs.sectionCut, rhs.sectionCut);\r\n }\r\n } else if (BatchType.Primary !== lhs.type && BatchType.Primary !== rhs.type) {\r\n cmp = compareNumbers(lhs.expansion, rhs.expansion);\r\n }\r\n\r\n return cmp;\r\n}\r\n\r\n/** Flags controlling how tile content is produced. The flags are part of the ContentId.\r\n * @alpha\r\n */\r\nexport enum ContentFlags {\r\n None = 0,\r\n AllowInstancing = 1 << 0,\r\n ImprovedElision = 1 << 1,\r\n IgnoreAreaPatterns = 1 << 2,\r\n ExternalTextures = 1 << 3,\r\n}\r\n\r\n/** Describes the components of a tile's content Id.\r\n *\r\n * The depth specifies how many subdivisions from the root tile are to be performed to reach the sub-volume of interest.\r\n *\r\n * The i, j, and k parameters specify how to subdivide the tile's volume. Each sub-division is performed along the longest axis of the\r\n * volume. The volume is first sub-divided based on `i`, then the result sub-divided based on `j`, and finally that result sub-divided\r\n * based on `k`.\r\n *\r\n * The multiplier is an integer - generally a power of two - multiplied by the screen size of a tile (512 pixels) used to\r\n * produce a higher-resolution tile for the same volume.\r\n * @internal\r\n */\r\ninterface ContentIdSpec {\r\n depth: number;\r\n i: number;\r\n j: number;\r\n k: number;\r\n multiplier: number;\r\n}\r\n\r\n/** Contains logic for working with tile content Ids according to a specific content Id scheme. Which scheme is used depends on\r\n * the major version of the tile format.\r\n * @internal\r\n */\r\nexport abstract class ContentIdProvider {\r\n public readonly majorFormatVersion: number;\r\n public readonly contentFlags: ContentFlags;\r\n\r\n protected constructor(formatVersion: number, contentFlags: ContentFlags) {\r\n this.majorFormatVersion = formatVersion;\r\n this.contentFlags = contentFlags;\r\n }\r\n\r\n public get rootContentId(): string {\r\n return this.computeId(0, 0, 0, 0, 1);\r\n }\r\n\r\n public idFromParentAndMultiplier(parentId: string, multiplier: number): string {\r\n const lastSepPos = parentId.lastIndexOf(this._separator);\r\n assert(-1 !== lastSepPos);\r\n return parentId.substring(0, lastSepPos + 1) + multiplier.toString(16);\r\n }\r\n\r\n public specFromId(id: string): ContentIdSpec {\r\n const parts = id.split(this._separator);\r\n const len = parts.length;\r\n assert(len >= 5);\r\n return {\r\n depth: parseInt(parts[len - 5], 16),\r\n i: parseInt(parts[len - 4], 16),\r\n j: parseInt(parts[len - 3], 16),\r\n k: parseInt(parts[len - 2], 16),\r\n multiplier: parseInt(parts[len - 1], 16),\r\n };\r\n }\r\n\r\n public idFromSpec(spec: ContentIdSpec): string {\r\n return this.computeId(spec.depth, spec.i, spec.j, spec.k, spec.multiplier);\r\n }\r\n\r\n protected join(depth: number, i: number, j: number, k: number, mult: number): string {\r\n const sep = this._separator;\r\n return depth.toString(16) + sep + i.toString(16) + sep + j.toString(16) + sep + k.toString(16) + sep + mult.toString(16);\r\n }\r\n\r\n protected abstract get _separator(): string;\r\n protected abstract computeId(depth: number, i: number, j: number, k: number, mult: number): string;\r\n\r\n /** formatVersion is the maximum major version supported by the back-end supplying the tile tree.\r\n * Must ensure front-end does not request tiles of a format the back-end cannot supply, and back-end does\r\n * not supply tiles of a format the front-end doesn't recognize.\r\n */\r\n public static create(allowInstancing: boolean, options: TileOptions, formatVersion?: number): ContentIdProvider {\r\n const majorVersion = getMaximumMajorTileFormatVersion(options.maximumMajorTileFormatVersion, formatVersion);\r\n assert(majorVersion > 0);\r\n assert(Math.floor(majorVersion) === majorVersion);\r\n switch (majorVersion) {\r\n case 0:\r\n case 1:\r\n return new ContentIdV1Provider(majorVersion);\r\n case 2:\r\n case 3:\r\n return new ContentIdV2Provider(majorVersion, allowInstancing, options);\r\n default:\r\n return new ContentIdV4Provider(allowInstancing, options, majorVersion);\r\n }\r\n }\r\n}\r\n\r\n/** The original (major version 1) tile format used a content Id scheme of the format\r\n * `depth/i/j/k/multiplier`.\r\n * @internal\r\n */\r\nclass ContentIdV1Provider extends ContentIdProvider {\r\n public constructor(majorVersion: number) {\r\n super(majorVersion, ContentFlags.None);\r\n }\r\n\r\n protected get _separator() { return \"/\"; }\r\n protected computeId(depth: number, i: number, j: number, k: number, mult: number): string {\r\n return this.join(depth, i, j, k, mult);\r\n }\r\n}\r\n\r\n/** Tile formats 2 and 3 use a content Id scheme encoding styling flags and the major format version\r\n * into the content Id, of the format `_majorVersion_flags_depth_i_j_k_multiplier`.\r\n * @internal\r\n */\r\nclass ContentIdV2Provider extends ContentIdProvider {\r\n private readonly _prefix: string;\r\n\r\n public constructor(majorVersion: number, allowInstancing: boolean, options: TileOptions) {\r\n const flags = (allowInstancing && options.enableInstancing) ? ContentFlags.AllowInstancing : ContentFlags.None;\r\n super(majorVersion, flags);\r\n this._prefix = this._separator + majorVersion.toString(16) + this._separator + flags.toString(16) + this._separator;\r\n }\r\n\r\n protected get _separator() { return \"_\"; }\r\n protected computeId(depth: number, i: number, j: number, k: number, mult: number): string {\r\n return this._prefix + this.join(depth, i, j, k, mult);\r\n }\r\n}\r\n\r\n/** Tile formats 4+ encode styling flags but not major format version. (The version is specified by the tile tree's Id).\r\n * Format: `-flags-depth-i-j-k-multiplier`.\r\n * @internal\r\n */\r\nclass ContentIdV4Provider extends ContentIdProvider {\r\n private readonly _prefix: string;\r\n\r\n public constructor(allowInstancing: boolean, options: TileOptions, majorVersion: number) {\r\n let flags = (allowInstancing && options.enableInstancing) ? ContentFlags.AllowInstancing : ContentFlags.None;\r\n if (options.enableImprovedElision)\r\n flags = flags | ContentFlags.ImprovedElision;\r\n\r\n if (options.ignoreAreaPatterns)\r\n flags = flags | ContentFlags.IgnoreAreaPatterns;\r\n\r\n if (options.enableExternalTextures)\r\n flags = flags | ContentFlags.ExternalTextures;\r\n\r\n super(majorVersion, flags);\r\n this._prefix = this._separator + flags.toString(16) + this._separator;\r\n }\r\n\r\n protected get _separator() { return \"-\"; }\r\n protected computeId(depth: number, i: number, j: number, k: number, mult: number): string {\r\n return this._prefix + this.join(depth, i, j, k, mult);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function bisectTileRange3d(range: Range3d, takeUpper: boolean): void {\r\n const diag = range.diagonal();\r\n const pt = takeUpper ? range.high : range.low;\r\n if (diag.x > diag.y && diag.x > diag.z)\r\n pt.x = (range.low.x + range.high.x) / 2.0;\r\n else if (diag.y > diag.z)\r\n pt.y = (range.low.y + range.high.y) / 2.0;\r\n else\r\n pt.z = (range.low.z + range.high.z) / 2.0;\r\n}\r\n\r\n/** @internal */\r\nexport function bisectTileRange2d(range: Range3d, takeUpper: boolean): void {\r\n const diag = range.diagonal();\r\n const pt = takeUpper ? range.high : range.low;\r\n if (diag.x > diag.y)\r\n pt.x = (range.low.x + range.high.x) / 2.0;\r\n else\r\n pt.y = (range.low.y + range.high.y) / 2.0;\r\n}\r\n\r\n/** Given a description of a tile, compute the ranges which would result from sub-dividing its range into 4 or 8 sub-volumes.\r\n * @internal\r\n */\r\nexport function computeChildTileRanges(tile: TileMetadata, root: TileTreeMetadata): Array<{ range: Range3d, isEmpty: boolean }> {\r\n const emptyMask = tile.emptySubRangeMask;\r\n const is2d = root.is2d;\r\n const bisectRange = is2d ? bisectTileRange2d : bisectTileRange3d;\r\n\r\n const ranges: Array<{ range: Range3d, isEmpty: boolean }> = [];\r\n for (let i = 0; i < 2; i++) {\r\n for (let j = 0; j < 2; j++) {\r\n for (let k = 0; k < (is2d ? 1 : 2); k++) {\r\n const emptyBit = 1 << (i + j * 2 + k * 4);\r\n const isEmpty = 0 !== (emptyMask & emptyBit);\r\n\r\n const range = tile.range.clone();\r\n bisectRange(range, 0 === i);\r\n bisectRange(range, 0 === j);\r\n if (!is2d)\r\n bisectRange(range, 0 === k);\r\n\r\n ranges.push({ range, isEmpty });\r\n }\r\n }\r\n }\r\n\r\n return ranges;\r\n}\r\n\r\n/** Given a description of the parent tile, obtain the properties of its child tiles, and the number of empty children.\r\n * @internal\r\n */\r\nexport function computeChildTileProps(parent: TileMetadata, idProvider: ContentIdProvider, root: TileTreeMetadata): { children: TileProps[], numEmpty: number } {\r\n let numEmpty = 0;\r\n const children: TileProps[] = [];\r\n\r\n // Leaf nodes have no children\r\n if (parent.isLeaf)\r\n return { children, numEmpty };\r\n\r\n // One child, same volume as parent, but higher-resolution.\r\n if (undefined !== parent.sizeMultiplier) {\r\n const sizeMultiplier = parent.sizeMultiplier * 2;\r\n const contentId = idProvider.idFromParentAndMultiplier(parent.contentId, sizeMultiplier);\r\n children.push({\r\n contentId,\r\n range: parent.range,\r\n contentRange: parent.contentRange,\r\n sizeMultiplier,\r\n isLeaf: false,\r\n maximumSize: root.tileScreenSize,\r\n });\r\n\r\n return { children, numEmpty };\r\n }\r\n\r\n // Sub-divide parent's range into 4 (for 2d trees) or 8 (for 3d trees) child tiles.\r\n const parentSpec = idProvider.specFromId(parent.contentId);\r\n const childSpec: ContentIdSpec = { ...parentSpec };\r\n childSpec.depth = parentSpec.depth + 1;\r\n\r\n // This mask is a bitfield in which an 'on' bit indicates sub-volume containing no geometry.\r\n // Don't bother creating children or requesting content for such empty volumes.\r\n const emptyMask = parent.emptySubRangeMask;\r\n\r\n // Spatial tree range == project extents; content range == model range.\r\n // Trivially reject children whose ranges are entirely outside model range.\r\n let treeContentRange = root.contentRange;\r\n if (undefined !== treeContentRange && treeContentRange.containsRange(parent.range)) {\r\n // Parent is wholly within model range - don't bother testing child ranges against it.\r\n treeContentRange = undefined;\r\n }\r\n\r\n const is2d = root.is2d;\r\n const bisectRange = is2d ? bisectTileRange2d : bisectTileRange3d;\r\n for (let i = 0; i < 2; i++) {\r\n for (let j = 0; j < 2; j++) {\r\n for (let k = 0; k < (is2d ? 1 : 2); k++) {\r\n const emptyBit = 1 << (i + j * 2 + k * 4);\r\n if (0 !== (emptyMask & emptyBit)) {\r\n // volume is known to contain no geometry.\r\n ++numEmpty;\r\n continue;\r\n }\r\n\r\n const range = parent.range.clone();\r\n bisectRange(range, 0 === i);\r\n bisectRange(range, 0 === j);\r\n if (!is2d)\r\n bisectRange(range, 0 === k);\r\n\r\n if (undefined !== treeContentRange && !range.intersectsRange(treeContentRange)) {\r\n // volume is within project extents but entirely outside model range\r\n ++numEmpty;\r\n continue;\r\n }\r\n\r\n childSpec.i = parentSpec.i * 2 + i;\r\n childSpec.j = parentSpec.j * 2 + j;\r\n childSpec.k = parentSpec.k * 2 + k;\r\n\r\n const childId = idProvider.idFromSpec(childSpec);\r\n children.push({ contentId: childId, range, maximumSize: root.tileScreenSize });\r\n }\r\n }\r\n }\r\n\r\n return { children, numEmpty };\r\n}\r\n\r\n/** @internal */\r\nexport interface TileContentDescription extends TileContentMetadata {\r\n readonly featureTableStartPos: number;\r\n}\r\n\r\n/** Deserializes tile content metadata.\r\n * @throws [[TileReadError]]\r\n * @internal\r\n * @deprecated in 4.0. Use decodeTileContentDescription. I think tile agents (or their tests) are using this function.\r\n */\r\nexport function readTileContentDescription(stream: ByteStream, sizeMultiplier: number | undefined, is2d: boolean, options: TileOptions, isVolumeClassifier: boolean): TileContentDescription {\r\n return decodeTileContentDescription({ stream, sizeMultiplier, is2d, options, isVolumeClassifier });\r\n}\r\n\r\n/** @internal */\r\nexport interface DecodeTileContentDescriptionArgs {\r\n stream: ByteStream;\r\n options: TileOptions;\r\n isVolumeClassifier?: boolean;\r\n is2d?: boolean;\r\n sizeMultiplier?: number;\r\n isLeaf?: boolean;\r\n}\r\n\r\n/** @internal */\r\nexport function decodeTileContentDescription(args: DecodeTileContentDescriptionArgs): TileContentDescription {\r\n const { stream, options } = args;\r\n const isVolumeClassifier = args.isVolumeClassifier ?? false;\r\n\r\n stream.reset();\r\n\r\n const header = new ImdlHeader(stream);\r\n if (!header.isValid)\r\n throw new TileReadError(TileReadStatus.InvalidHeader);\r\n else if (!header.isReadableVersion)\r\n throw new TileReadError(TileReadStatus.NewerMajorVersion);\r\n\r\n // Skip the feature table.\r\n const featureTableStartPos = stream.curPos;\r\n const ftHeader = FeatureTableHeader.readFrom(stream);\r\n if (undefined === ftHeader)\r\n throw new TileReadError(TileReadStatus.InvalidFeatureTable);\r\n\r\n stream.curPos = featureTableStartPos + ftHeader.length;\r\n\r\n let sizeMultiplier = args.sizeMultiplier;\r\n let isLeaf = args.isLeaf;\r\n if (undefined === isLeaf) {\r\n // Determine subdivision based on header data.\r\n const completeTile = 0 === (header.flags & ImdlFlags.Incomplete);\r\n const emptyTile = completeTile && 0 === header.numElementsIncluded && 0 === header.numElementsExcluded;\r\n isLeaf = (emptyTile || isVolumeClassifier); // Current classifier algorithm supports only a single tile.\r\n if (!isLeaf) {\r\n // Non-spatial (2d) models are of arbitrary scale and contain geometry like line work and especially text which\r\n // can be adversely affected by quantization issues when zooming in closely.\r\n const maxLeafTolerance = 1.0;\r\n\r\n // Must sub-divide if tile explicitly specifies...\r\n let canSkipSubdivision = 0 === (header.flags & ImdlFlags.DisallowMagnification);\r\n // ...or in 2d, or if app explicitly disabled magnification, or tolerance large enough to risk quantization error...\r\n canSkipSubdivision = canSkipSubdivision && !args.is2d && !options.disableMagnification && header.tolerance <= maxLeafTolerance;\r\n // ...or app specifies incomplete tiles must always be sub-divided.\r\n canSkipSubdivision = canSkipSubdivision && (completeTile || !options.alwaysSubdivideIncompleteTiles);\r\n if (canSkipSubdivision) {\r\n const minElementsPerTile = 100;\r\n if (completeTile && 0 === header.numElementsExcluded && header.numElementsIncluded <= minElementsPerTile) {\r\n const containsCurves = 0 !== (header.flags & ImdlFlags.ContainsCurves);\r\n if (!containsCurves)\r\n isLeaf = true;\r\n else if (undefined === sizeMultiplier)\r\n sizeMultiplier = 1.0;\r\n } else if (undefined === sizeMultiplier && header.numElementsIncluded + header.numElementsExcluded <= minElementsPerTile) {\r\n sizeMultiplier = 1.0;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n featureTableStartPos,\r\n contentRange: header.contentRange,\r\n isLeaf,\r\n sizeMultiplier,\r\n emptySubRangeMask: header.emptySubRanges,\r\n };\r\n}\r\n\r\nconst scratchRangeDiagonal = new Vector3d();\r\n\r\n/** Compute the chord tolerance for the specified tile of the given range with the specified size multiplier.\r\n * @internal\r\n */\r\nexport function computeTileChordTolerance(tile: TileMetadata, is3d: boolean, tileScreenSize: number): number {\r\n if (tile.range.isNull)\r\n return 0;\r\n\r\n const diagonal = tile.range.diagonal(scratchRangeDiagonal);\r\n const diagDist = is3d ? diagonal.magnitude() : diagonal.magnitudeXY();\r\n\r\n const mult = Math.max(tile.sizeMultiplier ?? 1, 1);\r\n return diagDist / (tileScreenSize * Constants.minToleranceRatioMultiplier * Math.max(1, mult));\r\n}\r\n\r\n/** Deserializes tile metadata.\r\n * @internal\r\n */\r\nexport class TileMetadataReader {\r\n private readonly _is2d: boolean;\r\n private readonly _isVolumeClassifier: boolean;\r\n private readonly _options: TileOptions;\r\n\r\n public constructor(type: BatchType, is2d: boolean, options: TileOptions) {\r\n this._is2d = is2d;\r\n this._isVolumeClassifier = BatchType.VolumeClassifier === type;\r\n this._options = options;\r\n }\r\n\r\n /** Produce metadata from the specified tile content.\r\n * @throws [[TileReadError]]\r\n */\r\n public read(stream: ByteStream, props: TileProps): TileMetadata {\r\n const content = decodeTileContentDescription({\r\n stream,\r\n sizeMultiplier: props.sizeMultiplier,\r\n is2d: this._is2d,\r\n options: this._options,\r\n isVolumeClassifier: this._isVolumeClassifier,\r\n });\r\n\r\n return {\r\n contentRange: content.contentRange,\r\n isLeaf: content.isLeaf,\r\n sizeMultiplier: content.sizeMultiplier,\r\n emptySubRangeMask: content.emptySubRangeMask,\r\n range: Range3d.fromJSON(props.range),\r\n contentId: props.contentId,\r\n };\r\n }\r\n}\r\n"]}
|
|
@@ -73,8 +73,20 @@ export interface BriefcaseProps {
|
|
|
73
73
|
export interface OpenBriefcaseProps extends IModelEncryptionProps, OpenDbKey {
|
|
74
74
|
/** the full path to the briefcase file */
|
|
75
75
|
readonly fileName: LocalFileName;
|
|
76
|
-
/**
|
|
76
|
+
/**
|
|
77
|
+
* If true, open the briefcase readonly.
|
|
78
|
+
* @note Readonly connections always hold a read transaction against the briefcase. That can cause the WAL file size to grow
|
|
79
|
+
* unbounded if changes happen while they're open (see [Checkpoint starvation](https://www.sqlite.org/wal.html#avoiding_excessively_large_wal_files))
|
|
80
|
+
* It is a good idea to close the readonly connection *before* closing the writeable connection so the WAL file will be deleted.
|
|
81
|
+
*/
|
|
77
82
|
readonly readonly?: boolean;
|
|
83
|
+
/**
|
|
84
|
+
* If true, open the briefcase readonly and watch the briefcase for changes from another connection and restart the defaultTxn whenever they happen.
|
|
85
|
+
* The restart happens only after the next to the (backend) event loop, and will generate events that reflect the changes
|
|
86
|
+
* from the other connection.
|
|
87
|
+
* @note This cannot be used with cloud-based briefcases.
|
|
88
|
+
*/
|
|
89
|
+
readonly watchForChanges?: boolean;
|
|
78
90
|
}
|
|
79
91
|
/** Properties of a local briefcase file, returned by [BriefcaseManager.getCachedBriefcases]($backend) and [BriefcaseManager.downloadBriefcase]($backend)
|
|
80
92
|
* @public
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BriefcaseTypes.d.ts","sourceRoot":"","sources":["../../src/BriefcaseTypes.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;;;GAGG;AACH,oBAAY,gBAAgB;IAC1B,+CAA+C;IAC/C,OAAO,aAAa;IAEpB,gDAAgD;IAChD,GAAG,WAAU;IAEb,gFAAgF;IAChF,UAAU,IAAI;IAEd,+EAA+E;IAC/E,SAAS,WAA4B;IAErC;;;;;;;;;;OAUG;IACH,UAAU,IAAI;CACf;AAED;;;GAGG;AACH,oBAAY,QAAQ;IAClB,mIAAmI;IACnI,YAAY,IAAI;IAChB,0FAA0F;IAC1F,WAAW,IAAI;IACf,qJAAqJ;IACrJ,QAAQ,IAAI;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,8BAA8B;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CACnC;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC;IAE9B,mCAAmC;IACnC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,qBAAqB,EAAE,SAAS;IAC1E,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC
|
|
1
|
+
{"version":3,"file":"BriefcaseTypes.d.ts","sourceRoot":"","sources":["../../src/BriefcaseTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BriefcaseTypes.js","sourceRoot":"","sources":["../../src/BriefcaseTypes.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAaH;;;GAGG;AACH,MAAM,CAAN,IAAY,gBAyBX;AAzBD,WAAY,gBAAgB;IAC1B,+CAA+C;IAC/C,sEAAoB,CAAA;IAEpB,gDAAgD;IAChD,4DAAa,CAAA;IAEb,gFAAgF;IAChF,mEAAc,CAAA;IAEd,+EAA+E;IAC/E,wEAAqC,CAAA;IAErC;;;;;;;;;;OAUG;IACH,mEAAc,CAAA;AAChB,CAAC,EAzBW,gBAAgB,KAAhB,gBAAgB,QAyB3B;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,mIAAmI;IACnI,uDAAgB,CAAA;IAChB,0FAA0F;IAC1F,qDAAe,CAAA;IACf,qJAAqJ;IACrJ,+CAAY,CAAA;AACd,CAAC,EAPW,QAAQ,KAAR,QAAQ,QAOnB;AA6GD;;GAEG;AACH,MAAM,CAAN,IAAY,aAYX;AAZD,WAAY,aAAa;IACvB,qJAAqJ;IACrJ,mFAAyB,CAAA;IAEzB,iKAAiK;IACjK,yFAA4B,CAAA;IAE5B,sMAAsM;IACtM,uDAAW,CAAA;IAEX,qFAAqF;IACrF,2DAAa,CAAA;AACf,CAAC,EAZW,aAAa,KAAb,aAAa,QAYxB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,0GAA0G;IAC1G,mDAAQ,CAAA;IAER,qDAAqD;IACrD,yDAAW,CAAA;AACb,CAAC,EANW,cAAc,KAAd,cAAc,QAMzB;AAgBD;;;;GAIG;AACH,MAAM,CAAN,IAAY,WAkBX;AAlBD,WAAY,WAAW;IACrB,sIAAsI;IACtI,qDAAQ,CAAA;IAER;;;OAGG;IACH,mEAAe,CAAA;IAEf,4IAA4I;IAC5I,yEAAkB,CAAA;IAElB,oIAAoI;IACpI,iDAAM,CAAA;IAEN,4FAA4F;IAC5F,iDAAM,CAAA;AACR,CAAC,EAlBW,WAAW,KAAX,WAAW,QAkBtB","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module iModels\r\n */\r\n\r\nimport { GuidString } from \"@itwin/core-bentley\";\r\nimport { ChangesetIdWithIndex, LocalFileName } from \"./ChangesetProps\";\r\nimport { IModelEncryptionProps, OpenDbKey } from \"./IModel\";\r\nimport { IModelVersionProps } from \"./IModelVersion\";\r\n\r\n/** The Id assigned to a briefcase by iModelHub, or [[BriefcaseIdValue.Unassigned]] .\r\n * @public\r\n * @extensions\r\n */\r\nexport type BriefcaseId = number;\r\n\r\n/** Values of [[BriefcaseId]] that have special meaning.\r\n * @public\r\n * @extensions\r\n */\r\nexport enum BriefcaseIdValue {\r\n /** Indicates an invalid/illegal BriefcaseId */\r\n Illegal = 0xffffffff,\r\n\r\n /** BriefcaseIds must be less than this value */\r\n Max = 1 << 24,\r\n\r\n /** All valid iModelHub issued BriefcaseIds will be equal or higher than this */\r\n FirstValid = 2,\r\n\r\n /** All valid iModelHub issued BriefcaseIds will be equal or lower than this */\r\n LastValid = BriefcaseIdValue.Max - 11,\r\n\r\n /**\r\n * The briefcase has not been assigned a unique Id by iModelHub. Only briefcases that have been assigned a unique BriefcaseId may create changesets,\r\n * because BriefcaseId is used to create unique ElementIds for new elements.\r\n *\r\n * The `Unassigned` briefcaseId is used for several purposes:\r\n * - **Snapshots**. Snapshot files are immutable copies of an iModel for archival or data exchange purposes. They can neither generate nor accept new changesets.\r\n * - **Checkpoints**. Checkpoints are Snapshots that represent a specific version on an iModel's timeline.\r\n * - **PullOnly**. A local briefcase file that may be used to \"slide\" along a timeline by applying incoming changesets.\r\n * They are always opened readonly except to apply changesets.\r\n * - **Standalone**. Standalone iModels are local files that are not connected to iModelHub, and therefore cannot accept or create changesets.\r\n */\r\n Unassigned = 0,\r\n}\r\n\r\n/** Whether a briefcase is editable or may only accept incoming changesets from iModelHub\r\n * @public\r\n * @extensions\r\n */\r\nexport enum SyncMode {\r\n /** Use a fixed version (i.e. a checkpoint). See [CheckpointManager]($backend) for preferred approach to using checkpoint files. */\r\n FixedVersion = 1,\r\n /** A briefcase that can be edited. A unique briefcaseId must be assigned by iModelHub. */\r\n PullAndPush = 2,\r\n /** use [BriefcaseIdValue.Unassigned](%backend). This makes a briefcase that can accept changesets from iModelHub but can never create changesets. */\r\n PullOnly = 3,\r\n}\r\n\r\n/**\r\n * Options to open a previously downloaded briefcase\r\n * @public\r\n */\r\nexport interface OpenBriefcaseOptions {\r\n /** open briefcase Readonly */\r\n readonly openAsReadOnly?: boolean;\r\n}\r\n\r\n/**\r\n * Properties that specify a briefcase within the local briefcase cache.\r\n * @see BriefcaseManager.getFileName\r\n * @public\r\n */\r\nexport interface BriefcaseProps {\r\n /** Id of the iModel */\r\n readonly iModelId: GuidString;\r\n\r\n /** BriefcaseId of the briefcase */\r\n readonly briefcaseId: BriefcaseId;\r\n}\r\n\r\n/** Properties for opening a local briefcase file via [BriefcaseDb.open]($backend)\r\n * @public\r\n */\r\nexport interface OpenBriefcaseProps extends IModelEncryptionProps, OpenDbKey { // eslint-disable-line deprecation/deprecation\r\n /** the full path to the briefcase file */\r\n readonly fileName: LocalFileName;\r\n /** If true, open the briefcase readonly */\r\n readonly readonly?: boolean;\r\n}\r\n\r\n/** Properties of a local briefcase file, returned by [BriefcaseManager.getCachedBriefcases]($backend) and [BriefcaseManager.downloadBriefcase]($backend)\r\n * @public\r\n * @extensions\r\n */\r\nexport interface LocalBriefcaseProps {\r\n /** Full path of local file. */\r\n readonly fileName: LocalFileName;\r\n\r\n /** The iTwin containing the iModel. */\r\n readonly iTwinId: GuidString;\r\n\r\n /** The iModelId. */\r\n readonly iModelId: GuidString;\r\n\r\n /** The briefcaseId. */\r\n readonly briefcaseId: BriefcaseId;\r\n\r\n /** The current changesetId.\r\n * @note ChangeSet Ids are string hash values based on the ChangeSet's content and parent.\r\n */\r\n readonly changeset: ChangesetIdWithIndex;\r\n\r\n /** Size of the briefcase file in bytes */\r\n readonly fileSize: number;\r\n}\r\n\r\n/** Properties for downloading a briefcase to a local file, from iModelHub.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface RequestNewBriefcaseProps {\r\n /** iTwin that the iModel belongs to. */\r\n readonly iTwinId: GuidString;\r\n\r\n /** The iModelId for the new briefcase. */\r\n readonly iModelId: GuidString;\r\n\r\n /** Full path of local file to store the briefcase. If undefined, a file will be created in the briefcase cache, and this member will be filled with the full path to the file.\r\n * Callers can use this to open the briefcase after the download completes.\r\n * @note this member is both an input and an output.\r\n */\r\n readonly fileName?: LocalFileName;\r\n\r\n /**\r\n * The BriefcaseId for the new briefcase. If undefined, a new BriefcaseId will be acquired from iModelHub before the download, and is returned in this member.\r\n * @note To download a briefcase that can accept but not create new changesets (sometimes referred to as \"pull only\" briefcases), set this value to [[BriefcaseIdValue.Unassigned]].\r\n * After downloading, you can merely delete unassigned briefcase files when they are no longer needed. Assigned BriefcaseIds should be released (via [BriefcaseManager.releaseBriefcase]($backend) )\r\n * when you are done with them.\r\n * @note this member is both an input and an output.\r\n *\r\n */\r\n briefcaseId?: BriefcaseId;\r\n\r\n /** Id of the change set of the new briefcase. If undefined, use latest. */\r\n asOf?: IModelVersionProps;\r\n}\r\n\r\n/**\r\n * Manages the download of a briefcase\r\n * @public\r\n */\r\nexport interface BriefcaseDownloader {\r\n /** Id of the briefcase being downloaded */\r\n readonly briefcaseId: BriefcaseId;\r\n\r\n /** the name of the local file for the briefcase */\r\n readonly fileName: LocalFileName;\r\n\r\n /** Promise that resolves when the download completes. await this to complete the download */\r\n readonly downloadPromise: Promise<void>;\r\n\r\n /** Request cancellation of the download */\r\n readonly requestCancel: () => Promise<boolean>;\r\n}\r\n\r\n/** Option to control the validation and upgrade of domain schemas in the Db\r\n * @beta\r\n */\r\nexport enum DomainOptions {\r\n /** Domain schemas will be validated for any required upgrades. Any errors will be reported back, and cause the application to fail opening the Db */\r\n CheckRequiredUpgrades = 0,\r\n\r\n /** Domain schemas will be validated for any required or optional upgrades. Any errors will be reported back, and cause the application to fail opening the Db */\r\n CheckRecommendedUpgrades = 1,\r\n\r\n /** Domain schemas will be upgraded if necessary. However, only compatible schema upgrades will be allowed - these are typically additions of classes, properties, and changes to custom attributes */\r\n Upgrade = 2,\r\n\r\n /** Domain schemas will neither be validated nor be upgraded. Used only internally */\r\n SkipCheck = 3,\r\n}\r\n\r\n/** Options that control whether a profile upgrade should be performed when opening a Db\r\n * @beta\r\n */\r\nexport enum ProfileOptions {\r\n /** No profile upgrade will be performed. If a profile upgrade was required, opening the file will fail */\r\n None = 0,\r\n\r\n /** Profile upgrade will be performed if necessary */\r\n Upgrade = 1,\r\n}\r\n\r\n/** Arguments to validate and update the profile and domain schemas when opening a Db\r\n * @beta\r\n */\r\nexport interface UpgradeOptions {\r\n /** Option to control the validation and upgrade of domain schemas in the Db */\r\n readonly domain?: DomainOptions;\r\n\r\n /** Options that control whether a profile upgrade should be performed when opening a file */\r\n readonly profile?: ProfileOptions;\r\n\r\n /** Options that will allow data transform during Profile/Domain schema upgrade */\r\n readonly schemaLockHeld?: boolean;\r\n}\r\n\r\n/**\r\n * The state of the schemas in the Db compared with what the current version of the software expects\r\n * Note: The state may vary depending on whether the Db is to be opened ReadOnly or ReadWrite.\r\n * @beta\r\n */\r\nexport enum SchemaState {\r\n /** The schemas in the Db are up-to-date, and do not need to be upgraded before opening it with the current version of the software */\r\n UpToDate,\r\n\r\n /** It's required that the schemas in the Db be upgraded before it can be opened with the current version of the software.\r\n * This may happen in read-write scenarios where the application requires a newer version of the schemas to be in place before\r\n * it can write data based on that new schema.\r\n */\r\n UpgradeRequired,\r\n\r\n /** It's recommended, but not necessary that the schemas in the Db be upgraded before opening it with the current version of the software */\r\n UpgradeRecommended,\r\n\r\n /** The schemas in the Db are too old to be opened by the current version of the software. Upgrade using the API is not possible. */\r\n TooOld,\r\n\r\n /** The schemas in the Db are too new to be opened by the current version of the software */\r\n TooNew,\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"BriefcaseTypes.js","sourceRoot":"","sources":["../../src/BriefcaseTypes.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAaH;;;GAGG;AACH,MAAM,CAAN,IAAY,gBAyBX;AAzBD,WAAY,gBAAgB;IAC1B,+CAA+C;IAC/C,sEAAoB,CAAA;IAEpB,gDAAgD;IAChD,4DAAa,CAAA;IAEb,gFAAgF;IAChF,mEAAc,CAAA;IAEd,+EAA+E;IAC/E,wEAAqC,CAAA;IAErC;;;;;;;;;;OAUG;IACH,mEAAc,CAAA;AAChB,CAAC,EAzBW,gBAAgB,KAAhB,gBAAgB,QAyB3B;AAED;;;GAGG;AACH,MAAM,CAAN,IAAY,QAOX;AAPD,WAAY,QAAQ;IAClB,mIAAmI;IACnI,uDAAgB,CAAA;IAChB,0FAA0F;IAC1F,qDAAe,CAAA;IACf,qJAAqJ;IACrJ,+CAAY,CAAA;AACd,CAAC,EAPW,QAAQ,KAAR,QAAQ,QAOnB;AAyHD;;GAEG;AACH,MAAM,CAAN,IAAY,aAYX;AAZD,WAAY,aAAa;IACvB,qJAAqJ;IACrJ,mFAAyB,CAAA;IAEzB,iKAAiK;IACjK,yFAA4B,CAAA;IAE5B,sMAAsM;IACtM,uDAAW,CAAA;IAEX,qFAAqF;IACrF,2DAAa,CAAA;AACf,CAAC,EAZW,aAAa,KAAb,aAAa,QAYxB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,0GAA0G;IAC1G,mDAAQ,CAAA;IAER,qDAAqD;IACrD,yDAAW,CAAA;AACb,CAAC,EANW,cAAc,KAAd,cAAc,QAMzB;AAgBD;;;;GAIG;AACH,MAAM,CAAN,IAAY,WAkBX;AAlBD,WAAY,WAAW;IACrB,sIAAsI;IACtI,qDAAQ,CAAA;IAER;;;OAGG;IACH,mEAAe,CAAA;IAEf,4IAA4I;IAC5I,yEAAkB,CAAA;IAElB,oIAAoI;IACpI,iDAAM,CAAA;IAEN,4FAA4F;IAC5F,iDAAM,CAAA;AACR,CAAC,EAlBW,WAAW,KAAX,WAAW,QAkBtB","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module iModels\r\n */\r\n\r\nimport { GuidString } from \"@itwin/core-bentley\";\r\nimport { ChangesetIdWithIndex, LocalFileName } from \"./ChangesetProps\";\r\nimport { IModelEncryptionProps, OpenDbKey } from \"./IModel\";\r\nimport { IModelVersionProps } from \"./IModelVersion\";\r\n\r\n/** The Id assigned to a briefcase by iModelHub, or [[BriefcaseIdValue.Unassigned]] .\r\n * @public\r\n * @extensions\r\n */\r\nexport type BriefcaseId = number;\r\n\r\n/** Values of [[BriefcaseId]] that have special meaning.\r\n * @public\r\n * @extensions\r\n */\r\nexport enum BriefcaseIdValue {\r\n /** Indicates an invalid/illegal BriefcaseId */\r\n Illegal = 0xffffffff,\r\n\r\n /** BriefcaseIds must be less than this value */\r\n Max = 1 << 24,\r\n\r\n /** All valid iModelHub issued BriefcaseIds will be equal or higher than this */\r\n FirstValid = 2,\r\n\r\n /** All valid iModelHub issued BriefcaseIds will be equal or lower than this */\r\n LastValid = BriefcaseIdValue.Max - 11,\r\n\r\n /**\r\n * The briefcase has not been assigned a unique Id by iModelHub. Only briefcases that have been assigned a unique BriefcaseId may create changesets,\r\n * because BriefcaseId is used to create unique ElementIds for new elements.\r\n *\r\n * The `Unassigned` briefcaseId is used for several purposes:\r\n * - **Snapshots**. Snapshot files are immutable copies of an iModel for archival or data exchange purposes. They can neither generate nor accept new changesets.\r\n * - **Checkpoints**. Checkpoints are Snapshots that represent a specific version on an iModel's timeline.\r\n * - **PullOnly**. A local briefcase file that may be used to \"slide\" along a timeline by applying incoming changesets.\r\n * They are always opened readonly except to apply changesets.\r\n * - **Standalone**. Standalone iModels are local files that are not connected to iModelHub, and therefore cannot accept or create changesets.\r\n */\r\n Unassigned = 0,\r\n}\r\n\r\n/** Whether a briefcase is editable or may only accept incoming changesets from iModelHub\r\n * @public\r\n * @extensions\r\n */\r\nexport enum SyncMode {\r\n /** Use a fixed version (i.e. a checkpoint). See [CheckpointManager]($backend) for preferred approach to using checkpoint files. */\r\n FixedVersion = 1,\r\n /** A briefcase that can be edited. A unique briefcaseId must be assigned by iModelHub. */\r\n PullAndPush = 2,\r\n /** use [BriefcaseIdValue.Unassigned](%backend). This makes a briefcase that can accept changesets from iModelHub but can never create changesets. */\r\n PullOnly = 3,\r\n}\r\n\r\n/**\r\n * Options to open a previously downloaded briefcase\r\n * @public\r\n */\r\nexport interface OpenBriefcaseOptions {\r\n /** open briefcase Readonly */\r\n readonly openAsReadOnly?: boolean;\r\n}\r\n\r\n/**\r\n * Properties that specify a briefcase within the local briefcase cache.\r\n * @see BriefcaseManager.getFileName\r\n * @public\r\n */\r\nexport interface BriefcaseProps {\r\n /** Id of the iModel */\r\n readonly iModelId: GuidString;\r\n\r\n /** BriefcaseId of the briefcase */\r\n readonly briefcaseId: BriefcaseId;\r\n}\r\n\r\n/** Properties for opening a local briefcase file via [BriefcaseDb.open]($backend)\r\n * @public\r\n */\r\nexport interface OpenBriefcaseProps extends IModelEncryptionProps, OpenDbKey { // eslint-disable-line deprecation/deprecation\r\n /** the full path to the briefcase file */\r\n readonly fileName: LocalFileName;\r\n /**\r\n * If true, open the briefcase readonly.\r\n * @note Readonly connections always hold a read transaction against the briefcase. That can cause the WAL file size to grow\r\n * unbounded if changes happen while they're open (see [Checkpoint starvation](https://www.sqlite.org/wal.html#avoiding_excessively_large_wal_files))\r\n * It is a good idea to close the readonly connection *before* closing the writeable connection so the WAL file will be deleted.\r\n */\r\n readonly readonly?: boolean;\r\n /**\r\n * If true, open the briefcase readonly and watch the briefcase for changes from another connection and restart the defaultTxn whenever they happen.\r\n * The restart happens only after the next to the (backend) event loop, and will generate events that reflect the changes\r\n * from the other connection.\r\n * @note This cannot be used with cloud-based briefcases.\r\n */\r\n readonly watchForChanges?: boolean;\r\n}\r\n\r\n/** Properties of a local briefcase file, returned by [BriefcaseManager.getCachedBriefcases]($backend) and [BriefcaseManager.downloadBriefcase]($backend)\r\n * @public\r\n * @extensions\r\n */\r\nexport interface LocalBriefcaseProps {\r\n /** Full path of local file. */\r\n readonly fileName: LocalFileName;\r\n\r\n /** The iTwin containing the iModel. */\r\n readonly iTwinId: GuidString;\r\n\r\n /** The iModelId. */\r\n readonly iModelId: GuidString;\r\n\r\n /** The briefcaseId. */\r\n readonly briefcaseId: BriefcaseId;\r\n\r\n /** The current changesetId.\r\n * @note ChangeSet Ids are string hash values based on the ChangeSet's content and parent.\r\n */\r\n readonly changeset: ChangesetIdWithIndex;\r\n\r\n /** Size of the briefcase file in bytes */\r\n readonly fileSize: number;\r\n}\r\n\r\n/** Properties for downloading a briefcase to a local file, from iModelHub.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface RequestNewBriefcaseProps {\r\n /** iTwin that the iModel belongs to. */\r\n readonly iTwinId: GuidString;\r\n\r\n /** The iModelId for the new briefcase. */\r\n readonly iModelId: GuidString;\r\n\r\n /** Full path of local file to store the briefcase. If undefined, a file will be created in the briefcase cache, and this member will be filled with the full path to the file.\r\n * Callers can use this to open the briefcase after the download completes.\r\n * @note this member is both an input and an output.\r\n */\r\n readonly fileName?: LocalFileName;\r\n\r\n /**\r\n * The BriefcaseId for the new briefcase. If undefined, a new BriefcaseId will be acquired from iModelHub before the download, and is returned in this member.\r\n * @note To download a briefcase that can accept but not create new changesets (sometimes referred to as \"pull only\" briefcases), set this value to [[BriefcaseIdValue.Unassigned]].\r\n * After downloading, you can merely delete unassigned briefcase files when they are no longer needed. Assigned BriefcaseIds should be released (via [BriefcaseManager.releaseBriefcase]($backend) )\r\n * when you are done with them.\r\n * @note this member is both an input and an output.\r\n *\r\n */\r\n briefcaseId?: BriefcaseId;\r\n\r\n /** Id of the change set of the new briefcase. If undefined, use latest. */\r\n asOf?: IModelVersionProps;\r\n}\r\n\r\n/**\r\n * Manages the download of a briefcase\r\n * @public\r\n */\r\nexport interface BriefcaseDownloader {\r\n /** Id of the briefcase being downloaded */\r\n readonly briefcaseId: BriefcaseId;\r\n\r\n /** the name of the local file for the briefcase */\r\n readonly fileName: LocalFileName;\r\n\r\n /** Promise that resolves when the download completes. await this to complete the download */\r\n readonly downloadPromise: Promise<void>;\r\n\r\n /** Request cancellation of the download */\r\n readonly requestCancel: () => Promise<boolean>;\r\n}\r\n\r\n/** Option to control the validation and upgrade of domain schemas in the Db\r\n * @beta\r\n */\r\nexport enum DomainOptions {\r\n /** Domain schemas will be validated for any required upgrades. Any errors will be reported back, and cause the application to fail opening the Db */\r\n CheckRequiredUpgrades = 0,\r\n\r\n /** Domain schemas will be validated for any required or optional upgrades. Any errors will be reported back, and cause the application to fail opening the Db */\r\n CheckRecommendedUpgrades = 1,\r\n\r\n /** Domain schemas will be upgraded if necessary. However, only compatible schema upgrades will be allowed - these are typically additions of classes, properties, and changes to custom attributes */\r\n Upgrade = 2,\r\n\r\n /** Domain schemas will neither be validated nor be upgraded. Used only internally */\r\n SkipCheck = 3,\r\n}\r\n\r\n/** Options that control whether a profile upgrade should be performed when opening a Db\r\n * @beta\r\n */\r\nexport enum ProfileOptions {\r\n /** No profile upgrade will be performed. If a profile upgrade was required, opening the file will fail */\r\n None = 0,\r\n\r\n /** Profile upgrade will be performed if necessary */\r\n Upgrade = 1,\r\n}\r\n\r\n/** Arguments to validate and update the profile and domain schemas when opening a Db\r\n * @beta\r\n */\r\nexport interface UpgradeOptions {\r\n /** Option to control the validation and upgrade of domain schemas in the Db */\r\n readonly domain?: DomainOptions;\r\n\r\n /** Options that control whether a profile upgrade should be performed when opening a file */\r\n readonly profile?: ProfileOptions;\r\n\r\n /** Options that will allow data transform during Profile/Domain schema upgrade */\r\n readonly schemaLockHeld?: boolean;\r\n}\r\n\r\n/**\r\n * The state of the schemas in the Db compared with what the current version of the software expects\r\n * Note: The state may vary depending on whether the Db is to be opened ReadOnly or ReadWrite.\r\n * @beta\r\n */\r\nexport enum SchemaState {\r\n /** The schemas in the Db are up-to-date, and do not need to be upgraded before opening it with the current version of the software */\r\n UpToDate,\r\n\r\n /** It's required that the schemas in the Db be upgraded before it can be opened with the current version of the software.\r\n * This may happen in read-write scenarios where the application requires a newer version of the schemas to be in place before\r\n * it can write data based on that new schema.\r\n */\r\n UpgradeRequired,\r\n\r\n /** It's recommended, but not necessary that the schemas in the Db be upgraded before opening it with the current version of the software */\r\n UpgradeRecommended,\r\n\r\n /** The schemas in the Db are too old to be opened by the current version of the software. Upgrade using the API is not possible. */\r\n TooOld,\r\n\r\n /** The schemas in the Db are too new to be opened by the current version of the software */\r\n TooNew,\r\n}\r\n"]}
|
|
@@ -9,6 +9,8 @@ import { AxisAlignedBox3dProps } from "./geometry/Placement";
|
|
|
9
9
|
* @extensions
|
|
10
10
|
*/
|
|
11
11
|
export declare enum TypeOfChange {
|
|
12
|
+
/** Element contains no changes */
|
|
13
|
+
NoChange = 0,
|
|
12
14
|
/** A property in the element changed */
|
|
13
15
|
Property = 1,
|
|
14
16
|
/** The geometry stream of a [GeometricElement]($backend) changed */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangedElements.d.ts","sourceRoot":"","sources":["../../src/ChangedElements.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAI7D;;;GAGG;AACH,oBAAY,YAAY;IACtB,wCAAwC;IACxC,QAAQ,IAAM;IACd,oEAAoE;IACpE,QAAQ,IAAO;IACf,kEAAkE;IAClE,SAAS,IAAQ;IACjB,qEAAqE;IACrE,QAAQ,IAAS;IACjB,+CAA+C;IAC/C,MAAM,KAAU;IAChB,qDAAqD;IACrD,MAAM,KAAW;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,2CAA2C;IAC3C,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB;;OAEG;IACH,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,oDAAoD;IACpD,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB;;MAEE;IACF,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC;IACzB;;;;OAIG;IACH,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC;CAC/B;AAED,gBAAgB;AAChB,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,MAAM,EAAE,qBAAqB,EAAE,CAAC;CACjC;AAED,gBAAgB;AAChB,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;CAC9B"}
|
|
1
|
+
{"version":3,"file":"ChangedElements.d.ts","sourceRoot":"","sources":["../../src/ChangedElements.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAI7D;;;GAGG;AACH,oBAAY,YAAY;IACtB,kCAAkC;IAClC,QAAQ,IAAI;IACZ,wCAAwC;IACxC,QAAQ,IAAM;IACd,oEAAoE;IACpE,QAAQ,IAAO;IACf,kEAAkE;IAClE,SAAS,IAAQ;IACjB,qEAAqE;IACrE,QAAQ,IAAS;IACjB,+CAA+C;IAC/C,MAAM,KAAU;IAChB,qDAAqD;IACrD,MAAM,KAAW;CAClB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,2CAA2C;IAC3C,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB;;OAEG;IACH,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,oDAAoD;IACpD,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB;;MAEE;IACF,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IACxB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IAC1B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,UAAU,EAAE,CAAC;IACzB;;;;OAIG;IACH,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC;CAC/B;AAED,gBAAgB;AAChB,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,MAAM,EAAE,qBAAqB,EAAE,CAAC;CACjC;AAED,gBAAgB;AAChB,MAAM,WAAW,UAAU;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,EAAE,aAAa,CAAC;CAC9B"}
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export var TypeOfChange;
|
|
7
7
|
(function (TypeOfChange) {
|
|
8
|
+
/** Element contains no changes */
|
|
9
|
+
TypeOfChange[TypeOfChange["NoChange"] = 0] = "NoChange";
|
|
8
10
|
/** A property in the element changed */
|
|
9
11
|
TypeOfChange[TypeOfChange["Property"] = 1] = "Property";
|
|
10
12
|
/** The geometry stream of a [GeometricElement]($backend) changed */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangedElements.js","sourceRoot":"","sources":["../../src/ChangedElements.ts"],"names":[],"mappings":"AAWA,uBAAuB;AAEvB;;;GAGG;AACH,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"ChangedElements.js","sourceRoot":"","sources":["../../src/ChangedElements.ts"],"names":[],"mappings":"AAWA,uBAAuB;AAEvB;;;GAGG;AACH,MAAM,CAAN,IAAY,YAeX;AAfD,WAAY,YAAY;IACtB,kCAAkC;IAClC,uDAAY,CAAA;IACZ,wCAAwC;IACxC,uDAAc,CAAA;IACd,oEAAoE;IACpE,uDAAe,CAAA;IACf,kEAAkE;IAClE,yDAAiB,CAAA;IACjB,qEAAqE;IACrE,uDAAiB,CAAA;IACjB,+CAA+C;IAC/C,oDAAgB,CAAA;IAChB,qDAAqD;IACrD,oDAAiB,CAAA;AACnB,CAAC,EAfW,YAAY,KAAZ,YAAY,QAevB","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/**\r\n * @packageDocumentation\r\n * @module Entities\r\n */\r\nimport { DbOpcode, Id64String } from \"@itwin/core-bentley\";\r\nimport { AxisAlignedBox3dProps } from \"./geometry/Placement\";\r\n\r\n// cspell:ignore bboxes\r\n\r\n/** Bitflags describing which aspects of an [Element]($backend) changed as part of a [[ChangedElements]].\r\n * @public\r\n * @extensions\r\n */\r\nexport enum TypeOfChange {\r\n /** Element contains no changes */\r\n NoChange = 0,\r\n /** A property in the element changed */\r\n Property = 0b1,\r\n /** The geometry stream of a [GeometricElement]($backend) changed */\r\n Geometry = 0b10,\r\n /** The [[Placement]] of a [GeometricElement]($backend) changed */\r\n Placement = 0b100,\r\n /** Indirect change occurred to this element by a related instance */\r\n Indirect = 0b1000,\r\n /** Hidden properties of the element changed */\r\n Hidden = 0b10000,\r\n /** The top-most parent of the element has changed */\r\n Parent = 0b100000,\r\n}\r\n\r\n/** Changed elements found in a changeset or between a range of changesets.\r\n * All arrays in this object will have the same number of items.\r\n * Each index for those arrays refer to the same element, e.g. to get the class Id of\r\n * the element given by element Id changedElements.elements[index], you can use changedElements.classIds[index].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ChangedElements {\r\n /** Ids of elements that changed */\r\n elements: Id64String[];\r\n /** ECClass Ids of elements that changed */\r\n classIds: Id64String[];\r\n /** Operation that occurred on the element. Whether the element was inserted, updated or deleted.\r\n * See [DbOpcode]($core-bentley)\r\n */\r\n opcodes: DbOpcode[];\r\n /** Type of change bitflags, see [[TypeOfChange]] */\r\n type: TypeOfChange[];\r\n /** Model Ids of the changed elements\r\n * This may be undefined if the agent that did the processing job did not export model Ids\r\n */\r\n modelIds?: Id64String[];\r\n /** Property accessor strings of properties that changed, if any, for each changed element\r\n * This may be undefined if the agent that did the processing job did not export properties\r\n */\r\n properties?: string[][];\r\n /** Before state checksums of the property value\r\n * Useful to determine if property values have changed\r\n * between the versions being inspected\r\n * This may be undefined if the agent that did the processing job did not export checksums\r\n */\r\n oldChecksums?: number[][];\r\n /** After state checksums of the property value\r\n * Useful to determine if property values have changed\r\n * between the versions being inspected\r\n * This may be undefined if the agent that did the processing job did not export checksums\r\n */\r\n newChecksums?: number[][];\r\n /**\r\n * Parent ids of the changed elements\r\n * Will be \"0\" if the element has no parent\r\n * This may be undefined if the agent that did the processing job did not export parent information\r\n */\r\n parentIds?: Id64String[];\r\n /**\r\n * Parent ECClass Ids of the changed elements\r\n * Will be \"0\" if the element has no parent\r\n * This may be undefined if the agent that did the processing job did not export parent information\r\n */\r\n parentClassIds?: Id64String[];\r\n}\r\n\r\n/** @internal */\r\nexport interface ChangedModels {\r\n modelIds: Id64String[];\r\n bboxes: AxisAlignedBox3dProps[];\r\n}\r\n\r\n/** @internal */\r\nexport interface ChangeData {\r\n changedElements: ChangedElements;\r\n changedModels: ChangedModels;\r\n}\r\n"]}
|
|
@@ -237,9 +237,33 @@ export declare class BlobOptionsBuilder {
|
|
|
237
237
|
setDelay(val: number): this;
|
|
238
238
|
}
|
|
239
239
|
/**
|
|
240
|
+
* Bind values to an ECSQL query.
|
|
241
|
+
*
|
|
242
|
+
* All binding class methods accept an `indexOrName` parameter as a `string | number` type and a value to bind to it.
|
|
243
|
+
* A binding must be mapped either by a positional index or a string/name. See the examples below.
|
|
244
|
+
*
|
|
245
|
+
* @example
|
|
246
|
+
* Parameter By Index:
|
|
247
|
+
* ```sql
|
|
248
|
+
* SELECT a, v FROM test.Foo WHERE a=? AND b=?
|
|
249
|
+
* ```
|
|
250
|
+
* The first `?` is index 1 and the second `?` is index 2. The parameter index starts with 1 and not 0.
|
|
251
|
+
*
|
|
252
|
+
* @example
|
|
253
|
+
* Parameter By Name:
|
|
254
|
+
* ```sql
|
|
255
|
+
* SELECT a, v FROM test.Foo WHERE a=:name_a AND b=:name_b
|
|
256
|
+
* ```
|
|
257
|
+
* Using "name_a" as the `indexOrName` will bind the provided value to `name_a` in the query. And the same goes for
|
|
258
|
+
* using "name_b" and the `name_b` binding respectively.
|
|
259
|
+
*
|
|
260
|
+
* @see
|
|
261
|
+
* - [ECSQL Parameters]($docs/learning/ECSQL.md#ecsql-parameters)
|
|
262
|
+
* - [ECSQL Parameter Types]($docs/learning/ECSQLParameterTypes)
|
|
263
|
+
* - [ECSQL Code Examples]($docs/learning/backend/ECSQLCodeExamples#parameter-bindings)
|
|
264
|
+
*
|
|
240
265
|
* @public
|
|
241
|
-
|
|
242
|
-
* */
|
|
266
|
+
*/
|
|
243
267
|
export declare class QueryBinder {
|
|
244
268
|
private _args;
|
|
245
269
|
private verify;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConcurrentQuery.d.ts","sourceRoot":"","sources":["../../src/ConcurrentQuery.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAqB,QAAQ,EAAQ,UAAU,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACvH,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAGxD;;;;;;GAMG;AACH,oBAAY,cAAc;IACxB;;OAEG;IACH,qBAAqB,IAAA;IACrB;;OAEG;IACH,uBAAuB,IAAA;IACvB;;OAEG;IACH,kBAAkB,IAAA;CACnB;
|
|
1
|
+
{"version":3,"file":"ConcurrentQuery.d.ts","sourceRoot":"","sources":["../../src/ConcurrentQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -212,9 +212,33 @@ var QueryParamType;
|
|
|
212
212
|
QueryParamType[QueryParamType["Struct"] = 11] = "Struct";
|
|
213
213
|
})(QueryParamType || (QueryParamType = {}));
|
|
214
214
|
/**
|
|
215
|
+
* Bind values to an ECSQL query.
|
|
216
|
+
*
|
|
217
|
+
* All binding class methods accept an `indexOrName` parameter as a `string | number` type and a value to bind to it.
|
|
218
|
+
* A binding must be mapped either by a positional index or a string/name. See the examples below.
|
|
219
|
+
*
|
|
220
|
+
* @example
|
|
221
|
+
* Parameter By Index:
|
|
222
|
+
* ```sql
|
|
223
|
+
* SELECT a, v FROM test.Foo WHERE a=? AND b=?
|
|
224
|
+
* ```
|
|
225
|
+
* The first `?` is index 1 and the second `?` is index 2. The parameter index starts with 1 and not 0.
|
|
226
|
+
*
|
|
227
|
+
* @example
|
|
228
|
+
* Parameter By Name:
|
|
229
|
+
* ```sql
|
|
230
|
+
* SELECT a, v FROM test.Foo WHERE a=:name_a AND b=:name_b
|
|
231
|
+
* ```
|
|
232
|
+
* Using "name_a" as the `indexOrName` will bind the provided value to `name_a` in the query. And the same goes for
|
|
233
|
+
* using "name_b" and the `name_b` binding respectively.
|
|
234
|
+
*
|
|
235
|
+
* @see
|
|
236
|
+
* - [ECSQL Parameters]($docs/learning/ECSQL.md#ecsql-parameters)
|
|
237
|
+
* - [ECSQL Parameter Types]($docs/learning/ECSQLParameterTypes)
|
|
238
|
+
* - [ECSQL Code Examples]($docs/learning/backend/ECSQLCodeExamples#parameter-bindings)
|
|
239
|
+
*
|
|
215
240
|
* @public
|
|
216
|
-
|
|
217
|
-
* */
|
|
241
|
+
*/
|
|
218
242
|
export class QueryBinder {
|
|
219
243
|
constructor() {
|
|
220
244
|
this._args = {};
|
|
@@ -490,7 +514,9 @@ export class QueryBinder {
|
|
|
490
514
|
}
|
|
491
515
|
return params;
|
|
492
516
|
}
|
|
493
|
-
serialize() {
|
|
517
|
+
serialize() {
|
|
518
|
+
return this._args;
|
|
519
|
+
}
|
|
494
520
|
}
|
|
495
521
|
/** @internal */
|
|
496
522
|
export var DbRequestKind;
|