@itwin/core-frontend 3.6.0-dev.1 → 3.6.0-dev.11

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 (40) hide show
  1. package/CHANGELOG.md +21 -1
  2. package/lib/cjs/EnvironmentDecorations.d.ts +4 -4
  3. package/lib/cjs/EnvironmentDecorations.d.ts.map +1 -1
  4. package/lib/cjs/EnvironmentDecorations.js +69 -52
  5. package/lib/cjs/EnvironmentDecorations.js.map +1 -1
  6. package/lib/cjs/GraphicalEditingScope.d.ts.map +1 -1
  7. package/lib/cjs/GraphicalEditingScope.js +8 -2
  8. package/lib/cjs/GraphicalEditingScope.js.map +1 -1
  9. package/lib/cjs/SelectionSet.d.ts.map +1 -1
  10. package/lib/cjs/SelectionSet.js +3 -1
  11. package/lib/cjs/SelectionSet.js.map +1 -1
  12. package/lib/cjs/Viewport.d.ts.map +1 -1
  13. package/lib/cjs/Viewport.js +14 -11
  14. package/lib/cjs/Viewport.js.map +1 -1
  15. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +1 -1
  16. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  17. package/lib/cjs/tile/map/WmtsCapabilities.d.ts +23 -68
  18. package/lib/cjs/tile/map/WmtsCapabilities.d.ts.map +1 -1
  19. package/lib/cjs/tile/map/WmtsCapabilities.js +269 -260
  20. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  21. package/lib/esm/EnvironmentDecorations.d.ts +4 -4
  22. package/lib/esm/EnvironmentDecorations.d.ts.map +1 -1
  23. package/lib/esm/EnvironmentDecorations.js +69 -52
  24. package/lib/esm/EnvironmentDecorations.js.map +1 -1
  25. package/lib/esm/GraphicalEditingScope.d.ts.map +1 -1
  26. package/lib/esm/GraphicalEditingScope.js +8 -2
  27. package/lib/esm/GraphicalEditingScope.js.map +1 -1
  28. package/lib/esm/SelectionSet.d.ts.map +1 -1
  29. package/lib/esm/SelectionSet.js +3 -1
  30. package/lib/esm/SelectionSet.js.map +1 -1
  31. package/lib/esm/Viewport.d.ts.map +1 -1
  32. package/lib/esm/Viewport.js +14 -11
  33. package/lib/esm/Viewport.js.map +1 -1
  34. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +2 -2
  35. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  36. package/lib/esm/tile/map/WmtsCapabilities.d.ts +23 -68
  37. package/lib/esm/tile/map/WmtsCapabilities.d.ts.map +1 -1
  38. package/lib/esm/tile/map/WmtsCapabilities.js +268 -259
  39. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  40. package/package.json +22 -23
@@ -1 +1 @@
1
- {"version":3,"file":"WmtsCapabilities.js","sourceRoot":"","sources":["../../../../src/tile/map/WmtsCapabilities.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 Views\r\n */\r\n\r\nimport { Point2d, Range2d } from \"@itwin/core-geometry\";\r\nimport { request, RequestBasicCredentials, RequestOptions } from \"../../request/Request\";\r\nimport { xml2json } from \"xml-js\";\r\nimport { MapCartoRectangle, WmsUtilities } from \"../internal\"; // WmsUtilities needed for getBaseUrl\r\n\r\n/**\r\n * fetch XML from HTTP request\r\n * @param url server URL to address the request\r\n * @internal\r\n */\r\nasync function getXml(url: string, credentials?: RequestBasicCredentials): Promise<any> {\r\n const options: RequestOptions = {\r\n method: \"GET\",\r\n responseType: \"text\",\r\n timeout: { response: 20000 },\r\n retries: 2,\r\n auth: credentials,\r\n };\r\n const data = await request(url, options);\r\n return data.text;\r\n}\r\n\r\n/** Encapsulation of the capabilities for an WMTS server\r\n * @internal\r\n */\r\nexport namespace WmtsCapability {\r\n\r\n export abstract class OwsConstants {\r\n // OWS xml tag names\r\n public static readonly ABSTRACT_XMLTAG = \"ows:Abstract\";\r\n public static readonly ACCESSCONSTRAINTS_XMLTAG = \"ows:AccessConstraints\";\r\n public static readonly ALLOWEDVALUES_XMLTAG = \"ows:AllowedValues\";\r\n public static readonly BOUNDINGBOX_XMLTAG = \"ows:BoundingBox\";\r\n public static readonly CONSTRAINT_XMLTAG = \"ows:Constraint\";\r\n public static readonly DCP_XMLTAG = \"ows:DCP\";\r\n public static readonly FEES_XMLTAG = \"ows:Fees\";\r\n public static readonly GET_XMLTAG = \"ows:Get\";\r\n public static readonly HTTP_XMLTAG = \"ows:HTTP\";\r\n public static readonly IDENTIFIER_XMLTAG = \"ows:Identifier\";\r\n public static readonly KEYWORDS_XMLTAG = \"ows:Keywords\";\r\n public static readonly KEYWORD_XMLTAG = \"ows:Keyword\";\r\n public static readonly LOWERCORNER_XMLTAG = \"ows:LowerCorner\";\r\n public static readonly OPERATION_XMLTAG = \"ows:Operation\";\r\n public static readonly OPERATIONSMETADATA_XMLTAG = \"ows:OperationsMetadata\";\r\n public static readonly POST_XMLTAG = \"ows:Post\";\r\n public static readonly SERVICEIDENTIFICATION_XMLTAG = \"ows:ServiceIdentification\";\r\n public static readonly SERVICETYPE_XMLTAG = \"ows:ServiceType\";\r\n public static readonly SERVICETYPEVERSION_XMLTAG = \"ows:ServiceTypeVersion\";\r\n public static readonly SUPPORTEDCRS_XMLTAG = \"ows:SupportedCRS\";\r\n public static readonly TITLE_XMLTAG = \"ows:Title\";\r\n public static readonly UPPERCORNER_XMLTAG = \"ows:UpperCorner\";\r\n public static readonly VALUE_XMLTAG = \"ows:Value\";\r\n public static readonly WGS84BOUNDINGBOX_XMLTAG = \"ows:WGS84BoundingBox\";\r\n }\r\n\r\n export abstract class XmlConstants {\r\n // Operations names\r\n public static readonly GETCAPABILITIES = \"GetCapabilities\";\r\n public static readonly GETTILE = \"GetTile\";\r\n public static readonly GETFEATUREINFO = \"GetFeatureInfo\";\r\n\r\n public static readonly MATRIXWIDTH_XMLTAG = \"MatrixWidth\";\r\n public static readonly MATRIXHEIGHT_XMLTAG = \"MatrixHeight\";\r\n public static readonly SCALEDENOMINATOR_XMLTAG = \"ScaleDenominator\";\r\n\r\n public static readonly TILEHEIGHT_XMLTAG = \"TileHeight\";\r\n public static readonly TILEMATRIX_XMLTAG = \"TileMatrix\";\r\n public static readonly TILEMATRIXSETLINK_XMLTAG = \"TileMatrixSetLink\";\r\n public static readonly TILEWIDTH_XMLTAG = \"TileWidth\";\r\n public static readonly TOPLEFTCORNER_XMLTAG = \"TopLeftCorner\";\r\n public static readonly WELLKNOWNSCALESET_XMLTAG = \"WellKnownScaleSet\";\r\n\r\n public static readonly CONSTRAINT_NAME_FILTER = \"Encoding\";\r\n public static readonly STYLE_ISDEFAULT = \"IsDefault\";\r\n public static readonly XLINK_HREF = \"xlink:href\";\r\n }\r\n\r\n export abstract class Constants {\r\n public static readonly GOOGLEMAPS_LEVEL0_SCALE_DENOM = 559082264.0287178;\r\n public static readonly GOOGLEMAPS_COMPATIBLE_WELLKNOWNNAME = \"googlemapscompatible\";\r\n }\r\n\r\n export class ServiceIdentification {\r\n public readonly abstract?: string;\r\n public readonly accessConstraints?: string;\r\n public readonly fees?: string;\r\n public readonly serviceType?: string;\r\n public readonly serviceTypeVersion?: string;\r\n public readonly title?: string;\r\n public readonly keywords?: string[];\r\n\r\n constructor(json: any) {\r\n this.abstract = json[OwsConstants.ABSTRACT_XMLTAG]?._text;\r\n this.serviceType = json[OwsConstants.SERVICETYPE_XMLTAG]?._text;\r\n this.serviceTypeVersion = json[OwsConstants.SERVICETYPEVERSION_XMLTAG]?._text;\r\n this.title = json[OwsConstants.TITLE_XMLTAG]?._text;\r\n\r\n const keywords = json[OwsConstants.KEYWORDS_XMLTAG]?.[OwsConstants.KEYWORD_XMLTAG];\r\n if (keywords !== undefined) {\r\n this.keywords = [];\r\n\r\n if (Array.isArray(keywords)) {\r\n for (const keyword of keywords) {\r\n if (keyword !== undefined) {\r\n this.keywords.push(keyword._text);\r\n }\r\n }\r\n } else {\r\n this.keywords.push(keywords._text);\r\n }\r\n }\r\n\r\n this.accessConstraints = json[OwsConstants.ACCESSCONSTRAINTS_XMLTAG]?._text;\r\n this.fees = json[OwsConstants.FEES_XMLTAG]?._text;\r\n }\r\n }\r\n\r\n export class OperationMetadata {\r\n private _getCapabilities?: Operation;\r\n public get getCapabilities(): Operation | undefined { return this._getCapabilities; }\r\n\r\n private _getFeatureInfo?: Operation;\r\n public get getFeatureInfo(): Operation | undefined { return this._getFeatureInfo; }\r\n\r\n private _getTile?: Operation;\r\n public get getTile(): Operation | undefined { return this._getTile; }\r\n\r\n private readOperation(op: any) {\r\n if (op?._attributes?.name === XmlConstants.GETCAPABILITIES)\r\n this._getCapabilities = new Operation(op);\r\n else if (op?._attributes?.name === XmlConstants.GETTILE)\r\n this._getTile = new Operation(op);\r\n else if (op?._attributes?.name === XmlConstants.GETFEATUREINFO)\r\n this._getFeatureInfo = new Operation(op);\r\n }\r\n\r\n constructor(json: any) {\r\n const operation = (json ? json[OwsConstants.OPERATION_XMLTAG] : undefined);\r\n if (operation) {\r\n if (Array.isArray(operation)) {\r\n operation.forEach((op: any) => {\r\n this.readOperation(op);\r\n });\r\n } else {\r\n this.readOperation(operation);\r\n }\r\n }\r\n }\r\n }\r\n\r\n export class HttpDcp {\r\n public readonly url?: string;\r\n public readonly constraintName?: string;\r\n\r\n // For simplicity of use we create a 'static' encoding property instead of having\r\n // a generic constraint data model.\r\n // We make sure the constraint name is 'encoding' related.\r\n public readonly encoding?: string;\r\n\r\n constructor(json: any) {\r\n this.url = json?._attributes[XmlConstants.XLINK_HREF];\r\n this.constraintName = (json ? json[OwsConstants.CONSTRAINT_XMLTAG]?._attributes?.name : undefined);\r\n if (this.constraintName?.endsWith(XmlConstants.CONSTRAINT_NAME_FILTER))\r\n this.encoding = json[OwsConstants.CONSTRAINT_XMLTAG]?.[OwsConstants.ALLOWEDVALUES_XMLTAG]?.[OwsConstants.VALUE_XMLTAG]?._text;\r\n }\r\n }\r\n\r\n export class Operation {\r\n public readonly name?: string;\r\n private _getDcpHttp?: HttpDcp[];\r\n public get getDcpHttp(): HttpDcp[] | undefined { return this._getDcpHttp; }\r\n private _postDcpHttp?: HttpDcp[];\r\n public get postDcpHttp(): HttpDcp[] | undefined { return this._postDcpHttp; }\r\n\r\n constructor(json: any) {\r\n this.name = json?._attributes?.name;\r\n\r\n const dcpHttp = (json ? json[OwsConstants.DCP_XMLTAG]?.[OwsConstants.HTTP_XMLTAG] : undefined);\r\n if (!dcpHttp)\r\n return;\r\n\r\n const get = dcpHttp[OwsConstants.GET_XMLTAG];\r\n if (get) {\r\n this._getDcpHttp = [];\r\n\r\n if (Array.isArray(get)) {\r\n get.forEach((getItem: any) => {\r\n this._getDcpHttp?.push(new WmtsCapability.HttpDcp(getItem));\r\n });\r\n } else {\r\n this._getDcpHttp?.push(new WmtsCapability.HttpDcp(get));\r\n }\r\n }\r\n\r\n const post = dcpHttp[OwsConstants.POST_XMLTAG];\r\n if (post) {\r\n this._postDcpHttp = [];\r\n\r\n if (Array.isArray(post)) {\r\n post.forEach((postItem: any) => {\r\n this._postDcpHttp?.push(new WmtsCapability.HttpDcp(postItem));\r\n });\r\n } else {\r\n this._postDcpHttp?.push(new WmtsCapability.HttpDcp(post));\r\n }\r\n }\r\n }\r\n }\r\n\r\n export class Contents {\r\n public readonly layers: WmtsCapability.Layer[] = [];\r\n public readonly tileMatrixSets: WmtsCapability.TileMatrixSet[] = [];\r\n\r\n constructor(private _json: any) {\r\n\r\n // Layers\r\n const jsonLayer = _json?.Layer;\r\n if (jsonLayer) {\r\n if (Array.isArray(jsonLayer)) {\r\n jsonLayer.forEach((layer: any) => {\r\n this.layers.push(new WmtsCapability.Layer(layer));\r\n });\r\n } else {\r\n this.layers.push(new WmtsCapability.Layer(jsonLayer));\r\n }\r\n }\r\n\r\n // TileMatrixSet\r\n const jsonTileMatrixSet = _json?.TileMatrixSet;\r\n if (jsonTileMatrixSet) {\r\n if (Array.isArray(jsonTileMatrixSet)) {\r\n jsonTileMatrixSet.forEach((matrixSet: any) => {\r\n this.tileMatrixSets.push(new WmtsCapability.TileMatrixSet(matrixSet));\r\n });\r\n } else {\r\n this.tileMatrixSets.push(new WmtsCapability.TileMatrixSet(jsonTileMatrixSet));\r\n }\r\n }\r\n }\r\n\r\n public getGoogleMapsCompatibleTileMatrixSet(): WmtsCapability.TileMatrixSet[] {\r\n const googleMapsTms: WmtsCapability.TileMatrixSet[] = [];\r\n this.tileMatrixSets.forEach((tms) => {\r\n if (tms.wellKnownScaleSet?.toLowerCase().includes(Constants.GOOGLEMAPS_COMPATIBLE_WELLKNOWNNAME))\r\n googleMapsTms.push(tms);\r\n\r\n // In case wellKnownScaleSet was not been set properly, infer from scaleDenominator\r\n // Note: some servers are quite inaccurate in their scale values, hence I used a delta value of 1.\r\n else if (tms.tileMatrix.length > 0\r\n && Math.abs(tms.tileMatrix[0].scaleDenominator - Constants.GOOGLEMAPS_LEVEL0_SCALE_DENOM) < 1\r\n && (tms.supportedCrs.includes(\"3857\") || tms.supportedCrs.includes(\"900913\")))\r\n googleMapsTms.push(tms);\r\n });\r\n return googleMapsTms;\r\n }\r\n\r\n public getEpsg4326CompatibleTileMatrixSet(): WmtsCapability.TileMatrixSet[] {\r\n return this.tileMatrixSets.filter((tms) => tms.supportedCrs.includes(\"4326\"));\r\n }\r\n }\r\n\r\n export class Style {\r\n public readonly isDefault: boolean = false;\r\n public readonly title?: string;\r\n public readonly identifier?: string;\r\n // TODO: LegendURL\r\n\r\n constructor(private _json: any) {\r\n if (!_json)\r\n return;\r\n\r\n if (_json._attributes?.isDefault)\r\n this.isDefault = _json._attributes.isDefault.toLowerCase() === \"true\";\r\n\r\n this.title = _json[OwsConstants.TITLE_XMLTAG]?._text;\r\n this.identifier = _json[OwsConstants.IDENTIFIER_XMLTAG]?._text;\r\n }\r\n }\r\n export class BoundingBox {\r\n public readonly crs?: string;\r\n public readonly range?: Range2d;\r\n\r\n constructor(_json: any) {\r\n this.crs = _json._attributes?.crs;\r\n const lowerCorner = _json[OwsConstants.LOWERCORNER_XMLTAG]?._text?.split(\" \").map((x: string) => +x);\r\n const upperCorner = _json[OwsConstants.UPPERCORNER_XMLTAG]?._text?.split(\" \").map((x: string) => +x);\r\n if (lowerCorner.length === 2 && upperCorner.length === 2)\r\n this.range = Range2d.createXYXY(lowerCorner[0], lowerCorner[1], upperCorner[0], upperCorner[1]);\r\n }\r\n }\r\n\r\n export class TileMatrixSetLimits {\r\n public limits?: Range2d;\r\n public tileMatrix?: string;\r\n\r\n constructor(_json: any) {\r\n this.tileMatrix = _json.TileMatrix;\r\n if (_json.MinTileRow !== undefined && _json.MaxTileRow !== undefined && _json.MinTileCol !== undefined && _json.MaxTileCol)\r\n this.limits = Range2d.createXYXY(Number(_json.MinTileCol._text), Number(_json.MinTileRow._text), Number(_json.MaxTileCol._text), Number(_json.MaxTileRow._text));\r\n }\r\n }\r\n\r\n export class TileMatrixSetLink {\r\n public readonly tileMatrixSet: string;\r\n public readonly tileMatrixSetLimits = new Array<TileMatrixSetLimits>();\r\n\r\n constructor(_json: any) {\r\n this.tileMatrixSet = (_json?.TileMatrixSet?._text ? _json.TileMatrixSet._text : \"\");\r\n const tileMatrixLimits = _json?.TileMatrixSetLimits?.TileMatrixLimits;\r\n if (Array.isArray(tileMatrixLimits))\r\n tileMatrixLimits.forEach((tml: any) => this.tileMatrixSetLimits.push(new TileMatrixSetLimits(tml)));\r\n }\r\n }\r\n\r\n export class TileMatrixSet {\r\n public readonly identifier: string;\r\n public readonly title?: string;\r\n public readonly abstract?: string;\r\n public readonly supportedCrs: string;\r\n public readonly wellKnownScaleSet: string;\r\n public readonly tileMatrix: TileMatrix[] = [];\r\n\r\n constructor(_json: any) {\r\n this.identifier = _json[OwsConstants.IDENTIFIER_XMLTAG]?._text;\r\n if (!this.identifier)\r\n throw new Error(\"No Identifier found.\");\r\n\r\n this.title = _json[OwsConstants.TITLE_XMLTAG]?._text;\r\n this.abstract = _json[OwsConstants.ABSTRACT_XMLTAG]?._text;\r\n this.supportedCrs = _json[OwsConstants.SUPPORTEDCRS_XMLTAG]?._text;\r\n if (!this.supportedCrs)\r\n throw new Error(\"No supported CRS found.\");\r\n\r\n this.wellKnownScaleSet = _json[XmlConstants.WELLKNOWNSCALESET_XMLTAG]?._text;\r\n\r\n // TileMatrix:\r\n // TileMatrix is mandatory on TileMatrixSet, if it doesn't exists, something is OFF with the capability.\r\n const tileMatrix = _json[XmlConstants.TILEMATRIX_XMLTAG];\r\n if (!tileMatrix)\r\n throw new Error(\"No matrix set link found for WMTS layer\");\r\n\r\n if (Array.isArray(tileMatrix)) {\r\n tileMatrix.forEach((tm: any) => {\r\n this.tileMatrix.push(new TileMatrix(tm));\r\n });\r\n } else {\r\n this.tileMatrix.push(new TileMatrix(tileMatrix));\r\n }\r\n }\r\n }\r\n\r\n export class TileMatrix {\r\n public readonly identifier: string;\r\n public readonly title?: string;\r\n public readonly abstract?: string;\r\n public readonly scaleDenominator: number;\r\n public readonly topLeftCorner: Point2d;\r\n public readonly tileWidth: number;\r\n public readonly tileHeight: number;\r\n public readonly matrixWidth: number;\r\n public readonly matrixHeight: number;\r\n\r\n constructor(_json: any) {\r\n if (!_json)\r\n throw new Error(\"Invalid json data provided\");\r\n\r\n this.identifier = _json[OwsConstants.IDENTIFIER_XMLTAG]?._text;\r\n if (!this.identifier)\r\n throw new Error(\"No Identifier found.\");\r\n\r\n this.title = _json[OwsConstants.TITLE_XMLTAG]?._text;\r\n this.abstract = _json[OwsConstants.ABSTRACT_XMLTAG]?._text;\r\n\r\n // Scale denominator\r\n const scaleDenomStr = _json[XmlConstants.SCALEDENOMINATOR_XMLTAG]?._text;\r\n if (!scaleDenomStr)\r\n throw new Error(\"No scale denominator found on TileMatrix.\");\r\n this.scaleDenominator = +scaleDenomStr;\r\n\r\n // Top left corner\r\n const topLeftCorner = _json[XmlConstants.TOPLEFTCORNER_XMLTAG]?._text?.split(\" \").map((x: string) => +x);\r\n if (topLeftCorner?.length !== 2)\r\n throw new Error(\"No TopLeftCorner found on TileMatrix.\");\r\n this.topLeftCorner = Point2d.create(topLeftCorner[0], topLeftCorner[1]);\r\n\r\n // Tile Width\r\n const tileWidthStr = _json[XmlConstants.TILEWIDTH_XMLTAG]?._text;\r\n if (!tileWidthStr)\r\n throw new Error(\"No tile width found on TileMatrix.\");\r\n this.tileWidth = +tileWidthStr;\r\n\r\n // Tile Height\r\n const tileHeightStr = _json[XmlConstants.TILEHEIGHT_XMLTAG]?._text;\r\n if (!tileHeightStr)\r\n throw new Error(\"No tile eight found on TileMatrix.\");\r\n this.tileHeight = +tileHeightStr;\r\n\r\n // Matrix Width\r\n const matrixWidthStr = _json[XmlConstants.MATRIXWIDTH_XMLTAG]?._text;\r\n if (!matrixWidthStr)\r\n throw new Error(\"No tile width found on TileMatrix.\");\r\n this.matrixWidth = +matrixWidthStr;\r\n\r\n // Matrix Height\r\n const matrixHeightStr = _json[XmlConstants.MATRIXHEIGHT_XMLTAG]?._text;\r\n if (!matrixHeightStr)\r\n throw new Error(\"No tile eight found on TileMatrix.\");\r\n this.matrixHeight = +matrixHeightStr;\r\n }\r\n }\r\n\r\n export class Layer {\r\n public readonly identifier: string;\r\n public readonly title?: string;\r\n public readonly abstract?: string;\r\n public readonly format?: string;\r\n public readonly wsg84BoundingBox?: MapCartoRectangle;\r\n public readonly boundingBox?: BoundingBox;\r\n public readonly styles: Style[] = [];\r\n public readonly tileMatrixSetLinks: TileMatrixSetLink[] = [];\r\n\r\n constructor(_json: any) {\r\n if (!_json)\r\n throw new Error(\"Invalid json data provided\");\r\n\r\n this.identifier = _json[OwsConstants.IDENTIFIER_XMLTAG]?._text;\r\n this.title = _json[OwsConstants.TITLE_XMLTAG]?._text;\r\n this.format = _json.Format?._text;\r\n\r\n // BoundingBox\r\n this.boundingBox = (_json[OwsConstants.BOUNDINGBOX_XMLTAG] ? new BoundingBox(_json[OwsConstants.BOUNDINGBOX_XMLTAG]) : undefined);\r\n\r\n // WSG84 BoundingBox\r\n const lowerCorner = _json[OwsConstants.WGS84BOUNDINGBOX_XMLTAG]?.[OwsConstants.LOWERCORNER_XMLTAG]?._text?.split(\" \").map((x: string) => +x);\r\n const upperCorner = _json[OwsConstants.WGS84BOUNDINGBOX_XMLTAG]?.[OwsConstants.UPPERCORNER_XMLTAG]?._text?.split(\" \").map((x: string) => +x);\r\n if (lowerCorner?.length === 2 && upperCorner?.length === 2)\r\n this.wsg84BoundingBox = MapCartoRectangle.fromDegrees(lowerCorner[0], lowerCorner[1], upperCorner[0], upperCorner[1]);\r\n\r\n // If we could not initialized WSG84 bounding box, attempt to initialized it from Bounding Box\r\n if (!this.wsg84BoundingBox && (this.boundingBox?.crs?.includes(\"EPSG:4326\") || this.boundingBox?.crs?.includes(\"CRS:84\"))) {\r\n const range = this.boundingBox.range;\r\n if (range)\r\n this.wsg84BoundingBox = MapCartoRectangle.fromDegrees(range.low.x, range.low.y, range.high.x, range.high.y);\r\n else\r\n this.wsg84BoundingBox = MapCartoRectangle.createMaximum();\r\n }\r\n\r\n // Style\r\n if (Array.isArray(_json.Style)) {\r\n _json.Style.forEach((style: any) => {\r\n this.styles.push(new Style(style));\r\n });\r\n } else if (_json.Style) {\r\n this.styles.push(new Style(_json.Style));\r\n }\r\n\r\n // TileMatrixSetLink\r\n // TileMatrixSetLink is mandatory on Layer, if it doesn't exists, something is OFF with the capability.\r\n const tileMatrixSetLink = _json[XmlConstants.TILEMATRIXSETLINK_XMLTAG];\r\n\r\n if (!tileMatrixSetLink)\r\n throw new Error(\"No matrix set link found for WMTS layer\");\r\n\r\n if (Array.isArray(tileMatrixSetLink)) {\r\n tileMatrixSetLink.forEach((tmsl: any) => {\r\n this.tileMatrixSetLinks.push(new TileMatrixSetLink(tmsl));\r\n });\r\n } else {\r\n this.tileMatrixSetLinks.push(new TileMatrixSetLink(tileMatrixSetLink));\r\n }\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class WmtsCapabilities {\r\n private static _capabilitiesCache = new Map<string, WmtsCapabilities | undefined>();\r\n\r\n public get json() { return this._json; }\r\n\r\n public readonly version?: string;\r\n public readonly serviceIdentification?: WmtsCapability.ServiceIdentification;\r\n public readonly contents?: WmtsCapability.Contents;\r\n\r\n public readonly operationsMetadata?: WmtsCapability.OperationMetadata;\r\n\r\n constructor(private _json: any) {\r\n // Capabilities version\r\n this.version = _json?.Capabilities?._attributes.version;\r\n\r\n // Service Identification\r\n if (_json?.Capabilities?.[WmtsCapability.OwsConstants.SERVICEIDENTIFICATION_XMLTAG])\r\n this.serviceIdentification = new WmtsCapability.ServiceIdentification(_json?.Capabilities?.[WmtsCapability.OwsConstants.SERVICEIDENTIFICATION_XMLTAG]);\r\n\r\n // Operations metadata\r\n if (_json?.Capabilities?.[WmtsCapability.OwsConstants.OPERATIONSMETADATA_XMLTAG])\r\n this.operationsMetadata = new WmtsCapability.OperationMetadata(_json?.Capabilities?.[WmtsCapability.OwsConstants.OPERATIONSMETADATA_XMLTAG]);\r\n\r\n // Contents\r\n if (_json.Capabilities?.Contents)\r\n this.contents = new WmtsCapability.Contents(_json.Capabilities?.Contents);\r\n }\r\n\r\n public static createFromXml(xmlCapabilities: string): WmtsCapabilities | undefined {\r\n const jsonCapabilities = xml2json(xmlCapabilities, { compact: true, nativeType: false, ignoreComment: true });\r\n const capabilities = JSON.parse(jsonCapabilities);\r\n return new WmtsCapabilities(capabilities);\r\n }\r\n\r\n public static async create(url: string, credentials?: RequestBasicCredentials, ignoreCache?: boolean): Promise<WmtsCapabilities | undefined> {\r\n if (!ignoreCache) {\r\n const cached = WmtsCapabilities._capabilitiesCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n }\r\n\r\n const xmlCapabilities = await getXml(`${WmsUtilities.getBaseUrl(url)}?request=GetCapabilities&service=WMTS`, credentials);\r\n\r\n if (!xmlCapabilities)\r\n return undefined;\r\n\r\n const capabilities = WmtsCapabilities.createFromXml(xmlCapabilities);\r\n if (capabilities)\r\n WmtsCapabilities._capabilitiesCache.set(url, capabilities);\r\n\r\n return capabilities;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"WmtsCapabilities.js","sourceRoot":"","sources":["../../../../src/tile/map/WmtsCapabilities.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 Views\r\n */\r\n\r\nimport { Point2d, Range2d } from \"@itwin/core-geometry\";\r\nimport { request, RequestBasicCredentials, RequestOptions } from \"../../request/Request\";\r\nimport { MapCartoRectangle, WmsUtilities } from \"../internal\"; // WmsUtilities needed for getBaseUrl\r\n\r\nenum OwsConstants {\r\n ABSTRACT_XMLTAG = \"ows:Abstract\",\r\n ACCESSCONSTRAINTS_XMLTAG = \"ows:AccessConstraints\",\r\n ALLOWEDVALUES_XMLTAG = \"ows:AllowedValues\",\r\n BOUNDINGBOX_XMLTAG = \"ows:BoundingBox\",\r\n CONSTRAINT_XMLTAG = \"ows:Constraint\",\r\n DCP_XMLTAG = \"ows:DCP\",\r\n FEES_XMLTAG = \"ows:Fees\",\r\n GET_XMLTAG = \"ows:Get\",\r\n HTTP_XMLTAG = \"ows:HTTP\",\r\n IDENTIFIER_XMLTAG = \"ows:Identifier\",\r\n KEYWORDS_XMLTAG = \"ows:Keywords\",\r\n KEYWORD_XMLTAG = \"ows:Keyword\",\r\n LOWERCORNER_XMLTAG = \"ows:LowerCorner\",\r\n OPERATION_XMLTAG = \"ows:Operation\",\r\n OPERATIONSMETADATA_XMLTAG = \"ows:OperationsMetadata\",\r\n POST_XMLTAG = \"ows:Post\",\r\n SERVICEIDENTIFICATION_XMLTAG = \"ows:ServiceIdentification\",\r\n SERVICETYPE_XMLTAG = \"ows:ServiceType\",\r\n SERVICETYPEVERSION_XMLTAG = \"ows:ServiceTypeVersion\",\r\n SUPPORTEDCRS_XMLTAG = \"ows:SupportedCRS\",\r\n TITLE_XMLTAG = \"ows:Title\",\r\n UPPERCORNER_XMLTAG = \"ows:UpperCorner\",\r\n VALUE_XMLTAG = \"ows:Value\",\r\n WGS84BOUNDINGBOX_XMLTAG = \"ows:WGS84BoundingBox\"\r\n\r\n}\r\n\r\nenum XmlConstants {\r\n // Operations names\r\n GETCAPABILITIES = \"GetCapabilities\",\r\n GETTILE = \"GetTile\",\r\n GETFEATUREINFO = \"GetFeatureInfo\",\r\n\r\n MATRIXWIDTH_XMLTAG = \"MatrixWidth\",\r\n MATRIXHEIGHT_XMLTAG = \"MatrixHeight\",\r\n SCALEDENOMINATOR_XMLTAG = \"ScaleDenominator\",\r\n\r\n TILEHEIGHT_XMLTAG = \"TileHeight\",\r\n TILEMATRIX_XMLTAG = \"TileMatrix\",\r\n TILEMATRIXSETLINK_XMLTAG = \"TileMatrixSetLink\",\r\n TILEWIDTH_XMLTAG = \"TileWidth\",\r\n TOPLEFTCORNER_XMLTAG = \"TopLeftCorner\",\r\n WELLKNOWNSCALESET_XMLTAG = \"WellKnownScaleSet\",\r\n\r\n CONSTRAINT_NAME_FILTER = \"Encoding\",\r\n STYLE_ISDEFAULT = \"IsDefault\",\r\n XLINK_HREF = \"xlink:href\",\r\n}\r\n\r\n/** @internal\r\n*/\r\nexport enum WmtsConstants {\r\n GOOGLEMAPS_LEVEL0_SCALE_DENOM = 559082264.0287178,\r\n GOOGLEMAPS_COMPATIBLE_WELLKNOWNNAME = \"googlemapscompatible\",\r\n}\r\n\r\n/**\r\n * fetch XML from HTTP request\r\n * @param url server URL to address the request\r\n * @internal\r\n */\r\nasync function getXml(url: string, credentials?: RequestBasicCredentials): Promise<string|undefined> {\r\n const options: RequestOptions = {\r\n method: \"GET\",\r\n responseType: \"text\",\r\n timeout: { response: 20000 },\r\n retries: 2,\r\n auth: credentials,\r\n };\r\n const data = await request(url, options);\r\n return data.text;\r\n}\r\n\r\n/**\r\n * Utility function to extract an element' text content\r\n * @return An element's text content, default to provided defaultTest value if no text is available.\r\n * @param url server URL to address the request\r\n * @internal\r\n */\r\nconst getElementTextContent = (elem: Element, qualifiedName: string, defaultText?: string) => {\r\n\r\n const tmpElem = elem.getElementsByTagName(qualifiedName);\r\n if (tmpElem.length > 0) {\r\n return tmpElem[0].textContent ?? defaultText;\r\n } else\r\n return defaultText;\r\n\r\n};\r\n\r\n/** Encapsulation of the capabilities for an WMTS server\r\n * @internal\r\n */\r\nexport namespace WmtsCapability {\r\n export class ServiceIdentification {\r\n public readonly abstract?: string;\r\n public readonly accessConstraints?: string;\r\n public readonly fees?: string;\r\n public readonly serviceType?: string;\r\n public readonly serviceTypeVersion?: string;\r\n public readonly title?: string;\r\n public readonly keywords?: string[];\r\n\r\n constructor(elem: Element) {\r\n this.abstract = getElementTextContent(elem, OwsConstants.ABSTRACT_XMLTAG);\r\n this.serviceType = getElementTextContent(elem, OwsConstants.SERVICETYPE_XMLTAG);\r\n this.serviceTypeVersion = getElementTextContent(elem, OwsConstants.SERVICETYPEVERSION_XMLTAG);\r\n this.title = getElementTextContent(elem, OwsConstants.TITLE_XMLTAG);\r\n\r\n const keywords = elem.getElementsByTagName(OwsConstants.KEYWORDS_XMLTAG);\r\n if (keywords.length > 0) {\r\n const keyword = keywords[0].getElementsByTagName(OwsConstants.KEYWORD_XMLTAG);\r\n this.keywords = [];\r\n for (const keyworkElem of keyword) {\r\n const keyWordText = keyworkElem.textContent;\r\n if (keyWordText)\r\n this.keywords.push(keyWordText);\r\n }\r\n }\r\n\r\n this.accessConstraints = getElementTextContent(elem, OwsConstants.ACCESSCONSTRAINTS_XMLTAG);\r\n\r\n this.fees = getElementTextContent(elem, OwsConstants.FEES_XMLTAG);\r\n }\r\n }\r\n\r\n export class OperationMetadata {\r\n private _getCapabilities?: Operation;\r\n public get getCapabilities(): Operation | undefined { return this._getCapabilities; }\r\n\r\n private _getFeatureInfo?: Operation;\r\n public get getFeatureInfo(): Operation | undefined { return this._getFeatureInfo; }\r\n\r\n private _getTile?: Operation;\r\n public get getTile(): Operation | undefined { return this._getTile; }\r\n\r\n private readOperation(op: Element) {\r\n const nameAttr = op.attributes.getNamedItem(\"name\");\r\n if (!nameAttr)\r\n return;\r\n\r\n if (nameAttr.textContent === XmlConstants.GETCAPABILITIES) {\r\n this._getCapabilities = new Operation(op);\r\n } else if (nameAttr.textContent === XmlConstants.GETTILE) {\r\n this._getTile = new Operation(op);\r\n } else if (nameAttr.textContent === XmlConstants.GETFEATUREINFO) {\r\n this._getFeatureInfo = new Operation(op);\r\n }\r\n }\r\n\r\n constructor(elem: Element) {\r\n const operation = elem.getElementsByTagName(OwsConstants.OPERATION_XMLTAG);\r\n if (operation.length > 0) {\r\n for (const op of operation) {\r\n this.readOperation(op);\r\n }\r\n }\r\n }\r\n }\r\n\r\n export class HttpDcp {\r\n public readonly url?: string;\r\n public readonly constraintName?: string;\r\n\r\n // For simplicity of use we create a 'static' encoding property instead of having\r\n // a generic constraint data model.\r\n // We make sure the constraint name is 'encoding' related.\r\n public readonly encoding?: string;\r\n\r\n constructor(elem: Element) {\r\n const url = elem.getAttribute(XmlConstants.XLINK_HREF);\r\n if (url)\r\n this.url = url ?? \"\";\r\n\r\n const constraint = elem.getElementsByTagName(OwsConstants.CONSTRAINT_XMLTAG);\r\n if (constraint.length > 0) {\r\n this.constraintName = constraint[0].getAttribute(\"name\") ?? \"\";\r\n if (this.constraintName?.endsWith(XmlConstants.CONSTRAINT_NAME_FILTER)) {\r\n const allowedValues = constraint[0].getElementsByTagName(OwsConstants.ALLOWEDVALUES_XMLTAG);\r\n if (allowedValues.length > 0) {\r\n this.encoding = getElementTextContent(allowedValues[0], OwsConstants.VALUE_XMLTAG);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n export class Operation {\r\n public readonly name?: string;\r\n private _getDcpHttp?: HttpDcp[];\r\n public get getDcpHttp(): HttpDcp[] | undefined { return this._getDcpHttp; }\r\n private _postDcpHttp?: HttpDcp[];\r\n public get postDcpHttp(): HttpDcp[] | undefined { return this._postDcpHttp; }\r\n\r\n constructor(elem: Element) {\r\n const name = elem.getAttribute(\"name\");\r\n if (name)\r\n this.name = name;\r\n\r\n const dcp = elem.getElementsByTagName(OwsConstants.DCP_XMLTAG);\r\n if (!dcp || dcp.length === 0)\r\n return;\r\n\r\n const dcpHttp = dcp[0].getElementsByTagName(OwsConstants.HTTP_XMLTAG);\r\n if (!dcpHttp || dcpHttp.length === 0)\r\n return;\r\n\r\n const get = dcpHttp[0].getElementsByTagName(OwsConstants.GET_XMLTAG);\r\n if (get.length > 0) {\r\n this._getDcpHttp = [];\r\n\r\n for (const getItem of get) {\r\n this._getDcpHttp?.push(new HttpDcp(getItem));\r\n }\r\n }\r\n\r\n const post = dcpHttp[0].getElementsByTagName(OwsConstants.POST_XMLTAG);\r\n if (post.length > 0) {\r\n this._postDcpHttp = [];\r\n\r\n for (const postItem of post) {\r\n this._postDcpHttp?.push(new HttpDcp(postItem));\r\n }\r\n }\r\n }\r\n }\r\n\r\n export class Contents {\r\n public readonly layers: Layer[] = [];\r\n public readonly tileMatrixSets: TileMatrixSet[] = [];\r\n\r\n constructor(elem: Element) {\r\n // Layers\r\n const layer = elem.getElementsByTagName(\"Layer\");\r\n if (layer) {\r\n for (const layerElem of layer)\r\n this.layers.push(new Layer(layerElem));\r\n }\r\n\r\n // TileMatrixSet\r\n const tms = elem.querySelectorAll(\"Contents > TileMatrixSet\");\r\n if (tms) {\r\n for (const tmsElem of tms)\r\n this.tileMatrixSets.push(new TileMatrixSet(tmsElem));\r\n }\r\n\r\n }\r\n\r\n public getGoogleMapsCompatibleTileMatrixSet(): TileMatrixSet[] {\r\n const googleMapsTms: TileMatrixSet[] = [];\r\n this.tileMatrixSets.forEach((tms) => {\r\n if (tms.wellKnownScaleSet?.toLowerCase().includes(WmtsConstants.GOOGLEMAPS_COMPATIBLE_WELLKNOWNNAME))\r\n googleMapsTms.push(tms);\r\n\r\n // In case wellKnownScaleSet was not been set properly, infer from scaleDenominator\r\n // Note: some servers are quite inaccurate in their scale values, hence I used a delta value of 1.\r\n else if (tms.tileMatrix.length > 0\r\n && Math.abs(tms.tileMatrix[0].scaleDenominator - WmtsConstants.GOOGLEMAPS_LEVEL0_SCALE_DENOM) < 1\r\n && (tms.supportedCrs.includes(\"3857\") || tms.supportedCrs.includes(\"900913\"))\r\n )\r\n googleMapsTms.push(tms);\r\n });\r\n return googleMapsTms;\r\n }\r\n\r\n public getEpsg4326CompatibleTileMatrixSet(): TileMatrixSet[] {\r\n return this.tileMatrixSets.filter((tms) => tms.supportedCrs.includes(\"4326\"));\r\n }\r\n }\r\n\r\n export class Style {\r\n public readonly isDefault: boolean = false;\r\n public readonly title?: string;\r\n public readonly identifier?: string;\r\n // TODO: LegendURL\r\n\r\n constructor(elem: Element) {\r\n if (!elem)\r\n return;\r\n\r\n const isDefault = elem.getAttribute(\"isDefault\");\r\n if (isDefault)\r\n this.isDefault = isDefault.toLowerCase() === \"true\";\r\n\r\n this.title = getElementTextContent(elem, OwsConstants.TITLE_XMLTAG);\r\n this.identifier = getElementTextContent(elem, OwsConstants.IDENTIFIER_XMLTAG);\r\n }\r\n }\r\n\r\n export class BoundingBox {\r\n public readonly crs?: string;\r\n public readonly range?: Range2d;\r\n\r\n constructor(elem: Element) {\r\n this.crs = elem.getAttribute(\"crs\") ?? undefined;\r\n\r\n const lowerCorner = getElementTextContent(elem, OwsConstants.LOWERCORNER_XMLTAG);\r\n const upperCorner = getElementTextContent(elem, OwsConstants.UPPERCORNER_XMLTAG);\r\n if (lowerCorner && upperCorner) {\r\n const lowerCornerArray = lowerCorner?.split(\" \").map((x: string) => +x);\r\n const upperCornerArray = upperCorner?.split(\" \").map((x: string) => +x);\r\n if (lowerCornerArray && lowerCornerArray.length === 2 && upperCornerArray && upperCornerArray.length === 2)\r\n this.range = Range2d.createXYXY(lowerCornerArray[0], lowerCornerArray[1], upperCornerArray[0], upperCornerArray[1]);\r\n }\r\n }\r\n }\r\n\r\n export class TileMatrixSetLimits {\r\n public limits?: Range2d;\r\n public tileMatrix?: string;\r\n\r\n constructor(elem: Element) {\r\n\r\n this.tileMatrix = getElementTextContent(elem, \"TileMatrix\");\r\n\r\n const minTileRow = getElementTextContent(elem, \"MinTileRow\");\r\n const maxTileRow = getElementTextContent(elem, \"MaxTileRow\");\r\n const minTileCol = getElementTextContent(elem, \"MinTileCol\");\r\n const maxTileCol = getElementTextContent(elem, \"MaxTileCol\");\r\n\r\n if (minTileRow !== undefined && maxTileRow !== undefined && minTileCol !== undefined && maxTileCol )\r\n this.limits = Range2d.createXYXY(Number(minTileCol), Number(minTileRow), Number(maxTileCol), Number(maxTileRow));\r\n }\r\n }\r\n\r\n export class TileMatrixSetLink {\r\n public readonly tileMatrixSet: string;\r\n public readonly tileMatrixSetLimits = new Array<TileMatrixSetLimits>();\r\n\r\n constructor(elem: Element) {\r\n\r\n this.tileMatrixSet = getElementTextContent(elem, \"TileMatrixSet\", \"\")!;\r\n\r\n const tileMatrixLimitsRoot = elem.getElementsByTagName(\"TileMatrixSetLimits\");\r\n if (tileMatrixLimitsRoot.length > 0) {\r\n const tileMatrixLimits = tileMatrixLimitsRoot[0].getElementsByTagName(\"TileMatrixSetLimits\");\r\n for (const tmsl of tileMatrixLimits) {\r\n this.tileMatrixSetLimits.push(new TileMatrixSetLimits(tmsl));\r\n }\r\n }\r\n }\r\n }\r\n\r\n export class TileMatrixSet {\r\n public readonly identifier: string;\r\n public readonly title?: string;\r\n public readonly abstract?: string;\r\n public readonly supportedCrs: string;\r\n public readonly wellKnownScaleSet: string;\r\n public readonly tileMatrix: TileMatrix[] = [];\r\n\r\n constructor(elem: Element) {\r\n const identifier = getElementTextContent(elem, OwsConstants.IDENTIFIER_XMLTAG);\r\n if (identifier)\r\n this.identifier = identifier;\r\n else\r\n throw new Error(\"No Identifier found.\");\r\n\r\n this.title = getElementTextContent(elem, OwsConstants.TITLE_XMLTAG);\r\n this.abstract = getElementTextContent(elem, OwsConstants.ABSTRACT_XMLTAG);\r\n\r\n const supportedCrs = getElementTextContent(elem, OwsConstants.SUPPORTEDCRS_XMLTAG);\r\n if (supportedCrs)\r\n this.supportedCrs = supportedCrs;\r\n else\r\n throw new Error(\"No supported CRS found.\");\r\n\r\n this.wellKnownScaleSet = getElementTextContent(elem, XmlConstants.WELLKNOWNSCALESET_XMLTAG, \"\")!;\r\n\r\n // TileMatrix:\r\n // TileMatrix is mandatory on TileMatrixSet, if it doesn't exists, something is OFF with the capability.\r\n const tileMatrix = elem.getElementsByTagName( XmlConstants.TILEMATRIX_XMLTAG);\r\n if (tileMatrix.length === 0)\r\n throw new Error(\"No matrix set link found for WMTS layer\");\r\n\r\n for (const tm of tileMatrix) {\r\n this.tileMatrix.push(new TileMatrix(tm));\r\n }\r\n }\r\n }\r\n\r\n export class TileMatrix {\r\n public readonly identifier: string;\r\n public readonly title?: string;\r\n public readonly abstract?: string;\r\n public readonly scaleDenominator: number;\r\n public readonly topLeftCorner: Point2d;\r\n public readonly tileWidth: number;\r\n public readonly tileHeight: number;\r\n public readonly matrixWidth: number;\r\n public readonly matrixHeight: number;\r\n\r\n constructor(elem: Element) {\r\n const identifier = getElementTextContent(elem, OwsConstants.IDENTIFIER_XMLTAG, \"\");\r\n if (identifier)\r\n this.identifier = identifier;\r\n else\r\n throw new Error(\"No Identifier found.\");\r\n\r\n this.title = getElementTextContent(elem, OwsConstants.TITLE_XMLTAG);\r\n this.abstract = getElementTextContent(elem, OwsConstants.ABSTRACT_XMLTAG);\r\n\r\n // Scale denominator\r\n const scaleDenom = getElementTextContent(elem, XmlConstants.SCALEDENOMINATOR_XMLTAG, \"\");\r\n if (!scaleDenom)\r\n throw new Error(\"No scale denominator found on TileMatrix.\");\r\n this.scaleDenominator = +scaleDenom;\r\n\r\n // Top left corner\r\n const topLeftCorner = getElementTextContent(elem, XmlConstants.TOPLEFTCORNER_XMLTAG, \"\")?.split(\" \").map((x: string) => +x);\r\n if (topLeftCorner?.length !== 2)\r\n throw new Error(\"No TopLeftCorner found on TileMatrix.\");\r\n this.topLeftCorner = Point2d.create(topLeftCorner[0], topLeftCorner[1]);\r\n\r\n // Tile Width\r\n const tileWidth = getElementTextContent(elem, XmlConstants.TILEWIDTH_XMLTAG);\r\n if (!tileWidth)\r\n throw new Error(\"No tile width found on TileMatrix.\");\r\n this.tileWidth = +tileWidth;\r\n\r\n // Tile Height\r\n const tileHeight = getElementTextContent(elem, XmlConstants.TILEHEIGHT_XMLTAG);\r\n if (!tileHeight)\r\n throw new Error(\"No tile height found on TileMatrix.\");\r\n this.tileHeight = +tileHeight;\r\n\r\n // Matrix Width\r\n const matrixWidth = getElementTextContent(elem, XmlConstants.MATRIXWIDTH_XMLTAG);\r\n if (!matrixWidth)\r\n throw new Error(\"No tile width found on TileMatrix.\");\r\n this.matrixWidth = +matrixWidth;\r\n\r\n // Matrix Height\r\n const matrixHeight = getElementTextContent(elem, XmlConstants.MATRIXHEIGHT_XMLTAG);\r\n if (!matrixHeight)\r\n throw new Error(\"No tile height found on TileMatrix.\");\r\n this.matrixHeight = +matrixHeight;\r\n }\r\n }\r\n\r\n export class Layer {\r\n public readonly identifier: string;\r\n public readonly title?: string;\r\n public readonly abstract?: string;\r\n public readonly format?: string;\r\n public readonly wsg84BoundingBox?: MapCartoRectangle;\r\n public readonly boundingBox?: BoundingBox;\r\n public readonly styles: Style[] = [];\r\n public readonly tileMatrixSetLinks: TileMatrixSetLink[] = [];\r\n\r\n constructor(elem: Element) {\r\n\r\n const identifier = getElementTextContent(elem, OwsConstants.IDENTIFIER_XMLTAG, \"\");\r\n if (identifier)\r\n this.identifier = identifier;\r\n else\r\n throw new Error(\"No Identifier found.\");\r\n\r\n this.title = getElementTextContent(elem, OwsConstants.TITLE_XMLTAG);\r\n this.format = getElementTextContent(elem, \"Format\");\r\n\r\n // BoundingBox\r\n const boundingBox = elem.getElementsByTagName(OwsConstants.BOUNDINGBOX_XMLTAG);\r\n if (boundingBox.length > 0 )\r\n this.boundingBox = new BoundingBox(boundingBox[0]);\r\n\r\n let lowerCornerArray: number[]|undefined, upperCornerArray: number[]|undefined;\r\n const bbox = elem.getElementsByTagName(OwsConstants.WGS84BOUNDINGBOX_XMLTAG);\r\n if (bbox.length > 0) {\r\n lowerCornerArray = getElementTextContent(bbox[0], OwsConstants.LOWERCORNER_XMLTAG)?.split(\" \").map((x: string) => +x);\r\n upperCornerArray = getElementTextContent(bbox[0], OwsConstants.UPPERCORNER_XMLTAG)?.split(\" \").map((x: string) => +x);\r\n }\r\n\r\n if (lowerCornerArray?.length === 2 && upperCornerArray?.length === 2)\r\n this.wsg84BoundingBox = MapCartoRectangle.fromDegrees(lowerCornerArray[0], lowerCornerArray[1], upperCornerArray[0], upperCornerArray[1]);\r\n\r\n // If we could not initialized WSG84 bounding box, attempt to initialized it from Bounding Box\r\n if (!this.wsg84BoundingBox && (this.boundingBox?.crs?.includes(\"EPSG:4326\") || this.boundingBox?.crs?.includes(\"CRS:84\"))) {\r\n const range = this.boundingBox.range;\r\n if (range)\r\n this.wsg84BoundingBox = MapCartoRectangle.fromDegrees(range.low.x, range.low.y, range.high.x, range.high.y);\r\n else\r\n this.wsg84BoundingBox = MapCartoRectangle.createMaximum();\r\n }\r\n\r\n // Style\r\n const style = elem.getElementsByTagName(\"Style\");\r\n if (style.length > 0) {\r\n for (const styleElem of style)\r\n this.styles.push(new Style(styleElem));\r\n }\r\n\r\n // TileMatrixSetLink\r\n // TileMatrixSetLink is mandatory on Layer, if it doesn't exists, something is OFF with the capability.\r\n const tileMatrixSetLink = elem.getElementsByTagName( XmlConstants.TILEMATRIXSETLINK_XMLTAG);\r\n\r\n if (tileMatrixSetLink.length === 0)\r\n throw new Error(\"No matrix set link found for WMTS layer\");\r\n\r\n for (const tmsl of tileMatrixSetLink)\r\n this.tileMatrixSetLinks.push(new TileMatrixSetLink(tmsl));\r\n }\r\n }\r\n}\r\n/** @internal */\r\nexport class WmtsCapabilities {\r\n private static _capabilitiesCache = new Map<string, WmtsCapabilities | undefined>();\r\n\r\n public readonly version?: string;\r\n public readonly serviceIdentification?: WmtsCapability.ServiceIdentification;\r\n public readonly contents?: WmtsCapability.Contents;\r\n\r\n public readonly operationsMetadata?: WmtsCapability.OperationMetadata;\r\n\r\n constructor(xmlDoc: Document) {\r\n\r\n const capabilities = xmlDoc.getElementsByTagName(\"Capabilities\");\r\n if (capabilities.length !== 0) {\r\n const capability = capabilities[0];\r\n this.version = capability.getAttribute(\"version\") ?? undefined;\r\n\r\n // Service Identification\r\n const serviceIdentification = capability.getElementsByTagName(OwsConstants.SERVICEIDENTIFICATION_XMLTAG);\r\n if (serviceIdentification.length > 0)\r\n this.serviceIdentification = new WmtsCapability.ServiceIdentification(serviceIdentification[0]);\r\n\r\n // Operations metadata\r\n const operationsMetadata = capability.getElementsByTagName(OwsConstants.OPERATIONSMETADATA_XMLTAG);\r\n if (operationsMetadata.length > 0)\r\n this.operationsMetadata = new WmtsCapability.OperationMetadata(operationsMetadata[0]);\r\n\r\n // Contents\r\n const content = capability.getElementsByTagName(\"Contents\");\r\n if (content.length > 0)\r\n this.contents = new WmtsCapability.Contents(content[0]);\r\n }\r\n }\r\n\r\n public static createFromXml(xmlCapabilities: string): WmtsCapabilities | undefined {\r\n const parser = new DOMParser();\r\n const xmlDoc = parser.parseFromString(xmlCapabilities,\"text/xml\");\r\n return new WmtsCapabilities(xmlDoc);\r\n }\r\n\r\n public static async create(url: string, credentials?: RequestBasicCredentials, ignoreCache?: boolean): Promise<WmtsCapabilities | undefined> {\r\n if (!ignoreCache) {\r\n const cached = WmtsCapabilities._capabilitiesCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n }\r\n\r\n const xmlCapabilities = await getXml(`${WmsUtilities.getBaseUrl(url)}?request=GetCapabilities&service=WMTS`, credentials);\r\n if (!xmlCapabilities)\r\n return undefined;\r\n\r\n const capabilities = WmtsCapabilities.createFromXml(xmlCapabilities);\r\n if (capabilities)\r\n WmtsCapabilities._capabilitiesCache.set(url, capabilities);\r\n\r\n return capabilities;\r\n }\r\n}\r\n"]}
@@ -12,8 +12,8 @@ export interface GroundPlaneDecorations {
12
12
  }
13
13
  /** @internal */
14
14
  export interface SkyBoxDecorations {
15
- params?: RenderSkyBoxParams | undefined;
16
- promise?: Promise<RenderSkyBoxParams | undefined>;
15
+ params?: RenderSkyBoxParams;
16
+ promise?: Promise<boolean>;
17
17
  }
18
18
  /** @internal */
19
19
  export declare class EnvironmentDecorations {
@@ -29,9 +29,9 @@ export declare class EnvironmentDecorations {
29
29
  decorate(context: DecorateContext): void;
30
30
  private loadGround;
31
31
  private createGroundParams;
32
- private loadSky;
32
+ private loadSkyBox;
33
33
  private setSky;
34
- private loadSkyParams;
34
+ private loadSkyBoxParams;
35
35
  private createCubeImageKey;
36
36
  private createSkyGradientParams;
37
37
  private imageFromSpec;
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentDecorations.d.ts","sourceRoot":"","sources":["../../src/EnvironmentDecorations.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACK,WAAW,EAAY,aAAa,EAC/C,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,gBAAgB;AAChB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;CACrC;AAED,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACxC,OAAO,CAAC,EAAE,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAC;CACnD;AAED,gBAAgB;AAChB,qBAAa,sBAAsB;IACjC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;IACzC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAC1C,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,SAAS,CAAC,OAAO,CAAC,EAAE,sBAAsB,CAAC;IAC3C,SAAS,CAAC,IAAI,EAAE,iBAAiB,CAAC;gBAEf,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,SAAS,EAAE,MAAM,IAAI;IAY1E,OAAO,IAAI,IAAI;IAQf,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAmBtC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAoC/C,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,kBAAkB;IAqC1B,OAAO,CAAC,OAAO;IAgBf,OAAO,CAAC,MAAM;YAMA,aAAa;IAyD3B,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,uBAAuB;YAIjB,aAAa;CAM5B"}
1
+ {"version":3,"file":"EnvironmentDecorations.d.ts","sourceRoot":"","sources":["../../src/EnvironmentDecorations.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACK,WAAW,EAAY,aAAa,EAC/C,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,gBAAgB;AAChB,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC;CACrC;AASD,gBAAgB;AAChB,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5B;AAED,gBAAgB;AAChB,qBAAa,sBAAsB;IACjC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IACtC,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;IACzC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAC1C,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC;IACpC,SAAS,CAAC,OAAO,CAAC,EAAE,sBAAsB,CAAC;IAC3C,SAAS,CAAC,IAAI,EAAE,iBAAiB,CAAC;gBAEf,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,EAAE,SAAS,EAAE,MAAM,IAAI;IAY1E,OAAO,IAAI,IAAI;IAOf,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI;IAmBtC,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAoC/C,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,kBAAkB;IAqC1B,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,gBAAgB;IAqExB,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,uBAAuB;YAQjB,aAAa;CAM5B"}
@@ -19,13 +19,13 @@ export class EnvironmentDecorations {
19
19
  this._onLoaded = onLoaded;
20
20
  this._onDispose = onDispose;
21
21
  this._sky = {};
22
- this.loadSky();
22
+ this.loadSkyBox();
23
23
  if (this._environment.displayGround)
24
24
  this.loadGround();
25
25
  }
26
26
  dispose() {
27
27
  this._ground = undefined;
28
- this._sky.promise = this._sky.params = undefined;
28
+ this._sky.params = this._sky.promise = undefined;
29
29
  this._onDispose();
30
30
  }
31
31
  setEnvironment(env) {
@@ -40,7 +40,7 @@ export class EnvironmentDecorations {
40
40
  this.loadGround();
41
41
  // Update sky box
42
42
  if (env.sky !== prev.sky)
43
- this.loadSky();
43
+ this.loadSkyBox();
44
44
  }
45
45
  decorate(context) {
46
46
  const env = this._environment;
@@ -109,82 +109,99 @@ export class EnvironmentDecorations {
109
109
  params.material = material;
110
110
  return params;
111
111
  }
112
- loadSky() {
113
- const promise = this.loadSkyParams();
112
+ loadSkyBox() {
113
+ const loader = this.loadSkyBoxParams();
114
+ if (undefined === loader.preload) {
115
+ this.setSky(loader.load());
116
+ return;
117
+ }
118
+ const promise = loader.preload;
114
119
  this._sky.promise = promise;
115
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
116
- promise.then((params) => {
120
+ loader.preload.then((loaded) => {
117
121
  if (promise === this._sky.promise)
118
- this.setSky(params !== null && params !== void 0 ? params : this.createSkyGradientParams());
119
- });
120
- promise.catch(() => {
121
- if (this._sky.promise === promise)
122
- this.setSky(this.createSkyGradientParams());
122
+ this.setSky(loaded ? loader.load() : undefined);
123
+ }).catch(() => {
124
+ if (promise === this._sky.promise)
125
+ this.setSky(undefined);
123
126
  });
124
127
  }
125
128
  setSky(params) {
126
129
  this._sky.promise = undefined;
127
- this._sky.params = params;
130
+ this._sky.params = params !== null && params !== void 0 ? params : this.createSkyGradientParams();
128
131
  this._onLoaded();
129
132
  }
130
- async loadSkyParams() {
133
+ loadSkyBoxParams() {
134
+ let load;
135
+ let preload;
131
136
  const sky = this._environment.sky;
132
137
  if (sky instanceof SkyCube) {
133
138
  const key = this.createCubeImageKey(sky);
134
- const existingTexture = IModelApp.renderSystem.findTexture(key, this._view.iModel);
135
- if (existingTexture)
136
- return { type: "cube", texture: existingTexture };
137
- // Some faces may use the same image. Only request each image once.
138
- const specs = new Set([sky.images.front, sky.images.back, sky.images.left, sky.images.right, sky.images.top, sky.images.bottom]);
139
- const promises = [];
140
- for (const spec of specs)
141
- promises.push(this.imageFromSpec(spec));
142
- return Promise.all(promises).then((images) => {
143
- const idToImage = new Map();
144
- let index = 0;
145
- for (const spec of specs) {
146
- const image = images[index++];
147
- if (!image)
148
- return undefined;
149
- else
150
- idToImage.set(spec, image);
151
- }
152
- // eslint-disable-next-line deprecation/deprecation
153
- const params = new RenderTexture.Params(key, RenderTexture.Type.SkyBox);
154
- const txImgs = [
155
- idToImage.get(sky.images.front), idToImage.get(sky.images.back), idToImage.get(sky.images.top),
156
- idToImage.get(sky.images.bottom), idToImage.get(sky.images.right), idToImage.get(sky.images.left),
157
- ];
158
- const texture = IModelApp.renderSystem.createTextureFromCubeImages(txImgs[0], txImgs[1], txImgs[2], txImgs[3], txImgs[4], txImgs[5], this._view.iModel, params);
139
+ load = () => {
140
+ const texture = IModelApp.renderSystem.findTexture(key, this._view.iModel);
159
141
  return texture ? { type: "cube", texture } : undefined;
160
- });
142
+ };
143
+ if (!IModelApp.renderSystem.findTexture(key, this._view.iModel)) {
144
+ // Some faces may use the same image. Only request each image once.
145
+ const promises = [];
146
+ const specs = new Set([sky.images.front, sky.images.back, sky.images.left, sky.images.right, sky.images.top, sky.images.bottom]);
147
+ for (const spec of specs)
148
+ promises.push(this.imageFromSpec(spec));
149
+ preload = Promise.all(promises).then((images) => {
150
+ const idToImage = new Map();
151
+ let index = 0;
152
+ for (const spec of specs) {
153
+ const image = images[index++];
154
+ if (!image)
155
+ return false;
156
+ else
157
+ idToImage.set(spec, image);
158
+ }
159
+ // eslint-disable-next-line deprecation/deprecation
160
+ const params = new RenderTexture.Params(key, RenderTexture.Type.SkyBox);
161
+ const txImgs = [
162
+ idToImage.get(sky.images.front), idToImage.get(sky.images.back), idToImage.get(sky.images.top),
163
+ idToImage.get(sky.images.bottom), idToImage.get(sky.images.right), idToImage.get(sky.images.left),
164
+ ];
165
+ return undefined !== IModelApp.renderSystem.createTextureFromCubeImages(txImgs[0], txImgs[1], txImgs[2], txImgs[3], txImgs[4], txImgs[5], this._view.iModel, params);
166
+ });
167
+ }
161
168
  }
162
169
  else if (sky instanceof SkySphere) {
163
- const rotation = 0; // ###TODO where is this supposed to come from?
164
- let texture = IModelApp.renderSystem.findTexture(sky.image, this._view.iModel);
165
- if (!texture) {
166
- const image = await this.imageFromSpec(sky.image);
167
- if (image) {
168
- texture = IModelApp.renderSystem.createTexture({
170
+ load = () => {
171
+ const texture = IModelApp.renderSystem.findTexture(sky.image, this._view.iModel);
172
+ return texture ? {
173
+ type: "sphere",
174
+ texture,
175
+ rotation: 0,
176
+ zOffset: this._view.iModel.globalOrigin.z,
177
+ } : undefined;
178
+ };
179
+ if (!IModelApp.renderSystem.findTexture(sky.image, this._view.iModel)) {
180
+ preload = this.imageFromSpec(sky.image).then((image) => {
181
+ if (!image)
182
+ return false;
183
+ return undefined !== IModelApp.renderSystem.createTexture({
169
184
  image: { source: image },
170
185
  ownership: { iModel: this._view.iModel, key: sky.image },
171
186
  });
172
- }
187
+ });
173
188
  }
174
- if (!texture)
175
- return undefined;
176
- return { type: "sphere", texture, rotation, zOffset: this._view.iModel.globalOrigin.z };
177
189
  }
178
190
  else {
179
- return this.createSkyGradientParams();
191
+ load = () => this.createSkyGradientParams();
180
192
  }
193
+ return { load, preload };
181
194
  }
182
195
  createCubeImageKey(sky) {
183
196
  const i = sky.images;
184
197
  return `skycube:${i.front}:${i.back}:${i.left}:${i.right}:${i.top}:${i.bottom}`;
185
198
  }
186
199
  createSkyGradientParams() {
187
- return { type: "gradient", gradient: this._environment.sky.gradient, zOffset: this._view.iModel.globalOrigin.z };
200
+ return {
201
+ type: "gradient",
202
+ gradient: this._environment.sky.gradient,
203
+ zOffset: this._view.iModel.globalOrigin.z,
204
+ };
188
205
  }
189
206
  async imageFromSpec(spec) {
190
207
  var _a;
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentDecorations.js","sourceRoot":"","sources":["../../src/EnvironmentDecorations.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 Views\r\n */\r\n\r\nimport { assert, Id64} from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, PolyfaceBuilder, StrokeOptions } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, Environment, Gradient, GraphicParams, RenderTexture, SkyCube, SkySphere, TextureImageSpec, TextureMapping,\r\n} from \"@itwin/core-common\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { ViewState3d } from \"./ViewState\";\r\nimport { DecorateContext } from \"./ViewContext\";\r\nimport { tryImageElementFromUrl } from \"./ImageUtil\";\r\nimport { GraphicType } from \"./render/GraphicBuilder\";\r\nimport { RenderSkyBoxParams } from \"./render/RenderSystem\";\r\n\r\n/** @internal */\r\nexport interface GroundPlaneDecorations {\r\n readonly aboveParams: GraphicParams;\r\n readonly belowParams: GraphicParams;\r\n}\r\n\r\n/** @internal */\r\nexport interface SkyBoxDecorations {\r\n params?: RenderSkyBoxParams | undefined;\r\n promise?: Promise<RenderSkyBoxParams | undefined>;\r\n}\r\n\r\n/** @internal */\r\nexport class EnvironmentDecorations {\r\n protected readonly _view: ViewState3d;\r\n protected readonly _onLoaded: () => void;\r\n protected readonly _onDispose: () => void;\r\n protected _environment: Environment;\r\n protected _ground?: GroundPlaneDecorations;\r\n protected _sky: SkyBoxDecorations;\r\n\r\n public constructor(view: ViewState3d, onLoaded: () => void, onDispose: () => void) {\r\n this._environment = view.displayStyle.environment;\r\n this._view = view;\r\n this._onLoaded = onLoaded;\r\n this._onDispose = onDispose;\r\n\r\n this._sky = { };\r\n this.loadSky();\r\n if (this._environment.displayGround)\r\n this.loadGround();\r\n }\r\n\r\n public dispose(): void {\r\n this._ground = undefined;\r\n\r\n this._sky.promise = this._sky.params = undefined;\r\n\r\n this._onDispose();\r\n }\r\n\r\n public setEnvironment(env: Environment): void {\r\n const prev = this._environment;\r\n if (prev === env)\r\n return;\r\n\r\n this._environment = env;\r\n\r\n // Update ground plane\r\n if (!env.displayGround || env.ground !== prev.ground)\r\n this._ground = undefined;\r\n\r\n if (env.displayGround && !this._ground)\r\n this.loadGround();\r\n\r\n // Update sky box\r\n if (env.sky !== prev.sky)\r\n this.loadSky();\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n const env = this._environment;\r\n if (env.displaySky && this._sky.params) {\r\n const sky = IModelApp.renderSystem.createSkyBox(this._sky.params);\r\n if (sky)\r\n context.setSkyBox(sky);\r\n }\r\n\r\n if (!env.displayGround || !this._ground)\r\n return;\r\n\r\n const extents = this._view.getGroundExtents(context.viewport);\r\n if (extents.isNull)\r\n return;\r\n\r\n const points: Point3d[] = [extents.low.clone(), extents.low.clone(), extents.high.clone(), extents.high.clone()];\r\n points[1].x = extents.high.x;\r\n points[3].x = extents.low.x;\r\n\r\n const aboveGround = this._view.isEyePointAbove(extents.low.z);\r\n const params = aboveGround ? this._ground.aboveParams : this._ground.belowParams;\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n builder.activateGraphicParams(params);\r\n\r\n const strokeOptions = new StrokeOptions();\r\n strokeOptions.needParams = true;\r\n const polyfaceBuilder = PolyfaceBuilder.create(strokeOptions);\r\n polyfaceBuilder.toggleReversedFacetFlag();\r\n const uvParams: Point2d[] = [Point2d.create(0, 0), Point2d.create(1, 0), Point2d.create(1, 1), Point2d.create(0, 1)];\r\n polyfaceBuilder.addQuadFacet(points, uvParams);\r\n const polyface = polyfaceBuilder.claimPolyface(false);\r\n\r\n builder.addPolyface(polyface, true);\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n private loadGround(): void {\r\n assert(undefined === this._ground);\r\n const aboveParams = this.createGroundParams(true);\r\n const belowParams = this.createGroundParams(false);\r\n if (aboveParams && belowParams)\r\n this._ground = { aboveParams, belowParams };\r\n }\r\n\r\n private createGroundParams(above: boolean): GraphicParams | undefined {\r\n // Create a gradient texture.\r\n const ground = this._environment.ground;\r\n const values = [0, 0.25, 0.5 ];\r\n const color = above ? ground.aboveColor : ground.belowColor;\r\n const alpha = above ? 0x80 : 0x85;\r\n const groundColors = [color.withTransparency(0xff), color, color];\r\n groundColors[1] = groundColors[2] = color.withTransparency(alpha);\r\n\r\n const gradient = new Gradient.Symb();\r\n gradient.mode = Gradient.Mode.Spherical;\r\n gradient.keys = [{ color: groundColors[0], value: values[0] }, { color: groundColors[1], value: values[1] }, { color: groundColors[2], value: values[2] }];\r\n const texture = IModelApp.renderSystem.getGradientTexture(gradient, this._view.iModel);\r\n if (!texture)\r\n return undefined;\r\n\r\n // Create a material using the gradient texture\r\n const material = IModelApp.renderSystem.createRenderMaterial({\r\n diffuse: { color: ColorDef.white, weight: 0 },\r\n textureMapping: {\r\n texture,\r\n transform: new TextureMapping.Trans2x3(0, 1, 0, 1, 0, 0),\r\n },\r\n });\r\n\r\n if (!material)\r\n return undefined;\r\n\r\n // Create GraphicParams using the material.\r\n const params = new GraphicParams();\r\n params.lineColor = gradient.keys[0].color;\r\n params.fillColor = ColorDef.white; // Fill should be set to opaque white for gradient texture...\r\n params.material = material;\r\n\r\n return params;\r\n }\r\n\r\n private loadSky(): void {\r\n const promise = this.loadSkyParams();\r\n this._sky.promise = promise;\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n promise.then((params) => {\r\n if (promise === this._sky.promise)\r\n this.setSky(params ?? this.createSkyGradientParams());\r\n });\r\n\r\n promise.catch(() => {\r\n if (this._sky.promise === promise)\r\n this.setSky(this.createSkyGradientParams());\r\n });\r\n }\r\n\r\n private setSky(params: RenderSkyBoxParams): void {\r\n this._sky.promise = undefined;\r\n this._sky.params = params;\r\n this._onLoaded();\r\n }\r\n\r\n private async loadSkyParams(): Promise<RenderSkyBoxParams | undefined> {\r\n const sky = this._environment.sky;\r\n if (sky instanceof SkyCube) {\r\n const key = this.createCubeImageKey(sky);\r\n const existingTexture = IModelApp.renderSystem.findTexture(key, this._view.iModel);\r\n if (existingTexture)\r\n return { type: \"cube\", texture: existingTexture };\r\n\r\n // Some faces may use the same image. Only request each image once.\r\n const specs = new Set<string>([sky.images.front, sky.images.back, sky.images.left, sky.images.right, sky.images.top, sky.images.bottom]);\r\n const promises = [];\r\n for (const spec of specs)\r\n promises.push(this.imageFromSpec(spec));\r\n\r\n return Promise.all(promises).then((images) => {\r\n const idToImage = new Map<TextureImageSpec, HTMLImageElement>();\r\n let index = 0;\r\n for (const spec of specs) {\r\n const image = images[index++];\r\n if (!image)\r\n return undefined;\r\n else\r\n idToImage.set(spec, image);\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n const params = new RenderTexture.Params(key, RenderTexture.Type.SkyBox);\r\n const txImgs = [\r\n idToImage.get(sky.images.front)!, idToImage.get(sky.images.back)!, idToImage.get(sky.images.top)!,\r\n idToImage.get(sky.images.bottom)!, idToImage.get(sky.images.right)!, idToImage.get(sky.images.left)!,\r\n ];\r\n\r\n const texture = IModelApp.renderSystem.createTextureFromCubeImages(txImgs[0], txImgs[1], txImgs[2], txImgs[3], txImgs[4], txImgs[5], this._view.iModel, params);\r\n return texture ? { type: \"cube\", texture } : undefined;\r\n });\r\n } else if (sky instanceof SkySphere) {\r\n const rotation = 0; // ###TODO where is this supposed to come from?\r\n let texture = IModelApp.renderSystem.findTexture(sky.image, this._view.iModel);\r\n if (!texture) {\r\n const image = await this.imageFromSpec(sky.image);\r\n if (image) {\r\n texture = IModelApp.renderSystem.createTexture({\r\n image: { source: image },\r\n ownership: { iModel: this._view.iModel, key: sky.image },\r\n });\r\n }\r\n }\r\n\r\n if (!texture)\r\n return undefined;\r\n\r\n return { type: \"sphere\", texture, rotation, zOffset: this._view.iModel.globalOrigin.z };\r\n } else {\r\n return this.createSkyGradientParams();\r\n }\r\n }\r\n\r\n private createCubeImageKey(sky: SkyCube): string {\r\n const i = sky.images;\r\n return `skycube:${i.front}:${i.back}:${i.left}:${i.right}:${i.top}:${i.bottom}`;\r\n }\r\n\r\n private createSkyGradientParams(): RenderSkyBoxParams {\r\n return { type: \"gradient\", gradient: this._environment.sky.gradient, zOffset: this._view.iModel.globalOrigin.z };\r\n }\r\n\r\n private async imageFromSpec(spec: TextureImageSpec): Promise<HTMLImageElement | undefined> {\r\n if (Id64.isValidId64(spec))\r\n return (await IModelApp.renderSystem.loadTextureImage(spec, this._view.iModel))?.image;\r\n\r\n return tryImageElementFromUrl(spec);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"EnvironmentDecorations.js","sourceRoot":"","sources":["../../src/EnvironmentDecorations.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 Views\r\n */\r\n\r\nimport { assert, Id64} from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, PolyfaceBuilder, StrokeOptions } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, Environment, Gradient, GraphicParams, RenderTexture, SkyCube, SkySphere, TextureImageSpec, TextureMapping,\r\n} from \"@itwin/core-common\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { ViewState3d } from \"./ViewState\";\r\nimport { DecorateContext } from \"./ViewContext\";\r\nimport { tryImageElementFromUrl } from \"./ImageUtil\";\r\nimport { GraphicType } from \"./render/GraphicBuilder\";\r\nimport { RenderSkyBoxParams } from \"./render/RenderSystem\";\r\n\r\n/** @internal */\r\nexport interface GroundPlaneDecorations {\r\n readonly aboveParams: GraphicParams;\r\n readonly belowParams: GraphicParams;\r\n}\r\n\r\ninterface SkyBoxParamsLoader {\r\n // Invoke to obtain sky box params.\r\n load(): RenderSkyBoxParams | undefined;\r\n // If defined, await before invoking load().\r\n preload?: Promise<boolean>;\r\n}\r\n\r\n/** @internal */\r\nexport interface SkyBoxDecorations {\r\n params?: RenderSkyBoxParams;\r\n promise?: Promise<boolean>;\r\n}\r\n\r\n/** @internal */\r\nexport class EnvironmentDecorations {\r\n protected readonly _view: ViewState3d;\r\n protected readonly _onLoaded: () => void;\r\n protected readonly _onDispose: () => void;\r\n protected _environment: Environment;\r\n protected _ground?: GroundPlaneDecorations;\r\n protected _sky: SkyBoxDecorations;\r\n\r\n public constructor(view: ViewState3d, onLoaded: () => void, onDispose: () => void) {\r\n this._environment = view.displayStyle.environment;\r\n this._view = view;\r\n this._onLoaded = onLoaded;\r\n this._onDispose = onDispose;\r\n\r\n this._sky = { };\r\n this.loadSkyBox();\r\n if (this._environment.displayGround)\r\n this.loadGround();\r\n }\r\n\r\n public dispose(): void {\r\n this._ground = undefined;\r\n this._sky.params = this._sky.promise = undefined;\r\n\r\n this._onDispose();\r\n }\r\n\r\n public setEnvironment(env: Environment): void {\r\n const prev = this._environment;\r\n if (prev === env)\r\n return;\r\n\r\n this._environment = env;\r\n\r\n // Update ground plane\r\n if (!env.displayGround || env.ground !== prev.ground)\r\n this._ground = undefined;\r\n\r\n if (env.displayGround && !this._ground)\r\n this.loadGround();\r\n\r\n // Update sky box\r\n if (env.sky !== prev.sky)\r\n this.loadSkyBox();\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n const env = this._environment;\r\n if (env.displaySky && this._sky.params) {\r\n const sky = IModelApp.renderSystem.createSkyBox(this._sky.params);\r\n if (sky)\r\n context.setSkyBox(sky);\r\n }\r\n\r\n if (!env.displayGround || !this._ground)\r\n return;\r\n\r\n const extents = this._view.getGroundExtents(context.viewport);\r\n if (extents.isNull)\r\n return;\r\n\r\n const points: Point3d[] = [extents.low.clone(), extents.low.clone(), extents.high.clone(), extents.high.clone()];\r\n points[1].x = extents.high.x;\r\n points[3].x = extents.low.x;\r\n\r\n const aboveGround = this._view.isEyePointAbove(extents.low.z);\r\n const params = aboveGround ? this._ground.aboveParams : this._ground.belowParams;\r\n const builder = context.createGraphicBuilder(GraphicType.WorldDecoration);\r\n builder.activateGraphicParams(params);\r\n\r\n const strokeOptions = new StrokeOptions();\r\n strokeOptions.needParams = true;\r\n const polyfaceBuilder = PolyfaceBuilder.create(strokeOptions);\r\n polyfaceBuilder.toggleReversedFacetFlag();\r\n const uvParams: Point2d[] = [Point2d.create(0, 0), Point2d.create(1, 0), Point2d.create(1, 1), Point2d.create(0, 1)];\r\n polyfaceBuilder.addQuadFacet(points, uvParams);\r\n const polyface = polyfaceBuilder.claimPolyface(false);\r\n\r\n builder.addPolyface(polyface, true);\r\n context.addDecorationFromBuilder(builder);\r\n }\r\n\r\n private loadGround(): void {\r\n assert(undefined === this._ground);\r\n const aboveParams = this.createGroundParams(true);\r\n const belowParams = this.createGroundParams(false);\r\n if (aboveParams && belowParams)\r\n this._ground = { aboveParams, belowParams };\r\n }\r\n\r\n private createGroundParams(above: boolean): GraphicParams | undefined {\r\n // Create a gradient texture.\r\n const ground = this._environment.ground;\r\n const values = [0, 0.25, 0.5 ];\r\n const color = above ? ground.aboveColor : ground.belowColor;\r\n const alpha = above ? 0x80 : 0x85;\r\n const groundColors = [color.withTransparency(0xff), color, color];\r\n groundColors[1] = groundColors[2] = color.withTransparency(alpha);\r\n\r\n const gradient = new Gradient.Symb();\r\n gradient.mode = Gradient.Mode.Spherical;\r\n gradient.keys = [{ color: groundColors[0], value: values[0] }, { color: groundColors[1], value: values[1] }, { color: groundColors[2], value: values[2] }];\r\n const texture = IModelApp.renderSystem.getGradientTexture(gradient, this._view.iModel);\r\n if (!texture)\r\n return undefined;\r\n\r\n // Create a material using the gradient texture\r\n const material = IModelApp.renderSystem.createRenderMaterial({\r\n diffuse: { color: ColorDef.white, weight: 0 },\r\n textureMapping: {\r\n texture,\r\n transform: new TextureMapping.Trans2x3(0, 1, 0, 1, 0, 0),\r\n },\r\n });\r\n\r\n if (!material)\r\n return undefined;\r\n\r\n // Create GraphicParams using the material.\r\n const params = new GraphicParams();\r\n params.lineColor = gradient.keys[0].color;\r\n params.fillColor = ColorDef.white; // Fill should be set to opaque white for gradient texture...\r\n params.material = material;\r\n\r\n return params;\r\n }\r\n\r\n private loadSkyBox(): void {\r\n const loader = this.loadSkyBoxParams();\r\n if (undefined === loader.preload) {\r\n this.setSky(loader.load());\r\n return;\r\n }\r\n\r\n const promise = loader.preload;\r\n this._sky.promise = promise;\r\n loader.preload.then((loaded) => {\r\n if (promise === this._sky.promise)\r\n this.setSky(loaded ? loader.load() : undefined);\r\n }).catch(() => {\r\n if (promise === this._sky.promise)\r\n this.setSky(undefined);\r\n });\r\n }\r\n\r\n private setSky(params: RenderSkyBoxParams | undefined): void {\r\n this._sky.promise = undefined;\r\n this._sky.params = params ?? this.createSkyGradientParams();\r\n this._onLoaded();\r\n }\r\n\r\n private loadSkyBoxParams(): SkyBoxParamsLoader {\r\n let load: (() => RenderSkyBoxParams | undefined);\r\n let preload: Promise<boolean> | undefined;\r\n\r\n const sky = this._environment.sky;\r\n if (sky instanceof SkyCube) {\r\n const key = this.createCubeImageKey(sky);\r\n load = () => {\r\n const texture = IModelApp.renderSystem.findTexture(key, this._view.iModel);\r\n return texture ? { type: \"cube\", texture } : undefined;\r\n };\r\n\r\n if (!IModelApp.renderSystem.findTexture(key, this._view.iModel)) {\r\n // Some faces may use the same image. Only request each image once.\r\n const promises = [];\r\n const specs = new Set<string>([sky.images.front, sky.images.back, sky.images.left, sky.images.right, sky.images.top, sky.images.bottom]);\r\n for (const spec of specs)\r\n promises.push(this.imageFromSpec(spec));\r\n\r\n preload = Promise.all(promises).then((images) => {\r\n const idToImage = new Map<TextureImageSpec, HTMLImageElement>();\r\n let index = 0;\r\n for (const spec of specs) {\r\n const image = images[index++];\r\n if (!image)\r\n return false;\r\n else\r\n idToImage.set(spec, image);\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n const params = new RenderTexture.Params(key, RenderTexture.Type.SkyBox);\r\n const txImgs = [\r\n idToImage.get(sky.images.front)!, idToImage.get(sky.images.back)!, idToImage.get(sky.images.top)!,\r\n idToImage.get(sky.images.bottom)!, idToImage.get(sky.images.right)!, idToImage.get(sky.images.left)!,\r\n ];\r\n\r\n return undefined !== IModelApp.renderSystem.createTextureFromCubeImages(txImgs[0], txImgs[1], txImgs[2], txImgs[3], txImgs[4], txImgs[5], this._view.iModel, params);\r\n });\r\n }\r\n } else if (sky instanceof SkySphere) {\r\n load = () => {\r\n const texture = IModelApp.renderSystem.findTexture(sky.image, this._view.iModel);\r\n return texture ? {\r\n type: \"sphere\",\r\n texture,\r\n rotation: 0,\r\n zOffset: this._view.iModel.globalOrigin.z,\r\n } : undefined;\r\n };\r\n\r\n if (!IModelApp.renderSystem.findTexture(sky.image, this._view.iModel)) {\r\n preload = this.imageFromSpec(sky.image).then((image) => {\r\n if (!image)\r\n return false;\r\n\r\n return undefined !== IModelApp.renderSystem.createTexture({\r\n image: { source: image },\r\n ownership: { iModel: this._view.iModel, key: sky.image },\r\n });\r\n });\r\n }\r\n } else {\r\n load = () => this.createSkyGradientParams();\r\n }\r\n\r\n return { load, preload };\r\n }\r\n\r\n private createCubeImageKey(sky: SkyCube): string {\r\n const i = sky.images;\r\n return `skycube:${i.front}:${i.back}:${i.left}:${i.right}:${i.top}:${i.bottom}`;\r\n }\r\n\r\n private createSkyGradientParams(): RenderSkyBoxParams {\r\n return {\r\n type: \"gradient\",\r\n gradient: this._environment.sky.gradient,\r\n zOffset: this._view.iModel.globalOrigin.z,\r\n };\r\n }\r\n\r\n private async imageFromSpec(spec: TextureImageSpec): Promise<HTMLImageElement | undefined> {\r\n if (Id64.isValidId64(spec))\r\n return (await IModelApp.renderSystem.loadTextureImage(spec, this._view.iModel))?.image;\r\n\r\n return tryImageElementFromUrl(spec);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GraphicalEditingScope.d.ts","sourceRoot":"","sources":["../../src/GraphicalEditingScope.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,OAAO,EAAyD,UAAU,EAAe,MAAM,qBAAqB,CAAC;AAEtI,OAAO,EACL,yBAAyB,EAAE,qBAAqB,EAAE,aAAa,EAAE,oBAAoB,EAAE,yBAAyB,EACjH,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAc5D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,qBAAsB,SAAQ,4BAA6B,YAAW,yBAAyB;IAC1G,IAAW,oBAAoB,kBAAyC;IAExE,8FAA8F;IAC9F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAuC;IACxE,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAiB;IAElC,iDAAiD;IACjD,SAAgB,MAAM,EAAE,mBAAmB,CAAC;IAE5C;;OAEG;IACH,gBAAuB,OAAO,kBAAuB,qBAAqB,KAAK,IAAI,EAAI;IAEvF;;;OAGG;IACH,SAAgB,SAAS,kBAAuB,qBAAqB,KAAK,IAAI,EAAI;IAElF;;;OAGG;IACH,SAAgB,QAAQ,kBAAuB,qBAAqB,KAAK,IAAI,EAAI;IAEjF,sEAAsE;IACtE,SAAgB,iBAAiB,oBAAyB,SAAS,oBAAoB,CAAC,SAAS,qBAAqB,KAAK,IAAI,EAAI;IAEnI;;OAEG;WACiB,KAAK,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAmBtF;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBlC,yGAAyG;IAClG,0BAA0B,CAAC,OAAO,EAAE,UAAU,GAAG,QAAQ,CAAC,qBAAqB,CAAC,GAAG,SAAS;IAInG,4EAA4E;IACrE,kBAAkB,IAAI,QAAQ,CAAC,oBAAoB,CAAC;IAI3D,gBAAgB;IAChB,IAAW,UAAU,YAEpB;IAED,OAAO,CAAG,sBAAsB;IAWhC,OAAO;IAMP,OAAO,CAAC,OAAO;IAef,gBAAgB;IACT,qBAAqB,CAAC,KAAK,EAAE,yBAAyB,EAAE;CAyBhE"}
1
+ {"version":3,"file":"GraphicalEditingScope.d.ts","sourceRoot":"","sources":["../../src/GraphicalEditingScope.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAU,OAAO,EAAkE,UAAU,EAAe,MAAM,qBAAqB,CAAC;AAE/I,OAAO,EACL,yBAAyB,EAAE,qBAAqB,EAAE,aAAa,EAAE,oBAAoB,EAAE,yBAAyB,EACjH,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAc5D;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,qBAAa,qBAAsB,SAAQ,4BAA6B,YAAW,yBAAyB;IAC1G,IAAW,oBAAoB,kBAAyC;IAExE,8FAA8F;IAC9F,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAuC;IACxE,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAiB;IAElC,iDAAiD;IACjD,SAAgB,MAAM,EAAE,mBAAmB,CAAC;IAE5C;;OAEG;IACH,gBAAuB,OAAO,kBAAuB,qBAAqB,KAAK,IAAI,EAAI;IAEvF;;;OAGG;IACH,SAAgB,SAAS,kBAAuB,qBAAqB,KAAK,IAAI,EAAI;IAElF;;;OAGG;IACH,SAAgB,QAAQ,kBAAuB,qBAAqB,KAAK,IAAI,EAAI;IAEjF,sEAAsE;IACtE,SAAgB,iBAAiB,oBAAyB,SAAS,oBAAoB,CAAC,SAAS,qBAAqB,KAAK,IAAI,EAAI;IAEnI;;OAEG;WACiB,KAAK,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAmBtF;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBlC,yGAAyG;IAClG,0BAA0B,CAAC,OAAO,EAAE,UAAU,GAAG,QAAQ,CAAC,qBAAqB,CAAC,GAAG,SAAS;IAInG,4EAA4E;IACrE,kBAAkB,IAAI,QAAQ,CAAC,oBAAoB,CAAC;IAI3D,gBAAgB;IAChB,IAAW,UAAU,YAEpB;IAED,OAAO,CAAG,sBAAsB;IAWhC,OAAO;IAMP,OAAO,CAAC,OAAO;IAef,gBAAgB;IACT,qBAAqB,CAAC,KAAK,EAAE,yBAAyB,EAAE;CAiChE"}
@@ -142,6 +142,7 @@ export class GraphicalEditingScope extends BriefcaseNotificationHandler {
142
142
  notifyGeometryChanged(props) {
143
143
  const changes = ModelGeometryChanges.iterable(props);
144
144
  const modelIds = [];
145
+ let deletedIds;
145
146
  for (const modelChanges of changes) {
146
147
  // ###TODO do we care about the model range?
147
148
  let list = this._geometryChanges.get(modelChanges.id);
@@ -156,11 +157,16 @@ export class GraphicalEditingScope extends BriefcaseNotificationHandler {
156
157
  }
157
158
  list.insert(elementChange);
158
159
  if (DbOpcode.Delete === elementChange.type) {
159
- this.iModel.selectionSet.remove(elementChange.id);
160
- this.iModel.hilited.setHilite(elementChange.id, false);
160
+ if (undefined === deletedIds)
161
+ deletedIds = new Set();
162
+ deletedIds.add(elementChange.id);
161
163
  }
162
164
  }
163
165
  }
166
+ if (deletedIds) {
167
+ this.iModel.selectionSet.remove(deletedIds);
168
+ this.iModel.hilited.setHilite(deletedIds, false);
169
+ }
164
170
  this.onGeometryChanges.raiseEvent(changes, this);
165
171
  }
166
172
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GraphicalEditingScope.js","sourceRoot":"","sources":["../../src/GraphicalEditingScope.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 IModelConnection\r\n */\r\n\r\nimport { assert, BeEvent, compareStrings, DbOpcode, DuplicatePolicy, GuidString, Id64String, SortedArray } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport {\r\n EditingScopeNotifications, ElementGeometryChange, IpcAppChannel, ModelGeometryChanges, ModelGeometryChangesProps, RemoveFunction,\r\n} from \"@itwin/core-common\";\r\nimport { BriefcaseNotificationHandler } from \"./BriefcaseTxns\";\r\nimport { BriefcaseConnection } from \"./BriefcaseConnection\";\r\nimport { IpcApp } from \"./IpcApp\";\r\n\r\nclass ModelChanges extends SortedArray<ElementGeometryChange> {\r\n public geometryGuid: GuidString;\r\n public readonly range: Range3d;\r\n\r\n public constructor(geometryGuid: GuidString, range: Range3d) {\r\n super((lhs, rhs) => compareStrings(lhs.id, rhs.id), DuplicatePolicy.Replace);\r\n this.geometryGuid = geometryGuid;\r\n this.range = range;\r\n }\r\n}\r\n\r\n/** Represents a period of time within an [interactive editing]($docs/learning/InteractiveEditing.md) session during which the\r\n * geometry of elements being displayed in one or more [[Viewport]]s is being modified. Outside of such a scope, whenever the\r\n * geometry within a [GeometricModel]($backend) changes new [[Tile]]s must be generated to reflect those changes in a viewport.\r\n * Regenerating entire tiles each time individual elements change can be time-consuming, which may introduce an unacceptable delay\r\n * between making a modification and seeing its result on the screen.\r\n *\r\n * Within the context of a graphical editing scope, no new tiles are generated. Instead, the geometry for any deleted or modified elements\r\n * is hidden in the tile graphics, and additional temporary graphics are displayed for any newly-inserted or modified elements. Only when the\r\n * scope exits are new tiles produced.\r\n *\r\n * The application decides when to enter and exit a graphical editing scope. A single interactive editing session may involve any number of\r\n * editing scopes. Typically, applications will enter a new editing scope (after first exiting a previous scope, if one exists):\r\n * - When switching from a non-graphical workflow to one that involves editing geometry; or\r\n * - When changing which geometric model is being edited; or\r\n * - After performing an operation that creates or modifies a \"large\" number (perhaps hundreds?) of elements.\r\n *\r\n * An application should typically exit any graphical editing scope before:\r\n * - Pulling changesets; or\r\n * - Switching from a graphical editing workflow to some non-graphical workflow.\r\n *\r\n * Graphical editing scopes are only supported for [[BriefcaseConnection]]s opened in read-write mode that contain version 1.0.11 or newer of the BisCore schema.\r\n * @see [[BriefcaseConnection.enterEditingScope]] to create a scope for a briefcase.\r\n * @see [[BriefcaseConnection.editingScope]] to obtain a briefcase's current scope.\r\n * @see [[exit]] to terminate a scope.\r\n * @public\r\n */\r\nexport class GraphicalEditingScope extends BriefcaseNotificationHandler implements EditingScopeNotifications {\r\n public get briefcaseChannelName() { return IpcAppChannel.EditingScope; }\r\n\r\n /** Maps model Id to accumulated changes to geometric elements within the associated model. */\r\n private readonly _geometryChanges = new Map<Id64String, ModelChanges>();\r\n private _disposed = false;\r\n private _cleanup?: RemoveFunction;\r\n\r\n /** The connection to the iModel being edited. */\r\n public readonly iModel: BriefcaseConnection;\r\n\r\n /** Event raised when a new scope is created for any [[BriefcaseConnection]].\r\n * @see [[onExiting]] and [[onExited]] for complementary events.\r\n */\r\n public static readonly onEnter = new BeEvent<(scope: GraphicalEditingScope) => void>();\r\n\r\n /** Event raised when this scope is about to exit.\r\n * @see [[onEnter]] for the complementary event.\r\n * @see [[onExited]] for an event raised after the scope exits.\r\n */\r\n public readonly onExiting = new BeEvent<(scope: GraphicalEditingScope) => void>();\r\n\r\n /** Event raised when this scope has exited.\r\n * @see [[onEnter]] for the complementary event.\r\n * @see [[onExiting]] for an event raised just before the scope is exited.\r\n */\r\n public readonly onExited = new BeEvent<(scope: GraphicalEditingScope) => void>();\r\n\r\n /** Event raised after geometric changes are written to the iModel. */\r\n public readonly onGeometryChanges = new BeEvent<(changes: Iterable<ModelGeometryChanges>, scope: GraphicalEditingScope) => void>();\r\n\r\n /** Don't call this directly - use BriefcaseConnection.enterEditingScope.\r\n * @internal\r\n */\r\n public static async enter(imodel: BriefcaseConnection): Promise<GraphicalEditingScope> {\r\n if (imodel.editingScope)\r\n throw new Error(\"Cannot create an editing scope for an iModel that already has one\");\r\n\r\n // Register the scope synchronously, in case enter() is called again for same iModel while awaiting asynchronous initialization.\r\n const scope = new GraphicalEditingScope(imodel);\r\n try {\r\n const scopeStarted = await IpcApp.appFunctionIpc.toggleGraphicalEditingScope(imodel.key, true);\r\n assert(scopeStarted); // If it didn't, the backend threw an error.\r\n } catch (e) {\r\n scope.dispose();\r\n throw e;\r\n }\r\n\r\n this.onEnter.raiseEvent(scope);\r\n\r\n return scope;\r\n }\r\n\r\n /** Exits this editing scope. The associated [[BriefcaseConnection]]'s `editingScope` will be reset to `undefined`.\r\n * @throws Error if the scope could not be exited, e.g., if it has already been exited.\r\n * @see [[BriefcaseConnection.enterEditingScope]] to enter an editing scope.\r\n */\r\n public async exit(): Promise<void> {\r\n if (this._disposed || this.iModel.editingScope !== this)\r\n throw new Error(\"Cannot exit editing scope after it is disconnected from the iModel\");\r\n\r\n this._disposed = true;\r\n try {\r\n this.onExiting.raiseEvent(this);\r\n } finally {\r\n const scopeExited = await IpcApp.appFunctionIpc.toggleGraphicalEditingScope(this.iModel.key, false);\r\n assert(!scopeExited);\r\n try {\r\n this.onExited.raiseEvent(this);\r\n } finally {\r\n this.dispose();\r\n }\r\n }\r\n }\r\n\r\n /** Obtain all geometric changes to elements within the specified model accumulated within this scope. */\r\n public getGeometryChangesForModel(modelId: Id64String): Iterable<ElementGeometryChange> | undefined {\r\n return this._geometryChanges.get(modelId);\r\n }\r\n\r\n /** Obtain all geometric changes to models accumulated within this scope. */\r\n public getGeometryChanges(): Iterable<ModelGeometryChanges> {\r\n return { [Symbol.iterator]: () => this.geometryChangeIterator() };\r\n }\r\n\r\n /** @internal */\r\n public get isDisposed() {\r\n return this._disposed;\r\n }\r\n\r\n private * geometryChangeIterator(): Iterator<ModelGeometryChanges> {\r\n for (const [key, value] of this._geometryChanges) {\r\n yield {\r\n id: key,\r\n geometryGuid: value.geometryGuid,\r\n range: value.range,\r\n elements: value,\r\n };\r\n }\r\n }\r\n\r\n private constructor(iModel: BriefcaseConnection) {\r\n super(iModel.key);\r\n this.iModel = iModel;\r\n this._cleanup = this.registerImpl();\r\n }\r\n\r\n private dispose(): void {\r\n this._disposed = true;\r\n\r\n this.onExiting.clear();\r\n this.onGeometryChanges.clear();\r\n this.onExited.clear();\r\n\r\n this._geometryChanges.clear();\r\n\r\n if (this._cleanup) {\r\n this._cleanup();\r\n this._cleanup = undefined;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public notifyGeometryChanged(props: ModelGeometryChangesProps[]) {\r\n const changes = ModelGeometryChanges.iterable(props);\r\n const modelIds: Id64String[] = [];\r\n for (const modelChanges of changes) {\r\n // ###TODO do we care about the model range?\r\n let list = this._geometryChanges.get(modelChanges.id);\r\n modelIds.push(modelChanges.id);\r\n for (const elementChange of modelChanges.elements) {\r\n if (!list) {\r\n this._geometryChanges.set(modelChanges.id, list = new ModelChanges(modelChanges.geometryGuid, modelChanges.range));\r\n } else {\r\n list.geometryGuid = modelChanges.geometryGuid;\r\n modelChanges.range.clone(list.range);\r\n }\r\n\r\n list.insert(elementChange);\r\n if (DbOpcode.Delete === elementChange.type) {\r\n this.iModel.selectionSet.remove(elementChange.id);\r\n this.iModel.hilited.setHilite(elementChange.id, false);\r\n }\r\n }\r\n }\r\n\r\n this.onGeometryChanges.raiseEvent(changes, this);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"GraphicalEditingScope.js","sourceRoot":"","sources":["../../src/GraphicalEditingScope.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 IModelConnection\r\n */\r\n\r\nimport { assert, BeEvent, compareStrings, DbOpcode, DuplicatePolicy, GuidString, Id64Set, Id64String, SortedArray } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport {\r\n EditingScopeNotifications, ElementGeometryChange, IpcAppChannel, ModelGeometryChanges, ModelGeometryChangesProps, RemoveFunction,\r\n} from \"@itwin/core-common\";\r\nimport { BriefcaseNotificationHandler } from \"./BriefcaseTxns\";\r\nimport { BriefcaseConnection } from \"./BriefcaseConnection\";\r\nimport { IpcApp } from \"./IpcApp\";\r\n\r\nclass ModelChanges extends SortedArray<ElementGeometryChange> {\r\n public geometryGuid: GuidString;\r\n public readonly range: Range3d;\r\n\r\n public constructor(geometryGuid: GuidString, range: Range3d) {\r\n super((lhs, rhs) => compareStrings(lhs.id, rhs.id), DuplicatePolicy.Replace);\r\n this.geometryGuid = geometryGuid;\r\n this.range = range;\r\n }\r\n}\r\n\r\n/** Represents a period of time within an [interactive editing]($docs/learning/InteractiveEditing.md) session during which the\r\n * geometry of elements being displayed in one or more [[Viewport]]s is being modified. Outside of such a scope, whenever the\r\n * geometry within a [GeometricModel]($backend) changes new [[Tile]]s must be generated to reflect those changes in a viewport.\r\n * Regenerating entire tiles each time individual elements change can be time-consuming, which may introduce an unacceptable delay\r\n * between making a modification and seeing its result on the screen.\r\n *\r\n * Within the context of a graphical editing scope, no new tiles are generated. Instead, the geometry for any deleted or modified elements\r\n * is hidden in the tile graphics, and additional temporary graphics are displayed for any newly-inserted or modified elements. Only when the\r\n * scope exits are new tiles produced.\r\n *\r\n * The application decides when to enter and exit a graphical editing scope. A single interactive editing session may involve any number of\r\n * editing scopes. Typically, applications will enter a new editing scope (after first exiting a previous scope, if one exists):\r\n * - When switching from a non-graphical workflow to one that involves editing geometry; or\r\n * - When changing which geometric model is being edited; or\r\n * - After performing an operation that creates or modifies a \"large\" number (perhaps hundreds?) of elements.\r\n *\r\n * An application should typically exit any graphical editing scope before:\r\n * - Pulling changesets; or\r\n * - Switching from a graphical editing workflow to some non-graphical workflow.\r\n *\r\n * Graphical editing scopes are only supported for [[BriefcaseConnection]]s opened in read-write mode that contain version 1.0.11 or newer of the BisCore schema.\r\n * @see [[BriefcaseConnection.enterEditingScope]] to create a scope for a briefcase.\r\n * @see [[BriefcaseConnection.editingScope]] to obtain a briefcase's current scope.\r\n * @see [[exit]] to terminate a scope.\r\n * @public\r\n */\r\nexport class GraphicalEditingScope extends BriefcaseNotificationHandler implements EditingScopeNotifications {\r\n public get briefcaseChannelName() { return IpcAppChannel.EditingScope; }\r\n\r\n /** Maps model Id to accumulated changes to geometric elements within the associated model. */\r\n private readonly _geometryChanges = new Map<Id64String, ModelChanges>();\r\n private _disposed = false;\r\n private _cleanup?: RemoveFunction;\r\n\r\n /** The connection to the iModel being edited. */\r\n public readonly iModel: BriefcaseConnection;\r\n\r\n /** Event raised when a new scope is created for any [[BriefcaseConnection]].\r\n * @see [[onExiting]] and [[onExited]] for complementary events.\r\n */\r\n public static readonly onEnter = new BeEvent<(scope: GraphicalEditingScope) => void>();\r\n\r\n /** Event raised when this scope is about to exit.\r\n * @see [[onEnter]] for the complementary event.\r\n * @see [[onExited]] for an event raised after the scope exits.\r\n */\r\n public readonly onExiting = new BeEvent<(scope: GraphicalEditingScope) => void>();\r\n\r\n /** Event raised when this scope has exited.\r\n * @see [[onEnter]] for the complementary event.\r\n * @see [[onExiting]] for an event raised just before the scope is exited.\r\n */\r\n public readonly onExited = new BeEvent<(scope: GraphicalEditingScope) => void>();\r\n\r\n /** Event raised after geometric changes are written to the iModel. */\r\n public readonly onGeometryChanges = new BeEvent<(changes: Iterable<ModelGeometryChanges>, scope: GraphicalEditingScope) => void>();\r\n\r\n /** Don't call this directly - use BriefcaseConnection.enterEditingScope.\r\n * @internal\r\n */\r\n public static async enter(imodel: BriefcaseConnection): Promise<GraphicalEditingScope> {\r\n if (imodel.editingScope)\r\n throw new Error(\"Cannot create an editing scope for an iModel that already has one\");\r\n\r\n // Register the scope synchronously, in case enter() is called again for same iModel while awaiting asynchronous initialization.\r\n const scope = new GraphicalEditingScope(imodel);\r\n try {\r\n const scopeStarted = await IpcApp.appFunctionIpc.toggleGraphicalEditingScope(imodel.key, true);\r\n assert(scopeStarted); // If it didn't, the backend threw an error.\r\n } catch (e) {\r\n scope.dispose();\r\n throw e;\r\n }\r\n\r\n this.onEnter.raiseEvent(scope);\r\n\r\n return scope;\r\n }\r\n\r\n /** Exits this editing scope. The associated [[BriefcaseConnection]]'s `editingScope` will be reset to `undefined`.\r\n * @throws Error if the scope could not be exited, e.g., if it has already been exited.\r\n * @see [[BriefcaseConnection.enterEditingScope]] to enter an editing scope.\r\n */\r\n public async exit(): Promise<void> {\r\n if (this._disposed || this.iModel.editingScope !== this)\r\n throw new Error(\"Cannot exit editing scope after it is disconnected from the iModel\");\r\n\r\n this._disposed = true;\r\n try {\r\n this.onExiting.raiseEvent(this);\r\n } finally {\r\n const scopeExited = await IpcApp.appFunctionIpc.toggleGraphicalEditingScope(this.iModel.key, false);\r\n assert(!scopeExited);\r\n try {\r\n this.onExited.raiseEvent(this);\r\n } finally {\r\n this.dispose();\r\n }\r\n }\r\n }\r\n\r\n /** Obtain all geometric changes to elements within the specified model accumulated within this scope. */\r\n public getGeometryChangesForModel(modelId: Id64String): Iterable<ElementGeometryChange> | undefined {\r\n return this._geometryChanges.get(modelId);\r\n }\r\n\r\n /** Obtain all geometric changes to models accumulated within this scope. */\r\n public getGeometryChanges(): Iterable<ModelGeometryChanges> {\r\n return { [Symbol.iterator]: () => this.geometryChangeIterator() };\r\n }\r\n\r\n /** @internal */\r\n public get isDisposed() {\r\n return this._disposed;\r\n }\r\n\r\n private * geometryChangeIterator(): Iterator<ModelGeometryChanges> {\r\n for (const [key, value] of this._geometryChanges) {\r\n yield {\r\n id: key,\r\n geometryGuid: value.geometryGuid,\r\n range: value.range,\r\n elements: value,\r\n };\r\n }\r\n }\r\n\r\n private constructor(iModel: BriefcaseConnection) {\r\n super(iModel.key);\r\n this.iModel = iModel;\r\n this._cleanup = this.registerImpl();\r\n }\r\n\r\n private dispose(): void {\r\n this._disposed = true;\r\n\r\n this.onExiting.clear();\r\n this.onGeometryChanges.clear();\r\n this.onExited.clear();\r\n\r\n this._geometryChanges.clear();\r\n\r\n if (this._cleanup) {\r\n this._cleanup();\r\n this._cleanup = undefined;\r\n }\r\n }\r\n\r\n /** @internal */\r\n public notifyGeometryChanged(props: ModelGeometryChangesProps[]) {\r\n const changes = ModelGeometryChanges.iterable(props);\r\n const modelIds: Id64String[] = [];\r\n let deletedIds: Id64Set | undefined;\r\n\r\n for (const modelChanges of changes) {\r\n // ###TODO do we care about the model range?\r\n let list = this._geometryChanges.get(modelChanges.id);\r\n modelIds.push(modelChanges.id);\r\n for (const elementChange of modelChanges.elements) {\r\n if (!list) {\r\n this._geometryChanges.set(modelChanges.id, list = new ModelChanges(modelChanges.geometryGuid, modelChanges.range));\r\n } else {\r\n list.geometryGuid = modelChanges.geometryGuid;\r\n modelChanges.range.clone(list.range);\r\n }\r\n\r\n list.insert(elementChange);\r\n if (DbOpcode.Delete === elementChange.type) {\r\n if (undefined === deletedIds)\r\n deletedIds = new Set<Id64String>();\r\n deletedIds.add(elementChange.id);\r\n }\r\n }\r\n }\r\n\r\n if (deletedIds) {\r\n this.iModel.selectionSet.remove(deletedIds);\r\n this.iModel.hilited.setHilite(deletedIds, false);\r\n }\r\n\r\n this.onGeometryChanges.raiseEvent(changes, this);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionSet.d.ts","sourceRoot":"","sources":["../../src/SelectionSet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SelectionSet.d.ts","sourceRoot":"","sources":["../../src/SelectionSet.ts"],"names":[],"mappings":"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"}