@itwin/core-frontend 4.1.0-dev.63 → 4.1.0-dev.66

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 (56) hide show
  1. package/CHANGELOG.md +18 -1
  2. package/lib/cjs/Viewport.js +1 -1
  3. package/lib/cjs/Viewport.js.map +1 -1
  4. package/lib/cjs/tile/GltfReader.d.ts +10 -1
  5. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  6. package/lib/cjs/tile/GltfReader.js +64 -5
  7. package/lib/cjs/tile/GltfReader.js.map +1 -1
  8. package/lib/cjs/tile/RealityTileLoader.d.ts.map +1 -1
  9. package/lib/cjs/tile/RealityTileLoader.js +9 -4
  10. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  11. package/lib/cjs/tile/TileContent.d.ts +6 -0
  12. package/lib/cjs/tile/TileContent.d.ts.map +1 -1
  13. package/lib/cjs/tile/TileContent.js.map +1 -1
  14. package/lib/cjs/tile/internal.d.ts +1 -0
  15. package/lib/cjs/tile/internal.d.ts.map +1 -1
  16. package/lib/cjs/tile/internal.js +1 -0
  17. package/lib/cjs/tile/internal.js.map +1 -1
  18. package/lib/cjs/tile/map/ImageryProviders/ArcGisAttributeDrivenSymbology.d.ts +11 -0
  19. package/lib/cjs/tile/map/ImageryProviders/ArcGisAttributeDrivenSymbology.d.ts.map +1 -0
  20. package/lib/cjs/tile/map/ImageryProviders/ArcGisAttributeDrivenSymbology.js +10 -0
  21. package/lib/cjs/tile/map/ImageryProviders/ArcGisAttributeDrivenSymbology.js.map +1 -0
  22. package/lib/cjs/tile/map/ImageryProviders/ArcGisGeometryRenderer.d.ts +3 -0
  23. package/lib/cjs/tile/map/ImageryProviders/ArcGisGeometryRenderer.d.ts.map +1 -1
  24. package/lib/cjs/tile/map/ImageryProviders/ArcGisGeometryRenderer.js.map +1 -1
  25. package/lib/cjs/tile/map/ImageryProviders/ArcGisGraphicsRenderer.d.ts +2 -1
  26. package/lib/cjs/tile/map/ImageryProviders/ArcGisGraphicsRenderer.d.ts.map +1 -1
  27. package/lib/cjs/tile/map/ImageryProviders/ArcGisGraphicsRenderer.js +1 -0
  28. package/lib/cjs/tile/map/ImageryProviders/ArcGisGraphicsRenderer.js.map +1 -1
  29. package/lib/esm/Viewport.js +1 -1
  30. package/lib/esm/Viewport.js.map +1 -1
  31. package/lib/esm/tile/GltfReader.d.ts +10 -1
  32. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  33. package/lib/esm/tile/GltfReader.js +65 -6
  34. package/lib/esm/tile/GltfReader.js.map +1 -1
  35. package/lib/esm/tile/RealityTileLoader.d.ts.map +1 -1
  36. package/lib/esm/tile/RealityTileLoader.js +9 -4
  37. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  38. package/lib/esm/tile/TileContent.d.ts +6 -0
  39. package/lib/esm/tile/TileContent.d.ts.map +1 -1
  40. package/lib/esm/tile/TileContent.js.map +1 -1
  41. package/lib/esm/tile/internal.d.ts +1 -0
  42. package/lib/esm/tile/internal.d.ts.map +1 -1
  43. package/lib/esm/tile/internal.js +1 -0
  44. package/lib/esm/tile/internal.js.map +1 -1
  45. package/lib/esm/tile/map/ImageryProviders/ArcGisAttributeDrivenSymbology.d.ts +11 -0
  46. package/lib/esm/tile/map/ImageryProviders/ArcGisAttributeDrivenSymbology.d.ts.map +1 -0
  47. package/lib/esm/tile/map/ImageryProviders/ArcGisAttributeDrivenSymbology.js +9 -0
  48. package/lib/esm/tile/map/ImageryProviders/ArcGisAttributeDrivenSymbology.js.map +1 -0
  49. package/lib/esm/tile/map/ImageryProviders/ArcGisGeometryRenderer.d.ts +3 -0
  50. package/lib/esm/tile/map/ImageryProviders/ArcGisGeometryRenderer.d.ts.map +1 -1
  51. package/lib/esm/tile/map/ImageryProviders/ArcGisGeometryRenderer.js.map +1 -1
  52. package/lib/esm/tile/map/ImageryProviders/ArcGisGraphicsRenderer.d.ts +2 -1
  53. package/lib/esm/tile/map/ImageryProviders/ArcGisGraphicsRenderer.d.ts.map +1 -1
  54. package/lib/esm/tile/map/ImageryProviders/ArcGisGraphicsRenderer.js +1 -0
  55. package/lib/esm/tile/map/ImageryProviders/ArcGisGraphicsRenderer.js.map +1 -1
  56. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"RealityTileLoader.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityTileLoader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAoB,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAmC,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGnG,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAkB,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EACO,gBAAgB,EAC5B,WAAW,EAAE,kBAAkB,EAAE,IAAI,EAAe,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAC9H,MAAM,YAAY,CAAC;AAOpB;;GAEG;AACH,8BAAsB,iBAAiB;IAKlB,OAAO,CAAC,gBAAgB,CAAC;IAJ5C,OAAO,CAAC,oBAAoB,CAAS;IACrC,SAAgB,yBAAyB,EAAE,MAAM,CAAC;IAClD,SAAgB,wBAAwB,EAAE,MAAM,CAAC;gBAEtB,gBAAgB,CAAC,qBAAS;IAK9C,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM;aAKzF,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;aAC5D,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,kBAAkB;aACjD,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IACxG,IAAW,wBAAwB,IAAI,OAAO,CAAkB;IAChE,aAAoB,QAAQ,IAAI,MAAM,CAAC;IACvC,aAAoB,QAAQ,IAAI,MAAM,CAAC;IACvC,aAAoB,QAAQ,IAAI,gBAAgB,CAAC;IACjD,SAAS,KAAK,UAAU,IAAI,SAAS,CAA8B;IACnE,SAAS,KAAK,UAAU,IAAI,OAAO,CAAiB;IAC7C,aAAa,IAAI,gBAAgB,GAAG,SAAS;IACpD,IAAW,kBAAkB,IAAI,OAAO,CAAkB;IAC1D,IAAW,mBAAmB,IAAI,OAAO,CAAsC;IAC/E,IAAW,2BAA2B,IAAI,OAAO,CAAiB;IAC3D,aAAa,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IAC1C,IAAW,uBAAuB,IAAI,MAAM,GAAG,SAAS,CAAsB;IAEvE,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,EAAE;IAG7D,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQvJ,OAAO,CAAC,UAAU;IAQL,sBAAsB,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAarH,sBAAsB;IAkGpC,IAAW,iBAAiB,IAAI,iBAAiB,CAAqC;WAExE,2BAA2B,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,GAAG,MAAM;CA4ClH"}
1
+ {"version":3,"file":"RealityTileLoader.d.ts","sourceRoot":"","sources":["../../../src/tile/RealityTileLoader.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAoB,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAmC,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGnG,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAkB,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EACO,gBAAgB,EAC5B,WAAW,EAAE,kBAAkB,EAAE,IAAI,EAAe,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,kBAAkB,EAAE,QAAQ,EAC9H,MAAM,YAAY,CAAC;AAOpB;;GAEG;AACH,8BAAsB,iBAAiB;IAKlB,OAAO,CAAC,gBAAgB,CAAC;IAJ5C,OAAO,CAAC,oBAAoB,CAAS;IACrC,SAAgB,yBAAyB,EAAE,MAAM,CAAC;IAClD,SAAgB,wBAAwB,EAAE,MAAM,CAAC;gBAEtB,gBAAgB,CAAC,qBAAS;IAK9C,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM;aAKzF,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;aAC5D,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,kBAAkB;aACjD,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC;IACxG,IAAW,wBAAwB,IAAI,OAAO,CAAkB;IAChE,aAAoB,QAAQ,IAAI,MAAM,CAAC;IACvC,aAAoB,QAAQ,IAAI,MAAM,CAAC;IACvC,aAAoB,QAAQ,IAAI,gBAAgB,CAAC;IACjD,SAAS,KAAK,UAAU,IAAI,SAAS,CAA8B;IACnE,SAAS,KAAK,UAAU,IAAI,OAAO,CAAiB;IAC7C,aAAa,IAAI,gBAAgB,GAAG,SAAS;IACpD,IAAW,kBAAkB,IAAI,OAAO,CAAkB;IAC1D,IAAW,mBAAmB,IAAI,OAAO,CAAsC;IAC/E,IAAW,2BAA2B,IAAI,OAAO,CAAiB;IAC3D,aAAa,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IAC1C,IAAW,uBAAuB,IAAI,MAAM,GAAG,SAAS,CAAsB;IAEvE,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,EAAE;IAG7D,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAQvJ,OAAO,CAAC,UAAU;IAQL,sBAAsB,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAarH,sBAAsB;IAwGpC,IAAW,iBAAiB,IAAI,iBAAiB,CAAqC;WAExE,2BAA2B,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,SAAS,GAAG,MAAM;CA4ClH"}
@@ -106,6 +106,12 @@ class RealityTileLoader {
106
106
  return { graphic };
107
107
  case core_common_1.TileFormat.B3dm:
108
108
  reader = internal_1.B3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, tile.center, tile.transformToRoot, isCanceled, this.getBatchIdMap(), this.wantDeduplicatedVertices);
109
+ if (reader) {
110
+ // glTF spec defaults wrap mode to "repeat" but many reality tiles omit the wrap mode and should not repeat.
111
+ // The render system also currently only produces mip-maps for repeating textures, and we don't want mip-maps for reality tile textures.
112
+ (0, core_bentley_1.assert)(reader instanceof internal_1.GltfReader);
113
+ reader.defaultWrapMode = GltfSchema_1.GltfWrapMode.ClampToEdge;
114
+ }
109
115
  break;
110
116
  case core_common_1.TileFormat.I3dm:
111
117
  reader = internal_1.I3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, isCanceled, undefined, this.wantDeduplicatedVertices);
@@ -119,6 +125,7 @@ class RealityTileLoader {
119
125
  contentRange: tile.contentRange,
120
126
  transform: tile.transformToRoot,
121
127
  hasChildren: !tile.isLeaf,
128
+ pickableOptions: { id: modelId },
122
129
  });
123
130
  }
124
131
  break;
@@ -144,12 +151,10 @@ class RealityTileLoader {
144
151
  }
145
152
  let content = {};
146
153
  if (undefined !== reader) {
147
- // glTF spec defaults wrap mode to "repeat" but many reality tiles omit the wrap mode and should not repeat.
148
- // The render system also currently only produces mip-maps for repeating textures, and we don't want mip-maps for reality tile textures.
149
- if (reader instanceof internal_1.GltfReader)
150
- reader.defaultWrapMode = GltfSchema_1.GltfWrapMode.ClampToEdge;
151
154
  try {
152
155
  content = await reader.read();
156
+ if (content.containsPointCloud)
157
+ this._containsPointClouds = true;
153
158
  }
154
159
  catch (_err) {
155
160
  // Failure to load should prevent us from trying to load children
@@ -1 +1 @@
1
- {"version":3,"file":"RealityTileLoader.js","sourceRoot":"","sources":["../../../src/tile/RealityTileLoader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, ByteStream } from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, Transform } from \"@itwin/core-geometry\";\r\nimport { BatchType, CompositeTileHeader, TileFormat, ViewFlagOverrides } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { GraphicBranch } from \"../render/GraphicBranch\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport { ScreenViewport, Viewport } from \"../Viewport\";\r\nimport { GltfWrapMode } from \"../common/gltf/GltfSchema\";\r\nimport {\r\n B3dmReader, BatchedTileIdMap, createDefaultViewFlagOverrides, GltfGraphicsReader, GltfReader, GltfReaderProps, I3dmReader, ImdlReader, readPointCloudTileContent,\r\n RealityTile, RealityTileContent, Tile, TileContent, TileDrawArgs, TileLoadPriority, TileRequest, TileRequestChannel, TileUser,\r\n} from \"./internal\";\r\n\r\nconst defaultViewFlagOverrides = createDefaultViewFlagOverrides({});\r\n\r\nconst scratchTileCenterWorld = new Point3d();\r\nconst scratchTileCenterView = new Point3d();\r\n\r\n/** Serves as a \"handler\" for a specific type of [[TileTree]]. Its primary responsibilities involve loading tile content.\r\n * @internal\r\n */\r\nexport abstract class RealityTileLoader {\r\n private _containsPointClouds = false;\r\n public readonly preloadRealityParentDepth: number;\r\n public readonly preloadRealityParentSkip: number;\r\n\r\n public constructor(private _produceGeometry?: boolean) {\r\n this.preloadRealityParentDepth = IModelApp.tileAdmin.contextPreloadParentDepth;\r\n this.preloadRealityParentSkip = IModelApp.tileAdmin.contextPreloadParentSkip;\r\n }\r\n\r\n public computeTilePriority(tile: Tile, viewports: Iterable<Viewport>, _users: Iterable<TileUser>): number {\r\n // ###TODO: Handle case where tile tree reference(s) have a transform different from tree's (background map with ground bias).\r\n return RealityTileLoader.computeTileLocationPriority(tile, viewports, tile.tree.iModelTransform);\r\n }\r\n\r\n public abstract loadChildren(tile: RealityTile): Promise<Tile[] | undefined>;\r\n public abstract getRequestChannel(tile: Tile): TileRequestChannel;\r\n public abstract requestTileContent(tile: Tile, isCanceled: () => boolean): Promise<TileRequest.Response>;\r\n public get wantDeduplicatedVertices(): boolean { return false; }\r\n public abstract get maxDepth(): number;\r\n public abstract get minDepth(): number;\r\n public abstract get priority(): TileLoadPriority;\r\n protected get _batchType(): BatchType { return BatchType.Primary; }\r\n protected get _loadEdges(): boolean { return true; }\r\n public getBatchIdMap(): BatchedTileIdMap | undefined { return undefined; }\r\n public get isContentUnbounded(): boolean { return false; }\r\n public get containsPointClouds(): boolean { return this._containsPointClouds; }\r\n public get parentsAndChildrenExclusive(): boolean { return true; }\r\n public forceTileLoad(_tile: Tile): boolean { return false; }\r\n public get maximumScreenSpaceError(): number | undefined { return undefined; }\r\n\r\n public processSelectedTiles(selected: Tile[], _args: TileDrawArgs): Tile[] { return selected; }\r\n\r\n // NB: The isCanceled arg is chiefly for tests...in usual case it just returns false if the tile is no longer in 'loading' state.\r\n public async loadTileContent(tile: Tile, data: TileRequest.ResponseData, system: RenderSystem, isCanceled?: () => boolean): Promise<RealityTileContent> {\r\n assert(data instanceof Uint8Array);\r\n const blob = data;\r\n const streamBuffer = ByteStream.fromUint8Array(blob);\r\n const realityTile = tile as RealityTile;\r\n return this._produceGeometry ? this.loadGeometryFromStream(realityTile, streamBuffer, system) : this.loadGraphicsFromStream(realityTile, streamBuffer, system, isCanceled);\r\n }\r\n\r\n private _getFormat(streamBuffer: ByteStream) {\r\n const position = streamBuffer.curPos;\r\n const format = streamBuffer.readUint32();\r\n streamBuffer.curPos = position;\r\n return format;\r\n\r\n }\r\n\r\n public async loadGeometryFromStream(tile: RealityTile, streamBuffer: ByteStream, system: RenderSystem): Promise<RealityTileContent> {\r\n const format = this._getFormat(streamBuffer);\r\n if (format !== TileFormat.B3dm)\r\n return {};\r\n\r\n const { is3d, yAxisUp, iModel, modelId } = tile.realityRoot;\r\n const reader = B3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, tile.center, tile.transformToRoot, undefined, this.getBatchIdMap());\r\n if (reader)\r\n reader.defaultWrapMode = GltfWrapMode.ClampToEdge;\r\n\r\n return { geometry: reader?.readGltfAndCreateGeometry(tile.tree.iModelTransform) };\r\n }\r\n\r\n private async loadGraphicsFromStream(tile: RealityTile, streamBuffer: ByteStream, system: RenderSystem, isCanceled?: () => boolean): Promise<TileContent> {\r\n const format = this._getFormat(streamBuffer);\r\n if (undefined === isCanceled)\r\n isCanceled = () => !tile.isLoading;\r\n\r\n const { is3d, yAxisUp, iModel, modelId } = tile.realityRoot;\r\n let reader: GltfReader | ImdlReader | undefined;\r\n switch (format) {\r\n case TileFormat.IModel:\r\n reader = ImdlReader.create({\r\n stream: streamBuffer,\r\n iModel,\r\n modelId,\r\n is3d,\r\n system,\r\n isCanceled,\r\n });\r\n break;\r\n case TileFormat.Pnts:\r\n this._containsPointClouds = true;\r\n const res = await readPointCloudTileContent(streamBuffer, iModel, modelId, is3d, tile, system);\r\n let graphic = res.graphic;\r\n const rtcCenter = res.rtcCenter;\r\n if (graphic && (rtcCenter || tile.transformToRoot && !tile.transformToRoot.isIdentity)) {\r\n const transformBranch = new GraphicBranch(true);\r\n transformBranch.add(graphic);\r\n let xform: Transform;\r\n if (!tile.transformToRoot && rtcCenter)\r\n xform = Transform.createTranslation(rtcCenter);\r\n else {\r\n if (rtcCenter)\r\n xform = Transform.createOriginAndMatrix(rtcCenter.plus(tile.transformToRoot!.origin), tile.transformToRoot!.matrix);\r\n else\r\n xform = tile.transformToRoot!;\r\n }\r\n graphic = system.createBranch(transformBranch, xform);\r\n }\r\n\r\n return { graphic };\r\n case TileFormat.B3dm:\r\n reader = B3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, tile.center, tile.transformToRoot, isCanceled, this.getBatchIdMap(), this.wantDeduplicatedVertices);\r\n break;\r\n case TileFormat.I3dm:\r\n reader = I3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, isCanceled, undefined, this.wantDeduplicatedVertices);\r\n break;\r\n case TileFormat.Gltf:\r\n const props = GltfReaderProps.create(streamBuffer.nextBytes(streamBuffer.arrayBuffer.byteLength), yAxisUp);\r\n if (props) {\r\n reader = new GltfGraphicsReader(props, {\r\n iModel,\r\n gltf: props.glTF,\r\n contentRange: tile.contentRange,\r\n transform: tile.transformToRoot,\r\n hasChildren: !tile.isLeaf,\r\n });\r\n }\r\n\r\n break;\r\n case TileFormat.Cmpt:\r\n const header = new CompositeTileHeader(streamBuffer);\r\n if (!header.isValid)\r\n return {};\r\n\r\n const branch = new GraphicBranch(true);\r\n for (let i = 0; i < header.tileCount; i++) {\r\n const tilePosition = streamBuffer.curPos;\r\n streamBuffer.advance(8); // Skip magic and version.\r\n const tileBytes = streamBuffer.readUint32();\r\n streamBuffer.curPos = tilePosition;\r\n const result = await this.loadGraphicsFromStream(tile, streamBuffer, system, isCanceled);\r\n if (result.graphic)\r\n branch.add(result.graphic);\r\n streamBuffer.curPos = tilePosition + tileBytes;\r\n }\r\n return { graphic: branch.isEmpty ? undefined : system.createBranch(branch, Transform.createIdentity()), isLeaf: tile.isLeaf };\r\n\r\n default:\r\n assert(false, `unknown tile format ${format}`);\r\n break;\r\n }\r\n\r\n let content: TileContent = {};\r\n if (undefined !== reader) {\r\n // glTF spec defaults wrap mode to \"repeat\" but many reality tiles omit the wrap mode and should not repeat.\r\n // The render system also currently only produces mip-maps for repeating textures, and we don't want mip-maps for reality tile textures.\r\n if (reader instanceof GltfReader)\r\n reader.defaultWrapMode = GltfWrapMode.ClampToEdge;\r\n try {\r\n content = await reader.read();\r\n } catch (_err) {\r\n // Failure to load should prevent us from trying to load children\r\n content.isLeaf = true;\r\n }\r\n }\r\n\r\n return content;\r\n }\r\n\r\n public get viewFlagOverrides(): ViewFlagOverrides { return defaultViewFlagOverrides; }\r\n\r\n public static computeTileLocationPriority(tile: Tile, viewports: Iterable<Viewport>, location: Transform): number {\r\n // Compute a priority value for tiles that are:\r\n // * Closer to the eye;\r\n // * Closer to the center of attention (center of the screen or zoom target).\r\n // This way, we can load in priority tiles that are more likely to be important.\r\n let center: Point3d | undefined;\r\n let minDistance = 1.0;\r\n\r\n const currentInputState = IModelApp.toolAdmin.currentInputState;\r\n const now = Date.now();\r\n const wheelEventRelevanceTimeout = 1000; // Wheel events older than this value will not be considered\r\n\r\n for (const viewport of viewports) {\r\n center = center ?? location.multiplyPoint3d(tile.center, scratchTileCenterWorld);\r\n const npc = viewport.worldToNpc(center, scratchTileCenterView);\r\n\r\n let focusPoint = new Point2d(0.5, 0.5);\r\n\r\n if (currentInputState.viewport === viewport && viewport instanceof ScreenViewport) {\r\n // Try to get a better target point from the last zoom target\r\n const { lastWheelEvent } = currentInputState;\r\n\r\n if (lastWheelEvent !== undefined && now - lastWheelEvent.time < wheelEventRelevanceTimeout) {\r\n const focusPointCandidate = Point2d.fromJSON(viewport.worldToNpc(lastWheelEvent.point));\r\n\r\n if (focusPointCandidate.x > 0 && focusPointCandidate.x < 1 && focusPointCandidate.y > 0 && focusPointCandidate.y < 1)\r\n focusPoint = focusPointCandidate;\r\n }\r\n }\r\n\r\n // NB: In NPC coords, 0 = far plane, 1 = near plane.\r\n const distanceToEye = 1.0 - npc.z;\r\n const distanceToCenter = Math.min(npc.distanceXY(focusPoint) / 0.707, 1.0); // Math.sqrt(0.5) = 0.707\r\n\r\n // Distance is a mix of the two previously computed values, still in range [0; 1]\r\n // We use this factor to determine how much the distance to the center of attention is important compared to distance to the eye\r\n const distanceToCenterWeight = 0.3;\r\n const distance = distanceToEye * (1.0 - distanceToCenterWeight) + distanceToCenter * distanceToCenterWeight;\r\n\r\n minDistance = Math.min(distance, minDistance);\r\n }\r\n\r\n return minDistance;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"RealityTileLoader.js","sourceRoot":"","sources":["../../../src/tile/RealityTileLoader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, ByteStream } from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, Transform } from \"@itwin/core-geometry\";\r\nimport { BatchType, CompositeTileHeader, TileFormat, ViewFlagOverrides } from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { GraphicBranch } from \"../render/GraphicBranch\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport { ScreenViewport, Viewport } from \"../Viewport\";\r\nimport { GltfWrapMode } from \"../common/gltf/GltfSchema\";\r\nimport {\r\n B3dmReader, BatchedTileIdMap, createDefaultViewFlagOverrides, GltfGraphicsReader, GltfReader, GltfReaderProps, I3dmReader, ImdlReader, readPointCloudTileContent,\r\n RealityTile, RealityTileContent, Tile, TileContent, TileDrawArgs, TileLoadPriority, TileRequest, TileRequestChannel, TileUser,\r\n} from \"./internal\";\r\n\r\nconst defaultViewFlagOverrides = createDefaultViewFlagOverrides({});\r\n\r\nconst scratchTileCenterWorld = new Point3d();\r\nconst scratchTileCenterView = new Point3d();\r\n\r\n/** Serves as a \"handler\" for a specific type of [[TileTree]]. Its primary responsibilities involve loading tile content.\r\n * @internal\r\n */\r\nexport abstract class RealityTileLoader {\r\n private _containsPointClouds = false;\r\n public readonly preloadRealityParentDepth: number;\r\n public readonly preloadRealityParentSkip: number;\r\n\r\n public constructor(private _produceGeometry?: boolean) {\r\n this.preloadRealityParentDepth = IModelApp.tileAdmin.contextPreloadParentDepth;\r\n this.preloadRealityParentSkip = IModelApp.tileAdmin.contextPreloadParentSkip;\r\n }\r\n\r\n public computeTilePriority(tile: Tile, viewports: Iterable<Viewport>, _users: Iterable<TileUser>): number {\r\n // ###TODO: Handle case where tile tree reference(s) have a transform different from tree's (background map with ground bias).\r\n return RealityTileLoader.computeTileLocationPriority(tile, viewports, tile.tree.iModelTransform);\r\n }\r\n\r\n public abstract loadChildren(tile: RealityTile): Promise<Tile[] | undefined>;\r\n public abstract getRequestChannel(tile: Tile): TileRequestChannel;\r\n public abstract requestTileContent(tile: Tile, isCanceled: () => boolean): Promise<TileRequest.Response>;\r\n public get wantDeduplicatedVertices(): boolean { return false; }\r\n public abstract get maxDepth(): number;\r\n public abstract get minDepth(): number;\r\n public abstract get priority(): TileLoadPriority;\r\n protected get _batchType(): BatchType { return BatchType.Primary; }\r\n protected get _loadEdges(): boolean { return true; }\r\n public getBatchIdMap(): BatchedTileIdMap | undefined { return undefined; }\r\n public get isContentUnbounded(): boolean { return false; }\r\n public get containsPointClouds(): boolean { return this._containsPointClouds; }\r\n public get parentsAndChildrenExclusive(): boolean { return true; }\r\n public forceTileLoad(_tile: Tile): boolean { return false; }\r\n public get maximumScreenSpaceError(): number | undefined { return undefined; }\r\n\r\n public processSelectedTiles(selected: Tile[], _args: TileDrawArgs): Tile[] { return selected; }\r\n\r\n // NB: The isCanceled arg is chiefly for tests...in usual case it just returns false if the tile is no longer in 'loading' state.\r\n public async loadTileContent(tile: Tile, data: TileRequest.ResponseData, system: RenderSystem, isCanceled?: () => boolean): Promise<RealityTileContent> {\r\n assert(data instanceof Uint8Array);\r\n const blob = data;\r\n const streamBuffer = ByteStream.fromUint8Array(blob);\r\n const realityTile = tile as RealityTile;\r\n return this._produceGeometry ? this.loadGeometryFromStream(realityTile, streamBuffer, system) : this.loadGraphicsFromStream(realityTile, streamBuffer, system, isCanceled);\r\n }\r\n\r\n private _getFormat(streamBuffer: ByteStream) {\r\n const position = streamBuffer.curPos;\r\n const format = streamBuffer.readUint32();\r\n streamBuffer.curPos = position;\r\n return format;\r\n\r\n }\r\n\r\n public async loadGeometryFromStream(tile: RealityTile, streamBuffer: ByteStream, system: RenderSystem): Promise<RealityTileContent> {\r\n const format = this._getFormat(streamBuffer);\r\n if (format !== TileFormat.B3dm)\r\n return {};\r\n\r\n const { is3d, yAxisUp, iModel, modelId } = tile.realityRoot;\r\n const reader = B3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, tile.center, tile.transformToRoot, undefined, this.getBatchIdMap());\r\n if (reader)\r\n reader.defaultWrapMode = GltfWrapMode.ClampToEdge;\r\n\r\n return { geometry: reader?.readGltfAndCreateGeometry(tile.tree.iModelTransform) };\r\n }\r\n\r\n private async loadGraphicsFromStream(tile: RealityTile, streamBuffer: ByteStream, system: RenderSystem, isCanceled?: () => boolean): Promise<TileContent> {\r\n const format = this._getFormat(streamBuffer);\r\n if (undefined === isCanceled)\r\n isCanceled = () => !tile.isLoading;\r\n\r\n const { is3d, yAxisUp, iModel, modelId } = tile.realityRoot;\r\n let reader: GltfReader | ImdlReader | undefined;\r\n switch (format) {\r\n case TileFormat.IModel:\r\n reader = ImdlReader.create({\r\n stream: streamBuffer,\r\n iModel,\r\n modelId,\r\n is3d,\r\n system,\r\n isCanceled,\r\n });\r\n break;\r\n case TileFormat.Pnts:\r\n this._containsPointClouds = true;\r\n const res = await readPointCloudTileContent(streamBuffer, iModel, modelId, is3d, tile, system);\r\n let graphic = res.graphic;\r\n const rtcCenter = res.rtcCenter;\r\n if (graphic && (rtcCenter || tile.transformToRoot && !tile.transformToRoot.isIdentity)) {\r\n const transformBranch = new GraphicBranch(true);\r\n transformBranch.add(graphic);\r\n let xform: Transform;\r\n if (!tile.transformToRoot && rtcCenter)\r\n xform = Transform.createTranslation(rtcCenter);\r\n else {\r\n if (rtcCenter)\r\n xform = Transform.createOriginAndMatrix(rtcCenter.plus(tile.transformToRoot!.origin), tile.transformToRoot!.matrix);\r\n else\r\n xform = tile.transformToRoot!;\r\n }\r\n graphic = system.createBranch(transformBranch, xform);\r\n }\r\n\r\n return { graphic };\r\n case TileFormat.B3dm:\r\n reader = B3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, tile.center, tile.transformToRoot, isCanceled, this.getBatchIdMap(), this.wantDeduplicatedVertices);\r\n if (reader) {\r\n // glTF spec defaults wrap mode to \"repeat\" but many reality tiles omit the wrap mode and should not repeat.\r\n // The render system also currently only produces mip-maps for repeating textures, and we don't want mip-maps for reality tile textures.\r\n assert(reader instanceof GltfReader);\r\n reader.defaultWrapMode = GltfWrapMode.ClampToEdge;\r\n }\r\n\r\n break;\r\n case TileFormat.I3dm:\r\n reader = I3dmReader.create(streamBuffer, iModel, modelId, is3d, tile.contentRange, system, yAxisUp, tile.isLeaf, isCanceled, undefined, this.wantDeduplicatedVertices);\r\n break;\r\n case TileFormat.Gltf:\r\n const props = GltfReaderProps.create(streamBuffer.nextBytes(streamBuffer.arrayBuffer.byteLength), yAxisUp);\r\n if (props) {\r\n reader = new GltfGraphicsReader(props, {\r\n iModel,\r\n gltf: props.glTF,\r\n contentRange: tile.contentRange,\r\n transform: tile.transformToRoot,\r\n hasChildren: !tile.isLeaf,\r\n pickableOptions: { id: modelId },\r\n });\r\n }\r\n\r\n break;\r\n case TileFormat.Cmpt:\r\n const header = new CompositeTileHeader(streamBuffer);\r\n if (!header.isValid)\r\n return {};\r\n\r\n const branch = new GraphicBranch(true);\r\n for (let i = 0; i < header.tileCount; i++) {\r\n const tilePosition = streamBuffer.curPos;\r\n streamBuffer.advance(8); // Skip magic and version.\r\n const tileBytes = streamBuffer.readUint32();\r\n streamBuffer.curPos = tilePosition;\r\n const result = await this.loadGraphicsFromStream(tile, streamBuffer, system, isCanceled);\r\n if (result.graphic)\r\n branch.add(result.graphic);\r\n streamBuffer.curPos = tilePosition + tileBytes;\r\n }\r\n return { graphic: branch.isEmpty ? undefined : system.createBranch(branch, Transform.createIdentity()), isLeaf: tile.isLeaf };\r\n\r\n default:\r\n assert(false, `unknown tile format ${format}`);\r\n break;\r\n }\r\n\r\n let content: TileContent = {};\r\n if (undefined !== reader) {\r\n try {\r\n content = await reader.read();\r\n if (content.containsPointCloud)\r\n this._containsPointClouds = true;\r\n } catch (_err) {\r\n // Failure to load should prevent us from trying to load children\r\n content.isLeaf = true;\r\n }\r\n }\r\n\r\n return content;\r\n }\r\n\r\n public get viewFlagOverrides(): ViewFlagOverrides { return defaultViewFlagOverrides; }\r\n\r\n public static computeTileLocationPriority(tile: Tile, viewports: Iterable<Viewport>, location: Transform): number {\r\n // Compute a priority value for tiles that are:\r\n // * Closer to the eye;\r\n // * Closer to the center of attention (center of the screen or zoom target).\r\n // This way, we can load in priority tiles that are more likely to be important.\r\n let center: Point3d | undefined;\r\n let minDistance = 1.0;\r\n\r\n const currentInputState = IModelApp.toolAdmin.currentInputState;\r\n const now = Date.now();\r\n const wheelEventRelevanceTimeout = 1000; // Wheel events older than this value will not be considered\r\n\r\n for (const viewport of viewports) {\r\n center = center ?? location.multiplyPoint3d(tile.center, scratchTileCenterWorld);\r\n const npc = viewport.worldToNpc(center, scratchTileCenterView);\r\n\r\n let focusPoint = new Point2d(0.5, 0.5);\r\n\r\n if (currentInputState.viewport === viewport && viewport instanceof ScreenViewport) {\r\n // Try to get a better target point from the last zoom target\r\n const { lastWheelEvent } = currentInputState;\r\n\r\n if (lastWheelEvent !== undefined && now - lastWheelEvent.time < wheelEventRelevanceTimeout) {\r\n const focusPointCandidate = Point2d.fromJSON(viewport.worldToNpc(lastWheelEvent.point));\r\n\r\n if (focusPointCandidate.x > 0 && focusPointCandidate.x < 1 && focusPointCandidate.y > 0 && focusPointCandidate.y < 1)\r\n focusPoint = focusPointCandidate;\r\n }\r\n }\r\n\r\n // NB: In NPC coords, 0 = far plane, 1 = near plane.\r\n const distanceToEye = 1.0 - npc.z;\r\n const distanceToCenter = Math.min(npc.distanceXY(focusPoint) / 0.707, 1.0); // Math.sqrt(0.5) = 0.707\r\n\r\n // Distance is a mix of the two previously computed values, still in range [0; 1]\r\n // We use this factor to determine how much the distance to the center of attention is important compared to distance to the eye\r\n const distanceToCenterWeight = 0.3;\r\n const distance = distanceToEye * (1.0 - distanceToCenterWeight) + distanceToCenter * distanceToCenterWeight;\r\n\r\n minDistance = Math.min(distance, minDistance);\r\n }\r\n\r\n return minDistance;\r\n }\r\n}\r\n"]}
@@ -16,5 +16,11 @@ export interface TileContent {
16
16
  contentRange?: ElementAlignedBox3d;
17
17
  /** True if this tile requires no subdivision or refinement - i.e., has no child tiles. */
18
18
  isLeaf?: boolean;
19
+ /** Whether the content includes one or more point clouds.
20
+ * Generally, if this is true, it contains exactly one point cloud and no other geometry.
21
+ * We need to know this for the classification shaders.
22
+ * @internal
23
+ */
24
+ containsPointCloud?: boolean;
19
25
  }
20
26
  //# sourceMappingURL=TileContent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TileContent.d.ts","sourceRoot":"","sources":["../../../src/tile/TileContent.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,0FAA0F;IAC1F,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB"}
1
+ {"version":3,"file":"TileContent.d.ts","sourceRoot":"","sources":["../../../src/tile/TileContent.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,uDAAuD;IACvD,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,0FAA0F;IAC1F,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"TileContent.js","sourceRoot":"","sources":["../../../src/tile/TileContent.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { ElementAlignedBox3d } from \"@itwin/core-common\";\r\nimport { RenderGraphic } from \"../render/RenderGraphic\";\r\n\r\n/**\r\n * Describes the contents of a [[Tile]]. Specific sub-types of [[Tile]] may describe their content using sub-types of this interface.\r\n * @see [[Tile.readContent]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface TileContent {\r\n /** Graphical representation of the tile's geometry. */\r\n graphic?: RenderGraphic;\r\n /** Bounding box tightly enclosing the tile's geometry. */\r\n contentRange?: ElementAlignedBox3d;\r\n /** True if this tile requires no subdivision or refinement - i.e., has no child tiles. */\r\n isLeaf?: boolean;\r\n}\r\n"]}
1
+ {"version":3,"file":"TileContent.js","sourceRoot":"","sources":["../../../src/tile/TileContent.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { ElementAlignedBox3d } from \"@itwin/core-common\";\r\nimport { RenderGraphic } from \"../render/RenderGraphic\";\r\n\r\n/**\r\n * Describes the contents of a [[Tile]]. Specific sub-types of [[Tile]] may describe their content using sub-types of this interface.\r\n * @see [[Tile.readContent]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface TileContent {\r\n /** Graphical representation of the tile's geometry. */\r\n graphic?: RenderGraphic;\r\n /** Bounding box tightly enclosing the tile's geometry. */\r\n contentRange?: ElementAlignedBox3d;\r\n /** True if this tile requires no subdivision or refinement - i.e., has no child tiles. */\r\n isLeaf?: boolean;\r\n /** Whether the content includes one or more point clouds.\r\n * Generally, if this is true, it contains exactly one point cloud and no other geometry.\r\n * We need to know this for the classification shaders.\r\n * @internal\r\n */\r\n containsPointCloud?: boolean;\r\n}\r\n"]}
@@ -48,6 +48,7 @@ export * from "./map/WmsCapabilities";
48
48
  export * from "./map/WmtsCapabilities";
49
49
  export * from "./map/MapLayerImageryProvider";
50
50
  export * from "./map/ImageryProviders/WebMercator";
51
+ export * from "./map/ImageryProviders/ArcGisAttributeDrivenSymbology";
51
52
  export * from "./map/ImageryProviders/ArcGISImageryProvider";
52
53
  export * from "./map/ImageryProviders/ArcGisGeometryRenderer";
53
54
  export * from "./map/ImageryProviders/ArcGisGraphicsRenderer";
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/tile/internal.ts"],"names":[],"mappings":"AAIA;;GAEG;AAYH,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,iDAAiD,CAAC;AAChE,cAAc,sDAAsD,CAAC;AACrE,cAAc,sDAAsD,CAAC;AACrE,cAAc,4CAA4C,CAAC;AAC3D,cAAc,mDAAmD,CAAC;AAClE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,mDAAmD,CAAC;AAClE,cAAc,oDAAoD,CAAC;AACnE,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/tile/internal.ts"],"names":[],"mappings":"AAIA;;GAEG;AAYH,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,oCAAoC,CAAC;AACnD,cAAc,uDAAuD,CAAC;AACtE,cAAc,8CAA8C,CAAC;AAC7D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,+CAA+C,CAAC;AAC9D,cAAc,iDAAiD,CAAC;AAChE,cAAc,sDAAsD,CAAC;AACrE,cAAc,sDAAsD,CAAC;AACrE,cAAc,4CAA4C,CAAC;AAC3D,cAAc,mDAAmD,CAAC;AAClE,cAAc,+CAA+C,CAAC;AAC9D,cAAc,mDAAmD,CAAC;AAClE,cAAc,oDAAoD,CAAC;AACnE,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
@@ -77,6 +77,7 @@ __exportStar(require("./map/WmsCapabilities"), exports);
77
77
  __exportStar(require("./map/WmtsCapabilities"), exports);
78
78
  __exportStar(require("./map/MapLayerImageryProvider"), exports);
79
79
  __exportStar(require("./map/ImageryProviders/WebMercator"), exports);
80
+ __exportStar(require("./map/ImageryProviders/ArcGisAttributeDrivenSymbology"), exports);
80
81
  __exportStar(require("./map/ImageryProviders/ArcGISImageryProvider"), exports);
81
82
  __exportStar(require("./map/ImageryProviders/ArcGisGeometryRenderer"), exports);
82
83
  __exportStar(require("./map/ImageryProviders/ArcGisGraphicsRenderer"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/tile/internal.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;;;;;;;;;;;;;;AAEH;;;;;;;;GAQG;AAEH,sDAAoC;AACpC,0DAAwC;AACxC,+CAA6B;AAC7B,yDAAuC;AACvC,yCAAuB;AACvB,gDAA8B;AAC9B,gDAA8B;AAC9B,+CAA6B;AAC7B,gDAA8B;AAC9B,iDAA+B;AAC/B,wDAAsC;AACtC,sDAAoC;AACpC,qDAAmC;AACnC,mDAAiC;AACjC,6CAA2B;AAC3B,oDAAkC;AAClC,qDAAmC;AACnC,kDAAgC;AAChC,sDAAoC;AACpC,0DAAwC;AACxC,0DAAwC;AACxC,8CAA4B;AAC5B,gDAA8B;AAC9B,gDAA8B;AAC9B,uDAAqC;AACrC,8DAA4C;AAC5C,wDAAsC;AACtC,oDAAkC;AAClC,6CAA2B;AAC3B,gDAA8B;AAC9B,+CAA6B;AAC7B,+CAA6B;AAC7B,+CAA6B;AAC7B,+CAA6B;AAC7B,gDAA8B;AAC9B,wDAAsC;AACtC,+CAA6B;AAC7B,sDAAoC;AACpC,+DAA6C;AAC7C,uDAAqC;AACrC,+DAA6C;AAC7C,wDAAsC;AACtC,qDAAmC;AACnC,wDAAsC;AACtC,yDAAuC;AACvC,gEAA8C;AAC9C,qEAAmD;AACnD,+EAA6D;AAC7D,gFAA8D;AAC9D,gFAA8D;AAC9D,kFAAgE;AAChE,uFAAqE;AACrE,uFAAqE;AACrE,6EAA2D;AAC3D,oFAAkE;AAClE,gFAA8D;AAC9D,oFAAkE;AAClE,qFAAmE;AACnE,+DAA6C;AAC7C,kEAAgD;AAChD,oDAAkC;AAClC,4DAA0C;AAC1C,wDAAsC;AACtC,8DAA4C;AAC5C,iEAA+C;AAC/C,gDAA8B;AAC9B,sDAAoC;AACpC,sDAAoC;AACpC,sDAAoC;AACpC,wDAAsC;AACtC,4DAA0C;AAC1C,+CAA6B;AAC7B,yDAAuC;AACvC,+CAA6B;AAC7B,sDAAoC;AACpC,mDAAiC;AACjC,oDAAkC;AAClC,uDAAqC;AACrC,oDAAkC;AAClC,wDAAsC;AACtC,wDAAsC;AACtC,iEAA+C;AAC/C,wDAAsC;AACtC,yDAAuC;AACvC,gEAA8C;AAC9C,yDAAuC;AACvC,sDAAoC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\n/* The order of exports below is based on dependencies between the types in each file.\r\n * For example, IModelTileTree derives from TileTree, so TileTree must be exported first.\r\n * No file inside core-frontend should import from *any* file in /tile/ *except* for this one.\r\n * e.g.:\r\n * import { TileTree } from \"./tile/TileTree\"; // NO...\r\n * import { TileTree } from \"./tile/internal\"; // YES!\r\n * Failure to follow either of these two guidelines is very likely to produce difficult-to-debug run-time errors due\r\n * to circular dependencies.\r\n */\r\n\r\nexport * from \"./ViewFlagOverrides\";\r\nexport * from \"./map/MapCartoRectangle\";\r\nexport * from \"./map/QuadId\";\r\nexport * from \"./DisclosedTileTreeSet\";\r\nexport * from \"./Tile\";\r\nexport * from \"./LRUTileList\";\r\nexport * from \"./RealityTile\";\r\nexport * from \"./TileParams\";\r\nexport * from \"./TileContent\";\r\nexport * from \"./TileDrawArgs\";\r\nexport * from \"./RealityTileDrawArgs\";\r\nexport * from \"./GraphicsCollector\";\r\nexport * from \"./BatchedTileIdMap\";\r\nexport * from \"./TileTreeParams\";\r\nexport * from \"./TileTree\";\r\nexport * from \"./RealityTileTree\";\r\nexport * from \"./TileTreeSupplier\";\r\nexport * from \"./TileTreeOwner\";\r\nexport * from \"./TileTreeReference\";\r\nexport * from \"./TileGeometryCollector\";\r\nexport * from \"./TiledGraphicsProvider\";\r\nexport * from \"./TileAdmin\";\r\nexport * from \"./TileStorage\";\r\nexport * from \"./TileRequest\";\r\nexport * from \"./TileRequestChannel\";\r\nexport * from \"./IModelTileRequestChannels\";\r\nexport * from \"./TileRequestChannels\";\r\nexport * from \"./TileUsageMarker\";\r\nexport * from \"./TileUser\";\r\nexport * from \"./TileUserSet\";\r\nexport * from \"./GltfReader\";\r\nexport * from \"./I3dmReader\";\r\nexport * from \"./B3dmReader\";\r\nexport * from \"./ImdlReader\";\r\nexport * from \"./ImdlDecoder\";\r\nexport * from \"./ImdlGraphicsCreator\";\r\nexport * from \"./ImdlParser\";\r\nexport * from \"./map/ArcGISTileMap\";\r\nexport * from \"./map/MapLayerAuthentication\";\r\nexport * from \"./map/MapFeatureInfo\";\r\nexport * from \"./map/MapLayerFormatRegistry\";\r\nexport * from \"./map/ArcGisUtilities\";\r\nexport * from \"./map/WmsUtilities\";\r\nexport * from \"./map/WmsCapabilities\";\r\nexport * from \"./map/WmtsCapabilities\";\r\nexport * from \"./map/MapLayerImageryProvider\";\r\nexport * from \"./map/ImageryProviders/WebMercator\";\r\nexport * from \"./map/ImageryProviders/ArcGISImageryProvider\";\r\nexport * from \"./map/ImageryProviders/ArcGisGeometryRenderer\";\r\nexport * from \"./map/ImageryProviders/ArcGisGraphicsRenderer\";\r\nexport * from \"./map/ImageryProviders/ArcGisGeometryReaderJSON\";\r\nexport * from \"./map/ImageryProviders/ArcGISMapLayerImageryProvider\";\r\nexport * from \"./map/ImageryProviders/AzureMapsLayerImageryProvider\";\r\nexport * from \"./map/ImageryProviders/BingImageryProvider\";\r\nexport * from \"./map/ImageryProviders/MapBoxLayerImageryProvider\";\r\nexport * from \"./map/ImageryProviders/TileUrlImageryProvider\";\r\nexport * from \"./map/ImageryProviders/WmsMapLayerImageryProvider\";\r\nexport * from \"./map/ImageryProviders/WmtsMapLayerImageryProvider\";\r\nexport * from \"./map/MapLayerImageryFormats\";\r\nexport * from \"./map/MapLayerTileTreeReference\";\r\nexport * from \"./map/MapTileTree\";\r\nexport * from \"./map/TerrainMeshProvider\";\r\nexport * from \"./map/TerrainProvider\";\r\nexport * from \"./map/CesiumTerrainProvider\";\r\nexport * from \"./map/EllipsoidTerrainProvider\";\r\nexport * from \"./map/MapTile\";\r\nexport * from \"./RealityTileLoader\";\r\nexport * from \"./map/MapTileLoader\";\r\nexport * from \"./map/BingElevation\";\r\nexport * from \"./map/MapTilingScheme\";\r\nexport * from \"./map/MapTileAvailability\";\r\nexport * from \"./PntsReader\";\r\nexport * from \"./RealityModelTileTree\";\r\nexport * from \"./IModelTile\";\r\nexport * from \"./DynamicIModelTile\";\r\nexport * from \"./IModelTileTree\";\r\nexport * from \"./PrimaryTileTree\";\r\nexport * from \"./ClassifierTileTree\";\r\nexport * from \"./OrbitGtTileTree\";\r\nexport * from \"./map/ImageryTileTree\";\r\nexport * from \"./map/MapLayerSources\";\r\nexport * from \"./map/MapTiledGraphicsProvider\";\r\nexport * from \"./CesiumAssetProvider\";\r\nexport * from \"./ContextShareProvider\";\r\nexport * from \"./ThreeDTileFormatInterpreter\";\r\nexport * from \"./OPCFormatInterpreter\";\r\nexport * from \"./FetchCloudStorage\";\r\n"]}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/tile/internal.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;;;;;;;;;;;;;;AAEH;;;;;;;;GAQG;AAEH,sDAAoC;AACpC,0DAAwC;AACxC,+CAA6B;AAC7B,yDAAuC;AACvC,yCAAuB;AACvB,gDAA8B;AAC9B,gDAA8B;AAC9B,+CAA6B;AAC7B,gDAA8B;AAC9B,iDAA+B;AAC/B,wDAAsC;AACtC,sDAAoC;AACpC,qDAAmC;AACnC,mDAAiC;AACjC,6CAA2B;AAC3B,oDAAkC;AAClC,qDAAmC;AACnC,kDAAgC;AAChC,sDAAoC;AACpC,0DAAwC;AACxC,0DAAwC;AACxC,8CAA4B;AAC5B,gDAA8B;AAC9B,gDAA8B;AAC9B,uDAAqC;AACrC,8DAA4C;AAC5C,wDAAsC;AACtC,oDAAkC;AAClC,6CAA2B;AAC3B,gDAA8B;AAC9B,+CAA6B;AAC7B,+CAA6B;AAC7B,+CAA6B;AAC7B,+CAA6B;AAC7B,gDAA8B;AAC9B,wDAAsC;AACtC,+CAA6B;AAC7B,sDAAoC;AACpC,+DAA6C;AAC7C,uDAAqC;AACrC,+DAA6C;AAC7C,wDAAsC;AACtC,qDAAmC;AACnC,wDAAsC;AACtC,yDAAuC;AACvC,gEAA8C;AAC9C,qEAAmD;AACnD,wFAAsE;AACtE,+EAA6D;AAC7D,gFAA8D;AAC9D,gFAA8D;AAC9D,kFAAgE;AAChE,uFAAqE;AACrE,uFAAqE;AACrE,6EAA2D;AAC3D,oFAAkE;AAClE,gFAA8D;AAC9D,oFAAkE;AAClE,qFAAmE;AACnE,+DAA6C;AAC7C,kEAAgD;AAChD,oDAAkC;AAClC,4DAA0C;AAC1C,wDAAsC;AACtC,8DAA4C;AAC5C,iEAA+C;AAC/C,gDAA8B;AAC9B,sDAAoC;AACpC,sDAAoC;AACpC,sDAAoC;AACpC,wDAAsC;AACtC,4DAA0C;AAC1C,+CAA6B;AAC7B,yDAAuC;AACvC,+CAA6B;AAC7B,sDAAoC;AACpC,mDAAiC;AACjC,oDAAkC;AAClC,uDAAqC;AACrC,oDAAkC;AAClC,wDAAsC;AACtC,wDAAsC;AACtC,iEAA+C;AAC/C,wDAAsC;AACtC,yDAAuC;AACvC,gEAA8C;AAC9C,yDAAuC;AACvC,sDAAoC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\n/* The order of exports below is based on dependencies between the types in each file.\r\n * For example, IModelTileTree derives from TileTree, so TileTree must be exported first.\r\n * No file inside core-frontend should import from *any* file in /tile/ *except* for this one.\r\n * e.g.:\r\n * import { TileTree } from \"./tile/TileTree\"; // NO...\r\n * import { TileTree } from \"./tile/internal\"; // YES!\r\n * Failure to follow either of these two guidelines is very likely to produce difficult-to-debug run-time errors due\r\n * to circular dependencies.\r\n */\r\n\r\nexport * from \"./ViewFlagOverrides\";\r\nexport * from \"./map/MapCartoRectangle\";\r\nexport * from \"./map/QuadId\";\r\nexport * from \"./DisclosedTileTreeSet\";\r\nexport * from \"./Tile\";\r\nexport * from \"./LRUTileList\";\r\nexport * from \"./RealityTile\";\r\nexport * from \"./TileParams\";\r\nexport * from \"./TileContent\";\r\nexport * from \"./TileDrawArgs\";\r\nexport * from \"./RealityTileDrawArgs\";\r\nexport * from \"./GraphicsCollector\";\r\nexport * from \"./BatchedTileIdMap\";\r\nexport * from \"./TileTreeParams\";\r\nexport * from \"./TileTree\";\r\nexport * from \"./RealityTileTree\";\r\nexport * from \"./TileTreeSupplier\";\r\nexport * from \"./TileTreeOwner\";\r\nexport * from \"./TileTreeReference\";\r\nexport * from \"./TileGeometryCollector\";\r\nexport * from \"./TiledGraphicsProvider\";\r\nexport * from \"./TileAdmin\";\r\nexport * from \"./TileStorage\";\r\nexport * from \"./TileRequest\";\r\nexport * from \"./TileRequestChannel\";\r\nexport * from \"./IModelTileRequestChannels\";\r\nexport * from \"./TileRequestChannels\";\r\nexport * from \"./TileUsageMarker\";\r\nexport * from \"./TileUser\";\r\nexport * from \"./TileUserSet\";\r\nexport * from \"./GltfReader\";\r\nexport * from \"./I3dmReader\";\r\nexport * from \"./B3dmReader\";\r\nexport * from \"./ImdlReader\";\r\nexport * from \"./ImdlDecoder\";\r\nexport * from \"./ImdlGraphicsCreator\";\r\nexport * from \"./ImdlParser\";\r\nexport * from \"./map/ArcGISTileMap\";\r\nexport * from \"./map/MapLayerAuthentication\";\r\nexport * from \"./map/MapFeatureInfo\";\r\nexport * from \"./map/MapLayerFormatRegistry\";\r\nexport * from \"./map/ArcGisUtilities\";\r\nexport * from \"./map/WmsUtilities\";\r\nexport * from \"./map/WmsCapabilities\";\r\nexport * from \"./map/WmtsCapabilities\";\r\nexport * from \"./map/MapLayerImageryProvider\";\r\nexport * from \"./map/ImageryProviders/WebMercator\";\r\nexport * from \"./map/ImageryProviders/ArcGisAttributeDrivenSymbology\";\r\nexport * from \"./map/ImageryProviders/ArcGISImageryProvider\";\r\nexport * from \"./map/ImageryProviders/ArcGisGeometryRenderer\";\r\nexport * from \"./map/ImageryProviders/ArcGisGraphicsRenderer\";\r\nexport * from \"./map/ImageryProviders/ArcGisGeometryReaderJSON\";\r\nexport * from \"./map/ImageryProviders/ArcGISMapLayerImageryProvider\";\r\nexport * from \"./map/ImageryProviders/AzureMapsLayerImageryProvider\";\r\nexport * from \"./map/ImageryProviders/BingImageryProvider\";\r\nexport * from \"./map/ImageryProviders/MapBoxLayerImageryProvider\";\r\nexport * from \"./map/ImageryProviders/TileUrlImageryProvider\";\r\nexport * from \"./map/ImageryProviders/WmsMapLayerImageryProvider\";\r\nexport * from \"./map/ImageryProviders/WmtsMapLayerImageryProvider\";\r\nexport * from \"./map/MapLayerImageryFormats\";\r\nexport * from \"./map/MapLayerTileTreeReference\";\r\nexport * from \"./map/MapTileTree\";\r\nexport * from \"./map/TerrainMeshProvider\";\r\nexport * from \"./map/TerrainProvider\";\r\nexport * from \"./map/CesiumTerrainProvider\";\r\nexport * from \"./map/EllipsoidTerrainProvider\";\r\nexport * from \"./map/MapTile\";\r\nexport * from \"./RealityTileLoader\";\r\nexport * from \"./map/MapTileLoader\";\r\nexport * from \"./map/BingElevation\";\r\nexport * from \"./map/MapTilingScheme\";\r\nexport * from \"./map/MapTileAvailability\";\r\nexport * from \"./PntsReader\";\r\nexport * from \"./RealityModelTileTree\";\r\nexport * from \"./IModelTile\";\r\nexport * from \"./DynamicIModelTile\";\r\nexport * from \"./IModelTileTree\";\r\nexport * from \"./PrimaryTileTree\";\r\nexport * from \"./ClassifierTileTree\";\r\nexport * from \"./OrbitGtTileTree\";\r\nexport * from \"./map/ImageryTileTree\";\r\nexport * from \"./map/MapLayerSources\";\r\nexport * from \"./map/MapTiledGraphicsProvider\";\r\nexport * from \"./CesiumAssetProvider\";\r\nexport * from \"./ContextShareProvider\";\r\nexport * from \"./ThreeDTileFormatInterpreter\";\r\nexport * from \"./OPCFormatInterpreter\";\r\nexport * from \"./FetchCloudStorage\";\r\n"]}
@@ -0,0 +1,11 @@
1
+ /** @packageDocumentation
2
+ * @module Tiles
3
+ */
4
+ /** @internal */
5
+ export interface ArcGisAttributeDrivenSymbology {
6
+ rendererFields?: string[];
7
+ setActiveFeatureAttributes: (attributes: {
8
+ [key: string]: any;
9
+ }) => void;
10
+ }
11
+ //# sourceMappingURL=ArcGisAttributeDrivenSymbology.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArcGisAttributeDrivenSymbology.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGisAttributeDrivenSymbology.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,gBAAgB;AAChB,MAAM,WAAW,8BAA8B;IAC7C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,0BAA0B,EAAE,CAAC,UAAU,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,KAAK,IAAI,CAAC;CAC1E"}
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ /** @packageDocumentation
7
+ * @module Tiles
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ //# sourceMappingURL=ArcGisAttributeDrivenSymbology.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArcGisAttributeDrivenSymbology.js","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGisAttributeDrivenSymbology.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\n/** @internal */\r\nexport interface ArcGisAttributeDrivenSymbology {\r\n rendererFields?: string[];\r\n setActiveFeatureAttributes: (attributes: { [key: string]: any }) => void;\r\n}\r\n"]}
@@ -1,10 +1,12 @@
1
1
  import { Transform } from "@itwin/core-geometry";
2
+ import { ArcGisAttributeDrivenSymbology } from "../../internal";
2
3
  /** Interface defining minimal implementation needed to create an ArcGIS geometry renderer,
3
4
  * that will ultimately be called by an [[ArcGisFeatureReader]] implementation.
4
5
  * @internal
5
6
  */
6
7
  export interface ArcGisGeometryRenderer {
7
8
  transform: Transform | undefined;
9
+ attributeSymbology?: ArcGisAttributeDrivenSymbology;
8
10
  renderPath(geometryLengths: number[], geometryCoords: number[], fill: boolean, stride: number, relativeCoords: boolean): Promise<void>;
9
11
  renderPoint(geometryLengths: number[], geometryCoords: number[], stride: number, relativeCoords: boolean): Promise<void>;
10
12
  }
@@ -14,6 +16,7 @@ export interface ArcGisGeometryRenderer {
14
16
  export declare abstract class ArcGisGeometryBaseRenderer implements ArcGisGeometryRenderer {
15
17
  private _transform;
16
18
  constructor(world2PixelTransform?: Transform);
19
+ abstract get attributeSymbology(): ArcGisAttributeDrivenSymbology | undefined;
17
20
  get transform(): Transform | undefined;
18
21
  protected abstract beginPath(): void;
19
22
  protected abstract closePath(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGisGeometryRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGisGeometryRenderer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvI,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1H;AAED;;GAEG;AACH,8BAAsB,0BAA2B,YAAW,sBAAsB;IAChF,OAAO,CAAC,UAAU,CAAwB;gBAE9B,oBAAoB,CAAC,EAAE,SAAS;IAI5C,IAAW,SAAS,0BAA8B;IAElD,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI;IACpC,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI;IACpC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IACrD,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IACrD,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAC1C,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IACxD,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAEhD;;;;;;;MAOE;IACW,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO;IAiEnI;;;;;;MAME;IACW,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO;CA6CtH"}
1
+ {"version":3,"file":"ArcGisGeometryRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGisGeometryRenderer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;IACjC,kBAAkB,CAAC,EAAE,8BAA8B,CAAC;IACpD,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvI,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1H;AAED;;GAEG;AACH,8BAAsB,0BAA2B,YAAW,sBAAsB;IAChF,OAAO,CAAC,UAAU,CAAwB;gBAE9B,oBAAoB,CAAC,EAAE,SAAS;IAG5C,aAAoB,kBAAkB,IAAI,8BAA8B,GAAG,SAAS,CAAC;IAErF,IAAW,SAAS,0BAA8B;IAElD,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI;IACpC,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI;IACpC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IACrD,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IACrD,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAC1C,SAAS,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IACxC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IACxD,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAEhD;;;;;;;MAOE;IACW,UAAU,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO;IAiEnI;;;;;;MAME;IACW,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO;CA6CtH"}
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGisGeometryRenderer.js","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGisGeometryRenderer.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\nimport { Transform } from \"@itwin/core-geometry\";\r\n\r\n/** Interface defining minimal implementation needed to create an ArcGIS geometry renderer,\r\n * that will ultimately be called by an [[ArcGisFeatureReader]] implementation.\r\n * @internal\r\n */\r\nexport interface ArcGisGeometryRenderer {\r\n transform: Transform | undefined;\r\n renderPath(geometryLengths: number[], geometryCoords: number[], fill: boolean, stride: number, relativeCoords: boolean): Promise<void>;\r\n renderPoint(geometryLengths: number[], geometryCoords: number[], stride: number, relativeCoords: boolean): Promise<void>;\r\n}\r\n\r\n/** Internal implementation of [[ArcGisGeometryRenderer]]\r\n * @internal\r\n */\r\nexport abstract class ArcGisGeometryBaseRenderer implements ArcGisGeometryRenderer {\r\n private _transform: Transform | undefined;\r\n\r\n constructor(world2PixelTransform?: Transform) {\r\n this._transform = world2PixelTransform;\r\n }\r\n\r\n public get transform() { return this._transform; }\r\n\r\n protected abstract beginPath(): void;\r\n protected abstract closePath(): void;\r\n protected abstract lineTo(x: number, y: number): void;\r\n protected abstract moveTo(x: number, y: number): void;\r\n protected abstract stroke(): Promise<void>;\r\n protected abstract fill(): Promise<void>;\r\n protected abstract drawPoint(x: number, y: number): void;\r\n protected abstract finishPoints(): Promise<void>;\r\n\r\n /**\r\n * Render a path on the renderer's context.\r\n * Note: Inputs are designed based on the PBF format, to avoid any data transformation.\r\n * @param geometryLengths Array be used to determine the start and end of each sub-path / rings. (i.e. [5,5] = two rings of 5 vertices)\r\n * @param geometryCoords Array that linearly encodes the vertices of each sub-path of a polyline / ring of a polygon\r\n * @param fill Indicates if the path should be filled or not.\r\n * @param stride Dimension of each vertices (i.e. 2 or 3. 3 could be X,Y,Z, X,YM) Currently 3rd dimension is ignored.\r\n */\r\n public async renderPath(geometryLengths: number[], geometryCoords: number[], fill: boolean, stride: number, relativeCoords: boolean) {\r\n if (stride < 2 || stride > 3) {\r\n return;\r\n }\r\n\r\n // Keep track of our position in the in the 'coords' array:\r\n // Every time we loop on the 'lengths' array, the position\r\n // to start reading vertices in the 'coords' must be the sum of all previously read vertices.\r\n let coordsOffset = 0;\r\n\r\n // Begin the path here.\r\n // Note: Even though path is closed inside the 'geometryLengths' loop,\r\n // it's import to begin the path only once.\r\n this.beginPath();\r\n for (const vertexCount of geometryLengths) {\r\n let lastPtX = 0, lastPtY = 0;\r\n for (let vertexIdx = 0; vertexIdx < vertexCount; vertexIdx++) {\r\n let pX = geometryCoords[coordsOffset + (vertexIdx * stride)];\r\n let pY = geometryCoords[coordsOffset + (vertexIdx * stride) + 1];\r\n if (vertexIdx === 0) {\r\n // first vertex is always \"absolute\" and must be drawn as 'moveTo' (i.e. not lineTo)\r\n if (relativeCoords) {\r\n lastPtX = pX;\r\n lastPtY = pY;\r\n }\r\n\r\n if (this._transform) {\r\n const transformedPoint = this._transform.multiplyPoint2d({ x: pX, y: pY });\r\n pX = transformedPoint.x;\r\n pY = transformedPoint.y;\r\n }\r\n\r\n this.moveTo(pX, pY);\r\n } else {\r\n\r\n // Following vertices are relative to the previous one (sadly not really well documented by ESRI)\r\n // typically this happens when 'coordinates quantization' is active (i.e. no client side transformation is needed)\r\n if (relativeCoords) {\r\n pX = lastPtX = lastPtX + pX;\r\n pY = lastPtY = lastPtY + pY;\r\n }\r\n\r\n if (this._transform) {\r\n const transformedPoint = this._transform.multiplyPoint2d({ x: pX, y: pY });\r\n pX = transformedPoint.x;\r\n pY = transformedPoint.y;\r\n }\r\n this.lineTo(pX, pY);\r\n }\r\n\r\n }\r\n coordsOffset += stride * vertexCount;\r\n if (fill) {\r\n // ClosePath but do not 'fill' here, only at the very end (otherwise it will mess up holes)\r\n this.closePath();\r\n }\r\n }\r\n\r\n if (fill) {\r\n await this.fill();\r\n }\r\n\r\n await this.stroke(); // draw line path or polygon outline\r\n }\r\n\r\n /**\r\n * Render a point on the renderer's context.\r\n * Note: Inputs are designed based on the PBF format, to avoid any data transformation.\r\n * @param geometryLengths Array be used to determine the start and end of each multi-point array, empty for single point.\r\n * @param geometryCoords Array that linearly encodes vertices.\r\n * @param stride Dimension of each vertices (i.e. 2 or 3. 3 could be X,Y,Z, X,YM) Currently 3rd dimension is ignored.\r\n */\r\n public async renderPoint(geometryLengths: number[], geometryCoords: number[], stride: number, relativeCoords: boolean) {\r\n\r\n if (stride < 2 || stride > 3) {\r\n return;\r\n }\r\n let coordsOffset = 0;\r\n if (geometryLengths.length === 0) {\r\n // Strangely, for points, 'lengths' array is empty, so we assume there is a single vertex in 'coords' array.\r\n if (geometryCoords.length >= stride) {\r\n\r\n if (this._transform) {\r\n const transformedPoint = this._transform.multiplyPoint2d({ x: geometryCoords[0], y: geometryCoords[1] });\r\n this.drawPoint(transformedPoint.x, transformedPoint.y);\r\n } else {\r\n this.drawPoint(geometryCoords[0], geometryCoords[1]);\r\n }\r\n }\r\n } else {\r\n // MULTI-POINTS: Needs testing\r\n // I assume 'lengths' array will get populated and 'coords' array will look similar to line/polygons.\r\n for (const vertexCount of geometryLengths) {\r\n let lastPtX = 0, lastPtY = 0;\r\n for (let vertexIdx = 0; vertexIdx < vertexCount; vertexIdx++) {\r\n let pX = geometryCoords[coordsOffset + (vertexIdx * stride)];\r\n let pY = geometryCoords[coordsOffset + (vertexIdx * stride) + 1];\r\n\r\n if (relativeCoords) {\r\n pX = lastPtX = lastPtX + pX;\r\n pY = lastPtY = lastPtY + pY;\r\n }\r\n\r\n if (this._transform) {\r\n const transformedPoint = this._transform.multiplyPoint2d({ x: pX, y: pY });\r\n pX = transformedPoint.x;\r\n pY = transformedPoint.y;\r\n }\r\n\r\n this.drawPoint(pX, pY);\r\n\r\n }\r\n coordsOffset += stride * vertexCount;\r\n }\r\n }\r\n await this.finishPoints();\r\n }\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"ArcGisGeometryRenderer.js","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGisGeometryRenderer.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\nimport { Transform } from \"@itwin/core-geometry\";\r\nimport { ArcGisAttributeDrivenSymbology } from \"../../internal\";\r\n\r\n/** Interface defining minimal implementation needed to create an ArcGIS geometry renderer,\r\n * that will ultimately be called by an [[ArcGisFeatureReader]] implementation.\r\n * @internal\r\n */\r\nexport interface ArcGisGeometryRenderer {\r\n transform: Transform | undefined;\r\n attributeSymbology?: ArcGisAttributeDrivenSymbology;\r\n renderPath(geometryLengths: number[], geometryCoords: number[], fill: boolean, stride: number, relativeCoords: boolean): Promise<void>;\r\n renderPoint(geometryLengths: number[], geometryCoords: number[], stride: number, relativeCoords: boolean): Promise<void>;\r\n}\r\n\r\n/** Internal implementation of [[ArcGisGeometryRenderer]]\r\n * @internal\r\n */\r\nexport abstract class ArcGisGeometryBaseRenderer implements ArcGisGeometryRenderer {\r\n private _transform: Transform | undefined;\r\n\r\n constructor(world2PixelTransform?: Transform) {\r\n this._transform = world2PixelTransform;\r\n }\r\n public abstract get attributeSymbology(): ArcGisAttributeDrivenSymbology | undefined;\r\n\r\n public get transform() { return this._transform; }\r\n\r\n protected abstract beginPath(): void;\r\n protected abstract closePath(): void;\r\n protected abstract lineTo(x: number, y: number): void;\r\n protected abstract moveTo(x: number, y: number): void;\r\n protected abstract stroke(): Promise<void>;\r\n protected abstract fill(): Promise<void>;\r\n protected abstract drawPoint(x: number, y: number): void;\r\n protected abstract finishPoints(): Promise<void>;\r\n\r\n /**\r\n * Render a path on the renderer's context.\r\n * Note: Inputs are designed based on the PBF format, to avoid any data transformation.\r\n * @param geometryLengths Array be used to determine the start and end of each sub-path / rings. (i.e. [5,5] = two rings of 5 vertices)\r\n * @param geometryCoords Array that linearly encodes the vertices of each sub-path of a polyline / ring of a polygon\r\n * @param fill Indicates if the path should be filled or not.\r\n * @param stride Dimension of each vertices (i.e. 2 or 3. 3 could be X,Y,Z, X,YM) Currently 3rd dimension is ignored.\r\n */\r\n public async renderPath(geometryLengths: number[], geometryCoords: number[], fill: boolean, stride: number, relativeCoords: boolean) {\r\n if (stride < 2 || stride > 3) {\r\n return;\r\n }\r\n\r\n // Keep track of our position in the in the 'coords' array:\r\n // Every time we loop on the 'lengths' array, the position\r\n // to start reading vertices in the 'coords' must be the sum of all previously read vertices.\r\n let coordsOffset = 0;\r\n\r\n // Begin the path here.\r\n // Note: Even though path is closed inside the 'geometryLengths' loop,\r\n // it's import to begin the path only once.\r\n this.beginPath();\r\n for (const vertexCount of geometryLengths) {\r\n let lastPtX = 0, lastPtY = 0;\r\n for (let vertexIdx = 0; vertexIdx < vertexCount; vertexIdx++) {\r\n let pX = geometryCoords[coordsOffset + (vertexIdx * stride)];\r\n let pY = geometryCoords[coordsOffset + (vertexIdx * stride) + 1];\r\n if (vertexIdx === 0) {\r\n // first vertex is always \"absolute\" and must be drawn as 'moveTo' (i.e. not lineTo)\r\n if (relativeCoords) {\r\n lastPtX = pX;\r\n lastPtY = pY;\r\n }\r\n\r\n if (this._transform) {\r\n const transformedPoint = this._transform.multiplyPoint2d({ x: pX, y: pY });\r\n pX = transformedPoint.x;\r\n pY = transformedPoint.y;\r\n }\r\n\r\n this.moveTo(pX, pY);\r\n } else {\r\n\r\n // Following vertices are relative to the previous one (sadly not really well documented by ESRI)\r\n // typically this happens when 'coordinates quantization' is active (i.e. no client side transformation is needed)\r\n if (relativeCoords) {\r\n pX = lastPtX = lastPtX + pX;\r\n pY = lastPtY = lastPtY + pY;\r\n }\r\n\r\n if (this._transform) {\r\n const transformedPoint = this._transform.multiplyPoint2d({ x: pX, y: pY });\r\n pX = transformedPoint.x;\r\n pY = transformedPoint.y;\r\n }\r\n this.lineTo(pX, pY);\r\n }\r\n\r\n }\r\n coordsOffset += stride * vertexCount;\r\n if (fill) {\r\n // ClosePath but do not 'fill' here, only at the very end (otherwise it will mess up holes)\r\n this.closePath();\r\n }\r\n }\r\n\r\n if (fill) {\r\n await this.fill();\r\n }\r\n\r\n await this.stroke(); // draw line path or polygon outline\r\n }\r\n\r\n /**\r\n * Render a point on the renderer's context.\r\n * Note: Inputs are designed based on the PBF format, to avoid any data transformation.\r\n * @param geometryLengths Array be used to determine the start and end of each multi-point array, empty for single point.\r\n * @param geometryCoords Array that linearly encodes vertices.\r\n * @param stride Dimension of each vertices (i.e. 2 or 3. 3 could be X,Y,Z, X,YM) Currently 3rd dimension is ignored.\r\n */\r\n public async renderPoint(geometryLengths: number[], geometryCoords: number[], stride: number, relativeCoords: boolean) {\r\n\r\n if (stride < 2 || stride > 3) {\r\n return;\r\n }\r\n let coordsOffset = 0;\r\n if (geometryLengths.length === 0) {\r\n // Strangely, for points, 'lengths' array is empty, so we assume there is a single vertex in 'coords' array.\r\n if (geometryCoords.length >= stride) {\r\n\r\n if (this._transform) {\r\n const transformedPoint = this._transform.multiplyPoint2d({ x: geometryCoords[0], y: geometryCoords[1] });\r\n this.drawPoint(transformedPoint.x, transformedPoint.y);\r\n } else {\r\n this.drawPoint(geometryCoords[0], geometryCoords[1]);\r\n }\r\n }\r\n } else {\r\n // MULTI-POINTS: Needs testing\r\n // I assume 'lengths' array will get populated and 'coords' array will look similar to line/polygons.\r\n for (const vertexCount of geometryLengths) {\r\n let lastPtX = 0, lastPtY = 0;\r\n for (let vertexIdx = 0; vertexIdx < vertexCount; vertexIdx++) {\r\n let pX = geometryCoords[coordsOffset + (vertexIdx * stride)];\r\n let pY = geometryCoords[coordsOffset + (vertexIdx * stride) + 1];\r\n\r\n if (relativeCoords) {\r\n pX = lastPtX = lastPtX + pX;\r\n pY = lastPtY = lastPtY + pY;\r\n }\r\n\r\n if (this._transform) {\r\n const transformedPoint = this._transform.multiplyPoint2d({ x: pX, y: pY });\r\n pX = transformedPoint.x;\r\n pY = transformedPoint.y;\r\n }\r\n\r\n this.drawPoint(pX, pY);\r\n\r\n }\r\n coordsOffset += stride * vertexCount;\r\n }\r\n }\r\n await this.finishPoints();\r\n }\r\n}\r\n\r\n"]}
@@ -1,4 +1,4 @@
1
- import { ArcGisGeometryBaseRenderer } from "../../internal";
1
+ import { ArcGisAttributeDrivenSymbology, ArcGisGeometryBaseRenderer } from "../../internal";
2
2
  import { GraphicPrimitive } from "../../../render/GraphicPrimitive";
3
3
  import { IModelConnection } from "../../../IModelConnection";
4
4
  /** ArcGIS geometry renderer implementation that will "render" a list of [GraphicPrimitive]($frontend)
@@ -10,6 +10,7 @@ export declare class ArcGisGraphicsRenderer extends ArcGisGeometryBaseRenderer {
10
10
  private _scratchPaths;
11
11
  private _graphics;
12
12
  private _iModel;
13
+ get attributeSymbology(): ArcGisAttributeDrivenSymbology | undefined;
13
14
  constructor(iModel: IModelConnection);
14
15
  moveGraphics(): GraphicPrimitive[];
15
16
  protected beginPath(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGisGraphicsRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGisGraphicsRenderer.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,0BAA0B,EAAe,MAAM,gBAAgB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAI7D;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,0BAA0B;IACpE,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,OAAO,CAAmB;gBAEtB,MAAM,EAAE,gBAAgB;IAK7B,YAAY;IAMnB,SAAS,CAAC,SAAS;IAKnB,SAAS,CAAC,SAAS;cAOH,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;cAI3B,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;cAU3B,IAAI;cA8BJ,MAAM;cAyBH,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;cAI/B,YAAY;YAmBvB,gBAAgB;IAI9B,OAAO,CAAC,gBAAgB;CAQzB"}
1
+ {"version":3,"file":"ArcGisGraphicsRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGisGraphicsRenderer.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,8BAA8B,EAAE,0BAA0B,EAAe,MAAM,gBAAgB,CAAC;AACzG,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAI7D;;;GAGG;AACH,qBAAa,sBAAuB,SAAQ,0BAA0B;IACpE,OAAO,CAAC,mBAAmB,CAA0B;IACrD,OAAO,CAAC,aAAa,CAAmB;IACxC,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,OAAO,CAAmB;IAElC,IAAoB,kBAAkB,IAAI,8BAA8B,GAAG,SAAS,CAAoB;gBAE5F,MAAM,EAAE,gBAAgB;IAK7B,YAAY;IAMnB,SAAS,CAAC,SAAS;IAKnB,SAAS,CAAC,SAAS;cAOH,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;cAI3B,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;cAU3B,IAAI;cA8BJ,MAAM;cAyBH,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;cAI/B,YAAY;YAmBvB,gBAAgB;IAI9B,OAAO,CAAC,gBAAgB;CAQzB"}
@@ -15,6 +15,7 @@ const loggerCategory = "MapLayerImageryProvider.ArcGisGraphicsRenderer";
15
15
  * @internal
16
16
  */
17
17
  class ArcGisGraphicsRenderer extends internal_1.ArcGisGeometryBaseRenderer {
18
+ get attributeSymbology() { return undefined; } // No symbology is applied in this renderer
18
19
  constructor(iModel) {
19
20
  super();
20
21
  this._scratchPointsArray = new core_geometry_1.GrowableXYZArray();
@@ -1 +1 @@
1
- {"version":3,"file":"ArcGisGraphicsRenderer.js","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGisGraphicsRenderer.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\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { Cartographic } from \"@itwin/core-common\";\r\nimport { GrowableXYZArray, LineString3d, Loop, Point3d, Point3dArray, RegionOps } from \"@itwin/core-geometry\";\r\nimport { ArcGisGeometryBaseRenderer, WebMercator } from \"../../internal\";\r\nimport { GraphicPrimitive } from \"../../../render/GraphicPrimitive\";\r\nimport { IModelConnection } from \"../../../IModelConnection\";\r\n\r\nconst loggerCategory = \"MapLayerImageryProvider.ArcGisGraphicsRenderer\";\r\n\r\n/** ArcGIS geometry renderer implementation that will \"render\" a list of [GraphicPrimitive]($frontend)\r\n * This renderer initial objective is to read geometries when a call to [[MapLayerImageryProvider.getFeatureInfo]] is performed.\r\n * @internal\r\n */\r\nexport class ArcGisGraphicsRenderer extends ArcGisGeometryBaseRenderer {\r\n private _scratchPointsArray = new GrowableXYZArray();\r\n private _scratchPaths: Point3d[][] = [];\r\n private _graphics: GraphicPrimitive[] = [];\r\n private _iModel: IModelConnection;\r\n\r\n constructor(iModel: IModelConnection) {\r\n super();\r\n this._iModel = iModel;\r\n }\r\n\r\n public moveGraphics() {\r\n const graphics = this._graphics;\r\n this._graphics = [];\r\n return graphics;\r\n }\r\n\r\n protected beginPath() {\r\n this._scratchPointsArray.clear();\r\n this._scratchPaths = [];\r\n }\r\n\r\n protected closePath() {\r\n if (this._scratchPointsArray.length > 0) {\r\n this._scratchPaths.push(this._scratchPointsArray.getArray());\r\n this._scratchPointsArray.clear();\r\n }\r\n }\r\n\r\n protected async lineTo(x: number, y: number) {\r\n this._scratchPointsArray.push({ x, y, z: 0 });\r\n }\r\n\r\n protected async moveTo(x: number, y: number) {\r\n\r\n if (this._scratchPointsArray.length > 0) {\r\n this._scratchPaths.push(this._scratchPointsArray.getArray());\r\n this._scratchPointsArray.clear();\r\n }\r\n\r\n this._scratchPointsArray.push({ x, y, z: 0 });\r\n }\r\n\r\n protected async fill() {\r\n if (this._scratchPaths.length > 0) {\r\n const loops = [];\r\n if (this._iModel.noGcsDefined) {\r\n for (const points of this._scratchPaths) {\r\n loops.push(Loop.create(LineString3d.create(this.toSpatialFromEcf(points))));\r\n }\r\n } else {\r\n const pathPromises = [];\r\n for (const points of this._scratchPaths) {\r\n pathPromises.push(this.toSpatialFromGcs(points));\r\n }\r\n\r\n const pathsArray = await Promise.all(pathPromises);\r\n for (const pointsArray of pathsArray) {\r\n loops.push(Loop.create(LineString3d.create(pointsArray)));\r\n }\r\n }\r\n\r\n const mergedLoops = RegionOps.constructAllXYRegionLoops(loops);\r\n for (const loop of mergedLoops) {\r\n for (const negativeLoop of loop.negativeAreaLoops) {\r\n this._graphics.push({ type: \"loop\", loop: negativeLoop });\r\n }\r\n }\r\n\r\n this._scratchPaths = [];\r\n }\r\n }\r\n\r\n protected async stroke() {\r\n\r\n if (this._scratchPointsArray.length > 0) {\r\n this._scratchPaths.push(this._scratchPointsArray.getArray());\r\n this._scratchPointsArray.clear();\r\n }\r\n\r\n if (this._iModel.noGcsDefined) {\r\n for (const linestring of this._scratchPaths) {\r\n this._graphics.push({ type: \"linestring\", points: this.toSpatialFromEcf(linestring) });\r\n }\r\n } else {\r\n const pathPromises = [];\r\n for (const noGcsDefined of this._scratchPaths) {\r\n pathPromises.push(this.toSpatialFromGcs(noGcsDefined));\r\n }\r\n\r\n const reprojectedPaths = await Promise.all(pathPromises);\r\n for (const path of reprojectedPaths) {\r\n this._graphics.push({ type: \"linestring\", points: Point3dArray.clonePoint3dArray(path) });\r\n }\r\n }\r\n this._scratchPaths = [];\r\n }\r\n\r\n protected override drawPoint(x: number, y: number): void {\r\n this._scratchPointsArray.push({ x, y, z: 0 });\r\n }\r\n\r\n protected override async finishPoints() {\r\n if (this._scratchPointsArray.length > 0) {\r\n\r\n if (this._iModel.noGcsDefined) {\r\n this._graphics.push({ type: \"pointstring\", points: this.toSpatialFromEcf(this._scratchPointsArray.getArray()) });\r\n } else {\r\n // Backend reprojection\r\n const pointsArray = this._scratchPointsArray.getArray();\r\n try {\r\n const spatialPoints = await this.toSpatialFromGcs(pointsArray);\r\n this._graphics.push({ type: \"pointstring\", points: spatialPoints });\r\n } catch (error) {\r\n Logger.logError(loggerCategory, \"ArcGisFeatureGraphicsRenderer: Could not reproject points\");\r\n }\r\n }\r\n this._scratchPointsArray.clear();\r\n }\r\n }\r\n\r\n private async toSpatialFromGcs(geoPoints: Point3d[]) {\r\n return this._iModel.toSpatialFromGcs(geoPoints, { horizontalCRS: { epsg: 3857 }, verticalCRS: { id: \"ELLIPSOID\" } });\r\n }\r\n\r\n private toSpatialFromEcf(geoPoints: Point3d[]) {\r\n const spatials = [];\r\n for (const pt of geoPoints) {\r\n const carto = { longitude: WebMercator.getEPSG4326Lon(pt.x), latitude: WebMercator.getEPSG4326Lat(pt.y), height: pt.z };\r\n spatials.push(this._iModel.cartographicToSpatialFromEcef(Cartographic.fromDegrees(carto)));\r\n }\r\n return spatials;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ArcGisGraphicsRenderer.js","sourceRoot":"","sources":["../../../../../src/tile/map/ImageryProviders/ArcGisGraphicsRenderer.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\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { Cartographic } from \"@itwin/core-common\";\r\nimport { GrowableXYZArray, LineString3d, Loop, Point3d, Point3dArray, RegionOps } from \"@itwin/core-geometry\";\r\nimport { ArcGisAttributeDrivenSymbology, ArcGisGeometryBaseRenderer, WebMercator } from \"../../internal\";\r\nimport { GraphicPrimitive } from \"../../../render/GraphicPrimitive\";\r\nimport { IModelConnection } from \"../../../IModelConnection\";\r\n\r\nconst loggerCategory = \"MapLayerImageryProvider.ArcGisGraphicsRenderer\";\r\n\r\n/** ArcGIS geometry renderer implementation that will \"render\" a list of [GraphicPrimitive]($frontend)\r\n * This renderer initial objective is to read geometries when a call to [[MapLayerImageryProvider.getFeatureInfo]] is performed.\r\n * @internal\r\n */\r\nexport class ArcGisGraphicsRenderer extends ArcGisGeometryBaseRenderer {\r\n private _scratchPointsArray = new GrowableXYZArray();\r\n private _scratchPaths: Point3d[][] = [];\r\n private _graphics: GraphicPrimitive[] = [];\r\n private _iModel: IModelConnection;\r\n\r\n public override get attributeSymbology(): ArcGisAttributeDrivenSymbology | undefined {return undefined;} // No symbology is applied in this renderer\r\n\r\n constructor(iModel: IModelConnection) {\r\n super();\r\n this._iModel = iModel;\r\n }\r\n\r\n public moveGraphics() {\r\n const graphics = this._graphics;\r\n this._graphics = [];\r\n return graphics;\r\n }\r\n\r\n protected beginPath() {\r\n this._scratchPointsArray.clear();\r\n this._scratchPaths = [];\r\n }\r\n\r\n protected closePath() {\r\n if (this._scratchPointsArray.length > 0) {\r\n this._scratchPaths.push(this._scratchPointsArray.getArray());\r\n this._scratchPointsArray.clear();\r\n }\r\n }\r\n\r\n protected async lineTo(x: number, y: number) {\r\n this._scratchPointsArray.push({ x, y, z: 0 });\r\n }\r\n\r\n protected async moveTo(x: number, y: number) {\r\n\r\n if (this._scratchPointsArray.length > 0) {\r\n this._scratchPaths.push(this._scratchPointsArray.getArray());\r\n this._scratchPointsArray.clear();\r\n }\r\n\r\n this._scratchPointsArray.push({ x, y, z: 0 });\r\n }\r\n\r\n protected async fill() {\r\n if (this._scratchPaths.length > 0) {\r\n const loops = [];\r\n if (this._iModel.noGcsDefined) {\r\n for (const points of this._scratchPaths) {\r\n loops.push(Loop.create(LineString3d.create(this.toSpatialFromEcf(points))));\r\n }\r\n } else {\r\n const pathPromises = [];\r\n for (const points of this._scratchPaths) {\r\n pathPromises.push(this.toSpatialFromGcs(points));\r\n }\r\n\r\n const pathsArray = await Promise.all(pathPromises);\r\n for (const pointsArray of pathsArray) {\r\n loops.push(Loop.create(LineString3d.create(pointsArray)));\r\n }\r\n }\r\n\r\n const mergedLoops = RegionOps.constructAllXYRegionLoops(loops);\r\n for (const loop of mergedLoops) {\r\n for (const negativeLoop of loop.negativeAreaLoops) {\r\n this._graphics.push({ type: \"loop\", loop: negativeLoop });\r\n }\r\n }\r\n\r\n this._scratchPaths = [];\r\n }\r\n }\r\n\r\n protected async stroke() {\r\n\r\n if (this._scratchPointsArray.length > 0) {\r\n this._scratchPaths.push(this._scratchPointsArray.getArray());\r\n this._scratchPointsArray.clear();\r\n }\r\n\r\n if (this._iModel.noGcsDefined) {\r\n for (const linestring of this._scratchPaths) {\r\n this._graphics.push({ type: \"linestring\", points: this.toSpatialFromEcf(linestring) });\r\n }\r\n } else {\r\n const pathPromises = [];\r\n for (const noGcsDefined of this._scratchPaths) {\r\n pathPromises.push(this.toSpatialFromGcs(noGcsDefined));\r\n }\r\n\r\n const reprojectedPaths = await Promise.all(pathPromises);\r\n for (const path of reprojectedPaths) {\r\n this._graphics.push({ type: \"linestring\", points: Point3dArray.clonePoint3dArray(path) });\r\n }\r\n }\r\n this._scratchPaths = [];\r\n }\r\n\r\n protected override drawPoint(x: number, y: number): void {\r\n this._scratchPointsArray.push({ x, y, z: 0 });\r\n }\r\n\r\n protected override async finishPoints() {\r\n if (this._scratchPointsArray.length > 0) {\r\n\r\n if (this._iModel.noGcsDefined) {\r\n this._graphics.push({ type: \"pointstring\", points: this.toSpatialFromEcf(this._scratchPointsArray.getArray()) });\r\n } else {\r\n // Backend reprojection\r\n const pointsArray = this._scratchPointsArray.getArray();\r\n try {\r\n const spatialPoints = await this.toSpatialFromGcs(pointsArray);\r\n this._graphics.push({ type: \"pointstring\", points: spatialPoints });\r\n } catch (error) {\r\n Logger.logError(loggerCategory, \"ArcGisFeatureGraphicsRenderer: Could not reproject points\");\r\n }\r\n }\r\n this._scratchPointsArray.clear();\r\n }\r\n }\r\n\r\n private async toSpatialFromGcs(geoPoints: Point3d[]) {\r\n return this._iModel.toSpatialFromGcs(geoPoints, { horizontalCRS: { epsg: 3857 }, verticalCRS: { id: \"ELLIPSOID\" } });\r\n }\r\n\r\n private toSpatialFromEcf(geoPoints: Point3d[]) {\r\n const spatials = [];\r\n for (const pt of geoPoints) {\r\n const carto = { longitude: WebMercator.getEPSG4326Lon(pt.x), latitude: WebMercator.getEPSG4326Lat(pt.y), height: pt.z };\r\n spatials.push(this._iModel.cartographicToSpatialFromEcef(Cartographic.fromDegrees(carto)));\r\n }\r\n return spatials;\r\n }\r\n}\r\n"]}
@@ -2058,7 +2058,7 @@ class Viewport {
2058
2058
  return false;
2059
2059
  if (pixel.modelId === pixel.elementId)
2060
2060
  return false; // Reality Models not selectable
2061
- return undefined === this.mapLayerFromIds(pixel.modelId, pixel.elementId); // Maps no selectable.
2061
+ return (0 === this.mapLayerFromIds(pixel.modelId, pixel.elementId).length); // Maps no selectable.
2062
2062
  }
2063
2063
  /** Read the current image from this viewport from the rendering system. If a "null" rectangle is supplied (@see [[ViewRect.isNull]]), the entire view is captured.
2064
2064
  * @param rect The area of the view to read. The origin of a viewRect must specify the upper left corner.