@itwin/core-frontend 4.0.0-dev.23 → 4.0.0-dev.28

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 (470) hide show
  1. package/CHANGELOG.md +43 -36
  2. package/lib/cjs/AccuDraw.js +1 -1
  3. package/lib/cjs/AccuDraw.js.map +1 -1
  4. package/lib/cjs/AccuSnap.js +3 -3
  5. package/lib/cjs/AccuSnap.js.map +1 -1
  6. package/lib/cjs/BriefcaseConnection.js +9 -11
  7. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  8. package/lib/cjs/DisplayStyleState.js +8 -12
  9. package/lib/cjs/DisplayStyleState.js.map +1 -1
  10. package/lib/cjs/DrawingViewState.js +4 -6
  11. package/lib/cjs/DrawingViewState.js.map +1 -1
  12. package/lib/cjs/EnvironmentDecorations.js +2 -3
  13. package/lib/cjs/EnvironmentDecorations.js.map +1 -1
  14. package/lib/cjs/FlashSettings.js +3 -4
  15. package/lib/cjs/FlashSettings.js.map +1 -1
  16. package/lib/cjs/GeoServices.js +7 -9
  17. package/lib/cjs/GeoServices.js.map +1 -1
  18. package/lib/cjs/IModelApp.js +19 -21
  19. package/lib/cjs/IModelApp.js.map +1 -1
  20. package/lib/cjs/IModelConnection.js +1 -1
  21. package/lib/cjs/IModelConnection.js.map +1 -1
  22. package/lib/cjs/IpcApp.js +1 -1
  23. package/lib/cjs/IpcApp.js.map +1 -1
  24. package/lib/cjs/LocalhostIpcApp.js +3 -4
  25. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  26. package/lib/cjs/ModelState.js +2 -3
  27. package/lib/cjs/ModelState.js.map +1 -1
  28. package/lib/cjs/NativeApp.js +4 -7
  29. package/lib/cjs/NativeApp.js.map +1 -1
  30. package/lib/cjs/NoRenderApp.js +1 -2
  31. package/lib/cjs/NoRenderApp.js.map +1 -1
  32. package/lib/cjs/PlanarClipMaskState.js +1 -1
  33. package/lib/cjs/PlanarClipMaskState.js.map +1 -1
  34. package/lib/cjs/RealityDataSourceContextShareImpl.js +2 -4
  35. package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
  36. package/lib/cjs/SheetViewState.js +15 -23
  37. package/lib/cjs/SheetViewState.js.map +1 -1
  38. package/lib/cjs/Tiles.js +2 -2
  39. package/lib/cjs/Tiles.js.map +1 -1
  40. package/lib/cjs/ViewContext.js +1 -1
  41. package/lib/cjs/ViewContext.js.map +1 -1
  42. package/lib/cjs/ViewCreator2d.js +4 -5
  43. package/lib/cjs/ViewCreator2d.js.map +1 -1
  44. package/lib/cjs/ViewCreator3d.js +5 -5
  45. package/lib/cjs/ViewCreator3d.js.map +1 -1
  46. package/lib/cjs/ViewState.js +17 -24
  47. package/lib/cjs/ViewState.js.map +1 -1
  48. package/lib/cjs/Viewport.js +22 -32
  49. package/lib/cjs/Viewport.js.map +1 -1
  50. package/lib/cjs/extension/ExtensionImpl.js +1 -1
  51. package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
  52. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -3
  53. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  54. package/lib/cjs/quantity-formatting/QuantityFormatter.js +7 -9
  55. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  56. package/lib/cjs/render/FeatureSymbology.js +1 -2
  57. package/lib/cjs/render/FeatureSymbology.js.map +1 -1
  58. package/lib/cjs/render/GraphicBuilder.js +7 -9
  59. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  60. package/lib/cjs/render/MockRender.js +1 -2
  61. package/lib/cjs/render/MockRender.js.map +1 -1
  62. package/lib/cjs/render/ParticleCollectionBuilder.js +2 -3
  63. package/lib/cjs/render/ParticleCollectionBuilder.js.map +1 -1
  64. package/lib/cjs/render/RealityMeshParams.js +7 -10
  65. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  66. package/lib/cjs/render/RenderPlan.js +1 -1
  67. package/lib/cjs/render/RenderPlan.js.map +1 -1
  68. package/lib/cjs/render/RenderSystem.js +1 -2
  69. package/lib/cjs/render/RenderSystem.js.map +1 -1
  70. package/lib/cjs/render/VisibleFeature.js +2 -4
  71. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  72. package/lib/cjs/render/primitives/AuxChannelTable.js +6 -9
  73. package/lib/cjs/render/primitives/AuxChannelTable.js.map +1 -1
  74. package/lib/cjs/render/primitives/EdgeParams.js +6 -7
  75. package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
  76. package/lib/cjs/render/primitives/PolylineParams.js +2 -3
  77. package/lib/cjs/render/primitives/PolylineParams.js.map +1 -1
  78. package/lib/cjs/render/primitives/VertexKey.js +1 -1
  79. package/lib/cjs/render/primitives/VertexKey.js.map +1 -1
  80. package/lib/cjs/render/primitives/VertexTable.js +1 -1
  81. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  82. package/lib/cjs/render/primitives/VertexTableSplitter.js +6 -8
  83. package/lib/cjs/render/primitives/VertexTableSplitter.js.map +1 -1
  84. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js +9 -11
  85. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  86. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js +3 -5
  87. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  88. package/lib/cjs/render/primitives/mesh/MeshBuilder.js +1 -1
  89. package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
  90. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +2 -3
  91. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  92. package/lib/cjs/render/webgl/BranchState.js +9 -10
  93. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  94. package/lib/cjs/render/webgl/EDL.js +17 -21
  95. package/lib/cjs/render/webgl/EDL.js.map +1 -1
  96. package/lib/cjs/render/webgl/FeatureOverrides.js +2 -2
  97. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  98. package/lib/cjs/render/webgl/Graphic.js +3 -5
  99. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  100. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js +1 -1
  101. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  102. package/lib/cjs/render/webgl/InstancedGeometry.js +2 -3
  103. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  104. package/lib/cjs/render/webgl/Mesh.js +7 -10
  105. package/lib/cjs/render/webgl/Mesh.js.map +1 -1
  106. package/lib/cjs/render/webgl/MeshData.js +1 -2
  107. package/lib/cjs/render/webgl/MeshData.js.map +1 -1
  108. package/lib/cjs/render/webgl/PlanarClassifier.js +10 -15
  109. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  110. package/lib/cjs/render/webgl/RealityMesh.js +5 -8
  111. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  112. package/lib/cjs/render/webgl/RealityModelUniforms.js +3 -4
  113. package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
  114. package/lib/cjs/render/webgl/RenderCommands.js +7 -8
  115. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  116. package/lib/cjs/render/webgl/SceneCompositor.js +7 -9
  117. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  118. package/lib/cjs/render/webgl/ShaderBuilder.js +1 -2
  119. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  120. package/lib/cjs/render/webgl/SolarShadowMap.js +1 -2
  121. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  122. package/lib/cjs/render/webgl/SurfaceGeometry.js +1 -1
  123. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
  124. package/lib/cjs/render/webgl/System.js +12 -16
  125. package/lib/cjs/render/webgl/System.js.map +1 -1
  126. package/lib/cjs/render/webgl/Target.js +9 -14
  127. package/lib/cjs/render/webgl/Target.js.map +1 -1
  128. package/lib/cjs/render/webgl/TargetGraphics.js +1 -2
  129. package/lib/cjs/render/webgl/TargetGraphics.js.map +1 -1
  130. package/lib/cjs/render/webgl/Texture.js +1 -2
  131. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  132. package/lib/cjs/render/webgl/ThematicSensors.js +2 -4
  133. package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
  134. package/lib/cjs/render/webgl/VisibleTileFeatures.js +1 -2
  135. package/lib/cjs/render/webgl/VisibleTileFeatures.js.map +1 -1
  136. package/lib/cjs/render/webgl/glsl/Animation.js +6 -9
  137. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  138. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +1 -2
  139. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  140. package/lib/cjs/render/webgl/glsl/Instancing.js +4 -5
  141. package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
  142. package/lib/cjs/render/webgl/glsl/RealityMesh.js +2 -4
  143. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  144. package/lib/cjs/render/webgl/glsl/Surface.js +1 -2
  145. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  146. package/lib/cjs/render/webgl/glsl/Thematic.js +1 -2
  147. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  148. package/lib/cjs/tile/ClassifierTileTree.js +3 -3
  149. package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
  150. package/lib/cjs/tile/GltfReader.js +61 -75
  151. package/lib/cjs/tile/GltfReader.js.map +1 -1
  152. package/lib/cjs/tile/IModelTile.js +2 -3
  153. package/lib/cjs/tile/IModelTile.js.map +1 -1
  154. package/lib/cjs/tile/IModelTileRequestChannels.js +6 -11
  155. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  156. package/lib/cjs/tile/IModelTileTree.js +5 -9
  157. package/lib/cjs/tile/IModelTileTree.js.map +1 -1
  158. package/lib/cjs/tile/ImdlReader.js +13 -17
  159. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  160. package/lib/cjs/tile/OrbitGtTileTree.js +2 -2
  161. package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
  162. package/lib/cjs/tile/PntsReader.js +4 -5
  163. package/lib/cjs/tile/PntsReader.js.map +1 -1
  164. package/lib/cjs/tile/PrimaryTileTree.js +22 -32
  165. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  166. package/lib/cjs/tile/RealityModelTileTree.js +12 -19
  167. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  168. package/lib/cjs/tile/RealityTile.js +3 -5
  169. package/lib/cjs/tile/RealityTile.js.map +1 -1
  170. package/lib/cjs/tile/RealityTileLoader.js +2 -2
  171. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  172. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js +3 -5
  173. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  174. package/lib/cjs/tile/Tile.js +1 -1
  175. package/lib/cjs/tile/Tile.js.map +1 -1
  176. package/lib/cjs/tile/TileAdmin.js +22 -27
  177. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  178. package/lib/cjs/tile/TileDrawArgs.js +3 -6
  179. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  180. package/lib/cjs/tile/TileRequestChannels.js +1 -1
  181. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  182. package/lib/cjs/tile/TileTree.js +2 -3
  183. package/lib/cjs/tile/TileTree.js.map +1 -1
  184. package/lib/cjs/tile/TiledGraphicsProvider.js +1 -1
  185. package/lib/cjs/tile/TiledGraphicsProvider.js.map +1 -1
  186. package/lib/cjs/tile/map/ArcGISTileMap.js +5 -6
  187. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  188. package/lib/cjs/tile/map/ArcGisUtilities.js +6 -8
  189. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  190. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +4 -7
  191. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  192. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +6 -8
  193. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  194. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js +1 -2
  195. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  196. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +14 -19
  197. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  198. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +14 -20
  199. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  200. package/lib/cjs/tile/map/MapCartoRectangle.js +1 -1
  201. package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
  202. package/lib/cjs/tile/map/MapLayerFormatRegistry.js +5 -6
  203. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  204. package/lib/cjs/tile/map/MapLayerImageryFormats.js +11 -14
  205. package/lib/cjs/tile/map/MapLayerImageryFormats.js.map +1 -1
  206. package/lib/cjs/tile/map/MapLayerImageryProvider.js +2 -3
  207. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  208. package/lib/cjs/tile/map/MapLayerSources.js +1 -1
  209. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  210. package/lib/cjs/tile/map/MapTile.js +6 -8
  211. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  212. package/lib/cjs/tile/map/MapTileLoader.js +1 -1
  213. package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
  214. package/lib/cjs/tile/map/MapTileTree.js +13 -18
  215. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  216. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +6 -7
  217. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  218. package/lib/cjs/tile/map/WmsCapabilities.js +4 -5
  219. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  220. package/lib/cjs/tile/map/WmtsCapabilities.js +17 -25
  221. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  222. package/lib/cjs/tools/ClipViewTool.js +1 -1
  223. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  224. package/lib/cjs/tools/MeasureTool.js +2 -4
  225. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  226. package/lib/cjs/tools/PrimitiveTool.js +2 -3
  227. package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
  228. package/lib/cjs/tools/SelectTool.js +1 -2
  229. package/lib/cjs/tools/SelectTool.js.map +1 -1
  230. package/lib/cjs/tools/Tool.js +2 -3
  231. package/lib/cjs/tools/Tool.js.map +1 -1
  232. package/lib/cjs/tools/ToolAdmin.js +2 -4
  233. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  234. package/lib/cjs/tools/ViewTool.js +3 -3
  235. package/lib/cjs/tools/ViewTool.js.map +1 -1
  236. package/lib/esm/AccuDraw.js +1 -1
  237. package/lib/esm/AccuDraw.js.map +1 -1
  238. package/lib/esm/AccuSnap.js +3 -3
  239. package/lib/esm/AccuSnap.js.map +1 -1
  240. package/lib/esm/BriefcaseConnection.js +9 -11
  241. package/lib/esm/BriefcaseConnection.js.map +1 -1
  242. package/lib/esm/DisplayStyleState.js +8 -12
  243. package/lib/esm/DisplayStyleState.js.map +1 -1
  244. package/lib/esm/DrawingViewState.js +4 -6
  245. package/lib/esm/DrawingViewState.js.map +1 -1
  246. package/lib/esm/EnvironmentDecorations.js +2 -3
  247. package/lib/esm/EnvironmentDecorations.js.map +1 -1
  248. package/lib/esm/FlashSettings.js +3 -4
  249. package/lib/esm/FlashSettings.js.map +1 -1
  250. package/lib/esm/GeoServices.js +7 -9
  251. package/lib/esm/GeoServices.js.map +1 -1
  252. package/lib/esm/IModelApp.js +19 -21
  253. package/lib/esm/IModelApp.js.map +1 -1
  254. package/lib/esm/IModelConnection.js +1 -1
  255. package/lib/esm/IModelConnection.js.map +1 -1
  256. package/lib/esm/IpcApp.js +1 -1
  257. package/lib/esm/IpcApp.js.map +1 -1
  258. package/lib/esm/LocalhostIpcApp.js +3 -4
  259. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  260. package/lib/esm/ModelState.js +2 -3
  261. package/lib/esm/ModelState.js.map +1 -1
  262. package/lib/esm/NativeApp.js +4 -7
  263. package/lib/esm/NativeApp.js.map +1 -1
  264. package/lib/esm/NoRenderApp.js +1 -2
  265. package/lib/esm/NoRenderApp.js.map +1 -1
  266. package/lib/esm/PlanarClipMaskState.js +1 -1
  267. package/lib/esm/PlanarClipMaskState.js.map +1 -1
  268. package/lib/esm/RealityDataSourceContextShareImpl.js +2 -4
  269. package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
  270. package/lib/esm/SheetViewState.js +15 -23
  271. package/lib/esm/SheetViewState.js.map +1 -1
  272. package/lib/esm/Tiles.js +2 -2
  273. package/lib/esm/Tiles.js.map +1 -1
  274. package/lib/esm/ViewContext.js +1 -1
  275. package/lib/esm/ViewContext.js.map +1 -1
  276. package/lib/esm/ViewCreator2d.js +4 -5
  277. package/lib/esm/ViewCreator2d.js.map +1 -1
  278. package/lib/esm/ViewCreator3d.js +5 -5
  279. package/lib/esm/ViewCreator3d.js.map +1 -1
  280. package/lib/esm/ViewState.js +17 -24
  281. package/lib/esm/ViewState.js.map +1 -1
  282. package/lib/esm/Viewport.js +22 -32
  283. package/lib/esm/Viewport.js.map +1 -1
  284. package/lib/esm/extension/ExtensionImpl.js +1 -1
  285. package/lib/esm/extension/ExtensionImpl.js.map +1 -1
  286. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js +2 -3
  287. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  288. package/lib/esm/quantity-formatting/QuantityFormatter.js +7 -9
  289. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  290. package/lib/esm/render/FeatureSymbology.js +1 -2
  291. package/lib/esm/render/FeatureSymbology.js.map +1 -1
  292. package/lib/esm/render/GraphicBuilder.js +7 -9
  293. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  294. package/lib/esm/render/MockRender.js +1 -2
  295. package/lib/esm/render/MockRender.js.map +1 -1
  296. package/lib/esm/render/ParticleCollectionBuilder.js +2 -3
  297. package/lib/esm/render/ParticleCollectionBuilder.js.map +1 -1
  298. package/lib/esm/render/RealityMeshParams.js +7 -10
  299. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  300. package/lib/esm/render/RenderPlan.js +1 -1
  301. package/lib/esm/render/RenderPlan.js.map +1 -1
  302. package/lib/esm/render/RenderSystem.js +1 -2
  303. package/lib/esm/render/RenderSystem.js.map +1 -1
  304. package/lib/esm/render/VisibleFeature.js +2 -4
  305. package/lib/esm/render/VisibleFeature.js.map +1 -1
  306. package/lib/esm/render/primitives/AuxChannelTable.js +6 -9
  307. package/lib/esm/render/primitives/AuxChannelTable.js.map +1 -1
  308. package/lib/esm/render/primitives/EdgeParams.js +6 -7
  309. package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
  310. package/lib/esm/render/primitives/PolylineParams.js +2 -3
  311. package/lib/esm/render/primitives/PolylineParams.js.map +1 -1
  312. package/lib/esm/render/primitives/VertexKey.js +1 -1
  313. package/lib/esm/render/primitives/VertexKey.js.map +1 -1
  314. package/lib/esm/render/primitives/VertexTable.js +1 -1
  315. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  316. package/lib/esm/render/primitives/VertexTableSplitter.js +6 -8
  317. package/lib/esm/render/primitives/VertexTableSplitter.js.map +1 -1
  318. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js +9 -11
  319. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  320. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js +3 -5
  321. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  322. package/lib/esm/render/primitives/mesh/MeshBuilder.js +1 -1
  323. package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
  324. package/lib/esm/render/primitives/mesh/MeshPrimitives.js +2 -3
  325. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  326. package/lib/esm/render/webgl/BranchState.js +9 -10
  327. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  328. package/lib/esm/render/webgl/EDL.js +17 -21
  329. package/lib/esm/render/webgl/EDL.js.map +1 -1
  330. package/lib/esm/render/webgl/FeatureOverrides.js +2 -2
  331. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  332. package/lib/esm/render/webgl/Graphic.js +3 -5
  333. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  334. package/lib/esm/render/webgl/IndexedEdgeGeometry.js +1 -1
  335. package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  336. package/lib/esm/render/webgl/InstancedGeometry.js +2 -3
  337. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  338. package/lib/esm/render/webgl/Mesh.js +7 -10
  339. package/lib/esm/render/webgl/Mesh.js.map +1 -1
  340. package/lib/esm/render/webgl/MeshData.js +1 -2
  341. package/lib/esm/render/webgl/MeshData.js.map +1 -1
  342. package/lib/esm/render/webgl/PlanarClassifier.js +10 -15
  343. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  344. package/lib/esm/render/webgl/RealityMesh.js +5 -8
  345. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  346. package/lib/esm/render/webgl/RealityModelUniforms.js +3 -4
  347. package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
  348. package/lib/esm/render/webgl/RenderCommands.js +7 -8
  349. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  350. package/lib/esm/render/webgl/SceneCompositor.js +7 -9
  351. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  352. package/lib/esm/render/webgl/ShaderBuilder.js +1 -2
  353. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  354. package/lib/esm/render/webgl/SolarShadowMap.js +1 -2
  355. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  356. package/lib/esm/render/webgl/SurfaceGeometry.js +1 -1
  357. package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
  358. package/lib/esm/render/webgl/System.js +12 -16
  359. package/lib/esm/render/webgl/System.js.map +1 -1
  360. package/lib/esm/render/webgl/Target.js +9 -14
  361. package/lib/esm/render/webgl/Target.js.map +1 -1
  362. package/lib/esm/render/webgl/TargetGraphics.js +1 -2
  363. package/lib/esm/render/webgl/TargetGraphics.js.map +1 -1
  364. package/lib/esm/render/webgl/Texture.js +1 -2
  365. package/lib/esm/render/webgl/Texture.js.map +1 -1
  366. package/lib/esm/render/webgl/ThematicSensors.js +2 -4
  367. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  368. package/lib/esm/render/webgl/VisibleTileFeatures.js +1 -2
  369. package/lib/esm/render/webgl/VisibleTileFeatures.js.map +1 -1
  370. package/lib/esm/render/webgl/glsl/Animation.js +6 -9
  371. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  372. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +1 -2
  373. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  374. package/lib/esm/render/webgl/glsl/Instancing.js +4 -5
  375. package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
  376. package/lib/esm/render/webgl/glsl/RealityMesh.js +2 -4
  377. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  378. package/lib/esm/render/webgl/glsl/Surface.js +1 -2
  379. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  380. package/lib/esm/render/webgl/glsl/Thematic.js +1 -2
  381. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  382. package/lib/esm/tile/ClassifierTileTree.js +3 -3
  383. package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
  384. package/lib/esm/tile/GltfReader.js +61 -75
  385. package/lib/esm/tile/GltfReader.js.map +1 -1
  386. package/lib/esm/tile/IModelTile.js +2 -3
  387. package/lib/esm/tile/IModelTile.js.map +1 -1
  388. package/lib/esm/tile/IModelTileRequestChannels.js +6 -11
  389. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  390. package/lib/esm/tile/IModelTileTree.js +5 -9
  391. package/lib/esm/tile/IModelTileTree.js.map +1 -1
  392. package/lib/esm/tile/ImdlReader.js +13 -17
  393. package/lib/esm/tile/ImdlReader.js.map +1 -1
  394. package/lib/esm/tile/OrbitGtTileTree.js +2 -2
  395. package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
  396. package/lib/esm/tile/PntsReader.js +4 -5
  397. package/lib/esm/tile/PntsReader.js.map +1 -1
  398. package/lib/esm/tile/PrimaryTileTree.js +22 -32
  399. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  400. package/lib/esm/tile/RealityModelTileTree.js +12 -19
  401. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  402. package/lib/esm/tile/RealityTile.js +3 -5
  403. package/lib/esm/tile/RealityTile.js.map +1 -1
  404. package/lib/esm/tile/RealityTileLoader.js +2 -2
  405. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  406. package/lib/esm/tile/ThreeDTileFormatInterpreter.js +3 -5
  407. package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  408. package/lib/esm/tile/Tile.js +1 -1
  409. package/lib/esm/tile/Tile.js.map +1 -1
  410. package/lib/esm/tile/TileAdmin.js +22 -27
  411. package/lib/esm/tile/TileAdmin.js.map +1 -1
  412. package/lib/esm/tile/TileDrawArgs.js +3 -6
  413. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  414. package/lib/esm/tile/TileRequestChannels.js +1 -1
  415. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  416. package/lib/esm/tile/TileTree.js +2 -3
  417. package/lib/esm/tile/TileTree.js.map +1 -1
  418. package/lib/esm/tile/TiledGraphicsProvider.js +1 -1
  419. package/lib/esm/tile/TiledGraphicsProvider.js.map +1 -1
  420. package/lib/esm/tile/map/ArcGISTileMap.js +5 -6
  421. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  422. package/lib/esm/tile/map/ArcGisUtilities.js +6 -8
  423. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  424. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +4 -7
  425. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  426. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js +6 -8
  427. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  428. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js +1 -2
  429. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  430. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js +14 -19
  431. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  432. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js +14 -20
  433. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  434. package/lib/esm/tile/map/MapCartoRectangle.js +1 -1
  435. package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
  436. package/lib/esm/tile/map/MapLayerFormatRegistry.js +5 -6
  437. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  438. package/lib/esm/tile/map/MapLayerImageryFormats.js +11 -14
  439. package/lib/esm/tile/map/MapLayerImageryFormats.js.map +1 -1
  440. package/lib/esm/tile/map/MapLayerImageryProvider.js +2 -3
  441. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  442. package/lib/esm/tile/map/MapLayerSources.js +1 -1
  443. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  444. package/lib/esm/tile/map/MapTile.js +6 -8
  445. package/lib/esm/tile/map/MapTile.js.map +1 -1
  446. package/lib/esm/tile/map/MapTileLoader.js +1 -1
  447. package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
  448. package/lib/esm/tile/map/MapTileTree.js +13 -18
  449. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  450. package/lib/esm/tile/map/MapTiledGraphicsProvider.js +6 -7
  451. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  452. package/lib/esm/tile/map/WmsCapabilities.js +4 -5
  453. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  454. package/lib/esm/tile/map/WmtsCapabilities.js +17 -25
  455. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  456. package/lib/esm/tools/ClipViewTool.js +1 -1
  457. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  458. package/lib/esm/tools/MeasureTool.js +2 -4
  459. package/lib/esm/tools/MeasureTool.js.map +1 -1
  460. package/lib/esm/tools/PrimitiveTool.js +2 -3
  461. package/lib/esm/tools/PrimitiveTool.js.map +1 -1
  462. package/lib/esm/tools/SelectTool.js +1 -2
  463. package/lib/esm/tools/SelectTool.js.map +1 -1
  464. package/lib/esm/tools/Tool.js +2 -3
  465. package/lib/esm/tools/Tool.js.map +1 -1
  466. package/lib/esm/tools/ToolAdmin.js +2 -4
  467. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  468. package/lib/esm/tools/ViewTool.js +3 -3
  469. package/lib/esm/tools/ViewTool.js.map +1 -1
  470. package/package.json +18 -18
@@ -126,7 +126,6 @@ class AuxChannelTableBuilder {
126
126
  }
127
127
  }
128
128
  addNormals(channel, byteOffset) {
129
- var _a, _b;
130
129
  const inputs = [];
131
130
  const indices = [];
132
131
  const normal = new Vector3d();
@@ -145,15 +144,14 @@ class AuxChannelTableBuilder {
145
144
  byteIndex += this._numBytesPerVertex;
146
145
  }
147
146
  }
148
- const normals = (_a = this._props.normals) !== null && _a !== void 0 ? _a : (this._props.normals = []);
147
+ const normals = this._props.normals ?? (this._props.normals = []);
149
148
  normals.push({
150
- name: (_b = channel.name) !== null && _b !== void 0 ? _b : "",
149
+ name: channel.name ?? "",
151
150
  inputs,
152
151
  indices,
153
152
  });
154
153
  }
155
154
  addParams(channel, byteOffset) {
156
- var _a, _b;
157
155
  const inputs = [];
158
156
  const indices = [];
159
157
  const range = Range1d.createNull();
@@ -171,17 +169,16 @@ class AuxChannelTableBuilder {
171
169
  byteIndex += this._numBytesPerVertex;
172
170
  }
173
171
  }
174
- const params = (_a = this._props.params) !== null && _a !== void 0 ? _a : (this._props.params = []);
172
+ const params = this._props.params ?? (this._props.params = []);
175
173
  params.push({
176
174
  inputs,
177
175
  indices,
178
- name: (_b = channel.name) !== null && _b !== void 0 ? _b : "",
176
+ name: channel.name ?? "",
179
177
  qOrigin: [range.low],
180
178
  qScale: [invert(qScale)],
181
179
  });
182
180
  }
183
181
  addDisplacements(channel, byteOffset) {
184
- var _a, _b;
185
182
  const inputs = [];
186
183
  const indices = [];
187
184
  const point = new Point3d();
@@ -208,11 +205,11 @@ class AuxChannelTableBuilder {
208
205
  byteIndex += this._numBytesPerVertex;
209
206
  }
210
207
  }
211
- const displacements = (_a = this._props.displacements) !== null && _a !== void 0 ? _a : (this._props.displacements = []);
208
+ const displacements = this._props.displacements ?? (this._props.displacements = []);
212
209
  displacements.push({
213
210
  inputs,
214
211
  indices,
215
- name: (_b = channel.name) !== null && _b !== void 0 ? _b : "",
212
+ name: channel.name ?? "",
216
213
  qOrigin: qParams.origin.toArray(),
217
214
  qScale: qParams.scale.toArray().map((x) => invert(x)),
218
215
  });
@@ -1 +1 @@
1
- {"version":3,"file":"AuxChannelTable.js","sourceRoot":"","sources":["../../../../src/render/primitives/AuxChannelTable.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 Rendering\n */\n\nimport { assert, Mutable } from \"@itwin/core-bentley\";\nimport {\n AuxChannelDataType, Point3d, AuxChannel as PolyfaceAuxChannel, Range1d, Range3d, Vector3d,\n} from \"@itwin/core-geometry\";\nimport { OctEncodedNormal, QParams3d, QPoint3d, Quantization } from \"@itwin/core-common\";\nimport { computeDimensions } from \"./VertexTable\";\n\n/** @internal */\nexport interface AuxChannelProps {\n readonly name: string;\n readonly inputs: number[];\n readonly indices: number[];\n}\n\n/** @internal */\nexport interface QuantizedAuxChannelProps extends AuxChannelProps {\n readonly qOrigin: number[];\n readonly qScale: number[];\n}\n\n/** @internal */\nexport class AuxChannel implements AuxChannelProps {\n public readonly name: string;\n public readonly inputs: number[];\n public readonly indices: number[];\n\n public constructor(props: AuxChannelProps) {\n this.name = props.name;\n this.inputs = props.inputs;\n this.indices = props.indices;\n }\n}\n\n/** @internal */\nexport class AuxDisplacementChannel extends AuxChannel {\n public readonly qOrigin: Float32Array;\n public readonly qScale: Float32Array;\n\n public constructor(props: QuantizedAuxChannelProps) {\n super(props);\n this.qOrigin = Float32Array.from(props.qOrigin);\n this.qScale = Float32Array.from(props.qScale);\n }\n}\n\n/** @internal */\nexport class AuxParamChannel extends AuxChannel {\n public readonly qOrigin: number;\n public readonly qScale: number;\n\n public constructor(props: QuantizedAuxChannelProps) {\n super(props);\n this.qOrigin = props.qOrigin[0];\n this.qScale = props.qScale[0];\n }\n}\n\n/** @internal */\nexport interface AuxChannelTableProps {\n /** Rectangular array of per-vertex data, of size width * height * numBytesPerVertex bytes. */\n readonly data: Uint8Array;\n /** The number of 4-byte RGBA columns in each row of the array. */\n readonly width: number;\n /** The number of rows in the array. */\n readonly height: number;\n /** The number of vertices in the array. Must be no more than (width * height) / numBytesPerVertex. */\n readonly count: number;\n /** The number of bytes allocated for each vertex. Must be a multiple of two. */\n readonly numBytesPerVertex: number;\n /** Displacements used for animations. */\n readonly displacements?: QuantizedAuxChannelProps[];\n /** Normals used for animations. */\n readonly normals?: AuxChannelProps[];\n /** Scalar params used for animations. */\n readonly params?: QuantizedAuxChannelProps[];\n}\n\n/**\n * Represents one or more channels of auxiliary per-vertex data which can be used to animate and resymbolize a mesh in various ways.\n * Each channel holds a fixed number of bytes for each vertex (typically 2 bytes for normals and params, 6 bytes for displacements).\n * The channels are interleaved in a rectangular array such that the data for each vertex is stored contiguously; that is, if a displacement and\n * a normal channel exist, then the first vertex's displacement is followed by the first vertex's normal, which is followed by the second\n * vertex's displacement and normal; and so on.\n * @internal\n */\nexport class AuxChannelTable {\n /** Rectangular array of per-vertex data, of size width * height * numBytesPerVertex bytes. */\n public readonly data: Uint8Array;\n /** The number of 4-byte RGBA columns in each row of the array. */\n public readonly width: number;\n /** The number of rows in the array. */\n public readonly height: number;\n /** The number of vertices in the array. Must be no more than (width * height) / numBytesPerVertex. */\n public readonly numVertices: number;\n /** The number of bytes allocated for each vertex. Must be a multiple of two. */\n public readonly numBytesPerVertex: number;\n /** Displacements used for animations. */\n public readonly displacements?: AuxDisplacementChannel[];\n /** Normals used for animations. */\n public readonly normals?: AuxChannel[];\n /** Scalar params used for animations. */\n public readonly params?: AuxParamChannel[];\n\n private constructor(props: AuxChannelTableProps, displacements?: AuxDisplacementChannel[], normals?: AuxChannel[], params?: AuxParamChannel[]) {\n this.data = props.data;\n this.width = props.width;\n this.height = props.height;\n this.numVertices = props.count;\n this.numBytesPerVertex = props.numBytesPerVertex;\n this.displacements = displacements;\n this.normals = normals;\n this.params = params;\n }\n\n public static fromJSON(props: AuxChannelTableProps): AuxChannelTable | undefined {\n let displacements: AuxDisplacementChannel[] | undefined;\n let normals: AuxChannel[] | undefined;\n let params: AuxParamChannel[] | undefined;\n\n if (undefined !== props.displacements && 0 < props.displacements.length) {\n displacements = [];\n for (const displacement of props.displacements)\n displacements.push(new AuxDisplacementChannel(displacement));\n }\n\n if (undefined !== props.normals && 0 < props.normals.length) {\n normals = [];\n for (const normal of props.normals)\n normals.push(new AuxChannel(normal));\n }\n\n if (undefined !== props.params && 0 < props.params.length) {\n params = [];\n for (const param of props.params)\n params.push(new AuxParamChannel(param));\n }\n\n return undefined !== displacements || undefined !== normals || undefined !== params ? new AuxChannelTable(props, displacements, normals, params) : undefined;\n }\n\n public static fromChannels(channels: ReadonlyArray<PolyfaceAuxChannel>, numVertices: number): AuxChannelTable | undefined {\n return AuxChannelTableBuilder.buildAuxChannelTable(channels, numVertices);\n }\n}\n\nfunction invert(num: number): number {\n if (0 !== num)\n num = 1 / num;\n\n return num;\n}\n\nclass AuxChannelTableBuilder {\n private readonly _view: DataView;\n private readonly _props: Mutable<AuxChannelTableProps>;\n private readonly _numBytesPerVertex: number;\n\n private constructor(props: Mutable<AuxChannelTableProps>, numBytesPerVertex: number) {\n this._props = props;\n this._numBytesPerVertex = numBytesPerVertex;\n this._view = new DataView(props.data.buffer);\n }\n\n public static buildAuxChannelTable(channels: ReadonlyArray<PolyfaceAuxChannel>, numVertices: number): AuxChannelTable | undefined {\n const numBytesPerVertex = channels.reduce((accum, channel) => accum + computeNumBytesPerVertex(channel), 0);\n if (!numBytesPerVertex)\n return undefined;\n\n const nRgbaPerVertex = Math.floor((numBytesPerVertex + 3) / 4);\n const nUnusedBytesPerVertex = nRgbaPerVertex * 4 - numBytesPerVertex;\n assert(0 === nUnusedBytesPerVertex || 2 === nUnusedBytesPerVertex);\n\n // We don't want any unused bytes. If we've got 2 extra, make every other vertex's channel start in the middle of the first texel.\n let dimensions;\n if (0 !== nUnusedBytesPerVertex)\n dimensions = computeDimensions(Math.floor((numVertices + 1) / 2), numBytesPerVertex / 2, 0); // twice as many RGBA for half as many vertices.\n else\n dimensions = computeDimensions(numVertices, nRgbaPerVertex, 0);\n\n const data = new Uint8Array(dimensions.width * dimensions.height * 4);\n const props: Mutable<AuxChannelTableProps> = {\n data,\n width: dimensions.width,\n height: dimensions.height,\n count: numVertices,\n numBytesPerVertex,\n };\n\n const builder = new AuxChannelTableBuilder(props, numBytesPerVertex);\n builder.build(channels);\n return AuxChannelTable.fromJSON(props);\n }\n\n private build(channels: ReadonlyArray<PolyfaceAuxChannel>): void {\n let byteOffset = 0;\n for (const channel of channels) {\n if (AuxChannelDataType.Normal === channel.dataType)\n this.addNormals(channel, byteOffset);\n else if (AuxChannelDataType.Vector === channel.dataType)\n this.addDisplacements(channel, byteOffset);\n else\n this.addParams(channel, byteOffset);\n\n byteOffset += computeNumBytesPerVertex(channel);\n }\n }\n\n private addNormals(channel: PolyfaceAuxChannel, byteOffset: number): void {\n const inputs = [];\n const indices = [];\n\n const normal = new Vector3d();\n for (let i = 0; i < channel.data.length; i++) {\n let byteIndex = byteOffset + i * 2; // 2 bytes per normal\n indices.push(byteIndex / 2); // indices aligned to 2-byte intervals\n\n const data = channel.data[i];\n inputs.push(data.input);\n\n for (let j = 0; j < data.values.length; j += 3) {\n normal.x = data.values[j];\n normal.y = data.values[j + 1];\n normal.z = data.values[j + 2];\n normal.normalizeInPlace();\n\n const encodedNormal = OctEncodedNormal.encode(normal);\n this._view.setUint16(byteIndex, encodedNormal, true);\n byteIndex += this._numBytesPerVertex;\n }\n }\n\n const normals = this._props.normals ?? (this._props.normals = []);\n normals.push({\n name: channel.name ?? \"\",\n inputs,\n indices,\n });\n }\n\n private addParams(channel: PolyfaceAuxChannel, byteOffset: number): void {\n const inputs = [];\n const indices = [];\n\n const range = Range1d.createNull();\n for (const data of channel.data) {\n inputs.push(data.input);\n range.extendArray(data.values);\n }\n\n const qScale = Quantization.computeScale(range.high - range.low);\n\n for (let i = 0; i < channel.data.length; i++) {\n let byteIndex = byteOffset + i * 2; // 2 bytes per double\n indices.push(byteIndex / 2); // indices aligned to 2-byte intervals\n\n for (const value of channel.data[i].values) {\n const quantized = Quantization.quantize(value, range.low, qScale);\n this._view.setUint16(byteIndex, quantized, true);\n byteIndex += this._numBytesPerVertex;\n }\n }\n\n const params = this._props.params ?? (this._props.params = []);\n params.push({\n inputs,\n indices,\n name: channel.name ?? \"\",\n qOrigin: [range.low],\n qScale: [invert(qScale)],\n });\n }\n\n private addDisplacements(channel: PolyfaceAuxChannel, byteOffset: number): void {\n const inputs = [];\n const indices = [];\n\n const point = new Point3d();\n const range = Range3d.createNull();\n for (const data of channel.data) {\n inputs.push(data.input);\n for (let i = 0; i < data.values.length; i += 3) {\n point.set(data.values[i], data.values[i + 1], data.values[i + 2]);\n range.extend(point);\n }\n }\n\n const qParams = QParams3d.fromRange(range);\n const qPoint = new QPoint3d();\n for (let i = 0; i < channel.data.length; i++) {\n let byteIndex = byteOffset + i * 6; // 2 bytes per coordinate\n indices.push(byteIndex / 2); // indices aligned to 2-byte intervals\n\n const data = channel.data[i];\n for (let j = 0; j < data.values.length; j += 3) {\n point.set(data.values[j], data.values[j + 1], data.values[j + 2]);\n qPoint.init(point, qParams);\n\n this._view.setUint16(byteIndex + 0, qPoint.x, true);\n this._view.setUint16(byteIndex + 2, qPoint.y, true);\n this._view.setUint16(byteIndex + 4, qPoint.z, true);\n byteIndex += this._numBytesPerVertex;\n }\n }\n\n const displacements = this._props.displacements ?? (this._props.displacements = []);\n displacements.push({\n inputs,\n indices,\n name: channel.name ?? \"\",\n qOrigin: qParams.origin.toArray(),\n qScale: qParams.scale.toArray().map((x) => invert(x)),\n });\n }\n}\n\nfunction computeNumBytesPerVertex(channel: PolyfaceAuxChannel): number {\n const nEntries = channel.data.length;\n switch (channel.dataType) {\n case AuxChannelDataType.Vector:\n return 6 * nEntries; // 3 16-bit quantized coordinate values per entry.\n case AuxChannelDataType.Normal:\n case AuxChannelDataType.Distance:\n case AuxChannelDataType.Scalar:\n return 2 * nEntries; // 1 16-bit quantized value per entry.\n }\n}\n"]}
1
+ {"version":3,"file":"AuxChannelTable.js","sourceRoot":"","sources":["../../../../src/render/primitives/AuxChannelTable.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 Rendering\n */\n\nimport { assert, Mutable } from \"@itwin/core-bentley\";\nimport {\n AuxChannelDataType, Point3d, AuxChannel as PolyfaceAuxChannel, Range1d, Range3d, Vector3d,\n} from \"@itwin/core-geometry\";\nimport { OctEncodedNormal, QParams3d, QPoint3d, Quantization } from \"@itwin/core-common\";\nimport { computeDimensions } from \"./VertexTable\";\n\n/** @internal */\nexport interface AuxChannelProps {\n readonly name: string;\n readonly inputs: number[];\n readonly indices: number[];\n}\n\n/** @internal */\nexport interface QuantizedAuxChannelProps extends AuxChannelProps {\n readonly qOrigin: number[];\n readonly qScale: number[];\n}\n\n/** @internal */\nexport class AuxChannel implements AuxChannelProps {\n public readonly name: string;\n public readonly inputs: number[];\n public readonly indices: number[];\n\n public constructor(props: AuxChannelProps) {\n this.name = props.name;\n this.inputs = props.inputs;\n this.indices = props.indices;\n }\n}\n\n/** @internal */\nexport class AuxDisplacementChannel extends AuxChannel {\n public readonly qOrigin: Float32Array;\n public readonly qScale: Float32Array;\n\n public constructor(props: QuantizedAuxChannelProps) {\n super(props);\n this.qOrigin = Float32Array.from(props.qOrigin);\n this.qScale = Float32Array.from(props.qScale);\n }\n}\n\n/** @internal */\nexport class AuxParamChannel extends AuxChannel {\n public readonly qOrigin: number;\n public readonly qScale: number;\n\n public constructor(props: QuantizedAuxChannelProps) {\n super(props);\n this.qOrigin = props.qOrigin[0];\n this.qScale = props.qScale[0];\n }\n}\n\n/** @internal */\nexport interface AuxChannelTableProps {\n /** Rectangular array of per-vertex data, of size width * height * numBytesPerVertex bytes. */\n readonly data: Uint8Array;\n /** The number of 4-byte RGBA columns in each row of the array. */\n readonly width: number;\n /** The number of rows in the array. */\n readonly height: number;\n /** The number of vertices in the array. Must be no more than (width * height) / numBytesPerVertex. */\n readonly count: number;\n /** The number of bytes allocated for each vertex. Must be a multiple of two. */\n readonly numBytesPerVertex: number;\n /** Displacements used for animations. */\n readonly displacements?: QuantizedAuxChannelProps[];\n /** Normals used for animations. */\n readonly normals?: AuxChannelProps[];\n /** Scalar params used for animations. */\n readonly params?: QuantizedAuxChannelProps[];\n}\n\n/**\n * Represents one or more channels of auxiliary per-vertex data which can be used to animate and resymbolize a mesh in various ways.\n * Each channel holds a fixed number of bytes for each vertex (typically 2 bytes for normals and params, 6 bytes for displacements).\n * The channels are interleaved in a rectangular array such that the data for each vertex is stored contiguously; that is, if a displacement and\n * a normal channel exist, then the first vertex's displacement is followed by the first vertex's normal, which is followed by the second\n * vertex's displacement and normal; and so on.\n * @internal\n */\nexport class AuxChannelTable {\n /** Rectangular array of per-vertex data, of size width * height * numBytesPerVertex bytes. */\n public readonly data: Uint8Array;\n /** The number of 4-byte RGBA columns in each row of the array. */\n public readonly width: number;\n /** The number of rows in the array. */\n public readonly height: number;\n /** The number of vertices in the array. Must be no more than (width * height) / numBytesPerVertex. */\n public readonly numVertices: number;\n /** The number of bytes allocated for each vertex. Must be a multiple of two. */\n public readonly numBytesPerVertex: number;\n /** Displacements used for animations. */\n public readonly displacements?: AuxDisplacementChannel[];\n /** Normals used for animations. */\n public readonly normals?: AuxChannel[];\n /** Scalar params used for animations. */\n public readonly params?: AuxParamChannel[];\n\n private constructor(props: AuxChannelTableProps, displacements?: AuxDisplacementChannel[], normals?: AuxChannel[], params?: AuxParamChannel[]) {\n this.data = props.data;\n this.width = props.width;\n this.height = props.height;\n this.numVertices = props.count;\n this.numBytesPerVertex = props.numBytesPerVertex;\n this.displacements = displacements;\n this.normals = normals;\n this.params = params;\n }\n\n public static fromJSON(props: AuxChannelTableProps): AuxChannelTable | undefined {\n let displacements: AuxDisplacementChannel[] | undefined;\n let normals: AuxChannel[] | undefined;\n let params: AuxParamChannel[] | undefined;\n\n if (undefined !== props.displacements && 0 < props.displacements.length) {\n displacements = [];\n for (const displacement of props.displacements)\n displacements.push(new AuxDisplacementChannel(displacement));\n }\n\n if (undefined !== props.normals && 0 < props.normals.length) {\n normals = [];\n for (const normal of props.normals)\n normals.push(new AuxChannel(normal));\n }\n\n if (undefined !== props.params && 0 < props.params.length) {\n params = [];\n for (const param of props.params)\n params.push(new AuxParamChannel(param));\n }\n\n return undefined !== displacements || undefined !== normals || undefined !== params ? new AuxChannelTable(props, displacements, normals, params) : undefined;\n }\n\n public static fromChannels(channels: ReadonlyArray<PolyfaceAuxChannel>, numVertices: number): AuxChannelTable | undefined {\n return AuxChannelTableBuilder.buildAuxChannelTable(channels, numVertices);\n }\n}\n\nfunction invert(num: number): number {\n if (0 !== num)\n num = 1 / num;\n\n return num;\n}\n\nclass AuxChannelTableBuilder {\n private readonly _view: DataView;\n private readonly _props: Mutable<AuxChannelTableProps>;\n private readonly _numBytesPerVertex: number;\n\n private constructor(props: Mutable<AuxChannelTableProps>, numBytesPerVertex: number) {\n this._props = props;\n this._numBytesPerVertex = numBytesPerVertex;\n this._view = new DataView(props.data.buffer);\n }\n\n public static buildAuxChannelTable(channels: ReadonlyArray<PolyfaceAuxChannel>, numVertices: number): AuxChannelTable | undefined {\n const numBytesPerVertex = channels.reduce((accum, channel) => accum + computeNumBytesPerVertex(channel), 0);\n if (!numBytesPerVertex)\n return undefined;\n\n const nRgbaPerVertex = Math.floor((numBytesPerVertex + 3) / 4);\n const nUnusedBytesPerVertex = nRgbaPerVertex * 4 - numBytesPerVertex;\n assert(0 === nUnusedBytesPerVertex || 2 === nUnusedBytesPerVertex);\n\n // We don't want any unused bytes. If we've got 2 extra, make every other vertex's channel start in the middle of the first texel.\n let dimensions;\n if (0 !== nUnusedBytesPerVertex)\n dimensions = computeDimensions(Math.floor((numVertices + 1) / 2), numBytesPerVertex / 2, 0); // twice as many RGBA for half as many vertices.\n else\n dimensions = computeDimensions(numVertices, nRgbaPerVertex, 0);\n\n const data = new Uint8Array(dimensions.width * dimensions.height * 4);\n const props: Mutable<AuxChannelTableProps> = {\n data,\n width: dimensions.width,\n height: dimensions.height,\n count: numVertices,\n numBytesPerVertex,\n };\n\n const builder = new AuxChannelTableBuilder(props, numBytesPerVertex);\n builder.build(channels);\n return AuxChannelTable.fromJSON(props);\n }\n\n private build(channels: ReadonlyArray<PolyfaceAuxChannel>): void {\n let byteOffset = 0;\n for (const channel of channels) {\n if (AuxChannelDataType.Normal === channel.dataType)\n this.addNormals(channel, byteOffset);\n else if (AuxChannelDataType.Vector === channel.dataType)\n this.addDisplacements(channel, byteOffset);\n else\n this.addParams(channel, byteOffset);\n\n byteOffset += computeNumBytesPerVertex(channel);\n }\n }\n\n private addNormals(channel: PolyfaceAuxChannel, byteOffset: number): void {\n const inputs = [];\n const indices = [];\n\n const normal = new Vector3d();\n for (let i = 0; i < channel.data.length; i++) {\n let byteIndex = byteOffset + i * 2; // 2 bytes per normal\n indices.push(byteIndex / 2); // indices aligned to 2-byte intervals\n\n const data = channel.data[i];\n inputs.push(data.input);\n\n for (let j = 0; j < data.values.length; j += 3) {\n normal.x = data.values[j];\n normal.y = data.values[j + 1];\n normal.z = data.values[j + 2];\n normal.normalizeInPlace();\n\n const encodedNormal = OctEncodedNormal.encode(normal);\n this._view.setUint16(byteIndex, encodedNormal, true);\n byteIndex += this._numBytesPerVertex;\n }\n }\n\n const normals = this._props.normals ?? (this._props.normals = []);\n normals.push({\n name: channel.name ?? \"\",\n inputs,\n indices,\n });\n }\n\n private addParams(channel: PolyfaceAuxChannel, byteOffset: number): void {\n const inputs = [];\n const indices = [];\n\n const range = Range1d.createNull();\n for (const data of channel.data) {\n inputs.push(data.input);\n range.extendArray(data.values);\n }\n\n const qScale = Quantization.computeScale(range.high - range.low);\n\n for (let i = 0; i < channel.data.length; i++) {\n let byteIndex = byteOffset + i * 2; // 2 bytes per double\n indices.push(byteIndex / 2); // indices aligned to 2-byte intervals\n\n for (const value of channel.data[i].values) {\n const quantized = Quantization.quantize(value, range.low, qScale);\n this._view.setUint16(byteIndex, quantized, true);\n byteIndex += this._numBytesPerVertex;\n }\n }\n\n const params = this._props.params ?? (this._props.params = []);\n params.push({\n inputs,\n indices,\n name: channel.name ?? \"\",\n qOrigin: [range.low],\n qScale: [invert(qScale)],\n });\n }\n\n private addDisplacements(channel: PolyfaceAuxChannel, byteOffset: number): void {\n const inputs = [];\n const indices = [];\n\n const point = new Point3d();\n const range = Range3d.createNull();\n for (const data of channel.data) {\n inputs.push(data.input);\n for (let i = 0; i < data.values.length; i += 3) {\n point.set(data.values[i], data.values[i + 1], data.values[i + 2]);\n range.extend(point);\n }\n }\n\n const qParams = QParams3d.fromRange(range);\n const qPoint = new QPoint3d();\n for (let i = 0; i < channel.data.length; i++) {\n let byteIndex = byteOffset + i * 6; // 2 bytes per coordinate\n indices.push(byteIndex / 2); // indices aligned to 2-byte intervals\n\n const data = channel.data[i];\n for (let j = 0; j < data.values.length; j += 3) {\n point.set(data.values[j], data.values[j + 1], data.values[j + 2]);\n qPoint.init(point, qParams);\n\n this._view.setUint16(byteIndex + 0, qPoint.x, true);\n this._view.setUint16(byteIndex + 2, qPoint.y, true);\n this._view.setUint16(byteIndex + 4, qPoint.z, true);\n byteIndex += this._numBytesPerVertex;\n }\n }\n\n const displacements = this._props.displacements ?? (this._props.displacements = []);\n displacements.push({\n inputs,\n indices,\n name: channel.name ?? \"\",\n qOrigin: qParams.origin.toArray(),\n qScale: qParams.scale.toArray().map((x) => invert(x)),\n });\n }\n}\n\nfunction computeNumBytesPerVertex(channel: PolyfaceAuxChannel): number {\n const nEntries = channel.data.length;\n switch (channel.dataType) {\n case AuxChannelDataType.Vector:\n return 6 * nEntries; // 3 16-bit quantized coordinate values per entry.\n case AuxChannelDataType.Normal:\n case AuxChannelDataType.Distance:\n case AuxChannelDataType.Scalar:\n return 2 * nEntries; // 1 16-bit quantized value per entry.\n }\n}\n"]}
@@ -117,12 +117,11 @@ export function calculateEdgeTableParams(numSegmentEdges, numSilhouettes, maxSiz
117
117
  };
118
118
  }
119
119
  function buildIndexedEdges(args, doPolylines, maxSize) {
120
- var _a, _b, _c, _d, _e;
121
- const hardEdges = (_a = args.edges) === null || _a === void 0 ? void 0 : _a.edges;
120
+ const hardEdges = args.edges?.edges;
122
121
  const silhouettes = args.silhouettes;
123
- const polylines = doPolylines ? (_b = args.polylines) === null || _b === void 0 ? void 0 : _b.lines : undefined;
124
- const numHardEdges = (_c = hardEdges === null || hardEdges === void 0 ? void 0 : hardEdges.length) !== null && _c !== void 0 ? _c : 0;
125
- const numSilhouettes = (_e = (_d = silhouettes === null || silhouettes === void 0 ? void 0 : silhouettes.edges) === null || _d === void 0 ? void 0 : _d.length) !== null && _e !== void 0 ? _e : 0;
122
+ const polylines = doPolylines ? args.polylines?.lines : undefined;
123
+ const numHardEdges = hardEdges?.length ?? 0;
124
+ const numSilhouettes = silhouettes?.edges?.length ?? 0;
126
125
  const numPolylines = polylines ? polylines.reduce((count, pd) => count + Math.max(0, pd.vertIndices.length - 1), 0) : 0;
127
126
  const numSegmentEdges = numHardEdges + numPolylines;
128
127
  const numTotalEdges = numSegmentEdges + numSilhouettes;
@@ -163,7 +162,7 @@ function buildIndexedEdges(args, doPolylines, maxSize) {
163
162
  }
164
163
  }
165
164
  }
166
- if (silhouettes === null || silhouettes === void 0 ? void 0 : silhouettes.edges) {
165
+ if (silhouettes?.edges) {
167
166
  assert(undefined !== silhouettes.normals);
168
167
  assert(silhouettes.normals.length === silhouettes.edges.length);
169
168
  function setSilhouette(index, start, end, normals) {
@@ -203,7 +202,7 @@ export var EdgeParams;
203
202
  let silhouettes;
204
203
  let indexed;
205
204
  if (IModelApp.tileAdmin.enableIndexedEdges) {
206
- indexed = buildIndexedEdges(args, !doJoints, maxWidth !== null && maxWidth !== void 0 ? maxWidth : IModelApp.renderSystem.maxTextureSize);
205
+ indexed = buildIndexedEdges(args, !doJoints, maxWidth ?? IModelApp.renderSystem.maxTextureSize);
207
206
  }
208
207
  else {
209
208
  segments = convertPolylinesAndEdges(undefined, args.edges.edges);
@@ -1 +1 @@
1
- {"version":3,"file":"EdgeParams.js","sourceRoot":"","sources":["../../../../src/render/primitives/EdgeParams.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 Rendering\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { LinePixels, MeshEdge, OctEncodedNormalPair, PolylineData } from \"@itwin/core-common\";\nimport { MeshArgs, MeshArgsEdges } from \"./mesh/MeshPrimitives\";\nimport { VertexIndices } from \"./VertexTable\";\nimport { TesselatedPolyline, wantJointTriangles } from \"./PolylineParams\";\nimport { IModelApp } from \"../../IModelApp\";\n\n/**\n * Describes a set of line segments representing edges of a mesh.\n * Each segment is expanded into a quad defined by two triangles.\n * The positions are adjusted in the shader to account for the edge width.\n * @internal\n */\nexport interface SegmentEdgeParams {\n /** The 24-bit indices of the tesselated line segment */\n readonly indices: VertexIndices;\n /**\n * For each 24-bit index, 4 bytes:\n * the 24-bit index of the vertex at the other end of the segment, followed by\n * an 8-bit 'quad index' in [0..3] indicating which point in the expanded quad the vertex represents.\n */\n readonly endPointAndQuadIndices: Uint8Array;\n}\n\nfunction convertPolylinesAndEdges(polylines?: PolylineData[], edges?: MeshEdge[]): SegmentEdgeParams | undefined {\n let numIndices = undefined !== edges ? edges.length : 0;\n if (undefined !== polylines)\n for (const pd of polylines)\n numIndices += (pd.vertIndices.length - 1);\n\n if (0 === numIndices)\n return undefined;\n\n numIndices *= 6;\n const indexBytes = new Uint8Array(numIndices * 3);\n const endPointAndQuadIndexBytes = new Uint8Array(numIndices * 4);\n\n let ndx: number = 0;\n let ndx2: number = 0;\n\n const addPoint = (p0: number, p1: number, quadIndex: number) => {\n VertexIndices.encodeIndex(p0, indexBytes, ndx);\n ndx += 3;\n VertexIndices.encodeIndex(p1, endPointAndQuadIndexBytes, ndx2);\n endPointAndQuadIndexBytes[ndx2 + 3] = quadIndex;\n ndx2 += 4;\n };\n\n if (undefined !== polylines) {\n for (const pd of polylines) {\n const num = pd.vertIndices.length - 1;\n for (let i = 0; i < num; ++i) {\n let p0 = pd.vertIndices[i];\n let p1 = pd.vertIndices[i + 1];\n if (p1 < p0) { // swap so that lower index is first.\n p0 = p1;\n p1 = pd.vertIndices[i];\n }\n addPoint(p0, p1, 0);\n addPoint(p1, p0, 2);\n addPoint(p0, p1, 1);\n addPoint(p0, p1, 1);\n addPoint(p1, p0, 2);\n addPoint(p1, p0, 3);\n }\n }\n }\n\n if (undefined !== edges) {\n for (const meshEdge of edges) {\n const p0 = meshEdge.indices[0];\n const p1 = meshEdge.indices[1];\n addPoint(p0, p1, 0);\n addPoint(p1, p0, 2);\n addPoint(p0, p1, 1);\n addPoint(p0, p1, 1);\n addPoint(p1, p0, 2);\n addPoint(p1, p0, 3);\n }\n }\n\n return {\n indices: new VertexIndices(indexBytes),\n endPointAndQuadIndices: endPointAndQuadIndexBytes,\n };\n}\n\n/**\n * A set of line segments representing edges of curved portions of a mesh.\n * Each vertex is augmented with a pair of oct-encoded normals used in the shader\n * to determine whether or not the edge should be displayed.\n * @internal\n */\nexport interface SilhouetteParams extends SegmentEdgeParams {\n /** Per index, 2 16-bit oct-encoded normals */\n readonly normalPairs: Uint8Array;\n}\n\nfunction convertSilhouettes(edges: MeshEdge[], normalPairs: OctEncodedNormalPair[]): SilhouetteParams | undefined {\n const base = convertPolylinesAndEdges(undefined, edges);\n if (undefined === base)\n return undefined;\n\n const normalPairBytes = new Uint8Array(normalPairs.length * 6 * 4);\n const normalPair16 = new Uint16Array(normalPairBytes.buffer);\n\n let ndx = 0;\n for (const pair of normalPairs) {\n for (let i = 0; i < 6; i++) {\n normalPair16[ndx++] = pair.first.value;\n normalPair16[ndx++] = pair.second.value;\n }\n }\n\n return {\n indices: base.indices,\n endPointAndQuadIndices: base.endPointAndQuadIndices,\n normalPairs: normalPairBytes,\n };\n}\n\n/** A lookup table of edges for a mesh. The table is partitioned such that the lower partition contains simple segment edges\n * and the upper partition contains silhouette edges. Each entry in the lower partition consists of 2 24-bit indices into\n * a [[VertexTable]] from which to obtain the endpoints of the edge. Each entry in the upper partition consists of 2 24-bit\n * vertex indices followed by two 16-bit [[OctEncodedNormal]]s.\n * If both partitions exist then one row may exist between them containing a mix of segments and silhouettes; in this case a handful\n * of padding bytes may exist between the last segment and the first silhouette.\n * @see [[IndexedEdgeParams.edges]].\n * @internal\n */\nexport interface EdgeTable {\n /** The rectangular lookup table. */\n readonly data: Uint8Array;\n /** Width of the table. */\n readonly width: number;\n /** Height of the table. */\n readonly height: number;\n /** The number of segments in the lower partition. */\n readonly numSegments: number;\n /** The number of padding bytes inserted between the partitions to preserve alignment of data. */\n readonly silhouettePadding: number;\n}\n\n/** Describes the edges of a surface as a lookup table. Each edge consists of six identical indices into the lookup table, forming a quad.\n * @see [[EdgeParams.indexed]].\n * @internal\n */\nexport interface IndexedEdgeParams {\n /** The indices into [[edges]]. */\n readonly indices: VertexIndices;\n /** The lookup table indexed by [[indices]]. */\n readonly edges: EdgeTable;\n}\n\nexport interface EdgeTableInfo {\n /** Width of the table. */\n readonly width: number;\n /** Height of the table. */\n readonly height: number;\n /** The number of segments in the lower partition. */\n readonly silhouettePadding: number;\n /** The starting byte index of silhouettes */\n readonly silhouetteStartByteIndex: number;\n}\n\nexport function calculateEdgeTableParams(numSegmentEdges: number, numSilhouettes: number, maxSize: number): EdgeTableInfo {\n // Each segment edge requires 2 24-bit indices = 6 bytes = 1.5 RGBA values.\n // Each silhouette requires the same as segment edge plus 2 16-bit oct-encoded normals = 10 bytes = 2.5 RGBA values.\n let nRgbaRequired = Math.ceil(1.5 * numSegmentEdges + 2.5 * numSilhouettes);\n const silhouetteStartByteIndex = numSegmentEdges * 6;\n let silhouettePadding = 0;\n let width = nRgbaRequired;\n let height = 1;\n if (nRgbaRequired >= maxSize) {\n // Make roughly square to reduce unused space in last row.\n width = Math.ceil(Math.sqrt(nRgbaRequired));\n // Each entry's data must fit on the same row. 15 RGBA = 60 bytes = lowest common multiple of 6, 10, and 4.\n const remainder = width % 15;\n if (0 !== remainder)\n width += 15 - remainder;\n\n // If the table contains both segments and silhouettes, there may be one row containing a mix of the two where padding\n // is required between them.\n if (numSilhouettes > 0 && numSegmentEdges > 0) {\n const silOffset = silhouetteStartByteIndex % 60; // some multiple of 6.\n silhouettePadding = (60 - silOffset) % 10;\n nRgbaRequired += Math.ceil(silhouettePadding / 4);\n }\n\n height = Math.ceil(nRgbaRequired / width);\n if (width * height < nRgbaRequired)\n height++;\n }\n\n return {\n width,\n height,\n silhouettePadding,\n silhouetteStartByteIndex,\n };\n}\n\nfunction buildIndexedEdges(args: MeshArgsEdges, doPolylines: boolean, maxSize: number): IndexedEdgeParams | undefined {\n const hardEdges = args.edges?.edges;\n const silhouettes = args.silhouettes;\n const polylines = doPolylines ? args.polylines?.lines : undefined;\n\n const numHardEdges = hardEdges?.length ?? 0;\n const numSilhouettes = silhouettes?.edges?.length ?? 0;\n const numPolylines = polylines ? polylines.reduce((count: number, pd: PolylineData) => count + Math.max(0, pd.vertIndices.length - 1), 0) : 0;\n const numSegmentEdges = numHardEdges + numPolylines;\n const numTotalEdges = numSegmentEdges + numSilhouettes;\n if (numTotalEdges === 0)\n return undefined;\n\n // Each edge is a quad consisting of six vertices. Each vertex is an identical 24-bit index into the lookup table.\n const indices = new VertexIndices(new Uint8Array(numTotalEdges * 6 * 3));\n for (let i = 0; i < numTotalEdges; i++)\n for (let j = 0; j < 6; j++)\n indices.setNthIndex(i * 6 + j, i);\n\n const {width, height, silhouettePadding, silhouetteStartByteIndex } = calculateEdgeTableParams (numSegmentEdges, numSilhouettes, maxSize);\n\n const data = new Uint8Array(width * height * 4);\n function setUint24(byteIndex: number, value: number): void {\n data[byteIndex + 0] = value & 0x0000ff;\n data[byteIndex + 1] = (value & 0x00ff00) >>> 8;\n data[byteIndex + 2] = (value & 0xff0000) >>> 16;\n }\n\n function setEdge(index: number, startPointIndex: number, endPointIndex: number): void {\n const byteIndex = index * 6;\n setUint24(byteIndex, startPointIndex);\n setUint24(byteIndex + 3, endPointIndex);\n }\n\n let curIndex = 0;\n if (hardEdges)\n for (const edge of hardEdges)\n setEdge(curIndex++, edge.indices[0], edge.indices[1]);\n\n if (polylines) {\n for (const pd of polylines) {\n const num = pd.vertIndices.length - 1;\n for (let i = 0; i < num; i++) {\n const p0 = pd.vertIndices[i];\n const p1 = pd.vertIndices[i + 1];\n // Ensure lower index is first.\n if (p0 < p1)\n setEdge(curIndex++, p0, p1);\n else\n setEdge(curIndex++, p1, p0);\n }\n }\n }\n\n if (silhouettes?.edges) {\n assert(undefined !== silhouettes.normals);\n assert(silhouettes.normals.length === silhouettes.edges.length);\n function setSilhouette(index: number, start: number, end: number, normals: OctEncodedNormalPair): void {\n const byteIndex = silhouetteStartByteIndex + silhouettePadding + index * 10;\n setUint24(byteIndex, start);\n setUint24(byteIndex + 3, end);\n data[byteIndex + 6] = normals.first.value & 0xff;\n data[byteIndex + 7] = (normals.first.value & 0xff00) >>> 8;\n data[byteIndex + 8] = normals.second.value & 0xff;\n data[byteIndex + 9] = (normals.second.value & 0xff00) >>> 8;\n }\n\n curIndex = 0;\n for (let i = 0; i < silhouettes.edges.length; i++)\n setSilhouette(curIndex++, silhouettes.edges[i].indices[0], silhouettes.edges[i].indices[1], silhouettes.normals[i]);\n }\n\n return {\n indices,\n edges: {\n data,\n width,\n height,\n numSegments: numSegmentEdges,\n silhouettePadding,\n },\n };\n}\n\n/** Describes the edges of a mesh. */\nexport interface EdgeParams {\n /** The edge width in pixels. */\n readonly weight: number;\n /** The line pattern in which edges are drawn. */\n readonly linePixels: LinePixels;\n /** Simple single-segment edges, always displayed when edge display is enabled. */\n readonly segments?: SegmentEdgeParams;\n /** Single-segment edges of curved surfaces, displayed based on edge normal relative to eye. */\n readonly silhouettes?: SilhouetteParams;\n /** Polyline edges, always displayed when edge display is enabled. */\n readonly polylines?: TesselatedPolyline;\n /** Silhouettes and simple-segment edges, compactly represented as indices into a lookup table. */\n readonly indexed?: IndexedEdgeParams;\n}\n\n/** @internal */\nexport namespace EdgeParams {\n export function fromMeshArgs(meshArgs: MeshArgs, maxWidth?: number): EdgeParams | undefined {\n const args = meshArgs.edges;\n if (!args)\n return undefined;\n\n const doJoints = wantJointTriangles(args.width, true === meshArgs.is2d);\n const polylines = doJoints ? TesselatedPolyline.fromMesh(meshArgs) : undefined;\n\n let segments: SegmentEdgeParams | undefined;\n let silhouettes: SilhouetteParams | undefined;\n let indexed: IndexedEdgeParams | undefined;\n\n if (IModelApp.tileAdmin.enableIndexedEdges) {\n indexed = buildIndexedEdges(args, !doJoints, maxWidth ?? IModelApp.renderSystem.maxTextureSize);\n } else {\n segments = convertPolylinesAndEdges(undefined, args.edges.edges);\n silhouettes = args.silhouettes.edges && args.silhouettes.normals ? convertSilhouettes(args.silhouettes.edges, args.silhouettes.normals) : undefined;\n }\n\n if (!segments && !silhouettes && !polylines && !indexed)\n return undefined;\n\n return {\n weight: args.width,\n linePixels: args.linePixels,\n segments,\n silhouettes,\n polylines,\n indexed,\n };\n }\n}\n"]}
1
+ {"version":3,"file":"EdgeParams.js","sourceRoot":"","sources":["../../../../src/render/primitives/EdgeParams.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 Rendering\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { LinePixels, MeshEdge, OctEncodedNormalPair, PolylineData } from \"@itwin/core-common\";\nimport { MeshArgs, MeshArgsEdges } from \"./mesh/MeshPrimitives\";\nimport { VertexIndices } from \"./VertexTable\";\nimport { TesselatedPolyline, wantJointTriangles } from \"./PolylineParams\";\nimport { IModelApp } from \"../../IModelApp\";\n\n/**\n * Describes a set of line segments representing edges of a mesh.\n * Each segment is expanded into a quad defined by two triangles.\n * The positions are adjusted in the shader to account for the edge width.\n * @internal\n */\nexport interface SegmentEdgeParams {\n /** The 24-bit indices of the tesselated line segment */\n readonly indices: VertexIndices;\n /**\n * For each 24-bit index, 4 bytes:\n * the 24-bit index of the vertex at the other end of the segment, followed by\n * an 8-bit 'quad index' in [0..3] indicating which point in the expanded quad the vertex represents.\n */\n readonly endPointAndQuadIndices: Uint8Array;\n}\n\nfunction convertPolylinesAndEdges(polylines?: PolylineData[], edges?: MeshEdge[]): SegmentEdgeParams | undefined {\n let numIndices = undefined !== edges ? edges.length : 0;\n if (undefined !== polylines)\n for (const pd of polylines)\n numIndices += (pd.vertIndices.length - 1);\n\n if (0 === numIndices)\n return undefined;\n\n numIndices *= 6;\n const indexBytes = new Uint8Array(numIndices * 3);\n const endPointAndQuadIndexBytes = new Uint8Array(numIndices * 4);\n\n let ndx: number = 0;\n let ndx2: number = 0;\n\n const addPoint = (p0: number, p1: number, quadIndex: number) => {\n VertexIndices.encodeIndex(p0, indexBytes, ndx);\n ndx += 3;\n VertexIndices.encodeIndex(p1, endPointAndQuadIndexBytes, ndx2);\n endPointAndQuadIndexBytes[ndx2 + 3] = quadIndex;\n ndx2 += 4;\n };\n\n if (undefined !== polylines) {\n for (const pd of polylines) {\n const num = pd.vertIndices.length - 1;\n for (let i = 0; i < num; ++i) {\n let p0 = pd.vertIndices[i];\n let p1 = pd.vertIndices[i + 1];\n if (p1 < p0) { // swap so that lower index is first.\n p0 = p1;\n p1 = pd.vertIndices[i];\n }\n addPoint(p0, p1, 0);\n addPoint(p1, p0, 2);\n addPoint(p0, p1, 1);\n addPoint(p0, p1, 1);\n addPoint(p1, p0, 2);\n addPoint(p1, p0, 3);\n }\n }\n }\n\n if (undefined !== edges) {\n for (const meshEdge of edges) {\n const p0 = meshEdge.indices[0];\n const p1 = meshEdge.indices[1];\n addPoint(p0, p1, 0);\n addPoint(p1, p0, 2);\n addPoint(p0, p1, 1);\n addPoint(p0, p1, 1);\n addPoint(p1, p0, 2);\n addPoint(p1, p0, 3);\n }\n }\n\n return {\n indices: new VertexIndices(indexBytes),\n endPointAndQuadIndices: endPointAndQuadIndexBytes,\n };\n}\n\n/**\n * A set of line segments representing edges of curved portions of a mesh.\n * Each vertex is augmented with a pair of oct-encoded normals used in the shader\n * to determine whether or not the edge should be displayed.\n * @internal\n */\nexport interface SilhouetteParams extends SegmentEdgeParams {\n /** Per index, 2 16-bit oct-encoded normals */\n readonly normalPairs: Uint8Array;\n}\n\nfunction convertSilhouettes(edges: MeshEdge[], normalPairs: OctEncodedNormalPair[]): SilhouetteParams | undefined {\n const base = convertPolylinesAndEdges(undefined, edges);\n if (undefined === base)\n return undefined;\n\n const normalPairBytes = new Uint8Array(normalPairs.length * 6 * 4);\n const normalPair16 = new Uint16Array(normalPairBytes.buffer);\n\n let ndx = 0;\n for (const pair of normalPairs) {\n for (let i = 0; i < 6; i++) {\n normalPair16[ndx++] = pair.first.value;\n normalPair16[ndx++] = pair.second.value;\n }\n }\n\n return {\n indices: base.indices,\n endPointAndQuadIndices: base.endPointAndQuadIndices,\n normalPairs: normalPairBytes,\n };\n}\n\n/** A lookup table of edges for a mesh. The table is partitioned such that the lower partition contains simple segment edges\n * and the upper partition contains silhouette edges. Each entry in the lower partition consists of 2 24-bit indices into\n * a [[VertexTable]] from which to obtain the endpoints of the edge. Each entry in the upper partition consists of 2 24-bit\n * vertex indices followed by two 16-bit [[OctEncodedNormal]]s.\n * If both partitions exist then one row may exist between them containing a mix of segments and silhouettes; in this case a handful\n * of padding bytes may exist between the last segment and the first silhouette.\n * @see [[IndexedEdgeParams.edges]].\n * @internal\n */\nexport interface EdgeTable {\n /** The rectangular lookup table. */\n readonly data: Uint8Array;\n /** Width of the table. */\n readonly width: number;\n /** Height of the table. */\n readonly height: number;\n /** The number of segments in the lower partition. */\n readonly numSegments: number;\n /** The number of padding bytes inserted between the partitions to preserve alignment of data. */\n readonly silhouettePadding: number;\n}\n\n/** Describes the edges of a surface as a lookup table. Each edge consists of six identical indices into the lookup table, forming a quad.\n * @see [[EdgeParams.indexed]].\n * @internal\n */\nexport interface IndexedEdgeParams {\n /** The indices into [[edges]]. */\n readonly indices: VertexIndices;\n /** The lookup table indexed by [[indices]]. */\n readonly edges: EdgeTable;\n}\n\nexport interface EdgeTableInfo {\n /** Width of the table. */\n readonly width: number;\n /** Height of the table. */\n readonly height: number;\n /** The number of segments in the lower partition. */\n readonly silhouettePadding: number;\n /** The starting byte index of silhouettes */\n readonly silhouetteStartByteIndex: number;\n}\n\nexport function calculateEdgeTableParams(numSegmentEdges: number, numSilhouettes: number, maxSize: number): EdgeTableInfo {\n // Each segment edge requires 2 24-bit indices = 6 bytes = 1.5 RGBA values.\n // Each silhouette requires the same as segment edge plus 2 16-bit oct-encoded normals = 10 bytes = 2.5 RGBA values.\n let nRgbaRequired = Math.ceil(1.5 * numSegmentEdges + 2.5 * numSilhouettes);\n const silhouetteStartByteIndex = numSegmentEdges * 6;\n let silhouettePadding = 0;\n let width = nRgbaRequired;\n let height = 1;\n if (nRgbaRequired >= maxSize) {\n // Make roughly square to reduce unused space in last row.\n width = Math.ceil(Math.sqrt(nRgbaRequired));\n // Each entry's data must fit on the same row. 15 RGBA = 60 bytes = lowest common multiple of 6, 10, and 4.\n const remainder = width % 15;\n if (0 !== remainder)\n width += 15 - remainder;\n\n // If the table contains both segments and silhouettes, there may be one row containing a mix of the two where padding\n // is required between them.\n if (numSilhouettes > 0 && numSegmentEdges > 0) {\n const silOffset = silhouetteStartByteIndex % 60; // some multiple of 6.\n silhouettePadding = (60 - silOffset) % 10;\n nRgbaRequired += Math.ceil(silhouettePadding / 4);\n }\n\n height = Math.ceil(nRgbaRequired / width);\n if (width * height < nRgbaRequired)\n height++;\n }\n\n return {\n width,\n height,\n silhouettePadding,\n silhouetteStartByteIndex,\n };\n}\n\nfunction buildIndexedEdges(args: MeshArgsEdges, doPolylines: boolean, maxSize: number): IndexedEdgeParams | undefined {\n const hardEdges = args.edges?.edges;\n const silhouettes = args.silhouettes;\n const polylines = doPolylines ? args.polylines?.lines : undefined;\n\n const numHardEdges = hardEdges?.length ?? 0;\n const numSilhouettes = silhouettes?.edges?.length ?? 0;\n const numPolylines = polylines ? polylines.reduce((count: number, pd: PolylineData) => count + Math.max(0, pd.vertIndices.length - 1), 0) : 0;\n const numSegmentEdges = numHardEdges + numPolylines;\n const numTotalEdges = numSegmentEdges + numSilhouettes;\n if (numTotalEdges === 0)\n return undefined;\n\n // Each edge is a quad consisting of six vertices. Each vertex is an identical 24-bit index into the lookup table.\n const indices = new VertexIndices(new Uint8Array(numTotalEdges * 6 * 3));\n for (let i = 0; i < numTotalEdges; i++)\n for (let j = 0; j < 6; j++)\n indices.setNthIndex(i * 6 + j, i);\n\n const {width, height, silhouettePadding, silhouetteStartByteIndex } = calculateEdgeTableParams (numSegmentEdges, numSilhouettes, maxSize);\n\n const data = new Uint8Array(width * height * 4);\n function setUint24(byteIndex: number, value: number): void {\n data[byteIndex + 0] = value & 0x0000ff;\n data[byteIndex + 1] = (value & 0x00ff00) >>> 8;\n data[byteIndex + 2] = (value & 0xff0000) >>> 16;\n }\n\n function setEdge(index: number, startPointIndex: number, endPointIndex: number): void {\n const byteIndex = index * 6;\n setUint24(byteIndex, startPointIndex);\n setUint24(byteIndex + 3, endPointIndex);\n }\n\n let curIndex = 0;\n if (hardEdges)\n for (const edge of hardEdges)\n setEdge(curIndex++, edge.indices[0], edge.indices[1]);\n\n if (polylines) {\n for (const pd of polylines) {\n const num = pd.vertIndices.length - 1;\n for (let i = 0; i < num; i++) {\n const p0 = pd.vertIndices[i];\n const p1 = pd.vertIndices[i + 1];\n // Ensure lower index is first.\n if (p0 < p1)\n setEdge(curIndex++, p0, p1);\n else\n setEdge(curIndex++, p1, p0);\n }\n }\n }\n\n if (silhouettes?.edges) {\n assert(undefined !== silhouettes.normals);\n assert(silhouettes.normals.length === silhouettes.edges.length);\n function setSilhouette(index: number, start: number, end: number, normals: OctEncodedNormalPair): void {\n const byteIndex = silhouetteStartByteIndex + silhouettePadding + index * 10;\n setUint24(byteIndex, start);\n setUint24(byteIndex + 3, end);\n data[byteIndex + 6] = normals.first.value & 0xff;\n data[byteIndex + 7] = (normals.first.value & 0xff00) >>> 8;\n data[byteIndex + 8] = normals.second.value & 0xff;\n data[byteIndex + 9] = (normals.second.value & 0xff00) >>> 8;\n }\n\n curIndex = 0;\n for (let i = 0; i < silhouettes.edges.length; i++)\n setSilhouette(curIndex++, silhouettes.edges[i].indices[0], silhouettes.edges[i].indices[1], silhouettes.normals[i]);\n }\n\n return {\n indices,\n edges: {\n data,\n width,\n height,\n numSegments: numSegmentEdges,\n silhouettePadding,\n },\n };\n}\n\n/** Describes the edges of a mesh. */\nexport interface EdgeParams {\n /** The edge width in pixels. */\n readonly weight: number;\n /** The line pattern in which edges are drawn. */\n readonly linePixels: LinePixels;\n /** Simple single-segment edges, always displayed when edge display is enabled. */\n readonly segments?: SegmentEdgeParams;\n /** Single-segment edges of curved surfaces, displayed based on edge normal relative to eye. */\n readonly silhouettes?: SilhouetteParams;\n /** Polyline edges, always displayed when edge display is enabled. */\n readonly polylines?: TesselatedPolyline;\n /** Silhouettes and simple-segment edges, compactly represented as indices into a lookup table. */\n readonly indexed?: IndexedEdgeParams;\n}\n\n/** @internal */\nexport namespace EdgeParams {\n export function fromMeshArgs(meshArgs: MeshArgs, maxWidth?: number): EdgeParams | undefined {\n const args = meshArgs.edges;\n if (!args)\n return undefined;\n\n const doJoints = wantJointTriangles(args.width, true === meshArgs.is2d);\n const polylines = doJoints ? TesselatedPolyline.fromMesh(meshArgs) : undefined;\n\n let segments: SegmentEdgeParams | undefined;\n let silhouettes: SilhouetteParams | undefined;\n let indexed: IndexedEdgeParams | undefined;\n\n if (IModelApp.tileAdmin.enableIndexedEdges) {\n indexed = buildIndexedEdges(args, !doJoints, maxWidth ?? IModelApp.renderSystem.maxTextureSize);\n } else {\n segments = convertPolylinesAndEdges(undefined, args.edges.edges);\n silhouettes = args.silhouettes.edges && args.silhouettes.normals ? convertSilhouettes(args.silhouettes.edges, args.silhouettes.normals) : undefined;\n }\n\n if (!segments && !silhouettes && !polylines && !indexed)\n return undefined;\n\n return {\n weight: args.width,\n linePixels: args.linePixels,\n segments,\n silhouettes,\n polylines,\n indexed,\n };\n }\n}\n"]}
@@ -13,7 +13,7 @@ export var TesselatedPolyline;
13
13
  (function (TesselatedPolyline) {
14
14
  function fromMesh(args) {
15
15
  const tesselator = PolylineTesselator.fromMesh(args);
16
- return tesselator === null || tesselator === void 0 ? void 0 : tesselator.tesselate();
16
+ return tesselator?.tesselate();
17
17
  }
18
18
  TesselatedPolyline.fromMesh = fromMesh;
19
19
  })(TesselatedPolyline || (TesselatedPolyline = {}));
@@ -72,8 +72,7 @@ class PolylineTesselator {
72
72
  return new PolylineTesselator(args.polylines, args.points, wantJointTriangles(args.width, args.flags.is2d));
73
73
  }
74
74
  static fromMesh(args) {
75
- var _a;
76
- if (undefined !== ((_a = args.edges) === null || _a === void 0 ? void 0 : _a.polylines.lines) && undefined !== args.points)
75
+ if (undefined !== args.edges?.polylines.lines && undefined !== args.points)
77
76
  return new PolylineTesselator(args.edges.polylines.lines, args.points, wantJointTriangles(args.edges.width, true === args.is2d));
78
77
  return undefined;
79
78
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PolylineParams.js","sourceRoot":"","sources":["../../../../src/render/primitives/PolylineParams.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 Rendering\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Point3d, Vector3d } from \"@itwin/core-geometry\";\nimport { LinePixels, PolylineData, PolylineTypeFlags, QPoint3dList } from \"@itwin/core-common\";\nimport { MeshArgs, PolylineArgs } from \"./mesh/MeshPrimitives\";\nimport { VertexIndices, VertexTable } from \"./VertexTable\";\n\n/** Parameter associated with each vertex index of a tesselated polyline. */\nconst enum PolylineParam { // eslint-disable-line no-restricted-syntax\n kNone = 0,\n kSquare = 1 * 3,\n kMiter = 2 * 3,\n kMiterInsideOnly = 3 * 3,\n kJointBase = 4 * 3,\n kNegatePerp = 8 * 3,\n kNegateAlong = 16 * 3,\n kNoneAdjustWeight = 32 * 3,\n}\n\n/**\n * Represents a tesselated polyline.\n * Given a polyline as a line string, each segment of the line string is triangulated into a quad.\n * Based on the angle between two segments, additional joint triangles may be inserted in between to enable smoothly-rounded corners.\n * @internal\n */\nexport interface TesselatedPolyline {\n /** 24-bit index of each vertex. */\n readonly indices: VertexIndices;\n /** 24-bit index of the previous vertex in the polyline. */\n readonly prevIndices: VertexIndices;\n /** 24-bit index of the next vertex in the polyline, plus 8-bit parameter describing the semantics of this vertex. */\n readonly nextIndicesAndParams: Uint8Array;\n}\n\nexport namespace TesselatedPolyline {\n export function fromMesh(args: MeshArgs): TesselatedPolyline | undefined {\n const tesselator = PolylineTesselator.fromMesh(args);\n return tesselator?.tesselate();\n }\n}\n\nclass PolylineVertex {\n public isSegmentStart: boolean = false;\n public isPolylineStartOrEnd: boolean = false;\n public vertexIndex: number = 0;\n public prevIndex: number = 0;\n public nextIndex: number = 0;\n\n public constructor() { }\n\n public init(isSegmentStart: boolean, isPolylineStartOrEnd: boolean, vertexIndex: number, prevIndex: number, nextIndex: number) {\n this.isSegmentStart = isSegmentStart;\n this.isPolylineStartOrEnd = isPolylineStartOrEnd;\n this.vertexIndex = vertexIndex;\n this.prevIndex = prevIndex;\n this.nextIndex = nextIndex;\n }\n\n public computeParam(negatePerp: boolean, adjacentToJoint: boolean = false, joint: boolean = false, noDisplacement: boolean = false): number {\n if (joint)\n return PolylineParam.kJointBase;\n\n let param: PolylineParam;\n if (noDisplacement)\n param = PolylineParam.kNoneAdjustWeight; // prevent getting tossed before width adjustment\n else if (adjacentToJoint)\n param = PolylineParam.kMiterInsideOnly;\n else\n param = this.isPolylineStartOrEnd ? PolylineParam.kSquare : PolylineParam.kMiter;\n\n let adjust = 0;\n if (negatePerp)\n adjust = PolylineParam.kNegatePerp;\n if (!this.isSegmentStart)\n adjust += PolylineParam.kNegateAlong;\n\n return param + adjust;\n }\n}\n\nclass PolylineTesselator {\n private _polylines: PolylineData[];\n private _doJoints: boolean;\n private _numIndices = 0;\n private _vertIndex: number[] = [];\n private _prevIndex: number[] = [];\n private _nextIndex: number[] = [];\n private _nextParam: number[] = [];\n private _position: Point3d[] = [];\n\n public constructor(polylines: PolylineData[], points: QPoint3dList | Point3d[], doJointTriangles: boolean) {\n this._polylines = polylines;\n if (points instanceof QPoint3dList) {\n for (const p of points.list)\n this._position.push(p.unquantize(points.params));\n } else {\n this._position = points;\n }\n\n this._doJoints = doJointTriangles;\n }\n\n public static fromPolyline(args: PolylineArgs): PolylineTesselator {\n return new PolylineTesselator(args.polylines, args.points, wantJointTriangles(args.width, args.flags.is2d));\n }\n\n public static fromMesh(args: MeshArgs): PolylineTesselator | undefined {\n if (undefined !== args.edges?.polylines.lines && undefined !== args.points)\n return new PolylineTesselator(args.edges.polylines.lines, args.points, wantJointTriangles(args.edges.width, true === args.is2d));\n\n return undefined;\n }\n\n public tesselate(): TesselatedPolyline {\n this._tesselate();\n\n const vertIndex = VertexIndices.fromArray(this._vertIndex);\n const prevIndex = VertexIndices.fromArray(this._prevIndex);\n\n const nextIndexAndParam = new Uint8Array(this._numIndices * 4);\n for (let i = 0; i < this._numIndices; i++) {\n const index = this._nextIndex[i];\n const j = i * 4;\n VertexIndices.encodeIndex(index, nextIndexAndParam, j);\n nextIndexAndParam[j + 3] = this._nextParam[i] & 0x000000ff;\n }\n\n return {\n indices: vertIndex,\n prevIndices: prevIndex,\n nextIndicesAndParams: nextIndexAndParam,\n };\n }\n\n private _tesselate() {\n const v0 = new PolylineVertex(), v1 = new PolylineVertex();\n const maxJointDot = -0.7;\n\n for (const line of this._polylines) {\n if (line.numIndices < 2)\n continue;\n\n const last = line.numIndices - 1;\n const isClosed: boolean = line.vertIndices[0] === line.vertIndices[last];\n\n for (let i = 0; i < last; ++i) {\n const idx0 = line.vertIndices[i];\n const idx1 = line.vertIndices[i + 1];\n const isStart: boolean = (0 === i);\n const isEnd: boolean = (last - 1 === i);\n const prevIdx0 = isStart ? (isClosed ? line.vertIndices[last - 1] : idx0) : line.vertIndices[i - 1];\n const nextIdx1 = isEnd ? (isClosed ? line.vertIndices[1] : idx1) : line.vertIndices[i + 2];\n\n v0.init(true, isStart && !isClosed, idx0, prevIdx0, idx1);\n v1.init(false, isEnd && !isClosed, idx1, nextIdx1, idx0);\n\n const jointAt0: boolean = this._doJoints && (isClosed || !isStart) && this._dotProduct(v0) > maxJointDot;\n const jointAt1: boolean = this._doJoints && (isClosed || !isEnd) && this._dotProduct(v1) > maxJointDot;\n\n if (jointAt0 || jointAt1) {\n this._addVertex(v0, v0.computeParam(true, jointAt0, false, false));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\n this._addVertex(v1, v1.computeParam(true, jointAt1, false, false));\n\n if (jointAt0)\n this.addJointTriangles(v0, v0.computeParam(false, true, false, true), v0);\n\n if (jointAt1)\n this.addJointTriangles(v1, v1.computeParam(false, true, false, true), v1);\n } else {\n this._addVertex(v0, v0.computeParam(true));\n this._addVertex(v1, v1.computeParam(false));\n this._addVertex(v0, v0.computeParam(false));\n this._addVertex(v0, v0.computeParam(false));\n this._addVertex(v1, v1.computeParam(false));\n this._addVertex(v1, v1.computeParam(true));\n }\n }\n }\n }\n\n private addJointTriangles(v0: PolylineVertex, p0: number, v1: PolylineVertex): void {\n const param = v1.computeParam(false, false, true);\n for (let i = 0; i < 3; i++) {\n this._addVertex(v0, p0);\n this._addVertex(v1, param + i + 1);\n this._addVertex(v1, param + i);\n }\n }\n\n private _dotProduct(v: PolylineVertex): number {\n const pos: Point3d = this._position[v.vertexIndex];\n const prevDir: Vector3d = Vector3d.createStartEnd(this._position[v.prevIndex], pos);\n const nextDir: Vector3d = Vector3d.createStartEnd(this._position[v.nextIndex], pos);\n return prevDir.dotProduct(nextDir);\n }\n\n private _addVertex(vertex: PolylineVertex, param: number): void {\n this._vertIndex[this._numIndices] = vertex.vertexIndex;\n this._prevIndex[this._numIndices] = vertex.prevIndex;\n this._nextIndex[this._numIndices] = vertex.nextIndex;\n this._nextParam[this._numIndices] = param;\n this._numIndices++;\n }\n}\n\n/** Strictly for tests. @internal */\nexport function tesselatePolyline(polylines: PolylineData[], points: QPoint3dList, doJointTriangles: boolean): TesselatedPolyline {\n const tesselator = new PolylineTesselator(polylines, points, doJointTriangles);\n return tesselator.tesselate();\n}\n\n/**\n * Describes a set of tesselated polylines.\n * Each segment of each polyline is triangulated into a quad. Additional triangles may be inserted\n * between segments to enable rounded corners.\n */\nexport class PolylineParams {\n public readonly vertices: VertexTable;\n public readonly polyline: TesselatedPolyline;\n public readonly isPlanar: boolean;\n public readonly type: PolylineTypeFlags;\n public readonly weight: number;\n public readonly linePixels: LinePixels;\n\n /** Directly construct a PolylineParams. The PolylineParams takes ownership of all input data. */\n public constructor(vertices: VertexTable, polyline: TesselatedPolyline, weight: number, linePixels: LinePixels, isPlanar: boolean, type: PolylineTypeFlags = PolylineTypeFlags.Normal) {\n this.vertices = vertices;\n this.polyline = polyline;\n this.isPlanar = isPlanar;\n this.weight = weight;\n this.linePixels = linePixels;\n this.type = type;\n }\n\n /** Construct from an PolylineArgs. */\n public static create(args: PolylineArgs): PolylineParams | undefined {\n assert(!args.flags.isDisjoint);\n const vertices = VertexTable.createForPolylines(args);\n if (undefined === vertices)\n return undefined;\n\n const tesselator = PolylineTesselator.fromPolyline(args);\n if (undefined === tesselator)\n return undefined;\n\n return new PolylineParams(vertices, tesselator.tesselate(), args.width, args.linePixels, args.flags.isPlanar, args.flags.type);\n }\n}\n\nexport function wantJointTriangles(weight: number, is2d: boolean): boolean {\n // Joints are incredibly expensive. In 3d, only generate them if the line is sufficiently wide for them to be noticeable.\n const jointWidthThreshold = 3;\n return is2d || weight >= jointWidthThreshold;\n}\n"]}
1
+ {"version":3,"file":"PolylineParams.js","sourceRoot":"","sources":["../../../../src/render/primitives/PolylineParams.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 Rendering\n */\n\nimport { assert } from \"@itwin/core-bentley\";\nimport { Point3d, Vector3d } from \"@itwin/core-geometry\";\nimport { LinePixels, PolylineData, PolylineTypeFlags, QPoint3dList } from \"@itwin/core-common\";\nimport { MeshArgs, PolylineArgs } from \"./mesh/MeshPrimitives\";\nimport { VertexIndices, VertexTable } from \"./VertexTable\";\n\n/** Parameter associated with each vertex index of a tesselated polyline. */\nconst enum PolylineParam { // eslint-disable-line no-restricted-syntax\n kNone = 0,\n kSquare = 1 * 3,\n kMiter = 2 * 3,\n kMiterInsideOnly = 3 * 3,\n kJointBase = 4 * 3,\n kNegatePerp = 8 * 3,\n kNegateAlong = 16 * 3,\n kNoneAdjustWeight = 32 * 3,\n}\n\n/**\n * Represents a tesselated polyline.\n * Given a polyline as a line string, each segment of the line string is triangulated into a quad.\n * Based on the angle between two segments, additional joint triangles may be inserted in between to enable smoothly-rounded corners.\n * @internal\n */\nexport interface TesselatedPolyline {\n /** 24-bit index of each vertex. */\n readonly indices: VertexIndices;\n /** 24-bit index of the previous vertex in the polyline. */\n readonly prevIndices: VertexIndices;\n /** 24-bit index of the next vertex in the polyline, plus 8-bit parameter describing the semantics of this vertex. */\n readonly nextIndicesAndParams: Uint8Array;\n}\n\nexport namespace TesselatedPolyline {\n export function fromMesh(args: MeshArgs): TesselatedPolyline | undefined {\n const tesselator = PolylineTesselator.fromMesh(args);\n return tesselator?.tesselate();\n }\n}\n\nclass PolylineVertex {\n public isSegmentStart: boolean = false;\n public isPolylineStartOrEnd: boolean = false;\n public vertexIndex: number = 0;\n public prevIndex: number = 0;\n public nextIndex: number = 0;\n\n public constructor() { }\n\n public init(isSegmentStart: boolean, isPolylineStartOrEnd: boolean, vertexIndex: number, prevIndex: number, nextIndex: number) {\n this.isSegmentStart = isSegmentStart;\n this.isPolylineStartOrEnd = isPolylineStartOrEnd;\n this.vertexIndex = vertexIndex;\n this.prevIndex = prevIndex;\n this.nextIndex = nextIndex;\n }\n\n public computeParam(negatePerp: boolean, adjacentToJoint: boolean = false, joint: boolean = false, noDisplacement: boolean = false): number {\n if (joint)\n return PolylineParam.kJointBase;\n\n let param: PolylineParam;\n if (noDisplacement)\n param = PolylineParam.kNoneAdjustWeight; // prevent getting tossed before width adjustment\n else if (adjacentToJoint)\n param = PolylineParam.kMiterInsideOnly;\n else\n param = this.isPolylineStartOrEnd ? PolylineParam.kSquare : PolylineParam.kMiter;\n\n let adjust = 0;\n if (negatePerp)\n adjust = PolylineParam.kNegatePerp;\n if (!this.isSegmentStart)\n adjust += PolylineParam.kNegateAlong;\n\n return param + adjust;\n }\n}\n\nclass PolylineTesselator {\n private _polylines: PolylineData[];\n private _doJoints: boolean;\n private _numIndices = 0;\n private _vertIndex: number[] = [];\n private _prevIndex: number[] = [];\n private _nextIndex: number[] = [];\n private _nextParam: number[] = [];\n private _position: Point3d[] = [];\n\n public constructor(polylines: PolylineData[], points: QPoint3dList | Point3d[], doJointTriangles: boolean) {\n this._polylines = polylines;\n if (points instanceof QPoint3dList) {\n for (const p of points.list)\n this._position.push(p.unquantize(points.params));\n } else {\n this._position = points;\n }\n\n this._doJoints = doJointTriangles;\n }\n\n public static fromPolyline(args: PolylineArgs): PolylineTesselator {\n return new PolylineTesselator(args.polylines, args.points, wantJointTriangles(args.width, args.flags.is2d));\n }\n\n public static fromMesh(args: MeshArgs): PolylineTesselator | undefined {\n if (undefined !== args.edges?.polylines.lines && undefined !== args.points)\n return new PolylineTesselator(args.edges.polylines.lines, args.points, wantJointTriangles(args.edges.width, true === args.is2d));\n\n return undefined;\n }\n\n public tesselate(): TesselatedPolyline {\n this._tesselate();\n\n const vertIndex = VertexIndices.fromArray(this._vertIndex);\n const prevIndex = VertexIndices.fromArray(this._prevIndex);\n\n const nextIndexAndParam = new Uint8Array(this._numIndices * 4);\n for (let i = 0; i < this._numIndices; i++) {\n const index = this._nextIndex[i];\n const j = i * 4;\n VertexIndices.encodeIndex(index, nextIndexAndParam, j);\n nextIndexAndParam[j + 3] = this._nextParam[i] & 0x000000ff;\n }\n\n return {\n indices: vertIndex,\n prevIndices: prevIndex,\n nextIndicesAndParams: nextIndexAndParam,\n };\n }\n\n private _tesselate() {\n const v0 = new PolylineVertex(), v1 = new PolylineVertex();\n const maxJointDot = -0.7;\n\n for (const line of this._polylines) {\n if (line.numIndices < 2)\n continue;\n\n const last = line.numIndices - 1;\n const isClosed: boolean = line.vertIndices[0] === line.vertIndices[last];\n\n for (let i = 0; i < last; ++i) {\n const idx0 = line.vertIndices[i];\n const idx1 = line.vertIndices[i + 1];\n const isStart: boolean = (0 === i);\n const isEnd: boolean = (last - 1 === i);\n const prevIdx0 = isStart ? (isClosed ? line.vertIndices[last - 1] : idx0) : line.vertIndices[i - 1];\n const nextIdx1 = isEnd ? (isClosed ? line.vertIndices[1] : idx1) : line.vertIndices[i + 2];\n\n v0.init(true, isStart && !isClosed, idx0, prevIdx0, idx1);\n v1.init(false, isEnd && !isClosed, idx1, nextIdx1, idx0);\n\n const jointAt0: boolean = this._doJoints && (isClosed || !isStart) && this._dotProduct(v0) > maxJointDot;\n const jointAt1: boolean = this._doJoints && (isClosed || !isEnd) && this._dotProduct(v1) > maxJointDot;\n\n if (jointAt0 || jointAt1) {\n this._addVertex(v0, v0.computeParam(true, jointAt0, false, false));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\n this._addVertex(v1, v1.computeParam(true, jointAt1, false, false));\n\n if (jointAt0)\n this.addJointTriangles(v0, v0.computeParam(false, true, false, true), v0);\n\n if (jointAt1)\n this.addJointTriangles(v1, v1.computeParam(false, true, false, true), v1);\n } else {\n this._addVertex(v0, v0.computeParam(true));\n this._addVertex(v1, v1.computeParam(false));\n this._addVertex(v0, v0.computeParam(false));\n this._addVertex(v0, v0.computeParam(false));\n this._addVertex(v1, v1.computeParam(false));\n this._addVertex(v1, v1.computeParam(true));\n }\n }\n }\n }\n\n private addJointTriangles(v0: PolylineVertex, p0: number, v1: PolylineVertex): void {\n const param = v1.computeParam(false, false, true);\n for (let i = 0; i < 3; i++) {\n this._addVertex(v0, p0);\n this._addVertex(v1, param + i + 1);\n this._addVertex(v1, param + i);\n }\n }\n\n private _dotProduct(v: PolylineVertex): number {\n const pos: Point3d = this._position[v.vertexIndex];\n const prevDir: Vector3d = Vector3d.createStartEnd(this._position[v.prevIndex], pos);\n const nextDir: Vector3d = Vector3d.createStartEnd(this._position[v.nextIndex], pos);\n return prevDir.dotProduct(nextDir);\n }\n\n private _addVertex(vertex: PolylineVertex, param: number): void {\n this._vertIndex[this._numIndices] = vertex.vertexIndex;\n this._prevIndex[this._numIndices] = vertex.prevIndex;\n this._nextIndex[this._numIndices] = vertex.nextIndex;\n this._nextParam[this._numIndices] = param;\n this._numIndices++;\n }\n}\n\n/** Strictly for tests. @internal */\nexport function tesselatePolyline(polylines: PolylineData[], points: QPoint3dList, doJointTriangles: boolean): TesselatedPolyline {\n const tesselator = new PolylineTesselator(polylines, points, doJointTriangles);\n return tesselator.tesselate();\n}\n\n/**\n * Describes a set of tesselated polylines.\n * Each segment of each polyline is triangulated into a quad. Additional triangles may be inserted\n * between segments to enable rounded corners.\n */\nexport class PolylineParams {\n public readonly vertices: VertexTable;\n public readonly polyline: TesselatedPolyline;\n public readonly isPlanar: boolean;\n public readonly type: PolylineTypeFlags;\n public readonly weight: number;\n public readonly linePixels: LinePixels;\n\n /** Directly construct a PolylineParams. The PolylineParams takes ownership of all input data. */\n public constructor(vertices: VertexTable, polyline: TesselatedPolyline, weight: number, linePixels: LinePixels, isPlanar: boolean, type: PolylineTypeFlags = PolylineTypeFlags.Normal) {\n this.vertices = vertices;\n this.polyline = polyline;\n this.isPlanar = isPlanar;\n this.weight = weight;\n this.linePixels = linePixels;\n this.type = type;\n }\n\n /** Construct from an PolylineArgs. */\n public static create(args: PolylineArgs): PolylineParams | undefined {\n assert(!args.flags.isDisjoint);\n const vertices = VertexTable.createForPolylines(args);\n if (undefined === vertices)\n return undefined;\n\n const tesselator = PolylineTesselator.fromPolyline(args);\n if (undefined === tesselator)\n return undefined;\n\n return new PolylineParams(vertices, tesselator.tesselate(), args.width, args.linePixels, args.flags.isPlanar, args.flags.type);\n }\n}\n\nexport function wantJointTriangles(weight: number, is2d: boolean): boolean {\n // Joints are incredibly expensive. In 3d, only generate them if the line is sufficiently wide for them to be noticeable.\n const jointWidthThreshold = 3;\n return is2d || weight >= jointWidthThreshold;\n}\n"]}
@@ -24,7 +24,7 @@ export class VertexKey {
24
24
  this.position = position.clone();
25
25
  this.fillColor = fillColor;
26
26
  this.normal = normal;
27
- this.uvParam = uvParam === null || uvParam === void 0 ? void 0 : uvParam.clone();
27
+ this.uvParam = uvParam?.clone();
28
28
  this.feature = feature;
29
29
  }
30
30
  static create(props) {
@@ -1 +1 @@
1
- {"version":3,"file":"VertexKey.js","sourceRoot":"","sources":["../../../../src/render/primitives/VertexKey.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 Rendering\n */\n\nimport { assert, comparePossiblyUndefined, compareWithTolerance, IndexMap } from \"@itwin/core-bentley\";\nimport { Point2d, Point3d, XYAndZ } from \"@itwin/core-geometry\";\nimport { Feature, OctEncodedNormal } from \"@itwin/core-common\";\n\n/** @internal */\nexport interface VertexKeyProps {\n position: Point3d;\n fillColor: number;\n normal?: OctEncodedNormal;\n uvParam?: Point2d;\n feature?: Feature;\n}\n\nfunction comparePositions(p0: Point3d, p1: Point3d, tolerance: XYAndZ): number {\n let diff = compareWithTolerance(p0.x, p1.x, tolerance.x);\n if (0 === diff) {\n diff = compareWithTolerance(p0.y, p1.y, tolerance.y);\n if (0 === diff)\n diff = compareWithTolerance(p0.z, p1.z, tolerance.z);\n }\n\n return diff;\n}\n\nfunction compareFeatures(f0: Feature | undefined, f1: Feature | undefined): number {\n return comparePossiblyUndefined((lhs, rhs) => lhs.compare(rhs), f0, f1);\n}\n\n/** @internal */\nexport class VertexKey {\n public readonly position: Point3d;\n public readonly normal?: OctEncodedNormal;\n public readonly uvParam?: Point2d;\n public readonly fillColor: number;\n public readonly feature?: Feature;\n\n public constructor(position: Point3d, fillColor: number, normal?: OctEncodedNormal, uvParam?: Point2d, feature?: Feature) {\n this.position = position.clone();\n this.fillColor = fillColor;\n this.normal = normal;\n this.uvParam = uvParam?.clone();\n this.feature = feature;\n }\n\n public static create(props: VertexKeyProps): VertexKey {\n return new VertexKey(props.position, props.fillColor, props.normal, props.uvParam, props.feature);\n }\n\n public equals(rhs: VertexKey, tolerance: XYAndZ): boolean {\n if (this.fillColor !== rhs.fillColor)\n return false;\n\n if (0 !== compareFeatures(this.feature, rhs.feature))\n return false;\n\n if (undefined !== this.normal) {\n assert(undefined !== rhs.normal);\n if (this.normal.value !== rhs.normal.value)\n return false;\n }\n\n if (0 !== comparePositions(this.position, rhs.position, tolerance))\n return false;\n\n if (undefined !== this.uvParam) {\n assert(undefined !== rhs.uvParam);\n return this.uvParam.isAlmostEqual(rhs.uvParam, 0.0001);\n }\n\n return true;\n }\n\n public compare(rhs: VertexKey, tolerance: XYAndZ): number {\n if (this === rhs)\n return 0;\n\n let diff = this.fillColor - rhs.fillColor;\n if (0 === diff) {\n diff = comparePositions(this.position, rhs.position, tolerance);\n if (0 === diff) {\n diff = compareFeatures(this.feature, rhs.feature);\n if (0 === diff) {\n if (undefined !== this.normal) {\n assert(undefined !== rhs.normal);\n diff = this.normal.value - rhs.normal.value;\n }\n\n if (0 === diff && undefined !== this.uvParam) {\n assert(undefined !== rhs.uvParam);\n diff = compareWithTolerance(this.uvParam.x, rhs.uvParam.x);\n if (0 === diff)\n diff = compareWithTolerance(this.uvParam.x, rhs.uvParam.y);\n }\n }\n }\n }\n\n return diff;\n }\n}\n\n/** @internal */\nexport class VertexMap extends IndexMap<VertexKey> {\n private readonly _tolerance: XYAndZ;\n\n public constructor(tolerance: XYAndZ) {\n super((lhs, rhs) => lhs.compare(rhs, tolerance));\n this._tolerance = tolerance;\n }\n\n public insertKey(props: VertexKeyProps, onInsert?: (vk: VertexKey) => any): number {\n return this.insert(VertexKey.create(props), onInsert);\n }\n\n public arePositionsAlmostEqual(p0: VertexKeyProps, p1: VertexKeyProps): boolean {\n return 0 === this.comparePositions(p0, p1);\n }\n\n public comparePositions(p0: VertexKeyProps, p1: VertexKeyProps): number {\n return comparePositions(p0.position, p1.position, this._tolerance);\n }\n}\n"]}
1
+ {"version":3,"file":"VertexKey.js","sourceRoot":"","sources":["../../../../src/render/primitives/VertexKey.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 Rendering\n */\n\nimport { assert, comparePossiblyUndefined, compareWithTolerance, IndexMap } from \"@itwin/core-bentley\";\nimport { Point2d, Point3d, XYAndZ } from \"@itwin/core-geometry\";\nimport { Feature, OctEncodedNormal } from \"@itwin/core-common\";\n\n/** @internal */\nexport interface VertexKeyProps {\n position: Point3d;\n fillColor: number;\n normal?: OctEncodedNormal;\n uvParam?: Point2d;\n feature?: Feature;\n}\n\nfunction comparePositions(p0: Point3d, p1: Point3d, tolerance: XYAndZ): number {\n let diff = compareWithTolerance(p0.x, p1.x, tolerance.x);\n if (0 === diff) {\n diff = compareWithTolerance(p0.y, p1.y, tolerance.y);\n if (0 === diff)\n diff = compareWithTolerance(p0.z, p1.z, tolerance.z);\n }\n\n return diff;\n}\n\nfunction compareFeatures(f0: Feature | undefined, f1: Feature | undefined): number {\n return comparePossiblyUndefined((lhs, rhs) => lhs.compare(rhs), f0, f1);\n}\n\n/** @internal */\nexport class VertexKey {\n public readonly position: Point3d;\n public readonly normal?: OctEncodedNormal;\n public readonly uvParam?: Point2d;\n public readonly fillColor: number;\n public readonly feature?: Feature;\n\n public constructor(position: Point3d, fillColor: number, normal?: OctEncodedNormal, uvParam?: Point2d, feature?: Feature) {\n this.position = position.clone();\n this.fillColor = fillColor;\n this.normal = normal;\n this.uvParam = uvParam?.clone();\n this.feature = feature;\n }\n\n public static create(props: VertexKeyProps): VertexKey {\n return new VertexKey(props.position, props.fillColor, props.normal, props.uvParam, props.feature);\n }\n\n public equals(rhs: VertexKey, tolerance: XYAndZ): boolean {\n if (this.fillColor !== rhs.fillColor)\n return false;\n\n if (0 !== compareFeatures(this.feature, rhs.feature))\n return false;\n\n if (undefined !== this.normal) {\n assert(undefined !== rhs.normal);\n if (this.normal.value !== rhs.normal.value)\n return false;\n }\n\n if (0 !== comparePositions(this.position, rhs.position, tolerance))\n return false;\n\n if (undefined !== this.uvParam) {\n assert(undefined !== rhs.uvParam);\n return this.uvParam.isAlmostEqual(rhs.uvParam, 0.0001);\n }\n\n return true;\n }\n\n public compare(rhs: VertexKey, tolerance: XYAndZ): number {\n if (this === rhs)\n return 0;\n\n let diff = this.fillColor - rhs.fillColor;\n if (0 === diff) {\n diff = comparePositions(this.position, rhs.position, tolerance);\n if (0 === diff) {\n diff = compareFeatures(this.feature, rhs.feature);\n if (0 === diff) {\n if (undefined !== this.normal) {\n assert(undefined !== rhs.normal);\n diff = this.normal.value - rhs.normal.value;\n }\n\n if (0 === diff && undefined !== this.uvParam) {\n assert(undefined !== rhs.uvParam);\n diff = compareWithTolerance(this.uvParam.x, rhs.uvParam.x);\n if (0 === diff)\n diff = compareWithTolerance(this.uvParam.x, rhs.uvParam.y);\n }\n }\n }\n }\n\n return diff;\n }\n}\n\n/** @internal */\nexport class VertexMap extends IndexMap<VertexKey> {\n private readonly _tolerance: XYAndZ;\n\n public constructor(tolerance: XYAndZ) {\n super((lhs, rhs) => lhs.compare(rhs, tolerance));\n this._tolerance = tolerance;\n }\n\n public insertKey(props: VertexKeyProps, onInsert?: (vk: VertexKey) => any): number {\n return this.insert(VertexKey.create(props), onInsert);\n }\n\n public arePositionsAlmostEqual(p0: VertexKeyProps, p1: VertexKeyProps): boolean {\n return 0 === this.comparePositions(p0, p1);\n }\n\n public comparePositions(p0: VertexKeyProps, p1: VertexKeyProps): number {\n return comparePositions(p0.position, p1.position, this._tolerance);\n }\n}\n"]}
@@ -65,7 +65,7 @@ export class VertexIndices {
65
65
  }
66
66
  /** @internal */
67
67
  export function computeDimensions(nEntries, nRgbaPerEntry, nExtraRgba, maxSize) {
68
- maxSize = maxSize !== null && maxSize !== void 0 ? maxSize : IModelApp.renderSystem.maxTextureSize;
68
+ maxSize = maxSize ?? IModelApp.renderSystem.maxTextureSize;
69
69
  const nRgba = nEntries * nRgbaPerEntry + nExtraRgba;
70
70
  if (nRgba < maxSize)
71
71
  return { width: nRgba, height: 1 };