@itwin/core-frontend 4.1.0-dev.13 → 4.1.0-dev.14

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 (847) hide show
  1. package/lib/cjs/AccuDraw.js.map +1 -1
  2. package/lib/cjs/AccuSnap.js.map +1 -1
  3. package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
  4. package/lib/cjs/ApproximateTerrainHeightsProps.js.map +1 -1
  5. package/lib/cjs/AuxCoordSys.js.map +1 -1
  6. package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
  7. package/lib/cjs/BingLocation.js.map +1 -1
  8. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  9. package/lib/cjs/BriefcaseTxns.js.map +1 -1
  10. package/lib/cjs/CategorySelectorState.js.map +1 -1
  11. package/lib/cjs/ChangeFlags.js.map +1 -1
  12. package/lib/cjs/CheckpointConnection.js.map +1 -1
  13. package/lib/cjs/CoordSystem.js.map +1 -1
  14. package/lib/cjs/DecorationsCache.js.map +1 -1
  15. package/lib/cjs/DevTools.js.map +1 -1
  16. package/lib/cjs/DisplayStyleState.js.map +1 -1
  17. package/lib/cjs/DrawingViewState.js +5 -5
  18. package/lib/cjs/DrawingViewState.js.map +1 -1
  19. package/lib/cjs/ElementLocateManager.js.map +1 -1
  20. package/lib/cjs/EmphasizeElements.js.map +1 -1
  21. package/lib/cjs/EntityState.js.map +1 -1
  22. package/lib/cjs/EnvironmentDecorations.js.map +1 -1
  23. package/lib/cjs/FeatureOverrideProvider.js.map +1 -1
  24. package/lib/cjs/FlashSettings.js.map +1 -1
  25. package/lib/cjs/FrontendHubAccess.js.map +1 -1
  26. package/lib/cjs/Frustum2d.js.map +1 -1
  27. package/lib/cjs/FrustumAnimator.js.map +1 -1
  28. package/lib/cjs/FuzzySearch.js.map +1 -1
  29. package/lib/cjs/GeoServices.js.map +1 -1
  30. package/lib/cjs/GlobeAnimator.js.map +1 -1
  31. package/lib/cjs/GraphicalEditingScope.js.map +1 -1
  32. package/lib/cjs/HitDetail.js.map +1 -1
  33. package/lib/cjs/IModelApp.js.map +1 -1
  34. package/lib/cjs/IModelConnection.js +23 -23
  35. package/lib/cjs/IModelConnection.js.map +1 -1
  36. package/lib/cjs/IModelRoutingContext.js.map +1 -1
  37. package/lib/cjs/IModeljs-css.js +133 -133
  38. package/lib/cjs/IModeljs-css.js.map +1 -1
  39. package/lib/cjs/IpcApp.js.map +1 -1
  40. package/lib/cjs/LinePlaneIntersect.js.map +1 -1
  41. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  42. package/lib/cjs/MarginPercent.js.map +1 -1
  43. package/lib/cjs/Marker.js.map +1 -1
  44. package/lib/cjs/ModelSelectorState.js.map +1 -1
  45. package/lib/cjs/NativeApp.js.map +1 -1
  46. package/lib/cjs/NativeAppLogger.js.map +1 -1
  47. package/lib/cjs/NoRenderApp.js.map +1 -1
  48. package/lib/cjs/NotificationManager.js.map +1 -1
  49. package/lib/cjs/PerModelCategoryVisibility.js.map +1 -1
  50. package/lib/cjs/PlanarClipMaskState.js.map +1 -1
  51. package/lib/cjs/RealityDataSource.js.map +1 -1
  52. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  53. package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
  54. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  55. package/lib/cjs/SelectionSet.js.map +1 -1
  56. package/lib/cjs/SheetViewState.js.map +1 -1
  57. package/lib/cjs/SpatialViewState.js.map +1 -1
  58. package/lib/cjs/Sprites.js.map +1 -1
  59. package/lib/cjs/StandardView.js.map +1 -1
  60. package/lib/cjs/SubCategoriesCache.js.map +1 -1
  61. package/lib/cjs/TentativePoint.js.map +1 -1
  62. package/lib/cjs/Tiles.js.map +1 -1
  63. package/lib/cjs/UserPreferences.js.map +1 -1
  64. package/lib/cjs/ViewAnimation.js.map +1 -1
  65. package/lib/cjs/ViewContext.js.map +1 -1
  66. package/lib/cjs/ViewCreator2d.js.map +1 -1
  67. package/lib/cjs/ViewCreator3d.js.map +1 -1
  68. package/lib/cjs/ViewGlobalLocation.js.map +1 -1
  69. package/lib/cjs/ViewManager.js.map +1 -1
  70. package/lib/cjs/ViewPose.js.map +1 -1
  71. package/lib/cjs/ViewState.js.map +1 -1
  72. package/lib/cjs/ViewStatus.js.map +1 -1
  73. package/lib/cjs/ViewingSpace.js.map +1 -1
  74. package/lib/cjs/Viewport.js.map +1 -1
  75. package/lib/cjs/ViewportSync.js.map +1 -1
  76. package/lib/cjs/common/FrontendLoggerCategory.js.map +1 -1
  77. package/lib/cjs/common/ImageUtil.js.map +1 -1
  78. package/lib/cjs/common/ViewRect.js.map +1 -1
  79. package/lib/cjs/common/WorkerProxy.js.map +1 -1
  80. package/lib/cjs/common/gltf/GltfModel.js.map +1 -1
  81. package/lib/cjs/common/gltf/GltfParser.js.map +1 -1
  82. package/lib/cjs/common/gltf/GltfSchema.js.map +1 -1
  83. package/lib/cjs/common/imdl/ImdlModel.js.map +1 -1
  84. package/lib/cjs/common/imdl/ImdlSchema.js.map +1 -1
  85. package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
  86. package/lib/cjs/common/render/AnimationNodeId.js.map +1 -1
  87. package/lib/cjs/common/render/MaterialParams.js.map +1 -1
  88. package/lib/cjs/common/render/TextureParams.js.map +1 -1
  89. package/lib/cjs/common/render/primitives/AuxChannelTable.js.map +1 -1
  90. package/lib/cjs/common/render/primitives/DisplayParams.js.map +1 -1
  91. package/lib/cjs/common/render/primitives/EdgeParams.js.map +1 -1
  92. package/lib/cjs/common/render/primitives/MeshParams.js.map +1 -1
  93. package/lib/cjs/common/render/primitives/MeshPrimitive.js.map +1 -1
  94. package/lib/cjs/common/render/primitives/PointStringParams.js.map +1 -1
  95. package/lib/cjs/common/render/primitives/PolylineParams.js.map +1 -1
  96. package/lib/cjs/common/render/primitives/SurfaceParams.js.map +1 -1
  97. package/lib/cjs/common/render/primitives/VertexIndices.js.map +1 -1
  98. package/lib/cjs/common/render/primitives/VertexTable.js.map +1 -1
  99. package/lib/cjs/common/render/primitives/VertexTableSplitter.js.map +1 -1
  100. package/lib/cjs/core-frontend.js.map +1 -1
  101. package/lib/cjs/extension/Extension.js.map +1 -1
  102. package/lib/cjs/extension/ExtensionAdmin.js.map +1 -1
  103. package/lib/cjs/extension/ExtensionHost.js.map +1 -1
  104. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  105. package/lib/cjs/extension/providers/ExtensionLoadScript.js.map +1 -1
  106. package/lib/cjs/extension/providers/LocalExtensionProvider.js.map +1 -1
  107. package/lib/cjs/extension/providers/RemoteExtensionProvider.js.map +1 -1
  108. package/lib/cjs/properties/AngleDescription.js.map +1 -1
  109. package/lib/cjs/properties/FormattedQuantityDescription.js.map +1 -1
  110. package/lib/cjs/properties/LengthDescription.js.map +1 -1
  111. package/lib/cjs/public/scripts/checkbrowser.js +24 -24
  112. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  113. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  114. package/lib/cjs/quantity-formatting/LocalUnitFormatProvider.js.map +1 -1
  115. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  116. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -1
  117. package/lib/cjs/quantity-formatting/UnitsData.js.map +1 -1
  118. package/lib/cjs/render/CanvasDecoration.js.map +1 -1
  119. package/lib/cjs/render/CreateRenderMaterialArgs.js.map +1 -1
  120. package/lib/cjs/render/CreateTextureArgs.js.map +1 -1
  121. package/lib/cjs/render/Decorations.js.map +1 -1
  122. package/lib/cjs/render/FeatureSymbology.js.map +1 -1
  123. package/lib/cjs/render/FrameStats.js.map +1 -1
  124. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  125. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  126. package/lib/cjs/render/GraphicPrimitive.js.map +1 -1
  127. package/lib/cjs/render/InstancedGraphicParams.js.map +1 -1
  128. package/lib/cjs/render/MockRender.js.map +1 -1
  129. package/lib/cjs/render/ParticleCollectionBuilder.js.map +1 -1
  130. package/lib/cjs/render/Pixel.js.map +1 -1
  131. package/lib/cjs/render/RealityMeshGraphicParams.js.map +1 -1
  132. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  133. package/lib/cjs/render/RenderClipVolume.js.map +1 -1
  134. package/lib/cjs/render/RenderGraphic.js.map +1 -1
  135. package/lib/cjs/render/RenderMemory.js.map +1 -1
  136. package/lib/cjs/render/RenderPlan.js.map +1 -1
  137. package/lib/cjs/render/RenderPlanarClassifier.js.map +1 -1
  138. package/lib/cjs/render/RenderSystem.js.map +1 -1
  139. package/lib/cjs/render/RenderTarget.js.map +1 -1
  140. package/lib/cjs/render/Scene.js.map +1 -1
  141. package/lib/cjs/render/ScreenSpaceEffectBuilder.js.map +1 -1
  142. package/lib/cjs/render/UpsampleRealityMeshParams.js.map +1 -1
  143. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  144. package/lib/cjs/render/primitives/ColorMap.js.map +1 -1
  145. package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
  146. package/lib/cjs/render/primitives/PointCloudPrimitive.js.map +1 -1
  147. package/lib/cjs/render/primitives/PointStringParams.js.map +1 -1
  148. package/lib/cjs/render/primitives/Polyface.js.map +1 -1
  149. package/lib/cjs/render/primitives/PolylineParams.js.map +1 -1
  150. package/lib/cjs/render/primitives/Primitives.js.map +1 -1
  151. package/lib/cjs/render/primitives/Strokes.js.map +1 -1
  152. package/lib/cjs/render/primitives/VertexKey.js.map +1 -1
  153. package/lib/cjs/render/primitives/VertexTableBuilder.js.map +1 -1
  154. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  155. package/lib/cjs/render/primitives/geometry/GeometryList.js.map +1 -1
  156. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  157. package/lib/cjs/render/primitives/geometry/GeometryPrimitives.js.map +1 -1
  158. package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
  159. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  160. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  161. package/lib/cjs/render/webgl/AtmosphereUniforms.js.map +1 -1
  162. package/lib/cjs/render/webgl/AttributeBuffers.js.map +1 -1
  163. package/lib/cjs/render/webgl/AttributeMap.js.map +1 -1
  164. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  165. package/lib/cjs/render/webgl/BatchState.js.map +1 -1
  166. package/lib/cjs/render/webgl/BatchUniforms.js.map +1 -1
  167. package/lib/cjs/render/webgl/BranchStack.js.map +1 -1
  168. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  169. package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
  170. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  171. package/lib/cjs/render/webgl/ClipStack.js.map +1 -1
  172. package/lib/cjs/render/webgl/ClipVolume.js.map +1 -1
  173. package/lib/cjs/render/webgl/ClippingProgram.js.map +1 -1
  174. package/lib/cjs/render/webgl/ColorInfo.js.map +1 -1
  175. package/lib/cjs/render/webgl/Diagnostics.js.map +1 -1
  176. package/lib/cjs/render/webgl/Disposable.js.map +1 -1
  177. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  178. package/lib/cjs/render/webgl/EDL.js.map +1 -1
  179. package/lib/cjs/render/webgl/EdgeGeometry.js.map +1 -1
  180. package/lib/cjs/render/webgl/EdgeSettings.js.map +1 -1
  181. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  182. package/lib/cjs/render/webgl/FloatRGBA.js.map +1 -1
  183. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  184. package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
  185. package/lib/cjs/render/webgl/GL.js.map +1 -1
  186. package/lib/cjs/render/webgl/GLTimer.js.map +1 -1
  187. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  188. package/lib/cjs/render/webgl/HiliteUniforms.js.map +1 -1
  189. package/lib/cjs/render/webgl/IModelFrameLifecycle.js.map +1 -1
  190. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  191. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  192. package/lib/cjs/render/webgl/Layer.js.map +1 -1
  193. package/lib/cjs/render/webgl/LayerCommands.js.map +1 -1
  194. package/lib/cjs/render/webgl/LightingUniforms.js.map +1 -1
  195. package/lib/cjs/render/webgl/LineCode.js.map +1 -1
  196. package/lib/cjs/render/webgl/Material.js.map +1 -1
  197. package/lib/cjs/render/webgl/Matrix.js.map +1 -1
  198. package/lib/cjs/render/webgl/Mesh.js.map +1 -1
  199. package/lib/cjs/render/webgl/MeshData.js.map +1 -1
  200. package/lib/cjs/render/webgl/MeshGeometry.js.map +1 -1
  201. package/lib/cjs/render/webgl/PerformanceMetrics.js.map +1 -1
  202. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  203. package/lib/cjs/render/webgl/PlanarGrid.js.map +1 -1
  204. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  205. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  206. package/lib/cjs/render/webgl/PointString.js.map +1 -1
  207. package/lib/cjs/render/webgl/Polyline.js.map +1 -1
  208. package/lib/cjs/render/webgl/Primitive.js.map +1 -1
  209. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  210. package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
  211. package/lib/cjs/render/webgl/RenderBuffer.js.map +1 -1
  212. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  213. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  214. package/lib/cjs/render/webgl/RenderState.js.map +1 -1
  215. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  216. package/lib/cjs/render/webgl/ScratchDrawParams.js.map +1 -1
  217. package/lib/cjs/render/webgl/ScreenSpaceEffect.js.map +1 -1
  218. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  219. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  220. package/lib/cjs/render/webgl/ShadowUniforms.js.map +1 -1
  221. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  222. package/lib/cjs/render/webgl/StyleUniforms.js.map +1 -1
  223. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
  224. package/lib/cjs/render/webgl/Sync.js.map +1 -1
  225. package/lib/cjs/render/webgl/System.js.map +1 -1
  226. package/lib/cjs/render/webgl/Target.js.map +1 -1
  227. package/lib/cjs/render/webgl/TargetGraphics.js.map +1 -1
  228. package/lib/cjs/render/webgl/TargetUniforms.js.map +1 -1
  229. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  230. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  231. package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
  232. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  233. package/lib/cjs/render/webgl/TextureDrape.js.map +1 -1
  234. package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
  235. package/lib/cjs/render/webgl/ThematicUniforms.js.map +1 -1
  236. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  237. package/lib/cjs/render/webgl/VertexLUT.js.map +1 -1
  238. package/lib/cjs/render/webgl/ViewRectUniforms.js.map +1 -1
  239. package/lib/cjs/render/webgl/VisibleTileFeatures.js.map +1 -1
  240. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +154 -154
  241. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  242. package/lib/cjs/render/webgl/glsl/Animation.js +83 -83
  243. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  244. package/lib/cjs/render/webgl/glsl/Atmosphere.js +266 -266
  245. package/lib/cjs/render/webgl/glsl/Atmosphere.js.map +1 -1
  246. package/lib/cjs/render/webgl/glsl/Blur.js +37 -37
  247. package/lib/cjs/render/webgl/glsl/Blur.js.map +1 -1
  248. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +4 -4
  249. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  250. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +3 -3
  251. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  252. package/lib/cjs/render/webgl/glsl/Clipping.js +60 -60
  253. package/lib/cjs/render/webgl/glsl/Clipping.js.map +1 -1
  254. package/lib/cjs/render/webgl/glsl/Color.js +12 -12
  255. package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
  256. package/lib/cjs/render/webgl/glsl/Combine3Textures.js +7 -7
  257. package/lib/cjs/render/webgl/glsl/Combine3Textures.js.map +1 -1
  258. package/lib/cjs/render/webgl/glsl/CombineTextures.js +5 -5
  259. package/lib/cjs/render/webgl/glsl/CombineTextures.js.map +1 -1
  260. package/lib/cjs/render/webgl/glsl/Common.js +16 -16
  261. package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
  262. package/lib/cjs/render/webgl/glsl/Composite.js +71 -71
  263. package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
  264. package/lib/cjs/render/webgl/glsl/CopyColor.js +6 -6
  265. package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
  266. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +3 -3
  267. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  268. package/lib/cjs/render/webgl/glsl/CopyStencil.js +4 -4
  269. package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
  270. package/lib/cjs/render/webgl/glsl/Decode.js +65 -65
  271. package/lib/cjs/render/webgl/glsl/Decode.js.map +1 -1
  272. package/lib/cjs/render/webgl/glsl/EDL.js +103 -103
  273. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -1
  274. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +25 -25
  275. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  276. package/lib/cjs/render/webgl/glsl/Edge.js +146 -146
  277. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  278. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +232 -232
  279. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  280. package/lib/cjs/render/webgl/glsl/Fragment.js +41 -41
  281. package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
  282. package/lib/cjs/render/webgl/glsl/Instancing.js +21 -21
  283. package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
  284. package/lib/cjs/render/webgl/glsl/Lighting.js +92 -92
  285. package/lib/cjs/render/webgl/glsl/Lighting.js.map +1 -1
  286. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  287. package/lib/cjs/render/webgl/glsl/LookupTable.js +19 -19
  288. package/lib/cjs/render/webgl/glsl/LookupTable.js.map +1 -1
  289. package/lib/cjs/render/webgl/glsl/Monochrome.js +13 -13
  290. package/lib/cjs/render/webgl/glsl/Monochrome.js.map +1 -1
  291. package/lib/cjs/render/webgl/glsl/PlanarClassification.js +188 -188
  292. package/lib/cjs/render/webgl/glsl/PlanarClassification.js.map +1 -1
  293. package/lib/cjs/render/webgl/glsl/PlanarGrid.js +22 -22
  294. package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
  295. package/lib/cjs/render/webgl/glsl/PointCloud.js +28 -28
  296. package/lib/cjs/render/webgl/glsl/PointCloud.js.map +1 -1
  297. package/lib/cjs/render/webgl/glsl/PointString.js +9 -9
  298. package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
  299. package/lib/cjs/render/webgl/glsl/Polyline.js +213 -213
  300. package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
  301. package/lib/cjs/render/webgl/glsl/RealityMesh.js +83 -83
  302. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  303. package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
  304. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js +9 -9
  305. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
  306. package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
  307. package/lib/cjs/render/webgl/glsl/SkySphere.js +49 -49
  308. package/lib/cjs/render/webgl/glsl/SkySphere.js.map +1 -1
  309. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +51 -51
  310. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  311. package/lib/cjs/render/webgl/glsl/Surface.js +239 -239
  312. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  313. package/lib/cjs/render/webgl/glsl/Thematic.js +134 -134
  314. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  315. package/lib/cjs/render/webgl/glsl/Translucency.js +19 -19
  316. package/lib/cjs/render/webgl/glsl/Translucency.js.map +1 -1
  317. package/lib/cjs/render/webgl/glsl/Vertex.js +73 -73
  318. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  319. package/lib/cjs/render/webgl/glsl/Viewport.js +38 -38
  320. package/lib/cjs/render/webgl/glsl/Viewport.js.map +1 -1
  321. package/lib/cjs/render/webgl/glsl/ViewportQuad.js.map +1 -1
  322. package/lib/cjs/render/webgl/glsl/Wiremesh.js +10 -10
  323. package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -1
  324. package/lib/cjs/render-primitives.js.map +1 -1
  325. package/lib/cjs/request/Request.js.map +1 -1
  326. package/lib/cjs/tile/B3dmReader.js.map +1 -1
  327. package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
  328. package/lib/cjs/tile/CesiumAssetProvider.js.map +1 -1
  329. package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
  330. package/lib/cjs/tile/ContextShareProvider.js.map +1 -1
  331. package/lib/cjs/tile/DisclosedTileTreeSet.js.map +1 -1
  332. package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
  333. package/lib/cjs/tile/GltfReader.js.map +1 -1
  334. package/lib/cjs/tile/GraphicsCollector.js.map +1 -1
  335. package/lib/cjs/tile/I3dmReader.js.map +1 -1
  336. package/lib/cjs/tile/IModelTile.js.map +1 -1
  337. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  338. package/lib/cjs/tile/IModelTileTree.js.map +1 -1
  339. package/lib/cjs/tile/ImdlDecoder.js.map +1 -1
  340. package/lib/cjs/tile/ImdlGraphicsCreator.js.map +1 -1
  341. package/lib/cjs/tile/ImdlParser.js.map +1 -1
  342. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  343. package/lib/cjs/tile/LRUTileList.js.map +1 -1
  344. package/lib/cjs/tile/OPCFormatInterpreter.js.map +1 -1
  345. package/lib/cjs/tile/PntsReader.js.map +1 -1
  346. package/lib/cjs/tile/RealityTile.js.map +1 -1
  347. package/lib/cjs/tile/RealityTileDrawArgs.js.map +1 -1
  348. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  349. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  350. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  351. package/lib/cjs/tile/Tile.js.map +1 -1
  352. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  353. package/lib/cjs/tile/TileContent.js.map +1 -1
  354. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  355. package/lib/cjs/tile/TileGeometryCollector.js.map +1 -1
  356. package/lib/cjs/tile/TileParams.js.map +1 -1
  357. package/lib/cjs/tile/TileRequest.js.map +1 -1
  358. package/lib/cjs/tile/TileRequestChannel.js.map +1 -1
  359. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  360. package/lib/cjs/tile/TileStorage.js.map +1 -1
  361. package/lib/cjs/tile/TileTree.js.map +1 -1
  362. package/lib/cjs/tile/TileTreeOwner.js.map +1 -1
  363. package/lib/cjs/tile/TileTreeParams.js.map +1 -1
  364. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  365. package/lib/cjs/tile/TileTreeSupplier.js.map +1 -1
  366. package/lib/cjs/tile/TileUsageMarker.js.map +1 -1
  367. package/lib/cjs/tile/TileUser.js.map +1 -1
  368. package/lib/cjs/tile/TileUserSet.js.map +1 -1
  369. package/lib/cjs/tile/TiledGraphicsProvider.js.map +1 -1
  370. package/lib/cjs/tile/ViewFlagOverrides.js.map +1 -1
  371. package/lib/cjs/tile/internal.js.map +1 -1
  372. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  373. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  374. package/lib/cjs/tile/map/BingElevation.js.map +1 -1
  375. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  376. package/lib/cjs/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  377. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  378. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  379. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  380. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  381. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  382. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  383. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  384. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  385. package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
  386. package/lib/cjs/tile/map/MapFeatureInfo.js.map +1 -1
  387. package/lib/cjs/tile/map/MapLayerAuthentication.js.map +1 -1
  388. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  389. package/lib/cjs/tile/map/MapLayerImageryProvider.js +2 -2
  390. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  391. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  392. package/lib/cjs/tile/map/MapLayerTileTreeReference.js.map +1 -1
  393. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  394. package/lib/cjs/tile/map/MapTileAvailability.js.map +1 -1
  395. package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
  396. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  397. package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
  398. package/lib/cjs/tile/map/QuadId.js.map +1 -1
  399. package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
  400. package/lib/cjs/tile/map/TerrainProvider.js.map +1 -1
  401. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  402. package/lib/cjs/tile/map/WmsUtilities.js.map +1 -1
  403. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  404. package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
  405. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  406. package/lib/cjs/tools/EditManipulator.js.map +1 -1
  407. package/lib/cjs/tools/ElementSetTool.js.map +1 -1
  408. package/lib/cjs/tools/EventController.js.map +1 -1
  409. package/lib/cjs/tools/IdleTool.js.map +1 -1
  410. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  411. package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
  412. package/lib/cjs/tools/SelectTool.js.map +1 -1
  413. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  414. package/lib/cjs/tools/ToolAssistance.js.map +1 -1
  415. package/lib/cjs/tools/ToolSettings.js.map +1 -1
  416. package/lib/cjs/tools/ViewTool.js.map +1 -1
  417. package/lib/cjs/webgl.js.map +1 -1
  418. package/lib/cjs/workers/ImdlParser/Worker.js.map +1 -1
  419. package/lib/cjs/workers/ImdlParser/webpack.config.js +40 -40
  420. package/lib/cjs/workers/RegisterWorker.js.map +1 -1
  421. package/lib/esm/AccuDraw.js.map +1 -1
  422. package/lib/esm/AccuSnap.js.map +1 -1
  423. package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
  424. package/lib/esm/ApproximateTerrainHeightsProps.js.map +1 -1
  425. package/lib/esm/AuxCoordSys.js.map +1 -1
  426. package/lib/esm/BackgroundMapGeometry.js.map +1 -1
  427. package/lib/esm/BingLocation.js.map +1 -1
  428. package/lib/esm/BriefcaseConnection.js.map +1 -1
  429. package/lib/esm/BriefcaseTxns.js.map +1 -1
  430. package/lib/esm/CategorySelectorState.js.map +1 -1
  431. package/lib/esm/ChangeFlags.js.map +1 -1
  432. package/lib/esm/CheckpointConnection.js.map +1 -1
  433. package/lib/esm/CoordSystem.js.map +1 -1
  434. package/lib/esm/DecorationsCache.js.map +1 -1
  435. package/lib/esm/DevTools.js.map +1 -1
  436. package/lib/esm/DisplayStyleState.js.map +1 -1
  437. package/lib/esm/DrawingViewState.js +5 -5
  438. package/lib/esm/DrawingViewState.js.map +1 -1
  439. package/lib/esm/ElementLocateManager.js.map +1 -1
  440. package/lib/esm/EmphasizeElements.js.map +1 -1
  441. package/lib/esm/EntityState.js.map +1 -1
  442. package/lib/esm/EnvironmentDecorations.js.map +1 -1
  443. package/lib/esm/FeatureOverrideProvider.js.map +1 -1
  444. package/lib/esm/FlashSettings.js.map +1 -1
  445. package/lib/esm/FrontendHubAccess.js.map +1 -1
  446. package/lib/esm/Frustum2d.js.map +1 -1
  447. package/lib/esm/FrustumAnimator.js.map +1 -1
  448. package/lib/esm/FuzzySearch.js.map +1 -1
  449. package/lib/esm/GeoServices.js.map +1 -1
  450. package/lib/esm/GlobeAnimator.js.map +1 -1
  451. package/lib/esm/GraphicalEditingScope.js.map +1 -1
  452. package/lib/esm/HitDetail.js.map +1 -1
  453. package/lib/esm/IModelApp.js.map +1 -1
  454. package/lib/esm/IModelConnection.js +23 -23
  455. package/lib/esm/IModelConnection.js.map +1 -1
  456. package/lib/esm/IModelRoutingContext.js.map +1 -1
  457. package/lib/esm/IModeljs-css.js +133 -133
  458. package/lib/esm/IModeljs-css.js.map +1 -1
  459. package/lib/esm/IpcApp.js.map +1 -1
  460. package/lib/esm/LinePlaneIntersect.js.map +1 -1
  461. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  462. package/lib/esm/MarginPercent.js.map +1 -1
  463. package/lib/esm/Marker.js.map +1 -1
  464. package/lib/esm/ModelSelectorState.js.map +1 -1
  465. package/lib/esm/NativeApp.js.map +1 -1
  466. package/lib/esm/NativeAppLogger.js.map +1 -1
  467. package/lib/esm/NoRenderApp.js.map +1 -1
  468. package/lib/esm/NotificationManager.js.map +1 -1
  469. package/lib/esm/PerModelCategoryVisibility.js.map +1 -1
  470. package/lib/esm/PlanarClipMaskState.js.map +1 -1
  471. package/lib/esm/RealityDataSource.js.map +1 -1
  472. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  473. package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
  474. package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  475. package/lib/esm/SelectionSet.js.map +1 -1
  476. package/lib/esm/SheetViewState.js.map +1 -1
  477. package/lib/esm/SpatialViewState.js.map +1 -1
  478. package/lib/esm/Sprites.js.map +1 -1
  479. package/lib/esm/StandardView.js.map +1 -1
  480. package/lib/esm/SubCategoriesCache.js.map +1 -1
  481. package/lib/esm/TentativePoint.js.map +1 -1
  482. package/lib/esm/Tiles.js.map +1 -1
  483. package/lib/esm/UserPreferences.js.map +1 -1
  484. package/lib/esm/ViewAnimation.js.map +1 -1
  485. package/lib/esm/ViewContext.js.map +1 -1
  486. package/lib/esm/ViewCreator2d.js.map +1 -1
  487. package/lib/esm/ViewCreator3d.js.map +1 -1
  488. package/lib/esm/ViewGlobalLocation.js.map +1 -1
  489. package/lib/esm/ViewManager.js.map +1 -1
  490. package/lib/esm/ViewPose.js.map +1 -1
  491. package/lib/esm/ViewState.js.map +1 -1
  492. package/lib/esm/ViewStatus.js.map +1 -1
  493. package/lib/esm/ViewingSpace.js.map +1 -1
  494. package/lib/esm/Viewport.js.map +1 -1
  495. package/lib/esm/ViewportSync.js.map +1 -1
  496. package/lib/esm/common/FrontendLoggerCategory.js.map +1 -1
  497. package/lib/esm/common/ImageUtil.js.map +1 -1
  498. package/lib/esm/common/ViewRect.js.map +1 -1
  499. package/lib/esm/common/WorkerProxy.js.map +1 -1
  500. package/lib/esm/common/gltf/GltfModel.js.map +1 -1
  501. package/lib/esm/common/gltf/GltfParser.js.map +1 -1
  502. package/lib/esm/common/gltf/GltfSchema.js.map +1 -1
  503. package/lib/esm/common/imdl/ImdlModel.js.map +1 -1
  504. package/lib/esm/common/imdl/ImdlSchema.js.map +1 -1
  505. package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
  506. package/lib/esm/common/render/AnimationNodeId.js.map +1 -1
  507. package/lib/esm/common/render/MaterialParams.js.map +1 -1
  508. package/lib/esm/common/render/TextureParams.js.map +1 -1
  509. package/lib/esm/common/render/primitives/AuxChannelTable.js.map +1 -1
  510. package/lib/esm/common/render/primitives/DisplayParams.js.map +1 -1
  511. package/lib/esm/common/render/primitives/EdgeParams.js.map +1 -1
  512. package/lib/esm/common/render/primitives/MeshParams.js.map +1 -1
  513. package/lib/esm/common/render/primitives/MeshPrimitive.js.map +1 -1
  514. package/lib/esm/common/render/primitives/PointStringParams.js.map +1 -1
  515. package/lib/esm/common/render/primitives/PolylineParams.js.map +1 -1
  516. package/lib/esm/common/render/primitives/SurfaceParams.js.map +1 -1
  517. package/lib/esm/common/render/primitives/VertexIndices.js.map +1 -1
  518. package/lib/esm/common/render/primitives/VertexTable.js.map +1 -1
  519. package/lib/esm/common/render/primitives/VertexTableSplitter.js.map +1 -1
  520. package/lib/esm/core-frontend.js.map +1 -1
  521. package/lib/esm/extension/Extension.js.map +1 -1
  522. package/lib/esm/extension/ExtensionAdmin.js.map +1 -1
  523. package/lib/esm/extension/ExtensionHost.js.map +1 -1
  524. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  525. package/lib/esm/extension/providers/ExtensionLoadScript.js.map +1 -1
  526. package/lib/esm/extension/providers/LocalExtensionProvider.js.map +1 -1
  527. package/lib/esm/extension/providers/RemoteExtensionProvider.js.map +1 -1
  528. package/lib/esm/properties/AngleDescription.js.map +1 -1
  529. package/lib/esm/properties/FormattedQuantityDescription.js.map +1 -1
  530. package/lib/esm/properties/LengthDescription.js.map +1 -1
  531. package/lib/esm/public/scripts/checkbrowser.js +24 -24
  532. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  533. package/lib/esm/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  534. package/lib/esm/quantity-formatting/LocalUnitFormatProvider.js.map +1 -1
  535. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  536. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -1
  537. package/lib/esm/quantity-formatting/UnitsData.js.map +1 -1
  538. package/lib/esm/render/CanvasDecoration.js.map +1 -1
  539. package/lib/esm/render/CreateRenderMaterialArgs.js.map +1 -1
  540. package/lib/esm/render/CreateTextureArgs.js.map +1 -1
  541. package/lib/esm/render/Decorations.js.map +1 -1
  542. package/lib/esm/render/FeatureSymbology.js.map +1 -1
  543. package/lib/esm/render/FrameStats.js.map +1 -1
  544. package/lib/esm/render/GraphicBranch.js.map +1 -1
  545. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  546. package/lib/esm/render/GraphicPrimitive.js.map +1 -1
  547. package/lib/esm/render/InstancedGraphicParams.js.map +1 -1
  548. package/lib/esm/render/MockRender.js.map +1 -1
  549. package/lib/esm/render/ParticleCollectionBuilder.js.map +1 -1
  550. package/lib/esm/render/Pixel.js.map +1 -1
  551. package/lib/esm/render/RealityMeshGraphicParams.js.map +1 -1
  552. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  553. package/lib/esm/render/RenderClipVolume.js.map +1 -1
  554. package/lib/esm/render/RenderGraphic.js.map +1 -1
  555. package/lib/esm/render/RenderMemory.js.map +1 -1
  556. package/lib/esm/render/RenderPlan.js.map +1 -1
  557. package/lib/esm/render/RenderPlanarClassifier.js.map +1 -1
  558. package/lib/esm/render/RenderSystem.js.map +1 -1
  559. package/lib/esm/render/RenderTarget.js.map +1 -1
  560. package/lib/esm/render/Scene.js.map +1 -1
  561. package/lib/esm/render/ScreenSpaceEffectBuilder.js.map +1 -1
  562. package/lib/esm/render/UpsampleRealityMeshParams.js.map +1 -1
  563. package/lib/esm/render/VisibleFeature.js.map +1 -1
  564. package/lib/esm/render/primitives/ColorMap.js.map +1 -1
  565. package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
  566. package/lib/esm/render/primitives/PointCloudPrimitive.js.map +1 -1
  567. package/lib/esm/render/primitives/PointStringParams.js.map +1 -1
  568. package/lib/esm/render/primitives/Polyface.js.map +1 -1
  569. package/lib/esm/render/primitives/PolylineParams.js.map +1 -1
  570. package/lib/esm/render/primitives/Primitives.js.map +1 -1
  571. package/lib/esm/render/primitives/Strokes.js.map +1 -1
  572. package/lib/esm/render/primitives/VertexKey.js.map +1 -1
  573. package/lib/esm/render/primitives/VertexTableBuilder.js.map +1 -1
  574. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  575. package/lib/esm/render/primitives/geometry/GeometryList.js.map +1 -1
  576. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  577. package/lib/esm/render/primitives/geometry/GeometryPrimitives.js.map +1 -1
  578. package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
  579. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  580. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  581. package/lib/esm/render/webgl/AtmosphereUniforms.js.map +1 -1
  582. package/lib/esm/render/webgl/AttributeBuffers.js.map +1 -1
  583. package/lib/esm/render/webgl/AttributeMap.js.map +1 -1
  584. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  585. package/lib/esm/render/webgl/BatchState.js.map +1 -1
  586. package/lib/esm/render/webgl/BatchUniforms.js.map +1 -1
  587. package/lib/esm/render/webgl/BranchStack.js.map +1 -1
  588. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  589. package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
  590. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  591. package/lib/esm/render/webgl/ClipStack.js.map +1 -1
  592. package/lib/esm/render/webgl/ClipVolume.js.map +1 -1
  593. package/lib/esm/render/webgl/ClippingProgram.js.map +1 -1
  594. package/lib/esm/render/webgl/ColorInfo.js.map +1 -1
  595. package/lib/esm/render/webgl/Diagnostics.js.map +1 -1
  596. package/lib/esm/render/webgl/Disposable.js.map +1 -1
  597. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  598. package/lib/esm/render/webgl/EDL.js.map +1 -1
  599. package/lib/esm/render/webgl/EdgeGeometry.js.map +1 -1
  600. package/lib/esm/render/webgl/EdgeSettings.js.map +1 -1
  601. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  602. package/lib/esm/render/webgl/FloatRGBA.js.map +1 -1
  603. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  604. package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
  605. package/lib/esm/render/webgl/GL.js.map +1 -1
  606. package/lib/esm/render/webgl/GLTimer.js.map +1 -1
  607. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  608. package/lib/esm/render/webgl/HiliteUniforms.js.map +1 -1
  609. package/lib/esm/render/webgl/IModelFrameLifecycle.js.map +1 -1
  610. package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  611. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  612. package/lib/esm/render/webgl/Layer.js.map +1 -1
  613. package/lib/esm/render/webgl/LayerCommands.js.map +1 -1
  614. package/lib/esm/render/webgl/LightingUniforms.js.map +1 -1
  615. package/lib/esm/render/webgl/LineCode.js.map +1 -1
  616. package/lib/esm/render/webgl/Material.js.map +1 -1
  617. package/lib/esm/render/webgl/Matrix.js.map +1 -1
  618. package/lib/esm/render/webgl/Mesh.js.map +1 -1
  619. package/lib/esm/render/webgl/MeshData.js.map +1 -1
  620. package/lib/esm/render/webgl/MeshGeometry.js.map +1 -1
  621. package/lib/esm/render/webgl/PerformanceMetrics.js.map +1 -1
  622. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  623. package/lib/esm/render/webgl/PlanarGrid.js.map +1 -1
  624. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  625. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  626. package/lib/esm/render/webgl/PointString.js.map +1 -1
  627. package/lib/esm/render/webgl/Polyline.js.map +1 -1
  628. package/lib/esm/render/webgl/Primitive.js.map +1 -1
  629. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  630. package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
  631. package/lib/esm/render/webgl/RenderBuffer.js.map +1 -1
  632. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  633. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  634. package/lib/esm/render/webgl/RenderState.js.map +1 -1
  635. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  636. package/lib/esm/render/webgl/ScratchDrawParams.js.map +1 -1
  637. package/lib/esm/render/webgl/ScreenSpaceEffect.js.map +1 -1
  638. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  639. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  640. package/lib/esm/render/webgl/ShadowUniforms.js.map +1 -1
  641. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  642. package/lib/esm/render/webgl/StyleUniforms.js.map +1 -1
  643. package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
  644. package/lib/esm/render/webgl/Sync.js.map +1 -1
  645. package/lib/esm/render/webgl/System.js.map +1 -1
  646. package/lib/esm/render/webgl/Target.js.map +1 -1
  647. package/lib/esm/render/webgl/TargetGraphics.js.map +1 -1
  648. package/lib/esm/render/webgl/TargetUniforms.js.map +1 -1
  649. package/lib/esm/render/webgl/Technique.js.map +1 -1
  650. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  651. package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
  652. package/lib/esm/render/webgl/Texture.js.map +1 -1
  653. package/lib/esm/render/webgl/TextureDrape.js.map +1 -1
  654. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  655. package/lib/esm/render/webgl/ThematicUniforms.js.map +1 -1
  656. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  657. package/lib/esm/render/webgl/VertexLUT.js.map +1 -1
  658. package/lib/esm/render/webgl/ViewRectUniforms.js.map +1 -1
  659. package/lib/esm/render/webgl/VisibleTileFeatures.js.map +1 -1
  660. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +154 -154
  661. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  662. package/lib/esm/render/webgl/glsl/Animation.js +83 -83
  663. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  664. package/lib/esm/render/webgl/glsl/Atmosphere.js +266 -266
  665. package/lib/esm/render/webgl/glsl/Atmosphere.js.map +1 -1
  666. package/lib/esm/render/webgl/glsl/Blur.js +37 -37
  667. package/lib/esm/render/webgl/glsl/Blur.js.map +1 -1
  668. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +4 -4
  669. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  670. package/lib/esm/render/webgl/glsl/ClearTranslucent.js +3 -3
  671. package/lib/esm/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  672. package/lib/esm/render/webgl/glsl/Clipping.js +60 -60
  673. package/lib/esm/render/webgl/glsl/Clipping.js.map +1 -1
  674. package/lib/esm/render/webgl/glsl/Color.js +12 -12
  675. package/lib/esm/render/webgl/glsl/Color.js.map +1 -1
  676. package/lib/esm/render/webgl/glsl/Combine3Textures.js +7 -7
  677. package/lib/esm/render/webgl/glsl/Combine3Textures.js.map +1 -1
  678. package/lib/esm/render/webgl/glsl/CombineTextures.js +5 -5
  679. package/lib/esm/render/webgl/glsl/CombineTextures.js.map +1 -1
  680. package/lib/esm/render/webgl/glsl/Common.js +16 -16
  681. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  682. package/lib/esm/render/webgl/glsl/Composite.js +71 -71
  683. package/lib/esm/render/webgl/glsl/Composite.js.map +1 -1
  684. package/lib/esm/render/webgl/glsl/CopyColor.js +6 -6
  685. package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
  686. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +3 -3
  687. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  688. package/lib/esm/render/webgl/glsl/CopyStencil.js +4 -4
  689. package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
  690. package/lib/esm/render/webgl/glsl/Decode.js +65 -65
  691. package/lib/esm/render/webgl/glsl/Decode.js.map +1 -1
  692. package/lib/esm/render/webgl/glsl/EDL.js +103 -103
  693. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -1
  694. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js +25 -25
  695. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  696. package/lib/esm/render/webgl/glsl/Edge.js +146 -146
  697. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  698. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +232 -232
  699. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  700. package/lib/esm/render/webgl/glsl/Fragment.js +41 -41
  701. package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
  702. package/lib/esm/render/webgl/glsl/Instancing.js +21 -21
  703. package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
  704. package/lib/esm/render/webgl/glsl/Lighting.js +92 -92
  705. package/lib/esm/render/webgl/glsl/Lighting.js.map +1 -1
  706. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  707. package/lib/esm/render/webgl/glsl/LookupTable.js +19 -19
  708. package/lib/esm/render/webgl/glsl/LookupTable.js.map +1 -1
  709. package/lib/esm/render/webgl/glsl/Monochrome.js +13 -13
  710. package/lib/esm/render/webgl/glsl/Monochrome.js.map +1 -1
  711. package/lib/esm/render/webgl/glsl/PlanarClassification.js +188 -188
  712. package/lib/esm/render/webgl/glsl/PlanarClassification.js.map +1 -1
  713. package/lib/esm/render/webgl/glsl/PlanarGrid.js +22 -22
  714. package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
  715. package/lib/esm/render/webgl/glsl/PointCloud.js +28 -28
  716. package/lib/esm/render/webgl/glsl/PointCloud.js.map +1 -1
  717. package/lib/esm/render/webgl/glsl/PointString.js +9 -9
  718. package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
  719. package/lib/esm/render/webgl/glsl/Polyline.js +213 -213
  720. package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
  721. package/lib/esm/render/webgl/glsl/RealityMesh.js +83 -83
  722. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  723. package/lib/esm/render/webgl/glsl/RenderPass.js.map +1 -1
  724. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js +9 -9
  725. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
  726. package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
  727. package/lib/esm/render/webgl/glsl/SkySphere.js +49 -49
  728. package/lib/esm/render/webgl/glsl/SkySphere.js.map +1 -1
  729. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +51 -51
  730. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  731. package/lib/esm/render/webgl/glsl/Surface.js +239 -239
  732. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  733. package/lib/esm/render/webgl/glsl/Thematic.js +134 -134
  734. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  735. package/lib/esm/render/webgl/glsl/Translucency.js +19 -19
  736. package/lib/esm/render/webgl/glsl/Translucency.js.map +1 -1
  737. package/lib/esm/render/webgl/glsl/Vertex.js +73 -73
  738. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  739. package/lib/esm/render/webgl/glsl/Viewport.js +38 -38
  740. package/lib/esm/render/webgl/glsl/Viewport.js.map +1 -1
  741. package/lib/esm/render/webgl/glsl/ViewportQuad.js.map +1 -1
  742. package/lib/esm/render/webgl/glsl/Wiremesh.js +10 -10
  743. package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -1
  744. package/lib/esm/render-primitives.js.map +1 -1
  745. package/lib/esm/request/Request.js.map +1 -1
  746. package/lib/esm/tile/B3dmReader.js.map +1 -1
  747. package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
  748. package/lib/esm/tile/CesiumAssetProvider.js.map +1 -1
  749. package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
  750. package/lib/esm/tile/ContextShareProvider.js.map +1 -1
  751. package/lib/esm/tile/DisclosedTileTreeSet.js.map +1 -1
  752. package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
  753. package/lib/esm/tile/GltfReader.js.map +1 -1
  754. package/lib/esm/tile/GraphicsCollector.js.map +1 -1
  755. package/lib/esm/tile/I3dmReader.js.map +1 -1
  756. package/lib/esm/tile/IModelTile.js.map +1 -1
  757. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  758. package/lib/esm/tile/IModelTileTree.js.map +1 -1
  759. package/lib/esm/tile/ImdlDecoder.js.map +1 -1
  760. package/lib/esm/tile/ImdlGraphicsCreator.js.map +1 -1
  761. package/lib/esm/tile/ImdlParser.js.map +1 -1
  762. package/lib/esm/tile/ImdlReader.js.map +1 -1
  763. package/lib/esm/tile/LRUTileList.js.map +1 -1
  764. package/lib/esm/tile/OPCFormatInterpreter.js.map +1 -1
  765. package/lib/esm/tile/PntsReader.js.map +1 -1
  766. package/lib/esm/tile/RealityTile.js.map +1 -1
  767. package/lib/esm/tile/RealityTileDrawArgs.js.map +1 -1
  768. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  769. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  770. package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  771. package/lib/esm/tile/Tile.js.map +1 -1
  772. package/lib/esm/tile/TileAdmin.js.map +1 -1
  773. package/lib/esm/tile/TileContent.js.map +1 -1
  774. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  775. package/lib/esm/tile/TileGeometryCollector.js.map +1 -1
  776. package/lib/esm/tile/TileParams.js.map +1 -1
  777. package/lib/esm/tile/TileRequest.js.map +1 -1
  778. package/lib/esm/tile/TileRequestChannel.js.map +1 -1
  779. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  780. package/lib/esm/tile/TileStorage.js.map +1 -1
  781. package/lib/esm/tile/TileTree.js.map +1 -1
  782. package/lib/esm/tile/TileTreeOwner.js.map +1 -1
  783. package/lib/esm/tile/TileTreeParams.js.map +1 -1
  784. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  785. package/lib/esm/tile/TileTreeSupplier.js.map +1 -1
  786. package/lib/esm/tile/TileUsageMarker.js.map +1 -1
  787. package/lib/esm/tile/TileUser.js.map +1 -1
  788. package/lib/esm/tile/TileUserSet.js.map +1 -1
  789. package/lib/esm/tile/TiledGraphicsProvider.js.map +1 -1
  790. package/lib/esm/tile/ViewFlagOverrides.js.map +1 -1
  791. package/lib/esm/tile/internal.js.map +1 -1
  792. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  793. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  794. package/lib/esm/tile/map/BingElevation.js.map +1 -1
  795. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  796. package/lib/esm/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  797. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  798. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  799. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  800. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  801. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  802. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  803. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  804. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  805. package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
  806. package/lib/esm/tile/map/MapFeatureInfo.js.map +1 -1
  807. package/lib/esm/tile/map/MapLayerAuthentication.js.map +1 -1
  808. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  809. package/lib/esm/tile/map/MapLayerImageryProvider.js +2 -2
  810. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  811. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  812. package/lib/esm/tile/map/MapLayerTileTreeReference.js.map +1 -1
  813. package/lib/esm/tile/map/MapTile.js.map +1 -1
  814. package/lib/esm/tile/map/MapTileAvailability.js.map +1 -1
  815. package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
  816. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  817. package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
  818. package/lib/esm/tile/map/QuadId.js.map +1 -1
  819. package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
  820. package/lib/esm/tile/map/TerrainProvider.js.map +1 -1
  821. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  822. package/lib/esm/tile/map/WmsUtilities.js.map +1 -1
  823. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  824. package/lib/esm/tools/AccuDrawTool.js.map +1 -1
  825. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  826. package/lib/esm/tools/EditManipulator.js.map +1 -1
  827. package/lib/esm/tools/ElementSetTool.js.map +1 -1
  828. package/lib/esm/tools/EventController.js.map +1 -1
  829. package/lib/esm/tools/IdleTool.js.map +1 -1
  830. package/lib/esm/tools/MeasureTool.js.map +1 -1
  831. package/lib/esm/tools/PrimitiveTool.js.map +1 -1
  832. package/lib/esm/tools/SelectTool.js.map +1 -1
  833. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  834. package/lib/esm/tools/ToolAssistance.js.map +1 -1
  835. package/lib/esm/tools/ToolSettings.js.map +1 -1
  836. package/lib/esm/tools/ViewTool.js.map +1 -1
  837. package/lib/esm/webgl.js.map +1 -1
  838. package/lib/esm/workers/ImdlParser/Worker.js.map +1 -1
  839. package/lib/esm/workers/ImdlParser/webpack.config.js +40 -40
  840. package/lib/esm/workers/RegisterWorker.js.map +1 -1
  841. package/lib/public/assets/MapLayerSources.json +25 -25
  842. package/lib/public/images/cesium-ion.svg +92 -92
  843. package/lib/public/images/imodeljs-icon.svg +2 -2
  844. package/lib/public/locales/en/CoreTools.json +477 -477
  845. package/lib/public/locales/en/iModelJs.json +170 -170
  846. package/lib/public/scripts/checkbrowser.js +24 -24
  847. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"ImdlGraphicsCreator.js","sourceRoot":"","sources":["../../../src/tile/ImdlGraphicsCreator.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EACL,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,GAC/E,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,4CAA4C,CAAC;AAGnF,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACvG,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAexD,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,QAA0B,EAAE,OAA0B;IAClG,4GAA4G;IAC5G,mCAAmC;IACnC,gDAAgD;IAChD,oEAAoE;IACpE,0GAA0G;IAC1G,6GAA6G;IAC7G,oBAAoB;IAEpB,IAAI;QACF,IAAI,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5C,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAC3E,IAAI,OAAO;YACT,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC;aACpC,IAAI,aAAa;YACpB,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;QAE/C,qHAAqH;QACrH,4BAA4B;QAC5B,MAAM,SAAS,GAAG,CAAC,OAAO,IAAI,CAAC,aAAa,CAAC;QAC7C,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAEhF,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC7D,MAAM,cAAc,GAAG,CAAC,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE/G,IAAI,SAAS,KAAK,cAAc,EAAE,EAAE,wFAAwF;YAC1H,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC9D,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC9D,IAAI,CAAC,KAAK,UAAU;gBAClB,OAAO,SAAS,CAAC;YAEnB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;YAC3F,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YACjD,OAAO,MAAM,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;SACpI;QAED,4FAA4F;QAC5F,mDAAmD;QACnD,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACnF,OAAO,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;KAC/F;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,SAAS,CAAC;KAClB;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAA0B;IACzD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChD,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC;IAC1D,IAAI,CAAC,aAAa;QAChB,OAAO,MAAM,CAAC;IAEhB,MAAM,QAAQ,GAAG,IAAI,KAAK,EAAiB,CAAC;IAC5C,KAAK,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;QAChE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACjE,IAAI,OAAO,EAAE;YACX,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC1B,SAAS;SACV;aAAM,IAAI,YAAY,EAAE;YACvB,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;gBACtE,IAAI,EAAE;oBACJ,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC,CAAC;SACL;KACF;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QACrB,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE9B,OAAO,MAAM,CAAC;AAChB,CAAC;AAOD,SAAS,6BAA6B,CAAC,SAAgH;IACrJ,IAAI,SAAS,KAAK,SAAS;QACzB,OAAO,SAAS,CAAC;IAEnB,MAAM,eAAe,GAAyC;QAC5D,WAAW,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,CAAC;QAC3D,MAAM,EAAE,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;QACpJ,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC;QAC7D,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;KACnF,CAAC;IACF,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAoC,EAAE,OAAwB;IAC5F,IAAI,CAAC,IAAI;QACP,OAAO,SAAS,CAAC;IAEnB,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,IAAI,CAAC,OAAO;QACV,OAAO,SAAS,CAAC;IAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC;IAEhC,MAAM,UAAU,GAA8B;QAC5C,aAAa,EAAE,IAAI,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtG,aAAa,EAAE,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC;QACzD,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;QACzC,YAAY,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC;QACvD,cAAc,EAAE,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,cAAc,CAAC;QAC3D,gBAAgB,EAAE,6BAA6B,CAAC,UAAU,CAAC,iBAAiB,CAAC;KAC9E,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,IAAI,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAE1F,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC;IAC3C,IAAI,aAAa,EAAE;QACjB,IAAI,SAAS,CAAC;QACd,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;QACpE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE;YACjG,cAAc,CAAC,eAAe,GAAG;gBAC/B,SAAS;gBACT,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;gBAChD,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC;gBACjD,cAAc,EAAE,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC;aAC/D,CAAC;SACH;KACF;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,WAAW,CAAC,GAAwC,EAAE,OAAwB;IACrF,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;QAC3B,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;KAClD;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAClE,IAAI,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe;QACpD,OAAO,QAAQ,CAAC;IAElB,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,CAAC,IAAI;QACP,OAAO,SAAS,CAAC;IAEnB,SAAS,gBAAgB,CAAC,GAA6B;QACrD,OAAO,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrG,CAAC;IAED,mDAAmD;IACnD,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,CAAC,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAC5B,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEpD,MAAM,CAAC,aAAa,GAAG,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAC5D,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS;QAC7B,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEtD,MAAM,CAAC,YAAY,GAAG,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1D,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;QAC5B,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEpD,IAAI,IAAI,CAAC,gBAAgB,KAAK,SAAS;QACrC,MAAM,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;IAElD,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY;QACjC,MAAM,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC;IAEzC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAElD,IAAI,SAAS,KAAK,IAAI,CAAC,cAAc;QACnC,MAAM,CAAC,cAAc,GAAG,sBAAsB,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAEvF,mDAAmD;IACnD,OAAO,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/D,CAAC;AAED,SAAS,YAAY,CAAC,SAAyB;IAC7C,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC;IAC/B,QAAQ,GAAG,EAAE,IAAI,EAAE;QACjB,KAAK,WAAW;YACd,OAAO;gBACL,SAAS,EAAE;oBACT,GAAG,GAAG;oBACN,eAAe,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC;oBACtD,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;iBAC3D;aACF,CAAC;QACJ,KAAK,uBAAuB;YAC1B,OAAO;gBACL,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;aACvC,CAAC;QACJ;YACE,OAAO,EAAG,CAAC;KACd;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,SAAyB,EAAE,OAAwB,EAAE,QAA6B;IACjH,QAAQ,SAAS,CAAC,IAAI,EAAE;QACtB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAAC;gBAC9C,GAAG,SAAS,CAAC,MAAM;gBACnB,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAClD,OAAO,EAAE,IAAI,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;aACrD,EAAE,QAAQ,CAAC,CAAC;QACf,KAAK,UAAU;YACb,OAAO,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAC;gBAC3C,GAAG,SAAS,CAAC,MAAM;gBACnB,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAClD,QAAQ,EAAE;oBACR,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ;oBAC5B,OAAO,EAAE,IAAI,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAC7D,WAAW,EAAE,IAAI,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;iBACtE;aACF,EAAE,QAAQ,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,CAAC;YACX,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;YACtC,IAAI,QAAQ,CAAC;YACb,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO;oBACxB,QAAQ,GAAG,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;;oBAE/E,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;aAC5B;YAED,IAAI,cAAc,CAAC;YACnB,IAAI,IAAI,CAAC,cAAc,EAAE;gBACvB,IAAI,OAAO,CAAC;gBACZ,IAAI,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,KAAK,QAAQ,EAAE;oBACnD,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;iBAC7D;qBAAM;oBACL,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;oBACrE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;iBACvE;gBAED,IAAI,OAAO;oBACT,cAAc,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC;aACtF;YAED,OAAO,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC;gBACvC,GAAG,SAAS,CAAC,MAAM;gBACnB,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;gBACtF,QAAQ,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAClD,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC9G,OAAO,EAAE;oBACP,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO;oBAC3B,QAAQ;oBACR,cAAc;oBACd,OAAO,EAAE,IAAI,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;iBAC7D;aACF,EAAE,QAAQ,CAAC,CAAC;SACd;KACF;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,SAAyB,EAAE,OAAwB;IACjF,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5E,OAAO,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7F,CAAC;AAED,SAAS,uBAAuB,CAAC,UAA4B,EAAE,OAAwB;IACrF,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;QAClC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QACxE,IAAI,QAAQ;YACV,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC7B;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,oBAAoB,CAAC,MAA8B,EAAE,OAAwB;IACpF,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3D,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QACxC,OAAO,SAAS,CAAC;IAEnB,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrF,IAAI,CAAC,UAAU;QACb,OAAO,SAAS,CAAC;IAEnB,MAAM,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACxH,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC/C,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,YAAY,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC;QACrD,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QACvC,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC;QACzC,cAAc,EAAE,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC;QACzD,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QACrC,iBAAiB,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC;QAC7D,qBAAqB;KACtB,CAAC,CAAC;IAEH,IAAI,CAAC,OAAO;QACV,OAAO,SAAS,CAAC;IAEnB,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;IACvC,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACtE,IAAI,OAAO;YACT,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;KACvB;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,EAAE,SAAS,CAAC,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;AAC7H,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAe,EAAE,OAAwB;IACnE,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;QACvC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAC5I,IAAI,OAAO;YACT,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC1B;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gBAAgB;AAChB,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAA0B;IACjE,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,UAAU,EAAE;QAC5C,OAAO,SAAS,CAAC;IAEnB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;IACrD,MAAM,eAAe,GAAG,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;IAE3D,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ;QACxD,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,uBAAuB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC;IAE3E,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE;QACzC,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QAC/D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAC3B,SAAS;QAEX,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE;YAC9B,MAAM,YAAY,GAAG,CAAC,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YAC1G,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;SACtE;aAAM,IAAI,SAAS,KAAK,IAAI,CAAC,eAAe,EAAE;YAC7C,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YACtC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;SACxE;aAAM;YACL,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;SAChC;KACF;IAED,QAAQ,QAAQ,CAAC,MAAM,EAAE;QACvB,KAAK,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;QACzB,KAAK,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,CAAC,CAAC,OAAO,MAAM,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;KACpD;AACH,CAAC","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 Tiles\n */\n\nimport { JsonUtils } from \"@itwin/core-bentley\";\nimport { ClipVector, Point2d, Point3d, Range3d, Transform } from \"@itwin/core-geometry\";\nimport {\n ColorDef, Gradient, ImageSource, RenderMaterial, RenderTexture, TextureMapping,\n} from \"@itwin/core-common\";\nimport { AuxChannelTable } from \"../common/render/primitives/AuxChannelTable\";\nimport { createSurfaceMaterial } from \"../common//render/primitives/SurfaceParams\";\nimport { ImdlModel as Imdl } from \"../common/imdl/ImdlModel\";\nimport { ImdlColorDef, ImdlNamedTexture, ImdlTextureMapping } from \"../common/imdl/ImdlSchema\";\nimport { edgeParamsFromImdl, toMaterialParams, toVertexTable } from \"../common/imdl/ParseImdlDocument\";\nimport { VertexIndices } from \"../common/render/primitives/VertexIndices\";\nimport type { RenderGraphic } from \"../render/RenderGraphic\";\nimport { GraphicBranch } from \"../render/GraphicBranch\";\nimport type { RenderGeometry, RenderSystem } from \"../render/RenderSystem\";\nimport type { InstancedGraphicParams } from \"../render/InstancedGraphicParams\";\nimport type { IModelConnection } from \"../IModelConnection\";\n\n/** Options provided to [[decodeImdlContent]].\n * @internal\n */\nexport interface ImdlDecodeOptions {\n document: Imdl.Document;\n system: RenderSystem;\n iModel: IModelConnection;\n isCanceled?: () => boolean;\n}\n\nasync function loadNamedTexture(name: string, namedTex: ImdlNamedTexture, options: ImdlDecodeOptions): Promise<RenderTexture | undefined> {\n // Reasons a texture could be embedded in the tile content instead of requested separately from the backend:\n // - external textures are disabled\n // - the texture name is not a valid Id64 string\n // - the texture is below a certain backend-hardcoded size threshold\n // The bufferViewJson being defined signifies any of the above conditions. In that case, the image content\n // has been embedded in the tile contents. Otherwise, we will attempt to request the image content separately\n // from the backend.\n\n try {\n let textureType = RenderTexture.Type.Normal;\n const isGlyph = JsonUtils.asBool(namedTex.isGlyph);\n const isTileSection = !isGlyph && JsonUtils.asBool(namedTex.isTileSection);\n if (isGlyph)\n textureType = RenderTexture.Type.Glyph;\n else if (isTileSection)\n textureType = RenderTexture.Type.TileSection;\n\n // We produce unique tile sections for very large (> 8 megapixel) textures, and unique glyph atlases for raster text.\n // Neither should be cached.\n const cacheable = !isGlyph && !isTileSection;\n const ownership = cacheable ? { iModel: options.iModel, key: name } : undefined;\n\n const bufferViewId = JsonUtils.asString(namedTex.bufferView);\n const bufferViewJson = 0 !== bufferViewId.length ? options.document.json.bufferViews[bufferViewId] : undefined;\n\n if (undefined !== bufferViewJson) { // presence of bufferViewJson signifies we should read the texture from the tile content\n const byteOffset = JsonUtils.asInt(bufferViewJson.byteOffset);\n const byteLength = JsonUtils.asInt(bufferViewJson.byteLength);\n if (0 === byteLength)\n return undefined;\n\n const texBytes = options.document.binaryData.subarray(byteOffset, byteOffset + byteLength);\n const format = namedTex.format;\n const source = new ImageSource(texBytes, format);\n return await options.system.createTextureFromSource({ source, ownership, type: textureType, transparency: namedTex.transparency });\n }\n\n // bufferViewJson was undefined, so attempt to request the texture directly from the backend\n // eslint-disable-next-line deprecation/deprecation\n const params = new RenderTexture.Params(cacheable ? name : undefined, textureType);\n return options.system.createTextureFromElement(name, options.iModel, params, namedTex.format);\n } catch (_) {\n return undefined;\n }\n}\n\nasync function loadNamedTextures(options: ImdlDecodeOptions): Promise<Map<string, RenderTexture>> {\n const result = new Map<string, RenderTexture>();\n const namedTextures = options.document.json.namedTextures;\n if (!namedTextures)\n return result;\n\n const promises = new Array<Promise<void>>();\n for (const [name, namedTexture] of Object.entries(namedTextures)) {\n const texture = options.system.findTexture(name, options.iModel);\n if (texture) {\n result.set(name, texture);\n continue;\n } else if (namedTexture) {\n promises.push(loadNamedTexture(name, namedTexture, options).then((tx) => {\n if (tx)\n result.set(name, tx);\n }));\n }\n }\n\n if (promises.length > 0)\n await Promise.all(promises);\n\n return result;\n}\n\ninterface GraphicsOptions extends ImdlDecodeOptions {\n textures: Map<string, RenderTexture>;\n patterns: Map<string, RenderGeometry[]>;\n}\n\nfunction constantLodParamPropsFromJson(propsJson: { repetitions?: number, offset?: number[], minDistClamp?: number, maxDistClamp?: number } | undefined): TextureMapping.ConstantLodParamProps | undefined {\n if (undefined === propsJson)\n return undefined;\n\n const constantLodPops: TextureMapping.ConstantLodParamProps = {\n repetitions: JsonUtils.asDouble(propsJson.repetitions, 1.0),\n offset: { x: propsJson.offset ? JsonUtils.asDouble(propsJson.offset[0]) : 0.0, y: propsJson.offset ? JsonUtils.asDouble(propsJson.offset[1]) : 0.0 },\n minDistClamp: JsonUtils.asDouble(propsJson.minDistClamp, 1.0),\n maxDistClamp: JsonUtils.asDouble(propsJson.maxDistClamp, 4096.0 * 1024.0 * 1024.0),\n };\n return constantLodPops;\n}\n\nfunction textureMappingFromJson(json: ImdlTextureMapping | undefined, options: GraphicsOptions): TextureMapping | undefined {\n if (!json)\n return undefined;\n\n const texture = options.textures.get(JsonUtils.asString(json.name));\n if (!texture)\n return undefined;\n\n const paramsJson = json.params;\n const tf = paramsJson.transform;\n\n const paramProps: TextureMapping.ParamProps = {\n textureMat2x3: new TextureMapping.Trans2x3(tf[0][0], tf[0][1], tf[0][2], tf[1][0], tf[1][1], tf[1][2]),\n textureWeight: JsonUtils.asDouble(paramsJson.weight, 1.0),\n mapMode: JsonUtils.asInt(paramsJson.mode),\n worldMapping: JsonUtils.asBool(paramsJson.worldMapping),\n useConstantLod: JsonUtils.asBool(paramsJson.useConstantLod),\n constantLodProps: constantLodParamPropsFromJson(paramsJson.constantLodParams),\n };\n\n const textureMapping = new TextureMapping(texture, new TextureMapping.Params(paramProps));\n\n const normalMapJson = json.normalMapParams;\n if (normalMapJson) {\n let normalMap;\n const normalTexName = JsonUtils.asString(normalMapJson.textureName);\n if (normalTexName.length === 0 || undefined !== (normalMap = options.textures.get(normalTexName))) {\n textureMapping.normalMapParams = {\n normalMap,\n greenUp: JsonUtils.asBool(normalMapJson.greenUp),\n scale: JsonUtils.asDouble(normalMapJson.scale, 1),\n useConstantLod: JsonUtils.asBool(normalMapJson.useConstantLod),\n };\n }\n }\n\n return textureMapping;\n}\n\nfunction getMaterial(mat: string | Imdl.SurfaceMaterialParams, options: GraphicsOptions): RenderMaterial | undefined {\n if (typeof mat !== \"string\") {\n const args = toMaterialParams(mat);\n return options.system.createRenderMaterial(args);\n }\n\n const material = options.system.findMaterial(mat, options.iModel);\n if (material || !options.document.json.renderMaterials)\n return material;\n\n const json = options.document.json.renderMaterials[mat];\n if (!json)\n return undefined;\n\n function colorDefFromJson(col: ImdlColorDef | undefined): ColorDef | undefined {\n return col ? ColorDef.from(col[0] * 255 + 0.5, col[1] * 255 + 0.5, col[2] * 255 + 0.5) : undefined;\n }\n\n // eslint-disable-next-line deprecation/deprecation\n const params = new RenderMaterial.Params(mat);\n params.diffuseColor = colorDefFromJson(json.diffuseColor);\n if (json.diffuse !== undefined)\n params.diffuse = JsonUtils.asDouble(json.diffuse);\n\n params.specularColor = colorDefFromJson(json.specularColor);\n if (json.specular !== undefined)\n params.specular = JsonUtils.asDouble(json.specular);\n\n params.reflectColor = colorDefFromJson(json.reflectColor);\n if (json.reflect !== undefined)\n params.reflect = JsonUtils.asDouble(json.reflect);\n\n if (json.specularExponent !== undefined)\n params.specularExponent = json.specularExponent;\n\n if (undefined !== json.transparency)\n params.alpha = 1.0 - json.transparency;\n\n params.refract = JsonUtils.asDouble(json.refract);\n params.shadows = JsonUtils.asBool(json.shadows);\n params.ambient = JsonUtils.asDouble(json.ambient);\n\n if (undefined !== json.textureMapping)\n params.textureMapping = textureMappingFromJson(json.textureMapping.texture, options);\n\n // eslint-disable-next-line deprecation/deprecation\n return options.system.createMaterial(params, options.iModel);\n}\n\nfunction getModifiers(primitive: Imdl.Primitive): { viOrigin?: Point3d, instances?: InstancedGraphicParams } {\n const mod = primitive.modifier;\n switch (mod?.type) {\n case \"instances\":\n return {\n instances: {\n ...mod,\n transformCenter: Point3d.fromJSON(mod.transformCenter),\n range: mod.range ? Range3d.fromJSON(mod.range) : undefined,\n },\n };\n case \"viewIndependentOrigin\":\n return {\n viOrigin: Point3d.fromJSON(mod.origin),\n };\n default:\n return { };\n }\n}\n\nfunction createPrimitiveGeometry(primitive: Imdl.Primitive, options: GraphicsOptions, viOrigin: Point3d | undefined): RenderGeometry | undefined {\n switch (primitive.type) {\n case \"point\":\n return options.system.createPointStringGeometry({\n ...primitive.params,\n vertices: toVertexTable(primitive.params.vertices),\n indices: new VertexIndices(primitive.params.indices),\n }, viOrigin);\n case \"polyline\":\n return options.system.createPolylineGeometry({\n ...primitive.params,\n vertices: toVertexTable(primitive.params.vertices),\n polyline: {\n ...primitive.params.polyline,\n indices: new VertexIndices(primitive.params.polyline.indices),\n prevIndices: new VertexIndices(primitive.params.polyline.prevIndices),\n },\n }, viOrigin);\n case \"mesh\": {\n const surf = primitive.params.surface;\n let material;\n if (surf.material) {\n if (!surf.material.isAtlas)\n material = createSurfaceMaterial(getMaterial(surf.material.material, options));\n else\n material = surf.material;\n }\n\n let textureMapping;\n if (surf.textureMapping) {\n let texture;\n if (typeof surf.textureMapping.texture === \"string\") {\n texture = options.textures.get(surf.textureMapping.texture);\n } else {\n const gradient = Gradient.Symb.fromJSON(surf.textureMapping.texture);\n texture = options.system.getGradientTexture(gradient, options.iModel);\n }\n\n if (texture)\n textureMapping = { texture, alwaysDisplayed: surf.textureMapping.alwaysDisplayed };\n }\n\n return options.system.createMeshGeometry({\n ...primitive.params,\n edges: primitive.params.edges ? edgeParamsFromImdl(primitive.params.edges) : undefined,\n vertices: toVertexTable(primitive.params.vertices),\n auxChannels: primitive.params.auxChannels ? AuxChannelTable.fromJSON(primitive.params.auxChannels) : undefined,\n surface: {\n ...primitive.params.surface,\n material,\n textureMapping,\n indices: new VertexIndices(primitive.params.surface.indices),\n },\n }, viOrigin);\n }\n }\n}\n\nfunction createPrimitiveGraphic(primitive: Imdl.Primitive, options: GraphicsOptions): RenderGraphic | undefined {\n const mods = getModifiers(primitive);\n const geometry = createPrimitiveGeometry(primitive, options, mods.viOrigin);\n return geometry ? options.system.createRenderGraphic(geometry, mods.instances) : undefined;\n}\n\nfunction createPatternGeometries(primitives: Imdl.Primitive[], options: GraphicsOptions): RenderGeometry[] {\n const geometries = [];\n for (const primitive of primitives) {\n const geometry = createPrimitiveGeometry(primitive, options, undefined);\n if (geometry)\n geometries.push(geometry);\n }\n\n return geometries;\n}\n\nfunction createPatternGraphic(params: Imdl.AreaPatternParams, options: GraphicsOptions): RenderGraphic | undefined {\n const geometries = options.patterns.get(params.symbolName);\n if (!geometries || geometries.length === 0)\n return undefined;\n\n const clip = ClipVector.fromJSON(params.clip);\n const clipVolume = clip?.isValid ? options.system.createClipVolume(clip) : undefined;\n if (!clipVolume)\n return undefined;\n\n const viewIndependentOrigin = params.viewIndependentOrigin ? Point3d.fromJSON(params.viewIndependentOrigin) : undefined;\n const pattern = options.system.createAreaPattern({\n xyOffsets: params.xyOffsets,\n featureId: params.featureId,\n orgTransform: Transform.fromJSON(params.orgTransform),\n origin: Point2d.fromJSON(params.origin),\n scale: params.scale,\n spacing: Point2d.fromJSON(params.spacing),\n patternToModel: Transform.fromJSON(params.modelTransform),\n range: Range3d.fromJSON(params.range),\n symbolTranslation: Point3d.fromJSON(params.symbolTranslation),\n viewIndependentOrigin,\n });\n\n if (!pattern)\n return undefined;\n\n const branch = new GraphicBranch(true);\n for (const geometry of geometries) {\n const graphic = options.system.createRenderGraphic(geometry, pattern);\n if (graphic)\n branch.add(graphic);\n }\n\n return branch.isEmpty ? undefined : options.system.createGraphicBranch(branch, Transform.createIdentity(), { clipVolume });\n}\n\nfunction createNodeGraphics(node: Imdl.Node, options: GraphicsOptions): RenderGraphic[] {\n const graphics = [];\n for (const primitive of node.primitives) {\n const graphic = primitive.type === \"pattern\" ? createPatternGraphic(primitive.params, options) : createPrimitiveGraphic(primitive, options);\n if (graphic)\n graphics.push(graphic);\n }\n\n return graphics;\n}\n\n/** @internal */\nexport async function decodeImdlGraphics(options: ImdlDecodeOptions): Promise<RenderGraphic | undefined> {\n const textures = await loadNamedTextures(options);\n if (options.isCanceled && options.isCanceled())\n return undefined;\n\n const patterns = new Map<string, RenderGeometry[]>();\n const graphicsOptions = { ...options, textures, patterns };\n\n for (const [name, primitives] of options.document.patterns)\n patterns.set(name, createPatternGeometries(primitives, graphicsOptions));\n\n const system = options.system;\n const graphics: RenderGraphic[] = [];\n for (const node of options.document.nodes) {\n const nodeGraphics = createNodeGraphics(node, graphicsOptions);\n if (nodeGraphics.length === 0)\n continue;\n\n if (undefined !== node.layerId) {\n const layerGraphic = 1 === nodeGraphics.length ? nodeGraphics[0] : system.createGraphicList(nodeGraphics);\n graphics.push(system.createGraphicLayer(layerGraphic, node.layerId));\n } else if (undefined !== node.animationNodeId) {\n const branch = new GraphicBranch(true);\n branch.animationId = node.animationId;\n branch.animationNodeId = node.animationNodeId;\n branch.entries.push(...nodeGraphics);\n graphics.push(system.createBranch(branch, Transform.createIdentity()));\n } else {\n graphics.push(...nodeGraphics);\n }\n }\n\n switch (graphics.length) {\n case 0: return undefined;\n case 1: return graphics[0];\n default: return system.createGraphicList(graphics);\n }\n}\n"]}
1
+ {"version":3,"file":"ImdlGraphicsCreator.js","sourceRoot":"","sources":["../../../src/tile/ImdlGraphicsCreator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { JsonUtils } from \"@itwin/core-bentley\";\r\nimport { ClipVector, Point2d, Point3d, Range3d, Transform } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, Gradient, ImageSource, RenderMaterial, RenderTexture, TextureMapping,\r\n} from \"@itwin/core-common\";\r\nimport { AuxChannelTable } from \"../common/render/primitives/AuxChannelTable\";\r\nimport { createSurfaceMaterial } from \"../common//render/primitives/SurfaceParams\";\r\nimport { ImdlModel as Imdl } from \"../common/imdl/ImdlModel\";\r\nimport { ImdlColorDef, ImdlNamedTexture, ImdlTextureMapping } from \"../common/imdl/ImdlSchema\";\r\nimport { edgeParamsFromImdl, toMaterialParams, toVertexTable } from \"../common/imdl/ParseImdlDocument\";\r\nimport { VertexIndices } from \"../common/render/primitives/VertexIndices\";\r\nimport type { RenderGraphic } from \"../render/RenderGraphic\";\r\nimport { GraphicBranch } from \"../render/GraphicBranch\";\r\nimport type { RenderGeometry, RenderSystem } from \"../render/RenderSystem\";\r\nimport type { InstancedGraphicParams } from \"../render/InstancedGraphicParams\";\r\nimport type { IModelConnection } from \"../IModelConnection\";\r\n\r\n/** Options provided to [[decodeImdlContent]].\r\n * @internal\r\n */\r\nexport interface ImdlDecodeOptions {\r\n document: Imdl.Document;\r\n system: RenderSystem;\r\n iModel: IModelConnection;\r\n isCanceled?: () => boolean;\r\n}\r\n\r\nasync function loadNamedTexture(name: string, namedTex: ImdlNamedTexture, options: ImdlDecodeOptions): Promise<RenderTexture | undefined> {\r\n // Reasons a texture could be embedded in the tile content instead of requested separately from the backend:\r\n // - external textures are disabled\r\n // - the texture name is not a valid Id64 string\r\n // - the texture is below a certain backend-hardcoded size threshold\r\n // The bufferViewJson being defined signifies any of the above conditions. In that case, the image content\r\n // has been embedded in the tile contents. Otherwise, we will attempt to request the image content separately\r\n // from the backend.\r\n\r\n try {\r\n let textureType = RenderTexture.Type.Normal;\r\n const isGlyph = JsonUtils.asBool(namedTex.isGlyph);\r\n const isTileSection = !isGlyph && JsonUtils.asBool(namedTex.isTileSection);\r\n if (isGlyph)\r\n textureType = RenderTexture.Type.Glyph;\r\n else if (isTileSection)\r\n textureType = RenderTexture.Type.TileSection;\r\n\r\n // We produce unique tile sections for very large (> 8 megapixel) textures, and unique glyph atlases for raster text.\r\n // Neither should be cached.\r\n const cacheable = !isGlyph && !isTileSection;\r\n const ownership = cacheable ? { iModel: options.iModel, key: name } : undefined;\r\n\r\n const bufferViewId = JsonUtils.asString(namedTex.bufferView);\r\n const bufferViewJson = 0 !== bufferViewId.length ? options.document.json.bufferViews[bufferViewId] : undefined;\r\n\r\n if (undefined !== bufferViewJson) { // presence of bufferViewJson signifies we should read the texture from the tile content\r\n const byteOffset = JsonUtils.asInt(bufferViewJson.byteOffset);\r\n const byteLength = JsonUtils.asInt(bufferViewJson.byteLength);\r\n if (0 === byteLength)\r\n return undefined;\r\n\r\n const texBytes = options.document.binaryData.subarray(byteOffset, byteOffset + byteLength);\r\n const format = namedTex.format;\r\n const source = new ImageSource(texBytes, format);\r\n return await options.system.createTextureFromSource({ source, ownership, type: textureType, transparency: namedTex.transparency });\r\n }\r\n\r\n // bufferViewJson was undefined, so attempt to request the texture directly from the backend\r\n // eslint-disable-next-line deprecation/deprecation\r\n const params = new RenderTexture.Params(cacheable ? name : undefined, textureType);\r\n return options.system.createTextureFromElement(name, options.iModel, params, namedTex.format);\r\n } catch (_) {\r\n return undefined;\r\n }\r\n}\r\n\r\nasync function loadNamedTextures(options: ImdlDecodeOptions): Promise<Map<string, RenderTexture>> {\r\n const result = new Map<string, RenderTexture>();\r\n const namedTextures = options.document.json.namedTextures;\r\n if (!namedTextures)\r\n return result;\r\n\r\n const promises = new Array<Promise<void>>();\r\n for (const [name, namedTexture] of Object.entries(namedTextures)) {\r\n const texture = options.system.findTexture(name, options.iModel);\r\n if (texture) {\r\n result.set(name, texture);\r\n continue;\r\n } else if (namedTexture) {\r\n promises.push(loadNamedTexture(name, namedTexture, options).then((tx) => {\r\n if (tx)\r\n result.set(name, tx);\r\n }));\r\n }\r\n }\r\n\r\n if (promises.length > 0)\r\n await Promise.all(promises);\r\n\r\n return result;\r\n}\r\n\r\ninterface GraphicsOptions extends ImdlDecodeOptions {\r\n textures: Map<string, RenderTexture>;\r\n patterns: Map<string, RenderGeometry[]>;\r\n}\r\n\r\nfunction constantLodParamPropsFromJson(propsJson: { repetitions?: number, offset?: number[], minDistClamp?: number, maxDistClamp?: number } | undefined): TextureMapping.ConstantLodParamProps | undefined {\r\n if (undefined === propsJson)\r\n return undefined;\r\n\r\n const constantLodPops: TextureMapping.ConstantLodParamProps = {\r\n repetitions: JsonUtils.asDouble(propsJson.repetitions, 1.0),\r\n offset: { x: propsJson.offset ? JsonUtils.asDouble(propsJson.offset[0]) : 0.0, y: propsJson.offset ? JsonUtils.asDouble(propsJson.offset[1]) : 0.0 },\r\n minDistClamp: JsonUtils.asDouble(propsJson.minDistClamp, 1.0),\r\n maxDistClamp: JsonUtils.asDouble(propsJson.maxDistClamp, 4096.0 * 1024.0 * 1024.0),\r\n };\r\n return constantLodPops;\r\n}\r\n\r\nfunction textureMappingFromJson(json: ImdlTextureMapping | undefined, options: GraphicsOptions): TextureMapping | undefined {\r\n if (!json)\r\n return undefined;\r\n\r\n const texture = options.textures.get(JsonUtils.asString(json.name));\r\n if (!texture)\r\n return undefined;\r\n\r\n const paramsJson = json.params;\r\n const tf = paramsJson.transform;\r\n\r\n const paramProps: TextureMapping.ParamProps = {\r\n textureMat2x3: new TextureMapping.Trans2x3(tf[0][0], tf[0][1], tf[0][2], tf[1][0], tf[1][1], tf[1][2]),\r\n textureWeight: JsonUtils.asDouble(paramsJson.weight, 1.0),\r\n mapMode: JsonUtils.asInt(paramsJson.mode),\r\n worldMapping: JsonUtils.asBool(paramsJson.worldMapping),\r\n useConstantLod: JsonUtils.asBool(paramsJson.useConstantLod),\r\n constantLodProps: constantLodParamPropsFromJson(paramsJson.constantLodParams),\r\n };\r\n\r\n const textureMapping = new TextureMapping(texture, new TextureMapping.Params(paramProps));\r\n\r\n const normalMapJson = json.normalMapParams;\r\n if (normalMapJson) {\r\n let normalMap;\r\n const normalTexName = JsonUtils.asString(normalMapJson.textureName);\r\n if (normalTexName.length === 0 || undefined !== (normalMap = options.textures.get(normalTexName))) {\r\n textureMapping.normalMapParams = {\r\n normalMap,\r\n greenUp: JsonUtils.asBool(normalMapJson.greenUp),\r\n scale: JsonUtils.asDouble(normalMapJson.scale, 1),\r\n useConstantLod: JsonUtils.asBool(normalMapJson.useConstantLod),\r\n };\r\n }\r\n }\r\n\r\n return textureMapping;\r\n}\r\n\r\nfunction getMaterial(mat: string | Imdl.SurfaceMaterialParams, options: GraphicsOptions): RenderMaterial | undefined {\r\n if (typeof mat !== \"string\") {\r\n const args = toMaterialParams(mat);\r\n return options.system.createRenderMaterial(args);\r\n }\r\n\r\n const material = options.system.findMaterial(mat, options.iModel);\r\n if (material || !options.document.json.renderMaterials)\r\n return material;\r\n\r\n const json = options.document.json.renderMaterials[mat];\r\n if (!json)\r\n return undefined;\r\n\r\n function colorDefFromJson(col: ImdlColorDef | undefined): ColorDef | undefined {\r\n return col ? ColorDef.from(col[0] * 255 + 0.5, col[1] * 255 + 0.5, col[2] * 255 + 0.5) : undefined;\r\n }\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n const params = new RenderMaterial.Params(mat);\r\n params.diffuseColor = colorDefFromJson(json.diffuseColor);\r\n if (json.diffuse !== undefined)\r\n params.diffuse = JsonUtils.asDouble(json.diffuse);\r\n\r\n params.specularColor = colorDefFromJson(json.specularColor);\r\n if (json.specular !== undefined)\r\n params.specular = JsonUtils.asDouble(json.specular);\r\n\r\n params.reflectColor = colorDefFromJson(json.reflectColor);\r\n if (json.reflect !== undefined)\r\n params.reflect = JsonUtils.asDouble(json.reflect);\r\n\r\n if (json.specularExponent !== undefined)\r\n params.specularExponent = json.specularExponent;\r\n\r\n if (undefined !== json.transparency)\r\n params.alpha = 1.0 - json.transparency;\r\n\r\n params.refract = JsonUtils.asDouble(json.refract);\r\n params.shadows = JsonUtils.asBool(json.shadows);\r\n params.ambient = JsonUtils.asDouble(json.ambient);\r\n\r\n if (undefined !== json.textureMapping)\r\n params.textureMapping = textureMappingFromJson(json.textureMapping.texture, options);\r\n\r\n // eslint-disable-next-line deprecation/deprecation\r\n return options.system.createMaterial(params, options.iModel);\r\n}\r\n\r\nfunction getModifiers(primitive: Imdl.Primitive): { viOrigin?: Point3d, instances?: InstancedGraphicParams } {\r\n const mod = primitive.modifier;\r\n switch (mod?.type) {\r\n case \"instances\":\r\n return {\r\n instances: {\r\n ...mod,\r\n transformCenter: Point3d.fromJSON(mod.transformCenter),\r\n range: mod.range ? Range3d.fromJSON(mod.range) : undefined,\r\n },\r\n };\r\n case \"viewIndependentOrigin\":\r\n return {\r\n viOrigin: Point3d.fromJSON(mod.origin),\r\n };\r\n default:\r\n return { };\r\n }\r\n}\r\n\r\nfunction createPrimitiveGeometry(primitive: Imdl.Primitive, options: GraphicsOptions, viOrigin: Point3d | undefined): RenderGeometry | undefined {\r\n switch (primitive.type) {\r\n case \"point\":\r\n return options.system.createPointStringGeometry({\r\n ...primitive.params,\r\n vertices: toVertexTable(primitive.params.vertices),\r\n indices: new VertexIndices(primitive.params.indices),\r\n }, viOrigin);\r\n case \"polyline\":\r\n return options.system.createPolylineGeometry({\r\n ...primitive.params,\r\n vertices: toVertexTable(primitive.params.vertices),\r\n polyline: {\r\n ...primitive.params.polyline,\r\n indices: new VertexIndices(primitive.params.polyline.indices),\r\n prevIndices: new VertexIndices(primitive.params.polyline.prevIndices),\r\n },\r\n }, viOrigin);\r\n case \"mesh\": {\r\n const surf = primitive.params.surface;\r\n let material;\r\n if (surf.material) {\r\n if (!surf.material.isAtlas)\r\n material = createSurfaceMaterial(getMaterial(surf.material.material, options));\r\n else\r\n material = surf.material;\r\n }\r\n\r\n let textureMapping;\r\n if (surf.textureMapping) {\r\n let texture;\r\n if (typeof surf.textureMapping.texture === \"string\") {\r\n texture = options.textures.get(surf.textureMapping.texture);\r\n } else {\r\n const gradient = Gradient.Symb.fromJSON(surf.textureMapping.texture);\r\n texture = options.system.getGradientTexture(gradient, options.iModel);\r\n }\r\n\r\n if (texture)\r\n textureMapping = { texture, alwaysDisplayed: surf.textureMapping.alwaysDisplayed };\r\n }\r\n\r\n return options.system.createMeshGeometry({\r\n ...primitive.params,\r\n edges: primitive.params.edges ? edgeParamsFromImdl(primitive.params.edges) : undefined,\r\n vertices: toVertexTable(primitive.params.vertices),\r\n auxChannels: primitive.params.auxChannels ? AuxChannelTable.fromJSON(primitive.params.auxChannels) : undefined,\r\n surface: {\r\n ...primitive.params.surface,\r\n material,\r\n textureMapping,\r\n indices: new VertexIndices(primitive.params.surface.indices),\r\n },\r\n }, viOrigin);\r\n }\r\n }\r\n}\r\n\r\nfunction createPrimitiveGraphic(primitive: Imdl.Primitive, options: GraphicsOptions): RenderGraphic | undefined {\r\n const mods = getModifiers(primitive);\r\n const geometry = createPrimitiveGeometry(primitive, options, mods.viOrigin);\r\n return geometry ? options.system.createRenderGraphic(geometry, mods.instances) : undefined;\r\n}\r\n\r\nfunction createPatternGeometries(primitives: Imdl.Primitive[], options: GraphicsOptions): RenderGeometry[] {\r\n const geometries = [];\r\n for (const primitive of primitives) {\r\n const geometry = createPrimitiveGeometry(primitive, options, undefined);\r\n if (geometry)\r\n geometries.push(geometry);\r\n }\r\n\r\n return geometries;\r\n}\r\n\r\nfunction createPatternGraphic(params: Imdl.AreaPatternParams, options: GraphicsOptions): RenderGraphic | undefined {\r\n const geometries = options.patterns.get(params.symbolName);\r\n if (!geometries || geometries.length === 0)\r\n return undefined;\r\n\r\n const clip = ClipVector.fromJSON(params.clip);\r\n const clipVolume = clip?.isValid ? options.system.createClipVolume(clip) : undefined;\r\n if (!clipVolume)\r\n return undefined;\r\n\r\n const viewIndependentOrigin = params.viewIndependentOrigin ? Point3d.fromJSON(params.viewIndependentOrigin) : undefined;\r\n const pattern = options.system.createAreaPattern({\r\n xyOffsets: params.xyOffsets,\r\n featureId: params.featureId,\r\n orgTransform: Transform.fromJSON(params.orgTransform),\r\n origin: Point2d.fromJSON(params.origin),\r\n scale: params.scale,\r\n spacing: Point2d.fromJSON(params.spacing),\r\n patternToModel: Transform.fromJSON(params.modelTransform),\r\n range: Range3d.fromJSON(params.range),\r\n symbolTranslation: Point3d.fromJSON(params.symbolTranslation),\r\n viewIndependentOrigin,\r\n });\r\n\r\n if (!pattern)\r\n return undefined;\r\n\r\n const branch = new GraphicBranch(true);\r\n for (const geometry of geometries) {\r\n const graphic = options.system.createRenderGraphic(geometry, pattern);\r\n if (graphic)\r\n branch.add(graphic);\r\n }\r\n\r\n return branch.isEmpty ? undefined : options.system.createGraphicBranch(branch, Transform.createIdentity(), { clipVolume });\r\n}\r\n\r\nfunction createNodeGraphics(node: Imdl.Node, options: GraphicsOptions): RenderGraphic[] {\r\n const graphics = [];\r\n for (const primitive of node.primitives) {\r\n const graphic = primitive.type === \"pattern\" ? createPatternGraphic(primitive.params, options) : createPrimitiveGraphic(primitive, options);\r\n if (graphic)\r\n graphics.push(graphic);\r\n }\r\n\r\n return graphics;\r\n}\r\n\r\n/** @internal */\r\nexport async function decodeImdlGraphics(options: ImdlDecodeOptions): Promise<RenderGraphic | undefined> {\r\n const textures = await loadNamedTextures(options);\r\n if (options.isCanceled && options.isCanceled())\r\n return undefined;\r\n\r\n const patterns = new Map<string, RenderGeometry[]>();\r\n const graphicsOptions = { ...options, textures, patterns };\r\n\r\n for (const [name, primitives] of options.document.patterns)\r\n patterns.set(name, createPatternGeometries(primitives, graphicsOptions));\r\n\r\n const system = options.system;\r\n const graphics: RenderGraphic[] = [];\r\n for (const node of options.document.nodes) {\r\n const nodeGraphics = createNodeGraphics(node, graphicsOptions);\r\n if (nodeGraphics.length === 0)\r\n continue;\r\n\r\n if (undefined !== node.layerId) {\r\n const layerGraphic = 1 === nodeGraphics.length ? nodeGraphics[0] : system.createGraphicList(nodeGraphics);\r\n graphics.push(system.createGraphicLayer(layerGraphic, node.layerId));\r\n } else if (undefined !== node.animationNodeId) {\r\n const branch = new GraphicBranch(true);\r\n branch.animationId = node.animationId;\r\n branch.animationNodeId = node.animationNodeId;\r\n branch.entries.push(...nodeGraphics);\r\n graphics.push(system.createBranch(branch, Transform.createIdentity()));\r\n } else {\r\n graphics.push(...nodeGraphics);\r\n }\r\n }\r\n\r\n switch (graphics.length) {\r\n case 0: return undefined;\r\n case 1: return graphics[0];\r\n default: return system.createGraphicList(graphics);\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ImdlParser.js","sourceRoot":"","sources":["../../../src/tile/ImdlParser.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAe,MAAM,uBAAuB,CAAC;AAEvE,OAAO,EAAmD,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAEtH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAwBzC,gBAAgB;AAChB,MAAM,UAAU,iBAAiB,CAAC,IAA2B;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE;QACjB,OAAO;YACL,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;gBAC1D,GAAG,OAAO;gBACV,QAAQ;aACT,CAAC,CAAC;YACH,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;SACzB,CAAC;KACH;IAED,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;QAClB,IAAI,CAAC,aAAa,EAAE;YAClB,MAAM,MAAM,GAAG,iBAAiB,CAAkB,GAAG,SAAS,CAAC,UAAU,8BAA8B,CAAC,CAAC;YACzG,aAAa,GAAG;gBACd,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;aACzB,CAAC;SACH;QAED,OAAO,aAAa,CAAC;KACtB;IAED,IAAI,MAAM,GAAG,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM;QACT,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE1F,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IAC7B,EAAE,MAAM,CAAC,QAAQ,CAAC;IAClB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,IAAI,aAAqC,CAAC;AAE1C,MAAM,kBAAkB;IAKtB,YAAmB,QAAsB;QAJlC,aAAQ,GAAG,CAAC,CAAC;QAKlB,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAkB,GAAG,SAAS,CAAC,UAAU,8BAA8B,CAAC,CAAC;QAEzG,mEAAmE;QACnE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,OAA0B;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,CAAC;IAEM,OAAO;QACZ,MAAM,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QAC1B,EAAE,IAAI,CAAC,QAAQ,CAAC;QAChB,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE;YACvB,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;SAC1B;IACH,CAAC;CACF;AAED,MAAM,oBAAoB,GAAG,IAAI,UAAU,CAAmC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACzF,IAAI,GAAG,YAAY,cAAc,CAAC,aAAa;QAC7C,OAAO,GAAG,YAAY,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/E,OAAO,GAAG,YAAY,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC,CAAC,CAAC","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 Tiles\n */\n\nimport { assert, Dictionary } from \"@itwin/core-bentley\";\nimport { RenderSchedule } from \"@itwin/core-common\";\nimport { createWorkerProxy, WorkerProxy } from \"../common/WorkerProxy\";\nimport { ImdlModel } from \"../common/imdl/ImdlModel\";\nimport { ImdlParseError, ImdlParserOptions, ImdlTimeline, parseImdlDocument } from \"../common/imdl/ParseImdlDocument\";\nimport { ParseImdlWorker } from \"../workers/ImdlParser/Worker\";\nimport { IModelApp } from \"../IModelApp\";\n\n/** An object that can parse binary iMdl content into an iMdl document on a worker thread.\n * Parsers are reference-counted. Their lifetimes are typically managed by an [[ImdlDecoder]].\n * The caller is responsible for invoking [[release]] to decrement the reference count when they are finished using the parsing.\n * @see [[acquireImdlDecoder]] to acquire a decoder that uses a parser internally.\n * @see [[acquireImdlParser]] to obtain a parser directly (but you probably don't need to do that).\n * @internal\n */\nexport interface ImdlParser {\n parse(options: ImdlParserOptions): Promise<ImdlModel.Document | ImdlParseError>;\n release(): void;\n}\n\n/** Arguments supplied to [[acquireImdlParser]].\n * @internal\n */\nexport interface AcquireImdlParserArgs {\n timeline?: ImdlTimeline;\n noWorker?: boolean;\n}\n\ntype ParserProxy = WorkerProxy<ParseImdlWorker>;\n\n/** @internal */\nexport function acquireImdlParser(args: AcquireImdlParserArgs): ImdlParser {\n const timeline = args.timeline;\n if (args.noWorker) {\n return {\n parse: async (options) => Promise.resolve(parseImdlDocument({\n ...options,\n timeline,\n })),\n release: () => undefined,\n };\n }\n\n if (!args.timeline) {\n if (!defaultParser) {\n const worker = createWorkerProxy<ParseImdlWorker>(`${IModelApp.publicPath}scripts/parse-imdl-worker.js`);\n defaultParser = {\n parse: async (options) => worker.parse(options, [options.data.buffer]),\n release: () => undefined,\n };\n }\n\n return defaultParser;\n }\n\n let parser = parsersWithTimelines.get(args.timeline);\n if (!parser)\n parsersWithTimelines.set(args.timeline, parser = new ParserWithTimeline(args.timeline));\n\n assert(parser.refCount >= 0);\n ++parser.refCount;\n return parser;\n}\n\nlet defaultParser: ImdlParser | undefined;\n\nclass ParserWithTimeline implements ImdlParser {\n public refCount = 0;\n private readonly _timeline: ImdlTimeline;\n private readonly _worker: ParserProxy;\n\n public constructor(timeline: ImdlTimeline) {\n this._timeline = timeline;\n this._worker = createWorkerProxy<ParseImdlWorker>(`${IModelApp.publicPath}scripts/parse-imdl-worker.js`);\n\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this._worker.setTimeline(timeline.toJSON());\n }\n\n public async parse(options: ImdlParserOptions) {\n return this._worker.parse(options, [options.data.buffer]);\n }\n\n public release(): void {\n assert(this.refCount > 0);\n --this.refCount;\n if (this.refCount === 0) {\n parsersWithTimelines.delete(this._timeline);\n this._worker.terminate();\n }\n }\n}\n\nconst parsersWithTimelines = new Dictionary<ImdlTimeline, ParserWithTimeline>((lhs, rhs) => {\n if (lhs instanceof RenderSchedule.ModelTimeline)\n return rhs instanceof RenderSchedule.ModelTimeline ? lhs.compareTo(rhs) : -1;\n\n return rhs instanceof RenderSchedule.Script ? lhs.compareTo(rhs) : 1;\n});\n"]}
1
+ {"version":3,"file":"ImdlParser.js","sourceRoot":"","sources":["../../../src/tile/ImdlParser.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, Dictionary } from \"@itwin/core-bentley\";\r\nimport { RenderSchedule } from \"@itwin/core-common\";\r\nimport { createWorkerProxy, WorkerProxy } from \"../common/WorkerProxy\";\r\nimport { ImdlModel } from \"../common/imdl/ImdlModel\";\r\nimport { ImdlParseError, ImdlParserOptions, ImdlTimeline, parseImdlDocument } from \"../common/imdl/ParseImdlDocument\";\r\nimport { ParseImdlWorker } from \"../workers/ImdlParser/Worker\";\r\nimport { IModelApp } from \"../IModelApp\";\r\n\r\n/** An object that can parse binary iMdl content into an iMdl document on a worker thread.\r\n * Parsers are reference-counted. Their lifetimes are typically managed by an [[ImdlDecoder]].\r\n * The caller is responsible for invoking [[release]] to decrement the reference count when they are finished using the parsing.\r\n * @see [[acquireImdlDecoder]] to acquire a decoder that uses a parser internally.\r\n * @see [[acquireImdlParser]] to obtain a parser directly (but you probably don't need to do that).\r\n * @internal\r\n */\r\nexport interface ImdlParser {\r\n parse(options: ImdlParserOptions): Promise<ImdlModel.Document | ImdlParseError>;\r\n release(): void;\r\n}\r\n\r\n/** Arguments supplied to [[acquireImdlParser]].\r\n * @internal\r\n */\r\nexport interface AcquireImdlParserArgs {\r\n timeline?: ImdlTimeline;\r\n noWorker?: boolean;\r\n}\r\n\r\ntype ParserProxy = WorkerProxy<ParseImdlWorker>;\r\n\r\n/** @internal */\r\nexport function acquireImdlParser(args: AcquireImdlParserArgs): ImdlParser {\r\n const timeline = args.timeline;\r\n if (args.noWorker) {\r\n return {\r\n parse: async (options) => Promise.resolve(parseImdlDocument({\r\n ...options,\r\n timeline,\r\n })),\r\n release: () => undefined,\r\n };\r\n }\r\n\r\n if (!args.timeline) {\r\n if (!defaultParser) {\r\n const worker = createWorkerProxy<ParseImdlWorker>(`${IModelApp.publicPath}scripts/parse-imdl-worker.js`);\r\n defaultParser = {\r\n parse: async (options) => worker.parse(options, [options.data.buffer]),\r\n release: () => undefined,\r\n };\r\n }\r\n\r\n return defaultParser;\r\n }\r\n\r\n let parser = parsersWithTimelines.get(args.timeline);\r\n if (!parser)\r\n parsersWithTimelines.set(args.timeline, parser = new ParserWithTimeline(args.timeline));\r\n\r\n assert(parser.refCount >= 0);\r\n ++parser.refCount;\r\n return parser;\r\n}\r\n\r\nlet defaultParser: ImdlParser | undefined;\r\n\r\nclass ParserWithTimeline implements ImdlParser {\r\n public refCount = 0;\r\n private readonly _timeline: ImdlTimeline;\r\n private readonly _worker: ParserProxy;\r\n\r\n public constructor(timeline: ImdlTimeline) {\r\n this._timeline = timeline;\r\n this._worker = createWorkerProxy<ParseImdlWorker>(`${IModelApp.publicPath}scripts/parse-imdl-worker.js`);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\r\n this._worker.setTimeline(timeline.toJSON());\r\n }\r\n\r\n public async parse(options: ImdlParserOptions) {\r\n return this._worker.parse(options, [options.data.buffer]);\r\n }\r\n\r\n public release(): void {\r\n assert(this.refCount > 0);\r\n --this.refCount;\r\n if (this.refCount === 0) {\r\n parsersWithTimelines.delete(this._timeline);\r\n this._worker.terminate();\r\n }\r\n }\r\n}\r\n\r\nconst parsersWithTimelines = new Dictionary<ImdlTimeline, ParserWithTimeline>((lhs, rhs) => {\r\n if (lhs instanceof RenderSchedule.ModelTimeline)\r\n return rhs instanceof RenderSchedule.ModelTimeline ? lhs.compareTo(rhs) : -1;\r\n\r\n return rhs instanceof RenderSchedule.Script ? lhs.compareTo(rhs) : 1;\r\n});\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ImdlReader.js","sourceRoot":"","sources":["../../../src/tile/ImdlReader.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 Tiles\n */\n\nimport { ByteStream, Id64String } from \"@itwin/core-bentley\";\nimport { Point3d, Transform } from \"@itwin/core-geometry\";\nimport {\n BatchType, decodeTileContentDescription, TileReadError, TileReadStatus,\n} from \"@itwin/core-common\";\nimport { IModelApp } from \"../IModelApp\";\nimport { IModelConnection } from \"../IModelConnection\";\nimport { GraphicBranch } from \"../render/GraphicBranch\";\nimport { RenderGraphic } from \"../render/RenderGraphic\";\nimport { BatchOptions } from \"../render/GraphicBuilder\";\nimport { RenderSystem } from \"../render/RenderSystem\";\nimport { ImdlModel } from \"../common/imdl/ImdlModel\";\nimport { convertFeatureTable, ImdlParseError, ImdlParserOptions, ImdlTimeline, parseImdlDocument } from \"../common/imdl/ParseImdlDocument\";\nimport { decodeImdlGraphics, IModelTileContent } from \"./internal\";\n\n/* eslint-disable no-restricted-syntax */\n\n/** @internal */\nexport interface ImdlReaderResult extends IModelTileContent {\n readStatus: TileReadStatus;\n}\n\n/** Convert the byte array returned by [[TileAdmin.requestElementGraphics]] into a [[RenderGraphic]].\n * @param bytes The binary graphics data obtained from `requestElementGraphics`.\n * @param iModel The iModel with which the graphics are associated.\n * @param modelId The Id of the [[GeometricModelState]] with which the graphics are associated. Can be an invalid Id.\n * @param is3d True if the graphics are 3d.\n * @param options Options customizing how [Feature]($common)s within the graphic can be resymbolized; or false if you don't want to produce a batch.\n * @public\n * @extensions\n */\nexport async function readElementGraphics(bytes: Uint8Array, iModel: IModelConnection, modelId: Id64String, is3d: boolean, options?: BatchOptions | false): Promise<RenderGraphic | undefined> {\n const stream = ByteStream.fromUint8Array(bytes);\n const reader = ImdlReader.create({\n stream, iModel, modelId, is3d, options,\n system: IModelApp.renderSystem,\n });\n\n const result = await reader.read();\n return result.graphic;\n}\n\n/** Arguments supplied to [[ImdlReader.create]]\n * @internal\n */\nexport interface ImdlReaderCreateArgs {\n stream: ByteStream;\n iModel: IModelConnection;\n modelId: Id64String;\n is3d: boolean;\n /** If undefined, the tile's leafness will be deduced by decodeTileContentDescription. */\n isLeaf?: boolean;\n system: RenderSystem;\n type?: BatchType; // default Primary\n loadEdges?: boolean; // default true\n isCanceled?: () => boolean;\n sizeMultiplier?: number;\n options?: BatchOptions | false;\n containsTransformNodes?: boolean; // default false\n /** Supplied if the graphics in the tile are to be split up based on the nodes in the timeline. */\n timeline?: ImdlTimeline;\n}\n\n/** @internal */\nexport async function readImdlContent(args: ImdlReaderCreateArgs & { parseDocument?: (parseOpts: ImdlParserOptions) => Promise<ImdlModel.Document | ImdlParseError> }): Promise<ImdlReaderResult> {\n const isCanceled = args.isCanceled ?? (() => false);\n let content;\n try {\n content = decodeTileContentDescription({\n stream: args.stream,\n sizeMultiplier: args.sizeMultiplier,\n is2d: !args.is3d,\n options: IModelApp.tileAdmin,\n isVolumeClassifier: BatchType.VolumeClassifier === args.type,\n isLeaf: args.isLeaf,\n });\n } catch (e) {\n if (e instanceof TileReadError)\n return { isLeaf: true, readStatus: e.errorNumber };\n else\n throw e;\n }\n\n args.stream.reset();\n const parseOpts: ImdlParserOptions = {\n data: args.stream.readBytes(0, args.stream.length),\n batchModelId: args.modelId,\n is3d: args.is3d,\n maxVertexTableSize: IModelApp.renderSystem.maxTextureSize,\n omitEdges: false === args.loadEdges,\n createUntransformedRootNode: args.containsTransformNodes,\n };\n\n const document = args.parseDocument ? (await args.parseDocument(parseOpts)) : parseImdlDocument({ ...parseOpts, timeline: args.timeline });\n if (isCanceled())\n return { isLeaf: true, readStatus: TileReadStatus.Canceled };\n else if (typeof document === \"number\")\n return { isLeaf: true, readStatus: document };\n\n let graphic = await decodeImdlGraphics({\n system: args.system,\n iModel: args.iModel,\n document,\n isCanceled: args.isCanceled,\n });\n\n if (isCanceled())\n return { isLeaf: true, readStatus: TileReadStatus.Canceled };\n\n if (graphic && false !== args.options) {\n const featureTable = convertFeatureTable(document.featureTable, args.modelId);\n graphic = args.system.createBatch(graphic, featureTable, content.contentRange, args.options);\n }\n\n if (graphic && document.rtcCenter) {\n const rtcBranch = new GraphicBranch(true);\n rtcBranch.add(graphic);\n graphic = args.system.createBranch(rtcBranch, Transform.createTranslation(Point3d.fromJSON(document.rtcCenter)));\n }\n\n return {\n readStatus: TileReadStatus.Success,\n isLeaf: content.isLeaf,\n sizeMultiplier: content.sizeMultiplier,\n contentRange: content.contentRange.isNull ? undefined : content.contentRange,\n graphic,\n emptySubRangeMask: content.emptySubRangeMask,\n };\n}\n\n/** @internal */\nexport interface ImdlReader {\n read: () => Promise<ImdlReaderResult>;\n}\n\n/** @internal */\nexport namespace ImdlReader {\n export function create(args: ImdlReaderCreateArgs): ImdlReader {\n return {\n read: async () => readImdlContent(args),\n };\n }\n}\n"]}
1
+ {"version":3,"file":"ImdlReader.js","sourceRoot":"","sources":["../../../src/tile/ImdlReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { ByteStream, Id64String } from \"@itwin/core-bentley\";\r\nimport { Point3d, Transform } from \"@itwin/core-geometry\";\r\nimport {\r\n BatchType, decodeTileContentDescription, TileReadError, TileReadStatus,\r\n} from \"@itwin/core-common\";\r\nimport { IModelApp } from \"../IModelApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { GraphicBranch } from \"../render/GraphicBranch\";\r\nimport { RenderGraphic } from \"../render/RenderGraphic\";\r\nimport { BatchOptions } from \"../render/GraphicBuilder\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport { ImdlModel } from \"../common/imdl/ImdlModel\";\r\nimport { convertFeatureTable, ImdlParseError, ImdlParserOptions, ImdlTimeline, parseImdlDocument } from \"../common/imdl/ParseImdlDocument\";\r\nimport { decodeImdlGraphics, IModelTileContent } from \"./internal\";\r\n\r\n/* eslint-disable no-restricted-syntax */\r\n\r\n/** @internal */\r\nexport interface ImdlReaderResult extends IModelTileContent {\r\n readStatus: TileReadStatus;\r\n}\r\n\r\n/** Convert the byte array returned by [[TileAdmin.requestElementGraphics]] into a [[RenderGraphic]].\r\n * @param bytes The binary graphics data obtained from `requestElementGraphics`.\r\n * @param iModel The iModel with which the graphics are associated.\r\n * @param modelId The Id of the [[GeometricModelState]] with which the graphics are associated. Can be an invalid Id.\r\n * @param is3d True if the graphics are 3d.\r\n * @param options Options customizing how [Feature]($common)s within the graphic can be resymbolized; or false if you don't want to produce a batch.\r\n * @public\r\n * @extensions\r\n */\r\nexport async function readElementGraphics(bytes: Uint8Array, iModel: IModelConnection, modelId: Id64String, is3d: boolean, options?: BatchOptions | false): Promise<RenderGraphic | undefined> {\r\n const stream = ByteStream.fromUint8Array(bytes);\r\n const reader = ImdlReader.create({\r\n stream, iModel, modelId, is3d, options,\r\n system: IModelApp.renderSystem,\r\n });\r\n\r\n const result = await reader.read();\r\n return result.graphic;\r\n}\r\n\r\n/** Arguments supplied to [[ImdlReader.create]]\r\n * @internal\r\n */\r\nexport interface ImdlReaderCreateArgs {\r\n stream: ByteStream;\r\n iModel: IModelConnection;\r\n modelId: Id64String;\r\n is3d: boolean;\r\n /** If undefined, the tile's leafness will be deduced by decodeTileContentDescription. */\r\n isLeaf?: boolean;\r\n system: RenderSystem;\r\n type?: BatchType; // default Primary\r\n loadEdges?: boolean; // default true\r\n isCanceled?: () => boolean;\r\n sizeMultiplier?: number;\r\n options?: BatchOptions | false;\r\n containsTransformNodes?: boolean; // default false\r\n /** Supplied if the graphics in the tile are to be split up based on the nodes in the timeline. */\r\n timeline?: ImdlTimeline;\r\n}\r\n\r\n/** @internal */\r\nexport async function readImdlContent(args: ImdlReaderCreateArgs & { parseDocument?: (parseOpts: ImdlParserOptions) => Promise<ImdlModel.Document | ImdlParseError> }): Promise<ImdlReaderResult> {\r\n const isCanceled = args.isCanceled ?? (() => false);\r\n let content;\r\n try {\r\n content = decodeTileContentDescription({\r\n stream: args.stream,\r\n sizeMultiplier: args.sizeMultiplier,\r\n is2d: !args.is3d,\r\n options: IModelApp.tileAdmin,\r\n isVolumeClassifier: BatchType.VolumeClassifier === args.type,\r\n isLeaf: args.isLeaf,\r\n });\r\n } catch (e) {\r\n if (e instanceof TileReadError)\r\n return { isLeaf: true, readStatus: e.errorNumber };\r\n else\r\n throw e;\r\n }\r\n\r\n args.stream.reset();\r\n const parseOpts: ImdlParserOptions = {\r\n data: args.stream.readBytes(0, args.stream.length),\r\n batchModelId: args.modelId,\r\n is3d: args.is3d,\r\n maxVertexTableSize: IModelApp.renderSystem.maxTextureSize,\r\n omitEdges: false === args.loadEdges,\r\n createUntransformedRootNode: args.containsTransformNodes,\r\n };\r\n\r\n const document = args.parseDocument ? (await args.parseDocument(parseOpts)) : parseImdlDocument({ ...parseOpts, timeline: args.timeline });\r\n if (isCanceled())\r\n return { isLeaf: true, readStatus: TileReadStatus.Canceled };\r\n else if (typeof document === \"number\")\r\n return { isLeaf: true, readStatus: document };\r\n\r\n let graphic = await decodeImdlGraphics({\r\n system: args.system,\r\n iModel: args.iModel,\r\n document,\r\n isCanceled: args.isCanceled,\r\n });\r\n\r\n if (isCanceled())\r\n return { isLeaf: true, readStatus: TileReadStatus.Canceled };\r\n\r\n if (graphic && false !== args.options) {\r\n const featureTable = convertFeatureTable(document.featureTable, args.modelId);\r\n graphic = args.system.createBatch(graphic, featureTable, content.contentRange, args.options);\r\n }\r\n\r\n if (graphic && document.rtcCenter) {\r\n const rtcBranch = new GraphicBranch(true);\r\n rtcBranch.add(graphic);\r\n graphic = args.system.createBranch(rtcBranch, Transform.createTranslation(Point3d.fromJSON(document.rtcCenter)));\r\n }\r\n\r\n return {\r\n readStatus: TileReadStatus.Success,\r\n isLeaf: content.isLeaf,\r\n sizeMultiplier: content.sizeMultiplier,\r\n contentRange: content.contentRange.isNull ? undefined : content.contentRange,\r\n graphic,\r\n emptySubRangeMask: content.emptySubRangeMask,\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport interface ImdlReader {\r\n read: () => Promise<ImdlReaderResult>;\r\n}\r\n\r\n/** @internal */\r\nexport namespace ImdlReader {\r\n export function create(args: ImdlReaderCreateArgs): ImdlReader {\r\n return {\r\n read: async () => readImdlContent(args),\r\n };\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LRUTileList.js","sourceRoot":"","sources":["../../../src/tile/LRUTileList.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 Tiles\n */\n\nimport { assert, ReadonlySortedArray, SortedArray } from \"@itwin/core-bentley\";\nimport { RenderMemory } from \"../render/RenderMemory\";\nimport { Tile } from \"./internal\";\n\n/** Maintains in sorted order a set of [[TileUser]] Ids for which a given tile has been selected for display. The number of users in a set is expected to be very small - often only 1 for a typical application.\n * Strictly for use by LRUTileList.\n * @see TileUserIdSets.\n * @internal\n */\nexport class TileUserIdSet extends ReadonlySortedArray<number> {\n public constructor(userId?: number) {\n super((lhs, rhs) => lhs - rhs);\n if (undefined !== userId)\n this._array.push(userId);\n }\n\n public equals(set: TileUserIdSet): boolean {\n if (this.length !== set.length)\n return false;\n\n for (let i = 0; i < this.length; i++)\n if (this._array[i] !== set._array[i])\n return false;\n\n return true;\n }\n\n public add(userId: number): void {\n this._insert(userId);\n }\n\n public drop(userId: number): void {\n this._remove(userId);\n }\n\n public clear(): void {\n this._clear();\n }\n\n public copyFrom(src: TileUserIdSet): void {\n this._array.length = src.length;\n let i = 0;\n for (const userId of src)\n this._array[i++] = userId;\n }\n\n public clone(): TileUserIdSet {\n const clone = new TileUserIdSet();\n clone.copyFrom(this);\n return clone;\n }\n}\n\n/** Maintains a set of TileUserIdSets such that each set represents a unique combination of TileUser ids and each set contains at least one TileUser id.\n * Exported strictly for tests.\n * @see LRUTileList.\n * @internal\n */\nexport class TileUserIdSets extends SortedArray<TileUserIdSet> {\n private readonly _scratch = new TileUserIdSet();\n\n public constructor() {\n super((lhs, rhs) => {\n if (lhs === rhs)\n return 0;\n\n let diff = lhs.length - rhs.length;\n if (0 !== diff)\n return diff;\n\n for (let i = 0; i < lhs.length; i++) {\n const lhId = lhs.get(i)!;\n const rhId = rhs.get(i)!;\n diff = lhId - rhId;\n if (0 !== diff)\n return diff;\n }\n\n return 0;\n });\n }\n\n /** Remove the specified TileUser Id from all sets and remove empty and duplicate sets. */\n public drop(userId: number): void {\n // Remove from all sets, and delete empty sets.\n let i = 0;\n for (/* */; i < this._array.length; i++) {\n const set = this._array[i];\n set.drop(userId);\n if (set.length === 0)\n this._array.splice(i, 1);\n }\n\n // Collapse equivalent sets.\n i = 0;\n for (let j = 1; j < this._array.length; /* */) {\n if (this._array[i].equals(this._array[j])) {\n this._array.splice(i, 1);\n } else {\n i++;\n j++;\n }\n }\n }\n\n /** Obtain a TileUserIdSet owned by this object containing userId and (if specified) userIds. */\n public plus(userId: number, userIds?: TileUserIdSet): TileUserIdSet {\n const scratch = this.scratch(userIds);\n scratch.add(userId);\n return this.getEquivalent(scratch);\n }\n\n /** Obtain a TileUserIdSet owned by this object containing all of userIds (if specified) but not userId. Returns undefined if the resultant set would be empty. */\n public minus(userId: number, userIds?: TileUserIdSet): TileUserIdSet | undefined {\n const scratch = this.scratch(userIds);\n scratch.drop(userId);\n return scratch.length > 0 ? this.getEquivalent(scratch) : undefined;\n }\n\n private scratch(userIds?: TileUserIdSet): TileUserIdSet {\n const scratch = this._scratch;\n if (userIds)\n scratch.copyFrom(userIds);\n else\n scratch.clear();\n\n return scratch;\n }\n\n private getEquivalent(sought: TileUserIdSet): TileUserIdSet {\n assert(sought.length > 0);\n\n for (const set of this)\n if (set.equals(sought))\n return set;\n\n const newSet = sought.clone();\n this.insert(newSet);\n return newSet;\n }\n}\n\n/** A node in an LRUTileList. It is either a [[Tile]], or a sentinel node used to partition the list.\n * Strictly for use by LRUTileList.\n * @internal\n */\nexport interface LRUTileListNode {\n previous?: LRUTileListNode;\n next?: LRUTileListNode;\n /** The number of bytes of GPU memory allocated to the tile's content. The only node in a LRUTileListNode with `bytesUsed` less than 1 is the sentinel node. */\n bytesUsed: number;\n /** For a tile, the Ids of all of the TileUsers for which the tile is currently in use. The TileUserIdSet is owned by the LRUTileList's TileUserIdSets member.\n * Undefined if the tile is not in use by any TileUser.\n */\n tileUserIds?: TileUserIdSet | undefined;\n}\n\nfunction isLinked(node: LRUTileListNode): boolean {\n return undefined !== node.previous || undefined !== node.next;\n}\n\nfunction* lruListIterator(start: Tile | undefined, end: LRUTileListNode | undefined): Iterator<Tile> {\n let cur = start;\n while (cur && cur !== end) {\n const prev = cur;\n cur = cur.next as Tile | undefined;\n yield prev;\n }\n}\n\n/** An intrusive doubly-linked list of LRUTileListNodes, containing Tiles partitioned by a singleton sentinel node into two partitions and ordered from least-recently- to most-recently-used by any TileUser.\n * Used by TileAdmin to keep track of and impose limits upon the total amount of GPU memory allocated to tile content.\n *\n * Illustration of the structure of the list:\n *\n * ```\n * v------------- Not selected --------------v v----------------- Selected ------------------v\n * ______ ______ __________ ______ ______\n * | head |.next => | |.next => ... | sentinel |.next => ... | |.next => | tail |\n * | 12kb | | 8kb | | 0kb | | 19kb | | 23kb |\n * |______| <= previous.|______| ... <= previous.|__________| ... <= previous.|______| <= previous.|______|\n *\n * least-recently-selected --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> most-recently-selected\n * ```\n *\n * The sentinel node is always present and floats freely as the contents of each partition change. Note that the `next` and `previous` pointers are stored directly on the tiles - no link nodes are allocated to hold the entries in the list. This of course means that a Tile can only ever belong to one LRUTileList - the one owned by the TileAdmin.\n *\n * The list contains only those tiles whose content has been loaded. Each node records the amount of GPU memory allocated for the tile's content. The list keeps track of the total amount of GPU memory allocated by all tiles. The list's contents are updated as follows:\n *\n * - When a tile's content is loaded, it is added to the end of the \"not selected\" partition. Its memory usage is computed and added to the list's total.\n * - When a tile's content is unloaded, it is removed from the list. Its memory usage is deducted from the list's totla.\n * - Just before a TileUser selects tiles for use (e.g., Viewport selects tiles for display), it is removed from each tile's set of viewports in which they are selected. If a tile's set of users becomes empty as a result, it is moved to the end of the \"not selected\" partition.\n * - When a tile becomes selected for use by a TileUser, the user is added to its user set and the tile is moved to the end of the \"selected\" partition.\n *\n * When the system determines that GPU memory should be freed up, it can simply pop nodes off the beginning of the \"not selected\" partition, freeing their content, until the target memory usage is reached or no more non-selected nodes exist.\n *\n * Strictly for use by [[TileAdmin]].\n * @internal\n */\nexport class LRUTileList {\n protected readonly _sentinel: LRUTileListNode;\n protected readonly _stats = new RenderMemory.Statistics();\n protected readonly _userIdSets = new TileUserIdSets();\n protected _head: LRUTileListNode;\n protected _tail: LRUTileListNode;\n protected _totalBytesUsed = 0;\n\n /** The amount of GPU memory, in bytes, allocated to all tiles in the list. */\n public get totalBytesUsed(): number {\n return this._totalBytesUsed;\n }\n\n public constructor() {\n this._head = this._tail = this._sentinel = { bytesUsed: 0 };\n }\n\n public dispose(): void {\n let node: LRUTileListNode | undefined = this._head;\n let next: LRUTileListNode | undefined;\n while (node) {\n next = node.next;\n node.previous = node.next = undefined;\n node.bytesUsed = 0;\n node.tileUserIds = undefined;\n node = next;\n }\n\n this._head = this._tail = this._sentinel;\n this._totalBytesUsed = 0;\n this._userIdSets.clear();\n }\n\n /** Compute the amount of GPU memory allocated to the tile's content and, if greater than zero, add the tile to the end of the \"not selected\" partition.\n * Invoked by TileAdmin whenever a tile's content is set to a valid RenderGraphic.\n */\n public add(tile: Tile): void {\n assert(!isLinked(tile));\n if (isLinked(tile))\n return;\n\n assert(tile.bytesUsed === 0);\n assert(tile.tileUserIds === undefined);\n\n this._stats.clear();\n tile.collectStatistics(this._stats, false);\n tile.bytesUsed = this.computeBytesUsed(tile);\n assert(tile.bytesUsed >= 0);\n assert(tile.bytesUsed === Math.floor(tile.bytesUsed));\n\n if (tile.bytesUsed <= 0)\n return;\n\n // Insert just before the sentinel, indicating this is the most-recently-used non-selected tile.\n this._totalBytesUsed += tile.bytesUsed;\n this.append(tile);\n this.moveBeforeSentinel(tile);\n }\n\n /** Remove the tile from the list and deduct its previously-used GPU memory from the list's running total.\n * Invoked by TileAdmin when a tile's content is unloaded, including when the list itself disposes of the content in its `freeMemory` method.\n */\n public drop(tile: Tile): void {\n assert(isLinked(tile) || tile.bytesUsed === 0);\n if (!isLinked(tile))\n return;\n\n assert(tile.bytesUsed > 0);\n this._totalBytesUsed -= tile.bytesUsed;\n assert(this._totalBytesUsed >= 0);\n\n this.unlink(tile);\n tile.tileUserIds = undefined;\n tile.bytesUsed = 0;\n\n this.assertList();\n }\n\n /** Mark the tiles as in use by the specified TileUser. They are moved to the end of the \"selected\" partition. */\n public markUsed(userId: number, tiles: Iterable<Tile>): void {\n for (const tile of tiles) {\n if (tile.bytesUsed <= 0)\n continue;\n\n assert(isLinked(tile));\n\n if (isLinked(tile)) {\n tile.tileUserIds = this._userIdSets.plus(userId, tile.tileUserIds);\n this.moveToEnd(tile);\n }\n }\n }\n\n /** Mark the tiles as no longer in user by the specified TileUser.\n * If this results in a tile being no longer selected for any user, it is moved to the end of the \"not selected\" partition.\n */\n public clearUsed(userId: number): void {\n this._userIdSets.drop(userId);\n let prev: LRUTileListNode | undefined = this._sentinel;\n while (prev && prev.next) {\n const tile = prev.next as Tile;\n assert(tile !== this._sentinel);\n tile.tileUserIds = this._userIdSets.minus(userId, tile.tileUserIds);\n if (undefined === tile.tileUserIds)\n this.moveBeforeSentinel(tile);\n else\n prev = tile;\n }\n }\n\n /** Dispose of the contents of tiles currently not selected for display until the total amount of memory consumed is no more than `maxBytes`\n * or until the contents of all un-selected tiles have been disposed.\n */\n public freeMemory(maxBytes: number): void {\n let prev: LRUTileListNode | undefined = this._head;\n while (prev && prev !== this._sentinel && this.totalBytesUsed > maxBytes) {\n const tile = prev as Tile;\n prev = tile.next;\n tile.freeMemory();\n\n // Some tiles (ImageryMapTile) use reference-counting, in which case freeMemory() may not actually free the contents.\n // If the contents *were* disposed, then `this.drop` will have been called, and `tile` is no longer in the list.\n // Otherwise, `tile` remains in the list. Either way, we proceed to the next entry in the list.\n assert((this.computeBytesUsed(tile) > 0) === isLinked(tile));\n }\n }\n\n /** Iterate over all of the tiles in the unselected partition. */\n public get unselectedTiles(): Iterable<Tile> {\n const start = this._head === this._sentinel ? undefined : this._head as Tile | undefined;\n return {\n [Symbol.iterator]: () => lruListIterator(start, this._sentinel),\n };\n }\n\n /** Iterate over all of the tiles in the selected partition. */\n public get selectedTiles(): Iterable<Tile> {\n return {\n [Symbol.iterator]: () => lruListIterator(this._sentinel.next as Tile | undefined, undefined),\n };\n }\n\n protected computeBytesUsed(tile: Tile): number {\n this._stats.clear();\n tile.collectStatistics(this._stats, false);\n return this._stats.totalBytes;\n }\n\n protected assertList(): void {\n assert(this._head !== undefined);\n assert(this._tail !== undefined);\n }\n\n protected append(tile: Tile): void {\n assert(!isLinked(tile));\n if (isLinked(tile))\n this.unlink(tile);\n\n this._tail.next = tile;\n tile.previous = this._tail;\n this._tail = tile;\n }\n\n protected unlink(tile: Tile): void {\n assert(isLinked(tile));\n if (!isLinked(tile))\n return;\n\n if (tile.next && tile.previous) {\n assert(tile !== this._head);\n assert(tile !== this._tail);\n assert(tile.previous.next === tile);\n assert(tile.next.previous === tile);\n\n tile.previous.next = tile.next;\n tile.next.previous = tile.previous;\n } else if (tile.previous) {\n assert(tile === this._tail);\n assert(undefined === tile.next);\n assert(tile.previous.next === tile);\n\n tile.previous.next = undefined;\n this._tail = tile.previous;\n } else {\n assert(tile === this._head);\n assert(undefined !== tile.next);\n assert(tile.next.previous === tile);\n\n tile.next.previous = undefined;\n this._head = tile.next;\n }\n\n tile.next = tile.previous = undefined;\n this.assertList();\n }\n\n protected moveToEnd(tile: Tile): void {\n this.unlink(tile);\n this.append(tile);\n }\n\n protected moveBeforeSentinel(tile: Tile): void {\n this.unlink(tile);\n tile.previous = this._sentinel.previous;\n this._sentinel.previous = tile;\n tile.next = this._sentinel;\n\n if (!tile.previous)\n this._head = tile;\n else\n tile.previous.next = tile;\n }\n}\n"]}
1
+ {"version":3,"file":"LRUTileList.js","sourceRoot":"","sources":["../../../src/tile/LRUTileList.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { assert, ReadonlySortedArray, SortedArray } from \"@itwin/core-bentley\";\r\nimport { RenderMemory } from \"../render/RenderMemory\";\r\nimport { Tile } from \"./internal\";\r\n\r\n/** Maintains in sorted order a set of [[TileUser]] Ids for which a given tile has been selected for display. The number of users in a set is expected to be very small - often only 1 for a typical application.\r\n * Strictly for use by LRUTileList.\r\n * @see TileUserIdSets.\r\n * @internal\r\n */\r\nexport class TileUserIdSet extends ReadonlySortedArray<number> {\r\n public constructor(userId?: number) {\r\n super((lhs, rhs) => lhs - rhs);\r\n if (undefined !== userId)\r\n this._array.push(userId);\r\n }\r\n\r\n public equals(set: TileUserIdSet): boolean {\r\n if (this.length !== set.length)\r\n return false;\r\n\r\n for (let i = 0; i < this.length; i++)\r\n if (this._array[i] !== set._array[i])\r\n return false;\r\n\r\n return true;\r\n }\r\n\r\n public add(userId: number): void {\r\n this._insert(userId);\r\n }\r\n\r\n public drop(userId: number): void {\r\n this._remove(userId);\r\n }\r\n\r\n public clear(): void {\r\n this._clear();\r\n }\r\n\r\n public copyFrom(src: TileUserIdSet): void {\r\n this._array.length = src.length;\r\n let i = 0;\r\n for (const userId of src)\r\n this._array[i++] = userId;\r\n }\r\n\r\n public clone(): TileUserIdSet {\r\n const clone = new TileUserIdSet();\r\n clone.copyFrom(this);\r\n return clone;\r\n }\r\n}\r\n\r\n/** Maintains a set of TileUserIdSets such that each set represents a unique combination of TileUser ids and each set contains at least one TileUser id.\r\n * Exported strictly for tests.\r\n * @see LRUTileList.\r\n * @internal\r\n */\r\nexport class TileUserIdSets extends SortedArray<TileUserIdSet> {\r\n private readonly _scratch = new TileUserIdSet();\r\n\r\n public constructor() {\r\n super((lhs, rhs) => {\r\n if (lhs === rhs)\r\n return 0;\r\n\r\n let diff = lhs.length - rhs.length;\r\n if (0 !== diff)\r\n return diff;\r\n\r\n for (let i = 0; i < lhs.length; i++) {\r\n const lhId = lhs.get(i)!;\r\n const rhId = rhs.get(i)!;\r\n diff = lhId - rhId;\r\n if (0 !== diff)\r\n return diff;\r\n }\r\n\r\n return 0;\r\n });\r\n }\r\n\r\n /** Remove the specified TileUser Id from all sets and remove empty and duplicate sets. */\r\n public drop(userId: number): void {\r\n // Remove from all sets, and delete empty sets.\r\n let i = 0;\r\n for (/* */; i < this._array.length; i++) {\r\n const set = this._array[i];\r\n set.drop(userId);\r\n if (set.length === 0)\r\n this._array.splice(i, 1);\r\n }\r\n\r\n // Collapse equivalent sets.\r\n i = 0;\r\n for (let j = 1; j < this._array.length; /* */) {\r\n if (this._array[i].equals(this._array[j])) {\r\n this._array.splice(i, 1);\r\n } else {\r\n i++;\r\n j++;\r\n }\r\n }\r\n }\r\n\r\n /** Obtain a TileUserIdSet owned by this object containing userId and (if specified) userIds. */\r\n public plus(userId: number, userIds?: TileUserIdSet): TileUserIdSet {\r\n const scratch = this.scratch(userIds);\r\n scratch.add(userId);\r\n return this.getEquivalent(scratch);\r\n }\r\n\r\n /** Obtain a TileUserIdSet owned by this object containing all of userIds (if specified) but not userId. Returns undefined if the resultant set would be empty. */\r\n public minus(userId: number, userIds?: TileUserIdSet): TileUserIdSet | undefined {\r\n const scratch = this.scratch(userIds);\r\n scratch.drop(userId);\r\n return scratch.length > 0 ? this.getEquivalent(scratch) : undefined;\r\n }\r\n\r\n private scratch(userIds?: TileUserIdSet): TileUserIdSet {\r\n const scratch = this._scratch;\r\n if (userIds)\r\n scratch.copyFrom(userIds);\r\n else\r\n scratch.clear();\r\n\r\n return scratch;\r\n }\r\n\r\n private getEquivalent(sought: TileUserIdSet): TileUserIdSet {\r\n assert(sought.length > 0);\r\n\r\n for (const set of this)\r\n if (set.equals(sought))\r\n return set;\r\n\r\n const newSet = sought.clone();\r\n this.insert(newSet);\r\n return newSet;\r\n }\r\n}\r\n\r\n/** A node in an LRUTileList. It is either a [[Tile]], or a sentinel node used to partition the list.\r\n * Strictly for use by LRUTileList.\r\n * @internal\r\n */\r\nexport interface LRUTileListNode {\r\n previous?: LRUTileListNode;\r\n next?: LRUTileListNode;\r\n /** The number of bytes of GPU memory allocated to the tile's content. The only node in a LRUTileListNode with `bytesUsed` less than 1 is the sentinel node. */\r\n bytesUsed: number;\r\n /** For a tile, the Ids of all of the TileUsers for which the tile is currently in use. The TileUserIdSet is owned by the LRUTileList's TileUserIdSets member.\r\n * Undefined if the tile is not in use by any TileUser.\r\n */\r\n tileUserIds?: TileUserIdSet | undefined;\r\n}\r\n\r\nfunction isLinked(node: LRUTileListNode): boolean {\r\n return undefined !== node.previous || undefined !== node.next;\r\n}\r\n\r\nfunction* lruListIterator(start: Tile | undefined, end: LRUTileListNode | undefined): Iterator<Tile> {\r\n let cur = start;\r\n while (cur && cur !== end) {\r\n const prev = cur;\r\n cur = cur.next as Tile | undefined;\r\n yield prev;\r\n }\r\n}\r\n\r\n/** An intrusive doubly-linked list of LRUTileListNodes, containing Tiles partitioned by a singleton sentinel node into two partitions and ordered from least-recently- to most-recently-used by any TileUser.\r\n * Used by TileAdmin to keep track of and impose limits upon the total amount of GPU memory allocated to tile content.\r\n *\r\n * Illustration of the structure of the list:\r\n *\r\n * ```\r\n * v------------- Not selected --------------v v----------------- Selected ------------------v\r\n * ______ ______ __________ ______ ______\r\n * | head |.next => | |.next => ... | sentinel |.next => ... | |.next => | tail |\r\n * | 12kb | | 8kb | | 0kb | | 19kb | | 23kb |\r\n * |______| <= previous.|______| ... <= previous.|__________| ... <= previous.|______| <= previous.|______|\r\n *\r\n * least-recently-selected --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> --> most-recently-selected\r\n * ```\r\n *\r\n * The sentinel node is always present and floats freely as the contents of each partition change. Note that the `next` and `previous` pointers are stored directly on the tiles - no link nodes are allocated to hold the entries in the list. This of course means that a Tile can only ever belong to one LRUTileList - the one owned by the TileAdmin.\r\n *\r\n * The list contains only those tiles whose content has been loaded. Each node records the amount of GPU memory allocated for the tile's content. The list keeps track of the total amount of GPU memory allocated by all tiles. The list's contents are updated as follows:\r\n *\r\n * - When a tile's content is loaded, it is added to the end of the \"not selected\" partition. Its memory usage is computed and added to the list's total.\r\n * - When a tile's content is unloaded, it is removed from the list. Its memory usage is deducted from the list's totla.\r\n * - Just before a TileUser selects tiles for use (e.g., Viewport selects tiles for display), it is removed from each tile's set of viewports in which they are selected. If a tile's set of users becomes empty as a result, it is moved to the end of the \"not selected\" partition.\r\n * - When a tile becomes selected for use by a TileUser, the user is added to its user set and the tile is moved to the end of the \"selected\" partition.\r\n *\r\n * When the system determines that GPU memory should be freed up, it can simply pop nodes off the beginning of the \"not selected\" partition, freeing their content, until the target memory usage is reached or no more non-selected nodes exist.\r\n *\r\n * Strictly for use by [[TileAdmin]].\r\n * @internal\r\n */\r\nexport class LRUTileList {\r\n protected readonly _sentinel: LRUTileListNode;\r\n protected readonly _stats = new RenderMemory.Statistics();\r\n protected readonly _userIdSets = new TileUserIdSets();\r\n protected _head: LRUTileListNode;\r\n protected _tail: LRUTileListNode;\r\n protected _totalBytesUsed = 0;\r\n\r\n /** The amount of GPU memory, in bytes, allocated to all tiles in the list. */\r\n public get totalBytesUsed(): number {\r\n return this._totalBytesUsed;\r\n }\r\n\r\n public constructor() {\r\n this._head = this._tail = this._sentinel = { bytesUsed: 0 };\r\n }\r\n\r\n public dispose(): void {\r\n let node: LRUTileListNode | undefined = this._head;\r\n let next: LRUTileListNode | undefined;\r\n while (node) {\r\n next = node.next;\r\n node.previous = node.next = undefined;\r\n node.bytesUsed = 0;\r\n node.tileUserIds = undefined;\r\n node = next;\r\n }\r\n\r\n this._head = this._tail = this._sentinel;\r\n this._totalBytesUsed = 0;\r\n this._userIdSets.clear();\r\n }\r\n\r\n /** Compute the amount of GPU memory allocated to the tile's content and, if greater than zero, add the tile to the end of the \"not selected\" partition.\r\n * Invoked by TileAdmin whenever a tile's content is set to a valid RenderGraphic.\r\n */\r\n public add(tile: Tile): void {\r\n assert(!isLinked(tile));\r\n if (isLinked(tile))\r\n return;\r\n\r\n assert(tile.bytesUsed === 0);\r\n assert(tile.tileUserIds === undefined);\r\n\r\n this._stats.clear();\r\n tile.collectStatistics(this._stats, false);\r\n tile.bytesUsed = this.computeBytesUsed(tile);\r\n assert(tile.bytesUsed >= 0);\r\n assert(tile.bytesUsed === Math.floor(tile.bytesUsed));\r\n\r\n if (tile.bytesUsed <= 0)\r\n return;\r\n\r\n // Insert just before the sentinel, indicating this is the most-recently-used non-selected tile.\r\n this._totalBytesUsed += tile.bytesUsed;\r\n this.append(tile);\r\n this.moveBeforeSentinel(tile);\r\n }\r\n\r\n /** Remove the tile from the list and deduct its previously-used GPU memory from the list's running total.\r\n * Invoked by TileAdmin when a tile's content is unloaded, including when the list itself disposes of the content in its `freeMemory` method.\r\n */\r\n public drop(tile: Tile): void {\r\n assert(isLinked(tile) || tile.bytesUsed === 0);\r\n if (!isLinked(tile))\r\n return;\r\n\r\n assert(tile.bytesUsed > 0);\r\n this._totalBytesUsed -= tile.bytesUsed;\r\n assert(this._totalBytesUsed >= 0);\r\n\r\n this.unlink(tile);\r\n tile.tileUserIds = undefined;\r\n tile.bytesUsed = 0;\r\n\r\n this.assertList();\r\n }\r\n\r\n /** Mark the tiles as in use by the specified TileUser. They are moved to the end of the \"selected\" partition. */\r\n public markUsed(userId: number, tiles: Iterable<Tile>): void {\r\n for (const tile of tiles) {\r\n if (tile.bytesUsed <= 0)\r\n continue;\r\n\r\n assert(isLinked(tile));\r\n\r\n if (isLinked(tile)) {\r\n tile.tileUserIds = this._userIdSets.plus(userId, tile.tileUserIds);\r\n this.moveToEnd(tile);\r\n }\r\n }\r\n }\r\n\r\n /** Mark the tiles as no longer in user by the specified TileUser.\r\n * If this results in a tile being no longer selected for any user, it is moved to the end of the \"not selected\" partition.\r\n */\r\n public clearUsed(userId: number): void {\r\n this._userIdSets.drop(userId);\r\n let prev: LRUTileListNode | undefined = this._sentinel;\r\n while (prev && prev.next) {\r\n const tile = prev.next as Tile;\r\n assert(tile !== this._sentinel);\r\n tile.tileUserIds = this._userIdSets.minus(userId, tile.tileUserIds);\r\n if (undefined === tile.tileUserIds)\r\n this.moveBeforeSentinel(tile);\r\n else\r\n prev = tile;\r\n }\r\n }\r\n\r\n /** Dispose of the contents of tiles currently not selected for display until the total amount of memory consumed is no more than `maxBytes`\r\n * or until the contents of all un-selected tiles have been disposed.\r\n */\r\n public freeMemory(maxBytes: number): void {\r\n let prev: LRUTileListNode | undefined = this._head;\r\n while (prev && prev !== this._sentinel && this.totalBytesUsed > maxBytes) {\r\n const tile = prev as Tile;\r\n prev = tile.next;\r\n tile.freeMemory();\r\n\r\n // Some tiles (ImageryMapTile) use reference-counting, in which case freeMemory() may not actually free the contents.\r\n // If the contents *were* disposed, then `this.drop` will have been called, and `tile` is no longer in the list.\r\n // Otherwise, `tile` remains in the list. Either way, we proceed to the next entry in the list.\r\n assert((this.computeBytesUsed(tile) > 0) === isLinked(tile));\r\n }\r\n }\r\n\r\n /** Iterate over all of the tiles in the unselected partition. */\r\n public get unselectedTiles(): Iterable<Tile> {\r\n const start = this._head === this._sentinel ? undefined : this._head as Tile | undefined;\r\n return {\r\n [Symbol.iterator]: () => lruListIterator(start, this._sentinel),\r\n };\r\n }\r\n\r\n /** Iterate over all of the tiles in the selected partition. */\r\n public get selectedTiles(): Iterable<Tile> {\r\n return {\r\n [Symbol.iterator]: () => lruListIterator(this._sentinel.next as Tile | undefined, undefined),\r\n };\r\n }\r\n\r\n protected computeBytesUsed(tile: Tile): number {\r\n this._stats.clear();\r\n tile.collectStatistics(this._stats, false);\r\n return this._stats.totalBytes;\r\n }\r\n\r\n protected assertList(): void {\r\n assert(this._head !== undefined);\r\n assert(this._tail !== undefined);\r\n }\r\n\r\n protected append(tile: Tile): void {\r\n assert(!isLinked(tile));\r\n if (isLinked(tile))\r\n this.unlink(tile);\r\n\r\n this._tail.next = tile;\r\n tile.previous = this._tail;\r\n this._tail = tile;\r\n }\r\n\r\n protected unlink(tile: Tile): void {\r\n assert(isLinked(tile));\r\n if (!isLinked(tile))\r\n return;\r\n\r\n if (tile.next && tile.previous) {\r\n assert(tile !== this._head);\r\n assert(tile !== this._tail);\r\n assert(tile.previous.next === tile);\r\n assert(tile.next.previous === tile);\r\n\r\n tile.previous.next = tile.next;\r\n tile.next.previous = tile.previous;\r\n } else if (tile.previous) {\r\n assert(tile === this._tail);\r\n assert(undefined === tile.next);\r\n assert(tile.previous.next === tile);\r\n\r\n tile.previous.next = undefined;\r\n this._tail = tile.previous;\r\n } else {\r\n assert(tile === this._head);\r\n assert(undefined !== tile.next);\r\n assert(tile.next.previous === tile);\r\n\r\n tile.next.previous = undefined;\r\n this._head = tile.next;\r\n }\r\n\r\n tile.next = tile.previous = undefined;\r\n this.assertList();\r\n }\r\n\r\n protected moveToEnd(tile: Tile): void {\r\n this.unlink(tile);\r\n this.append(tile);\r\n }\r\n\r\n protected moveBeforeSentinel(tile: Tile): void {\r\n this.unlink(tile);\r\n tile.previous = this._sentinel.previous;\r\n this._sentinel.previous = tile;\r\n tile.next = this._sentinel;\r\n\r\n if (!tile.previous)\r\n this._head = tile;\r\n else\r\n tile.previous.next = tile;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"OPCFormatInterpreter.js","sourceRoot":"","sources":["../../../src/tile/OPCFormatInterpreter.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { Cartographic, EcefLocation } from \"@itwin/core-common\";\nimport { Range3d } from \"@itwin/core-geometry\";\nimport { ALong, CRSManager, Downloader, DownloaderXhr, OnlineEngine, OPCReader, OrbitGtBounds, PageCachedFile, PointCloudReader, UrlFS } from \"@itwin/core-orbitgt\";\nimport { FrontendLoggerCategory } from \"../common/FrontendLoggerCategory\";\nimport { BentleyError, Logger, LoggingMetaData, RealityDataStatus } from \"@itwin/core-bentley\";\nimport { RealityDataError, SpatialLocationAndExtents } from \"../RealityDataSource\";\n\nconst loggerCategory: string = FrontendLoggerCategory.RealityData;\n\n/**\n * This class provide methods used to interpret Orbit Point Cloud (OPC) format\n * @internal\n */\nexport class OPCFormatInterpreter {\n /** Gets an OPC file reader from a blobFileUrl\n * @param blobFileURL the name of the file.\n * @returns return a file reader open to read provided blob file\n * @internal\n */\n public static async getFileReaderFromBlobFileURL(blobFileURL: string): Promise<PointCloudReader> {\n if (Downloader.INSTANCE == null)\n Downloader.INSTANCE = new DownloaderXhr();\n if (CRSManager.ENGINE == null)\n CRSManager.ENGINE = await OnlineEngine.create();\n\n // let blobFileURL: string = rdUrl;\n // if (accountName.length > 0) blobFileURL = UrlFS.getAzureBlobSasUrl(opcConfig.accountName, opcConfig.containerName, opcConfig.blobFileName, opcConfig.sasToken);\n const urlFS: UrlFS = new UrlFS();\n // wrap a caching layer (16 MB) around the blob file\n const blobFileSize: ALong = await urlFS.getFileLength(blobFileURL);\n Logger.logTrace(loggerCategory, `OPC File Size is ${blobFileSize}`);\n const blobFile: PageCachedFile = new PageCachedFile(urlFS, blobFileURL, blobFileSize, 128 * 1024 /* pageSize */, 128 /* maxPageCount */);\n const fileReader: PointCloudReader = await OPCReader.openFile(blobFile, blobFileURL, true/* lazyLoading */);\n return fileReader;\n }\n\n /** Gets reality data spatial location and extents\n * @param fileReader a file reader instance obtains from call to getFileReaderFromBlobFileURL\n * @returns spatial location and volume of interest, in meters, centered around `spatial location`\n * @throws [[RealityDataError]] if source is invalid or cannot be read\n * @internal\n */\n public static async getSpatialLocationAndExtents(fileReader: PointCloudReader): Promise<SpatialLocationAndExtents> {\n let worldRange = new Range3d();\n let location: Cartographic | EcefLocation;\n let isGeolocated = true;\n\n const bounds = fileReader.getFileBounds();\n worldRange = Range3d.createXYZXYZ(bounds.getMinX(), bounds.getMinY(), bounds.getMinZ(), bounds.getMaxX(), bounds.getMaxY(), bounds.getMaxZ());\n isGeolocated = false;\n const fileCrs = fileReader.getFileCRS();\n if (fileCrs) {\n try {\n await CRSManager.ENGINE.prepareForArea(fileCrs, bounds);\n const wgs84ECEFCrs = \"4978\";\n await CRSManager.ENGINE.prepareForArea(wgs84ECEFCrs, new OrbitGtBounds());\n\n const ecefBounds = CRSManager.transformBounds(bounds, fileCrs, wgs84ECEFCrs);\n const ecefRange = Range3d.createXYZXYZ(ecefBounds.getMinX(), ecefBounds.getMinY(), ecefBounds.getMinZ(), ecefBounds.getMaxX(), ecefBounds.getMaxY(), ecefBounds.getMaxZ());\n const ecefCenter = ecefRange.localXYZToWorld(.5, .5, .5)!;\n const cartoCenter = Cartographic.fromEcef(ecefCenter)!;\n cartoCenter.height = 0;\n const ecefLocation = EcefLocation.createFromCartographicOrigin(cartoCenter);\n location = ecefLocation;\n // this.iModelDb.setEcefLocation(ecefLocation);\n const ecefToWorld = ecefLocation.getTransform().inverse()!;\n worldRange = ecefToWorld.multiplyRange(ecefRange);\n isGeolocated = true;\n } catch (e) {\n Logger.logWarning(loggerCategory, `Error getSpatialLocationAndExtents - cannot interpret point cloud`);\n const errorProps = BentleyError.getErrorProps(e);\n const getMetaData: LoggingMetaData = () => {\n return { errorProps };\n };\n const error = new RealityDataError(RealityDataStatus.InvalidData, \"Invalid or unknown data\", getMetaData);\n throw error;\n }\n } else {\n // NoGCS case\n isGeolocated = false;\n const centerOfEarth = new EcefLocation({ origin: { x: 0.0, y: 0.0, z: 0.0 }, orientation: { yaw: 0.0, pitch: 0.0, roll: 0.0 } });\n location = centerOfEarth;\n Logger.logTrace(loggerCategory, \"OPC RealityData NOT Geolocated\", () => ({ ...location }));\n }\n const spatialLocation: SpatialLocationAndExtents = { location, worldRange, isGeolocated };\n return spatialLocation;\n }\n}\n\n"]}
1
+ {"version":3,"file":"OPCFormatInterpreter.js","sourceRoot":"","sources":["../../../src/tile/OPCFormatInterpreter.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { Cartographic, EcefLocation } from \"@itwin/core-common\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { ALong, CRSManager, Downloader, DownloaderXhr, OnlineEngine, OPCReader, OrbitGtBounds, PageCachedFile, PointCloudReader, UrlFS } from \"@itwin/core-orbitgt\";\r\nimport { FrontendLoggerCategory } from \"../common/FrontendLoggerCategory\";\r\nimport { BentleyError, Logger, LoggingMetaData, RealityDataStatus } from \"@itwin/core-bentley\";\r\nimport { RealityDataError, SpatialLocationAndExtents } from \"../RealityDataSource\";\r\n\r\nconst loggerCategory: string = FrontendLoggerCategory.RealityData;\r\n\r\n/**\r\n * This class provide methods used to interpret Orbit Point Cloud (OPC) format\r\n * @internal\r\n */\r\nexport class OPCFormatInterpreter {\r\n /** Gets an OPC file reader from a blobFileUrl\r\n * @param blobFileURL the name of the file.\r\n * @returns return a file reader open to read provided blob file\r\n * @internal\r\n */\r\n public static async getFileReaderFromBlobFileURL(blobFileURL: string): Promise<PointCloudReader> {\r\n if (Downloader.INSTANCE == null)\r\n Downloader.INSTANCE = new DownloaderXhr();\r\n if (CRSManager.ENGINE == null)\r\n CRSManager.ENGINE = await OnlineEngine.create();\r\n\r\n // let blobFileURL: string = rdUrl;\r\n // if (accountName.length > 0) blobFileURL = UrlFS.getAzureBlobSasUrl(opcConfig.accountName, opcConfig.containerName, opcConfig.blobFileName, opcConfig.sasToken);\r\n const urlFS: UrlFS = new UrlFS();\r\n // wrap a caching layer (16 MB) around the blob file\r\n const blobFileSize: ALong = await urlFS.getFileLength(blobFileURL);\r\n Logger.logTrace(loggerCategory, `OPC File Size is ${blobFileSize}`);\r\n const blobFile: PageCachedFile = new PageCachedFile(urlFS, blobFileURL, blobFileSize, 128 * 1024 /* pageSize */, 128 /* maxPageCount */);\r\n const fileReader: PointCloudReader = await OPCReader.openFile(blobFile, blobFileURL, true/* lazyLoading */);\r\n return fileReader;\r\n }\r\n\r\n /** Gets reality data spatial location and extents\r\n * @param fileReader a file reader instance obtains from call to getFileReaderFromBlobFileURL\r\n * @returns spatial location and volume of interest, in meters, centered around `spatial location`\r\n * @throws [[RealityDataError]] if source is invalid or cannot be read\r\n * @internal\r\n */\r\n public static async getSpatialLocationAndExtents(fileReader: PointCloudReader): Promise<SpatialLocationAndExtents> {\r\n let worldRange = new Range3d();\r\n let location: Cartographic | EcefLocation;\r\n let isGeolocated = true;\r\n\r\n const bounds = fileReader.getFileBounds();\r\n worldRange = Range3d.createXYZXYZ(bounds.getMinX(), bounds.getMinY(), bounds.getMinZ(), bounds.getMaxX(), bounds.getMaxY(), bounds.getMaxZ());\r\n isGeolocated = false;\r\n const fileCrs = fileReader.getFileCRS();\r\n if (fileCrs) {\r\n try {\r\n await CRSManager.ENGINE.prepareForArea(fileCrs, bounds);\r\n const wgs84ECEFCrs = \"4978\";\r\n await CRSManager.ENGINE.prepareForArea(wgs84ECEFCrs, new OrbitGtBounds());\r\n\r\n const ecefBounds = CRSManager.transformBounds(bounds, fileCrs, wgs84ECEFCrs);\r\n const ecefRange = Range3d.createXYZXYZ(ecefBounds.getMinX(), ecefBounds.getMinY(), ecefBounds.getMinZ(), ecefBounds.getMaxX(), ecefBounds.getMaxY(), ecefBounds.getMaxZ());\r\n const ecefCenter = ecefRange.localXYZToWorld(.5, .5, .5)!;\r\n const cartoCenter = Cartographic.fromEcef(ecefCenter)!;\r\n cartoCenter.height = 0;\r\n const ecefLocation = EcefLocation.createFromCartographicOrigin(cartoCenter);\r\n location = ecefLocation;\r\n // this.iModelDb.setEcefLocation(ecefLocation);\r\n const ecefToWorld = ecefLocation.getTransform().inverse()!;\r\n worldRange = ecefToWorld.multiplyRange(ecefRange);\r\n isGeolocated = true;\r\n } catch (e) {\r\n Logger.logWarning(loggerCategory, `Error getSpatialLocationAndExtents - cannot interpret point cloud`);\r\n const errorProps = BentleyError.getErrorProps(e);\r\n const getMetaData: LoggingMetaData = () => {\r\n return { errorProps };\r\n };\r\n const error = new RealityDataError(RealityDataStatus.InvalidData, \"Invalid or unknown data\", getMetaData);\r\n throw error;\r\n }\r\n } else {\r\n // NoGCS case\r\n isGeolocated = false;\r\n const centerOfEarth = new EcefLocation({ origin: { x: 0.0, y: 0.0, z: 0.0 }, orientation: { yaw: 0.0, pitch: 0.0, roll: 0.0 } });\r\n location = centerOfEarth;\r\n Logger.logTrace(loggerCategory, \"OPC RealityData NOT Geolocated\", () => ({ ...location }));\r\n }\r\n const spatialLocation: SpatialLocationAndExtents = { location, worldRange, isGeolocated };\r\n return spatialLocation;\r\n }\r\n}\r\n\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PntsReader.js","sourceRoot":"","sources":["../../../src/tile/PntsReader.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 Tiles\n */\n\nimport { ByteStream, Id64String, Logger, utf8ToString } from \"@itwin/core-bentley\";\nimport { Point3d, Range3d } from \"@itwin/core-geometry\";\nimport { BatchType, Feature, FeatureTable, PackedFeatureTable, PntsHeader, QParams3d, QPoint3d, Quantization } from \"@itwin/core-common\";\nimport { FrontendLoggerCategory } from \"../common/FrontendLoggerCategory\";\nimport { IModelConnection } from \"../IModelConnection\";\nimport { Mesh } from \"../render/primitives/mesh/MeshPrimitives\";\nimport { RenderGraphic } from \"../render/RenderGraphic\";\nimport { RenderSystem } from \"../render/RenderSystem\";\nimport { RealityTile } from \"./internal\";\n\n/** Schema for the [3DTILES_draco_point_compression](https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_draco_point_compression) extension. */\ninterface DracoPointCloud {\n byteLength: number;\n byteOffset: number;\n /** Each specifies the Id of a compressed attribute. */\n properties: {\n POSITION?: number; // eslint-disable-line @typescript-eslint/naming-convention\n RGB?: number; // eslint-disable-line @typescript-eslint/naming-convention\n RGBA?: number; // eslint-disable-line @typescript-eslint/naming-convention\n NORMAL?: number; // eslint-disable-line @typescript-eslint/naming-convention\n BATCH_ID?: number; // eslint-disable-line @typescript-eslint/naming-convention\n /** This is not in the spec but is present in sample data in Cesium's git repository. */\n COLOR_0?: number; // eslint-disable-line @typescript-eslint/naming-convention\n };\n}\n\ninterface PointCloudProps {\n params: QParams3d;\n points: Uint16Array | Float32Array;\n colors?: Uint8Array;\n}\n\ninterface BinaryBodyReference {\n byteOffset: number;\n}\n\n/** [3D tiles specification section 10.3](https://docs.opengeospatial.org/cs/18-053r2/18-053r2.html#199).\n * [JSON schema](https://github.com/CesiumGS/3d-tiles/blob/main/specification/schema/pnts.featureTable.schema.json).\n */\ninterface CommonPntsProps {\n POINTS_LENGTH: number; // eslint-disable-line @typescript-eslint/naming-convention\n RTC_CENTER?: number[]; // eslint-disable-line @typescript-eslint/naming-convention\n CONSTANT_RGBA?: number[]; // eslint-disable-line @typescript-eslint/naming-convention\n RGB?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\n RGBA?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\n RGB565?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\n\n extensions?: {\n \"3DTILES_draco_point_compression\"?: DracoPointCloud; // eslint-disable-line @typescript-eslint/naming-convention\n };\n\n // The following are currently ignored.\n NORMAL?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\n NORMAL_OCT16P?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\n BATCH_ID?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\n BATCH_LENGTH?: number; // eslint-disable-line @typescript-eslint/naming-convention\n}\n\ntype QuantizedPntsProps = CommonPntsProps & {\n POSITION_QUANTIZED: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\n QUANTIZED_VOLUME_OFFSET: number[]; // eslint-disable-line @typescript-eslint/naming-convention\n QUANTIZED_VOLUME_SCALE: number[]; // eslint-disable-line @typescript-eslint/naming-convention\n\n POSITION?: never; // eslint-disable-line @typescript-eslint/naming-convention\n};\n\ntype UnquantizedPntsProps = CommonPntsProps & {\n POSITION: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\n\n POSITION_QUANTIZED?: never; // eslint-disable-line @typescript-eslint/naming-convention\n QUANTIZED_VOLUME_OFFSET?: never; // eslint-disable-line @typescript-eslint/naming-convention\n QUANTIZED_VOLUME_SCALE?: never; // eslint-disable-line @typescript-eslint/naming-convention\n};\n\ntype PntsProps = QuantizedPntsProps | UnquantizedPntsProps;\n\nfunction readPntsColors(stream: ByteStream, dataOffset: number, pnts: PntsProps): Uint8Array | undefined {\n const nPts = pnts.POINTS_LENGTH;\n const nComponents = 3 * nPts;\n if (pnts.RGB)\n return new Uint8Array(stream.arrayBuffer, dataOffset + pnts.RGB.byteOffset, nComponents);\n\n if (pnts.RGBA) {\n // ###TODO support point cloud transparency.\n const rgb = new Uint8Array(nComponents);\n const rgba = new Uint8Array(stream.arrayBuffer, dataOffset + pnts.RGBA.byteOffset, nComponents);\n for (let i = 0; i < nComponents; i += 4) {\n rgb[i + 0] = rgba[i + 0];\n rgb[i + 1] = rgba[i + 1];\n rgb[i + 2] = rgba[i + 2];\n }\n\n return rgb;\n } else if (pnts.RGB565) {\n // Each color is 16 bits: 5 red, 6 green, 5 blue.\n const crgb = new Uint16Array(stream.arrayBuffer, dataOffset + pnts.RGB565.byteOffset, nPts);\n const rgb = new Uint8Array(nComponents);\n for (let i = 0; i < nPts; i++) {\n const c = crgb[i];\n rgb[i + 0] = (c >> 11) & 0x1f;\n rgb[i + 1] = (c >> 5) & 0x3f;\n rgb[i + 2] = c & 0x1f;\n }\n\n return rgb;\n }\n\n return undefined;\n}\n\nfunction readPnts(stream: ByteStream, dataOffset: number, pnts: PntsProps): PointCloudProps | undefined {\n const nPts = pnts.POINTS_LENGTH;\n let params: QParams3d;\n let points: Uint16Array | Float32Array;\n\n if (pnts.POSITION_QUANTIZED) {\n const qpos = pnts.POSITION_QUANTIZED;\n const offset = pnts.QUANTIZED_VOLUME_OFFSET;\n const scale = pnts.QUANTIZED_VOLUME_SCALE;\n\n const qOrigin = new Point3d(offset[0], offset[1], offset[2]);\n const qScale = new Point3d(Quantization.computeScale(scale[0]), Quantization.computeScale(scale[1]), Quantization.computeScale(scale[2]));\n\n params = QParams3d.fromOriginAndScale(qOrigin, qScale);\n points = new Uint16Array(stream.arrayBuffer, dataOffset + qpos.byteOffset, 3 * nPts);\n } else {\n const qOrigin = new Point3d(0, 0, 0);\n const qScale = new Point3d(1, 1, 1);\n params = QParams3d.fromOriginAndScale(qOrigin, qScale);\n points = new Float32Array(stream.arrayBuffer, dataOffset + pnts.POSITION.byteOffset, 3 * nPts);\n }\n\n const colors = readPntsColors(stream, dataOffset, pnts);\n return { params, points, colors };\n}\n\nasync function decodeDracoPointCloud(buf: Uint8Array): Promise<PointCloudProps | undefined> {\n try {\n const dracoLoader = (await import(\"@loaders.gl/draco\")).DracoLoader;\n const mesh = await dracoLoader.parse(buf, {});\n if (mesh.topology !== \"point-list\")\n return undefined;\n\n const pos = mesh.attributes.POSITION?.value;\n if (!pos || (pos.length % 3) !== 0)\n return undefined;\n\n let colors = mesh.attributes.RGB?.value ?? mesh.attributes.COLOR_0?.value;\n if (!colors) {\n // ###TODO support point cloud transparency.\n const rgba = mesh.attributes.RGBA?.value;\n if (rgba && (rgba.length % 4) === 0) {\n // We currently don't support alpha channel for point clouds - strip it.\n colors = new Uint8Array(3 * rgba.length / 4);\n let j = 0;\n for (let i = 0; i < rgba.length; i += 4) {\n colors[j++] = rgba[i];\n colors[j++] = rgba[i + 1];\n colors[j++] = rgba[i + 2];\n }\n }\n }\n\n let posRange: Range3d;\n const bbox = mesh.header?.boundingBox;\n if (bbox) {\n posRange = Range3d.createXYZXYZ(bbox[0][0], bbox[0][1], bbox[0][2], bbox[1][0], bbox[1][1], bbox[1][2]);\n } else {\n posRange = Range3d.createNull();\n for (let i = 0; i < pos.length; i += 3)\n posRange.extendXYZ(pos[i], pos[i + 1], pos[i + 2]);\n }\n\n const params = QParams3d.fromRange(posRange);\n const pt = Point3d.createZero();\n const qpt = QPoint3d.create(pt, params);\n const points = new Uint16Array(pos.length);\n for (let i = 0; i < pos.length; i += 3) {\n pt.set(pos[i], pos[i + 1], pos[i + 2]);\n qpt.init(pt, params);\n points[i] = qpt.x;\n points[i + 1] = qpt.y;\n points[i + 2] = qpt.z;\n }\n\n return { points, params, colors: colors instanceof Uint8Array ? colors : undefined };\n } catch (err) {\n Logger.logWarning(FrontendLoggerCategory.Render, \"Failed to decode draco-encoded point cloud\");\n Logger.logException(FrontendLoggerCategory.Render, err);\n return undefined;\n }\n}\n\n/** Deserialize a point cloud tile and return it as a RenderGraphic.\n * @internal\n */\nexport async function readPointCloudTileContent(stream: ByteStream, iModel: IModelConnection, modelId: Id64String, _is3d: boolean, tile: RealityTile, system: RenderSystem): Promise<{ graphic: RenderGraphic | undefined, rtcCenter: Point3d | undefined }> {\n let graphic;\n let rtcCenter;\n const header = new PntsHeader(stream);\n if (!header.isValid)\n return { graphic, rtcCenter };\n\n const range = tile.contentRange;\n const featureTableJsonOffset = stream.curPos;\n const featureStrData = stream.nextBytes(header.featureTableJsonLength);\n const featureStr = utf8ToString(featureStrData);\n const featureValue = JSON.parse(featureStr as string) as PntsProps;\n\n if (undefined === featureValue)\n return { graphic, rtcCenter };\n\n let props: PointCloudProps | undefined;\n const dataOffset = featureTableJsonOffset + header.featureTableJsonLength;\n const draco = featureValue.extensions ? featureValue.extensions[\"3DTILES_draco_point_compression\"] : undefined;\n if (draco) {\n try {\n const buf = new Uint8Array(stream.arrayBuffer, dataOffset + draco.byteOffset, draco.byteLength);\n props = await decodeDracoPointCloud(buf);\n } catch (_) {\n //\n }\n } else {\n props = readPnts(stream, dataOffset, featureValue);\n }\n\n if (!props)\n return { graphic, rtcCenter };\n\n let batchRange = range;\n if (featureValue.RTC_CENTER) {\n rtcCenter = Point3d.fromJSON(featureValue.RTC_CENTER);\n batchRange = range.clone();\n batchRange.low.minus(rtcCenter, batchRange.low);\n batchRange.high.minus(rtcCenter, batchRange.high);\n }\n\n if (!props.colors) {\n // ###TODO we really should support uniform color instead of allocating an RGB value per point...\n props.colors = new Uint8Array(3 * featureValue.POINTS_LENGTH);\n const rgba = featureValue.CONSTANT_RGBA;\n if (rgba) {\n // ###TODO support point cloud transparency.\n for (let i = 0; i < featureValue.POINTS_LENGTH * 3; i += 3) {\n props.colors[i] = rgba[0];\n props.colors[i + 1] = rgba[1];\n props.colors[i + 2] = rgba[2];\n }\n } else {\n // Default to white.\n props.colors.fill(0xff, 0, props.colors.length);\n }\n }\n\n const featureTable = new FeatureTable(1, modelId, BatchType.Primary);\n const features = new Mesh.Features(featureTable);\n features.add(new Feature(modelId), 1);\n let params = props.params;\n if (props.points instanceof Float32Array) {\n // we don't have a true range for unquantized points, so calc one here for voxelSize\n const rng = Range3d.createNull();\n for (let i = 0; i < props.points.length; i += 3)\n rng.extendXYZ(props.points[i], props.points[i + 1], props.points[i + 2]);\n params = QParams3d.fromRange(rng);\n }\n // 256 here is tile.maximumSize (on non-additive refinement tiles)\n // If additiveRefinement, set voxelSize to 0 which will cause it draw to with minPixelsPerVoxel, which defaults to 2\n // That way, it will draw as if in pixel mode, and voxelScale will still function\n // Checking across a variety of 10 point clouds, 2 to 4 seems to work well for pixel settings (depending on the\n // cloud), so 2 is a decent default\n // (If voxelSize is used normally in this case, it draws different size pixels for different tiles, and since\n // they can overlap ranges, no good way found to calculate a voxelSize)\n const voxelSize = tile.additiveRefinement ? 0 : params.rangeDiagonal.maxAbs() / 256;\n\n graphic = system.createPointCloud({\n positions: props.points,\n qparams: props.params,\n colors: props.colors,\n features: features.toFeatureIndex(),\n voxelSize,\n colorFormat: \"rgb\",\n }, iModel);\n\n graphic = system.createBatch(graphic!, PackedFeatureTable.pack(featureTable), batchRange);\n return { graphic, rtcCenter };\n}\n"]}
1
+ {"version":3,"file":"PntsReader.js","sourceRoot":"","sources":["../../../src/tile/PntsReader.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Tiles\r\n */\r\n\r\nimport { ByteStream, Id64String, Logger, utf8ToString } from \"@itwin/core-bentley\";\r\nimport { Point3d, Range3d } from \"@itwin/core-geometry\";\r\nimport { BatchType, Feature, FeatureTable, PackedFeatureTable, PntsHeader, QParams3d, QPoint3d, Quantization } from \"@itwin/core-common\";\r\nimport { FrontendLoggerCategory } from \"../common/FrontendLoggerCategory\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { Mesh } from \"../render/primitives/mesh/MeshPrimitives\";\r\nimport { RenderGraphic } from \"../render/RenderGraphic\";\r\nimport { RenderSystem } from \"../render/RenderSystem\";\r\nimport { RealityTile } from \"./internal\";\r\n\r\n/** Schema for the [3DTILES_draco_point_compression](https://github.com/CesiumGS/3d-tiles/tree/main/extensions/3DTILES_draco_point_compression) extension. */\r\ninterface DracoPointCloud {\r\n byteLength: number;\r\n byteOffset: number;\r\n /** Each specifies the Id of a compressed attribute. */\r\n properties: {\r\n POSITION?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n RGB?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n RGBA?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n NORMAL?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n BATCH_ID?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n /** This is not in the spec but is present in sample data in Cesium's git repository. */\r\n COLOR_0?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n };\r\n}\r\n\r\ninterface PointCloudProps {\r\n params: QParams3d;\r\n points: Uint16Array | Float32Array;\r\n colors?: Uint8Array;\r\n}\r\n\r\ninterface BinaryBodyReference {\r\n byteOffset: number;\r\n}\r\n\r\n/** [3D tiles specification section 10.3](https://docs.opengeospatial.org/cs/18-053r2/18-053r2.html#199).\r\n * [JSON schema](https://github.com/CesiumGS/3d-tiles/blob/main/specification/schema/pnts.featureTable.schema.json).\r\n */\r\ninterface CommonPntsProps {\r\n POINTS_LENGTH: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n RTC_CENTER?: number[]; // eslint-disable-line @typescript-eslint/naming-convention\r\n CONSTANT_RGBA?: number[]; // eslint-disable-line @typescript-eslint/naming-convention\r\n RGB?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n RGBA?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n RGB565?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n\r\n extensions?: {\r\n \"3DTILES_draco_point_compression\"?: DracoPointCloud; // eslint-disable-line @typescript-eslint/naming-convention\r\n };\r\n\r\n // The following are currently ignored.\r\n NORMAL?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n NORMAL_OCT16P?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n BATCH_ID?: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n BATCH_LENGTH?: number; // eslint-disable-line @typescript-eslint/naming-convention\r\n}\r\n\r\ntype QuantizedPntsProps = CommonPntsProps & {\r\n POSITION_QUANTIZED: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n QUANTIZED_VOLUME_OFFSET: number[]; // eslint-disable-line @typescript-eslint/naming-convention\r\n QUANTIZED_VOLUME_SCALE: number[]; // eslint-disable-line @typescript-eslint/naming-convention\r\n\r\n POSITION?: never; // eslint-disable-line @typescript-eslint/naming-convention\r\n};\r\n\r\ntype UnquantizedPntsProps = CommonPntsProps & {\r\n POSITION: BinaryBodyReference; // eslint-disable-line @typescript-eslint/naming-convention\r\n\r\n POSITION_QUANTIZED?: never; // eslint-disable-line @typescript-eslint/naming-convention\r\n QUANTIZED_VOLUME_OFFSET?: never; // eslint-disable-line @typescript-eslint/naming-convention\r\n QUANTIZED_VOLUME_SCALE?: never; // eslint-disable-line @typescript-eslint/naming-convention\r\n};\r\n\r\ntype PntsProps = QuantizedPntsProps | UnquantizedPntsProps;\r\n\r\nfunction readPntsColors(stream: ByteStream, dataOffset: number, pnts: PntsProps): Uint8Array | undefined {\r\n const nPts = pnts.POINTS_LENGTH;\r\n const nComponents = 3 * nPts;\r\n if (pnts.RGB)\r\n return new Uint8Array(stream.arrayBuffer, dataOffset + pnts.RGB.byteOffset, nComponents);\r\n\r\n if (pnts.RGBA) {\r\n // ###TODO support point cloud transparency.\r\n const rgb = new Uint8Array(nComponents);\r\n const rgba = new Uint8Array(stream.arrayBuffer, dataOffset + pnts.RGBA.byteOffset, nComponents);\r\n for (let i = 0; i < nComponents; i += 4) {\r\n rgb[i + 0] = rgba[i + 0];\r\n rgb[i + 1] = rgba[i + 1];\r\n rgb[i + 2] = rgba[i + 2];\r\n }\r\n\r\n return rgb;\r\n } else if (pnts.RGB565) {\r\n // Each color is 16 bits: 5 red, 6 green, 5 blue.\r\n const crgb = new Uint16Array(stream.arrayBuffer, dataOffset + pnts.RGB565.byteOffset, nPts);\r\n const rgb = new Uint8Array(nComponents);\r\n for (let i = 0; i < nPts; i++) {\r\n const c = crgb[i];\r\n rgb[i + 0] = (c >> 11) & 0x1f;\r\n rgb[i + 1] = (c >> 5) & 0x3f;\r\n rgb[i + 2] = c & 0x1f;\r\n }\r\n\r\n return rgb;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction readPnts(stream: ByteStream, dataOffset: number, pnts: PntsProps): PointCloudProps | undefined {\r\n const nPts = pnts.POINTS_LENGTH;\r\n let params: QParams3d;\r\n let points: Uint16Array | Float32Array;\r\n\r\n if (pnts.POSITION_QUANTIZED) {\r\n const qpos = pnts.POSITION_QUANTIZED;\r\n const offset = pnts.QUANTIZED_VOLUME_OFFSET;\r\n const scale = pnts.QUANTIZED_VOLUME_SCALE;\r\n\r\n const qOrigin = new Point3d(offset[0], offset[1], offset[2]);\r\n const qScale = new Point3d(Quantization.computeScale(scale[0]), Quantization.computeScale(scale[1]), Quantization.computeScale(scale[2]));\r\n\r\n params = QParams3d.fromOriginAndScale(qOrigin, qScale);\r\n points = new Uint16Array(stream.arrayBuffer, dataOffset + qpos.byteOffset, 3 * nPts);\r\n } else {\r\n const qOrigin = new Point3d(0, 0, 0);\r\n const qScale = new Point3d(1, 1, 1);\r\n params = QParams3d.fromOriginAndScale(qOrigin, qScale);\r\n points = new Float32Array(stream.arrayBuffer, dataOffset + pnts.POSITION.byteOffset, 3 * nPts);\r\n }\r\n\r\n const colors = readPntsColors(stream, dataOffset, pnts);\r\n return { params, points, colors };\r\n}\r\n\r\nasync function decodeDracoPointCloud(buf: Uint8Array): Promise<PointCloudProps | undefined> {\r\n try {\r\n const dracoLoader = (await import(\"@loaders.gl/draco\")).DracoLoader;\r\n const mesh = await dracoLoader.parse(buf, {});\r\n if (mesh.topology !== \"point-list\")\r\n return undefined;\r\n\r\n const pos = mesh.attributes.POSITION?.value;\r\n if (!pos || (pos.length % 3) !== 0)\r\n return undefined;\r\n\r\n let colors = mesh.attributes.RGB?.value ?? mesh.attributes.COLOR_0?.value;\r\n if (!colors) {\r\n // ###TODO support point cloud transparency.\r\n const rgba = mesh.attributes.RGBA?.value;\r\n if (rgba && (rgba.length % 4) === 0) {\r\n // We currently don't support alpha channel for point clouds - strip it.\r\n colors = new Uint8Array(3 * rgba.length / 4);\r\n let j = 0;\r\n for (let i = 0; i < rgba.length; i += 4) {\r\n colors[j++] = rgba[i];\r\n colors[j++] = rgba[i + 1];\r\n colors[j++] = rgba[i + 2];\r\n }\r\n }\r\n }\r\n\r\n let posRange: Range3d;\r\n const bbox = mesh.header?.boundingBox;\r\n if (bbox) {\r\n posRange = Range3d.createXYZXYZ(bbox[0][0], bbox[0][1], bbox[0][2], bbox[1][0], bbox[1][1], bbox[1][2]);\r\n } else {\r\n posRange = Range3d.createNull();\r\n for (let i = 0; i < pos.length; i += 3)\r\n posRange.extendXYZ(pos[i], pos[i + 1], pos[i + 2]);\r\n }\r\n\r\n const params = QParams3d.fromRange(posRange);\r\n const pt = Point3d.createZero();\r\n const qpt = QPoint3d.create(pt, params);\r\n const points = new Uint16Array(pos.length);\r\n for (let i = 0; i < pos.length; i += 3) {\r\n pt.set(pos[i], pos[i + 1], pos[i + 2]);\r\n qpt.init(pt, params);\r\n points[i] = qpt.x;\r\n points[i + 1] = qpt.y;\r\n points[i + 2] = qpt.z;\r\n }\r\n\r\n return { points, params, colors: colors instanceof Uint8Array ? colors : undefined };\r\n } catch (err) {\r\n Logger.logWarning(FrontendLoggerCategory.Render, \"Failed to decode draco-encoded point cloud\");\r\n Logger.logException(FrontendLoggerCategory.Render, err);\r\n return undefined;\r\n }\r\n}\r\n\r\n/** Deserialize a point cloud tile and return it as a RenderGraphic.\r\n * @internal\r\n */\r\nexport async function readPointCloudTileContent(stream: ByteStream, iModel: IModelConnection, modelId: Id64String, _is3d: boolean, tile: RealityTile, system: RenderSystem): Promise<{ graphic: RenderGraphic | undefined, rtcCenter: Point3d | undefined }> {\r\n let graphic;\r\n let rtcCenter;\r\n const header = new PntsHeader(stream);\r\n if (!header.isValid)\r\n return { graphic, rtcCenter };\r\n\r\n const range = tile.contentRange;\r\n const featureTableJsonOffset = stream.curPos;\r\n const featureStrData = stream.nextBytes(header.featureTableJsonLength);\r\n const featureStr = utf8ToString(featureStrData);\r\n const featureValue = JSON.parse(featureStr as string) as PntsProps;\r\n\r\n if (undefined === featureValue)\r\n return { graphic, rtcCenter };\r\n\r\n let props: PointCloudProps | undefined;\r\n const dataOffset = featureTableJsonOffset + header.featureTableJsonLength;\r\n const draco = featureValue.extensions ? featureValue.extensions[\"3DTILES_draco_point_compression\"] : undefined;\r\n if (draco) {\r\n try {\r\n const buf = new Uint8Array(stream.arrayBuffer, dataOffset + draco.byteOffset, draco.byteLength);\r\n props = await decodeDracoPointCloud(buf);\r\n } catch (_) {\r\n //\r\n }\r\n } else {\r\n props = readPnts(stream, dataOffset, featureValue);\r\n }\r\n\r\n if (!props)\r\n return { graphic, rtcCenter };\r\n\r\n let batchRange = range;\r\n if (featureValue.RTC_CENTER) {\r\n rtcCenter = Point3d.fromJSON(featureValue.RTC_CENTER);\r\n batchRange = range.clone();\r\n batchRange.low.minus(rtcCenter, batchRange.low);\r\n batchRange.high.minus(rtcCenter, batchRange.high);\r\n }\r\n\r\n if (!props.colors) {\r\n // ###TODO we really should support uniform color instead of allocating an RGB value per point...\r\n props.colors = new Uint8Array(3 * featureValue.POINTS_LENGTH);\r\n const rgba = featureValue.CONSTANT_RGBA;\r\n if (rgba) {\r\n // ###TODO support point cloud transparency.\r\n for (let i = 0; i < featureValue.POINTS_LENGTH * 3; i += 3) {\r\n props.colors[i] = rgba[0];\r\n props.colors[i + 1] = rgba[1];\r\n props.colors[i + 2] = rgba[2];\r\n }\r\n } else {\r\n // Default to white.\r\n props.colors.fill(0xff, 0, props.colors.length);\r\n }\r\n }\r\n\r\n const featureTable = new FeatureTable(1, modelId, BatchType.Primary);\r\n const features = new Mesh.Features(featureTable);\r\n features.add(new Feature(modelId), 1);\r\n let params = props.params;\r\n if (props.points instanceof Float32Array) {\r\n // we don't have a true range for unquantized points, so calc one here for voxelSize\r\n const rng = Range3d.createNull();\r\n for (let i = 0; i < props.points.length; i += 3)\r\n rng.extendXYZ(props.points[i], props.points[i + 1], props.points[i + 2]);\r\n params = QParams3d.fromRange(rng);\r\n }\r\n // 256 here is tile.maximumSize (on non-additive refinement tiles)\r\n // If additiveRefinement, set voxelSize to 0 which will cause it draw to with minPixelsPerVoxel, which defaults to 2\r\n // That way, it will draw as if in pixel mode, and voxelScale will still function\r\n // Checking across a variety of 10 point clouds, 2 to 4 seems to work well for pixel settings (depending on the\r\n // cloud), so 2 is a decent default\r\n // (If voxelSize is used normally in this case, it draws different size pixels for different tiles, and since\r\n // they can overlap ranges, no good way found to calculate a voxelSize)\r\n const voxelSize = tile.additiveRefinement ? 0 : params.rangeDiagonal.maxAbs() / 256;\r\n\r\n graphic = system.createPointCloud({\r\n positions: props.points,\r\n qparams: props.params,\r\n colors: props.colors,\r\n features: features.toFeatureIndex(),\r\n voxelSize,\r\n colorFormat: \"rgb\",\r\n }, iModel);\r\n\r\n graphic = system.createBatch(graphic!, PackedFeatureTable.pack(featureTable), batchRange);\r\n return { graphic, rtcCenter };\r\n}\r\n"]}