@itwin/frontend-tiles 5.0.0-dev.56 → 5.0.0-dev.57

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.
Files changed (41) hide show
  1. package/lib/cjs/BatchedModelGroups.js +15 -10
  2. package/lib/cjs/BatchedModelGroups.js.map +1 -1
  3. package/lib/cjs/BatchedModels.js +5 -2
  4. package/lib/cjs/BatchedModels.js.map +1 -1
  5. package/lib/cjs/BatchedSpatialTileTreeRefs.js +17 -1
  6. package/lib/cjs/BatchedSpatialTileTreeRefs.js.map +1 -1
  7. package/lib/cjs/BatchedTile.js +5 -0
  8. package/lib/cjs/BatchedTile.js.map +1 -1
  9. package/lib/cjs/BatchedTileContentReader.js +3 -0
  10. package/lib/cjs/BatchedTileContentReader.js.map +1 -1
  11. package/lib/cjs/BatchedTileTree.js +5 -0
  12. package/lib/cjs/BatchedTileTree.js.map +1 -1
  13. package/lib/cjs/BatchedTileTreeReference.js +4 -0
  14. package/lib/cjs/BatchedTileTreeReference.js.map +1 -1
  15. package/lib/cjs/BatchedTilesetReader.js +3 -0
  16. package/lib/cjs/BatchedTilesetReader.js.map +1 -1
  17. package/lib/cjs/IndexedDBCache.js +3 -0
  18. package/lib/cjs/IndexedDBCache.js.map +1 -1
  19. package/lib/cjs/ModelGroupDisplayTransforms.js +2 -1
  20. package/lib/cjs/ModelGroupDisplayTransforms.js.map +1 -1
  21. package/lib/esm/BatchedModelGroups.js +15 -10
  22. package/lib/esm/BatchedModelGroups.js.map +1 -1
  23. package/lib/esm/BatchedModels.js +5 -2
  24. package/lib/esm/BatchedModels.js.map +1 -1
  25. package/lib/esm/BatchedSpatialTileTreeRefs.js +17 -1
  26. package/lib/esm/BatchedSpatialTileTreeRefs.js.map +1 -1
  27. package/lib/esm/BatchedTile.js +5 -0
  28. package/lib/esm/BatchedTile.js.map +1 -1
  29. package/lib/esm/BatchedTileContentReader.js +3 -0
  30. package/lib/esm/BatchedTileContentReader.js.map +1 -1
  31. package/lib/esm/BatchedTileTree.js +5 -0
  32. package/lib/esm/BatchedTileTree.js.map +1 -1
  33. package/lib/esm/BatchedTileTreeReference.js +4 -0
  34. package/lib/esm/BatchedTileTreeReference.js.map +1 -1
  35. package/lib/esm/BatchedTilesetReader.js +3 -0
  36. package/lib/esm/BatchedTilesetReader.js.map +1 -1
  37. package/lib/esm/IndexedDBCache.js +3 -0
  38. package/lib/esm/IndexedDBCache.js.map +1 -1
  39. package/lib/esm/ModelGroupDisplayTransforms.js +2 -1
  40. package/lib/esm/ModelGroupDisplayTransforms.js.map +1 -1
  41. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedTileTreeReference.js","sourceRoot":"","sources":["../../src/BatchedTileTreeReference.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert, Id64Set } from \"@itwin/core-bentley\";\nimport { Range3d, Transform } from \"@itwin/core-geometry\";\nimport {\n BatchType, FeatureAppearance, FeatureAppearanceProvider, FeatureAppearanceSource, GeometryClass, ViewFlagOverrides,\n} from \"@itwin/core-common\";\nimport {\n formatAnimationBranchId, RenderClipVolume, SceneContext, TileDrawArgs, TileGraphicType, TileTree, TileTreeOwner, TileTreeReference,\n} from \"@itwin/core-frontend\";\nimport { BatchedModels } from \"./BatchedModels\";\nimport { ModelGroup, ModelGroupInfo } from \"./ModelGroup\";\n\nexport interface BatchedTileTreeReferenceArgs {\n readonly models: BatchedModels;\n readonly groups: ReadonlyArray<ModelGroupInfo>;\n readonly treeOwner: TileTreeOwner;\n readonly getCurrentTimePoint: () => number;\n}\n\nexport class BatchedTileTreeReference extends TileTreeReference implements FeatureAppearanceProvider {\n private readonly _args: BatchedTileTreeReferenceArgs;\n private readonly _groupIndex: number;\n private readonly _animationNodeId?: number;\n private readonly _branchId?: string;\n\n public constructor(args: BatchedTileTreeReferenceArgs, groupIndex: number, animationNodeId: number | undefined) {\n super();\n this._args = args;\n this._groupIndex = groupIndex;\n this._animationNodeId = animationNodeId;\n if (undefined !== animationNodeId) {\n assert(undefined !== this._groupInfo.timeline);\n this._branchId = formatAnimationBranchId(this._groupInfo.timeline.modelId, animationNodeId);\n }\n }\n\n public get groupModelIds(): Id64Set | undefined {\n return (this._groupInfo as ModelGroup).modelIds;\n }\n\n private get _groupInfo(): ModelGroupInfo {\n assert(this._groupIndex < this._args.groups.length);\n return this._args.groups[this._groupIndex];\n }\n\n public override get treeOwner(): TileTreeOwner {\n return this._args.treeOwner;\n }\n\n public override getAppearanceProvider(): FeatureAppearanceProvider {\n return this;\n }\n\n protected override getClipVolume(): RenderClipVolume | undefined {\n return this._groupInfo.clip;\n }\n\n public override canSupplyToolTip() {\n return false;\n }\n\n public getFeatureAppearance(\n source: FeatureAppearanceSource,\n elemLo: number, elemHi: number,\n subcatLo: number, subcatHi: number,\n geomClass: GeometryClass,\n modelLo: number, modelHi: number,\n type: BatchType,\n animationNodeId: number,\n ): FeatureAppearance | undefined {\n if (!this._args.models.isViewed(modelLo, modelHi))\n return undefined;\n\n return source.getAppearance(elemLo, elemHi, subcatLo, subcatHi, geomClass, modelLo, modelHi, type, animationNodeId);\n }\n\n public override unionFitRange(range: Range3d): void {\n this._args.models.unionRange(range);\n }\n\n public override get castsShadows(): boolean {\n if (this._groupInfo.planProjection)\n return false;\n\n return super.castsShadows;\n }\n\n public override getViewFlagOverrides(): ViewFlagOverrides {\n return this._groupInfo.viewFlags;\n }\n\n public override draw(args: TileDrawArgs): void {\n if (this._groupInfo.planProjection?.overlay)\n args.context.withGraphicType(TileGraphicType.Overlay, () => args.tree.draw(args));\n else\n super.draw(args);\n }\n\n protected override computeTransform(tree: TileTree): Transform {\n const group = this._groupInfo;\n let baseTf = super.computeTransform(tree);\n\n if (group.planProjection) {\n baseTf = baseTf.clone();\n baseTf.origin.z += group.planProjection.elevation;\n }\n\n if (group.timeline) {\n assert(undefined !== this._animationNodeId);\n const animTf = group.timeline.getTransform(this._animationNodeId, this._args.getCurrentTimePoint());\n if (animTf)\n animTf.multiplyTransformTransform(baseTf, baseTf);\n }\n\n const displayTf = group.displayTransform;\n if (!displayTf)\n return baseTf;\n\n return displayTf.premultiply ? displayTf.transform.multiplyTransformTransform(baseTf) : baseTf.multiplyTransformTransform(displayTf.transform);\n }\n\n protected override getAnimationTransformNodeId() {\n return this._animationNodeId;\n }\n\n protected override getGroupNodeId() {\n return this._args.groups.length > 1 ? this._groupIndex : undefined;\n }\n\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\n if (this._branchId) {\n const branch = context.viewport.target.animationBranches?.branchStates.get(this._branchId);\n if (branch?.omit) {\n // This branch is not supposed to be drawn\n return undefined;\n }\n }\n\n const args = super.createDrawArgs(context);\n\n // ###TODO args.boundingRange = args.tree.getTransformNodeRange(this._animationTransformNodeId);\n // ###TODO if PlanProjectionSettings.enforceDisplayPriority, createGraphicLayerContainer.\n\n return args;\n }\n}\n"]}
1
+ {"version":3,"file":"BatchedTileTreeReference.js","sourceRoot":"","sources":["../../src/BatchedTileTreeReference.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { assert, Id64Set } from \"@itwin/core-bentley\";\nimport { Range3d, Transform } from \"@itwin/core-geometry\";\nimport {\n BatchType, FeatureAppearance, FeatureAppearanceProvider, FeatureAppearanceSource, GeometryClass, ViewFlagOverrides,\n} from \"@itwin/core-common\";\nimport {\n formatAnimationBranchId, RenderClipVolume, SceneContext, TileDrawArgs, TileGraphicType, TileTree, TileTreeOwner, TileTreeReference,\n} from \"@itwin/core-frontend\";\nimport { BatchedModels } from \"./BatchedModels\";\nimport { ModelGroup, ModelGroupInfo } from \"./ModelGroup\";\n\nexport interface BatchedTileTreeReferenceArgs {\n readonly models: BatchedModels;\n readonly groups: ReadonlyArray<ModelGroupInfo>;\n readonly treeOwner: TileTreeOwner;\n readonly getCurrentTimePoint: () => number;\n}\n\nexport class BatchedTileTreeReference extends TileTreeReference implements FeatureAppearanceProvider {\n private readonly _args: BatchedTileTreeReferenceArgs;\n private readonly _groupIndex: number;\n private readonly _animationNodeId?: number;\n private readonly _branchId?: string;\n\n public constructor(args: BatchedTileTreeReferenceArgs, groupIndex: number, animationNodeId: number | undefined) {\n super();\n this._args = args;\n this._groupIndex = groupIndex;\n this._animationNodeId = animationNodeId;\n if (undefined !== animationNodeId) {\n assert(undefined !== this._groupInfo.timeline);\n this._branchId = formatAnimationBranchId(this._groupInfo.timeline.modelId, animationNodeId);\n }\n }\n\n public get groupModelIds(): Id64Set | undefined {\n return (this._groupInfo as ModelGroup).modelIds;\n }\n\n private get _groupInfo(): ModelGroupInfo {\n assert(this._groupIndex < this._args.groups.length);\n return this._args.groups[this._groupIndex];\n }\n\n public override get treeOwner(): TileTreeOwner {\n return this._args.treeOwner;\n }\n\n public override getAppearanceProvider(): FeatureAppearanceProvider {\n return this;\n }\n\n protected override getClipVolume(): RenderClipVolume | undefined {\n return this._groupInfo.clip;\n }\n\n public override canSupplyToolTip() {\n return false;\n }\n\n public getFeatureAppearance(\n source: FeatureAppearanceSource,\n elemLo: number, elemHi: number,\n subcatLo: number, subcatHi: number,\n geomClass: GeometryClass,\n modelLo: number, modelHi: number,\n type: BatchType,\n animationNodeId: number,\n ): FeatureAppearance | undefined {\n if (!this._args.models.isViewed(modelLo, modelHi))\n return undefined;\n\n return source.getAppearance(elemLo, elemHi, subcatLo, subcatHi, geomClass, modelLo, modelHi, type, animationNodeId);\n }\n\n public override unionFitRange(range: Range3d): void {\n this._args.models.unionRange(range);\n }\n\n public override get castsShadows(): boolean {\n if (this._groupInfo.planProjection)\n return false;\n\n return super.castsShadows;\n }\n\n public override getViewFlagOverrides(): ViewFlagOverrides {\n return this._groupInfo.viewFlags;\n }\n\n public override draw(args: TileDrawArgs): void {\n if (this._groupInfo.planProjection?.overlay)\n args.context.withGraphicType(TileGraphicType.Overlay, () => args.tree.draw(args));\n else\n super.draw(args);\n }\n\n protected override computeTransform(tree: TileTree): Transform {\n const group = this._groupInfo;\n let baseTf = super.computeTransform(tree);\n\n if (group.planProjection) {\n baseTf = baseTf.clone();\n baseTf.origin.z += group.planProjection.elevation;\n }\n\n if (group.timeline) {\n assert(undefined !== this._animationNodeId);\n const animTf = group.timeline.getTransform(this._animationNodeId, this._args.getCurrentTimePoint());\n if (animTf)\n animTf.multiplyTransformTransform(baseTf, baseTf);\n }\n\n const displayTf = group.displayTransform;\n if (!displayTf)\n return baseTf;\n\n return displayTf.premultiply ? displayTf.transform.multiplyTransformTransform(baseTf) : baseTf.multiplyTransformTransform(displayTf.transform);\n }\n\n protected override getAnimationTransformNodeId() {\n return this._animationNodeId;\n }\n\n protected override getGroupNodeId() {\n return this._args.groups.length > 1 ? this._groupIndex : undefined;\n }\n\n public override createDrawArgs(context: SceneContext): TileDrawArgs | undefined {\n if (this._branchId) {\n const branch = context.viewport.target.animationBranches?.branchStates.get(this._branchId);\n if (branch?.omit) {\n // This branch is not supposed to be drawn\n return undefined;\n }\n }\n\n const args = super.createDrawArgs(context);\n\n // ###TODO args.boundingRange = args.tree.getTransformNodeRange(this._animationTransformNodeId);\n // ###TODO if PlanProjectionSettings.enforceDisplayPriority, createGraphicLayerContainer.\n\n return args;\n }\n}\n"]}
@@ -64,6 +64,9 @@ function transformFromJSON(json) {
64
64
  }
65
65
  /** @internal */
66
66
  export class BatchedTilesetReader {
67
+ _iModel;
68
+ _spec;
69
+ _modelGroups;
67
70
  constructor(spec, iModel, modelGroups) {
68
71
  this._iModel = iModel;
69
72
  this._spec = spec;
@@ -1 +1 @@
1
- {"version":3,"file":"BatchedTilesetReader.js","sourceRoot":"","sources":["../../src/BatchedTilesetReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Id64, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport {\n Matrix3d, Point3d, Range3d, Range3dProps, Transform, Vector3d,\n} from \"@itwin/core-geometry\";\nimport { Tileset3dSchema as schema, ViewFlagOverrides } from \"@itwin/core-common\";\nimport { IModelConnection, RealityModelTileUtils, TileLoadPriority } from \"@itwin/core-frontend\";\nimport { BatchedTileTreeParams } from \"./BatchedTileTree\";\nimport { BatchedTile, BatchedTileParams } from \"./BatchedTile\";\n\n/** @internal */\nexport interface ModelMetadataProps {\n /** The spatial volume occupied by this model's geometry. */\n extents: Range3dProps;\n /** Overrides to be applied to the view's [ViewFlags]($common) when rendering this model, if any. */\n viewFlags?: ViewFlagOverrides;\n}\n\n/** @internal */\nexport interface ModelMetadata {\n /** The spatial volume occupied by this model's geometry. */\n extents: Range3d;\n /** Overrides to be applied to the view's [ViewFlags]($common) when rendering this model, if any. */\n viewFlags?: ViewFlagOverrides;\n}\n\n/** @internal */\nexport interface BatchedTilesetProps extends schema.Tileset {\n extensions: {\n BENTLEY_BatchedTileSet: { // eslint-disable-line @typescript-eslint/naming-convention\n /** Contains an entry for every model that was processed during publishing of the tileset. */\n models: {\n [modelId: Id64String]: ModelMetadataProps | undefined;\n };\n };\n };\n}\n\nfunction isBatchedTileset(json: unknown): json is BatchedTilesetProps {\n if (typeof json !== \"object\")\n return false;\n\n const props = json as schema.Tileset;\n\n if (!props.root || !props.asset)\n return false;\n\n // The extension is required.\n const models = props.extensions?.BENTLEY_BatchedTileSet?.models;\n if (!models || typeof models !== \"object\")\n return false;\n\n // ###TODO spec requires geometricError to be present on tileset and all tiles; exporter is omitting from tileset.\n if (undefined === props.geometricError)\n props.geometricError = props.root.geometricError;\n\n return true;\n}\n\n/** @internal */\nexport interface BatchedTilesetSpec {\n baseUrl: URL;\n props: BatchedTilesetProps;\n models: Map<Id64String, ModelMetadata>;\n}\n\n/** @internal */\nexport namespace BatchedTilesetSpec {\n export function create(baseUrl: URL, json: unknown): BatchedTilesetSpec {\n if (!isBatchedTileset(json))\n throw new Error(\"Invalid tileset JSON\");\n\n const models = new Map<Id64String, ModelMetadata>();\n for (const [modelId, value] of Object.entries(json.extensions.BENTLEY_BatchedTileSet.models)) {\n if (Id64.isValidId64(modelId) && value) {\n models.set(modelId, { extents: Range3d.fromJSON(value.extents), viewFlags: value.viewFlags ? { ...value.viewFlags } : undefined });\n }\n }\n\n return { baseUrl, props: json, models };\n }\n}\n\nfunction rangeFromBoundingVolume(vol: schema.BoundingVolume): Range3d {\n if (vol.box) {\n const center = new Point3d(vol.box[0], vol.box[1], vol.box[2]);\n const ux = new Vector3d(vol.box[3], vol.box[4], vol.box[5]);\n const uy = new Vector3d(vol.box[6], vol.box[7], vol.box[8]);\n const uz = new Vector3d(vol.box[9], vol.box[10], vol.box[11]);\n\n const range = Range3d.createNull();\n for (let i = -1; i <= 1; i += 2)\n for (let j = -1; j <= 1; j += 2)\n for (let k = -1; k <= 1; k += 2)\n range.extendPoint(center.plus3Scaled(ux, i, uy, j, uz, k));\n\n return range;\n } else if (vol.sphere) {\n const center = new Point3d(vol.sphere[0], vol.sphere[1], vol.sphere[2]);\n const radius = vol.sphere[3];\n return Range3d.createXYZXYZ(center.x - radius, center.y - radius, center.z - radius, center.x + radius, center.y + radius, center.z + radius);\n }\n\n // We won't get region bounding volumes in our tiles.\n throw new Error(\"region bounding volume unimplemented\");\n}\n\nfunction transformFromJSON(json: schema.Transform): Transform {\n const translation = new Point3d(json[12], json[13], json[14]);\n const matrix = Matrix3d.createRowValues(\n json[0], json[4], json[8],\n json[1], json[5], json[9],\n json[2], json[6], json[10],\n );\n\n return Transform.createOriginAndMatrix(translation, matrix);\n}\n\n/** @internal */\nexport class BatchedTilesetReader {\n private readonly _iModel: IModelConnection;\n private readonly _spec: BatchedTilesetSpec;\n private readonly _modelGroups: Id64Set[] | undefined;\n\n public constructor(spec: BatchedTilesetSpec, iModel: IModelConnection, modelGroups: Id64Set[] | undefined) {\n this._iModel = iModel;\n this._spec = spec;\n this._modelGroups = modelGroups;\n }\n\n public get baseUrl(): URL { return this._spec.baseUrl; }\n\n public readTileParams(json: schema.Tile, parent?: BatchedTile): BatchedTileParams {\n const content = json.content;\n const geometricError = json.geometricError;\n const range = rangeFromBoundingVolume(json.boundingVolume);\n const isLeaf = undefined === json.children || json.children.length === 0;\n\n let transformToRoot;\n if (undefined !== parent) {\n const localToParent = json.transform ? transformFromJSON(json.transform) : undefined;\n const parentToRoot = parent.transformToRoot;\n if (localToParent) {\n if (parentToRoot)\n localToParent.multiplyTransformTransform(parentToRoot, localToParent);\n\n transformToRoot = localToParent;\n } else {\n transformToRoot = parentToRoot;\n }\n }\n\n // ###TODO evaluate this. The geometric errors in the tiles seem far too small.\n const maximumSizeScale = 8;\n return {\n parent,\n contentId: content?.uri ?? \"\",\n range,\n contentRange: content?.boundingVolume ? rangeFromBoundingVolume(content.boundingVolume) : undefined,\n isLeaf,\n maximumSize: maximumSizeScale * RealityModelTileUtils.maximumSizeFromGeometricTolerance(range, geometricError),\n childrenProps: isLeaf ? undefined : json.children,\n transformToRoot,\n };\n }\n\n public async readTileTreeParams(): Promise<BatchedTileTreeParams> {\n const root = this._spec.props.root;\n const location = root.transform ? transformFromJSON(root.transform) : Transform.createIdentity();\n\n return {\n id: \"spatial-models\",\n modelId: this._iModel.transientIds.getNext(),\n iModel: this._iModel,\n location,\n priority: TileLoadPriority.Primary,\n rootTile: this.readTileParams(root),\n reader: this,\n models: this._spec.models,\n modelGroups: this._modelGroups,\n };\n }\n}\n"]}
1
+ {"version":3,"file":"BatchedTilesetReader.js","sourceRoot":"","sources":["../../src/BatchedTilesetReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Id64, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport {\n Matrix3d, Point3d, Range3d, Range3dProps, Transform, Vector3d,\n} from \"@itwin/core-geometry\";\nimport { Tileset3dSchema as schema, ViewFlagOverrides } from \"@itwin/core-common\";\nimport { IModelConnection, RealityModelTileUtils, TileLoadPriority } from \"@itwin/core-frontend\";\nimport { BatchedTileTreeParams } from \"./BatchedTileTree\";\nimport { BatchedTile, BatchedTileParams } from \"./BatchedTile\";\n\n/** @internal */\nexport interface ModelMetadataProps {\n /** The spatial volume occupied by this model's geometry. */\n extents: Range3dProps;\n /** Overrides to be applied to the view's [ViewFlags]($common) when rendering this model, if any. */\n viewFlags?: ViewFlagOverrides;\n}\n\n/** @internal */\nexport interface ModelMetadata {\n /** The spatial volume occupied by this model's geometry. */\n extents: Range3d;\n /** Overrides to be applied to the view's [ViewFlags]($common) when rendering this model, if any. */\n viewFlags?: ViewFlagOverrides;\n}\n\n/** @internal */\nexport interface BatchedTilesetProps extends schema.Tileset {\n extensions: {\n BENTLEY_BatchedTileSet: { // eslint-disable-line @typescript-eslint/naming-convention\n /** Contains an entry for every model that was processed during publishing of the tileset. */\n models: {\n [modelId: Id64String]: ModelMetadataProps | undefined;\n };\n };\n };\n}\n\nfunction isBatchedTileset(json: unknown): json is BatchedTilesetProps {\n if (typeof json !== \"object\")\n return false;\n\n const props = json as schema.Tileset;\n\n if (!props.root || !props.asset)\n return false;\n\n // The extension is required.\n const models = props.extensions?.BENTLEY_BatchedTileSet?.models;\n if (!models || typeof models !== \"object\")\n return false;\n\n // ###TODO spec requires geometricError to be present on tileset and all tiles; exporter is omitting from tileset.\n if (undefined === props.geometricError)\n props.geometricError = props.root.geometricError;\n\n return true;\n}\n\n/** @internal */\nexport interface BatchedTilesetSpec {\n baseUrl: URL;\n props: BatchedTilesetProps;\n models: Map<Id64String, ModelMetadata>;\n}\n\n/** @internal */\nexport namespace BatchedTilesetSpec {\n export function create(baseUrl: URL, json: unknown): BatchedTilesetSpec {\n if (!isBatchedTileset(json))\n throw new Error(\"Invalid tileset JSON\");\n\n const models = new Map<Id64String, ModelMetadata>();\n for (const [modelId, value] of Object.entries(json.extensions.BENTLEY_BatchedTileSet.models)) {\n if (Id64.isValidId64(modelId) && value) {\n models.set(modelId, { extents: Range3d.fromJSON(value.extents), viewFlags: value.viewFlags ? { ...value.viewFlags } : undefined });\n }\n }\n\n return { baseUrl, props: json, models };\n }\n}\n\nfunction rangeFromBoundingVolume(vol: schema.BoundingVolume): Range3d {\n if (vol.box) {\n const center = new Point3d(vol.box[0], vol.box[1], vol.box[2]);\n const ux = new Vector3d(vol.box[3], vol.box[4], vol.box[5]);\n const uy = new Vector3d(vol.box[6], vol.box[7], vol.box[8]);\n const uz = new Vector3d(vol.box[9], vol.box[10], vol.box[11]);\n\n const range = Range3d.createNull();\n for (let i = -1; i <= 1; i += 2)\n for (let j = -1; j <= 1; j += 2)\n for (let k = -1; k <= 1; k += 2)\n range.extendPoint(center.plus3Scaled(ux, i, uy, j, uz, k));\n\n return range;\n } else if (vol.sphere) {\n const center = new Point3d(vol.sphere[0], vol.sphere[1], vol.sphere[2]);\n const radius = vol.sphere[3];\n return Range3d.createXYZXYZ(center.x - radius, center.y - radius, center.z - radius, center.x + radius, center.y + radius, center.z + radius);\n }\n\n // We won't get region bounding volumes in our tiles.\n throw new Error(\"region bounding volume unimplemented\");\n}\n\nfunction transformFromJSON(json: schema.Transform): Transform {\n const translation = new Point3d(json[12], json[13], json[14]);\n const matrix = Matrix3d.createRowValues(\n json[0], json[4], json[8],\n json[1], json[5], json[9],\n json[2], json[6], json[10],\n );\n\n return Transform.createOriginAndMatrix(translation, matrix);\n}\n\n/** @internal */\nexport class BatchedTilesetReader {\n private readonly _iModel: IModelConnection;\n private readonly _spec: BatchedTilesetSpec;\n private readonly _modelGroups: Id64Set[] | undefined;\n\n public constructor(spec: BatchedTilesetSpec, iModel: IModelConnection, modelGroups: Id64Set[] | undefined) {\n this._iModel = iModel;\n this._spec = spec;\n this._modelGroups = modelGroups;\n }\n\n public get baseUrl(): URL { return this._spec.baseUrl; }\n\n public readTileParams(json: schema.Tile, parent?: BatchedTile): BatchedTileParams {\n const content = json.content;\n const geometricError = json.geometricError;\n const range = rangeFromBoundingVolume(json.boundingVolume);\n const isLeaf = undefined === json.children || json.children.length === 0;\n\n let transformToRoot;\n if (undefined !== parent) {\n const localToParent = json.transform ? transformFromJSON(json.transform) : undefined;\n const parentToRoot = parent.transformToRoot;\n if (localToParent) {\n if (parentToRoot)\n localToParent.multiplyTransformTransform(parentToRoot, localToParent);\n\n transformToRoot = localToParent;\n } else {\n transformToRoot = parentToRoot;\n }\n }\n\n // ###TODO evaluate this. The geometric errors in the tiles seem far too small.\n const maximumSizeScale = 8;\n return {\n parent,\n contentId: content?.uri ?? \"\",\n range,\n contentRange: content?.boundingVolume ? rangeFromBoundingVolume(content.boundingVolume) : undefined,\n isLeaf,\n maximumSize: maximumSizeScale * RealityModelTileUtils.maximumSizeFromGeometricTolerance(range, geometricError),\n childrenProps: isLeaf ? undefined : json.children,\n transformToRoot,\n };\n }\n\n public async readTileTreeParams(): Promise<BatchedTileTreeParams> {\n const root = this._spec.props.root;\n const location = root.transform ? transformFromJSON(root.transform) : Transform.createIdentity();\n\n return {\n id: \"spatial-models\",\n modelId: this._iModel.transientIds.getNext(),\n iModel: this._iModel,\n location,\n priority: TileLoadPriority.Primary,\n rootTile: this.readTileParams(root),\n reader: this,\n models: this._spec.models,\n modelGroups: this._modelGroups,\n };\n }\n}\n"]}
@@ -15,6 +15,9 @@ export class PassThroughCache {
15
15
  }
16
16
  /** @internal */
17
17
  export class IndexedDBCache {
18
+ _db;
19
+ _dbName;
20
+ _expirationTime;
18
21
  constructor(dbName, expirationTime) {
19
22
  this._dbName = dbName;
20
23
  this._expirationTime = expirationTime ?? undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedDBCache.js","sourceRoot":"","sources":["../../src/IndexedDBCache.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { Logger } from \"@itwin/core-bentley\";\nconst loggerCategory = \"IndexedDBCache\";\n\n/** @internal */\nexport interface LocalCache {\n fetch(url: string, callback: (uniqueId: string) => Promise<Response>, callBackUrl?: string): Promise<ArrayBuffer>;\n}\n\n/** @internal */\nexport class PassThroughCache implements LocalCache {\n public async fetch(uniqueId: string, callback: (url: string) => Promise<Response>, callBackUrl?: string): Promise<ArrayBuffer> {\n if (callBackUrl) {\n return (await callback(callBackUrl)).arrayBuffer();\n }\n return (await callback(uniqueId)).arrayBuffer();\n }\n}\n\n/** @internal */\nexport class IndexedDBCache implements LocalCache{\n private _db: any;\n private _dbName: string;\n private _expirationTime?: number;\n\n public constructor(dbName: string, expirationTime?: number) {\n this._dbName = dbName;\n this._expirationTime = expirationTime ?? undefined;\n }\n\n protected async open(){\n\n // need to return a promise so that we can wait for the db to open before using it\n return new Promise(function (this: IndexedDBCache, resolve: any) {\n\n // open the db\n const openDB = window.indexedDB.open(this._dbName, 1);\n\n openDB.onerror = () => {\n Logger.logError(loggerCategory, \"Error opening IndexedDB\");\n };\n\n // this is the success callback for opening the db, it is called after onupgradeneeded\n openDB.onsuccess = async (event) => {\n\n const target: any = event.target;\n if (target) {\n this._db = target.result;\n return resolve(target.result);\n }\n };\n\n // This will get called when a new version is needed - including going from no database to first version\n // So this is how we set up the specifics of the db structure\n openDB.onupgradeneeded = async (event) => {\n const target: any = event.target;\n\n if (target)\n this._db = target.result;\n\n const initialObjectStore = this._db.createObjectStore(\"cache\", { keyPath: \"uniqueId\" });\n initialObjectStore.createIndex(\"content\", \"content\", {unique: false});\n initialObjectStore.createIndex(\"timeOfStorage\", \"timeOfStorage\", {unique: false});\n };\n }.bind(this));\n }\n\n protected async close() {\n await this._db.close();\n }\n\n protected async retrieveContent(uniqueId: string): Promise<ArrayBuffer | undefined> {\n return new Promise(async (resolve) => {\n await this.open();\n const getTransaction = await this._db.transaction(\"cache\", \"readonly\");\n const storedResponse = await getTransaction.objectStore(\"cache\").get(uniqueId);\n\n // this is successful if the db was successfully searched - not only if a match was found\n storedResponse.onsuccess = async () => {\n\n if (storedResponse.result !== undefined) {\n\n // if the content has an expiration time\n if (this._expirationTime) {\n // We want to know when the result was stored, and how long it's been since that point\n const timeSince = Date.now() - storedResponse.result.timeOfStorage;\n\n // If it's been greater than our time limit, delete it and return undefined.\n if (timeSince > this._expirationTime) {\n await this.deleteContent(uniqueId);\n return resolve(undefined);\n }\n }\n const content = storedResponse.result.content;\n await this.close();\n return resolve(content);\n }\n\n await this.close();\n return resolve(undefined);\n };\n\n storedResponse.onerror = async () => {\n Logger.logError(loggerCategory, \"Error retrieving content from IndexedDB\");\n };\n });\n }\n\n protected async deleteContent(uniqueId: string) {\n return new Promise(async (resolve) => {\n await this.open();\n const deleteTransaction = await this._db.transaction(\"cache\", \"readwrite\");\n const requestDelete = await deleteTransaction.objectStore(\"cache\").delete(uniqueId);\n\n requestDelete.onerror = () => {\n Logger.logError(loggerCategory, \"Error deleting content from IndexedDB\");\n };\n\n deleteTransaction.oncomplete = async () => {\n await this.close();\n return resolve(undefined);\n };\n\n deleteTransaction.onerror = async () => {\n Logger.logError(loggerCategory, \"Error deleting content from IndexedDB\");\n };\n });\n }\n\n protected async addContent(uniqueId: string, content: ArrayBuffer) {\n return new Promise(async (resolve) => {\n await this.open();\n const addTransaction = await this._db.transaction(\"cache\", \"readwrite\");\n const objectStore = await addTransaction.objectStore(\"cache\");\n\n const data = {\n uniqueId,\n content,\n timeOfStorage: Date.now(),\n };\n\n const requestAdd = await objectStore.add(data);\n\n requestAdd.onerror = () => {\n Logger.logError(loggerCategory, \"Error adding content to IndexedDB\");\n };\n\n addTransaction.oncomplete = async () => {\n await this.close();\n return resolve(undefined);\n };\n\n addTransaction.onerror = async () => {\n Logger.logError(loggerCategory, \"Error adding content to IndexedDB in add transaction\");\n await this.close();\n return resolve(undefined);\n };\n });\n }\n\n public async fetch(uniqueId: string, callback: (url: string) => Promise<Response>, callBackUrl?: string): Promise<ArrayBuffer> {\n let response = await this.retrieveContent(uniqueId);\n\n // If nothing was found in the db, fetch normally, then add that content to the db\n if (response === undefined) {\n\n // If necessary, use the callback url\n if (callBackUrl)\n response = await (await callback(callBackUrl)).arrayBuffer();\n else\n response = await (await callback(uniqueId)).arrayBuffer();\n\n await this.addContent(uniqueId, response);\n }\n\n return response;\n }\n}\n\n"]}
1
+ {"version":3,"file":"IndexedDBCache.js","sourceRoot":"","sources":["../../src/IndexedDBCache.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { Logger } from \"@itwin/core-bentley\";\nconst loggerCategory = \"IndexedDBCache\";\n\n/** @internal */\nexport interface LocalCache {\n fetch(url: string, callback: (uniqueId: string) => Promise<Response>, callBackUrl?: string): Promise<ArrayBuffer>;\n}\n\n/** @internal */\nexport class PassThroughCache implements LocalCache {\n public async fetch(uniqueId: string, callback: (url: string) => Promise<Response>, callBackUrl?: string): Promise<ArrayBuffer> {\n if (callBackUrl) {\n return (await callback(callBackUrl)).arrayBuffer();\n }\n return (await callback(uniqueId)).arrayBuffer();\n }\n}\n\n/** @internal */\nexport class IndexedDBCache implements LocalCache{\n private _db: any;\n private _dbName: string;\n private _expirationTime?: number;\n\n public constructor(dbName: string, expirationTime?: number) {\n this._dbName = dbName;\n this._expirationTime = expirationTime ?? undefined;\n }\n\n protected async open(){\n\n // need to return a promise so that we can wait for the db to open before using it\n return new Promise(function (this: IndexedDBCache, resolve: any) {\n\n // open the db\n const openDB = window.indexedDB.open(this._dbName, 1);\n\n openDB.onerror = () => {\n Logger.logError(loggerCategory, \"Error opening IndexedDB\");\n };\n\n // this is the success callback for opening the db, it is called after onupgradeneeded\n openDB.onsuccess = async (event) => {\n\n const target: any = event.target;\n if (target) {\n this._db = target.result;\n return resolve(target.result);\n }\n };\n\n // This will get called when a new version is needed - including going from no database to first version\n // So this is how we set up the specifics of the db structure\n openDB.onupgradeneeded = async (event) => {\n const target: any = event.target;\n\n if (target)\n this._db = target.result;\n\n const initialObjectStore = this._db.createObjectStore(\"cache\", { keyPath: \"uniqueId\" });\n initialObjectStore.createIndex(\"content\", \"content\", {unique: false});\n initialObjectStore.createIndex(\"timeOfStorage\", \"timeOfStorage\", {unique: false});\n };\n }.bind(this));\n }\n\n protected async close() {\n await this._db.close();\n }\n\n protected async retrieveContent(uniqueId: string): Promise<ArrayBuffer | undefined> {\n return new Promise(async (resolve) => {\n await this.open();\n const getTransaction = await this._db.transaction(\"cache\", \"readonly\");\n const storedResponse = await getTransaction.objectStore(\"cache\").get(uniqueId);\n\n // this is successful if the db was successfully searched - not only if a match was found\n storedResponse.onsuccess = async () => {\n\n if (storedResponse.result !== undefined) {\n\n // if the content has an expiration time\n if (this._expirationTime) {\n // We want to know when the result was stored, and how long it's been since that point\n const timeSince = Date.now() - storedResponse.result.timeOfStorage;\n\n // If it's been greater than our time limit, delete it and return undefined.\n if (timeSince > this._expirationTime) {\n await this.deleteContent(uniqueId);\n return resolve(undefined);\n }\n }\n const content = storedResponse.result.content;\n await this.close();\n return resolve(content);\n }\n\n await this.close();\n return resolve(undefined);\n };\n\n storedResponse.onerror = async () => {\n Logger.logError(loggerCategory, \"Error retrieving content from IndexedDB\");\n };\n });\n }\n\n protected async deleteContent(uniqueId: string) {\n return new Promise(async (resolve) => {\n await this.open();\n const deleteTransaction = await this._db.transaction(\"cache\", \"readwrite\");\n const requestDelete = await deleteTransaction.objectStore(\"cache\").delete(uniqueId);\n\n requestDelete.onerror = () => {\n Logger.logError(loggerCategory, \"Error deleting content from IndexedDB\");\n };\n\n deleteTransaction.oncomplete = async () => {\n await this.close();\n return resolve(undefined);\n };\n\n deleteTransaction.onerror = async () => {\n Logger.logError(loggerCategory, \"Error deleting content from IndexedDB\");\n };\n });\n }\n\n protected async addContent(uniqueId: string, content: ArrayBuffer) {\n return new Promise(async (resolve) => {\n await this.open();\n const addTransaction = await this._db.transaction(\"cache\", \"readwrite\");\n const objectStore = await addTransaction.objectStore(\"cache\");\n\n const data = {\n uniqueId,\n content,\n timeOfStorage: Date.now(),\n };\n\n const requestAdd = await objectStore.add(data);\n\n requestAdd.onerror = () => {\n Logger.logError(loggerCategory, \"Error adding content to IndexedDB\");\n };\n\n addTransaction.oncomplete = async () => {\n await this.close();\n return resolve(undefined);\n };\n\n addTransaction.onerror = async () => {\n Logger.logError(loggerCategory, \"Error adding content to IndexedDB in add transaction\");\n await this.close();\n return resolve(undefined);\n };\n });\n }\n\n public async fetch(uniqueId: string, callback: (url: string) => Promise<Response>, callBackUrl?: string): Promise<ArrayBuffer> {\n let response = await this.retrieveContent(uniqueId);\n\n // If nothing was found in the db, fetch normally, then add that content to the db\n if (response === undefined) {\n\n // If necessary, use the callback url\n if (callBackUrl)\n response = await (await callback(callBackUrl)).arrayBuffer();\n else\n response = await (await callback(uniqueId)).arrayBuffer();\n\n await this.addContent(uniqueId, response);\n }\n\n return response;\n }\n}\n\n"]}
@@ -14,9 +14,10 @@ const emptyState = { transforms: [], guid: "" };
14
14
  * @internal
15
15
  */
16
16
  export class ModelGroupDisplayTransforms {
17
+ _state = emptyState;
18
+ _modelIds;
17
19
  /** Create a new set of groups for the specified `modelIds`. If `provider` is supplied, the grouping will be applied to those models immediately. */
18
20
  constructor(modelIds, provider) {
19
- this._state = emptyState;
20
21
  this._modelIds = modelIds;
21
22
  if (provider)
22
23
  this.update(provider);
@@ -1 +1 @@
1
- {"version":3,"file":"ModelGroupDisplayTransforms.js","sourceRoot":"","sources":["../../src/ModelGroupDisplayTransforms.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,iBAAiB,EAAuB,MAAM,qBAAqB,CAAC;AAG7E,SAAS,sBAAsB,CAAC,CAAwB,EAAE,CAAwB;IAChF,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACvF,CAAC;AAcD,yFAAyF;AACzF,MAAM,UAAU,GAAqC,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAElF;;;;GAIG;AACH,MAAM,OAAO,2BAA2B;IAItC,oJAAoJ;IACpJ,YAAmB,QAAiB,EAAE,QAAwC;QAJtE,WAAM,GAAqC,UAAU,CAAC;QAK5D,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,QAAQ;YACV,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,0DAA0D;IAC1D,IAAW,IAAI,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtD;;OAEG;IACI,mBAAmB,CAAC,OAAmB;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC;IAChF,CAAC;IAED,wGAAwG;IACxG,sDAAsD;IAC/C,MAAM,CAAC,QAAmD;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC;IAC7C,CAAC;IAEO,YAAY,CAAC,QAAmD;QACtE,IAAI,CAAC,QAAQ;YACX,OAAO,UAAU,CAAC;QAEpB,MAAM,UAAU,GAAiC,EAAE,CAAC;QACpD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAC7D,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;gBACnF,IAAI,CAAC,KAAK;oBACR,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;gBAE9D,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YACzB,OAAO,UAAU,CAAC;QAEpB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/F,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC9B,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { CompressedId64Set, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport { ModelDisplayTransform, ModelDisplayTransformProvider } from \"@itwin/core-frontend\";\n\nfunction equalDisplayTransforms(a: ModelDisplayTransform, b: ModelDisplayTransform): boolean {\n return !!a.premultiply === !!b.premultiply && a.transform.isAlmostEqual(b.transform);\n}\n\n/** A display transform to be applied to a set of models. */\ninterface ModelGroupDisplayTransform {\n modelIds: Id64Set;\n transform: ModelDisplayTransform;\n}\n\n/** A collection of model Ids grouped according to the unique transforms to be applied to each group. */\ninterface ModelGroupDisplayTransformsState {\n readonly transforms: ReadonlyArray<ModelGroupDisplayTransform>;\n readonly guid: string;\n}\n\n/** Optimization for the common case in which no display transforms are to be applied. */\nconst emptyState: ModelGroupDisplayTransformsState = { transforms: [], guid: \"\" };\n\n/** Manages the display transforms to be applied to all of the models in a BatchedTileTree, enabling all models that share an equivalent transform\n * to be drawn together.\n * Call `update` whenever the transforms may have changed (e.g., after the viewport's scene is invalidated).\n * @internal\n */\nexport class ModelGroupDisplayTransforms {\n private _state: ModelGroupDisplayTransformsState = emptyState;\n private readonly _modelIds: Id64Set;\n\n /** Create a new set of groups for the specified `modelIds`. If `provider` is supplied, the grouping will be applied to those models immediately. */\n public constructor(modelIds: Id64Set, provider?: ModelDisplayTransformProvider) {\n this._modelIds = modelIds;\n if (provider)\n this.update(provider);\n }\n\n /** A string uniquely identifying the current grouping. */\n public get guid(): string { return this._state.guid; }\n\n /** Get the display transform for the specified model.\n * @note This method is guaranteed to return the same object for all models in the same group, at least between calls to `update`.\n */\n public getDisplayTransform(modelId: Id64String): ModelDisplayTransform | undefined {\n return this._state.transforms.find((x) => x.modelIds.has(modelId))?.transform;\n }\n\n // Update the display transforms and the model groupings based on the transforms supplied by `provider`.\n // Return `true` if the groupings changed as a result.\n public update(provider: ModelDisplayTransformProvider | undefined): boolean {\n const prevState = this._state;\n this._state = this.computeState(provider);\n return this._state.guid !== prevState.guid;\n }\n\n private computeState(provider: ModelDisplayTransformProvider | undefined): ModelGroupDisplayTransformsState {\n if (!provider)\n return emptyState;\n\n const transforms: ModelGroupDisplayTransform[] = [];\n for (const modelId of this._modelIds) {\n const transform = provider.getModelDisplayTransform(modelId);\n if (transform) {\n let entry = transforms.find((x) => equalDisplayTransforms(transform, x.transform));\n if (!entry)\n transforms.push(entry = { transform, modelIds: new Set() });\n\n entry.modelIds.add(modelId);\n }\n }\n\n if (transforms.length === 0)\n return emptyState;\n\n const guid = transforms.map((x) => CompressedId64Set.compressSet(x.modelIds)).sort().join(\"_\");\n return { transforms, guid };\n }\n}\n"]}
1
+ {"version":3,"file":"ModelGroupDisplayTransforms.js","sourceRoot":"","sources":["../../src/ModelGroupDisplayTransforms.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F,OAAO,EAAE,iBAAiB,EAAuB,MAAM,qBAAqB,CAAC;AAG7E,SAAS,sBAAsB,CAAC,CAAwB,EAAE,CAAwB;IAChF,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACvF,CAAC;AAcD,yFAAyF;AACzF,MAAM,UAAU,GAAqC,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAElF;;;;GAIG;AACH,MAAM,OAAO,2BAA2B;IAC9B,MAAM,GAAqC,UAAU,CAAC;IAC7C,SAAS,CAAU;IAEpC,oJAAoJ;IACpJ,YAAmB,QAAiB,EAAE,QAAwC;QAC5E,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,QAAQ;YACV,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,0DAA0D;IAC1D,IAAW,IAAI,KAAa,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtD;;OAEG;IACI,mBAAmB,CAAC,OAAmB;QAC5C,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC;IAChF,CAAC;IAED,wGAAwG;IACxG,sDAAsD;IAC/C,MAAM,CAAC,QAAmD;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC;IAC7C,CAAC;IAEO,YAAY,CAAC,QAAmD;QACtE,IAAI,CAAC,QAAQ;YACX,OAAO,UAAU,CAAC;QAEpB,MAAM,UAAU,GAAiC,EAAE,CAAC;QACpD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,SAAS,GAAG,QAAQ,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAC7D,IAAI,SAAS,EAAE,CAAC;gBACd,IAAI,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;gBACnF,IAAI,CAAC,KAAK;oBACR,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;gBAE9D,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YACzB,OAAO,UAAU,CAAC;QAEpB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/F,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC9B,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { CompressedId64Set, Id64Set, Id64String } from \"@itwin/core-bentley\";\nimport { ModelDisplayTransform, ModelDisplayTransformProvider } from \"@itwin/core-frontend\";\n\nfunction equalDisplayTransforms(a: ModelDisplayTransform, b: ModelDisplayTransform): boolean {\n return !!a.premultiply === !!b.premultiply && a.transform.isAlmostEqual(b.transform);\n}\n\n/** A display transform to be applied to a set of models. */\ninterface ModelGroupDisplayTransform {\n modelIds: Id64Set;\n transform: ModelDisplayTransform;\n}\n\n/** A collection of model Ids grouped according to the unique transforms to be applied to each group. */\ninterface ModelGroupDisplayTransformsState {\n readonly transforms: ReadonlyArray<ModelGroupDisplayTransform>;\n readonly guid: string;\n}\n\n/** Optimization for the common case in which no display transforms are to be applied. */\nconst emptyState: ModelGroupDisplayTransformsState = { transforms: [], guid: \"\" };\n\n/** Manages the display transforms to be applied to all of the models in a BatchedTileTree, enabling all models that share an equivalent transform\n * to be drawn together.\n * Call `update` whenever the transforms may have changed (e.g., after the viewport's scene is invalidated).\n * @internal\n */\nexport class ModelGroupDisplayTransforms {\n private _state: ModelGroupDisplayTransformsState = emptyState;\n private readonly _modelIds: Id64Set;\n\n /** Create a new set of groups for the specified `modelIds`. If `provider` is supplied, the grouping will be applied to those models immediately. */\n public constructor(modelIds: Id64Set, provider?: ModelDisplayTransformProvider) {\n this._modelIds = modelIds;\n if (provider)\n this.update(provider);\n }\n\n /** A string uniquely identifying the current grouping. */\n public get guid(): string { return this._state.guid; }\n\n /** Get the display transform for the specified model.\n * @note This method is guaranteed to return the same object for all models in the same group, at least between calls to `update`.\n */\n public getDisplayTransform(modelId: Id64String): ModelDisplayTransform | undefined {\n return this._state.transforms.find((x) => x.modelIds.has(modelId))?.transform;\n }\n\n // Update the display transforms and the model groupings based on the transforms supplied by `provider`.\n // Return `true` if the groupings changed as a result.\n public update(provider: ModelDisplayTransformProvider | undefined): boolean {\n const prevState = this._state;\n this._state = this.computeState(provider);\n return this._state.guid !== prevState.guid;\n }\n\n private computeState(provider: ModelDisplayTransformProvider | undefined): ModelGroupDisplayTransformsState {\n if (!provider)\n return emptyState;\n\n const transforms: ModelGroupDisplayTransform[] = [];\n for (const modelId of this._modelIds) {\n const transform = provider.getModelDisplayTransform(modelId);\n if (transform) {\n let entry = transforms.find((x) => equalDisplayTransforms(transform, x.transform));\n if (!entry)\n transforms.push(entry = { transform, modelIds: new Set() });\n\n entry.modelIds.add(modelId);\n }\n }\n\n if (transforms.length === 0)\n return emptyState;\n\n const guid = transforms.map((x) => CompressedId64Set.compressSet(x.modelIds)).sort().join(\"_\");\n return { transforms, guid };\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/frontend-tiles",
3
- "version": "5.0.0-dev.56",
3
+ "version": "5.0.0-dev.57",
4
4
  "description": "Experimental alternative technique for visualizing the contents of iModels",
5
5
  "main": "lib/cjs/frontend-tiles.js",
6
6
  "module": "lib/esm/frontend-tiles.js",
@@ -21,10 +21,10 @@
21
21
  "url": "http://www.bentley.com"
22
22
  },
23
23
  "peerDependencies": {
24
- "@itwin/core-common": "5.0.0-dev.56",
25
- "@itwin/core-bentley": "5.0.0-dev.56",
26
- "@itwin/core-geometry": "5.0.0-dev.56",
27
- "@itwin/core-frontend": "5.0.0-dev.56"
24
+ "@itwin/core-bentley": "5.0.0-dev.57",
25
+ "@itwin/core-common": "5.0.0-dev.57",
26
+ "@itwin/core-geometry": "5.0.0-dev.57",
27
+ "@itwin/core-frontend": "5.0.0-dev.57"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@itwin/eslint-plugin": "5.0.0-dev.1",
@@ -45,12 +45,12 @@
45
45
  "source-map-loader": "^4.0.0",
46
46
  "typescript": "~5.6.2",
47
47
  "webpack": "^5.97.1",
48
- "@itwin/build-tools": "5.0.0-dev.56",
49
- "@itwin/core-bentley": "5.0.0-dev.56",
50
- "@itwin/certa": "5.0.0-dev.56",
51
- "@itwin/core-geometry": "5.0.0-dev.56",
52
- "@itwin/core-frontend": "5.0.0-dev.56",
53
- "@itwin/core-common": "5.0.0-dev.56"
48
+ "@itwin/build-tools": "5.0.0-dev.57",
49
+ "@itwin/certa": "5.0.0-dev.57",
50
+ "@itwin/core-geometry": "5.0.0-dev.57",
51
+ "@itwin/core-frontend": "5.0.0-dev.57",
52
+ "@itwin/core-bentley": "5.0.0-dev.57",
53
+ "@itwin/core-common": "5.0.0-dev.57"
54
54
  },
55
55
  "scripts": {
56
56
  "build": "npm run -s build:cjs && npm run -s build:esm",