@itwin/core-frontend 5.0.0-dev.32 → 5.0.0-dev.34

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 (259) hide show
  1. package/lib/cjs/AccuDraw.js +1 -1
  2. package/lib/cjs/AccuDraw.js.map +1 -1
  3. package/lib/cjs/ApproximateTerrainHeights.js +1 -1
  4. package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
  5. package/lib/cjs/BackgroundMapGeometry.js +5 -5
  6. package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
  7. package/lib/cjs/DrawingViewState.js +9 -9
  8. package/lib/cjs/DrawingViewState.js.map +1 -1
  9. package/lib/cjs/GraphicalEditingScope.js +4 -4
  10. package/lib/cjs/GraphicalEditingScope.js.map +1 -1
  11. package/lib/cjs/IModelApp.js +61 -63
  12. package/lib/cjs/IModelApp.js.map +1 -1
  13. package/lib/cjs/IModelConnection.js +10 -10
  14. package/lib/cjs/IModelConnection.js.map +1 -1
  15. package/lib/cjs/IModelRoutingContext.js +1 -1
  16. package/lib/cjs/IModelRoutingContext.js.map +1 -1
  17. package/lib/cjs/IpcApp.js +2 -2
  18. package/lib/cjs/IpcApp.js.map +1 -1
  19. package/lib/cjs/LocalhostIpcApp.js +1 -1
  20. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  21. package/lib/cjs/NativeApp.js +15 -17
  22. package/lib/cjs/NativeApp.js.map +1 -1
  23. package/lib/cjs/NativeAppLogger.js +1 -1
  24. package/lib/cjs/NativeAppLogger.js.map +1 -1
  25. package/lib/cjs/NoRenderApp.js +1 -1
  26. package/lib/cjs/NoRenderApp.js.map +1 -1
  27. package/lib/cjs/SelectionSet.js +148 -156
  28. package/lib/cjs/SelectionSet.js.map +1 -1
  29. package/lib/cjs/Sprites.js +1 -1
  30. package/lib/cjs/Sprites.js.map +1 -1
  31. package/lib/cjs/ViewCreator2d.js +3 -3
  32. package/lib/cjs/ViewCreator2d.js.map +1 -1
  33. package/lib/cjs/ViewGlobalLocation.js +5 -5
  34. package/lib/cjs/ViewGlobalLocation.js.map +1 -1
  35. package/lib/cjs/ViewState.js +2 -2
  36. package/lib/cjs/ViewState.js.map +1 -1
  37. package/lib/cjs/ViewingSpace.js +9 -9
  38. package/lib/cjs/ViewingSpace.js.map +1 -1
  39. package/lib/cjs/Viewport.js +41 -41
  40. package/lib/cjs/Viewport.js.map +1 -1
  41. package/lib/cjs/common/internal/render/DisplayParams.js +1 -1
  42. package/lib/cjs/common/internal/render/DisplayParams.js.map +1 -1
  43. package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js +1 -1
  44. package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -1
  45. package/lib/cjs/common/internal/render/GraphicDescriptionContextImpl.js +1 -1
  46. package/lib/cjs/common/internal/render/GraphicDescriptionContextImpl.js.map +1 -1
  47. package/lib/cjs/internal/render/PrimitiveBuilder.js +1 -1
  48. package/lib/cjs/internal/render/PrimitiveBuilder.js.map +1 -1
  49. package/lib/cjs/internal/render/RenderInstancesParamsImpl.js +1 -1
  50. package/lib/cjs/internal/render/RenderInstancesParamsImpl.js.map +1 -1
  51. package/lib/cjs/render/MockRender.js +3 -3
  52. package/lib/cjs/render/MockRender.js.map +1 -1
  53. package/lib/cjs/render/webgl/BackgroundMapDrape.js +1 -1
  54. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  55. package/lib/cjs/render/webgl/BatchState.js +1 -1
  56. package/lib/cjs/render/webgl/BatchState.js.map +1 -1
  57. package/lib/cjs/render/webgl/ColorInfo.js +2 -2
  58. package/lib/cjs/render/webgl/ColorInfo.js.map +1 -1
  59. package/lib/cjs/render/webgl/Diagnostics.js +4 -4
  60. package/lib/cjs/render/webgl/Diagnostics.js.map +1 -1
  61. package/lib/cjs/render/webgl/DrawCommand.js +4 -4
  62. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  63. package/lib/cjs/render/webgl/IModelFrameLifecycle.js +4 -4
  64. package/lib/cjs/render/webgl/IModelFrameLifecycle.js.map +1 -1
  65. package/lib/cjs/render/webgl/InstancedGeometry.js +3 -3
  66. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  67. package/lib/cjs/render/webgl/Material.js +4 -4
  68. package/lib/cjs/render/webgl/Material.js.map +1 -1
  69. package/lib/cjs/render/webgl/PlanarClassifier.js +1 -1
  70. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  71. package/lib/cjs/render/webgl/PlanarTextureProjection.js +1 -1
  72. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  73. package/lib/cjs/render/webgl/RenderState.js +1 -1
  74. package/lib/cjs/render/webgl/RenderState.js.map +1 -1
  75. package/lib/cjs/render/webgl/Target.js +1 -1
  76. package/lib/cjs/render/webgl/Target.js.map +1 -1
  77. package/lib/cjs/render/webgl/Technique.js +39 -39
  78. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  79. package/lib/cjs/render/webgl/TechniqueFlags.js +1 -1
  80. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  81. package/lib/cjs/render/webgl/Texture.js +3 -3
  82. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  83. package/lib/cjs/tile/CesiumAssetProvider.js +1 -1
  84. package/lib/cjs/tile/CesiumAssetProvider.js.map +1 -1
  85. package/lib/cjs/tile/map/ArcGISTileMap.js +1 -1
  86. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  87. package/lib/cjs/tile/map/ArcGisUtilities.js +1 -1
  88. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  89. package/lib/cjs/tile/map/CesiumTerrainProvider.js +6 -6
  90. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  91. package/lib/cjs/tile/map/ImageryTileTree.js +2 -2
  92. package/lib/cjs/tile/map/ImageryTileTree.js.map +1 -1
  93. package/lib/cjs/tile/map/MapLayerImageryFormats.js +7 -7
  94. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  95. package/lib/cjs/tile/map/MapTile.js +8 -8
  96. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  97. package/lib/cjs/tile/map/MapTileAvailability.js +1 -1
  98. package/lib/cjs/tile/map/MapTileAvailability.js.map +1 -1
  99. package/lib/cjs/tile/map/MapTileTree.js +9 -9
  100. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  101. package/lib/cjs/tile/map/MapTilingScheme.js +1 -1
  102. package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
  103. package/lib/cjs/tile/map/WmsCapabilities.js +2 -2
  104. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  105. package/lib/cjs/tile/map/WmtsCapabilities.js +1 -1
  106. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  107. package/lib/cjs/tools/AccuDrawTool.js +21 -21
  108. package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
  109. package/lib/cjs/tools/ClipViewTool.js +32 -32
  110. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  111. package/lib/cjs/tools/EditManipulator.js +2 -2
  112. package/lib/cjs/tools/EditManipulator.js.map +1 -1
  113. package/lib/cjs/tools/IdleTool.js +2 -2
  114. package/lib/cjs/tools/IdleTool.js.map +1 -1
  115. package/lib/cjs/tools/MeasureTool.js +34 -34
  116. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  117. package/lib/cjs/tools/SelectTool.js +5 -5
  118. package/lib/cjs/tools/SelectTool.js.map +1 -1
  119. package/lib/cjs/tools/Tool.js +10 -10
  120. package/lib/cjs/tools/Tool.js.map +1 -1
  121. package/lib/cjs/tools/ToolAdmin.js +19 -19
  122. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  123. package/lib/cjs/tools/ToolAssistance.js +19 -19
  124. package/lib/cjs/tools/ToolAssistance.js.map +1 -1
  125. package/lib/cjs/tools/ToolSettings.js +63 -63
  126. package/lib/cjs/tools/ToolSettings.js.map +1 -1
  127. package/lib/cjs/tools/ViewTool.js +37 -37
  128. package/lib/cjs/tools/ViewTool.js.map +1 -1
  129. package/lib/esm/AccuDraw.js +1 -1
  130. package/lib/esm/AccuDraw.js.map +1 -1
  131. package/lib/esm/ApproximateTerrainHeights.js +1 -1
  132. package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
  133. package/lib/esm/BackgroundMapGeometry.js +5 -5
  134. package/lib/esm/BackgroundMapGeometry.js.map +1 -1
  135. package/lib/esm/DrawingViewState.js +9 -9
  136. package/lib/esm/DrawingViewState.js.map +1 -1
  137. package/lib/esm/GraphicalEditingScope.js +4 -4
  138. package/lib/esm/GraphicalEditingScope.js.map +1 -1
  139. package/lib/esm/IModelApp.js +61 -63
  140. package/lib/esm/IModelApp.js.map +1 -1
  141. package/lib/esm/IModelConnection.js +10 -10
  142. package/lib/esm/IModelConnection.js.map +1 -1
  143. package/lib/esm/IModelRoutingContext.js +1 -1
  144. package/lib/esm/IModelRoutingContext.js.map +1 -1
  145. package/lib/esm/IpcApp.js +2 -2
  146. package/lib/esm/IpcApp.js.map +1 -1
  147. package/lib/esm/LocalhostIpcApp.js +1 -1
  148. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  149. package/lib/esm/NativeApp.js +15 -17
  150. package/lib/esm/NativeApp.js.map +1 -1
  151. package/lib/esm/NativeAppLogger.js +1 -1
  152. package/lib/esm/NativeAppLogger.js.map +1 -1
  153. package/lib/esm/NoRenderApp.js +1 -1
  154. package/lib/esm/NoRenderApp.js.map +1 -1
  155. package/lib/esm/SelectionSet.js +148 -156
  156. package/lib/esm/SelectionSet.js.map +1 -1
  157. package/lib/esm/Sprites.js +1 -1
  158. package/lib/esm/Sprites.js.map +1 -1
  159. package/lib/esm/ViewCreator2d.js +3 -3
  160. package/lib/esm/ViewCreator2d.js.map +1 -1
  161. package/lib/esm/ViewGlobalLocation.js +5 -5
  162. package/lib/esm/ViewGlobalLocation.js.map +1 -1
  163. package/lib/esm/ViewState.js +2 -2
  164. package/lib/esm/ViewState.js.map +1 -1
  165. package/lib/esm/ViewingSpace.js +9 -9
  166. package/lib/esm/ViewingSpace.js.map +1 -1
  167. package/lib/esm/Viewport.js +41 -41
  168. package/lib/esm/Viewport.js.map +1 -1
  169. package/lib/esm/common/internal/render/DisplayParams.js +1 -1
  170. package/lib/esm/common/internal/render/DisplayParams.js.map +1 -1
  171. package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.js +1 -1
  172. package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -1
  173. package/lib/esm/common/internal/render/GraphicDescriptionContextImpl.js +1 -1
  174. package/lib/esm/common/internal/render/GraphicDescriptionContextImpl.js.map +1 -1
  175. package/lib/esm/internal/render/PrimitiveBuilder.js +1 -1
  176. package/lib/esm/internal/render/PrimitiveBuilder.js.map +1 -1
  177. package/lib/esm/internal/render/RenderInstancesParamsImpl.js +1 -1
  178. package/lib/esm/internal/render/RenderInstancesParamsImpl.js.map +1 -1
  179. package/lib/esm/render/MockRender.js +3 -3
  180. package/lib/esm/render/MockRender.js.map +1 -1
  181. package/lib/esm/render/webgl/BackgroundMapDrape.js +1 -1
  182. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  183. package/lib/esm/render/webgl/BatchState.js +1 -1
  184. package/lib/esm/render/webgl/BatchState.js.map +1 -1
  185. package/lib/esm/render/webgl/ColorInfo.js +2 -2
  186. package/lib/esm/render/webgl/ColorInfo.js.map +1 -1
  187. package/lib/esm/render/webgl/Diagnostics.js +4 -4
  188. package/lib/esm/render/webgl/Diagnostics.js.map +1 -1
  189. package/lib/esm/render/webgl/DrawCommand.js +4 -4
  190. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  191. package/lib/esm/render/webgl/IModelFrameLifecycle.js +4 -4
  192. package/lib/esm/render/webgl/IModelFrameLifecycle.js.map +1 -1
  193. package/lib/esm/render/webgl/InstancedGeometry.js +3 -3
  194. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  195. package/lib/esm/render/webgl/Material.js +4 -4
  196. package/lib/esm/render/webgl/Material.js.map +1 -1
  197. package/lib/esm/render/webgl/PlanarClassifier.js +1 -1
  198. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  199. package/lib/esm/render/webgl/PlanarTextureProjection.js +1 -1
  200. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  201. package/lib/esm/render/webgl/RenderState.js +1 -1
  202. package/lib/esm/render/webgl/RenderState.js.map +1 -1
  203. package/lib/esm/render/webgl/Target.js +1 -1
  204. package/lib/esm/render/webgl/Target.js.map +1 -1
  205. package/lib/esm/render/webgl/Technique.js +39 -39
  206. package/lib/esm/render/webgl/Technique.js.map +1 -1
  207. package/lib/esm/render/webgl/TechniqueFlags.js +1 -1
  208. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  209. package/lib/esm/render/webgl/Texture.js +3 -3
  210. package/lib/esm/render/webgl/Texture.js.map +1 -1
  211. package/lib/esm/tile/CesiumAssetProvider.js +1 -1
  212. package/lib/esm/tile/CesiumAssetProvider.js.map +1 -1
  213. package/lib/esm/tile/map/ArcGISTileMap.js +1 -1
  214. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  215. package/lib/esm/tile/map/ArcGisUtilities.js +1 -1
  216. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  217. package/lib/esm/tile/map/CesiumTerrainProvider.js +6 -6
  218. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  219. package/lib/esm/tile/map/ImageryTileTree.js +2 -2
  220. package/lib/esm/tile/map/ImageryTileTree.js.map +1 -1
  221. package/lib/esm/tile/map/MapLayerImageryFormats.js +7 -7
  222. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  223. package/lib/esm/tile/map/MapTile.js +8 -8
  224. package/lib/esm/tile/map/MapTile.js.map +1 -1
  225. package/lib/esm/tile/map/MapTileAvailability.js +1 -1
  226. package/lib/esm/tile/map/MapTileAvailability.js.map +1 -1
  227. package/lib/esm/tile/map/MapTileTree.js +9 -9
  228. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  229. package/lib/esm/tile/map/MapTilingScheme.js +1 -1
  230. package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
  231. package/lib/esm/tile/map/WmsCapabilities.js +2 -2
  232. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  233. package/lib/esm/tile/map/WmtsCapabilities.js +1 -1
  234. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  235. package/lib/esm/tools/AccuDrawTool.js +21 -21
  236. package/lib/esm/tools/AccuDrawTool.js.map +1 -1
  237. package/lib/esm/tools/ClipViewTool.js +32 -32
  238. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  239. package/lib/esm/tools/EditManipulator.js +2 -2
  240. package/lib/esm/tools/EditManipulator.js.map +1 -1
  241. package/lib/esm/tools/IdleTool.js +2 -2
  242. package/lib/esm/tools/IdleTool.js.map +1 -1
  243. package/lib/esm/tools/MeasureTool.js +34 -34
  244. package/lib/esm/tools/MeasureTool.js.map +1 -1
  245. package/lib/esm/tools/SelectTool.js +5 -5
  246. package/lib/esm/tools/SelectTool.js.map +1 -1
  247. package/lib/esm/tools/Tool.js +10 -10
  248. package/lib/esm/tools/Tool.js.map +1 -1
  249. package/lib/esm/tools/ToolAdmin.js +19 -19
  250. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  251. package/lib/esm/tools/ToolAssistance.js +19 -19
  252. package/lib/esm/tools/ToolAssistance.js.map +1 -1
  253. package/lib/esm/tools/ToolSettings.js +63 -63
  254. package/lib/esm/tools/ToolSettings.js.map +1 -1
  255. package/lib/esm/tools/ViewTool.js +37 -37
  256. package/lib/esm/tools/ViewTool.js.map +1 -1
  257. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  258. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  259. package/package.json +18 -18
@@ -47,6 +47,7 @@ class ApproximateTerrainHeights {
47
47
  this._tilingScheme = new internal_1.GeographicTilingScheme(2, 1, true); // Y at top... ?
48
48
  this._scratchTileXY = core_geometry_1.Point2d.createZero();
49
49
  }
50
+ static { this.maxLevel = 6; }
50
51
  static get instance() {
51
52
  if (undefined === instance)
52
53
  instance = new ApproximateTerrainHeights();
@@ -135,5 +136,4 @@ class ApproximateTerrainHeights {
135
136
  }
136
137
  }
137
138
  exports.ApproximateTerrainHeights = ApproximateTerrainHeights;
138
- ApproximateTerrainHeights.maxLevel = 6;
139
139
  //# sourceMappingURL=ApproximateTerrainHeights.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ApproximateTerrainHeights.js","sourceRoot":"","sources":["../../src/ApproximateTerrainHeights.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Views\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Point2d, Range1d, Range2d } from \"@itwin/core-geometry\";\nimport { Cartographic } from \"@itwin/core-common\";\nimport { GeographicTilingScheme, QuadId } from \"./tile/internal\";\nimport type { ApproximateTerrainHeightsProps } from \"./ApproximateTerrainHeightsProps\";\n\nlet instance: ApproximateTerrainHeights | undefined;\n\n/**\n * A collection of functions for approximating terrain height\n * @internal\n */\nexport class ApproximateTerrainHeights {\n public static readonly maxLevel = 6;\n public readonly globalHeightRange = Range1d.createXX(-400, 90000); // Dead Sea to Mount Everest.\n private _terrainHeights?: ApproximateTerrainHeightsProps;\n private readonly _scratchCorners = [Cartographic.createZero(), Cartographic.createZero(), Cartographic.createZero(), Cartographic.createZero()];\n private readonly _tilingScheme = new GeographicTilingScheme(2, 1, true); // Y at top... ?\n private readonly _scratchTileXY = Point2d.createZero();\n\n public static get instance(): ApproximateTerrainHeights {\n if (undefined === instance)\n instance = new ApproximateTerrainHeights();\n\n return instance;\n }\n\n /**\n * Initializes the minimum and maximum terrain heights.\n * @return {Promise}\n */\n public async initialize(): Promise<void> {\n if (!this._terrainHeights) {\n const { terrainHeightsPropsString } = await import(\"./ApproximateTerrainHeightsProps\");\n this._terrainHeights = JSON.parse(terrainHeightsPropsString);\n }\n }\n\n public getTileHeightRange(quadId: QuadId, result?: Range1d): Range1d {\n result = Range1d.createFrom(this.globalHeightRange, result);\n if (undefined === this._terrainHeights)\n return result; // Not initialized.\n\n let level = quadId.level, column = quadId.column, row = quadId.row;\n if (level > 6) {\n column = column >> (level - 6);\n row = row >> quadId.row >> ((level - 6));\n level = 6;\n }\n\n const key = `${level}-${column}-${row}`;\n const heights = this._terrainHeights[key];\n assert(undefined !== heights);\n\n result.low = heights[0];\n result.high = heights[1];\n\n return result;\n }\n\n public getMinimumMaximumHeights(rectangle: Range2d, result?: Range1d): Range1d {\n result = Range1d.createFrom(this.globalHeightRange, result);\n if (undefined === this._terrainHeights)\n return result; // Not initialized.\n\n const xyLevel = this._getTileXYLevel(rectangle);\n if (undefined !== xyLevel) {\n const key = `${xyLevel.level}-${xyLevel.x}-${xyLevel.y}`;\n const heights = this._terrainHeights[key];\n assert(undefined !== heights);\n if (undefined !== heights) {\n result.low = heights[0];\n result.high = heights[1];\n }\n }\n\n return result;\n }\n\n private _getTileXYLevel(rectangle: Range2d): { x: number, y: number, level: number } | undefined {\n Cartographic.fromRadians({ longitude: rectangle.low.x, latitude: rectangle.high.y, height: 0.0 }, this._scratchCorners[0]);\n Cartographic.fromRadians({ longitude: rectangle.high.x, latitude: rectangle.high.y, height: 0.0 }, this._scratchCorners[1]);\n Cartographic.fromRadians({ longitude: rectangle.low.x, latitude: rectangle.low.y, height: 0.0 }, this._scratchCorners[2]);\n Cartographic.fromRadians({ longitude: rectangle.high.x, latitude: rectangle.low.y, height: 0.0 }, this._scratchCorners[3]);\n\n // Determine which tile the bounding rectangle is in\n let lastLevelX = 0, lastLevelY = 0;\n let currentX = 0, currentY = 0;\n const maxLevel = ApproximateTerrainHeights.maxLevel;\n let i;\n for (i = 0; i <= maxLevel; ++i) {\n let failed = false;\n for (let j = 0; j < 4; ++j) {\n const corner = this._scratchCorners[j];\n this._tilingScheme.cartographicToTileXY(corner, i, this._scratchTileXY);\n if (j === 0) {\n currentX = this._scratchTileXY.x;\n currentY = this._scratchTileXY.y;\n } else if (currentX !== this._scratchTileXY.x || currentY !== this._scratchTileXY.y) {\n failed = true;\n break;\n }\n }\n\n if (failed)\n break;\n\n lastLevelX = currentX;\n lastLevelY = currentY;\n }\n\n if (i === 0) {\n return undefined;\n }\n\n return {\n x: lastLevelX,\n y: lastLevelY,\n level: (i > maxLevel) ? maxLevel : (i - 1),\n };\n }\n}\n"]}
1
+ {"version":3,"file":"ApproximateTerrainHeights.js","sourceRoot":"","sources":["../../src/ApproximateTerrainHeights.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Views\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Point2d, Range1d, Range2d } from \"@itwin/core-geometry\";\nimport { Cartographic } from \"@itwin/core-common\";\nimport { GeographicTilingScheme, QuadId } from \"./tile/internal\";\nimport type { ApproximateTerrainHeightsProps } from \"./ApproximateTerrainHeightsProps\";\n\nlet instance: ApproximateTerrainHeights | undefined;\n\n/**\n * A collection of functions for approximating terrain height\n * @internal\n */\nexport class ApproximateTerrainHeights {\n public static readonly maxLevel = 6;\n public readonly globalHeightRange = Range1d.createXX(-400, 90000); // Dead Sea to Mount Everest.\n private _terrainHeights?: ApproximateTerrainHeightsProps;\n private readonly _scratchCorners = [Cartographic.createZero(), Cartographic.createZero(), Cartographic.createZero(), Cartographic.createZero()];\n private readonly _tilingScheme = new GeographicTilingScheme(2, 1, true); // Y at top... ?\n private readonly _scratchTileXY = Point2d.createZero();\n\n public static get instance(): ApproximateTerrainHeights {\n if (undefined === instance)\n instance = new ApproximateTerrainHeights();\n\n return instance;\n }\n\n /**\n * Initializes the minimum and maximum terrain heights.\n * @return {Promise}\n */\n public async initialize(): Promise<void> {\n if (!this._terrainHeights) {\n const { terrainHeightsPropsString } = await import(\"./ApproximateTerrainHeightsProps\");\n this._terrainHeights = JSON.parse(terrainHeightsPropsString);\n }\n }\n\n public getTileHeightRange(quadId: QuadId, result?: Range1d): Range1d {\n result = Range1d.createFrom(this.globalHeightRange, result);\n if (undefined === this._terrainHeights)\n return result; // Not initialized.\n\n let level = quadId.level, column = quadId.column, row = quadId.row;\n if (level > 6) {\n column = column >> (level - 6);\n row = row >> quadId.row >> ((level - 6));\n level = 6;\n }\n\n const key = `${level}-${column}-${row}`;\n const heights = this._terrainHeights[key];\n assert(undefined !== heights);\n\n result.low = heights[0];\n result.high = heights[1];\n\n return result;\n }\n\n public getMinimumMaximumHeights(rectangle: Range2d, result?: Range1d): Range1d {\n result = Range1d.createFrom(this.globalHeightRange, result);\n if (undefined === this._terrainHeights)\n return result; // Not initialized.\n\n const xyLevel = this._getTileXYLevel(rectangle);\n if (undefined !== xyLevel) {\n const key = `${xyLevel.level}-${xyLevel.x}-${xyLevel.y}`;\n const heights = this._terrainHeights[key];\n assert(undefined !== heights);\n if (undefined !== heights) {\n result.low = heights[0];\n result.high = heights[1];\n }\n }\n\n return result;\n }\n\n private _getTileXYLevel(rectangle: Range2d): { x: number, y: number, level: number } | undefined {\n Cartographic.fromRadians({ longitude: rectangle.low.x, latitude: rectangle.high.y, height: 0.0 }, this._scratchCorners[0]);\n Cartographic.fromRadians({ longitude: rectangle.high.x, latitude: rectangle.high.y, height: 0.0 }, this._scratchCorners[1]);\n Cartographic.fromRadians({ longitude: rectangle.low.x, latitude: rectangle.low.y, height: 0.0 }, this._scratchCorners[2]);\n Cartographic.fromRadians({ longitude: rectangle.high.x, latitude: rectangle.low.y, height: 0.0 }, this._scratchCorners[3]);\n\n // Determine which tile the bounding rectangle is in\n let lastLevelX = 0, lastLevelY = 0;\n let currentX = 0, currentY = 0;\n const maxLevel = ApproximateTerrainHeights.maxLevel;\n let i;\n for (i = 0; i <= maxLevel; ++i) {\n let failed = false;\n for (let j = 0; j < 4; ++j) {\n const corner = this._scratchCorners[j];\n this._tilingScheme.cartographicToTileXY(corner, i, this._scratchTileXY);\n if (j === 0) {\n currentX = this._scratchTileXY.x;\n currentY = this._scratchTileXY.y;\n } else if (currentX !== this._scratchTileXY.x || currentY !== this._scratchTileXY.y) {\n failed = true;\n break;\n }\n }\n\n if (failed)\n break;\n\n lastLevelX = currentX;\n lastLevelY = currentY;\n }\n\n if (i === 0) {\n return undefined;\n }\n\n return {\n x: lastLevelX,\n y: lastLevelY,\n level: (i > maxLevel) ? maxLevel : (i - 1),\n };\n }\n}\n"]}
@@ -64,6 +64,11 @@ function getFrustumPlaneIntersectionDepthRange(frustum, plane) {
64
64
  * @internal
65
65
  */
66
66
  class BackgroundMapGeometry {
67
+ static { this.maxCartesianDistance = 1E4; } // If globe is 3D we still consider the map geometry flat within this distance of the project extents.
68
+ static { this._transitionDistanceMultiplier = .25; } // In the transition range which extends beyond the cartesian range we interpolate between cartesian and ellipsoid.
69
+ static { this._scratchRayFractions = new Array(); }
70
+ static { this._scratchRayAngles = new Array(); }
71
+ static { this._scratchPoint = core_geometry_1.Point3d.createZero(); }
67
72
  constructor(_bimElevationBias, globeMode, _iModel) {
68
73
  this._bimElevationBias = _bimElevationBias;
69
74
  this._iModel = _iModel;
@@ -422,11 +427,6 @@ class BackgroundMapGeometry {
422
427
  }
423
428
  }
424
429
  exports.BackgroundMapGeometry = BackgroundMapGeometry;
425
- BackgroundMapGeometry.maxCartesianDistance = 1E4; // If globe is 3D we still consider the map geometry flat within this distance of the project extents.
426
- BackgroundMapGeometry._transitionDistanceMultiplier = .25; // In the transition range which extends beyond the cartesian range we interpolate between cartesian and ellipsoid.
427
- BackgroundMapGeometry._scratchRayFractions = new Array();
428
- BackgroundMapGeometry._scratchRayAngles = new Array();
429
- BackgroundMapGeometry._scratchPoint = core_geometry_1.Point3d.createZero();
430
430
  /** Calculate the ECEF to database (IModel) coordinate transform at a provided location, using the GCS of the iModel.
431
431
  * The transform will exactly represent the GCS at the provided location.
432
432
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"BackgroundMapGeometry.js","sourceRoot":"","sources":["../../src/BackgroundMapGeometry.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Views\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Angle, Arc3d, ClipPlane, ClipPlaneContainment, Constant, CurvePrimitive, Ellipsoid, GrowableXYZArray, LongitudeLatitudeNumber, Matrix3d, Plane3dByOriginAndUnitNormal, Point2d, Point3d, Point4d, Range1d, Range3d, Ray3d, Transform, Vector3d, WritableXYAndZ, XYAndZ } from \"@itwin/core-geometry\";\nimport { Cartographic, ColorByName, ColorDef, Frustum, GeoCoordStatus, GlobeMode, LinePixels } from \"@itwin/core-common\";\nimport { IModelConnection } from \"./IModelConnection\";\nimport { GraphicBuilder } from \"./render/GraphicBuilder\";\nimport { WebMercatorTilingScheme } from \"./tile/internal\";\n\nconst scratchRange = Range3d.createNull();\nconst scratchZeroPoint = Point3d.createZero();\nconst scratchPoint = Point3d.create();\nconst scratchVector = Vector3d.create();\nconst scratchCenterPoint = Point3d.createZero();\nconst scratchIntersectRay = Ray3d.create(Point3d.create(), Vector3d.create());\nconst scratchEyePoint = Point3d.createZero();\nconst scratchViewRotation = Matrix3d.createIdentity();\nconst scratchSilhouetteNormal = Vector3d.create();\nconst scratchCartoRectangle = new GrowableXYZArray();\nconst scratchWorkArray = new GrowableXYZArray();\n\nfunction accumulateDepthRange(point: Point3d, viewRotation: Matrix3d, range: Range3d) {\n viewRotation.multiplyXYZtoXYZ(point, scratchPoint);\n range.extend(scratchPoint);\n}\n\nfunction accumulateFrustumPlaneDepthRange(frustum: Frustum, plane: Plane3dByOriginAndUnitNormal, viewRotation: Matrix3d, range: Range3d, eyePoint?: Point3d) {\n let includeHorizon = false;\n for (let i = 0; i < 4; i++) {\n const frustumRay = Ray3d.createStartEnd(eyePoint ? eyePoint : frustum.points[i + 4], frustum.points[i]);\n const thisFraction = frustumRay.intersectionWithPlane(plane, scratchPoint);\n if (undefined !== thisFraction && (!eyePoint || thisFraction > 0))\n accumulateDepthRange(scratchPoint, viewRotation, range);\n else\n includeHorizon = true;\n }\n if (includeHorizon) {\n if (eyePoint !== undefined) {\n const eyeHeight = plane.altitude(eyePoint);\n if (eyeHeight < 0)\n accumulateDepthRange(eyePoint, viewRotation, range);\n else {\n const viewZ = viewRotation.getRow(2);\n const horizonDistance = Math.sqrt(eyeHeight * eyeHeight + 2 * eyeHeight * Constant.earthRadiusWGS84.equator);\n accumulateDepthRange(eyePoint.plusScaled(viewZ, -horizonDistance, scratchPoint), viewRotation, range);\n }\n }\n }\n}\n\n/** @internal */\nexport function getFrustumPlaneIntersectionDepthRange(frustum: Frustum, plane: Plane3dByOriginAndUnitNormal): Range1d {\n const eyePoint = frustum.getEyePoint(scratchEyePoint);\n const viewRotation = frustum.getRotation(scratchViewRotation)!;\n const intersectRange = Range3d.createNull();\n accumulateFrustumPlaneDepthRange(frustum, plane, viewRotation, intersectRange, eyePoint);\n\n return intersectRange.isNull ? Range1d.createNull() : Range1d.createXX(intersectRange.low.z, intersectRange.high.z);\n}\n\n/** Geometry of background map - either an ellipsoid or a plane as defined by GlobeMode.\n * @internal\n */\nexport class BackgroundMapGeometry {\n public readonly globeMode: GlobeMode;\n public readonly geometry: Plane3dByOriginAndUnitNormal | Ellipsoid;\n public readonly globeOrigin: Point3d;\n public readonly globeMatrix: Matrix3d;\n public readonly cartesianRange: Range3d;\n public readonly cartesianTransitionRange: Range3d;\n public readonly cartesianPlane: Plane3dByOriginAndUnitNormal;\n public readonly cartesianDiagonal: number;\n public readonly cartesianChordHeight: number;\n public readonly maxGeometryChordHeight: number;\n private _mercatorFractionToDb: Transform;\n private _mercatorTilingScheme: WebMercatorTilingScheme;\n private _ecefToDb: Transform;\n public static maxCartesianDistance = 1E4; // If globe is 3D we still consider the map geometry flat within this distance of the project extents.\n private static _transitionDistanceMultiplier = .25; // In the transition range which extends beyond the cartesian range we interpolate between cartesian and ellipsoid.\n\n private static _scratchRayFractions = new Array<number>();\n private static _scratchRayAngles = new Array<LongitudeLatitudeNumber>();\n private static _scratchPoint = Point3d.createZero();\n\n constructor(private _bimElevationBias: number, globeMode: GlobeMode, private _iModel: IModelConnection) {\n this._ecefToDb = _iModel.getMapEcefToDb(_bimElevationBias);\n this.globeMode = globeMode;\n this.cartesianRange = BackgroundMapGeometry.getCartesianRange(_iModel);\n this.cartesianTransitionRange = this.cartesianRange.clone();\n this.cartesianTransitionRange.expandInPlace(BackgroundMapGeometry.getCartesianTransitionDistance(_iModel));\n this.cartesianDiagonal = this.cartesianRange.diagonal().magnitudeXY();\n const earthRadius = Constant.earthRadiusWGS84.equator;\n this.globeOrigin = this._ecefToDb.origin.cloneAsPoint3d();\n this.globeMatrix = this._ecefToDb.matrix.clone();\n this.cartesianChordHeight = Math.sqrt(this.cartesianDiagonal * this.cartesianDiagonal + earthRadius * earthRadius) - earthRadius; // Maximum chord height deviation of the cartesian area.\n const halfChordAngle = Angle.piOver2Radians / 10;\n this.maxGeometryChordHeight = (1 - Math.cos(halfChordAngle)) * earthRadius;\n this.cartesianPlane = this.getPlane();\n this.geometry = (globeMode === GlobeMode.Ellipsoid) ? this.getEarthEllipsoid() : this.cartesianPlane;\n this._mercatorTilingScheme = new WebMercatorTilingScheme();\n this._mercatorFractionToDb = this._mercatorTilingScheme.computeMercatorFractionToDb(this._ecefToDb, _bimElevationBias, _iModel, false);\n }\n public static getCartesianRange(iModel: IModelConnection, result?: Range3d): Range3d {\n const cartesianRange = Range3d.createFrom(iModel.projectExtents, result);\n cartesianRange.expandInPlace(BackgroundMapGeometry.maxCartesianDistance);\n return cartesianRange;\n }\n public static getCartesianTransitionDistance(iModel: IModelConnection): number {\n return BackgroundMapGeometry.getCartesianRange(iModel, scratchRange).diagonal().magnitudeXY() * BackgroundMapGeometry._transitionDistanceMultiplier;\n }\n\n public async dbToCartographicFromGcs(db: XYAndZ[]): Promise<Cartographic[]> {\n const scratch = new Point3d();\n const promises = db.map(async (p) => {\n return this.cartesianRange.containsPoint(Point3d.createFrom(p, scratch)) ? this._iModel.spatialToCartographic(p) : this.dbToCartographic(p);\n });\n\n return Promise.all(promises);\n }\n\n public async dbToWGS84CartographicFromGcs(db: XYAndZ[]): Promise<Cartographic[]> {\n if (db.length === 0)\n return [];\n\n const result: Cartographic[] = Array(db.length);\n const reproject: XYAndZ[] = [];\n const reprojectIdx: number[] = [];\n const scratch = new Point3d();\n for (let i = 0; i < db.length; i++) {\n Point3d.createFrom(db[i], scratch);\n if (this.cartesianRange.containsPoint(scratch) ) {\n reprojectIdx.push(i);\n reproject.push(db[i]);\n } else {\n result[i] = this.dbToCartographic(db[i]);\n }\n }\n\n if (reproject.length === 0)\n return result;\n\n const reprojectPromise = this._iModel.wgs84CartographicFromSpatial(reproject);\n return reprojectPromise.then((reprojected) => {\n if (reprojected.length === reprojectIdx.length) { // reprojected array size must match our index array, otherwise something is OFF\n for (let i = 0; i < reprojected.length; i++) {\n result[reprojectIdx[i]] = reprojected[i]; // Insert the reprojected values at their original index\n }\n }\n return result;\n });\n }\n\n public dbToCartographic(db: XYAndZ, result?: Cartographic): Cartographic {\n if (undefined === result)\n result = Cartographic.createZero();\n\n if (this.globeMode === GlobeMode.Plane) {\n const mercatorFraction = this._mercatorFractionToDb.multiplyInversePoint3d(db)!;\n return this._mercatorTilingScheme.fractionToCartographic(mercatorFraction.x, mercatorFraction.y, result, mercatorFraction.z);\n } else {\n const ecef = this._ecefToDb.multiplyInversePoint3d(db)!;\n return Cartographic.fromEcef(ecef, result)!;\n }\n }\n\n public async cartographicToDbFromGcs(cartographic: Cartographic[]): Promise<Point3d[]> {\n let db;\n if (this.globeMode === GlobeMode.Plane) {\n const fraction = Point2d.create(0, 0);\n db = cartographic.map((p) => {\n this._mercatorTilingScheme.cartographicToFraction(p.latitude, p.longitude, fraction);\n return this._mercatorFractionToDb.multiplyXYZ(fraction.x, fraction.y, p.height);\n });\n } else {\n db = cartographic.map((p) => this._ecefToDb.multiplyPoint3d(p.toEcef()));\n }\n\n if (this._iModel.noGcsDefined)\n return db;\n\n const promises = db.map(async (p, i) => {\n return this.cartesianRange.containsPoint(p) ? this._iModel.cartographicToSpatialFromGcs(cartographic[i]) : p;\n });\n\n return Promise.all(promises);\n }\n\n public async cartographicToDbFromWgs84Gcs(cartographic: Cartographic[]): Promise<Point3d[]> {\n let db;\n if (this.globeMode === GlobeMode.Plane) {\n const fraction = Point2d.create(0, 0);\n db = cartographic.map((p) => {\n this._mercatorTilingScheme.cartographicToFraction(p.latitude, p.longitude, fraction);\n return this._mercatorFractionToDb.multiplyXYZ(fraction.x, fraction.y, p.height);\n });\n } else {\n db = cartographic.map((p) => this._ecefToDb.multiplyPoint3d(p.toEcef()));\n }\n\n if (this._iModel.noGcsDefined)\n return db;\n\n const toReprojectCoords: WritableXYAndZ[] = [];\n const toReprojectIdx: number[] = [];\n db.forEach(async (p, i) => {\n if (this.cartesianRange.containsPoint(p)) {\n toReprojectCoords.push({x:cartographic[i].longitudeDegrees, y:cartographic[i].latitudeDegrees, z:cartographic[i].height});\n toReprojectIdx.push(i);\n }\n });\n const spatialPoints = await this._iModel.toSpatialFromGcs(toReprojectCoords, { horizontalCRS: { epsg: 4326 }, verticalCRS: { id: \"ELLIPSOID\" } });\n return db.map((p, i) => {\n const reprojectedIdx = toReprojectIdx.findIndex((value) => value === i);\n return (reprojectedIdx === -1 ? p : spatialPoints[reprojectedIdx]);\n });\n }\n\n public cartographicToDb(cartographic: Cartographic, result?: Point3d): Point3d {\n if (this.globeMode === GlobeMode.Plane) {\n const fraction = Point2d.create(0, 0);\n this._mercatorTilingScheme.cartographicToFraction(cartographic.latitude, cartographic.longitude, fraction);\n return this._mercatorFractionToDb.multiplyXYZ(fraction.x, fraction.y, cartographic.height, result);\n } else {\n return this._ecefToDb.multiplyPoint3d(cartographic.toEcef());\n }\n }\n\n public getEarthEllipsoid(radiusOffset = 0): Ellipsoid {\n const equatorRadius = Constant.earthRadiusWGS84.equator + radiusOffset, polarRadius = Constant.earthRadiusWGS84.polar + radiusOffset;\n return Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.globeMatrix, equatorRadius, equatorRadius, polarRadius);\n }\n\n public getPlane(offset = 0) {\n return Plane3dByOriginAndUnitNormal.create(Point3d.create(0, 0, this._bimElevationBias + offset), Vector3d.create(0, 0, 1))!;\n }\n\n public getRayIntersection(ray: Ray3d, positiveOnly: boolean): Ray3d | undefined {\n let intersect;\n if (this.globeMode === GlobeMode.Ellipsoid) {\n const ellipsoid = this.geometry as Ellipsoid;\n BackgroundMapGeometry._scratchRayAngles.length = 0;\n BackgroundMapGeometry._scratchRayFractions.length = 0;\n\n const count = ellipsoid.intersectRay(ray, BackgroundMapGeometry._scratchRayFractions, undefined, BackgroundMapGeometry._scratchRayAngles);\n let intersectDistance;\n for (let i = 0; i < count; i++) {\n const thisFraction = BackgroundMapGeometry._scratchRayFractions[i];\n if ((!positiveOnly || thisFraction > 0) && (undefined === intersectDistance || thisFraction < intersectDistance)) {\n intersectDistance = thisFraction;\n intersect = scratchIntersectRay;\n ellipsoid.radiansToUnitNormalRay(BackgroundMapGeometry._scratchRayAngles[i].longitudeRadians, BackgroundMapGeometry._scratchRayAngles[i].latitudeRadians, intersect);\n if (intersect.direction.dotProduct(ray.direction) < 0) {\n if (this.cartesianRange.containsPoint(intersect.origin)) { // If we're in the cartesian range, correct to planar intersection.\n const planeFraction = ray.intersectionWithPlane(this.cartesianPlane, scratchIntersectRay.origin);\n if (undefined !== planeFraction && (!positiveOnly || planeFraction > 0)) {\n intersect.direction.setFromVector3d(this.cartesianPlane.getNormalRef());\n }\n }\n }\n }\n }\n } else {\n const plane = this.geometry as Plane3dByOriginAndUnitNormal;\n const thisFraction = ray.intersectionWithPlane(plane, scratchIntersectRay.origin);\n if (undefined !== thisFraction && (!positiveOnly || thisFraction > 0)) {\n intersect = scratchIntersectRay;\n intersect.direction.setFromVector3d(plane.getNormalRef());\n }\n }\n return intersect;\n }\n public getPointHeight(point: Point3d): number | undefined {\n if (this.globeMode === GlobeMode.Ellipsoid) {\n const ellipsoid = this.geometry as Ellipsoid;\n const projected = ellipsoid.projectPointToSurface(point);\n if (undefined === projected)\n return undefined;\n\n const distance = ellipsoid.radiansToPoint(projected.longitudeRadians, projected.latitudeRadians).distance(point);\n const ellipsePoint = ellipsoid.transformRef.multiplyInversePoint3d(point, BackgroundMapGeometry._scratchPoint)!;\n return ellipsePoint.magnitude() < 1 ? -distance : distance;\n } else {\n const plane = this.geometry as Plane3dByOriginAndUnitNormal;\n return plane.altitude(point);\n }\n }\n\n /** @internal */\n public getFrustumIntersectionDepthRange(frustum: Frustum, bimRange: Range3d, heightRange?: Range1d, gridPlane?: Plane3dByOriginAndUnitNormal, doGlobalScope?: boolean): Range1d {\n const clipPlanes = frustum.getRangePlanes(false, false, 0);\n const eyePoint = frustum.getEyePoint(scratchEyePoint);\n const viewRotation = frustum.getRotation(scratchViewRotation);\n if (undefined === viewRotation)\n return Range1d.createNull(); // Degenerate frustum...\n const viewZ = viewRotation.getRow(2);\n const cartoRange = this.cartesianTransitionRange;\n const intersectRange = Range3d.createNull();\n const doAccumulate = ((point: Point3d) => accumulateDepthRange(point, viewRotation, intersectRange));\n\n if (gridPlane)\n accumulateFrustumPlaneDepthRange(frustum, gridPlane, viewRotation, intersectRange, eyePoint);\n if (this.geometry instanceof Plane3dByOriginAndUnitNormal) {\n // Intersection with a planar background projection...\n const heights = heightRange ? [heightRange.low, heightRange.high] : [0];\n for (const height of heights) {\n accumulateFrustumPlaneDepthRange(frustum, this.getPlane(height), viewRotation, intersectRange, eyePoint);\n }\n } else {\n const minOffset = heightRange ? heightRange.low : 0, maxOffset = (heightRange ? heightRange.high : 0) + this.cartesianChordHeight;\n const radiusOffsets = [minOffset, maxOffset];\n\n // If we are doing global scope then include minimum ellipsoid that represents the chordal approximation of the low level tiles.\n // this substantially expands the frustum so don't do it for non-global views, but this clipping out the low level tiles.\n if (doGlobalScope)\n radiusOffsets.push(minOffset - this.maxGeometryChordHeight);\n\n const toView = Transform.createRefs(Point3d.createZero(), viewRotation);\n const eyePoint4d = eyePoint ? Point4d.createFromPointAndWeight(eyePoint, 1) : Point4d.createFromPointAndWeight(viewZ, 0);\n\n for (const radiusOffset of radiusOffsets) {\n const ellipsoid = this.getEarthEllipsoid(radiusOffset);\n const isInside = eyePoint && ellipsoid.worldToLocal(eyePoint)!.magnitude() < 1.0;\n const center = ellipsoid.localToWorld(scratchZeroPoint, scratchCenterPoint);\n const clipPlaneCount = clipPlanes.planes.length;\n\n // Extrema...\n let angles, extremaPoint;\n if (undefined !== (angles = ellipsoid.surfaceNormalToAngles(viewZ)) &&\n undefined !== (extremaPoint = ellipsoid.radiansToPoint(angles.longitudeRadians, angles.latitudeRadians)) &&\n (eyePoint === undefined || viewZ.dotProductStartEnd(extremaPoint, eyePoint) > 0) &&\n clipPlanes.classifyPointContainment([extremaPoint], false) !== ClipPlaneContainment.StronglyOutside)\n doAccumulate(extremaPoint);\n\n if (isInside) {\n if (eyePoint)\n doAccumulate(eyePoint);\n } else {\n const silhouette = ellipsoid.silhouetteArc(eyePoint4d);\n if (silhouette !== undefined) {\n silhouette.perpendicularVector.clone(scratchSilhouetteNormal);\n // Push the silhouette plane as clip so that we do not include geometry at other side of ellipsoid.\n // First make sure that it is pointing in the right direction.\n if (eyePoint) {\n // Clip toward eye.\n if (scratchSilhouetteNormal.dotProduct(viewZ) < 0)\n scratchSilhouetteNormal.negate(scratchSilhouetteNormal);\n } else {\n /* If parallel projection - clip toward side of ellipsoid with BIM geometry */\n if (Vector3d.createStartEnd(silhouette.center, bimRange.center).dotProduct(scratchSilhouetteNormal) < 0)\n scratchSilhouetteNormal.negate(scratchSilhouetteNormal);\n }\n clipPlanes.planes.push(ClipPlane.createNormalAndDistance(scratchSilhouetteNormal, scratchSilhouetteNormal.dotProduct(silhouette.center))!);\n } else {\n clipPlanes.planes.push(ClipPlane.createNormalAndPoint(viewZ, center)!);\n }\n }\n if (!isInside || radiusOffset === radiusOffsets[0]) {\n // Intersections of ellipsoid with frustum planes...\n const viewingInside = eyePoint !== undefined && viewZ.dotProduct(Vector3d.createStartEnd(center, eyePoint)) < 0;\n if (eyePoint === undefined || !isInside || viewingInside) {\n for (const clipPlane of clipPlanes.planes) {\n const plane = clipPlane.getPlane3d();\n const arc = ellipsoid.createPlaneSection(plane);\n if (undefined !== arc) {\n arc.announceClipIntervals(clipPlanes, (a0: number, a1: number, cp: CurvePrimitive) => {\n if (Math.abs(a1 - a0) < 1.0E-8) {\n doAccumulate(cp.fractionToPoint(a0)); // Tiny sweep - avoid problem with rangeMethod (not worth doing anyway).\n } else {\n const segment = cp.clonePartialCurve(a0, a1);\n if (segment !== undefined)\n segment.extendRange(intersectRange, toView);\n\n }\n });\n }\n }\n }\n // Intersections of the cartesian region with frustum planes.\n scratchCartoRectangle.resize(0);\n scratchCartoRectangle.push({ x: cartoRange.low.x, y: cartoRange.low.y, z: radiusOffset });\n scratchCartoRectangle.push({ x: cartoRange.high.x, y: cartoRange.low.y, z: radiusOffset });\n scratchCartoRectangle.push({ x: cartoRange.high.x, y: cartoRange.high.y, z: radiusOffset });\n scratchCartoRectangle.push({ x: cartoRange.low.x, y: cartoRange.high.y, z: radiusOffset });\n scratchCartoRectangle.push({ x: cartoRange.low.x, y: cartoRange.low.y, z: radiusOffset });\n\n clipPlanes.clipConvexPolygonInPlace(scratchCartoRectangle, scratchWorkArray);\n for (let i = 0; i < scratchCartoRectangle.length; i++)\n doAccumulate(scratchCartoRectangle.getPoint3dAtUncheckedPointIndex(i));\n while (clipPlanes.planes.length > clipPlaneCount) // Remove pushed silhouette plane.\n clipPlanes.planes.pop();\n }\n }\n }\n\n if (intersectRange.zLength() < 5) {\n // For the case where the fitted depth is small (less than 5 meters) we must be viewing planar projection or the\n // planar portion of the iModel in plan view. In this case use a constant (arbitrarily 100 meters) depth so that the frustum\n // Z is doesn't change and cause nearly planar geometry to jitter in Z buffer.\n const zCenter = (intersectRange.low.z + intersectRange.high.z) / 2;\n const zExpand = 50;\n return Range1d.createXX(zCenter - zExpand, zCenter + zExpand);\n } else {\n const diagonal = intersectRange.diagonal(scratchVector).magnitudeXY();\n const expansion = diagonal * .01;\n return Range1d.createXX(intersectRange.low.z - expansion, intersectRange.high.z + expansion);\n }\n }\n\n public addFrustumDecorations(builder: GraphicBuilder, frustum: Frustum) {\n if (this.geometry instanceof Ellipsoid) {\n const ellipsoid = this.geometry;\n const clipPlanes = frustum.getRangePlanes(false, false, 0);\n const viewRotation = frustum.getRotation()!;\n const eyePoint = frustum.getEyePoint(scratchEyePoint);\n const viewZ = viewRotation.getRow(2);\n const eyePoint4d = eyePoint ? Point4d.createFromPointAndWeight(eyePoint, 1) : Point4d.createFromPointAndWeight(viewZ, 0);\n const isInside = eyePoint && ellipsoid.worldToLocal(eyePoint)!.magnitude() < 1.0;\n const center = ellipsoid.localToWorld(scratchZeroPoint, scratchCenterPoint);\n const cartoRange = this.cartesianTransitionRange;\n\n if (!isInside) {\n const silhouette = ellipsoid.silhouetteArc(eyePoint4d);\n if (silhouette !== undefined) {\n silhouette.perpendicularVector.clone(scratchSilhouetteNormal);\n if (scratchSilhouetteNormal.dotProduct(viewZ) < 0)\n scratchSilhouetteNormal.negate(scratchSilhouetteNormal);\n clipPlanes.planes.push(ClipPlane.createNormalAndDistance(scratchSilhouetteNormal, scratchSilhouetteNormal.dotProduct(silhouette.center))!);\n } else {\n clipPlanes.planes.push(ClipPlane.createNormalAndPoint(viewZ, center)!);\n }\n\n const ellipsoidColor = ColorDef.create(ColorByName.yellow);\n builder.setSymbology(ellipsoidColor, ellipsoidColor, 1, LinePixels.Code2);\n for (const clipPlane of clipPlanes.planes) {\n const plane = clipPlane.getPlane3d();\n const arc = ellipsoid.createPlaneSection(plane);\n if (undefined !== arc) {\n arc.announceClipIntervals(clipPlanes, (a0: number, a1: number, cp: CurvePrimitive) => {\n const segment = cp.clonePartialCurve(a0, a1);\n if (segment !== undefined)\n builder.addArc(segment as Arc3d, false, false);\n });\n }\n\n // Intersections of the cartesian region with frustum planes.\n scratchCartoRectangle.resize(0);\n scratchCartoRectangle.push({ x: cartoRange.low.x, y: cartoRange.low.y, z: 0 });\n scratchCartoRectangle.push({ x: cartoRange.high.x, y: cartoRange.low.y, z: 0 });\n scratchCartoRectangle.push({ x: cartoRange.high.x, y: cartoRange.high.y, z: 0 });\n scratchCartoRectangle.push({ x: cartoRange.low.x, y: cartoRange.high.y, z: 0 });\n scratchCartoRectangle.push({ x: cartoRange.low.x, y: cartoRange.low.y, z: 0 });\n\n clipPlanes.clipConvexPolygonInPlace(scratchCartoRectangle, scratchWorkArray);\n if (scratchCartoRectangle.length > 0) {\n builder.addLineString(scratchCartoRectangle.getPoint3dArray());\n }\n }\n }\n }\n }\n}\n\n/** Calculate the ECEF to database (IModel) coordinate transform at a provided location, using the GCS of the iModel.\n * The transform will exactly represent the GCS at the provided location.\n * @public\n */\nexport async function calculateEcefToDbTransformAtLocation(originIn: Point3d, iModel: IModelConnection): Promise<Transform | undefined> {\n const geoConverter = iModel.noGcsDefined ? undefined : iModel.geoServices.getConverter(\"WGS84\");\n if (geoConverter === undefined)\n return undefined;\n\n const origin = Point3d.create(originIn.x, originIn.y, 0); // Always Test at zero.\n const eastPoint = origin.plusXYZ(1, 0, 0);\n const northPoint = origin.plusXYZ(0, 1, 0);\n\n const response = await geoConverter.getGeoCoordinatesFromIModelCoordinates([origin, northPoint, eastPoint]);\n if (response.geoCoords[0].s !== GeoCoordStatus.Success || response.geoCoords[1].s !== GeoCoordStatus.Success || response.geoCoords[2].s !== GeoCoordStatus.Success)\n return undefined;\n\n const geoOrigin = Point3d.fromJSON(response.geoCoords[0].p);\n const geoNorth = Point3d.fromJSON(response.geoCoords[1].p);\n const geoEast = Point3d.fromJSON(response.geoCoords[2].p);\n const ecefOrigin = Cartographic.fromDegrees({ longitude: geoOrigin.x, latitude: geoOrigin.y, height: geoOrigin.z }).toEcef();\n const ecefNorth = Cartographic.fromDegrees({ longitude: geoNorth.x, latitude: geoNorth.y, height: geoNorth.z }).toEcef();\n const ecefEast = Cartographic.fromDegrees({ longitude: geoEast.x, latitude: geoEast.y, height: geoEast.z }).toEcef();\n\n const xVector = Vector3d.createStartEnd(ecefOrigin, ecefEast);\n const yVector = Vector3d.createStartEnd(ecefOrigin, ecefNorth);\n const zVector = xVector.unitCrossProduct(yVector);\n if (undefined === zVector) {\n assert(false); // Should never occur.\n return undefined;\n }\n const matrix = Matrix3d.createColumns(xVector, yVector, zVector);\n if (matrix === undefined)\n return undefined;\n\n const inverse = matrix.inverse();\n if (inverse === undefined) {\n assert(false); // Should never occur.\n return undefined;\n }\n\n return Transform.createMatrixPickupPutdown(matrix, origin, ecefOrigin).inverse()!;\n}\n\n"]}
1
+ {"version":3,"file":"BackgroundMapGeometry.js","sourceRoot":"","sources":["../../src/BackgroundMapGeometry.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Views\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Angle, Arc3d, ClipPlane, ClipPlaneContainment, Constant, CurvePrimitive, Ellipsoid, GrowableXYZArray, LongitudeLatitudeNumber, Matrix3d, Plane3dByOriginAndUnitNormal, Point2d, Point3d, Point4d, Range1d, Range3d, Ray3d, Transform, Vector3d, WritableXYAndZ, XYAndZ } from \"@itwin/core-geometry\";\nimport { Cartographic, ColorByName, ColorDef, Frustum, GeoCoordStatus, GlobeMode, LinePixels } from \"@itwin/core-common\";\nimport { IModelConnection } from \"./IModelConnection\";\nimport { GraphicBuilder } from \"./render/GraphicBuilder\";\nimport { WebMercatorTilingScheme } from \"./tile/internal\";\n\nconst scratchRange = Range3d.createNull();\nconst scratchZeroPoint = Point3d.createZero();\nconst scratchPoint = Point3d.create();\nconst scratchVector = Vector3d.create();\nconst scratchCenterPoint = Point3d.createZero();\nconst scratchIntersectRay = Ray3d.create(Point3d.create(), Vector3d.create());\nconst scratchEyePoint = Point3d.createZero();\nconst scratchViewRotation = Matrix3d.createIdentity();\nconst scratchSilhouetteNormal = Vector3d.create();\nconst scratchCartoRectangle = new GrowableXYZArray();\nconst scratchWorkArray = new GrowableXYZArray();\n\nfunction accumulateDepthRange(point: Point3d, viewRotation: Matrix3d, range: Range3d) {\n viewRotation.multiplyXYZtoXYZ(point, scratchPoint);\n range.extend(scratchPoint);\n}\n\nfunction accumulateFrustumPlaneDepthRange(frustum: Frustum, plane: Plane3dByOriginAndUnitNormal, viewRotation: Matrix3d, range: Range3d, eyePoint?: Point3d) {\n let includeHorizon = false;\n for (let i = 0; i < 4; i++) {\n const frustumRay = Ray3d.createStartEnd(eyePoint ? eyePoint : frustum.points[i + 4], frustum.points[i]);\n const thisFraction = frustumRay.intersectionWithPlane(plane, scratchPoint);\n if (undefined !== thisFraction && (!eyePoint || thisFraction > 0))\n accumulateDepthRange(scratchPoint, viewRotation, range);\n else\n includeHorizon = true;\n }\n if (includeHorizon) {\n if (eyePoint !== undefined) {\n const eyeHeight = plane.altitude(eyePoint);\n if (eyeHeight < 0)\n accumulateDepthRange(eyePoint, viewRotation, range);\n else {\n const viewZ = viewRotation.getRow(2);\n const horizonDistance = Math.sqrt(eyeHeight * eyeHeight + 2 * eyeHeight * Constant.earthRadiusWGS84.equator);\n accumulateDepthRange(eyePoint.plusScaled(viewZ, -horizonDistance, scratchPoint), viewRotation, range);\n }\n }\n }\n}\n\n/** @internal */\nexport function getFrustumPlaneIntersectionDepthRange(frustum: Frustum, plane: Plane3dByOriginAndUnitNormal): Range1d {\n const eyePoint = frustum.getEyePoint(scratchEyePoint);\n const viewRotation = frustum.getRotation(scratchViewRotation)!;\n const intersectRange = Range3d.createNull();\n accumulateFrustumPlaneDepthRange(frustum, plane, viewRotation, intersectRange, eyePoint);\n\n return intersectRange.isNull ? Range1d.createNull() : Range1d.createXX(intersectRange.low.z, intersectRange.high.z);\n}\n\n/** Geometry of background map - either an ellipsoid or a plane as defined by GlobeMode.\n * @internal\n */\nexport class BackgroundMapGeometry {\n public readonly globeMode: GlobeMode;\n public readonly geometry: Plane3dByOriginAndUnitNormal | Ellipsoid;\n public readonly globeOrigin: Point3d;\n public readonly globeMatrix: Matrix3d;\n public readonly cartesianRange: Range3d;\n public readonly cartesianTransitionRange: Range3d;\n public readonly cartesianPlane: Plane3dByOriginAndUnitNormal;\n public readonly cartesianDiagonal: number;\n public readonly cartesianChordHeight: number;\n public readonly maxGeometryChordHeight: number;\n private _mercatorFractionToDb: Transform;\n private _mercatorTilingScheme: WebMercatorTilingScheme;\n private _ecefToDb: Transform;\n public static maxCartesianDistance = 1E4; // If globe is 3D we still consider the map geometry flat within this distance of the project extents.\n private static _transitionDistanceMultiplier = .25; // In the transition range which extends beyond the cartesian range we interpolate between cartesian and ellipsoid.\n\n private static _scratchRayFractions = new Array<number>();\n private static _scratchRayAngles = new Array<LongitudeLatitudeNumber>();\n private static _scratchPoint = Point3d.createZero();\n\n constructor(private _bimElevationBias: number, globeMode: GlobeMode, private _iModel: IModelConnection) {\n this._ecefToDb = _iModel.getMapEcefToDb(_bimElevationBias);\n this.globeMode = globeMode;\n this.cartesianRange = BackgroundMapGeometry.getCartesianRange(_iModel);\n this.cartesianTransitionRange = this.cartesianRange.clone();\n this.cartesianTransitionRange.expandInPlace(BackgroundMapGeometry.getCartesianTransitionDistance(_iModel));\n this.cartesianDiagonal = this.cartesianRange.diagonal().magnitudeXY();\n const earthRadius = Constant.earthRadiusWGS84.equator;\n this.globeOrigin = this._ecefToDb.origin.cloneAsPoint3d();\n this.globeMatrix = this._ecefToDb.matrix.clone();\n this.cartesianChordHeight = Math.sqrt(this.cartesianDiagonal * this.cartesianDiagonal + earthRadius * earthRadius) - earthRadius; // Maximum chord height deviation of the cartesian area.\n const halfChordAngle = Angle.piOver2Radians / 10;\n this.maxGeometryChordHeight = (1 - Math.cos(halfChordAngle)) * earthRadius;\n this.cartesianPlane = this.getPlane();\n this.geometry = (globeMode === GlobeMode.Ellipsoid) ? this.getEarthEllipsoid() : this.cartesianPlane;\n this._mercatorTilingScheme = new WebMercatorTilingScheme();\n this._mercatorFractionToDb = this._mercatorTilingScheme.computeMercatorFractionToDb(this._ecefToDb, _bimElevationBias, _iModel, false);\n }\n public static getCartesianRange(iModel: IModelConnection, result?: Range3d): Range3d {\n const cartesianRange = Range3d.createFrom(iModel.projectExtents, result);\n cartesianRange.expandInPlace(BackgroundMapGeometry.maxCartesianDistance);\n return cartesianRange;\n }\n public static getCartesianTransitionDistance(iModel: IModelConnection): number {\n return BackgroundMapGeometry.getCartesianRange(iModel, scratchRange).diagonal().magnitudeXY() * BackgroundMapGeometry._transitionDistanceMultiplier;\n }\n\n public async dbToCartographicFromGcs(db: XYAndZ[]): Promise<Cartographic[]> {\n const scratch = new Point3d();\n const promises = db.map(async (p) => {\n return this.cartesianRange.containsPoint(Point3d.createFrom(p, scratch)) ? this._iModel.spatialToCartographic(p) : this.dbToCartographic(p);\n });\n\n return Promise.all(promises);\n }\n\n public async dbToWGS84CartographicFromGcs(db: XYAndZ[]): Promise<Cartographic[]> {\n if (db.length === 0)\n return [];\n\n const result: Cartographic[] = Array(db.length);\n const reproject: XYAndZ[] = [];\n const reprojectIdx: number[] = [];\n const scratch = new Point3d();\n for (let i = 0; i < db.length; i++) {\n Point3d.createFrom(db[i], scratch);\n if (this.cartesianRange.containsPoint(scratch) ) {\n reprojectIdx.push(i);\n reproject.push(db[i]);\n } else {\n result[i] = this.dbToCartographic(db[i]);\n }\n }\n\n if (reproject.length === 0)\n return result;\n\n const reprojectPromise = this._iModel.wgs84CartographicFromSpatial(reproject);\n return reprojectPromise.then((reprojected) => {\n if (reprojected.length === reprojectIdx.length) { // reprojected array size must match our index array, otherwise something is OFF\n for (let i = 0; i < reprojected.length; i++) {\n result[reprojectIdx[i]] = reprojected[i]; // Insert the reprojected values at their original index\n }\n }\n return result;\n });\n }\n\n public dbToCartographic(db: XYAndZ, result?: Cartographic): Cartographic {\n if (undefined === result)\n result = Cartographic.createZero();\n\n if (this.globeMode === GlobeMode.Plane) {\n const mercatorFraction = this._mercatorFractionToDb.multiplyInversePoint3d(db)!;\n return this._mercatorTilingScheme.fractionToCartographic(mercatorFraction.x, mercatorFraction.y, result, mercatorFraction.z);\n } else {\n const ecef = this._ecefToDb.multiplyInversePoint3d(db)!;\n return Cartographic.fromEcef(ecef, result)!;\n }\n }\n\n public async cartographicToDbFromGcs(cartographic: Cartographic[]): Promise<Point3d[]> {\n let db;\n if (this.globeMode === GlobeMode.Plane) {\n const fraction = Point2d.create(0, 0);\n db = cartographic.map((p) => {\n this._mercatorTilingScheme.cartographicToFraction(p.latitude, p.longitude, fraction);\n return this._mercatorFractionToDb.multiplyXYZ(fraction.x, fraction.y, p.height);\n });\n } else {\n db = cartographic.map((p) => this._ecefToDb.multiplyPoint3d(p.toEcef()));\n }\n\n if (this._iModel.noGcsDefined)\n return db;\n\n const promises = db.map(async (p, i) => {\n return this.cartesianRange.containsPoint(p) ? this._iModel.cartographicToSpatialFromGcs(cartographic[i]) : p;\n });\n\n return Promise.all(promises);\n }\n\n public async cartographicToDbFromWgs84Gcs(cartographic: Cartographic[]): Promise<Point3d[]> {\n let db;\n if (this.globeMode === GlobeMode.Plane) {\n const fraction = Point2d.create(0, 0);\n db = cartographic.map((p) => {\n this._mercatorTilingScheme.cartographicToFraction(p.latitude, p.longitude, fraction);\n return this._mercatorFractionToDb.multiplyXYZ(fraction.x, fraction.y, p.height);\n });\n } else {\n db = cartographic.map((p) => this._ecefToDb.multiplyPoint3d(p.toEcef()));\n }\n\n if (this._iModel.noGcsDefined)\n return db;\n\n const toReprojectCoords: WritableXYAndZ[] = [];\n const toReprojectIdx: number[] = [];\n db.forEach(async (p, i) => {\n if (this.cartesianRange.containsPoint(p)) {\n toReprojectCoords.push({x:cartographic[i].longitudeDegrees, y:cartographic[i].latitudeDegrees, z:cartographic[i].height});\n toReprojectIdx.push(i);\n }\n });\n const spatialPoints = await this._iModel.toSpatialFromGcs(toReprojectCoords, { horizontalCRS: { epsg: 4326 }, verticalCRS: { id: \"ELLIPSOID\" } });\n return db.map((p, i) => {\n const reprojectedIdx = toReprojectIdx.findIndex((value) => value === i);\n return (reprojectedIdx === -1 ? p : spatialPoints[reprojectedIdx]);\n });\n }\n\n public cartographicToDb(cartographic: Cartographic, result?: Point3d): Point3d {\n if (this.globeMode === GlobeMode.Plane) {\n const fraction = Point2d.create(0, 0);\n this._mercatorTilingScheme.cartographicToFraction(cartographic.latitude, cartographic.longitude, fraction);\n return this._mercatorFractionToDb.multiplyXYZ(fraction.x, fraction.y, cartographic.height, result);\n } else {\n return this._ecefToDb.multiplyPoint3d(cartographic.toEcef());\n }\n }\n\n public getEarthEllipsoid(radiusOffset = 0): Ellipsoid {\n const equatorRadius = Constant.earthRadiusWGS84.equator + radiusOffset, polarRadius = Constant.earthRadiusWGS84.polar + radiusOffset;\n return Ellipsoid.createCenterMatrixRadii(this.globeOrigin, this.globeMatrix, equatorRadius, equatorRadius, polarRadius);\n }\n\n public getPlane(offset = 0) {\n return Plane3dByOriginAndUnitNormal.create(Point3d.create(0, 0, this._bimElevationBias + offset), Vector3d.create(0, 0, 1))!;\n }\n\n public getRayIntersection(ray: Ray3d, positiveOnly: boolean): Ray3d | undefined {\n let intersect;\n if (this.globeMode === GlobeMode.Ellipsoid) {\n const ellipsoid = this.geometry as Ellipsoid;\n BackgroundMapGeometry._scratchRayAngles.length = 0;\n BackgroundMapGeometry._scratchRayFractions.length = 0;\n\n const count = ellipsoid.intersectRay(ray, BackgroundMapGeometry._scratchRayFractions, undefined, BackgroundMapGeometry._scratchRayAngles);\n let intersectDistance;\n for (let i = 0; i < count; i++) {\n const thisFraction = BackgroundMapGeometry._scratchRayFractions[i];\n if ((!positiveOnly || thisFraction > 0) && (undefined === intersectDistance || thisFraction < intersectDistance)) {\n intersectDistance = thisFraction;\n intersect = scratchIntersectRay;\n ellipsoid.radiansToUnitNormalRay(BackgroundMapGeometry._scratchRayAngles[i].longitudeRadians, BackgroundMapGeometry._scratchRayAngles[i].latitudeRadians, intersect);\n if (intersect.direction.dotProduct(ray.direction) < 0) {\n if (this.cartesianRange.containsPoint(intersect.origin)) { // If we're in the cartesian range, correct to planar intersection.\n const planeFraction = ray.intersectionWithPlane(this.cartesianPlane, scratchIntersectRay.origin);\n if (undefined !== planeFraction && (!positiveOnly || planeFraction > 0)) {\n intersect.direction.setFromVector3d(this.cartesianPlane.getNormalRef());\n }\n }\n }\n }\n }\n } else {\n const plane = this.geometry as Plane3dByOriginAndUnitNormal;\n const thisFraction = ray.intersectionWithPlane(plane, scratchIntersectRay.origin);\n if (undefined !== thisFraction && (!positiveOnly || thisFraction > 0)) {\n intersect = scratchIntersectRay;\n intersect.direction.setFromVector3d(plane.getNormalRef());\n }\n }\n return intersect;\n }\n public getPointHeight(point: Point3d): number | undefined {\n if (this.globeMode === GlobeMode.Ellipsoid) {\n const ellipsoid = this.geometry as Ellipsoid;\n const projected = ellipsoid.projectPointToSurface(point);\n if (undefined === projected)\n return undefined;\n\n const distance = ellipsoid.radiansToPoint(projected.longitudeRadians, projected.latitudeRadians).distance(point);\n const ellipsePoint = ellipsoid.transformRef.multiplyInversePoint3d(point, BackgroundMapGeometry._scratchPoint)!;\n return ellipsePoint.magnitude() < 1 ? -distance : distance;\n } else {\n const plane = this.geometry as Plane3dByOriginAndUnitNormal;\n return plane.altitude(point);\n }\n }\n\n /** @internal */\n public getFrustumIntersectionDepthRange(frustum: Frustum, bimRange: Range3d, heightRange?: Range1d, gridPlane?: Plane3dByOriginAndUnitNormal, doGlobalScope?: boolean): Range1d {\n const clipPlanes = frustum.getRangePlanes(false, false, 0);\n const eyePoint = frustum.getEyePoint(scratchEyePoint);\n const viewRotation = frustum.getRotation(scratchViewRotation);\n if (undefined === viewRotation)\n return Range1d.createNull(); // Degenerate frustum...\n const viewZ = viewRotation.getRow(2);\n const cartoRange = this.cartesianTransitionRange;\n const intersectRange = Range3d.createNull();\n const doAccumulate = ((point: Point3d) => accumulateDepthRange(point, viewRotation, intersectRange));\n\n if (gridPlane)\n accumulateFrustumPlaneDepthRange(frustum, gridPlane, viewRotation, intersectRange, eyePoint);\n if (this.geometry instanceof Plane3dByOriginAndUnitNormal) {\n // Intersection with a planar background projection...\n const heights = heightRange ? [heightRange.low, heightRange.high] : [0];\n for (const height of heights) {\n accumulateFrustumPlaneDepthRange(frustum, this.getPlane(height), viewRotation, intersectRange, eyePoint);\n }\n } else {\n const minOffset = heightRange ? heightRange.low : 0, maxOffset = (heightRange ? heightRange.high : 0) + this.cartesianChordHeight;\n const radiusOffsets = [minOffset, maxOffset];\n\n // If we are doing global scope then include minimum ellipsoid that represents the chordal approximation of the low level tiles.\n // this substantially expands the frustum so don't do it for non-global views, but this clipping out the low level tiles.\n if (doGlobalScope)\n radiusOffsets.push(minOffset - this.maxGeometryChordHeight);\n\n const toView = Transform.createRefs(Point3d.createZero(), viewRotation);\n const eyePoint4d = eyePoint ? Point4d.createFromPointAndWeight(eyePoint, 1) : Point4d.createFromPointAndWeight(viewZ, 0);\n\n for (const radiusOffset of radiusOffsets) {\n const ellipsoid = this.getEarthEllipsoid(radiusOffset);\n const isInside = eyePoint && ellipsoid.worldToLocal(eyePoint)!.magnitude() < 1.0;\n const center = ellipsoid.localToWorld(scratchZeroPoint, scratchCenterPoint);\n const clipPlaneCount = clipPlanes.planes.length;\n\n // Extrema...\n let angles, extremaPoint;\n if (undefined !== (angles = ellipsoid.surfaceNormalToAngles(viewZ)) &&\n undefined !== (extremaPoint = ellipsoid.radiansToPoint(angles.longitudeRadians, angles.latitudeRadians)) &&\n (eyePoint === undefined || viewZ.dotProductStartEnd(extremaPoint, eyePoint) > 0) &&\n clipPlanes.classifyPointContainment([extremaPoint], false) !== ClipPlaneContainment.StronglyOutside)\n doAccumulate(extremaPoint);\n\n if (isInside) {\n if (eyePoint)\n doAccumulate(eyePoint);\n } else {\n const silhouette = ellipsoid.silhouetteArc(eyePoint4d);\n if (silhouette !== undefined) {\n silhouette.perpendicularVector.clone(scratchSilhouetteNormal);\n // Push the silhouette plane as clip so that we do not include geometry at other side of ellipsoid.\n // First make sure that it is pointing in the right direction.\n if (eyePoint) {\n // Clip toward eye.\n if (scratchSilhouetteNormal.dotProduct(viewZ) < 0)\n scratchSilhouetteNormal.negate(scratchSilhouetteNormal);\n } else {\n /* If parallel projection - clip toward side of ellipsoid with BIM geometry */\n if (Vector3d.createStartEnd(silhouette.center, bimRange.center).dotProduct(scratchSilhouetteNormal) < 0)\n scratchSilhouetteNormal.negate(scratchSilhouetteNormal);\n }\n clipPlanes.planes.push(ClipPlane.createNormalAndDistance(scratchSilhouetteNormal, scratchSilhouetteNormal.dotProduct(silhouette.center))!);\n } else {\n clipPlanes.planes.push(ClipPlane.createNormalAndPoint(viewZ, center)!);\n }\n }\n if (!isInside || radiusOffset === radiusOffsets[0]) {\n // Intersections of ellipsoid with frustum planes...\n const viewingInside = eyePoint !== undefined && viewZ.dotProduct(Vector3d.createStartEnd(center, eyePoint)) < 0;\n if (eyePoint === undefined || !isInside || viewingInside) {\n for (const clipPlane of clipPlanes.planes) {\n const plane = clipPlane.getPlane3d();\n const arc = ellipsoid.createPlaneSection(plane);\n if (undefined !== arc) {\n arc.announceClipIntervals(clipPlanes, (a0: number, a1: number, cp: CurvePrimitive) => {\n if (Math.abs(a1 - a0) < 1.0E-8) {\n doAccumulate(cp.fractionToPoint(a0)); // Tiny sweep - avoid problem with rangeMethod (not worth doing anyway).\n } else {\n const segment = cp.clonePartialCurve(a0, a1);\n if (segment !== undefined)\n segment.extendRange(intersectRange, toView);\n\n }\n });\n }\n }\n }\n // Intersections of the cartesian region with frustum planes.\n scratchCartoRectangle.resize(0);\n scratchCartoRectangle.push({ x: cartoRange.low.x, y: cartoRange.low.y, z: radiusOffset });\n scratchCartoRectangle.push({ x: cartoRange.high.x, y: cartoRange.low.y, z: radiusOffset });\n scratchCartoRectangle.push({ x: cartoRange.high.x, y: cartoRange.high.y, z: radiusOffset });\n scratchCartoRectangle.push({ x: cartoRange.low.x, y: cartoRange.high.y, z: radiusOffset });\n scratchCartoRectangle.push({ x: cartoRange.low.x, y: cartoRange.low.y, z: radiusOffset });\n\n clipPlanes.clipConvexPolygonInPlace(scratchCartoRectangle, scratchWorkArray);\n for (let i = 0; i < scratchCartoRectangle.length; i++)\n doAccumulate(scratchCartoRectangle.getPoint3dAtUncheckedPointIndex(i));\n while (clipPlanes.planes.length > clipPlaneCount) // Remove pushed silhouette plane.\n clipPlanes.planes.pop();\n }\n }\n }\n\n if (intersectRange.zLength() < 5) {\n // For the case where the fitted depth is small (less than 5 meters) we must be viewing planar projection or the\n // planar portion of the iModel in plan view. In this case use a constant (arbitrarily 100 meters) depth so that the frustum\n // Z is doesn't change and cause nearly planar geometry to jitter in Z buffer.\n const zCenter = (intersectRange.low.z + intersectRange.high.z) / 2;\n const zExpand = 50;\n return Range1d.createXX(zCenter - zExpand, zCenter + zExpand);\n } else {\n const diagonal = intersectRange.diagonal(scratchVector).magnitudeXY();\n const expansion = diagonal * .01;\n return Range1d.createXX(intersectRange.low.z - expansion, intersectRange.high.z + expansion);\n }\n }\n\n public addFrustumDecorations(builder: GraphicBuilder, frustum: Frustum) {\n if (this.geometry instanceof Ellipsoid) {\n const ellipsoid = this.geometry;\n const clipPlanes = frustum.getRangePlanes(false, false, 0);\n const viewRotation = frustum.getRotation()!;\n const eyePoint = frustum.getEyePoint(scratchEyePoint);\n const viewZ = viewRotation.getRow(2);\n const eyePoint4d = eyePoint ? Point4d.createFromPointAndWeight(eyePoint, 1) : Point4d.createFromPointAndWeight(viewZ, 0);\n const isInside = eyePoint && ellipsoid.worldToLocal(eyePoint)!.magnitude() < 1.0;\n const center = ellipsoid.localToWorld(scratchZeroPoint, scratchCenterPoint);\n const cartoRange = this.cartesianTransitionRange;\n\n if (!isInside) {\n const silhouette = ellipsoid.silhouetteArc(eyePoint4d);\n if (silhouette !== undefined) {\n silhouette.perpendicularVector.clone(scratchSilhouetteNormal);\n if (scratchSilhouetteNormal.dotProduct(viewZ) < 0)\n scratchSilhouetteNormal.negate(scratchSilhouetteNormal);\n clipPlanes.planes.push(ClipPlane.createNormalAndDistance(scratchSilhouetteNormal, scratchSilhouetteNormal.dotProduct(silhouette.center))!);\n } else {\n clipPlanes.planes.push(ClipPlane.createNormalAndPoint(viewZ, center)!);\n }\n\n const ellipsoidColor = ColorDef.create(ColorByName.yellow);\n builder.setSymbology(ellipsoidColor, ellipsoidColor, 1, LinePixels.Code2);\n for (const clipPlane of clipPlanes.planes) {\n const plane = clipPlane.getPlane3d();\n const arc = ellipsoid.createPlaneSection(plane);\n if (undefined !== arc) {\n arc.announceClipIntervals(clipPlanes, (a0: number, a1: number, cp: CurvePrimitive) => {\n const segment = cp.clonePartialCurve(a0, a1);\n if (segment !== undefined)\n builder.addArc(segment as Arc3d, false, false);\n });\n }\n\n // Intersections of the cartesian region with frustum planes.\n scratchCartoRectangle.resize(0);\n scratchCartoRectangle.push({ x: cartoRange.low.x, y: cartoRange.low.y, z: 0 });\n scratchCartoRectangle.push({ x: cartoRange.high.x, y: cartoRange.low.y, z: 0 });\n scratchCartoRectangle.push({ x: cartoRange.high.x, y: cartoRange.high.y, z: 0 });\n scratchCartoRectangle.push({ x: cartoRange.low.x, y: cartoRange.high.y, z: 0 });\n scratchCartoRectangle.push({ x: cartoRange.low.x, y: cartoRange.low.y, z: 0 });\n\n clipPlanes.clipConvexPolygonInPlace(scratchCartoRectangle, scratchWorkArray);\n if (scratchCartoRectangle.length > 0) {\n builder.addLineString(scratchCartoRectangle.getPoint3dArray());\n }\n }\n }\n }\n }\n}\n\n/** Calculate the ECEF to database (IModel) coordinate transform at a provided location, using the GCS of the iModel.\n * The transform will exactly represent the GCS at the provided location.\n * @public\n */\nexport async function calculateEcefToDbTransformAtLocation(originIn: Point3d, iModel: IModelConnection): Promise<Transform | undefined> {\n const geoConverter = iModel.noGcsDefined ? undefined : iModel.geoServices.getConverter(\"WGS84\");\n if (geoConverter === undefined)\n return undefined;\n\n const origin = Point3d.create(originIn.x, originIn.y, 0); // Always Test at zero.\n const eastPoint = origin.plusXYZ(1, 0, 0);\n const northPoint = origin.plusXYZ(0, 1, 0);\n\n const response = await geoConverter.getGeoCoordinatesFromIModelCoordinates([origin, northPoint, eastPoint]);\n if (response.geoCoords[0].s !== GeoCoordStatus.Success || response.geoCoords[1].s !== GeoCoordStatus.Success || response.geoCoords[2].s !== GeoCoordStatus.Success)\n return undefined;\n\n const geoOrigin = Point3d.fromJSON(response.geoCoords[0].p);\n const geoNorth = Point3d.fromJSON(response.geoCoords[1].p);\n const geoEast = Point3d.fromJSON(response.geoCoords[2].p);\n const ecefOrigin = Cartographic.fromDegrees({ longitude: geoOrigin.x, latitude: geoOrigin.y, height: geoOrigin.z }).toEcef();\n const ecefNorth = Cartographic.fromDegrees({ longitude: geoNorth.x, latitude: geoNorth.y, height: geoNorth.z }).toEcef();\n const ecefEast = Cartographic.fromDegrees({ longitude: geoEast.x, latitude: geoEast.y, height: geoEast.z }).toEcef();\n\n const xVector = Vector3d.createStartEnd(ecefOrigin, ecefEast);\n const yVector = Vector3d.createStartEnd(ecefOrigin, ecefNorth);\n const zVector = xVector.unitCrossProduct(yVector);\n if (undefined === zVector) {\n assert(false); // Should never occur.\n return undefined;\n }\n const matrix = Matrix3d.createColumns(xVector, yVector, zVector);\n if (matrix === undefined)\n return undefined;\n\n const inverse = matrix.inverse();\n if (inverse === undefined) {\n assert(false); // Should never occur.\n return undefined;\n }\n\n return Transform.createMatrixPickupPutdown(matrix, origin, ecefOrigin).inverse()!;\n}\n\n"]}
@@ -234,6 +234,15 @@ class SectionAttachment {
234
234
  */
235
235
  class DrawingViewState extends ViewState_1.ViewState2d {
236
236
  static get className() { return "DrawingViewDefinition"; }
237
+ /** Exposed strictly for testing and debugging. Indicates that when loading the view, the spatial view should be displayed even
238
+ * if `SectionDrawing.displaySpatialView` is not `true`.
239
+ * @internal
240
+ */
241
+ static { this.alwaysDisplaySpatialView = false; }
242
+ /** Exposed strictly for testing and debugging. Indicates that the 2d graphics should not be displayed.
243
+ * @internal
244
+ */
245
+ static { this.hideDrawingGraphics = false; }
237
246
  /** Strictly for testing. @internal */
238
247
  get sectionDrawingProps() {
239
248
  return this._attachmentInfo.toJSON();
@@ -395,13 +404,4 @@ class DrawingViewState extends ViewState_1.ViewState2d {
395
404
  }
396
405
  }
397
406
  exports.DrawingViewState = DrawingViewState;
398
- /** Exposed strictly for testing and debugging. Indicates that when loading the view, the spatial view should be displayed even
399
- * if `SectionDrawing.displaySpatialView` is not `true`.
400
- * @internal
401
- */
402
- DrawingViewState.alwaysDisplaySpatialView = false;
403
- /** Exposed strictly for testing and debugging. Indicates that the 2d graphics should not be displayed.
404
- * @internal
405
- */
406
- DrawingViewState.hideDrawingGraphics = false;
407
407
  //# sourceMappingURL=DrawingViewState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DrawingViewState.js","sourceRoot":"","sources":["../../src/DrawingViewState.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Views\n */\n\nimport { assert, dispose, Id64, Id64String } from \"@itwin/core-bentley\";\nimport {\n AxisAlignedBox3d, Frustum, HydrateViewStateRequestProps, HydrateViewStateResponseProps, QueryRowFormat, SectionDrawingViewProps, ViewDefinition2dProps, ViewFlagOverrides, ViewStateProps,\n} from \"@itwin/core-common\";\nimport { Constant, Range3d, Transform, TransformProps, Vector3d } from \"@itwin/core-geometry\";\nimport { CategorySelectorState } from \"./CategorySelectorState\";\nimport { CoordSystem } from \"./CoordSystem\";\nimport { DisplayStyle2dState } from \"./DisplayStyleState\";\nimport { Frustum2d } from \"./Frustum2d\";\nimport { IModelApp } from \"./IModelApp\";\nimport { IModelConnection } from \"./IModelConnection\";\nimport { FeatureSymbology } from \"./render/FeatureSymbology\";\nimport { GraphicBranch, GraphicBranchOptions } from \"./render/GraphicBranch\";\nimport { MockRender } from \"./render/MockRender\";\nimport { RenderGraphic } from \"./render/RenderGraphic\";\nimport { Scene } from \"./render/Scene\";\nimport { DisclosedTileTreeSet, TileGraphicType } from \"./tile/internal\";\nimport { SceneContext } from \"./ViewContext\";\nimport { OffScreenViewport, Viewport } from \"./Viewport\";\nimport { ViewRect } from \"./common/ViewRect\";\nimport { AttachToViewportArgs, ComputeDisplayTransformArgs, ExtentLimits, GetAttachmentViewportArgs, ViewState2d, ViewState3d } from \"./ViewState\";\n\n/** Strictly for testing.\n * @internal\n */\nexport interface SectionDrawingInfo {\n readonly spatialView: Id64String;\n readonly drawingToSpatialTransform: Transform;\n}\n\n/** The information required to instantiate a [[SectionAttachment]]. This information is supplied to DrawingViewState constructor via ViewStateProps.\n * The spatial view is obtained asynchronously in DrawingViewState.load(). The SectionAttachment is created in DrawingViewState.attachToViewport and\n * disposed of in DrawingViewState.detachFromViewport.\n */\nclass SectionAttachmentInfo {\n private _spatialView: Id64String | ViewState3d;\n private readonly _drawingToSpatialTransform: Transform;\n private readonly _displaySpatialView: boolean;\n\n public get spatialView(): Id64String | ViewState3d { return this._spatialView; }\n public get wantDisplayed(): boolean {\n return this._displaySpatialView || DrawingViewState.alwaysDisplaySpatialView;\n }\n\n private constructor(spatialView: Id64String | ViewState3d, drawingToSpatialTransform: Transform, displaySpatialView: boolean) {\n this._spatialView = spatialView;\n this._drawingToSpatialTransform = drawingToSpatialTransform;\n this._displaySpatialView = displaySpatialView;\n }\n\n public static fromJSON(props?: SectionDrawingViewProps): SectionAttachmentInfo {\n if (!props)\n return new SectionAttachmentInfo(Id64.invalid, Transform.createIdentity(), false);\n\n return new SectionAttachmentInfo(props.spatialView, Transform.fromJSON(props.drawingToSpatialTransform), true === props.displaySpatialView);\n }\n\n public toJSON(): SectionDrawingViewProps | undefined {\n if (\"string\" === typeof this._spatialView && !Id64.isValidId64(this._spatialView))\n return undefined;\n\n return {\n spatialView: (this._spatialView instanceof ViewState3d) ? this._spatialView.id : this._spatialView,\n drawingToSpatialTransform: this._drawingToSpatialTransform.isIdentity ? undefined : this._drawingToSpatialTransform.toJSON(),\n displaySpatialView: this._displaySpatialView,\n };\n }\n\n public clone(iModel: IModelConnection): SectionAttachmentInfo {\n let spatialView = this._spatialView;\n if (spatialView instanceof ViewState3d)\n spatialView = spatialView.clone(iModel);\n\n return new SectionAttachmentInfo(spatialView, this._drawingToSpatialTransform, this._displaySpatialView);\n }\n\n public preload(options: HydrateViewStateRequestProps): void {\n if (!this.wantDisplayed)\n return;\n\n if (this._spatialView instanceof ViewState3d)\n return;\n\n if (!Id64.isValidId64(this._spatialView))\n return;\n\n options.spatialViewId = this._spatialView;\n options.viewStateLoadProps = {\n displayStyle: {\n omitScheduleScriptElementIds: !IModelApp.tileAdmin.enableFrontendScheduleScripts,\n compressExcludedElementIds: true,\n },\n };\n }\n\n public async load(iModel: IModelConnection): Promise<void> {\n if (!this.wantDisplayed)\n return;\n\n if (this._spatialView instanceof ViewState3d)\n return;\n\n if (!Id64.isValidId64(this._spatialView))\n return;\n\n const spatialView = await iModel.views.load(this._spatialView);\n if (spatialView instanceof ViewState3d)\n this._spatialView = spatialView;\n }\n\n public async postload(options: HydrateViewStateResponseProps, iModel: IModelConnection): Promise<void> {\n let spatialView;\n if (options.spatialViewProps) {\n spatialView = await iModel.views.convertViewStatePropsToViewState(options.spatialViewProps);\n }\n\n if (spatialView instanceof ViewState3d)\n this._spatialView = spatialView;\n }\n\n public createAttachment(toSheet: Transform | undefined): SectionAttachment | undefined {\n if (!this.wantDisplayed || !(this._spatialView instanceof ViewState3d))\n return undefined;\n\n const spatialToDrawing = this._drawingToSpatialTransform.inverse();\n return spatialToDrawing ? new SectionAttachment(this._spatialView, spatialToDrawing, this._drawingToSpatialTransform, toSheet) : undefined;\n }\n\n public get sectionDrawingInfo(): SectionDrawingInfo {\n return {\n drawingToSpatialTransform: this._drawingToSpatialTransform,\n spatialView: this._spatialView instanceof ViewState3d ? this._spatialView.id : this._spatialView,\n };\n }\n}\n\n/** A mostly no-op [[RenderTarget]] for a [[SectionAttachment]]. It allocates no webgl resources. */\nclass SectionTarget extends MockRender.OffScreenTarget {\n private readonly _attachment: SectionAttachment;\n\n public constructor(attachment: SectionAttachment) {\n super(IModelApp.renderSystem, new ViewRect(0, 0, 1, 1));\n this._attachment = attachment;\n }\n\n public override changeScene(scene: Scene): void {\n this._attachment.scene = scene;\n }\n\n public override overrideFeatureSymbology(ovrs: FeatureSymbology.Overrides): void {\n this._attachment.symbologyOverrides = ovrs;\n }\n}\n\n/** Draws the contents of an orthographic [[ViewState3d]] directly into a [[DrawingViewState]], if the associated [SectionDrawing]($backend)\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\n * add the resultant graphics to the drawing view's scene. The attachment is created in DrawingViewState.attachToViewport and disposed of in\n * DrawingViewState.detachFromViewport.\n */\nclass SectionAttachment {\n private readonly _viewFlagOverrides: ViewFlagOverrides;\n public readonly toDrawing: Transform;\n private readonly _fromDrawing: Transform;\n private readonly _viewRect = new ViewRect(0, 0, 1, 1);\n private readonly _originalFrustum = new Frustum();\n private readonly _drawingExtents: Vector3d;\n public readonly viewport: OffScreenViewport;\n private readonly _branchOptions: GraphicBranchOptions;\n public scene?: Scene;\n public symbologyOverrides: FeatureSymbology.Overrides;\n\n public get view(): ViewState3d {\n assert(this.viewport.view instanceof ViewState3d);\n return this.viewport.view;\n }\n\n public get zDepth(): number {\n return this._drawingExtents.z;\n }\n\n public get drawingRange() {\n const frustum3d = this._originalFrustum.transformBy(this.toDrawing);\n return frustum3d.toRange();\n }\n\n public constructor(view: ViewState3d, toDrawing: Transform, fromDrawing: Transform, toSheet: Transform | undefined) {\n // Save the input for clone(). Attach a copy to the viewport.\n this.toDrawing = toDrawing;\n this._fromDrawing = fromDrawing;\n\n this.viewport = OffScreenViewport.createViewport(view, new SectionTarget(this), true);\n\n this.symbologyOverrides = new FeatureSymbology.Overrides(view);\n let clipVolume;\n let clip = this.view.getViewClip();\n if (clip) {\n clip = clip.clone();\n const clipTransform = toSheet ? toSheet.multiplyTransformTransform(this.toDrawing) : this.toDrawing;\n clip.transformInPlace(clipTransform);\n clipVolume = IModelApp.renderSystem.createClipVolume(clip);\n }\n\n this._branchOptions = {\n clipVolume,\n hline: view.getDisplayStyle3d().settings.hiddenLineSettings,\n inSectionDrawingAttachment: true,\n frustum: {\n is3d: true,\n scale: { x: 1, y: 1 },\n },\n };\n\n this._viewFlagOverrides = { ...view.viewFlags, lighting: false, shadows: false };\n\n // Save off the original frustum (potentially adjusted by viewport).\n this.viewport.setupFromView();\n this.viewport.viewingSpace.getFrustum(CoordSystem.World, true, this._originalFrustum);\n\n const drawingFrustum = this._originalFrustum.transformBy(this.toDrawing);\n const drawingRange = drawingFrustum.toRange();\n this._drawingExtents = drawingRange.diagonal();\n this._drawingExtents.z = Math.abs(this._drawingExtents.z);\n }\n\n public dispose(): void {\n this.viewport.dispose();\n }\n\n public addToScene(context: SceneContext): void {\n if (context.viewport.freezeScene)\n return;\n\n const pixelSize = context.viewport.getPixelSizeAtPoint();\n if (0 === pixelSize)\n return;\n\n // Adjust offscreen viewport's frustum based on intersection with drawing view frustum.\n const frustum3d = this._originalFrustum.transformBy(this.toDrawing);\n const frustumRange3d = frustum3d.toRange();\n const frustum2d = context.viewport.getWorldFrustum();\n const frustumRange2d = frustum2d.toRange();\n const intersect = frustumRange3d.intersect(frustumRange2d);\n if (intersect.isNull)\n return;\n\n frustum3d.initFromRange(intersect);\n frustum3d.transformBy(this._fromDrawing, frustum3d);\n this.viewport.setupViewFromFrustum(frustum3d);\n\n // Adjust view rect based on size of attachment on screen so tiles of appropriate LOD are selected.\n const width = this._drawingExtents.x * intersect.xLength() / frustumRange3d.xLength();\n const height = this._drawingExtents.y * intersect.yLength() / frustumRange3d.yLength();\n this._viewRect.width = Math.max(1, Math.round(width / pixelSize));\n this._viewRect.height = Math.max(1, Math.round(height / pixelSize));\n this.viewport.setRect(this._viewRect);\n\n // Propagate settings from drawing viewport.\n this.viewport.debugBoundingBoxes = context.viewport.debugBoundingBoxes;\n this.viewport.setTileSizeModifier(context.viewport.tileSizeModifier);\n\n // Create the scene.\n this.viewport.renderFrame();\n const scene = this.scene;\n if (!scene)\n return;\n\n // Extract graphics and insert into drawing's scene context.\n const outputGraphics = (source: RenderGraphic[]) => {\n if (0 === source.length)\n return;\n\n const graphics = new GraphicBranch();\n graphics.setViewFlagOverrides(this._viewFlagOverrides);\n graphics.symbologyOverrides = this.symbologyOverrides;\n\n for (const graphic of source)\n graphics.entries.push(graphic);\n\n const branch = context.createGraphicBranch(graphics, this.toDrawing, this._branchOptions);\n context.outputGraphic(branch);\n };\n\n outputGraphics(scene.foreground);\n context.withGraphicType(TileGraphicType.BackgroundMap, () => outputGraphics(scene.background));\n context.withGraphicType(TileGraphicType.Overlay, () => outputGraphics(scene.overlay));\n\n // Report tile statistics to drawing viewport.\n const tileAdmin = IModelApp.tileAdmin;\n const selectedAndReady = tileAdmin.getTilesForUser(this.viewport);\n const requested = tileAdmin.getRequestsForUser(this.viewport);\n tileAdmin.addExternalTilesForUser(context.viewport, {\n requested: requested?.size ?? 0,\n selected: selectedAndReady?.selected.size ?? 0,\n ready: selectedAndReady?.ready.size ?? 0,\n });\n }\n}\n\n/** A view of a [DrawingModel]($backend)\n * @public\n * @extensions\n */\nexport class DrawingViewState extends ViewState2d {\n public static override get className() { return \"DrawingViewDefinition\"; }\n\n /** Exposed strictly for testing and debugging. Indicates that when loading the view, the spatial view should be displayed even\n * if `SectionDrawing.displaySpatialView` is not `true`.\n * @internal\n */\n public static alwaysDisplaySpatialView = false;\n\n /** Exposed strictly for testing and debugging. Indicates that the 2d graphics should not be displayed.\n * @internal\n */\n public static hideDrawingGraphics = false;\n\n private readonly _viewedExtents: AxisAlignedBox3d;\n private _attachmentInfo: SectionAttachmentInfo;\n private _attachment?: SectionAttachment;\n\n /** Strictly for testing. @internal */\n public get sectionDrawingProps(): SectionDrawingViewProps | undefined {\n return this._attachmentInfo.toJSON();\n }\n\n /** Strictly for testing. @internal */\n public get sectionDrawingInfo() {\n return this._attachmentInfo.sectionDrawingInfo;\n }\n\n /** Strictly for testing. @internal */\n public get attachment(): object | undefined {\n return this._attachment;\n }\n\n /** Strictly for testing. @internal */\n public get attachmentInfo(): { spatialView: Id64String | ViewState3d } {\n return this._attachmentInfo;\n }\n\n public constructor(props: ViewDefinition2dProps, iModel: IModelConnection, categories: CategorySelectorState, displayStyle: DisplayStyle2dState, extents: AxisAlignedBox3d, sectionDrawing?: SectionDrawingViewProps) {\n super(props, iModel, categories, displayStyle);\n if (categories instanceof DrawingViewState) {\n this._viewedExtents = categories._viewedExtents.clone();\n this._attachmentInfo = categories._attachmentInfo.clone(iModel);\n } else {\n this._viewedExtents = extents;\n this._attachmentInfo = SectionAttachmentInfo.fromJSON(sectionDrawing);\n }\n }\n\n /** See [[ViewState.attachToViewport]]. */\n public override attachToViewport(args: AttachToViewportArgs): void {\n super.attachToViewport(args);\n assert(undefined === this._attachment);\n this._attachment = this._attachmentInfo.createAttachment(args.drawingToSheetTransform);\n }\n\n /** See [[ViewState.detachFromViewport]]. */\n public override detachFromViewport(): void {\n super.detachFromViewport();\n this._attachment = dispose(this._attachment);\n }\n\n public override async changeViewedModel(modelId: Id64String): Promise<void> {\n await super.changeViewedModel(modelId);\n const props = await this.querySectionDrawingProps();\n this._attachmentInfo = SectionAttachmentInfo.fromJSON(props);\n\n // super.changeViewedModel() throws if attached to viewport, and attachment only allocated while attached to viewport\n assert(undefined === this._attachment);\n }\n\n private async querySectionDrawingProps(): Promise<SectionDrawingViewProps> {\n let spatialView = Id64.invalid;\n let drawingToSpatialTransform: TransformProps | undefined;\n let displaySpatialView = false;\n try {\n const ecsql = `\n SELECT spatialView,\n json_extract(jsonProperties, '$.drawingToSpatialTransform') as drawingToSpatialTransform,\n CAST(json_extract(jsonProperties, '$.displaySpatialView') as BOOLEAN) as displaySpatialView\n FROM bis.SectionDrawing\n WHERE ECInstanceId=${this.baseModelId}`;\n\n for await (const row of this.iModel.createQueryReader(ecsql, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n spatialView = Id64.fromJSON(row.spatialView?.id);\n displaySpatialView = !!row.displaySpatialView;\n try {\n drawingToSpatialTransform = JSON.parse(row.drawingToSpatialTransform);\n } catch {\n // We'll use identity transform.\n }\n\n break;\n }\n } catch {\n // The version of BisCore ECSchema in the iModel is probably too old to contain the SectionDrawing ECClass.\n }\n\n return { spatialView, displaySpatialView, drawingToSpatialTransform };\n }\n\n /** @internal */\n protected override preload(hydrateRequest: HydrateViewStateRequestProps): void {\n assert(!this.isAttachedToViewport);\n super.preload(hydrateRequest);\n this._attachmentInfo.preload(hydrateRequest);\n }\n\n /** @internal */\n protected override async postload(hydrateResponse: HydrateViewStateResponseProps): Promise<void> {\n const promises = [];\n promises.push(super.postload(hydrateResponse));\n promises.push(this._attachmentInfo.postload(hydrateResponse, this.iModel));\n await Promise.all(promises);\n }\n\n public static override createFromProps(props: ViewStateProps, iModel: IModelConnection): DrawingViewState {\n const cat = new CategorySelectorState(props.categorySelectorProps, iModel);\n const displayStyleState = new DisplayStyle2dState(props.displayStyleProps, iModel);\n const extents = props.modelExtents ? Range3d.fromJSON(props.modelExtents) : new Range3d();\n\n // use \"new this\" so subclasses are correct\n return new this(props.viewDefinitionProps as ViewDefinition2dProps, iModel, cat, displayStyleState, extents, props.sectionDrawing);\n }\n\n public override toProps(): ViewStateProps {\n const props = super.toProps();\n props.modelExtents = this._viewedExtents.toJSON();\n props.sectionDrawing = this._attachmentInfo.toJSON();\n return props;\n }\n\n public getViewedExtents(): AxisAlignedBox3d {\n const extents = this._viewedExtents.clone();\n if (this._attachment) {\n extents.extendRange(this._attachment.drawingRange);\n }\n\n return extents;\n }\n\n public get defaultExtentLimits(): ExtentLimits {\n return {\n min: Constant.oneMillimeter,\n max: 3 * Constant.diameterOfEarth,\n };\n }\n\n public override isDrawingView(): this is DrawingViewState { return true; }\n\n /** See [[ViewState.getOrigin]]. */\n public override getOrigin() {\n const origin = super.getOrigin();\n if (this._attachment)\n origin.z = -this._attachment.zDepth;\n\n return origin;\n }\n\n /** See [[ViewState.getExtents]]. */\n public override getExtents() {\n const extents = super.getExtents();\n if (this._attachment)\n extents.z = this._attachment.zDepth + Frustum2d.minimumZDistance;\n\n return extents;\n }\n\n /** @internal */\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\n super.discloseTileTrees(trees);\n if (this._attachment)\n trees.disclose(this._attachment.viewport);\n }\n\n /** @internal */\n public override createScene(context: SceneContext): void {\n if (!DrawingViewState.hideDrawingGraphics)\n super.createScene(context);\n\n if (this._attachment)\n this._attachment.addToScene(context);\n }\n\n public override get areAllTileTreesLoaded(): boolean {\n return super.areAllTileTreesLoaded && (!this._attachment || this._attachment.view.areAllTileTreesLoaded);\n }\n\n /** @internal */\n public override get secondaryViewports() {\n return this._attachment ? [this._attachment.viewport] : super.secondaryViewports;\n }\n\n /** @internal */\n public override getAttachmentViewport(args: GetAttachmentViewportArgs): Viewport | undefined {\n const attach = args.inSectionDrawingAttachment ? this._attachment : undefined;\n return attach?.viewport;\n }\n\n /** @beta */\n public override computeDisplayTransform(args: ComputeDisplayTransformArgs): Transform | undefined {\n // ###TODO we're currently ignoring model and element Id in args, assuming irrelevant for drawings.\n // Should probably call super or have super call us.\n const attach = args.inSectionDrawingAttachment ? this._attachment : undefined;\n return attach?.toDrawing.clone(args.output);\n }\n}\n"]}
1
+ {"version":3,"file":"DrawingViewState.js","sourceRoot":"","sources":["../../src/DrawingViewState.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Views\n */\n\nimport { assert, dispose, Id64, Id64String } from \"@itwin/core-bentley\";\nimport {\n AxisAlignedBox3d, Frustum, HydrateViewStateRequestProps, HydrateViewStateResponseProps, QueryRowFormat, SectionDrawingViewProps, ViewDefinition2dProps, ViewFlagOverrides, ViewStateProps,\n} from \"@itwin/core-common\";\nimport { Constant, Range3d, Transform, TransformProps, Vector3d } from \"@itwin/core-geometry\";\nimport { CategorySelectorState } from \"./CategorySelectorState\";\nimport { CoordSystem } from \"./CoordSystem\";\nimport { DisplayStyle2dState } from \"./DisplayStyleState\";\nimport { Frustum2d } from \"./Frustum2d\";\nimport { IModelApp } from \"./IModelApp\";\nimport { IModelConnection } from \"./IModelConnection\";\nimport { FeatureSymbology } from \"./render/FeatureSymbology\";\nimport { GraphicBranch, GraphicBranchOptions } from \"./render/GraphicBranch\";\nimport { MockRender } from \"./render/MockRender\";\nimport { RenderGraphic } from \"./render/RenderGraphic\";\nimport { Scene } from \"./render/Scene\";\nimport { DisclosedTileTreeSet, TileGraphicType } from \"./tile/internal\";\nimport { SceneContext } from \"./ViewContext\";\nimport { OffScreenViewport, Viewport } from \"./Viewport\";\nimport { ViewRect } from \"./common/ViewRect\";\nimport { AttachToViewportArgs, ComputeDisplayTransformArgs, ExtentLimits, GetAttachmentViewportArgs, ViewState2d, ViewState3d } from \"./ViewState\";\n\n/** Strictly for testing.\n * @internal\n */\nexport interface SectionDrawingInfo {\n readonly spatialView: Id64String;\n readonly drawingToSpatialTransform: Transform;\n}\n\n/** The information required to instantiate a [[SectionAttachment]]. This information is supplied to DrawingViewState constructor via ViewStateProps.\n * The spatial view is obtained asynchronously in DrawingViewState.load(). The SectionAttachment is created in DrawingViewState.attachToViewport and\n * disposed of in DrawingViewState.detachFromViewport.\n */\nclass SectionAttachmentInfo {\n private _spatialView: Id64String | ViewState3d;\n private readonly _drawingToSpatialTransform: Transform;\n private readonly _displaySpatialView: boolean;\n\n public get spatialView(): Id64String | ViewState3d { return this._spatialView; }\n public get wantDisplayed(): boolean {\n return this._displaySpatialView || DrawingViewState.alwaysDisplaySpatialView;\n }\n\n private constructor(spatialView: Id64String | ViewState3d, drawingToSpatialTransform: Transform, displaySpatialView: boolean) {\n this._spatialView = spatialView;\n this._drawingToSpatialTransform = drawingToSpatialTransform;\n this._displaySpatialView = displaySpatialView;\n }\n\n public static fromJSON(props?: SectionDrawingViewProps): SectionAttachmentInfo {\n if (!props)\n return new SectionAttachmentInfo(Id64.invalid, Transform.createIdentity(), false);\n\n return new SectionAttachmentInfo(props.spatialView, Transform.fromJSON(props.drawingToSpatialTransform), true === props.displaySpatialView);\n }\n\n public toJSON(): SectionDrawingViewProps | undefined {\n if (\"string\" === typeof this._spatialView && !Id64.isValidId64(this._spatialView))\n return undefined;\n\n return {\n spatialView: (this._spatialView instanceof ViewState3d) ? this._spatialView.id : this._spatialView,\n drawingToSpatialTransform: this._drawingToSpatialTransform.isIdentity ? undefined : this._drawingToSpatialTransform.toJSON(),\n displaySpatialView: this._displaySpatialView,\n };\n }\n\n public clone(iModel: IModelConnection): SectionAttachmentInfo {\n let spatialView = this._spatialView;\n if (spatialView instanceof ViewState3d)\n spatialView = spatialView.clone(iModel);\n\n return new SectionAttachmentInfo(spatialView, this._drawingToSpatialTransform, this._displaySpatialView);\n }\n\n public preload(options: HydrateViewStateRequestProps): void {\n if (!this.wantDisplayed)\n return;\n\n if (this._spatialView instanceof ViewState3d)\n return;\n\n if (!Id64.isValidId64(this._spatialView))\n return;\n\n options.spatialViewId = this._spatialView;\n options.viewStateLoadProps = {\n displayStyle: {\n omitScheduleScriptElementIds: !IModelApp.tileAdmin.enableFrontendScheduleScripts,\n compressExcludedElementIds: true,\n },\n };\n }\n\n public async load(iModel: IModelConnection): Promise<void> {\n if (!this.wantDisplayed)\n return;\n\n if (this._spatialView instanceof ViewState3d)\n return;\n\n if (!Id64.isValidId64(this._spatialView))\n return;\n\n const spatialView = await iModel.views.load(this._spatialView);\n if (spatialView instanceof ViewState3d)\n this._spatialView = spatialView;\n }\n\n public async postload(options: HydrateViewStateResponseProps, iModel: IModelConnection): Promise<void> {\n let spatialView;\n if (options.spatialViewProps) {\n spatialView = await iModel.views.convertViewStatePropsToViewState(options.spatialViewProps);\n }\n\n if (spatialView instanceof ViewState3d)\n this._spatialView = spatialView;\n }\n\n public createAttachment(toSheet: Transform | undefined): SectionAttachment | undefined {\n if (!this.wantDisplayed || !(this._spatialView instanceof ViewState3d))\n return undefined;\n\n const spatialToDrawing = this._drawingToSpatialTransform.inverse();\n return spatialToDrawing ? new SectionAttachment(this._spatialView, spatialToDrawing, this._drawingToSpatialTransform, toSheet) : undefined;\n }\n\n public get sectionDrawingInfo(): SectionDrawingInfo {\n return {\n drawingToSpatialTransform: this._drawingToSpatialTransform,\n spatialView: this._spatialView instanceof ViewState3d ? this._spatialView.id : this._spatialView,\n };\n }\n}\n\n/** A mostly no-op [[RenderTarget]] for a [[SectionAttachment]]. It allocates no webgl resources. */\nclass SectionTarget extends MockRender.OffScreenTarget {\n private readonly _attachment: SectionAttachment;\n\n public constructor(attachment: SectionAttachment) {\n super(IModelApp.renderSystem, new ViewRect(0, 0, 1, 1));\n this._attachment = attachment;\n }\n\n public override changeScene(scene: Scene): void {\n this._attachment.scene = scene;\n }\n\n public override overrideFeatureSymbology(ovrs: FeatureSymbology.Overrides): void {\n this._attachment.symbologyOverrides = ovrs;\n }\n}\n\n/** Draws the contents of an orthographic [[ViewState3d]] directly into a [[DrawingViewState]], if the associated [SectionDrawing]($backend)\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\n * add the resultant graphics to the drawing view's scene. The attachment is created in DrawingViewState.attachToViewport and disposed of in\n * DrawingViewState.detachFromViewport.\n */\nclass SectionAttachment {\n private readonly _viewFlagOverrides: ViewFlagOverrides;\n public readonly toDrawing: Transform;\n private readonly _fromDrawing: Transform;\n private readonly _viewRect = new ViewRect(0, 0, 1, 1);\n private readonly _originalFrustum = new Frustum();\n private readonly _drawingExtents: Vector3d;\n public readonly viewport: OffScreenViewport;\n private readonly _branchOptions: GraphicBranchOptions;\n public scene?: Scene;\n public symbologyOverrides: FeatureSymbology.Overrides;\n\n public get view(): ViewState3d {\n assert(this.viewport.view instanceof ViewState3d);\n return this.viewport.view;\n }\n\n public get zDepth(): number {\n return this._drawingExtents.z;\n }\n\n public get drawingRange() {\n const frustum3d = this._originalFrustum.transformBy(this.toDrawing);\n return frustum3d.toRange();\n }\n\n public constructor(view: ViewState3d, toDrawing: Transform, fromDrawing: Transform, toSheet: Transform | undefined) {\n // Save the input for clone(). Attach a copy to the viewport.\n this.toDrawing = toDrawing;\n this._fromDrawing = fromDrawing;\n\n this.viewport = OffScreenViewport.createViewport(view, new SectionTarget(this), true);\n\n this.symbologyOverrides = new FeatureSymbology.Overrides(view);\n let clipVolume;\n let clip = this.view.getViewClip();\n if (clip) {\n clip = clip.clone();\n const clipTransform = toSheet ? toSheet.multiplyTransformTransform(this.toDrawing) : this.toDrawing;\n clip.transformInPlace(clipTransform);\n clipVolume = IModelApp.renderSystem.createClipVolume(clip);\n }\n\n this._branchOptions = {\n clipVolume,\n hline: view.getDisplayStyle3d().settings.hiddenLineSettings,\n inSectionDrawingAttachment: true,\n frustum: {\n is3d: true,\n scale: { x: 1, y: 1 },\n },\n };\n\n this._viewFlagOverrides = { ...view.viewFlags, lighting: false, shadows: false };\n\n // Save off the original frustum (potentially adjusted by viewport).\n this.viewport.setupFromView();\n this.viewport.viewingSpace.getFrustum(CoordSystem.World, true, this._originalFrustum);\n\n const drawingFrustum = this._originalFrustum.transformBy(this.toDrawing);\n const drawingRange = drawingFrustum.toRange();\n this._drawingExtents = drawingRange.diagonal();\n this._drawingExtents.z = Math.abs(this._drawingExtents.z);\n }\n\n public dispose(): void {\n this.viewport.dispose();\n }\n\n public addToScene(context: SceneContext): void {\n if (context.viewport.freezeScene)\n return;\n\n const pixelSize = context.viewport.getPixelSizeAtPoint();\n if (0 === pixelSize)\n return;\n\n // Adjust offscreen viewport's frustum based on intersection with drawing view frustum.\n const frustum3d = this._originalFrustum.transformBy(this.toDrawing);\n const frustumRange3d = frustum3d.toRange();\n const frustum2d = context.viewport.getWorldFrustum();\n const frustumRange2d = frustum2d.toRange();\n const intersect = frustumRange3d.intersect(frustumRange2d);\n if (intersect.isNull)\n return;\n\n frustum3d.initFromRange(intersect);\n frustum3d.transformBy(this._fromDrawing, frustum3d);\n this.viewport.setupViewFromFrustum(frustum3d);\n\n // Adjust view rect based on size of attachment on screen so tiles of appropriate LOD are selected.\n const width = this._drawingExtents.x * intersect.xLength() / frustumRange3d.xLength();\n const height = this._drawingExtents.y * intersect.yLength() / frustumRange3d.yLength();\n this._viewRect.width = Math.max(1, Math.round(width / pixelSize));\n this._viewRect.height = Math.max(1, Math.round(height / pixelSize));\n this.viewport.setRect(this._viewRect);\n\n // Propagate settings from drawing viewport.\n this.viewport.debugBoundingBoxes = context.viewport.debugBoundingBoxes;\n this.viewport.setTileSizeModifier(context.viewport.tileSizeModifier);\n\n // Create the scene.\n this.viewport.renderFrame();\n const scene = this.scene;\n if (!scene)\n return;\n\n // Extract graphics and insert into drawing's scene context.\n const outputGraphics = (source: RenderGraphic[]) => {\n if (0 === source.length)\n return;\n\n const graphics = new GraphicBranch();\n graphics.setViewFlagOverrides(this._viewFlagOverrides);\n graphics.symbologyOverrides = this.symbologyOverrides;\n\n for (const graphic of source)\n graphics.entries.push(graphic);\n\n const branch = context.createGraphicBranch(graphics, this.toDrawing, this._branchOptions);\n context.outputGraphic(branch);\n };\n\n outputGraphics(scene.foreground);\n context.withGraphicType(TileGraphicType.BackgroundMap, () => outputGraphics(scene.background));\n context.withGraphicType(TileGraphicType.Overlay, () => outputGraphics(scene.overlay));\n\n // Report tile statistics to drawing viewport.\n const tileAdmin = IModelApp.tileAdmin;\n const selectedAndReady = tileAdmin.getTilesForUser(this.viewport);\n const requested = tileAdmin.getRequestsForUser(this.viewport);\n tileAdmin.addExternalTilesForUser(context.viewport, {\n requested: requested?.size ?? 0,\n selected: selectedAndReady?.selected.size ?? 0,\n ready: selectedAndReady?.ready.size ?? 0,\n });\n }\n}\n\n/** A view of a [DrawingModel]($backend)\n * @public\n * @extensions\n */\nexport class DrawingViewState extends ViewState2d {\n public static override get className() { return \"DrawingViewDefinition\"; }\n\n /** Exposed strictly for testing and debugging. Indicates that when loading the view, the spatial view should be displayed even\n * if `SectionDrawing.displaySpatialView` is not `true`.\n * @internal\n */\n public static alwaysDisplaySpatialView = false;\n\n /** Exposed strictly for testing and debugging. Indicates that the 2d graphics should not be displayed.\n * @internal\n */\n public static hideDrawingGraphics = false;\n\n private readonly _viewedExtents: AxisAlignedBox3d;\n private _attachmentInfo: SectionAttachmentInfo;\n private _attachment?: SectionAttachment;\n\n /** Strictly for testing. @internal */\n public get sectionDrawingProps(): SectionDrawingViewProps | undefined {\n return this._attachmentInfo.toJSON();\n }\n\n /** Strictly for testing. @internal */\n public get sectionDrawingInfo() {\n return this._attachmentInfo.sectionDrawingInfo;\n }\n\n /** Strictly for testing. @internal */\n public get attachment(): object | undefined {\n return this._attachment;\n }\n\n /** Strictly for testing. @internal */\n public get attachmentInfo(): { spatialView: Id64String | ViewState3d } {\n return this._attachmentInfo;\n }\n\n public constructor(props: ViewDefinition2dProps, iModel: IModelConnection, categories: CategorySelectorState, displayStyle: DisplayStyle2dState, extents: AxisAlignedBox3d, sectionDrawing?: SectionDrawingViewProps) {\n super(props, iModel, categories, displayStyle);\n if (categories instanceof DrawingViewState) {\n this._viewedExtents = categories._viewedExtents.clone();\n this._attachmentInfo = categories._attachmentInfo.clone(iModel);\n } else {\n this._viewedExtents = extents;\n this._attachmentInfo = SectionAttachmentInfo.fromJSON(sectionDrawing);\n }\n }\n\n /** See [[ViewState.attachToViewport]]. */\n public override attachToViewport(args: AttachToViewportArgs): void {\n super.attachToViewport(args);\n assert(undefined === this._attachment);\n this._attachment = this._attachmentInfo.createAttachment(args.drawingToSheetTransform);\n }\n\n /** See [[ViewState.detachFromViewport]]. */\n public override detachFromViewport(): void {\n super.detachFromViewport();\n this._attachment = dispose(this._attachment);\n }\n\n public override async changeViewedModel(modelId: Id64String): Promise<void> {\n await super.changeViewedModel(modelId);\n const props = await this.querySectionDrawingProps();\n this._attachmentInfo = SectionAttachmentInfo.fromJSON(props);\n\n // super.changeViewedModel() throws if attached to viewport, and attachment only allocated while attached to viewport\n assert(undefined === this._attachment);\n }\n\n private async querySectionDrawingProps(): Promise<SectionDrawingViewProps> {\n let spatialView = Id64.invalid;\n let drawingToSpatialTransform: TransformProps | undefined;\n let displaySpatialView = false;\n try {\n const ecsql = `\n SELECT spatialView,\n json_extract(jsonProperties, '$.drawingToSpatialTransform') as drawingToSpatialTransform,\n CAST(json_extract(jsonProperties, '$.displaySpatialView') as BOOLEAN) as displaySpatialView\n FROM bis.SectionDrawing\n WHERE ECInstanceId=${this.baseModelId}`;\n\n for await (const row of this.iModel.createQueryReader(ecsql, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n spatialView = Id64.fromJSON(row.spatialView?.id);\n displaySpatialView = !!row.displaySpatialView;\n try {\n drawingToSpatialTransform = JSON.parse(row.drawingToSpatialTransform);\n } catch {\n // We'll use identity transform.\n }\n\n break;\n }\n } catch {\n // The version of BisCore ECSchema in the iModel is probably too old to contain the SectionDrawing ECClass.\n }\n\n return { spatialView, displaySpatialView, drawingToSpatialTransform };\n }\n\n /** @internal */\n protected override preload(hydrateRequest: HydrateViewStateRequestProps): void {\n assert(!this.isAttachedToViewport);\n super.preload(hydrateRequest);\n this._attachmentInfo.preload(hydrateRequest);\n }\n\n /** @internal */\n protected override async postload(hydrateResponse: HydrateViewStateResponseProps): Promise<void> {\n const promises = [];\n promises.push(super.postload(hydrateResponse));\n promises.push(this._attachmentInfo.postload(hydrateResponse, this.iModel));\n await Promise.all(promises);\n }\n\n public static override createFromProps(props: ViewStateProps, iModel: IModelConnection): DrawingViewState {\n const cat = new CategorySelectorState(props.categorySelectorProps, iModel);\n const displayStyleState = new DisplayStyle2dState(props.displayStyleProps, iModel);\n const extents = props.modelExtents ? Range3d.fromJSON(props.modelExtents) : new Range3d();\n\n // use \"new this\" so subclasses are correct\n return new this(props.viewDefinitionProps as ViewDefinition2dProps, iModel, cat, displayStyleState, extents, props.sectionDrawing);\n }\n\n public override toProps(): ViewStateProps {\n const props = super.toProps();\n props.modelExtents = this._viewedExtents.toJSON();\n props.sectionDrawing = this._attachmentInfo.toJSON();\n return props;\n }\n\n public getViewedExtents(): AxisAlignedBox3d {\n const extents = this._viewedExtents.clone();\n if (this._attachment) {\n extents.extendRange(this._attachment.drawingRange);\n }\n\n return extents;\n }\n\n public get defaultExtentLimits(): ExtentLimits {\n return {\n min: Constant.oneMillimeter,\n max: 3 * Constant.diameterOfEarth,\n };\n }\n\n public override isDrawingView(): this is DrawingViewState { return true; }\n\n /** See [[ViewState.getOrigin]]. */\n public override getOrigin() {\n const origin = super.getOrigin();\n if (this._attachment)\n origin.z = -this._attachment.zDepth;\n\n return origin;\n }\n\n /** See [[ViewState.getExtents]]. */\n public override getExtents() {\n const extents = super.getExtents();\n if (this._attachment)\n extents.z = this._attachment.zDepth + Frustum2d.minimumZDistance;\n\n return extents;\n }\n\n /** @internal */\n public override discloseTileTrees(trees: DisclosedTileTreeSet): void {\n super.discloseTileTrees(trees);\n if (this._attachment)\n trees.disclose(this._attachment.viewport);\n }\n\n /** @internal */\n public override createScene(context: SceneContext): void {\n if (!DrawingViewState.hideDrawingGraphics)\n super.createScene(context);\n\n if (this._attachment)\n this._attachment.addToScene(context);\n }\n\n public override get areAllTileTreesLoaded(): boolean {\n return super.areAllTileTreesLoaded && (!this._attachment || this._attachment.view.areAllTileTreesLoaded);\n }\n\n /** @internal */\n public override get secondaryViewports() {\n return this._attachment ? [this._attachment.viewport] : super.secondaryViewports;\n }\n\n /** @internal */\n public override getAttachmentViewport(args: GetAttachmentViewportArgs): Viewport | undefined {\n const attach = args.inSectionDrawingAttachment ? this._attachment : undefined;\n return attach?.viewport;\n }\n\n /** @beta */\n public override computeDisplayTransform(args: ComputeDisplayTransformArgs): Transform | undefined {\n // ###TODO we're currently ignoring model and element Id in args, assuming irrelevant for drawings.\n // Should probably call super or have super call us.\n const attach = args.inSectionDrawingAttachment ? this._attachment : undefined;\n return attach?.toDrawing.clone(args.output);\n }\n}\n"]}
@@ -47,6 +47,10 @@ class ModelChanges extends core_bentley_1.SortedArray {
47
47
  */
48
48
  class GraphicalEditingScope extends BriefcaseTxns_1.BriefcaseNotificationHandler {
49
49
  get briefcaseChannelName() { return core_common_1.ipcAppChannels.editingScope; }
50
+ /** Event raised when a new scope is created for any [[BriefcaseConnection]].
51
+ * @see [[onExiting]] and [[onExited]] for complementary events.
52
+ */
53
+ static { this.onEnter = new core_bentley_1.BeEvent(); }
50
54
  /** Don't call this directly - use BriefcaseConnection.enterEditingScope.
51
55
  * @internal
52
56
  */
@@ -174,8 +178,4 @@ class GraphicalEditingScope extends BriefcaseTxns_1.BriefcaseNotificationHandler
174
178
  }
175
179
  }
176
180
  exports.GraphicalEditingScope = GraphicalEditingScope;
177
- /** Event raised when a new scope is created for any [[BriefcaseConnection]].
178
- * @see [[onExiting]] and [[onExited]] for complementary events.
179
- */
180
- GraphicalEditingScope.onEnter = new core_bentley_1.BeEvent();
181
181
  //# sourceMappingURL=GraphicalEditingScope.js.map