@itwin/core-frontend 4.3.0-dev.14 → 4.3.0-dev.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +23 -1
- package/lib/cjs/DrawingViewState.d.ts +4 -2
- package/lib/cjs/DrawingViewState.d.ts.map +1 -1
- package/lib/cjs/DrawingViewState.js +6 -3
- package/lib/cjs/DrawingViewState.js.map +1 -1
- package/lib/cjs/SheetViewState.d.ts +5 -1
- package/lib/cjs/SheetViewState.d.ts.map +1 -1
- package/lib/cjs/SheetViewState.js +25 -5
- package/lib/cjs/SheetViewState.js.map +1 -1
- package/lib/cjs/SpatialViewState.d.ts.map +1 -1
- package/lib/cjs/SpatialViewState.js +1 -0
- package/lib/cjs/SpatialViewState.js.map +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js +1 -1
- package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/esm/DrawingViewState.d.ts +4 -2
- package/lib/esm/DrawingViewState.d.ts.map +1 -1
- package/lib/esm/DrawingViewState.js +6 -3
- package/lib/esm/DrawingViewState.js.map +1 -1
- package/lib/esm/SheetViewState.d.ts +5 -1
- package/lib/esm/SheetViewState.d.ts.map +1 -1
- package/lib/esm/SheetViewState.js +25 -5
- package/lib/esm/SheetViewState.js.map +1 -1
- package/lib/esm/SpatialViewState.d.ts.map +1 -1
- package/lib/esm/SpatialViewState.js +1 -0
- package/lib/esm/SpatialViewState.js.map +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js +1 -1
- package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
- package/lib/public/scripts/parse-imdl-worker.js +1 -1
- package/lib/workers/webpack/parse-imdl-worker.js +1 -1
- package/package.json +18 -18
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArcGisUtilities.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisUtilities.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { Angle, Constant } from \"@itwin/core-geometry\";\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { MapCartoRectangle, MapLayerAccessClient, MapLayerAccessToken, MapLayerAccessTokenParams, MapLayerSource, MapLayerSourceStatus, MapLayerSourceValidation} from \"../internal\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\n\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\n/**\r\n * Class representing an ArcGIS error code.\r\n * @internal\r\n */\r\nexport enum ArcGisErrorCode {\r\n InvalidCredentials = 401,\r\n InvalidToken = 498,\r\n TokenRequired = 499,\r\n UnknownError = 1000,\r\n NoTokenService = 1001,\r\n}\r\n\r\n/**\r\n * Class representing an ArcGIS service metadata.\r\n * @internal\r\n */\r\nexport interface ArcGISServiceMetadata {\r\n /** JSON content from the service */\r\n content: any;\r\n\r\n /** Indicates if an access token is required to access the service */\r\n accessTokenRequired: boolean;\r\n}\r\n\r\n/**\r\n * Class containing utilities relating to ArcGIS services and coordinate systems.\r\n * @internal\r\n */\r\nexport class ArcGisUtilities {\r\n\r\n private static getBBoxString(range?: MapCartoRectangle) {\r\n if (!range)\r\n range = MapCartoRectangle.createMaximum();\r\n\r\n return `${range.low.x * Angle.degreesPerRadian},${range.low.y * Angle.degreesPerRadian},${range.high.x * Angle.degreesPerRadian},${range.high.y * Angle.degreesPerRadian}`;\r\n }\r\n\r\n public static async getNationalMapSources(): Promise<MapLayerSource[]> {\r\n const sources = new Array<MapLayerSource>();\r\n const response = await fetch(\"https://viewer.nationalmap.gov/tnmaccess/api/getMapServiceList\", { method: \"GET\" });\r\n const services = await response.json();\r\n\r\n if (!Array.isArray(services))\r\n return sources;\r\n\r\n for (const service of services) {\r\n if (service.wmsUrl.length === 0) // Exclude Wfs..\r\n continue;\r\n switch (service.serviceType) {\r\n case \"ArcGIS\":\r\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url: service.serviceLink, formatId: \"ArcGIS\" })!);\r\n break;\r\n default: {\r\n const wmsIndex = service.wmsUrl.lastIndexOf(\"/wms\");\r\n if (wmsIndex > 0) {\r\n const url = service.wmsUrl.slice(0, wmsIndex + 4);\r\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url, formatId: \"WMS\" })!);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return sources;\r\n }\r\n\r\n public static async getServiceDirectorySources(url: string, baseUrl?: string): Promise<MapLayerSource[]> {\r\n if (undefined === baseUrl)\r\n baseUrl = url;\r\n let sources = new Array<MapLayerSource>();\r\n const response = await fetch(`${url}?f=json`, { method: \"GET\" });\r\n const json = await response.json();\r\n if (json !== undefined) {\r\n if (Array.isArray(json.folders)) {\r\n for (const folder of json.folders) {\r\n sources = sources.concat(await ArcGisUtilities.getServiceDirectorySources(`${url}/${folder}`, url));\r\n }\r\n }\r\n if (Array.isArray(json.services)) {\r\n for (const service of json.services) {\r\n let source;\r\n if (service.type === \"MapServer\")\r\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/MapServer`, formatId: \"ArcGIS\" });\r\n else if (service.type === \"ImageServer\")\r\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/ImageServer`, formatId: \"ArcGIS\" });\r\n if (source)\r\n sources.push(source);\r\n }\r\n }\r\n }\r\n\r\n return sources;\r\n }\r\n\r\n /**\r\n * Get map layer sources from an ArcGIS query.\r\n * @param range Range for the query.\r\n * @param url URL for the query.\r\n * @returns List of map layer sources.\r\n */\r\n public static async getSourcesFromQuery(range?: MapCartoRectangle, url = \"https://usgs.maps.arcgis.com/sharing/rest/search\"): Promise<MapLayerSource[]> {\r\n const sources = new Array<MapLayerSource>();\r\n for (let start = 1; start > 0;) {\r\n const response = await fetch(`${url}?f=json&q=(group:9d1199a521334e77a7d15abbc29f8144) AND (type:\"Map Service\")&bbox=${ArcGisUtilities.getBBoxString(range)}&sortOrder=desc&start=${start}&num=100`, { method: \"GET\" });\r\n const json = await response.json();\r\n if (!json)\r\n break;\r\n\r\n start = json.nextStart ? json.nextStart : -1;\r\n if (json !== undefined && Array.isArray(json.results)) {\r\n for (const result of json.results) {\r\n const source = MapLayerSource.fromJSON({ name: result.name ? result.name : result.title, url: result.url, formatId: \"ArcGIS\" });\r\n if (source)\r\n sources.push(source);\r\n }\r\n }\r\n }\r\n\r\n return sources;\r\n }\r\n\r\n /**\r\n * Parse the URL to check if it represents a valid ArcGIS service\r\n * @param url URL to validate.\r\n * @param serviceType Service type to validate (i.e FeatureServer, MapServer)\r\n * @return Validation Status.\r\n */\r\n public static validateUrl(url: string, serviceType: string): MapLayerSourceStatus {\r\n const urlObj = new URL(url.toLowerCase());\r\n if (urlObj.pathname.includes(\"/rest/services/\")) {\r\n // This seem to be an ArcGIS URL, lets check the service type\r\n if (urlObj.pathname.endsWith(`${serviceType.toLowerCase()}`)) {\r\n return MapLayerSourceStatus.Valid;\r\n } else {\r\n return MapLayerSourceStatus.IncompatibleFormat;\r\n }\r\n } else {\r\n return MapLayerSourceStatus.InvalidUrl;\r\n }\r\n }\r\n\r\n /**\r\n * Attempt to access an ArcGIS service, and validate its service metadata.\r\n * @param url URL of the source to validate.\r\n * @param formatId Format Id of the source.\r\n * @param capabilitiesFilter List of capabilities 'keyword' that needs to be advertised in the service's metadata\r\n * in order to be valid. For example: 'Map', 'Query', etc\r\n * @param userName Username to use for legacy token based security.\r\n * @param password Password to use for legacy token based security.\r\n * @param ignoreCache Flag to skip cache lookup (i.e. force a new server request)\r\n * @return Validation Status. If successful, a list of available sub-layers will also be returned.\r\n */\r\n public static async validateSource(url: string, formatId: string, capabilitiesFilter: string[], userName?: string, password?: string, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\r\n const metadata = await this.getServiceJson(url, formatId, userName, password, ignoreCache);\r\n const json = metadata?.content;\r\n if (json === undefined) {\r\n return { status: MapLayerSourceStatus.InvalidUrl };\r\n } else if (json.error !== undefined) {\r\n\r\n // If we got a 'Token Required' error, lets check what authentification methods this ESRI service offers\r\n // and return information needed to initiate the authentification process... the end-user\r\n // will have to provide his credentials before we can fully validate this source.\r\n if (json.error.code === ArcGisErrorCode.TokenRequired) {\r\n return { status: MapLayerSourceStatus.RequireAuth};\r\n } else if (json.error.code === ArcGisErrorCode.InvalidCredentials)\r\n return { status: MapLayerSourceStatus.InvalidCredentials};\r\n }\r\n\r\n // Check this service support the expected queries\r\n let hasCapabilities = false;\r\n let capsArray: string[] = [];\r\n if (json.capabilities && typeof json.capabilities === \"string\" ) {\r\n const capabilities: string = json.capabilities;\r\n capsArray = capabilities.split(\",\").map((entry) => entry.toLowerCase());\r\n\r\n const filtered = capsArray.filter((element, _index, _array) => capabilitiesFilter.includes(element));\r\n hasCapabilities = (filtered.length === capabilitiesFilter.length);\r\n }\r\n if (!hasCapabilities) {\r\n return { status: MapLayerSourceStatus.InvalidFormat};\r\n }\r\n\r\n // Only EPSG:3857 is supported with pre-rendered tiles.\r\n if (json.tileInfo && capsArray.includes(\"tilesonly\") && !ArcGisUtilities.isEpsg3857Compatible(json.tileInfo)) {\r\n return { status: MapLayerSourceStatus.InvalidCoordinateSystem};\r\n }\r\n\r\n let subLayers;\r\n if (json.layers) {\r\n\r\n subLayers = new Array<MapSubLayerProps>();\r\n\r\n for (const layer of json.layers) {\r\n const parent = layer.parentLayerId < 0 ? undefined : layer.parentLayerId;\r\n const children = Array.isArray(layer.subLayerIds) ? layer.subLayerIds : undefined;\r\n subLayers.push({ name: layer.name, visible: layer.defaultVisibility !== false, id: layer.id, parent, children });\r\n }\r\n }\r\n return { status: MapLayerSourceStatus.Valid, subLayers };\r\n }\r\n\r\n /** Validate MapService tiling metadata and checks if the tile tree is 'Google Maps' compatible. */\r\n public static isEpsg3857Compatible(tileInfo: any) {\r\n if (tileInfo.spatialReference?.latestWkid !== 3857 || !Array.isArray(tileInfo.lods))\r\n return false;\r\n\r\n const zeroLod = tileInfo.lods[0];\r\n return zeroLod.level === 0 && Math.abs(zeroLod.resolution - 156543.03392800014) < .001;\r\n }\r\n\r\n private static _serviceCache = new Map<string, ArcGISServiceMetadata|undefined>();\r\n\r\n /**\r\n * Fetches an ArcGIS service metadata, and returns its JSON representation.\r\n * If an access client has been configured for the specified formatId,\r\n * it will be used to apply required security token.\r\n * By default, response for each URL are cached.\r\n * @param url URL of the ArcGIS service\r\n * @param formatId Format ID of the service\r\n * @param userName Username to use for legacy token based security\r\n * @param password Password to use for legacy token based security\r\n * @param ignoreCache Flag to skip cache lookup (i.e. force a new server request)\r\n * @param requireToken Flag to indicate if a token is required\r\n */\r\n public static async getServiceJson(url: string, formatId: string, userName?: string, password?: string, ignoreCache?: boolean, requireToken?: boolean): Promise<ArcGISServiceMetadata|undefined> {\r\n if (!ignoreCache) {\r\n const cached = ArcGisUtilities._serviceCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n }\r\n\r\n let accessTokenRequired = false;\r\n try {\r\n let tmpUrl = new URL(url);\r\n tmpUrl.searchParams.append(\"f\", \"json\");\r\n\r\n // In some cases, caller might already know token is required, so append it immediately\r\n if (requireToken) {\r\n const accessClient = IModelApp.mapLayerFormatRegistry.getAccessClient(formatId);\r\n if (accessClient) {\r\n accessTokenRequired = true;\r\n await ArcGisUtilities.appendSecurityToken(tmpUrl, accessClient, {mapLayerUrl: new URL(url), userName, password});\r\n }\r\n }\r\n let response = await fetch(tmpUrl.toString(), { method: \"GET\" });\r\n\r\n // Append security token when corresponding error code is returned by ArcGIS service\r\n let errorCode = await ArcGisUtilities.checkForResponseErrorCode(response);\r\n if (!accessTokenRequired\r\n && errorCode !== undefined\r\n && errorCode === ArcGisErrorCode.TokenRequired ) {\r\n accessTokenRequired = true;\r\n // If token required\r\n const accessClient = IModelApp.mapLayerFormatRegistry.getAccessClient(formatId);\r\n if (accessClient) {\r\n tmpUrl = new URL(url);\r\n tmpUrl.searchParams.append(\"f\", \"json\");\r\n await ArcGisUtilities.appendSecurityToken(tmpUrl, accessClient, {mapLayerUrl: new URL(url), userName, password});\r\n response = await fetch(tmpUrl.toString(), { method: \"GET\" });\r\n errorCode = await ArcGisUtilities.checkForResponseErrorCode(response);\r\n }\r\n }\r\n\r\n const json = await response.json();\r\n const info = {content: json, accessTokenRequired};\r\n // Cache the response only if it doesn't contain any error.\r\n ArcGisUtilities._serviceCache.set(url, (errorCode === undefined ? info : undefined));\r\n return info; // Always return json, even though it contains an error code.\r\n\r\n } catch (_error) {\r\n ArcGisUtilities._serviceCache.set(url, undefined);\r\n return undefined;\r\n }\r\n }\r\n\r\n /** Read a response from ArcGIS server and check for error code in the response. */\r\n public static async checkForResponseErrorCode(response: Response) {\r\n const tmpResponse = response;\r\n if (response.headers && tmpResponse.headers.get(\"content-type\")?.toLowerCase().includes(\"json\")) {\r\n\r\n try {\r\n // Note:\r\n // Since response stream can only be read once (i.e. calls to .json() method)\r\n // we have to clone the response object in order to check for potential error code,\r\n // but still keep the response stream as unread.\r\n const clonedResponse = tmpResponse.clone();\r\n const json = await clonedResponse.json();\r\n if (json?.error?.code !== undefined)\r\n return json?.error?.code as number;\r\n } catch { }\r\n\r\n }\r\n return undefined;\r\n }\r\n\r\n // return the appended access token if available.\r\n public static async appendSecurityToken(url: URL, accessClient: MapLayerAccessClient, accessTokenParams: MapLayerAccessTokenParams): Promise<MapLayerAccessToken|undefined> {\r\n\r\n // Append security token if available\r\n let accessToken: MapLayerAccessToken|undefined;\r\n try {\r\n accessToken = await accessClient.getAccessToken(accessTokenParams);\r\n } catch {}\r\n\r\n if (accessToken?.token) {\r\n url.searchParams.append(\"token\", accessToken.token);\r\n return accessToken;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Compute scale, resolution values for requested zoom levels (WSG 84)\r\n * Use a scale of 96 dpi for Google Maps scales\r\n * Based on this article: https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Resolution_and_Scale\r\n * @param startZoom Zoom level where scales begins to be computed\r\n * @param endZoom Zoom level where scales ends to be computed\r\n * @param latitude Latitude in degrees to use to compute scales (i.e 0 for Equator)\r\n * @param tileSize Size of a tile in pixels (i.e 256)\r\n * @param screenDpi Monitor resolution in dots per inch (i.e. typically 96dpi is used by Google Maps)\r\n * @returns An array containing resolution and scale values for each requested zoom level\r\n */\r\n public static computeZoomLevelsScales(startZoom: number = 0, endZoom: number = 20, latitude: number = 0, tileSize: number = 256, screenDpi = 96): {zoom: number, resolution: number, scale: number}[] {\r\n // Note: There is probably a more direct way to compute this, but I prefer to go for a simple and well documented approach.\r\n if (startZoom <0 || endZoom < startZoom || tileSize < 0 || screenDpi < 1 || latitude < -90 || latitude > 90)\r\n return [];\r\n\r\n const inchPerMeter = 1 / 0.0254;\r\n const results: {zoom: number, resolution: number, scale: number}[] = [];\r\n const equatorLength = Constant.earthRadiusWGS84.equator * 2 * Math.PI;\r\n const zoom0Resolution = equatorLength / tileSize; // in meters per pixel\r\n\r\n const cosLatitude = Math.cos(latitude);\r\n for (let zoom = startZoom; zoom<= endZoom; zoom++) {\r\n const resolution = zoom0Resolution * cosLatitude / Math.pow(2, zoom);\r\n const scale = screenDpi * inchPerMeter * resolution;\r\n results.push({zoom, resolution, scale});\r\n }\r\n\r\n return results;\r\n }\r\n\r\n /**\r\n * Match the provided minScale, maxScale values to corresponding wgs84 zoom levels\r\n * @param defaultMaxLod Value of the last LOD (i.e 22)\r\n * @param tileSize Size of a tile in pixels (i.e 256)\r\n * @param minScale Minimum scale value that needs to be matched to a LOD level\r\n * @param maxScale Maximum scale value that needs to be matched to a LOD level\r\n * @returns minLod: LOD value matching minScale, maxLod: LOD value matching maxScale\r\n */\r\n public static getZoomLevelsScales( defaultMaxLod: number, tileSize: number, minScale?: number, maxScale?: number, tolerance: number = 0): {minLod?: number, maxLod?: number} {\r\n\r\n let minLod: number|undefined, maxLod: number|undefined;\r\n\r\n const zoomScales = ArcGisUtilities.computeZoomLevelsScales(0, defaultMaxLod, 0 /* latitude 0 = Equator*/, tileSize);\r\n\r\n if (zoomScales.length > 0) {\r\n\r\n if (minScale) {\r\n minLod = 0;\r\n // We are looking for the largest scale value with a scale value smaller than minScale\r\n for (; minLod < zoomScales.length && (zoomScales[minLod].scale > minScale && Math.abs(zoomScales[minLod].scale - minScale) > tolerance); minLod++)\r\n ;\r\n\r\n }\r\n\r\n if (maxScale) {\r\n maxLod = defaultMaxLod;\r\n // We are looking for the smallest scale value with a value greater than maxScale\r\n for (; maxLod >= 0 && zoomScales[maxLod].scale < maxScale && Math.abs(zoomScales[maxLod].scale - maxScale) > tolerance; maxLod--)\r\n ;\r\n }\r\n }\r\n return {minLod, maxLod};\r\n }\r\n\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ArcGisUtilities.js","sourceRoot":"","sources":["../../../../src/tile/map/ArcGisUtilities.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\nimport { Angle, Constant } from \"@itwin/core-geometry\";\r\nimport { MapSubLayerProps } from \"@itwin/core-common\";\r\nimport { MapCartoRectangle, MapLayerAccessClient, MapLayerAccessToken, MapLayerAccessTokenParams, MapLayerSource, MapLayerSourceStatus, MapLayerSourceValidation} from \"../internal\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\n\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\n/**\r\n * Class representing an ArcGIS error code.\r\n * @internal\r\n */\r\nexport enum ArcGisErrorCode {\r\n InvalidCredentials = 401,\r\n InvalidToken = 498,\r\n TokenRequired = 499,\r\n UnknownError = 1000,\r\n NoTokenService = 1001,\r\n}\r\n\r\n/**\r\n * Class representing an ArcGIS service metadata.\r\n * @internal\r\n */\r\nexport interface ArcGISServiceMetadata {\r\n /** JSON content from the service */\r\n content: any;\r\n\r\n /** Indicates if an access token is required to access the service */\r\n accessTokenRequired: boolean;\r\n}\r\n\r\n/**\r\n * Class containing utilities relating to ArcGIS services and coordinate systems.\r\n * @internal\r\n */\r\nexport class ArcGisUtilities {\r\n\r\n private static getBBoxString(range?: MapCartoRectangle) {\r\n if (!range)\r\n range = MapCartoRectangle.createMaximum();\r\n\r\n return `${range.low.x * Angle.degreesPerRadian},${range.low.y * Angle.degreesPerRadian},${range.high.x * Angle.degreesPerRadian},${range.high.y * Angle.degreesPerRadian}`;\r\n }\r\n\r\n public static async getNationalMapSources(): Promise<MapLayerSource[]> {\r\n const sources = new Array<MapLayerSource>();\r\n const response = await fetch(\"https://viewer.nationalmap.gov/tnmaccess/api/getMapServiceList\", { method: \"GET\" });\r\n const services = await response.json();\r\n\r\n if (!Array.isArray(services))\r\n return sources;\r\n\r\n for (const service of services) {\r\n if (service.wmsUrl.length === 0) // Exclude Wfs..\r\n continue;\r\n switch (service.serviceType) {\r\n case \"ArcGIS\":\r\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url: service.serviceLink, formatId: \"ArcGIS\" })!);\r\n break;\r\n default: {\r\n const wmsIndex = service.wmsUrl.lastIndexOf(\"/wms\");\r\n if (wmsIndex > 0) {\r\n const url = service.wmsUrl.slice(0, wmsIndex + 4);\r\n sources.push(MapLayerSource.fromJSON({ name: service.displayName, url, formatId: \"WMS\" })!);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return sources;\r\n }\r\n\r\n public static async getServiceDirectorySources(url: string, baseUrl?: string): Promise<MapLayerSource[]> {\r\n if (undefined === baseUrl)\r\n baseUrl = url;\r\n let sources = new Array<MapLayerSource>();\r\n const response = await fetch(`${url}?f=json`, { method: \"GET\" });\r\n const json = await response.json();\r\n if (json !== undefined) {\r\n if (Array.isArray(json.folders)) {\r\n for (const folder of json.folders) {\r\n sources = sources.concat(await ArcGisUtilities.getServiceDirectorySources(`${url}/${folder}`, url));\r\n }\r\n }\r\n if (Array.isArray(json.services)) {\r\n for (const service of json.services) {\r\n let source;\r\n if (service.type === \"MapServer\")\r\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/MapServer`, formatId: \"ArcGIS\" });\r\n else if (service.type === \"ImageServer\")\r\n source = MapLayerSource.fromJSON({ name: service.name, url: `${baseUrl}/${service.name}/ImageServer`, formatId: \"ArcGIS\" });\r\n if (source)\r\n sources.push(source);\r\n }\r\n }\r\n }\r\n\r\n return sources;\r\n }\r\n\r\n /**\r\n * Get map layer sources from an ArcGIS query.\r\n * @param range Range for the query.\r\n * @param url URL for the query.\r\n * @returns List of map layer sources.\r\n */\r\n public static async getSourcesFromQuery(range?: MapCartoRectangle, url = \"https://usgs.maps.arcgis.com/sharing/rest/search\"): Promise<MapLayerSource[]> {\r\n const sources = new Array<MapLayerSource>();\r\n for (let start = 1; start > 0;) {\r\n const response = await fetch(`${url}?f=json&q=(group:9d1199a521334e77a7d15abbc29f8144) AND (type:\"Map Service\")&bbox=${ArcGisUtilities.getBBoxString(range)}&sortOrder=desc&start=${start}&num=100`, { method: \"GET\" });\r\n const json = await response.json();\r\n if (!json)\r\n break;\r\n\r\n start = json.nextStart ? json.nextStart : -1;\r\n if (json !== undefined && Array.isArray(json.results)) {\r\n for (const result of json.results) {\r\n const source = MapLayerSource.fromJSON({ name: result.name ? result.name : result.title, url: result.url, formatId: \"ArcGIS\" });\r\n if (source)\r\n sources.push(source);\r\n }\r\n }\r\n }\r\n\r\n return sources;\r\n }\r\n\r\n /**\r\n * Parse the URL to check if it represents a valid ArcGIS service\r\n * @param url URL to validate.\r\n * @param serviceType Service type to validate (i.e FeatureServer, MapServer)\r\n * @return Validation Status.\r\n */\r\n public static validateUrl(url: string, serviceType: string): MapLayerSourceStatus {\r\n const urlObj = new URL(url.toLowerCase());\r\n if (urlObj.pathname.includes(\"/rest/services/\")) {\r\n // This seem to be an ArcGIS URL, lets check the service type\r\n if (urlObj.pathname.endsWith(`${serviceType.toLowerCase()}`)) {\r\n return MapLayerSourceStatus.Valid;\r\n } else {\r\n return MapLayerSourceStatus.IncompatibleFormat;\r\n }\r\n } else {\r\n return MapLayerSourceStatus.InvalidUrl;\r\n }\r\n }\r\n\r\n /**\r\n * Attempt to access an ArcGIS service, and validate its service metadata.\r\n * @param url URL of the source to validate.\r\n * @param formatId Format Id of the source.\r\n * @param capabilitiesFilter List of capabilities 'keyword' that needs to be advertised in the service's metadata\r\n * in order to be valid. For example: 'Map', 'Query', etc\r\n * @param userName Username to use for legacy token based security.\r\n * @param password Password to use for legacy token based security.\r\n * @param ignoreCache Flag to skip cache lookup (i.e. force a new server request)\r\n * @return Validation Status. If successful, a list of available sub-layers will also be returned.\r\n */\r\n public static async validateSource(url: string, formatId: string, capabilitiesFilter: string[], userName?: string, password?: string, ignoreCache?: boolean): Promise<MapLayerSourceValidation> {\r\n const metadata = await this.getServiceJson(url, formatId, userName, password, ignoreCache);\r\n const json = metadata?.content;\r\n if (json === undefined) {\r\n return { status: MapLayerSourceStatus.InvalidUrl };\r\n } else if (json.error !== undefined) {\r\n\r\n // If we got a 'Token Required' error, lets check what authentification methods this ESRI service offers\r\n // and return information needed to initiate the authentification process... the end-user\r\n // will have to provide his credentials before we can fully validate this source.\r\n if (json.error.code === ArcGisErrorCode.TokenRequired) {\r\n return (userName || password) ? {status: MapLayerSourceStatus.InvalidCredentials} : {status: MapLayerSourceStatus.RequireAuth};\r\n } else if (json.error.code === ArcGisErrorCode.InvalidCredentials)\r\n return { status: MapLayerSourceStatus.InvalidCredentials};\r\n }\r\n\r\n // Check this service support the expected queries\r\n let hasCapabilities = false;\r\n let capsArray: string[] = [];\r\n if (json.capabilities && typeof json.capabilities === \"string\" ) {\r\n const capabilities: string = json.capabilities;\r\n capsArray = capabilities.split(\",\").map((entry) => entry.toLowerCase());\r\n\r\n const filtered = capsArray.filter((element, _index, _array) => capabilitiesFilter.includes(element));\r\n hasCapabilities = (filtered.length === capabilitiesFilter.length);\r\n }\r\n if (!hasCapabilities) {\r\n return { status: MapLayerSourceStatus.InvalidFormat};\r\n }\r\n\r\n // Only EPSG:3857 is supported with pre-rendered tiles.\r\n if (json.tileInfo && capsArray.includes(\"tilesonly\") && !ArcGisUtilities.isEpsg3857Compatible(json.tileInfo)) {\r\n return { status: MapLayerSourceStatus.InvalidCoordinateSystem};\r\n }\r\n\r\n let subLayers;\r\n if (json.layers) {\r\n\r\n subLayers = new Array<MapSubLayerProps>();\r\n\r\n for (const layer of json.layers) {\r\n const parent = layer.parentLayerId < 0 ? undefined : layer.parentLayerId;\r\n const children = Array.isArray(layer.subLayerIds) ? layer.subLayerIds : undefined;\r\n subLayers.push({ name: layer.name, visible: layer.defaultVisibility !== false, id: layer.id, parent, children });\r\n }\r\n }\r\n return { status: MapLayerSourceStatus.Valid, subLayers };\r\n }\r\n\r\n /** Validate MapService tiling metadata and checks if the tile tree is 'Google Maps' compatible. */\r\n public static isEpsg3857Compatible(tileInfo: any) {\r\n if (tileInfo.spatialReference?.latestWkid !== 3857 || !Array.isArray(tileInfo.lods))\r\n return false;\r\n\r\n const zeroLod = tileInfo.lods[0];\r\n return zeroLod.level === 0 && Math.abs(zeroLod.resolution - 156543.03392800014) < .001;\r\n }\r\n\r\n private static _serviceCache = new Map<string, ArcGISServiceMetadata|undefined>();\r\n\r\n /**\r\n * Fetches an ArcGIS service metadata, and returns its JSON representation.\r\n * If an access client has been configured for the specified formatId,\r\n * it will be used to apply required security token.\r\n * By default, response for each URL are cached.\r\n * @param url URL of the ArcGIS service\r\n * @param formatId Format ID of the service\r\n * @param userName Username to use for legacy token based security\r\n * @param password Password to use for legacy token based security\r\n * @param ignoreCache Flag to skip cache lookup (i.e. force a new server request)\r\n * @param requireToken Flag to indicate if a token is required\r\n */\r\n public static async getServiceJson(url: string, formatId: string, userName?: string, password?: string, ignoreCache?: boolean, requireToken?: boolean): Promise<ArcGISServiceMetadata|undefined> {\r\n if (!ignoreCache) {\r\n const cached = ArcGisUtilities._serviceCache.get(url);\r\n if (cached !== undefined)\r\n return cached;\r\n }\r\n\r\n let accessTokenRequired = false;\r\n try {\r\n let tmpUrl = new URL(url);\r\n tmpUrl.searchParams.append(\"f\", \"json\");\r\n\r\n // In some cases, caller might already know token is required, so append it immediately\r\n if (requireToken) {\r\n const accessClient = IModelApp.mapLayerFormatRegistry.getAccessClient(formatId);\r\n if (accessClient) {\r\n accessTokenRequired = true;\r\n await ArcGisUtilities.appendSecurityToken(tmpUrl, accessClient, {mapLayerUrl: new URL(url), userName, password});\r\n }\r\n }\r\n let response = await fetch(tmpUrl.toString(), { method: \"GET\" });\r\n\r\n // Append security token when corresponding error code is returned by ArcGIS service\r\n let errorCode = await ArcGisUtilities.checkForResponseErrorCode(response);\r\n if (!accessTokenRequired\r\n && errorCode !== undefined\r\n && errorCode === ArcGisErrorCode.TokenRequired ) {\r\n accessTokenRequired = true;\r\n // If token required\r\n const accessClient = IModelApp.mapLayerFormatRegistry.getAccessClient(formatId);\r\n if (accessClient) {\r\n tmpUrl = new URL(url);\r\n tmpUrl.searchParams.append(\"f\", \"json\");\r\n await ArcGisUtilities.appendSecurityToken(tmpUrl, accessClient, {mapLayerUrl: new URL(url), userName, password});\r\n response = await fetch(tmpUrl.toString(), { method: \"GET\" });\r\n errorCode = await ArcGisUtilities.checkForResponseErrorCode(response);\r\n }\r\n }\r\n\r\n const json = await response.json();\r\n const info = {content: json, accessTokenRequired};\r\n // Cache the response only if it doesn't contain any error.\r\n ArcGisUtilities._serviceCache.set(url, (errorCode === undefined ? info : undefined));\r\n return info; // Always return json, even though it contains an error code.\r\n\r\n } catch (_error) {\r\n ArcGisUtilities._serviceCache.set(url, undefined);\r\n return undefined;\r\n }\r\n }\r\n\r\n /** Read a response from ArcGIS server and check for error code in the response. */\r\n public static async checkForResponseErrorCode(response: Response) {\r\n const tmpResponse = response;\r\n if (response.headers && tmpResponse.headers.get(\"content-type\")?.toLowerCase().includes(\"json\")) {\r\n\r\n try {\r\n // Note:\r\n // Since response stream can only be read once (i.e. calls to .json() method)\r\n // we have to clone the response object in order to check for potential error code,\r\n // but still keep the response stream as unread.\r\n const clonedResponse = tmpResponse.clone();\r\n const json = await clonedResponse.json();\r\n if (json?.error?.code !== undefined)\r\n return json?.error?.code as number;\r\n } catch { }\r\n\r\n }\r\n return undefined;\r\n }\r\n\r\n // return the appended access token if available.\r\n public static async appendSecurityToken(url: URL, accessClient: MapLayerAccessClient, accessTokenParams: MapLayerAccessTokenParams): Promise<MapLayerAccessToken|undefined> {\r\n\r\n // Append security token if available\r\n let accessToken: MapLayerAccessToken|undefined;\r\n try {\r\n accessToken = await accessClient.getAccessToken(accessTokenParams);\r\n } catch {}\r\n\r\n if (accessToken?.token) {\r\n url.searchParams.append(\"token\", accessToken.token);\r\n return accessToken;\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Compute scale, resolution values for requested zoom levels (WSG 84)\r\n * Use a scale of 96 dpi for Google Maps scales\r\n * Based on this article: https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames#Resolution_and_Scale\r\n * @param startZoom Zoom level where scales begins to be computed\r\n * @param endZoom Zoom level where scales ends to be computed\r\n * @param latitude Latitude in degrees to use to compute scales (i.e 0 for Equator)\r\n * @param tileSize Size of a tile in pixels (i.e 256)\r\n * @param screenDpi Monitor resolution in dots per inch (i.e. typically 96dpi is used by Google Maps)\r\n * @returns An array containing resolution and scale values for each requested zoom level\r\n */\r\n public static computeZoomLevelsScales(startZoom: number = 0, endZoom: number = 20, latitude: number = 0, tileSize: number = 256, screenDpi = 96): {zoom: number, resolution: number, scale: number}[] {\r\n // Note: There is probably a more direct way to compute this, but I prefer to go for a simple and well documented approach.\r\n if (startZoom <0 || endZoom < startZoom || tileSize < 0 || screenDpi < 1 || latitude < -90 || latitude > 90)\r\n return [];\r\n\r\n const inchPerMeter = 1 / 0.0254;\r\n const results: {zoom: number, resolution: number, scale: number}[] = [];\r\n const equatorLength = Constant.earthRadiusWGS84.equator * 2 * Math.PI;\r\n const zoom0Resolution = equatorLength / tileSize; // in meters per pixel\r\n\r\n const cosLatitude = Math.cos(latitude);\r\n for (let zoom = startZoom; zoom<= endZoom; zoom++) {\r\n const resolution = zoom0Resolution * cosLatitude / Math.pow(2, zoom);\r\n const scale = screenDpi * inchPerMeter * resolution;\r\n results.push({zoom, resolution, scale});\r\n }\r\n\r\n return results;\r\n }\r\n\r\n /**\r\n * Match the provided minScale, maxScale values to corresponding wgs84 zoom levels\r\n * @param defaultMaxLod Value of the last LOD (i.e 22)\r\n * @param tileSize Size of a tile in pixels (i.e 256)\r\n * @param minScale Minimum scale value that needs to be matched to a LOD level\r\n * @param maxScale Maximum scale value that needs to be matched to a LOD level\r\n * @returns minLod: LOD value matching minScale, maxLod: LOD value matching maxScale\r\n */\r\n public static getZoomLevelsScales( defaultMaxLod: number, tileSize: number, minScale?: number, maxScale?: number, tolerance: number = 0): {minLod?: number, maxLod?: number} {\r\n\r\n let minLod: number|undefined, maxLod: number|undefined;\r\n\r\n const zoomScales = ArcGisUtilities.computeZoomLevelsScales(0, defaultMaxLod, 0 /* latitude 0 = Equator*/, tileSize);\r\n\r\n if (zoomScales.length > 0) {\r\n\r\n if (minScale) {\r\n minLod = 0;\r\n // We are looking for the largest scale value with a scale value smaller than minScale\r\n for (; minLod < zoomScales.length && (zoomScales[minLod].scale > minScale && Math.abs(zoomScales[minLod].scale - minScale) > tolerance); minLod++)\r\n ;\r\n\r\n }\r\n\r\n if (maxScale) {\r\n maxLod = defaultMaxLod;\r\n // We are looking for the smallest scale value with a value greater than maxScale\r\n for (; maxLod >= 0 && zoomScales[maxLod].scale < maxScale && Math.abs(zoomScales[maxLod].scale - maxScale) > tolerance; maxLod--)\r\n ;\r\n }\r\n }\r\n return {minLod, maxLod};\r\n }\r\n\r\n}\r\n"]}
|
|
@@ -9,7 +9,7 @@ import { DisplayStyle2dState } from "./DisplayStyleState";
|
|
|
9
9
|
import { IModelConnection } from "./IModelConnection";
|
|
10
10
|
import { DisclosedTileTreeSet } from "./tile/internal";
|
|
11
11
|
import { SceneContext } from "./ViewContext";
|
|
12
|
-
import { AttachToViewportArgs, ExtentLimits, ViewState2d } from "./ViewState";
|
|
12
|
+
import { AttachToViewportArgs, ExtentLimits, ViewState2d, ViewState3d } from "./ViewState";
|
|
13
13
|
/** Strictly for testing.
|
|
14
14
|
* @internal
|
|
15
15
|
*/
|
|
@@ -43,7 +43,9 @@ export declare class DrawingViewState extends ViewState2d {
|
|
|
43
43
|
/** Strictly for testing. @internal */
|
|
44
44
|
get attachment(): Object | undefined;
|
|
45
45
|
/** Strictly for testing. @internal */
|
|
46
|
-
get attachmentInfo():
|
|
46
|
+
get attachmentInfo(): {
|
|
47
|
+
spatialView: Id64String | ViewState3d;
|
|
48
|
+
};
|
|
47
49
|
constructor(props: ViewDefinition2dProps, iModel: IModelConnection, categories: CategorySelectorState, displayStyle: DisplayStyle2dState, extents: AxisAlignedBox3d, sectionDrawing?: SectionDrawingViewProps);
|
|
48
50
|
/** See [[ViewState.attachToViewport]]. */
|
|
49
51
|
attachToViewport(args: AttachToViewportArgs): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrawingViewState.d.ts","sourceRoot":"","sources":["../../src/DrawingViewState.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAyB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EACL,gBAAgB,EAAW,4BAA4B,EAAE,6BAA6B,EAAkB,uBAAuB,EAAE,qBAAqB,EAAqB,cAAc,EAC1L,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAqB,SAAS,EAAkB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAMtD,OAAO,EAAE,oBAAoB,EAAmB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"DrawingViewState.d.ts","sourceRoot":"","sources":["../../src/DrawingViewState.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAyB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EACL,gBAAgB,EAAW,4BAA4B,EAAE,6BAA6B,EAAkB,uBAAuB,EAAE,qBAAqB,EAAqB,cAAc,EAC1L,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAqB,SAAS,EAAkB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAMtD,OAAO,EAAE,oBAAoB,EAAmB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC;IACjC,QAAQ,CAAC,yBAAyB,EAAE,SAAS,CAAC;CAC/C;AAsQD;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,WAA2B,SAAS,WAAsC;IAE1E;;;OAGG;IACH,OAAc,wBAAwB,UAAS;IAE/C;;OAEG;IACH,OAAc,mBAAmB,UAAS;IAE1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAClD,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,WAAW,CAAC,CAAoB;IAExC,sCAAsC;IACtC,IAAW,mBAAmB,IAAI,uBAAuB,GAAG,SAAS,CAEpE;IAED,sCAAsC;IACtC,IAAW,kBAAkB,uBAE5B;IAED,sCAAsC;IACtC,IAAW,UAAU,IAAI,MAAM,GAAG,SAAS,CAE1C;IAED,sCAAsC;IACtC,IAAW,cAAc,IAAI;QAAE,WAAW,EAAE,UAAU,GAAG,WAAW,CAAA;KAAE,CAErE;gBAEkB,KAAK,EAAE,qBAAqB,EAAE,MAAM,EAAE,gBAAgB,EAAE,UAAU,EAAE,qBAAqB,EAAE,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAE,gBAAgB,EAAE,cAAc,CAAC,EAAE,uBAAuB;IAapN,0CAA0C;IAC1B,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI;IAMlE,4CAA4C;IAC5B,kBAAkB,IAAI,IAAI;IAK1C,gBAAgB;IACM,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;YAS7D,wBAAwB;IA8BtC,gBAAgB;cACG,OAAO,CAAC,cAAc,EAAE,4BAA4B,GAAG,IAAI;IAM9E,gBAAgB;cACS,QAAQ,CAAC,eAAe,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;WAOzE,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,GAAG,gBAAgB;IASzF,OAAO,IAAI,cAAc;IAOlC,gBAAgB,IAAI,gBAAgB;IAI3C,IAAW,mBAAmB,iBAE7B;IAED,gBAAgB;IACA,aAAa,IAAI,IAAI,IAAI,gBAAgB;IAEzD,mCAAmC;IACnB,SAAS;IAQzB,oCAAoC;IACpB,UAAU;IAQ1B,gBAAgB;IACA,iBAAiB,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI;IAMpE,gBAAgB;IACA,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAQxD,gBAAgB;IAChB,IAAoB,qBAAqB,IAAI,OAAO,CAEnD;IAED,gBAAgB;IAChB,IAAoB,kBAAkB,4CAErC;CACF"}
|
|
@@ -48,8 +48,11 @@ class SectionAttachmentInfo {
|
|
|
48
48
|
displaySpatialView: this._displaySpatialView,
|
|
49
49
|
};
|
|
50
50
|
}
|
|
51
|
-
clone() {
|
|
52
|
-
|
|
51
|
+
clone(iModel) {
|
|
52
|
+
let spatialView = this._spatialView;
|
|
53
|
+
if (spatialView instanceof ViewState3d)
|
|
54
|
+
spatialView = spatialView.clone(iModel);
|
|
55
|
+
return new SectionAttachmentInfo(spatialView, this._drawingToSpatialTransform, this._displaySpatialView);
|
|
53
56
|
}
|
|
54
57
|
preload(options) {
|
|
55
58
|
if (!this.wantDisplayed)
|
|
@@ -243,7 +246,7 @@ class DrawingViewState extends ViewState2d {
|
|
|
243
246
|
if (categories instanceof DrawingViewState) {
|
|
244
247
|
this._viewedExtents = categories._viewedExtents.clone();
|
|
245
248
|
this._modelLimits = { ...categories._modelLimits };
|
|
246
|
-
this._attachmentInfo = categories._attachmentInfo.clone();
|
|
249
|
+
this._attachmentInfo = categories._attachmentInfo.clone(iModel);
|
|
247
250
|
}
|
|
248
251
|
else {
|
|
249
252
|
this._viewedExtents = extents;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DrawingViewState.js","sourceRoot":"","sources":["../../src/DrawingViewState.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, dispose, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n AxisAlignedBox3d, Frustum, HydrateViewStateRequestProps, HydrateViewStateResponseProps, QueryRowFormat, SectionDrawingViewProps, ViewDefinition2dProps, ViewFlagOverrides, ViewStateProps,\r\n} from \"@itwin/core-common\";\r\nimport { Constant, Range3d, Transform, TransformProps, Vector3d } from \"@itwin/core-geometry\";\r\nimport { CategorySelectorState } from \"./CategorySelectorState\";\r\nimport { CoordSystem } from \"./CoordSystem\";\r\nimport { DisplayStyle2dState } from \"./DisplayStyleState\";\r\nimport { Frustum2d } from \"./Frustum2d\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\nimport { FeatureSymbology } from \"./render/FeatureSymbology\";\r\nimport { GraphicBranch, GraphicBranchOptions } from \"./render/GraphicBranch\";\r\nimport { MockRender } from \"./render/MockRender\";\r\nimport { RenderGraphic } from \"./render/RenderGraphic\";\r\nimport { Scene } from \"./render/Scene\";\r\nimport { DisclosedTileTreeSet, TileGraphicType } from \"./tile/internal\";\r\nimport { SceneContext } from \"./ViewContext\";\r\nimport { OffScreenViewport } from \"./Viewport\";\r\nimport { ViewRect } from \"./common/ViewRect\";\r\nimport { AttachToViewportArgs, ExtentLimits, ViewState2d, ViewState3d } from \"./ViewState\";\r\n\r\n/** Strictly for testing.\r\n * @internal\r\n */\r\nexport interface SectionDrawingInfo {\r\n readonly spatialView: Id64String;\r\n readonly drawingToSpatialTransform: Transform;\r\n}\r\n\r\n/** The information required to instantiate a [[SectionAttachment]]. This information is supplied to DrawingViewState constructor via ViewStateProps.\r\n * The spatial view is obtained asynchronously in DrawingViewState.load(). The SectionAttachment is created in DrawingViewState.attachToViewport and\r\n * disposed of in DrawingViewState.detachFromViewport.\r\n */\r\nclass SectionAttachmentInfo {\r\n private _spatialView: Id64String | ViewState3d;\r\n private readonly _drawingToSpatialTransform: Transform;\r\n private readonly _displaySpatialView: boolean;\r\n\r\n public get spatialView(): Id64String | ViewState3d { return this._spatialView; }\r\n public get wantDisplayed(): boolean {\r\n return this._displaySpatialView || DrawingViewState.alwaysDisplaySpatialView;\r\n }\r\n\r\n private constructor(spatialView: Id64String | ViewState3d, drawingToSpatialTransform: Transform, displaySpatialView: boolean) {\r\n this._spatialView = spatialView;\r\n this._drawingToSpatialTransform = drawingToSpatialTransform;\r\n this._displaySpatialView = displaySpatialView;\r\n }\r\n\r\n public static fromJSON(props?: SectionDrawingViewProps): SectionAttachmentInfo {\r\n if (!props)\r\n return new SectionAttachmentInfo(Id64.invalid, Transform.createIdentity(), false);\r\n\r\n return new SectionAttachmentInfo(props.spatialView, Transform.fromJSON(props.drawingToSpatialTransform), true === props.displaySpatialView);\r\n }\r\n\r\n public toJSON(): SectionDrawingViewProps | undefined {\r\n if (\"string\" === typeof this._spatialView && !Id64.isValidId64(this._spatialView))\r\n return undefined;\r\n\r\n return {\r\n spatialView: (this._spatialView instanceof ViewState3d) ? this._spatialView.id : this._spatialView,\r\n drawingToSpatialTransform: this._drawingToSpatialTransform.isIdentity ? undefined : this._drawingToSpatialTransform.toJSON(),\r\n displaySpatialView: this._displaySpatialView,\r\n };\r\n }\r\n\r\n public clone(): SectionAttachmentInfo {\r\n return new SectionAttachmentInfo(this._spatialView, this._drawingToSpatialTransform, this._displaySpatialView);\r\n }\r\n\r\n public preload(options: HydrateViewStateRequestProps): void {\r\n if (!this.wantDisplayed)\r\n return;\r\n\r\n if (this._spatialView instanceof ViewState3d)\r\n return;\r\n\r\n if (!Id64.isValidId64(this._spatialView))\r\n return;\r\n\r\n options.spatialViewId = this._spatialView;\r\n options.viewStateLoadProps = {\r\n displayStyle: {\r\n omitScheduleScriptElementIds: !IModelApp.tileAdmin.enableFrontendScheduleScripts,\r\n compressExcludedElementIds: true,\r\n },\r\n };\r\n }\r\n\r\n public async load(iModel: IModelConnection): Promise<void> {\r\n if (!this.wantDisplayed)\r\n return;\r\n\r\n if (this._spatialView instanceof ViewState3d)\r\n return;\r\n\r\n if (!Id64.isValidId64(this._spatialView))\r\n return;\r\n\r\n const spatialView = await iModel.views.load(this._spatialView);\r\n if (spatialView instanceof ViewState3d)\r\n this._spatialView = spatialView;\r\n }\r\n\r\n public async postload(options: HydrateViewStateResponseProps, iModel: IModelConnection): Promise<void> {\r\n let spatialView;\r\n if (options.spatialViewProps) {\r\n spatialView = await iModel.views.convertViewStatePropsToViewState(options.spatialViewProps);\r\n }\r\n\r\n if (spatialView instanceof ViewState3d)\r\n this._spatialView = spatialView;\r\n }\r\n\r\n public createAttachment(toSheet: Transform | undefined): SectionAttachment | undefined {\r\n if (!this.wantDisplayed || !(this._spatialView instanceof ViewState3d))\r\n return undefined;\r\n\r\n const spatialToDrawing = this._drawingToSpatialTransform.inverse();\r\n return spatialToDrawing ? new SectionAttachment(this._spatialView, spatialToDrawing, this._drawingToSpatialTransform, toSheet) : undefined;\r\n }\r\n\r\n public get sectionDrawingInfo(): SectionDrawingInfo {\r\n return {\r\n drawingToSpatialTransform: this._drawingToSpatialTransform,\r\n spatialView: this._spatialView instanceof ViewState3d ? this._spatialView.id : this._spatialView,\r\n };\r\n }\r\n}\r\n\r\n/** A mostly no-op [[RenderTarget]] for a [[SectionAttachment]]. It allocates no webgl resources. */\r\nclass SectionTarget extends MockRender.OffScreenTarget {\r\n private readonly _attachment: SectionAttachment;\r\n\r\n public constructor(attachment: SectionAttachment) {\r\n super(IModelApp.renderSystem, new ViewRect(0, 0, 1, 1));\r\n this._attachment = attachment;\r\n }\r\n\r\n public override changeScene(scene: Scene): void {\r\n this._attachment.scene = scene;\r\n }\r\n\r\n public override overrideFeatureSymbology(ovrs: FeatureSymbology.Overrides): void {\r\n this._attachment.symbologyOverrides = ovrs;\r\n }\r\n}\r\n\r\n/** Draws the contents of an orthographic [[ViewState3d]] directly into a [[DrawingViewState]], if the associated [SectionDrawing]($backend)\r\n * specifies it should be. We select tiles for the view in the context of a lightweight offscreen viewport with a no-op [[RenderTarget]], then\r\n * add the resultant graphics to the drawing view's scene. The attachment is created in DrawingViewState.attachToViewport and disposed of in\r\n * DrawingViewState.detachFromViewport.\r\n */\r\nclass SectionAttachment {\r\n private readonly _viewFlagOverrides: ViewFlagOverrides;\r\n private readonly _toDrawing: Transform;\r\n private readonly _fromDrawing: Transform;\r\n private readonly _viewRect = new ViewRect(0, 0, 1, 1);\r\n private readonly _originalFrustum = new Frustum();\r\n private readonly _drawingExtents: Vector3d;\r\n public readonly viewport: OffScreenViewport;\r\n private readonly _branchOptions: GraphicBranchOptions;\r\n public scene?: Scene;\r\n public symbologyOverrides: FeatureSymbology.Overrides;\r\n\r\n public get view(): ViewState3d {\r\n assert(this.viewport.view instanceof ViewState3d);\r\n return this.viewport.view;\r\n }\r\n\r\n public get zDepth(): number {\r\n return this._drawingExtents.z;\r\n }\r\n\r\n public constructor(view: ViewState3d, toDrawing: Transform, fromDrawing: Transform, toSheet: Transform | undefined) {\r\n // Save the input for clone(). Attach a copy to the viewport.\r\n this._toDrawing = toDrawing;\r\n this._fromDrawing = fromDrawing;\r\n\r\n this.viewport = OffScreenViewport.createViewport(view, new SectionTarget(this), true);\r\n\r\n this.symbologyOverrides = new FeatureSymbology.Overrides(view);\r\n let clipVolume;\r\n let clip = this.view.getViewClip();\r\n if (clip) {\r\n clip = clip.clone();\r\n const clipTransform = toSheet ? toSheet.multiplyTransformTransform(this._toDrawing) : this._toDrawing;\r\n clip.transformInPlace(clipTransform);\r\n clipVolume = IModelApp.renderSystem.createClipVolume(clip);\r\n }\r\n\r\n this._branchOptions = {\r\n clipVolume,\r\n hline: view.getDisplayStyle3d().settings.hiddenLineSettings,\r\n frustum: {\r\n is3d: true,\r\n scale: { x: 1, y: 1 },\r\n },\r\n };\r\n\r\n this._viewFlagOverrides = { ...view.viewFlags, lighting: false, shadows: false };\r\n this._drawingExtents = this.viewport.viewingSpace.viewDelta.clone();\r\n this._toDrawing.multiplyVector(this._drawingExtents, this._drawingExtents);\r\n this._drawingExtents.z = Math.abs(this._drawingExtents.z);\r\n\r\n // Save off the original frustum (potentially adjusted by viewport).\r\n this.viewport.setupFromView();\r\n this.viewport.viewingSpace.getFrustum(CoordSystem.World, true, this._originalFrustum);\r\n }\r\n\r\n public dispose(): void {\r\n this.viewport.dispose();\r\n }\r\n\r\n public addToScene(context: SceneContext): void {\r\n if (context.viewport.freezeScene)\r\n return;\r\n\r\n const pixelSize = context.viewport.getPixelSizeAtPoint();\r\n if (0 === pixelSize)\r\n return;\r\n\r\n // Adjust offscreen viewport's frustum based on intersection with drawing view frustum.\r\n const frustum3d = this._originalFrustum.transformBy(this._toDrawing);\r\n const frustumRange3d = frustum3d.toRange();\r\n const frustum2d = context.viewport.getWorldFrustum();\r\n const frustumRange2d = frustum2d.toRange();\r\n const intersect = frustumRange3d.intersect(frustumRange2d);\r\n if (intersect.isNull)\r\n return;\r\n\r\n frustum3d.initFromRange(intersect);\r\n frustum3d.transformBy(this._fromDrawing, frustum3d);\r\n this.viewport.setupViewFromFrustum(frustum3d);\r\n\r\n // Adjust view rect based on size of attachment on screen so tiles of appropriate LOD are selected.\r\n const width = this._drawingExtents.x * intersect.xLength() / frustumRange3d.xLength();\r\n const height = this._drawingExtents.y * intersect.yLength() / frustumRange3d.yLength();\r\n this._viewRect.width = Math.max(1, Math.round(width / pixelSize));\r\n this._viewRect.height = Math.max(1, Math.round(height / pixelSize));\r\n this.viewport.setRect(this._viewRect);\r\n\r\n // Propagate settings from drawing viewport.\r\n this.viewport.debugBoundingBoxes = context.viewport.debugBoundingBoxes;\r\n this.viewport.setTileSizeModifier(context.viewport.tileSizeModifier);\r\n\r\n // Create the scene.\r\n this.viewport.renderFrame();\r\n const scene = this.scene;\r\n if (!scene)\r\n return;\r\n\r\n // Extract graphics and insert into drawing's scene context.\r\n const outputGraphics = (source: RenderGraphic[]) => {\r\n if (0 === source.length)\r\n return;\r\n\r\n const graphics = new GraphicBranch();\r\n graphics.setViewFlagOverrides(this._viewFlagOverrides);\r\n graphics.symbologyOverrides = this.symbologyOverrides;\r\n\r\n for (const graphic of source)\r\n graphics.entries.push(graphic);\r\n\r\n const branch = context.createGraphicBranch(graphics, this._toDrawing, this._branchOptions);\r\n context.outputGraphic(branch);\r\n };\r\n\r\n outputGraphics(scene.foreground);\r\n context.withGraphicType(TileGraphicType.BackgroundMap, () => outputGraphics(scene.background));\r\n context.withGraphicType(TileGraphicType.Overlay, () => outputGraphics(scene.overlay));\r\n\r\n // Report tile statistics to drawing viewport.\r\n const tileAdmin = IModelApp.tileAdmin;\r\n const selectedAndReady = tileAdmin.getTilesForUser(this.viewport);\r\n const requested = tileAdmin.getRequestsForUser(this.viewport);\r\n tileAdmin.addExternalTilesForUser(context.viewport, {\r\n requested: requested?.size ?? 0,\r\n selected: selectedAndReady?.selected.size ?? 0,\r\n ready: selectedAndReady?.ready.size ?? 0,\r\n });\r\n }\r\n}\r\n\r\n/** A view of a [DrawingModel]($backend)\r\n * @public\r\n * @extensions\r\n */\r\nexport class DrawingViewState extends ViewState2d {\r\n public static override get className() { return \"DrawingViewDefinition\"; }\r\n\r\n /** Exposed strictly for testing and debugging. Indicates that when loading the view, the spatial view should be displayed even\r\n * if `SectionDrawing.displaySpatialView` is not `true`.\r\n * @internal\r\n */\r\n public static alwaysDisplaySpatialView = false;\r\n\r\n /** Exposed strictly for testing and debugging. Indicates that the 2d graphics should not be displayed.\r\n * @internal\r\n */\r\n public static hideDrawingGraphics = false;\r\n\r\n private readonly _modelLimits: ExtentLimits;\r\n private readonly _viewedExtents: AxisAlignedBox3d;\r\n private _attachmentInfo: SectionAttachmentInfo;\r\n private _attachment?: SectionAttachment;\r\n\r\n /** Strictly for testing. @internal */\r\n public get sectionDrawingProps(): SectionDrawingViewProps | undefined {\r\n return this._attachmentInfo.toJSON();\r\n }\r\n\r\n /** Strictly for testing. @internal */\r\n public get sectionDrawingInfo() {\r\n return this._attachmentInfo.sectionDrawingInfo;\r\n }\r\n\r\n /** Strictly for testing. @internal */\r\n public get attachment(): Object | undefined {\r\n return this._attachment;\r\n }\r\n\r\n /** Strictly for testing. @internal */\r\n public get attachmentInfo(): Object {\r\n return this._attachmentInfo;\r\n }\r\n\r\n public constructor(props: ViewDefinition2dProps, iModel: IModelConnection, categories: CategorySelectorState, displayStyle: DisplayStyle2dState, extents: AxisAlignedBox3d, sectionDrawing?: SectionDrawingViewProps) {\r\n super(props, iModel, categories, displayStyle);\r\n if (categories instanceof DrawingViewState) {\r\n this._viewedExtents = categories._viewedExtents.clone();\r\n this._modelLimits = { ...categories._modelLimits };\r\n this._attachmentInfo = categories._attachmentInfo.clone();\r\n } else {\r\n this._viewedExtents = extents;\r\n this._modelLimits = { min: Constant.oneMillimeter, max: 10 * extents.maxLength() };\r\n this._attachmentInfo = SectionAttachmentInfo.fromJSON(sectionDrawing);\r\n }\r\n }\r\n\r\n /** See [[ViewState.attachToViewport]]. */\r\n public override attachToViewport(args: AttachToViewportArgs): void {\r\n super.attachToViewport(args);\r\n assert(undefined === this._attachment);\r\n this._attachment = this._attachmentInfo.createAttachment(args.drawingToSheetTransform);\r\n }\r\n\r\n /** See [[ViewState.detachFromViewport]]. */\r\n public override detachFromViewport(): void {\r\n super.detachFromViewport();\r\n this._attachment = dispose(this._attachment);\r\n }\r\n\r\n /** @internal */\r\n public override async changeViewedModel(modelId: Id64String): Promise<void> {\r\n await super.changeViewedModel(modelId);\r\n const props = await this.querySectionDrawingProps();\r\n this._attachmentInfo = SectionAttachmentInfo.fromJSON(props);\r\n\r\n // super.changeViewedModel() throws if attached to viewport, and attachment only allocated while attached to viewport\r\n assert(undefined === this._attachment);\r\n }\r\n\r\n private async querySectionDrawingProps(): Promise<SectionDrawingViewProps> {\r\n let spatialView = Id64.invalid;\r\n let drawingToSpatialTransform: TransformProps | undefined;\r\n let displaySpatialView = false;\r\n try {\r\n const ecsql = `\r\n SELECT spatialView,\r\n json_extract(jsonProperties, '$.drawingToSpatialTransform') as drawingToSpatialTransform,\r\n CAST(json_extract(jsonProperties, '$.displaySpatialView') as BOOLEAN) as displaySpatialView\r\n FROM bis.SectionDrawing\r\n WHERE ECInstanceId=${this.baseModelId}`;\r\n\r\n for await (const row of this.iModel.createQueryReader(ecsql, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n spatialView = Id64.fromJSON(row.spatialView?.id);\r\n displaySpatialView = !!row.displaySpatialView;\r\n try {\r\n drawingToSpatialTransform = JSON.parse(row.drawingToSpatialTransform);\r\n } catch {\r\n // We'll use identity transform.\r\n }\r\n\r\n break;\r\n }\r\n } catch (_ex) {\r\n // The version of BisCore ECSchema in the iModel is probably too old to contain the SectionDrawing ECClass.\r\n }\r\n\r\n return { spatialView, displaySpatialView, drawingToSpatialTransform };\r\n }\r\n\r\n /** @internal */\r\n protected override preload(hydrateRequest: HydrateViewStateRequestProps): void {\r\n assert(!this.isAttachedToViewport);\r\n super.preload(hydrateRequest);\r\n this._attachmentInfo.preload(hydrateRequest);\r\n }\r\n\r\n /** @internal */\r\n protected override async postload(hydrateResponse: HydrateViewStateResponseProps): Promise<void> {\r\n const promises = [];\r\n promises.push(super.postload(hydrateResponse));\r\n promises.push(this._attachmentInfo.postload(hydrateResponse, this.iModel));\r\n await Promise.all(promises);\r\n }\r\n\r\n public static override createFromProps(props: ViewStateProps, iModel: IModelConnection): DrawingViewState {\r\n const cat = new CategorySelectorState(props.categorySelectorProps, iModel);\r\n const displayStyleState = new DisplayStyle2dState(props.displayStyleProps, iModel);\r\n const extents = props.modelExtents ? Range3d.fromJSON(props.modelExtents) : new Range3d();\r\n\r\n // use \"new this\" so subclasses are correct\r\n return new this(props.viewDefinitionProps as ViewDefinition2dProps, iModel, cat, displayStyleState, extents, props.sectionDrawing);\r\n }\r\n\r\n public override toProps(): ViewStateProps {\r\n const props = super.toProps();\r\n props.modelExtents = this._viewedExtents.toJSON();\r\n props.sectionDrawing = this._attachmentInfo.toJSON();\r\n return props;\r\n }\r\n\r\n public getViewedExtents(): AxisAlignedBox3d {\r\n return this._viewedExtents;\r\n }\r\n\r\n public get defaultExtentLimits() {\r\n return this._modelLimits;\r\n }\r\n\r\n /** @internal */\r\n public override isDrawingView(): this is DrawingViewState { return true; }\r\n\r\n /** See [[ViewState.getOrigin]]. */\r\n public override getOrigin() {\r\n const origin = super.getOrigin();\r\n if (this._attachment)\r\n origin.z = -this._attachment.zDepth;\r\n\r\n return origin;\r\n }\r\n\r\n /** See [[ViewState.getExtents]]. */\r\n public override getExtents() {\r\n const extents = super.getExtents();\r\n if (this._attachment)\r\n extents.z = this._attachment.zDepth + Frustum2d.minimumZDistance;\r\n\r\n return extents;\r\n }\r\n\r\n /** @internal */\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n if (this._attachment)\r\n trees.disclose(this._attachment.viewport);\r\n }\r\n\r\n /** @internal */\r\n public override createScene(context: SceneContext): void {\r\n if (!DrawingViewState.hideDrawingGraphics)\r\n super.createScene(context);\r\n\r\n if (this._attachment)\r\n this._attachment.addToScene(context);\r\n }\r\n\r\n /** @internal */\r\n public override get areAllTileTreesLoaded(): boolean {\r\n return super.areAllTileTreesLoaded && (!this._attachment || this._attachment.view.areAllTileTreesLoaded);\r\n }\r\n\r\n /** @internal */\r\n public override get secondaryViewports() {\r\n return this._attachment ? [this._attachment.viewport] : super.secondaryViewports;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"DrawingViewState.js","sourceRoot":"","sources":["../../src/DrawingViewState.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, dispose, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n AxisAlignedBox3d, Frustum, HydrateViewStateRequestProps, HydrateViewStateResponseProps, QueryRowFormat, SectionDrawingViewProps, ViewDefinition2dProps, ViewFlagOverrides, ViewStateProps,\r\n} from \"@itwin/core-common\";\r\nimport { Constant, Range3d, Transform, TransformProps, Vector3d } from \"@itwin/core-geometry\";\r\nimport { CategorySelectorState } from \"./CategorySelectorState\";\r\nimport { CoordSystem } from \"./CoordSystem\";\r\nimport { DisplayStyle2dState } from \"./DisplayStyleState\";\r\nimport { Frustum2d } from \"./Frustum2d\";\r\nimport { IModelApp } from \"./IModelApp\";\r\nimport { IModelConnection } from \"./IModelConnection\";\r\nimport { FeatureSymbology } from \"./render/FeatureSymbology\";\r\nimport { GraphicBranch, GraphicBranchOptions } from \"./render/GraphicBranch\";\r\nimport { MockRender } from \"./render/MockRender\";\r\nimport { RenderGraphic } from \"./render/RenderGraphic\";\r\nimport { Scene } from \"./render/Scene\";\r\nimport { DisclosedTileTreeSet, TileGraphicType } from \"./tile/internal\";\r\nimport { SceneContext } from \"./ViewContext\";\r\nimport { OffScreenViewport } from \"./Viewport\";\r\nimport { ViewRect } from \"./common/ViewRect\";\r\nimport { AttachToViewportArgs, ExtentLimits, ViewState2d, ViewState3d } from \"./ViewState\";\r\n\r\n/** Strictly for testing.\r\n * @internal\r\n */\r\nexport interface SectionDrawingInfo {\r\n readonly spatialView: Id64String;\r\n readonly drawingToSpatialTransform: Transform;\r\n}\r\n\r\n/** The information required to instantiate a [[SectionAttachment]]. This information is supplied to DrawingViewState constructor via ViewStateProps.\r\n * The spatial view is obtained asynchronously in DrawingViewState.load(). The SectionAttachment is created in DrawingViewState.attachToViewport and\r\n * disposed of in DrawingViewState.detachFromViewport.\r\n */\r\nclass SectionAttachmentInfo {\r\n private _spatialView: Id64String | ViewState3d;\r\n private readonly _drawingToSpatialTransform: Transform;\r\n private readonly _displaySpatialView: boolean;\r\n\r\n public get spatialView(): Id64String | ViewState3d { return this._spatialView; }\r\n public get wantDisplayed(): boolean {\r\n return this._displaySpatialView || DrawingViewState.alwaysDisplaySpatialView;\r\n }\r\n\r\n private constructor(spatialView: Id64String | ViewState3d, drawingToSpatialTransform: Transform, displaySpatialView: boolean) {\r\n this._spatialView = spatialView;\r\n this._drawingToSpatialTransform = drawingToSpatialTransform;\r\n this._displaySpatialView = displaySpatialView;\r\n }\r\n\r\n public static fromJSON(props?: SectionDrawingViewProps): SectionAttachmentInfo {\r\n if (!props)\r\n return new SectionAttachmentInfo(Id64.invalid, Transform.createIdentity(), false);\r\n\r\n return new SectionAttachmentInfo(props.spatialView, Transform.fromJSON(props.drawingToSpatialTransform), true === props.displaySpatialView);\r\n }\r\n\r\n public toJSON(): SectionDrawingViewProps | undefined {\r\n if (\"string\" === typeof this._spatialView && !Id64.isValidId64(this._spatialView))\r\n return undefined;\r\n\r\n return {\r\n spatialView: (this._spatialView instanceof ViewState3d) ? this._spatialView.id : this._spatialView,\r\n drawingToSpatialTransform: this._drawingToSpatialTransform.isIdentity ? undefined : this._drawingToSpatialTransform.toJSON(),\r\n displaySpatialView: this._displaySpatialView,\r\n };\r\n }\r\n\r\n public clone(iModel: IModelConnection): SectionAttachmentInfo {\r\n let spatialView = this._spatialView;\r\n if (spatialView instanceof ViewState3d)\r\n spatialView = spatialView.clone(iModel);\r\n\r\n return new SectionAttachmentInfo(spatialView, this._drawingToSpatialTransform, this._displaySpatialView);\r\n }\r\n\r\n public preload(options: HydrateViewStateRequestProps): void {\r\n if (!this.wantDisplayed)\r\n return;\r\n\r\n if (this._spatialView instanceof ViewState3d)\r\n return;\r\n\r\n if (!Id64.isValidId64(this._spatialView))\r\n return;\r\n\r\n options.spatialViewId = this._spatialView;\r\n options.viewStateLoadProps = {\r\n displayStyle: {\r\n omitScheduleScriptElementIds: !IModelApp.tileAdmin.enableFrontendScheduleScripts,\r\n compressExcludedElementIds: true,\r\n },\r\n };\r\n }\r\n\r\n public async load(iModel: IModelConnection): Promise<void> {\r\n if (!this.wantDisplayed)\r\n return;\r\n\r\n if (this._spatialView instanceof ViewState3d)\r\n return;\r\n\r\n if (!Id64.isValidId64(this._spatialView))\r\n return;\r\n\r\n const spatialView = await iModel.views.load(this._spatialView);\r\n if (spatialView instanceof ViewState3d)\r\n this._spatialView = spatialView;\r\n }\r\n\r\n public async postload(options: HydrateViewStateResponseProps, iModel: IModelConnection): Promise<void> {\r\n let spatialView;\r\n if (options.spatialViewProps) {\r\n spatialView = await iModel.views.convertViewStatePropsToViewState(options.spatialViewProps);\r\n }\r\n\r\n if (spatialView instanceof ViewState3d)\r\n this._spatialView = spatialView;\r\n }\r\n\r\n public createAttachment(toSheet: Transform | undefined): SectionAttachment | undefined {\r\n if (!this.wantDisplayed || !(this._spatialView instanceof ViewState3d))\r\n return undefined;\r\n\r\n const spatialToDrawing = this._drawingToSpatialTransform.inverse();\r\n return spatialToDrawing ? new SectionAttachment(this._spatialView, spatialToDrawing, this._drawingToSpatialTransform, toSheet) : undefined;\r\n }\r\n\r\n public get sectionDrawingInfo(): SectionDrawingInfo {\r\n return {\r\n drawingToSpatialTransform: this._drawingToSpatialTransform,\r\n spatialView: this._spatialView instanceof ViewState3d ? this._spatialView.id : this._spatialView,\r\n };\r\n }\r\n}\r\n\r\n/** A mostly no-op [[RenderTarget]] for a [[SectionAttachment]]. It allocates no webgl resources. */\r\nclass SectionTarget extends MockRender.OffScreenTarget {\r\n private readonly _attachment: SectionAttachment;\r\n\r\n public constructor(attachment: SectionAttachment) {\r\n super(IModelApp.renderSystem, new ViewRect(0, 0, 1, 1));\r\n this._attachment = attachment;\r\n }\r\n\r\n public override changeScene(scene: Scene): void {\r\n this._attachment.scene = scene;\r\n }\r\n\r\n public override overrideFeatureSymbology(ovrs: FeatureSymbology.Overrides): void {\r\n this._attachment.symbologyOverrides = ovrs;\r\n }\r\n}\r\n\r\n/** Draws the contents of an orthographic [[ViewState3d]] directly into a [[DrawingViewState]], if the associated [SectionDrawing]($backend)\r\n * specifies it should be. We select tiles for the view in the context of a lightweight offscreen viewport with a no-op [[RenderTarget]], then\r\n * add the resultant graphics to the drawing view's scene. The attachment is created in DrawingViewState.attachToViewport and disposed of in\r\n * DrawingViewState.detachFromViewport.\r\n */\r\nclass SectionAttachment {\r\n private readonly _viewFlagOverrides: ViewFlagOverrides;\r\n private readonly _toDrawing: Transform;\r\n private readonly _fromDrawing: Transform;\r\n private readonly _viewRect = new ViewRect(0, 0, 1, 1);\r\n private readonly _originalFrustum = new Frustum();\r\n private readonly _drawingExtents: Vector3d;\r\n public readonly viewport: OffScreenViewport;\r\n private readonly _branchOptions: GraphicBranchOptions;\r\n public scene?: Scene;\r\n public symbologyOverrides: FeatureSymbology.Overrides;\r\n\r\n public get view(): ViewState3d {\r\n assert(this.viewport.view instanceof ViewState3d);\r\n return this.viewport.view;\r\n }\r\n\r\n public get zDepth(): number {\r\n return this._drawingExtents.z;\r\n }\r\n\r\n public constructor(view: ViewState3d, toDrawing: Transform, fromDrawing: Transform, toSheet: Transform | undefined) {\r\n // Save the input for clone(). Attach a copy to the viewport.\r\n this._toDrawing = toDrawing;\r\n this._fromDrawing = fromDrawing;\r\n\r\n this.viewport = OffScreenViewport.createViewport(view, new SectionTarget(this), true);\r\n\r\n this.symbologyOverrides = new FeatureSymbology.Overrides(view);\r\n let clipVolume;\r\n let clip = this.view.getViewClip();\r\n if (clip) {\r\n clip = clip.clone();\r\n const clipTransform = toSheet ? toSheet.multiplyTransformTransform(this._toDrawing) : this._toDrawing;\r\n clip.transformInPlace(clipTransform);\r\n clipVolume = IModelApp.renderSystem.createClipVolume(clip);\r\n }\r\n\r\n this._branchOptions = {\r\n clipVolume,\r\n hline: view.getDisplayStyle3d().settings.hiddenLineSettings,\r\n frustum: {\r\n is3d: true,\r\n scale: { x: 1, y: 1 },\r\n },\r\n };\r\n\r\n this._viewFlagOverrides = { ...view.viewFlags, lighting: false, shadows: false };\r\n this._drawingExtents = this.viewport.viewingSpace.viewDelta.clone();\r\n this._toDrawing.multiplyVector(this._drawingExtents, this._drawingExtents);\r\n this._drawingExtents.z = Math.abs(this._drawingExtents.z);\r\n\r\n // Save off the original frustum (potentially adjusted by viewport).\r\n this.viewport.setupFromView();\r\n this.viewport.viewingSpace.getFrustum(CoordSystem.World, true, this._originalFrustum);\r\n }\r\n\r\n public dispose(): void {\r\n this.viewport.dispose();\r\n }\r\n\r\n public addToScene(context: SceneContext): void {\r\n if (context.viewport.freezeScene)\r\n return;\r\n\r\n const pixelSize = context.viewport.getPixelSizeAtPoint();\r\n if (0 === pixelSize)\r\n return;\r\n\r\n // Adjust offscreen viewport's frustum based on intersection with drawing view frustum.\r\n const frustum3d = this._originalFrustum.transformBy(this._toDrawing);\r\n const frustumRange3d = frustum3d.toRange();\r\n const frustum2d = context.viewport.getWorldFrustum();\r\n const frustumRange2d = frustum2d.toRange();\r\n const intersect = frustumRange3d.intersect(frustumRange2d);\r\n if (intersect.isNull)\r\n return;\r\n\r\n frustum3d.initFromRange(intersect);\r\n frustum3d.transformBy(this._fromDrawing, frustum3d);\r\n this.viewport.setupViewFromFrustum(frustum3d);\r\n\r\n // Adjust view rect based on size of attachment on screen so tiles of appropriate LOD are selected.\r\n const width = this._drawingExtents.x * intersect.xLength() / frustumRange3d.xLength();\r\n const height = this._drawingExtents.y * intersect.yLength() / frustumRange3d.yLength();\r\n this._viewRect.width = Math.max(1, Math.round(width / pixelSize));\r\n this._viewRect.height = Math.max(1, Math.round(height / pixelSize));\r\n this.viewport.setRect(this._viewRect);\r\n\r\n // Propagate settings from drawing viewport.\r\n this.viewport.debugBoundingBoxes = context.viewport.debugBoundingBoxes;\r\n this.viewport.setTileSizeModifier(context.viewport.tileSizeModifier);\r\n\r\n // Create the scene.\r\n this.viewport.renderFrame();\r\n const scene = this.scene;\r\n if (!scene)\r\n return;\r\n\r\n // Extract graphics and insert into drawing's scene context.\r\n const outputGraphics = (source: RenderGraphic[]) => {\r\n if (0 === source.length)\r\n return;\r\n\r\n const graphics = new GraphicBranch();\r\n graphics.setViewFlagOverrides(this._viewFlagOverrides);\r\n graphics.symbologyOverrides = this.symbologyOverrides;\r\n\r\n for (const graphic of source)\r\n graphics.entries.push(graphic);\r\n\r\n const branch = context.createGraphicBranch(graphics, this._toDrawing, this._branchOptions);\r\n context.outputGraphic(branch);\r\n };\r\n\r\n outputGraphics(scene.foreground);\r\n context.withGraphicType(TileGraphicType.BackgroundMap, () => outputGraphics(scene.background));\r\n context.withGraphicType(TileGraphicType.Overlay, () => outputGraphics(scene.overlay));\r\n\r\n // Report tile statistics to drawing viewport.\r\n const tileAdmin = IModelApp.tileAdmin;\r\n const selectedAndReady = tileAdmin.getTilesForUser(this.viewport);\r\n const requested = tileAdmin.getRequestsForUser(this.viewport);\r\n tileAdmin.addExternalTilesForUser(context.viewport, {\r\n requested: requested?.size ?? 0,\r\n selected: selectedAndReady?.selected.size ?? 0,\r\n ready: selectedAndReady?.ready.size ?? 0,\r\n });\r\n }\r\n}\r\n\r\n/** A view of a [DrawingModel]($backend)\r\n * @public\r\n * @extensions\r\n */\r\nexport class DrawingViewState extends ViewState2d {\r\n public static override get className() { return \"DrawingViewDefinition\"; }\r\n\r\n /** Exposed strictly for testing and debugging. Indicates that when loading the view, the spatial view should be displayed even\r\n * if `SectionDrawing.displaySpatialView` is not `true`.\r\n * @internal\r\n */\r\n public static alwaysDisplaySpatialView = false;\r\n\r\n /** Exposed strictly for testing and debugging. Indicates that the 2d graphics should not be displayed.\r\n * @internal\r\n */\r\n public static hideDrawingGraphics = false;\r\n\r\n private readonly _modelLimits: ExtentLimits;\r\n private readonly _viewedExtents: AxisAlignedBox3d;\r\n private _attachmentInfo: SectionAttachmentInfo;\r\n private _attachment?: SectionAttachment;\r\n\r\n /** Strictly for testing. @internal */\r\n public get sectionDrawingProps(): SectionDrawingViewProps | undefined {\r\n return this._attachmentInfo.toJSON();\r\n }\r\n\r\n /** Strictly for testing. @internal */\r\n public get sectionDrawingInfo() {\r\n return this._attachmentInfo.sectionDrawingInfo;\r\n }\r\n\r\n /** Strictly for testing. @internal */\r\n public get attachment(): Object | undefined {\r\n return this._attachment;\r\n }\r\n\r\n /** Strictly for testing. @internal */\r\n public get attachmentInfo(): { spatialView: Id64String | ViewState3d } {\r\n return this._attachmentInfo;\r\n }\r\n\r\n public constructor(props: ViewDefinition2dProps, iModel: IModelConnection, categories: CategorySelectorState, displayStyle: DisplayStyle2dState, extents: AxisAlignedBox3d, sectionDrawing?: SectionDrawingViewProps) {\r\n super(props, iModel, categories, displayStyle);\r\n if (categories instanceof DrawingViewState) {\r\n this._viewedExtents = categories._viewedExtents.clone();\r\n this._modelLimits = { ...categories._modelLimits };\r\n this._attachmentInfo = categories._attachmentInfo.clone(iModel);\r\n } else {\r\n this._viewedExtents = extents;\r\n this._modelLimits = { min: Constant.oneMillimeter, max: 10 * extents.maxLength() };\r\n this._attachmentInfo = SectionAttachmentInfo.fromJSON(sectionDrawing);\r\n }\r\n }\r\n\r\n /** See [[ViewState.attachToViewport]]. */\r\n public override attachToViewport(args: AttachToViewportArgs): void {\r\n super.attachToViewport(args);\r\n assert(undefined === this._attachment);\r\n this._attachment = this._attachmentInfo.createAttachment(args.drawingToSheetTransform);\r\n }\r\n\r\n /** See [[ViewState.detachFromViewport]]. */\r\n public override detachFromViewport(): void {\r\n super.detachFromViewport();\r\n this._attachment = dispose(this._attachment);\r\n }\r\n\r\n /** @internal */\r\n public override async changeViewedModel(modelId: Id64String): Promise<void> {\r\n await super.changeViewedModel(modelId);\r\n const props = await this.querySectionDrawingProps();\r\n this._attachmentInfo = SectionAttachmentInfo.fromJSON(props);\r\n\r\n // super.changeViewedModel() throws if attached to viewport, and attachment only allocated while attached to viewport\r\n assert(undefined === this._attachment);\r\n }\r\n\r\n private async querySectionDrawingProps(): Promise<SectionDrawingViewProps> {\r\n let spatialView = Id64.invalid;\r\n let drawingToSpatialTransform: TransformProps | undefined;\r\n let displaySpatialView = false;\r\n try {\r\n const ecsql = `\r\n SELECT spatialView,\r\n json_extract(jsonProperties, '$.drawingToSpatialTransform') as drawingToSpatialTransform,\r\n CAST(json_extract(jsonProperties, '$.displaySpatialView') as BOOLEAN) as displaySpatialView\r\n FROM bis.SectionDrawing\r\n WHERE ECInstanceId=${this.baseModelId}`;\r\n\r\n for await (const row of this.iModel.createQueryReader(ecsql, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n spatialView = Id64.fromJSON(row.spatialView?.id);\r\n displaySpatialView = !!row.displaySpatialView;\r\n try {\r\n drawingToSpatialTransform = JSON.parse(row.drawingToSpatialTransform);\r\n } catch {\r\n // We'll use identity transform.\r\n }\r\n\r\n break;\r\n }\r\n } catch (_ex) {\r\n // The version of BisCore ECSchema in the iModel is probably too old to contain the SectionDrawing ECClass.\r\n }\r\n\r\n return { spatialView, displaySpatialView, drawingToSpatialTransform };\r\n }\r\n\r\n /** @internal */\r\n protected override preload(hydrateRequest: HydrateViewStateRequestProps): void {\r\n assert(!this.isAttachedToViewport);\r\n super.preload(hydrateRequest);\r\n this._attachmentInfo.preload(hydrateRequest);\r\n }\r\n\r\n /** @internal */\r\n protected override async postload(hydrateResponse: HydrateViewStateResponseProps): Promise<void> {\r\n const promises = [];\r\n promises.push(super.postload(hydrateResponse));\r\n promises.push(this._attachmentInfo.postload(hydrateResponse, this.iModel));\r\n await Promise.all(promises);\r\n }\r\n\r\n public static override createFromProps(props: ViewStateProps, iModel: IModelConnection): DrawingViewState {\r\n const cat = new CategorySelectorState(props.categorySelectorProps, iModel);\r\n const displayStyleState = new DisplayStyle2dState(props.displayStyleProps, iModel);\r\n const extents = props.modelExtents ? Range3d.fromJSON(props.modelExtents) : new Range3d();\r\n\r\n // use \"new this\" so subclasses are correct\r\n return new this(props.viewDefinitionProps as ViewDefinition2dProps, iModel, cat, displayStyleState, extents, props.sectionDrawing);\r\n }\r\n\r\n public override toProps(): ViewStateProps {\r\n const props = super.toProps();\r\n props.modelExtents = this._viewedExtents.toJSON();\r\n props.sectionDrawing = this._attachmentInfo.toJSON();\r\n return props;\r\n }\r\n\r\n public getViewedExtents(): AxisAlignedBox3d {\r\n return this._viewedExtents;\r\n }\r\n\r\n public get defaultExtentLimits() {\r\n return this._modelLimits;\r\n }\r\n\r\n /** @internal */\r\n public override isDrawingView(): this is DrawingViewState { return true; }\r\n\r\n /** See [[ViewState.getOrigin]]. */\r\n public override getOrigin() {\r\n const origin = super.getOrigin();\r\n if (this._attachment)\r\n origin.z = -this._attachment.zDepth;\r\n\r\n return origin;\r\n }\r\n\r\n /** See [[ViewState.getExtents]]. */\r\n public override getExtents() {\r\n const extents = super.getExtents();\r\n if (this._attachment)\r\n extents.z = this._attachment.zDepth + Frustum2d.minimumZDistance;\r\n\r\n return extents;\r\n }\r\n\r\n /** @internal */\r\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\r\n super.discloseTileTrees(trees);\r\n if (this._attachment)\r\n trees.disclose(this._attachment.viewport);\r\n }\r\n\r\n /** @internal */\r\n public override createScene(context: SceneContext): void {\r\n if (!DrawingViewState.hideDrawingGraphics)\r\n super.createScene(context);\r\n\r\n if (this._attachment)\r\n this._attachment.addToScene(context);\r\n }\r\n\r\n /** @internal */\r\n public override get areAllTileTreesLoaded(): boolean {\r\n return super.areAllTileTreesLoaded && (!this._attachment || this._attachment.view.areAllTileTreesLoaded);\r\n }\r\n\r\n /** @internal */\r\n public override get secondaryViewports() {\r\n return this._attachment ? [this._attachment.viewport] : super.secondaryViewports;\r\n }\r\n}\r\n"]}
|
|
@@ -10,7 +10,7 @@ import { IModelConnection } from "./IModelConnection";
|
|
|
10
10
|
import { RenderMemory } from "./render/RenderMemory";
|
|
11
11
|
import { DecorateContext, SceneContext } from "./ViewContext";
|
|
12
12
|
import { Viewport } from "./Viewport";
|
|
13
|
-
import { AttachToViewportArgs, ComputeDisplayTransformArgs, ViewState2d } from "./ViewState";
|
|
13
|
+
import { AttachToViewportArgs, ComputeDisplayTransformArgs, ViewState, ViewState2d } from "./ViewState";
|
|
14
14
|
import { DrawingViewState } from "./DrawingViewState";
|
|
15
15
|
import { DisclosedTileTreeSet } from "./tile/internal";
|
|
16
16
|
/** A view of a [SheetModel]($backend).
|
|
@@ -30,6 +30,10 @@ export declare class SheetViewState extends ViewState2d {
|
|
|
30
30
|
/** Strictly for testing. @internal */
|
|
31
31
|
get viewAttachmentProps(): Array<Readonly<ViewAttachmentProps>>;
|
|
32
32
|
/** Strictly for testing. @internal */
|
|
33
|
+
get viewAttachmentInfos(): Id64Array | Array<{
|
|
34
|
+
attachedView: ViewState;
|
|
35
|
+
}>;
|
|
36
|
+
/** Strictly for testing. @internal */
|
|
33
37
|
get attachments(): Object[] | undefined;
|
|
34
38
|
/** @internal */
|
|
35
39
|
isDrawingView(): this is DrawingViewState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SheetViewState.d.ts","sourceRoot":"","sources":["../../src/SheetViewState.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAsC,SAAS,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAoD,OAAO,EAAE,OAAO,EAA4B,OAAO,EAAiB,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACvK,OAAO,EACL,gBAAgB,EAAiF,4BAA4B,EAAE,6BAA6B,EAAmC,UAAU,EACpL,mBAAmB,EAAE,qBAAqB,EAAqB,cAAc,EACnG,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAStD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EAAqB,QAAQ,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,
|
|
1
|
+
{"version":3,"file":"SheetViewState.d.ts","sourceRoot":"","sources":["../../src/SheetViewState.ts"],"names":[],"mappings":"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"}
|
|
@@ -97,6 +97,7 @@ class SheetBorder {
|
|
|
97
97
|
* SheetViewState.load(). The Attachments object is created in SheetViewState.attachToViewport and disposed of in SheetViewState.detachFromViewport.
|
|
98
98
|
*/
|
|
99
99
|
class ViewAttachmentsInfo {
|
|
100
|
+
get attachments() { return this._attachments; }
|
|
100
101
|
constructor(attachments) {
|
|
101
102
|
this._attachments = attachments;
|
|
102
103
|
}
|
|
@@ -120,9 +121,19 @@ class ViewAttachmentsInfo {
|
|
|
120
121
|
toJSON() {
|
|
121
122
|
return this.isLoaded ? this._props.map((x) => x.id) : [...this._ids];
|
|
122
123
|
}
|
|
123
|
-
clone() {
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
clone(iModel) {
|
|
125
|
+
let attachments = this._attachments;
|
|
126
|
+
if (this.isLoaded) {
|
|
127
|
+
// Need to clone the attached ViewStates.
|
|
128
|
+
attachments = attachments.map((attachment) => {
|
|
129
|
+
assert(typeof attachment !== "string");
|
|
130
|
+
return {
|
|
131
|
+
...attachment,
|
|
132
|
+
attachedView: attachment.attachedView.clone(iModel),
|
|
133
|
+
};
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
return new ViewAttachmentsInfo(attachments);
|
|
126
137
|
}
|
|
127
138
|
preload(options) {
|
|
128
139
|
if (this.isLoaded)
|
|
@@ -285,7 +296,16 @@ export class SheetViewState extends ViewState2d {
|
|
|
285
296
|
}
|
|
286
297
|
/** Strictly for testing. @internal */
|
|
287
298
|
get viewAttachmentProps() {
|
|
288
|
-
return this._attachmentsInfo.viewAttachmentProps
|
|
299
|
+
return this._attachmentsInfo.viewAttachmentProps.map((x) => {
|
|
300
|
+
return {
|
|
301
|
+
...x,
|
|
302
|
+
attachedView: undefined,
|
|
303
|
+
};
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
/** Strictly for testing. @internal */
|
|
307
|
+
get viewAttachmentInfos() {
|
|
308
|
+
return this._attachmentsInfo.attachments;
|
|
289
309
|
}
|
|
290
310
|
/** Strictly for testing. @internal */
|
|
291
311
|
get attachments() {
|
|
@@ -300,7 +320,7 @@ export class SheetViewState extends ViewState2d {
|
|
|
300
320
|
if (categories instanceof SheetViewState) {
|
|
301
321
|
// we are coming from clone...
|
|
302
322
|
this.sheetSize = categories.sheetSize.clone();
|
|
303
|
-
this._attachmentsInfo = categories._attachmentsInfo.clone();
|
|
323
|
+
this._attachmentsInfo = categories._attachmentsInfo.clone(iModel);
|
|
304
324
|
this._viewedExtents = categories._viewedExtents.clone();
|
|
305
325
|
}
|
|
306
326
|
else {
|