@itwin/core-frontend 4.0.0-dev.77 → 4.0.0-dev.80

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 (879) hide show
  1. package/lib/cjs/AccuDraw.js.map +1 -1
  2. package/lib/cjs/AccuSnap.js.map +1 -1
  3. package/lib/cjs/ApproximateTerrainHeights.js.map +1 -1
  4. package/lib/cjs/ApproximateTerrainHeightsProps.js.map +1 -1
  5. package/lib/cjs/AuxCoordSys.js.map +1 -1
  6. package/lib/cjs/BackgroundMapGeometry.js.map +1 -1
  7. package/lib/cjs/BingLocation.js.map +1 -1
  8. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  9. package/lib/cjs/BriefcaseTxns.js.map +1 -1
  10. package/lib/cjs/CategorySelectorState.js.map +1 -1
  11. package/lib/cjs/ChangeFlags.js.map +1 -1
  12. package/lib/cjs/CheckpointConnection.js.map +1 -1
  13. package/lib/cjs/CoordSystem.js.map +1 -1
  14. package/lib/cjs/DecorationsCache.js.map +1 -1
  15. package/lib/cjs/DevTools.js.map +1 -1
  16. package/lib/cjs/DisplayStyleState.js.map +1 -1
  17. package/lib/cjs/DrawingViewState.js +5 -5
  18. package/lib/cjs/DrawingViewState.js.map +1 -1
  19. package/lib/cjs/ElementLocateManager.js.map +1 -1
  20. package/lib/cjs/EmphasizeElements.js.map +1 -1
  21. package/lib/cjs/EntityState.js.map +1 -1
  22. package/lib/cjs/EnvironmentDecorations.d.ts +2 -2
  23. package/lib/cjs/EnvironmentDecorations.d.ts.map +1 -1
  24. package/lib/cjs/EnvironmentDecorations.js +10 -6
  25. package/lib/cjs/EnvironmentDecorations.js.map +1 -1
  26. package/lib/cjs/FeatureOverrideProvider.js.map +1 -1
  27. package/lib/cjs/FlashSettings.js.map +1 -1
  28. package/lib/cjs/FrontendHubAccess.js.map +1 -1
  29. package/lib/cjs/FrontendLoggerCategory.js.map +1 -1
  30. package/lib/cjs/Frustum2d.js.map +1 -1
  31. package/lib/cjs/FrustumAnimator.js.map +1 -1
  32. package/lib/cjs/FuzzySearch.js.map +1 -1
  33. package/lib/cjs/GeoServices.js.map +1 -1
  34. package/lib/cjs/GlobeAnimator.js.map +1 -1
  35. package/lib/cjs/GraphicalEditingScope.js.map +1 -1
  36. package/lib/cjs/HitDetail.js.map +1 -1
  37. package/lib/cjs/IModelApp.js.map +1 -1
  38. package/lib/cjs/IModelConnection.js +23 -23
  39. package/lib/cjs/IModelConnection.js.map +1 -1
  40. package/lib/cjs/IModelRoutingContext.js.map +1 -1
  41. package/lib/cjs/IModeljs-css.js +133 -133
  42. package/lib/cjs/IModeljs-css.js.map +1 -1
  43. package/lib/cjs/ImageUtil.js.map +1 -1
  44. package/lib/cjs/IpcApp.js.map +1 -1
  45. package/lib/cjs/LinePlaneIntersect.js.map +1 -1
  46. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  47. package/lib/cjs/MarginPercent.js.map +1 -1
  48. package/lib/cjs/Marker.js.map +1 -1
  49. package/lib/cjs/ModelSelectorState.js.map +1 -1
  50. package/lib/cjs/NativeApp.js.map +1 -1
  51. package/lib/cjs/NativeAppLogger.js.map +1 -1
  52. package/lib/cjs/NoRenderApp.js.map +1 -1
  53. package/lib/cjs/NotificationManager.js.map +1 -1
  54. package/lib/cjs/PerModelCategoryVisibility.js.map +1 -1
  55. package/lib/cjs/PlanarClipMaskState.js.map +1 -1
  56. package/lib/cjs/RealityDataSource.js.map +1 -1
  57. package/lib/cjs/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  58. package/lib/cjs/RealityDataSourceContextShareImpl.js.map +1 -1
  59. package/lib/cjs/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  60. package/lib/cjs/SelectionSet.js.map +1 -1
  61. package/lib/cjs/SheetViewState.js.map +1 -1
  62. package/lib/cjs/SpatialViewState.js.map +1 -1
  63. package/lib/cjs/Sprites.js.map +1 -1
  64. package/lib/cjs/StandardView.js.map +1 -1
  65. package/lib/cjs/SubCategoriesCache.js.map +1 -1
  66. package/lib/cjs/TentativePoint.js.map +1 -1
  67. package/lib/cjs/Tiles.js.map +1 -1
  68. package/lib/cjs/UserPreferences.js.map +1 -1
  69. package/lib/cjs/ViewAnimation.js.map +1 -1
  70. package/lib/cjs/ViewContext.js.map +1 -1
  71. package/lib/cjs/ViewCreator2d.js.map +1 -1
  72. package/lib/cjs/ViewCreator3d.js.map +1 -1
  73. package/lib/cjs/ViewGlobalLocation.js.map +1 -1
  74. package/lib/cjs/ViewManager.js.map +1 -1
  75. package/lib/cjs/ViewPose.js.map +1 -1
  76. package/lib/cjs/ViewRect.js.map +1 -1
  77. package/lib/cjs/ViewState.js.map +1 -1
  78. package/lib/cjs/ViewStatus.js.map +1 -1
  79. package/lib/cjs/ViewingSpace.js.map +1 -1
  80. package/lib/cjs/Viewport.js.map +1 -1
  81. package/lib/cjs/ViewportSync.js.map +1 -1
  82. package/lib/cjs/WebWorkerManager.js.map +1 -1
  83. package/lib/cjs/core-frontend.js.map +1 -1
  84. package/lib/cjs/extension/Extension.js.map +1 -1
  85. package/lib/cjs/extension/ExtensionAdmin.js.map +1 -1
  86. package/lib/cjs/extension/ExtensionHost.js.map +1 -1
  87. package/lib/cjs/extension/ExtensionImpl.js.map +1 -1
  88. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  89. package/lib/cjs/extension/providers/ExtensionLoadScript.js.map +1 -1
  90. package/lib/cjs/extension/providers/LocalExtensionProvider.js.map +1 -1
  91. package/lib/cjs/extension/providers/RemoteExtensionProvider.js.map +1 -1
  92. package/lib/cjs/gltf/GltfModel.js.map +1 -1
  93. package/lib/cjs/gltf/GltfParser.js.map +1 -1
  94. package/lib/cjs/gltf/GltfSchema.js.map +1 -1
  95. package/lib/cjs/properties/AngleDescription.js.map +1 -1
  96. package/lib/cjs/properties/FormattedQuantityDescription.js.map +1 -1
  97. package/lib/cjs/properties/LengthDescription.js.map +1 -1
  98. package/lib/cjs/public/scripts/checkbrowser.js +24 -24
  99. package/lib/cjs/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  100. package/lib/cjs/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  101. package/lib/cjs/quantity-formatting/LocalUnitFormatProvider.js.map +1 -1
  102. package/lib/cjs/quantity-formatting/QuantityFormatter.js.map +1 -1
  103. package/lib/cjs/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -1
  104. package/lib/cjs/quantity-formatting/UnitsData.js.map +1 -1
  105. package/lib/cjs/render/CanvasDecoration.js.map +1 -1
  106. package/lib/cjs/render/Decorations.js.map +1 -1
  107. package/lib/cjs/render/FeatureSymbology.js.map +1 -1
  108. package/lib/cjs/render/FrameStats.js.map +1 -1
  109. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  110. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  111. package/lib/cjs/render/GraphicPrimitive.js.map +1 -1
  112. package/lib/cjs/render/InstancedGraphicParams.js.map +1 -1
  113. package/lib/cjs/render/MockRender.js.map +1 -1
  114. package/lib/cjs/render/ParticleCollectionBuilder.js.map +1 -1
  115. package/lib/cjs/render/Pixel.js.map +1 -1
  116. package/lib/cjs/render/RealityMeshGraphicParams.js.map +1 -1
  117. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  118. package/lib/cjs/render/RenderClipVolume.js.map +1 -1
  119. package/lib/cjs/render/RenderGraphic.js.map +1 -1
  120. package/lib/cjs/render/RenderMaterial.js.map +1 -1
  121. package/lib/cjs/render/RenderMemory.js.map +1 -1
  122. package/lib/cjs/render/RenderPlan.d.ts +14 -2
  123. package/lib/cjs/render/RenderPlan.d.ts.map +1 -1
  124. package/lib/cjs/render/RenderPlan.js +33 -4
  125. package/lib/cjs/render/RenderPlan.js.map +1 -1
  126. package/lib/cjs/render/RenderPlanarClassifier.js.map +1 -1
  127. package/lib/cjs/render/RenderSystem.js.map +1 -1
  128. package/lib/cjs/render/RenderTarget.js.map +1 -1
  129. package/lib/cjs/render/RenderTexture.js.map +1 -1
  130. package/lib/cjs/render/Scene.js.map +1 -1
  131. package/lib/cjs/render/ScreenSpaceEffectBuilder.js.map +1 -1
  132. package/lib/cjs/render/UpsampleRealityMeshParams.js.map +1 -1
  133. package/lib/cjs/render/VisibleFeature.js.map +1 -1
  134. package/lib/cjs/render/primitives/AuxChannelTable.js.map +1 -1
  135. package/lib/cjs/render/primitives/ColorMap.js.map +1 -1
  136. package/lib/cjs/render/primitives/DisplayParams.js.map +1 -1
  137. package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
  138. package/lib/cjs/render/primitives/PointCloudPrimitive.js.map +1 -1
  139. package/lib/cjs/render/primitives/PointStringParams.js.map +1 -1
  140. package/lib/cjs/render/primitives/Polyface.js.map +1 -1
  141. package/lib/cjs/render/primitives/PolylineParams.js.map +1 -1
  142. package/lib/cjs/render/primitives/Primitives.js.map +1 -1
  143. package/lib/cjs/render/primitives/Strokes.js.map +1 -1
  144. package/lib/cjs/render/primitives/SurfaceParams.js.map +1 -1
  145. package/lib/cjs/render/primitives/VertexKey.js.map +1 -1
  146. package/lib/cjs/render/primitives/VertexTable.js.map +1 -1
  147. package/lib/cjs/render/primitives/VertexTableSplitter.js.map +1 -1
  148. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  149. package/lib/cjs/render/primitives/geometry/GeometryList.js.map +1 -1
  150. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  151. package/lib/cjs/render/primitives/geometry/GeometryPrimitives.js.map +1 -1
  152. package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
  153. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  154. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  155. package/lib/cjs/render/webgl/AtmosphereUniforms.d.ts +48 -0
  156. package/lib/cjs/render/webgl/AtmosphereUniforms.d.ts.map +1 -0
  157. package/lib/cjs/render/webgl/AtmosphereUniforms.js +152 -0
  158. package/lib/cjs/render/webgl/AtmosphereUniforms.js.map +1 -0
  159. package/lib/cjs/render/webgl/AttributeBuffers.js.map +1 -1
  160. package/lib/cjs/render/webgl/AttributeMap.js.map +1 -1
  161. package/lib/cjs/render/webgl/BackgroundMapDrape.js.map +1 -1
  162. package/lib/cjs/render/webgl/BatchState.js.map +1 -1
  163. package/lib/cjs/render/webgl/BatchUniforms.js.map +1 -1
  164. package/lib/cjs/render/webgl/BranchStack.js.map +1 -1
  165. package/lib/cjs/render/webgl/BranchState.js.map +1 -1
  166. package/lib/cjs/render/webgl/BranchUniforms.js.map +1 -1
  167. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  168. package/lib/cjs/render/webgl/ClipStack.js.map +1 -1
  169. package/lib/cjs/render/webgl/ClipVolume.js.map +1 -1
  170. package/lib/cjs/render/webgl/ClippingProgram.js.map +1 -1
  171. package/lib/cjs/render/webgl/ColorInfo.js.map +1 -1
  172. package/lib/cjs/render/webgl/Diagnostics.js.map +1 -1
  173. package/lib/cjs/render/webgl/Disposable.js.map +1 -1
  174. package/lib/cjs/render/webgl/DrawCommand.d.ts.map +1 -1
  175. package/lib/cjs/render/webgl/DrawCommand.js +2 -1
  176. package/lib/cjs/render/webgl/DrawCommand.js.map +1 -1
  177. package/lib/cjs/render/webgl/EDL.js.map +1 -1
  178. package/lib/cjs/render/webgl/EdgeGeometry.js.map +1 -1
  179. package/lib/cjs/render/webgl/EdgeSettings.js.map +1 -1
  180. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  181. package/lib/cjs/render/webgl/FloatRGBA.js.map +1 -1
  182. package/lib/cjs/render/webgl/FrameBuffer.js.map +1 -1
  183. package/lib/cjs/render/webgl/FrustumUniforms.js.map +1 -1
  184. package/lib/cjs/render/webgl/GL.js.map +1 -1
  185. package/lib/cjs/render/webgl/GLTimer.js.map +1 -1
  186. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  187. package/lib/cjs/render/webgl/HiliteUniforms.js.map +1 -1
  188. package/lib/cjs/render/webgl/IModelFrameLifecycle.js.map +1 -1
  189. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  190. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  191. package/lib/cjs/render/webgl/Layer.js.map +1 -1
  192. package/lib/cjs/render/webgl/LayerCommands.js.map +1 -1
  193. package/lib/cjs/render/webgl/LightingUniforms.js.map +1 -1
  194. package/lib/cjs/render/webgl/LineCode.js.map +1 -1
  195. package/lib/cjs/render/webgl/Material.js.map +1 -1
  196. package/lib/cjs/render/webgl/Matrix.js.map +1 -1
  197. package/lib/cjs/render/webgl/Mesh.js.map +1 -1
  198. package/lib/cjs/render/webgl/MeshData.js.map +1 -1
  199. package/lib/cjs/render/webgl/MeshGeometry.js.map +1 -1
  200. package/lib/cjs/render/webgl/PerformanceMetrics.js.map +1 -1
  201. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  202. package/lib/cjs/render/webgl/PlanarGrid.js.map +1 -1
  203. package/lib/cjs/render/webgl/PlanarTextureProjection.js.map +1 -1
  204. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  205. package/lib/cjs/render/webgl/PointString.js.map +1 -1
  206. package/lib/cjs/render/webgl/Polyline.js.map +1 -1
  207. package/lib/cjs/render/webgl/Primitive.js.map +1 -1
  208. package/lib/cjs/render/webgl/RealityMesh.js.map +1 -1
  209. package/lib/cjs/render/webgl/RealityModelUniforms.js.map +1 -1
  210. package/lib/cjs/render/webgl/RenderBuffer.js.map +1 -1
  211. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  212. package/lib/cjs/render/webgl/RenderFlags.js.map +1 -1
  213. package/lib/cjs/render/webgl/RenderState.js.map +1 -1
  214. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  215. package/lib/cjs/render/webgl/ScratchDrawParams.js.map +1 -1
  216. package/lib/cjs/render/webgl/ScreenSpaceEffect.js.map +1 -1
  217. package/lib/cjs/render/webgl/ShaderBuilder.d.ts +7 -5
  218. package/lib/cjs/render/webgl/ShaderBuilder.d.ts.map +1 -1
  219. package/lib/cjs/render/webgl/ShaderBuilder.js +15 -5
  220. package/lib/cjs/render/webgl/ShaderBuilder.js.map +1 -1
  221. package/lib/cjs/render/webgl/ShaderProgram.js.map +1 -1
  222. package/lib/cjs/render/webgl/ShadowUniforms.js.map +1 -1
  223. package/lib/cjs/render/webgl/SolarShadowMap.js.map +1 -1
  224. package/lib/cjs/render/webgl/StyleUniforms.js.map +1 -1
  225. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
  226. package/lib/cjs/render/webgl/Sync.js.map +1 -1
  227. package/lib/cjs/render/webgl/System.js.map +1 -1
  228. package/lib/cjs/render/webgl/Target.d.ts +1 -0
  229. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  230. package/lib/cjs/render/webgl/Target.js +4 -0
  231. package/lib/cjs/render/webgl/Target.js.map +1 -1
  232. package/lib/cjs/render/webgl/TargetGraphics.js.map +1 -1
  233. package/lib/cjs/render/webgl/TargetUniforms.d.ts +2 -0
  234. package/lib/cjs/render/webgl/TargetUniforms.d.ts.map +1 -1
  235. package/lib/cjs/render/webgl/TargetUniforms.js +2 -0
  236. package/lib/cjs/render/webgl/TargetUniforms.js.map +1 -1
  237. package/lib/cjs/render/webgl/Technique.d.ts.map +1 -1
  238. package/lib/cjs/render/webgl/Technique.js +109 -16
  239. package/lib/cjs/render/webgl/Technique.js.map +1 -1
  240. package/lib/cjs/render/webgl/TechniqueFlags.d.ts +7 -1
  241. package/lib/cjs/render/webgl/TechniqueFlags.d.ts.map +1 -1
  242. package/lib/cjs/render/webgl/TechniqueFlags.js +10 -1
  243. package/lib/cjs/render/webgl/TechniqueFlags.js.map +1 -1
  244. package/lib/cjs/render/webgl/TechniqueId.js.map +1 -1
  245. package/lib/cjs/render/webgl/Texture.js.map +1 -1
  246. package/lib/cjs/render/webgl/TextureDrape.js.map +1 -1
  247. package/lib/cjs/render/webgl/ThematicSensors.js.map +1 -1
  248. package/lib/cjs/render/webgl/ThematicUniforms.js.map +1 -1
  249. package/lib/cjs/render/webgl/UniformHandle.js.map +1 -1
  250. package/lib/cjs/render/webgl/VertexLUT.js.map +1 -1
  251. package/lib/cjs/render/webgl/ViewRectUniforms.js.map +1 -1
  252. package/lib/cjs/render/webgl/VisibleTileFeatures.js.map +1 -1
  253. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js +154 -154
  254. package/lib/cjs/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  255. package/lib/cjs/render/webgl/glsl/Animation.js +83 -83
  256. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  257. package/lib/cjs/render/webgl/glsl/Atmosphere.d.ts +7 -0
  258. package/lib/cjs/render/webgl/glsl/Atmosphere.d.ts.map +1 -0
  259. package/lib/cjs/render/webgl/glsl/Atmosphere.js +462 -0
  260. package/lib/cjs/render/webgl/glsl/Atmosphere.js.map +1 -0
  261. package/lib/cjs/render/webgl/glsl/Blur.js +37 -37
  262. package/lib/cjs/render/webgl/glsl/Blur.js.map +1 -1
  263. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js +4 -4
  264. package/lib/cjs/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  265. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js +3 -3
  266. package/lib/cjs/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  267. package/lib/cjs/render/webgl/glsl/Clipping.js +60 -60
  268. package/lib/cjs/render/webgl/glsl/Clipping.js.map +1 -1
  269. package/lib/cjs/render/webgl/glsl/Color.js +12 -12
  270. package/lib/cjs/render/webgl/glsl/Color.js.map +1 -1
  271. package/lib/cjs/render/webgl/glsl/Combine3Textures.js +7 -7
  272. package/lib/cjs/render/webgl/glsl/Combine3Textures.js.map +1 -1
  273. package/lib/cjs/render/webgl/glsl/CombineTextures.js +5 -5
  274. package/lib/cjs/render/webgl/glsl/CombineTextures.js.map +1 -1
  275. package/lib/cjs/render/webgl/glsl/Common.js +16 -16
  276. package/lib/cjs/render/webgl/glsl/Common.js.map +1 -1
  277. package/lib/cjs/render/webgl/glsl/Composite.js +71 -71
  278. package/lib/cjs/render/webgl/glsl/Composite.js.map +1 -1
  279. package/lib/cjs/render/webgl/glsl/CopyColor.js +6 -6
  280. package/lib/cjs/render/webgl/glsl/CopyColor.js.map +1 -1
  281. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js +3 -3
  282. package/lib/cjs/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  283. package/lib/cjs/render/webgl/glsl/CopyStencil.js +4 -4
  284. package/lib/cjs/render/webgl/glsl/CopyStencil.js.map +1 -1
  285. package/lib/cjs/render/webgl/glsl/Decode.js +65 -65
  286. package/lib/cjs/render/webgl/glsl/Decode.js.map +1 -1
  287. package/lib/cjs/render/webgl/glsl/EDL.js +103 -103
  288. package/lib/cjs/render/webgl/glsl/EDL.js.map +1 -1
  289. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js +25 -25
  290. package/lib/cjs/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  291. package/lib/cjs/render/webgl/glsl/Edge.js +146 -146
  292. package/lib/cjs/render/webgl/glsl/Edge.js.map +1 -1
  293. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js +233 -233
  294. package/lib/cjs/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  295. package/lib/cjs/render/webgl/glsl/Fragment.js +41 -41
  296. package/lib/cjs/render/webgl/glsl/Fragment.js.map +1 -1
  297. package/lib/cjs/render/webgl/glsl/Instancing.js +21 -21
  298. package/lib/cjs/render/webgl/glsl/Instancing.js.map +1 -1
  299. package/lib/cjs/render/webgl/glsl/Lighting.js +92 -92
  300. package/lib/cjs/render/webgl/glsl/Lighting.js.map +1 -1
  301. package/lib/cjs/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  302. package/lib/cjs/render/webgl/glsl/LookupTable.js +19 -19
  303. package/lib/cjs/render/webgl/glsl/LookupTable.js.map +1 -1
  304. package/lib/cjs/render/webgl/glsl/Monochrome.js +13 -13
  305. package/lib/cjs/render/webgl/glsl/Monochrome.js.map +1 -1
  306. package/lib/cjs/render/webgl/glsl/PlanarClassification.js +188 -188
  307. package/lib/cjs/render/webgl/glsl/PlanarClassification.js.map +1 -1
  308. package/lib/cjs/render/webgl/glsl/PlanarGrid.js +22 -22
  309. package/lib/cjs/render/webgl/glsl/PlanarGrid.js.map +1 -1
  310. package/lib/cjs/render/webgl/glsl/PointCloud.js +28 -28
  311. package/lib/cjs/render/webgl/glsl/PointCloud.js.map +1 -1
  312. package/lib/cjs/render/webgl/glsl/PointString.js +9 -9
  313. package/lib/cjs/render/webgl/glsl/PointString.js.map +1 -1
  314. package/lib/cjs/render/webgl/glsl/Polyline.js +213 -213
  315. package/lib/cjs/render/webgl/glsl/Polyline.js.map +1 -1
  316. package/lib/cjs/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  317. package/lib/cjs/render/webgl/glsl/RealityMesh.js +87 -84
  318. package/lib/cjs/render/webgl/glsl/RealityMesh.js.map +1 -1
  319. package/lib/cjs/render/webgl/glsl/RenderPass.js.map +1 -1
  320. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js +9 -9
  321. package/lib/cjs/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
  322. package/lib/cjs/render/webgl/glsl/SkyBox.js.map +1 -1
  323. package/lib/cjs/render/webgl/glsl/SkySphere.d.ts +3 -2
  324. package/lib/cjs/render/webgl/glsl/SkySphere.d.ts.map +1 -1
  325. package/lib/cjs/render/webgl/glsl/SkySphere.js +195 -153
  326. package/lib/cjs/render/webgl/glsl/SkySphere.js.map +1 -1
  327. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js +51 -51
  328. package/lib/cjs/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  329. package/lib/cjs/render/webgl/glsl/Surface.js +240 -240
  330. package/lib/cjs/render/webgl/glsl/Surface.js.map +1 -1
  331. package/lib/cjs/render/webgl/glsl/Thematic.js +134 -134
  332. package/lib/cjs/render/webgl/glsl/Thematic.js.map +1 -1
  333. package/lib/cjs/render/webgl/glsl/Translucency.js +19 -19
  334. package/lib/cjs/render/webgl/glsl/Translucency.js.map +1 -1
  335. package/lib/cjs/render/webgl/glsl/Vertex.js +73 -73
  336. package/lib/cjs/render/webgl/glsl/Vertex.js.map +1 -1
  337. package/lib/cjs/render/webgl/glsl/Viewport.js +38 -38
  338. package/lib/cjs/render/webgl/glsl/Viewport.js.map +1 -1
  339. package/lib/cjs/render/webgl/glsl/ViewportQuad.js.map +1 -1
  340. package/lib/cjs/render/webgl/glsl/Wiremesh.js +10 -10
  341. package/lib/cjs/render/webgl/glsl/Wiremesh.js.map +1 -1
  342. package/lib/cjs/render-primitives.js.map +1 -1
  343. package/lib/cjs/request/Request.js.map +1 -1
  344. package/lib/cjs/tile/B3dmReader.js.map +1 -1
  345. package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
  346. package/lib/cjs/tile/CesiumAssetProvider.js.map +1 -1
  347. package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
  348. package/lib/cjs/tile/ContextShareProvider.js.map +1 -1
  349. package/lib/cjs/tile/DisclosedTileTreeSet.js.map +1 -1
  350. package/lib/cjs/tile/DynamicIModelTile.js.map +1 -1
  351. package/lib/cjs/tile/GltfReader.js.map +1 -1
  352. package/lib/cjs/tile/GraphicsCollector.js.map +1 -1
  353. package/lib/cjs/tile/I3dmReader.js.map +1 -1
  354. package/lib/cjs/tile/IModelTile.js.map +1 -1
  355. package/lib/cjs/tile/IModelTileRequestChannels.js.map +1 -1
  356. package/lib/cjs/tile/IModelTileTree.js.map +1 -1
  357. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  358. package/lib/cjs/tile/LRUTileList.js.map +1 -1
  359. package/lib/cjs/tile/OPCFormatInterpreter.js.map +1 -1
  360. package/lib/cjs/tile/PntsReader.d.ts +2 -2
  361. package/lib/cjs/tile/PntsReader.d.ts.map +1 -1
  362. package/lib/cjs/tile/PntsReader.js +10 -2
  363. package/lib/cjs/tile/PntsReader.js.map +1 -1
  364. package/lib/cjs/tile/RealityTile.js.map +1 -1
  365. package/lib/cjs/tile/RealityTileDrawArgs.js.map +1 -1
  366. package/lib/cjs/tile/RealityTileLoader.js +1 -1
  367. package/lib/cjs/tile/RealityTileLoader.js.map +1 -1
  368. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  369. package/lib/cjs/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  370. package/lib/cjs/tile/Tile.js.map +1 -1
  371. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  372. package/lib/cjs/tile/TileContent.js.map +1 -1
  373. package/lib/cjs/tile/TileDrawArgs.js.map +1 -1
  374. package/lib/cjs/tile/TileGeometryCollector.js.map +1 -1
  375. package/lib/cjs/tile/TileParams.js.map +1 -1
  376. package/lib/cjs/tile/TileRequest.js.map +1 -1
  377. package/lib/cjs/tile/TileRequestChannel.js.map +1 -1
  378. package/lib/cjs/tile/TileRequestChannels.js.map +1 -1
  379. package/lib/cjs/tile/TileStorage.js.map +1 -1
  380. package/lib/cjs/tile/TileTree.js.map +1 -1
  381. package/lib/cjs/tile/TileTreeOwner.js.map +1 -1
  382. package/lib/cjs/tile/TileTreeParams.js.map +1 -1
  383. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  384. package/lib/cjs/tile/TileTreeSupplier.js.map +1 -1
  385. package/lib/cjs/tile/TileUsageMarker.js.map +1 -1
  386. package/lib/cjs/tile/TileUser.js.map +1 -1
  387. package/lib/cjs/tile/TileUserSet.js.map +1 -1
  388. package/lib/cjs/tile/TiledGraphicsProvider.js.map +1 -1
  389. package/lib/cjs/tile/ViewFlagOverrides.js.map +1 -1
  390. package/lib/cjs/tile/internal.js.map +1 -1
  391. package/lib/cjs/tile/map/ArcGISTileMap.js.map +1 -1
  392. package/lib/cjs/tile/map/ArcGisUtilities.js.map +1 -1
  393. package/lib/cjs/tile/map/BingElevation.js.map +1 -1
  394. package/lib/cjs/tile/map/CesiumTerrainProvider.js.map +1 -1
  395. package/lib/cjs/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  396. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  397. package/lib/cjs/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  398. package/lib/cjs/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  399. package/lib/cjs/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  400. package/lib/cjs/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  401. package/lib/cjs/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  402. package/lib/cjs/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  403. package/lib/cjs/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  404. package/lib/cjs/tile/map/MapCartoRectangle.js.map +1 -1
  405. package/lib/cjs/tile/map/MapFeatureInfo.js.map +1 -1
  406. package/lib/cjs/tile/map/MapLayerAuthentication.js.map +1 -1
  407. package/lib/cjs/tile/map/MapLayerFormatRegistry.js.map +1 -1
  408. package/lib/cjs/tile/map/MapLayerImageryProvider.js +2 -2
  409. package/lib/cjs/tile/map/MapLayerImageryProvider.js.map +1 -1
  410. package/lib/cjs/tile/map/MapLayerSources.js.map +1 -1
  411. package/lib/cjs/tile/map/MapLayerTileTreeReference.js.map +1 -1
  412. package/lib/cjs/tile/map/MapTile.js.map +1 -1
  413. package/lib/cjs/tile/map/MapTileAvailability.js.map +1 -1
  414. package/lib/cjs/tile/map/MapTileLoader.js.map +1 -1
  415. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  416. package/lib/cjs/tile/map/MapTilingScheme.js.map +1 -1
  417. package/lib/cjs/tile/map/QuadId.js.map +1 -1
  418. package/lib/cjs/tile/map/TerrainMeshProvider.js.map +1 -1
  419. package/lib/cjs/tile/map/TerrainProvider.js.map +1 -1
  420. package/lib/cjs/tile/map/WmsCapabilities.js.map +1 -1
  421. package/lib/cjs/tile/map/WmsUtilities.js.map +1 -1
  422. package/lib/cjs/tile/map/WmtsCapabilities.js.map +1 -1
  423. package/lib/cjs/tools/AccuDrawTool.js.map +1 -1
  424. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  425. package/lib/cjs/tools/EditManipulator.js.map +1 -1
  426. package/lib/cjs/tools/ElementSetTool.js.map +1 -1
  427. package/lib/cjs/tools/EventController.js.map +1 -1
  428. package/lib/cjs/tools/IdleTool.js.map +1 -1
  429. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  430. package/lib/cjs/tools/PrimitiveTool.js.map +1 -1
  431. package/lib/cjs/tools/SelectTool.js.map +1 -1
  432. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  433. package/lib/cjs/tools/ToolAssistance.js.map +1 -1
  434. package/lib/cjs/tools/ToolSettings.js.map +1 -1
  435. package/lib/cjs/tools/ViewTool.js.map +1 -1
  436. package/lib/cjs/webgl.js.map +1 -1
  437. package/lib/esm/AccuDraw.js.map +1 -1
  438. package/lib/esm/AccuSnap.js.map +1 -1
  439. package/lib/esm/ApproximateTerrainHeights.js.map +1 -1
  440. package/lib/esm/ApproximateTerrainHeightsProps.js.map +1 -1
  441. package/lib/esm/AuxCoordSys.js.map +1 -1
  442. package/lib/esm/BackgroundMapGeometry.js.map +1 -1
  443. package/lib/esm/BingLocation.js.map +1 -1
  444. package/lib/esm/BriefcaseConnection.js.map +1 -1
  445. package/lib/esm/BriefcaseTxns.js.map +1 -1
  446. package/lib/esm/CategorySelectorState.js.map +1 -1
  447. package/lib/esm/ChangeFlags.js.map +1 -1
  448. package/lib/esm/CheckpointConnection.js.map +1 -1
  449. package/lib/esm/CoordSystem.js.map +1 -1
  450. package/lib/esm/DecorationsCache.js.map +1 -1
  451. package/lib/esm/DevTools.js.map +1 -1
  452. package/lib/esm/DisplayStyleState.js.map +1 -1
  453. package/lib/esm/DrawingViewState.js +5 -5
  454. package/lib/esm/DrawingViewState.js.map +1 -1
  455. package/lib/esm/ElementLocateManager.js.map +1 -1
  456. package/lib/esm/EmphasizeElements.js.map +1 -1
  457. package/lib/esm/EntityState.js.map +1 -1
  458. package/lib/esm/EnvironmentDecorations.d.ts +2 -2
  459. package/lib/esm/EnvironmentDecorations.d.ts.map +1 -1
  460. package/lib/esm/EnvironmentDecorations.js +10 -6
  461. package/lib/esm/EnvironmentDecorations.js.map +1 -1
  462. package/lib/esm/FeatureOverrideProvider.js.map +1 -1
  463. package/lib/esm/FlashSettings.js.map +1 -1
  464. package/lib/esm/FrontendHubAccess.js.map +1 -1
  465. package/lib/esm/FrontendLoggerCategory.js.map +1 -1
  466. package/lib/esm/Frustum2d.js.map +1 -1
  467. package/lib/esm/FrustumAnimator.js.map +1 -1
  468. package/lib/esm/FuzzySearch.js.map +1 -1
  469. package/lib/esm/GeoServices.js.map +1 -1
  470. package/lib/esm/GlobeAnimator.js.map +1 -1
  471. package/lib/esm/GraphicalEditingScope.js.map +1 -1
  472. package/lib/esm/HitDetail.js.map +1 -1
  473. package/lib/esm/IModelApp.js.map +1 -1
  474. package/lib/esm/IModelConnection.js +23 -23
  475. package/lib/esm/IModelConnection.js.map +1 -1
  476. package/lib/esm/IModelRoutingContext.js.map +1 -1
  477. package/lib/esm/IModeljs-css.js +133 -133
  478. package/lib/esm/IModeljs-css.js.map +1 -1
  479. package/lib/esm/ImageUtil.js.map +1 -1
  480. package/lib/esm/IpcApp.js.map +1 -1
  481. package/lib/esm/LinePlaneIntersect.js.map +1 -1
  482. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  483. package/lib/esm/MarginPercent.js.map +1 -1
  484. package/lib/esm/Marker.js.map +1 -1
  485. package/lib/esm/ModelSelectorState.js.map +1 -1
  486. package/lib/esm/NativeApp.js.map +1 -1
  487. package/lib/esm/NativeAppLogger.js.map +1 -1
  488. package/lib/esm/NoRenderApp.js.map +1 -1
  489. package/lib/esm/NotificationManager.js.map +1 -1
  490. package/lib/esm/PerModelCategoryVisibility.js.map +1 -1
  491. package/lib/esm/PlanarClipMaskState.js.map +1 -1
  492. package/lib/esm/RealityDataSource.js.map +1 -1
  493. package/lib/esm/RealityDataSourceCesiumIonAssetImpl.js.map +1 -1
  494. package/lib/esm/RealityDataSourceContextShareImpl.js.map +1 -1
  495. package/lib/esm/RealityDataSourceTilesetUrlImpl.js.map +1 -1
  496. package/lib/esm/SelectionSet.js.map +1 -1
  497. package/lib/esm/SheetViewState.js.map +1 -1
  498. package/lib/esm/SpatialViewState.js.map +1 -1
  499. package/lib/esm/Sprites.js.map +1 -1
  500. package/lib/esm/StandardView.js.map +1 -1
  501. package/lib/esm/SubCategoriesCache.js.map +1 -1
  502. package/lib/esm/TentativePoint.js.map +1 -1
  503. package/lib/esm/Tiles.js.map +1 -1
  504. package/lib/esm/UserPreferences.js.map +1 -1
  505. package/lib/esm/ViewAnimation.js.map +1 -1
  506. package/lib/esm/ViewContext.js.map +1 -1
  507. package/lib/esm/ViewCreator2d.js.map +1 -1
  508. package/lib/esm/ViewCreator3d.js.map +1 -1
  509. package/lib/esm/ViewGlobalLocation.js.map +1 -1
  510. package/lib/esm/ViewManager.js.map +1 -1
  511. package/lib/esm/ViewPose.js.map +1 -1
  512. package/lib/esm/ViewRect.js.map +1 -1
  513. package/lib/esm/ViewState.js.map +1 -1
  514. package/lib/esm/ViewStatus.js.map +1 -1
  515. package/lib/esm/ViewingSpace.js.map +1 -1
  516. package/lib/esm/Viewport.js.map +1 -1
  517. package/lib/esm/ViewportSync.js.map +1 -1
  518. package/lib/esm/WebWorkerManager.js.map +1 -1
  519. package/lib/esm/core-frontend.js.map +1 -1
  520. package/lib/esm/extension/Extension.js.map +1 -1
  521. package/lib/esm/extension/ExtensionAdmin.js.map +1 -1
  522. package/lib/esm/extension/ExtensionHost.js.map +1 -1
  523. package/lib/esm/extension/ExtensionImpl.js.map +1 -1
  524. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  525. package/lib/esm/extension/providers/ExtensionLoadScript.js.map +1 -1
  526. package/lib/esm/extension/providers/LocalExtensionProvider.js.map +1 -1
  527. package/lib/esm/extension/providers/RemoteExtensionProvider.js.map +1 -1
  528. package/lib/esm/gltf/GltfModel.js.map +1 -1
  529. package/lib/esm/gltf/GltfParser.js.map +1 -1
  530. package/lib/esm/gltf/GltfSchema.js.map +1 -1
  531. package/lib/esm/properties/AngleDescription.js.map +1 -1
  532. package/lib/esm/properties/FormattedQuantityDescription.js.map +1 -1
  533. package/lib/esm/properties/LengthDescription.js.map +1 -1
  534. package/lib/esm/public/scripts/checkbrowser.js +24 -24
  535. package/lib/esm/quantity-formatting/BaseUnitFormattingSettingsProvider.js.map +1 -1
  536. package/lib/esm/quantity-formatting/BasicUnitsProvider.js.map +1 -1
  537. package/lib/esm/quantity-formatting/LocalUnitFormatProvider.js.map +1 -1
  538. package/lib/esm/quantity-formatting/QuantityFormatter.js.map +1 -1
  539. package/lib/esm/quantity-formatting/QuantityTypesEditorSpecs.js.map +1 -1
  540. package/lib/esm/quantity-formatting/UnitsData.js.map +1 -1
  541. package/lib/esm/render/CanvasDecoration.js.map +1 -1
  542. package/lib/esm/render/Decorations.js.map +1 -1
  543. package/lib/esm/render/FeatureSymbology.js.map +1 -1
  544. package/lib/esm/render/FrameStats.js.map +1 -1
  545. package/lib/esm/render/GraphicBranch.js.map +1 -1
  546. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  547. package/lib/esm/render/GraphicPrimitive.js.map +1 -1
  548. package/lib/esm/render/InstancedGraphicParams.js.map +1 -1
  549. package/lib/esm/render/MockRender.js.map +1 -1
  550. package/lib/esm/render/ParticleCollectionBuilder.js.map +1 -1
  551. package/lib/esm/render/Pixel.js.map +1 -1
  552. package/lib/esm/render/RealityMeshGraphicParams.js.map +1 -1
  553. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  554. package/lib/esm/render/RenderClipVolume.js.map +1 -1
  555. package/lib/esm/render/RenderGraphic.js.map +1 -1
  556. package/lib/esm/render/RenderMaterial.js.map +1 -1
  557. package/lib/esm/render/RenderMemory.js.map +1 -1
  558. package/lib/esm/render/RenderPlan.d.ts +14 -2
  559. package/lib/esm/render/RenderPlan.d.ts.map +1 -1
  560. package/lib/esm/render/RenderPlan.js +31 -3
  561. package/lib/esm/render/RenderPlan.js.map +1 -1
  562. package/lib/esm/render/RenderPlanarClassifier.js.map +1 -1
  563. package/lib/esm/render/RenderSystem.js.map +1 -1
  564. package/lib/esm/render/RenderTarget.js.map +1 -1
  565. package/lib/esm/render/RenderTexture.js.map +1 -1
  566. package/lib/esm/render/Scene.js.map +1 -1
  567. package/lib/esm/render/ScreenSpaceEffectBuilder.js.map +1 -1
  568. package/lib/esm/render/UpsampleRealityMeshParams.js.map +1 -1
  569. package/lib/esm/render/VisibleFeature.js.map +1 -1
  570. package/lib/esm/render/primitives/AuxChannelTable.js.map +1 -1
  571. package/lib/esm/render/primitives/ColorMap.js.map +1 -1
  572. package/lib/esm/render/primitives/DisplayParams.js.map +1 -1
  573. package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
  574. package/lib/esm/render/primitives/PointCloudPrimitive.js.map +1 -1
  575. package/lib/esm/render/primitives/PointStringParams.js.map +1 -1
  576. package/lib/esm/render/primitives/Polyface.js.map +1 -1
  577. package/lib/esm/render/primitives/PolylineParams.js.map +1 -1
  578. package/lib/esm/render/primitives/Primitives.js.map +1 -1
  579. package/lib/esm/render/primitives/Strokes.js.map +1 -1
  580. package/lib/esm/render/primitives/SurfaceParams.js.map +1 -1
  581. package/lib/esm/render/primitives/VertexKey.js.map +1 -1
  582. package/lib/esm/render/primitives/VertexTable.js.map +1 -1
  583. package/lib/esm/render/primitives/VertexTableSplitter.js.map +1 -1
  584. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  585. package/lib/esm/render/primitives/geometry/GeometryList.js.map +1 -1
  586. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +1 -1
  587. package/lib/esm/render/primitives/geometry/GeometryPrimitives.js.map +1 -1
  588. package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
  589. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  590. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  591. package/lib/esm/render/webgl/AtmosphereUniforms.d.ts +48 -0
  592. package/lib/esm/render/webgl/AtmosphereUniforms.d.ts.map +1 -0
  593. package/lib/esm/render/webgl/AtmosphereUniforms.js +148 -0
  594. package/lib/esm/render/webgl/AtmosphereUniforms.js.map +1 -0
  595. package/lib/esm/render/webgl/AttributeBuffers.js.map +1 -1
  596. package/lib/esm/render/webgl/AttributeMap.js.map +1 -1
  597. package/lib/esm/render/webgl/BackgroundMapDrape.js.map +1 -1
  598. package/lib/esm/render/webgl/BatchState.js.map +1 -1
  599. package/lib/esm/render/webgl/BatchUniforms.js.map +1 -1
  600. package/lib/esm/render/webgl/BranchStack.js.map +1 -1
  601. package/lib/esm/render/webgl/BranchState.js.map +1 -1
  602. package/lib/esm/render/webgl/BranchUniforms.js.map +1 -1
  603. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  604. package/lib/esm/render/webgl/ClipStack.js.map +1 -1
  605. package/lib/esm/render/webgl/ClipVolume.js.map +1 -1
  606. package/lib/esm/render/webgl/ClippingProgram.js.map +1 -1
  607. package/lib/esm/render/webgl/ColorInfo.js.map +1 -1
  608. package/lib/esm/render/webgl/Diagnostics.js.map +1 -1
  609. package/lib/esm/render/webgl/Disposable.js.map +1 -1
  610. package/lib/esm/render/webgl/DrawCommand.d.ts.map +1 -1
  611. package/lib/esm/render/webgl/DrawCommand.js +2 -1
  612. package/lib/esm/render/webgl/DrawCommand.js.map +1 -1
  613. package/lib/esm/render/webgl/EDL.js.map +1 -1
  614. package/lib/esm/render/webgl/EdgeGeometry.js.map +1 -1
  615. package/lib/esm/render/webgl/EdgeSettings.js.map +1 -1
  616. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  617. package/lib/esm/render/webgl/FloatRGBA.js.map +1 -1
  618. package/lib/esm/render/webgl/FrameBuffer.js.map +1 -1
  619. package/lib/esm/render/webgl/FrustumUniforms.js.map +1 -1
  620. package/lib/esm/render/webgl/GL.js.map +1 -1
  621. package/lib/esm/render/webgl/GLTimer.js.map +1 -1
  622. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  623. package/lib/esm/render/webgl/HiliteUniforms.js.map +1 -1
  624. package/lib/esm/render/webgl/IModelFrameLifecycle.js.map +1 -1
  625. package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  626. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  627. package/lib/esm/render/webgl/Layer.js.map +1 -1
  628. package/lib/esm/render/webgl/LayerCommands.js.map +1 -1
  629. package/lib/esm/render/webgl/LightingUniforms.js.map +1 -1
  630. package/lib/esm/render/webgl/LineCode.js.map +1 -1
  631. package/lib/esm/render/webgl/Material.js.map +1 -1
  632. package/lib/esm/render/webgl/Matrix.js.map +1 -1
  633. package/lib/esm/render/webgl/Mesh.js.map +1 -1
  634. package/lib/esm/render/webgl/MeshData.js.map +1 -1
  635. package/lib/esm/render/webgl/MeshGeometry.js.map +1 -1
  636. package/lib/esm/render/webgl/PerformanceMetrics.js.map +1 -1
  637. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  638. package/lib/esm/render/webgl/PlanarGrid.js.map +1 -1
  639. package/lib/esm/render/webgl/PlanarTextureProjection.js.map +1 -1
  640. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  641. package/lib/esm/render/webgl/PointString.js.map +1 -1
  642. package/lib/esm/render/webgl/Polyline.js.map +1 -1
  643. package/lib/esm/render/webgl/Primitive.js.map +1 -1
  644. package/lib/esm/render/webgl/RealityMesh.js.map +1 -1
  645. package/lib/esm/render/webgl/RealityModelUniforms.js.map +1 -1
  646. package/lib/esm/render/webgl/RenderBuffer.js.map +1 -1
  647. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  648. package/lib/esm/render/webgl/RenderFlags.js.map +1 -1
  649. package/lib/esm/render/webgl/RenderState.js.map +1 -1
  650. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  651. package/lib/esm/render/webgl/ScratchDrawParams.js.map +1 -1
  652. package/lib/esm/render/webgl/ScreenSpaceEffect.js.map +1 -1
  653. package/lib/esm/render/webgl/ShaderBuilder.d.ts +7 -5
  654. package/lib/esm/render/webgl/ShaderBuilder.d.ts.map +1 -1
  655. package/lib/esm/render/webgl/ShaderBuilder.js +15 -5
  656. package/lib/esm/render/webgl/ShaderBuilder.js.map +1 -1
  657. package/lib/esm/render/webgl/ShaderProgram.js.map +1 -1
  658. package/lib/esm/render/webgl/ShadowUniforms.js.map +1 -1
  659. package/lib/esm/render/webgl/SolarShadowMap.js.map +1 -1
  660. package/lib/esm/render/webgl/StyleUniforms.js.map +1 -1
  661. package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
  662. package/lib/esm/render/webgl/Sync.js.map +1 -1
  663. package/lib/esm/render/webgl/System.js.map +1 -1
  664. package/lib/esm/render/webgl/Target.d.ts +1 -0
  665. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  666. package/lib/esm/render/webgl/Target.js +4 -0
  667. package/lib/esm/render/webgl/Target.js.map +1 -1
  668. package/lib/esm/render/webgl/TargetGraphics.js.map +1 -1
  669. package/lib/esm/render/webgl/TargetUniforms.d.ts +2 -0
  670. package/lib/esm/render/webgl/TargetUniforms.d.ts.map +1 -1
  671. package/lib/esm/render/webgl/TargetUniforms.js +2 -0
  672. package/lib/esm/render/webgl/TargetUniforms.js.map +1 -1
  673. package/lib/esm/render/webgl/Technique.d.ts.map +1 -1
  674. package/lib/esm/render/webgl/Technique.js +110 -17
  675. package/lib/esm/render/webgl/Technique.js.map +1 -1
  676. package/lib/esm/render/webgl/TechniqueFlags.d.ts +7 -1
  677. package/lib/esm/render/webgl/TechniqueFlags.d.ts.map +1 -1
  678. package/lib/esm/render/webgl/TechniqueFlags.js +10 -1
  679. package/lib/esm/render/webgl/TechniqueFlags.js.map +1 -1
  680. package/lib/esm/render/webgl/TechniqueId.js.map +1 -1
  681. package/lib/esm/render/webgl/Texture.js.map +1 -1
  682. package/lib/esm/render/webgl/TextureDrape.js.map +1 -1
  683. package/lib/esm/render/webgl/ThematicSensors.js.map +1 -1
  684. package/lib/esm/render/webgl/ThematicUniforms.js.map +1 -1
  685. package/lib/esm/render/webgl/UniformHandle.js.map +1 -1
  686. package/lib/esm/render/webgl/VertexLUT.js.map +1 -1
  687. package/lib/esm/render/webgl/ViewRectUniforms.js.map +1 -1
  688. package/lib/esm/render/webgl/VisibleTileFeatures.js.map +1 -1
  689. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js +154 -154
  690. package/lib/esm/render/webgl/glsl/AmbientOcclusion.js.map +1 -1
  691. package/lib/esm/render/webgl/glsl/Animation.js +83 -83
  692. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  693. package/lib/esm/render/webgl/glsl/Atmosphere.d.ts +7 -0
  694. package/lib/esm/render/webgl/glsl/Atmosphere.d.ts.map +1 -0
  695. package/lib/esm/render/webgl/glsl/Atmosphere.js +458 -0
  696. package/lib/esm/render/webgl/glsl/Atmosphere.js.map +1 -0
  697. package/lib/esm/render/webgl/glsl/Blur.js +37 -37
  698. package/lib/esm/render/webgl/glsl/Blur.js.map +1 -1
  699. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js +4 -4
  700. package/lib/esm/render/webgl/glsl/ClearPickAndColor.js.map +1 -1
  701. package/lib/esm/render/webgl/glsl/ClearTranslucent.js +3 -3
  702. package/lib/esm/render/webgl/glsl/ClearTranslucent.js.map +1 -1
  703. package/lib/esm/render/webgl/glsl/Clipping.js +60 -60
  704. package/lib/esm/render/webgl/glsl/Clipping.js.map +1 -1
  705. package/lib/esm/render/webgl/glsl/Color.js +12 -12
  706. package/lib/esm/render/webgl/glsl/Color.js.map +1 -1
  707. package/lib/esm/render/webgl/glsl/Combine3Textures.js +7 -7
  708. package/lib/esm/render/webgl/glsl/Combine3Textures.js.map +1 -1
  709. package/lib/esm/render/webgl/glsl/CombineTextures.js +5 -5
  710. package/lib/esm/render/webgl/glsl/CombineTextures.js.map +1 -1
  711. package/lib/esm/render/webgl/glsl/Common.js +16 -16
  712. package/lib/esm/render/webgl/glsl/Common.js.map +1 -1
  713. package/lib/esm/render/webgl/glsl/Composite.js +71 -71
  714. package/lib/esm/render/webgl/glsl/Composite.js.map +1 -1
  715. package/lib/esm/render/webgl/glsl/CopyColor.js +6 -6
  716. package/lib/esm/render/webgl/glsl/CopyColor.js.map +1 -1
  717. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js +3 -3
  718. package/lib/esm/render/webgl/glsl/CopyPickBuffers.js.map +1 -1
  719. package/lib/esm/render/webgl/glsl/CopyStencil.js +4 -4
  720. package/lib/esm/render/webgl/glsl/CopyStencil.js.map +1 -1
  721. package/lib/esm/render/webgl/glsl/Decode.js +65 -65
  722. package/lib/esm/render/webgl/glsl/Decode.js.map +1 -1
  723. package/lib/esm/render/webgl/glsl/EDL.js +103 -103
  724. package/lib/esm/render/webgl/glsl/EDL.js.map +1 -1
  725. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js +25 -25
  726. package/lib/esm/render/webgl/glsl/EVSMFromDepth.js.map +1 -1
  727. package/lib/esm/render/webgl/glsl/Edge.js +146 -146
  728. package/lib/esm/render/webgl/glsl/Edge.js.map +1 -1
  729. package/lib/esm/render/webgl/glsl/FeatureSymbology.js +233 -233
  730. package/lib/esm/render/webgl/glsl/FeatureSymbology.js.map +1 -1
  731. package/lib/esm/render/webgl/glsl/Fragment.js +41 -41
  732. package/lib/esm/render/webgl/glsl/Fragment.js.map +1 -1
  733. package/lib/esm/render/webgl/glsl/Instancing.js +21 -21
  734. package/lib/esm/render/webgl/glsl/Instancing.js.map +1 -1
  735. package/lib/esm/render/webgl/glsl/Lighting.js +92 -92
  736. package/lib/esm/render/webgl/glsl/Lighting.js.map +1 -1
  737. package/lib/esm/render/webgl/glsl/LogarithmicDepthBuffer.js.map +1 -1
  738. package/lib/esm/render/webgl/glsl/LookupTable.js +19 -19
  739. package/lib/esm/render/webgl/glsl/LookupTable.js.map +1 -1
  740. package/lib/esm/render/webgl/glsl/Monochrome.js +13 -13
  741. package/lib/esm/render/webgl/glsl/Monochrome.js.map +1 -1
  742. package/lib/esm/render/webgl/glsl/PlanarClassification.js +188 -188
  743. package/lib/esm/render/webgl/glsl/PlanarClassification.js.map +1 -1
  744. package/lib/esm/render/webgl/glsl/PlanarGrid.js +22 -22
  745. package/lib/esm/render/webgl/glsl/PlanarGrid.js.map +1 -1
  746. package/lib/esm/render/webgl/glsl/PointCloud.js +28 -28
  747. package/lib/esm/render/webgl/glsl/PointCloud.js.map +1 -1
  748. package/lib/esm/render/webgl/glsl/PointString.js +9 -9
  749. package/lib/esm/render/webgl/glsl/PointString.js.map +1 -1
  750. package/lib/esm/render/webgl/glsl/Polyline.js +213 -213
  751. package/lib/esm/render/webgl/glsl/Polyline.js.map +1 -1
  752. package/lib/esm/render/webgl/glsl/RealityMesh.d.ts.map +1 -1
  753. package/lib/esm/render/webgl/glsl/RealityMesh.js +87 -84
  754. package/lib/esm/render/webgl/glsl/RealityMesh.js.map +1 -1
  755. package/lib/esm/render/webgl/glsl/RenderPass.js.map +1 -1
  756. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js +9 -9
  757. package/lib/esm/render/webgl/glsl/ScreenSpaceEffect.js.map +1 -1
  758. package/lib/esm/render/webgl/glsl/SkyBox.js.map +1 -1
  759. package/lib/esm/render/webgl/glsl/SkySphere.d.ts +3 -2
  760. package/lib/esm/render/webgl/glsl/SkySphere.d.ts.map +1 -1
  761. package/lib/esm/render/webgl/glsl/SkySphere.js +193 -151
  762. package/lib/esm/render/webgl/glsl/SkySphere.js.map +1 -1
  763. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js +51 -51
  764. package/lib/esm/render/webgl/glsl/SolarShadowMapping.js.map +1 -1
  765. package/lib/esm/render/webgl/glsl/Surface.js +240 -240
  766. package/lib/esm/render/webgl/glsl/Surface.js.map +1 -1
  767. package/lib/esm/render/webgl/glsl/Thematic.js +134 -134
  768. package/lib/esm/render/webgl/glsl/Thematic.js.map +1 -1
  769. package/lib/esm/render/webgl/glsl/Translucency.js +19 -19
  770. package/lib/esm/render/webgl/glsl/Translucency.js.map +1 -1
  771. package/lib/esm/render/webgl/glsl/Vertex.js +73 -73
  772. package/lib/esm/render/webgl/glsl/Vertex.js.map +1 -1
  773. package/lib/esm/render/webgl/glsl/Viewport.js +38 -38
  774. package/lib/esm/render/webgl/glsl/Viewport.js.map +1 -1
  775. package/lib/esm/render/webgl/glsl/ViewportQuad.js.map +1 -1
  776. package/lib/esm/render/webgl/glsl/Wiremesh.js +10 -10
  777. package/lib/esm/render/webgl/glsl/Wiremesh.js.map +1 -1
  778. package/lib/esm/render-primitives.js.map +1 -1
  779. package/lib/esm/request/Request.js.map +1 -1
  780. package/lib/esm/tile/B3dmReader.js.map +1 -1
  781. package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
  782. package/lib/esm/tile/CesiumAssetProvider.js.map +1 -1
  783. package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
  784. package/lib/esm/tile/ContextShareProvider.js.map +1 -1
  785. package/lib/esm/tile/DisclosedTileTreeSet.js.map +1 -1
  786. package/lib/esm/tile/DynamicIModelTile.js.map +1 -1
  787. package/lib/esm/tile/GltfReader.js.map +1 -1
  788. package/lib/esm/tile/GraphicsCollector.js.map +1 -1
  789. package/lib/esm/tile/I3dmReader.js.map +1 -1
  790. package/lib/esm/tile/IModelTile.js.map +1 -1
  791. package/lib/esm/tile/IModelTileRequestChannels.js.map +1 -1
  792. package/lib/esm/tile/IModelTileTree.js.map +1 -1
  793. package/lib/esm/tile/ImdlReader.js.map +1 -1
  794. package/lib/esm/tile/LRUTileList.js.map +1 -1
  795. package/lib/esm/tile/OPCFormatInterpreter.js.map +1 -1
  796. package/lib/esm/tile/PntsReader.d.ts +2 -2
  797. package/lib/esm/tile/PntsReader.d.ts.map +1 -1
  798. package/lib/esm/tile/PntsReader.js +10 -2
  799. package/lib/esm/tile/PntsReader.js.map +1 -1
  800. package/lib/esm/tile/RealityTile.js.map +1 -1
  801. package/lib/esm/tile/RealityTileDrawArgs.js.map +1 -1
  802. package/lib/esm/tile/RealityTileLoader.js +1 -1
  803. package/lib/esm/tile/RealityTileLoader.js.map +1 -1
  804. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  805. package/lib/esm/tile/ThreeDTileFormatInterpreter.js.map +1 -1
  806. package/lib/esm/tile/Tile.js.map +1 -1
  807. package/lib/esm/tile/TileAdmin.js.map +1 -1
  808. package/lib/esm/tile/TileContent.js.map +1 -1
  809. package/lib/esm/tile/TileDrawArgs.js.map +1 -1
  810. package/lib/esm/tile/TileGeometryCollector.js.map +1 -1
  811. package/lib/esm/tile/TileParams.js.map +1 -1
  812. package/lib/esm/tile/TileRequest.js.map +1 -1
  813. package/lib/esm/tile/TileRequestChannel.js.map +1 -1
  814. package/lib/esm/tile/TileRequestChannels.js.map +1 -1
  815. package/lib/esm/tile/TileStorage.js.map +1 -1
  816. package/lib/esm/tile/TileTree.js.map +1 -1
  817. package/lib/esm/tile/TileTreeOwner.js.map +1 -1
  818. package/lib/esm/tile/TileTreeParams.js.map +1 -1
  819. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  820. package/lib/esm/tile/TileTreeSupplier.js.map +1 -1
  821. package/lib/esm/tile/TileUsageMarker.js.map +1 -1
  822. package/lib/esm/tile/TileUser.js.map +1 -1
  823. package/lib/esm/tile/TileUserSet.js.map +1 -1
  824. package/lib/esm/tile/TiledGraphicsProvider.js.map +1 -1
  825. package/lib/esm/tile/ViewFlagOverrides.js.map +1 -1
  826. package/lib/esm/tile/internal.js.map +1 -1
  827. package/lib/esm/tile/map/ArcGISTileMap.js.map +1 -1
  828. package/lib/esm/tile/map/ArcGisUtilities.js.map +1 -1
  829. package/lib/esm/tile/map/BingElevation.js.map +1 -1
  830. package/lib/esm/tile/map/CesiumTerrainProvider.js.map +1 -1
  831. package/lib/esm/tile/map/EllipsoidTerrainProvider.js.map +1 -1
  832. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  833. package/lib/esm/tile/map/ImageryProviders/ArcGISMapLayerImageryProvider.js.map +1 -1
  834. package/lib/esm/tile/map/ImageryProviders/AzureMapsLayerImageryProvider.js.map +1 -1
  835. package/lib/esm/tile/map/ImageryProviders/BingImageryProvider.js.map +1 -1
  836. package/lib/esm/tile/map/ImageryProviders/MapBoxLayerImageryProvider.js.map +1 -1
  837. package/lib/esm/tile/map/ImageryProviders/TileUrlImageryProvider.js.map +1 -1
  838. package/lib/esm/tile/map/ImageryProviders/WmsMapLayerImageryProvider.js.map +1 -1
  839. package/lib/esm/tile/map/ImageryProviders/WmtsMapLayerImageryProvider.js.map +1 -1
  840. package/lib/esm/tile/map/MapCartoRectangle.js.map +1 -1
  841. package/lib/esm/tile/map/MapFeatureInfo.js.map +1 -1
  842. package/lib/esm/tile/map/MapLayerAuthentication.js.map +1 -1
  843. package/lib/esm/tile/map/MapLayerFormatRegistry.js.map +1 -1
  844. package/lib/esm/tile/map/MapLayerImageryProvider.js +2 -2
  845. package/lib/esm/tile/map/MapLayerImageryProvider.js.map +1 -1
  846. package/lib/esm/tile/map/MapLayerSources.js.map +1 -1
  847. package/lib/esm/tile/map/MapLayerTileTreeReference.js.map +1 -1
  848. package/lib/esm/tile/map/MapTile.js.map +1 -1
  849. package/lib/esm/tile/map/MapTileAvailability.js.map +1 -1
  850. package/lib/esm/tile/map/MapTileLoader.js.map +1 -1
  851. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  852. package/lib/esm/tile/map/MapTilingScheme.js.map +1 -1
  853. package/lib/esm/tile/map/QuadId.js.map +1 -1
  854. package/lib/esm/tile/map/TerrainMeshProvider.js.map +1 -1
  855. package/lib/esm/tile/map/TerrainProvider.js.map +1 -1
  856. package/lib/esm/tile/map/WmsCapabilities.js.map +1 -1
  857. package/lib/esm/tile/map/WmsUtilities.js.map +1 -1
  858. package/lib/esm/tile/map/WmtsCapabilities.js.map +1 -1
  859. package/lib/esm/tools/AccuDrawTool.js.map +1 -1
  860. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  861. package/lib/esm/tools/EditManipulator.js.map +1 -1
  862. package/lib/esm/tools/ElementSetTool.js.map +1 -1
  863. package/lib/esm/tools/EventController.js.map +1 -1
  864. package/lib/esm/tools/IdleTool.js.map +1 -1
  865. package/lib/esm/tools/MeasureTool.js.map +1 -1
  866. package/lib/esm/tools/PrimitiveTool.js.map +1 -1
  867. package/lib/esm/tools/SelectTool.js.map +1 -1
  868. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  869. package/lib/esm/tools/ToolAssistance.js.map +1 -1
  870. package/lib/esm/tools/ToolSettings.js.map +1 -1
  871. package/lib/esm/tools/ViewTool.js.map +1 -1
  872. package/lib/esm/webgl.js.map +1 -1
  873. package/lib/public/assets/MapLayerSources.json +25 -25
  874. package/lib/public/images/cesium-ion.svg +92 -92
  875. package/lib/public/images/imodeljs-icon.svg +2 -2
  876. package/lib/public/locales/en/CoreTools.json +477 -477
  877. package/lib/public/locales/en/iModelJs.json +170 -170
  878. package/lib/public/scripts/checkbrowser.js +24 -24
  879. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"VertexTableSplitter.js","sourceRoot":"","sources":["../../../../src/render/primitives/VertexTableSplitter.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, Uint32ArrayBuilder, Uint8ArrayBuilder } from \"@itwin/core-bentley\";\nimport { ColorDef, ComputeNodeId, PackedFeatureTable } from \"@itwin/core-common\";\nimport {\n computeDimensions, MeshParams, VertexIndices, VertexTable, VertexTableProps, VertexTableWithIndices,\n} from \"./VertexTable\";\nimport { PointStringParams } from \"./PointStringParams\";\nimport { PolylineParams, TesselatedPolyline } from \"./PolylineParams\";\nimport { calculateEdgeTableParams, EdgeParams, EdgeTable, IndexedEdgeParams } from \"./EdgeParams\";\nimport { createSurfaceMaterial, SurfaceMaterial } from \"./SurfaceParams\";\nimport { IModelApp } from \"../../IModelApp\";\nimport { CreateRenderMaterialArgs } from \"../RenderMaterial\";\n\n/** Builds up a [[VertexIndices]].\n * Exported strictly for tests.\n */\nexport class IndexBuffer {\n private readonly _builder: Uint8ArrayBuilder;\n private readonly _index32 = new Uint32Array(1);\n private readonly _index8 = new Uint8Array(this._index32.buffer, 0, 3);\n\n public constructor(initialCapacity = 3) {\n this._builder = new Uint8ArrayBuilder({ initialCapacity: initialCapacity * 3 });\n }\n\n public get numIndices(): number {\n assert((this._builder.length % 3) === 0);\n return this._builder.length / 3;\n }\n\n public push(index: number): void {\n this._index32[0] = index;\n this._builder.append(this._index8);\n }\n\n public toVertexIndices(): VertexIndices {\n return new VertexIndices(this._builder.toTypedArray());\n }\n}\n\n/** Builds up a [[VertexTable]]. */\nclass VertexBuffer {\n private readonly _builder: Uint32ArrayBuilder;\n private readonly _source: VertexTable;\n\n /** `source` is the original table containing the vertex data from which individual vertices will be obtained. */\n public constructor(source: VertexTable) {\n this._source = source;\n this._builder = new Uint32ArrayBuilder({ initialCapacity: 3 * source.numRgbaPerVertex });\n }\n\n /** The number of vertices currently in the table. */\n public get length(): number {\n assert((this._builder.length % this.vertexSize) === 0);\n return this._builder.length / this.vertexSize;\n }\n\n /** The number of 32-bit unsigned integers (RGBA values) per vertex. */\n public get vertexSize(): number {\n return this._source.numRgbaPerVertex;\n }\n\n /** Append a vertex. `vertex` must be of size [[vertexSize]]. */\n public push(vertex: Uint32Array): void {\n assert(vertex.length === this.vertexSize);\n this._builder.append(vertex);\n }\n\n /** Construct the finished vertex table. */\n public buildVertexTable(maxDimension: number, colorTable: ColorTable | undefined, materialAtlasTable: MaterialAtlasTable): VertexTable {\n const source = this._source;\n colorTable = colorTable ?? source.uniformColor;\n assert(undefined !== colorTable);\n\n const colorTableLength = colorTable instanceof Uint32Array ? colorTable.length : 0;\n const materialAtlasTableLength = materialAtlasTable instanceof Uint32Array ? materialAtlasTable.length : 0;\n const dimensions = computeDimensions(this.length, this.vertexSize, colorTableLength + materialAtlasTableLength, maxDimension);\n\n let rgbaData = this._builder.toTypedArray();\n if (dimensions.width * dimensions.height > rgbaData.length) {\n const prevData = rgbaData;\n rgbaData = new Uint32Array(dimensions.width * dimensions.height);\n rgbaData.set(prevData, 0);\n }\n\n let tableSize = this.vertexSize * this.length;\n if (colorTable instanceof Uint32Array) {\n rgbaData.set(colorTable, tableSize);\n tableSize += colorTable.length;\n }\n\n if (materialAtlasTable instanceof Uint32Array)\n rgbaData.set(materialAtlasTable, tableSize);\n\n const tableProps: VertexTableProps = {\n data: new Uint8Array(rgbaData.buffer, rgbaData.byteOffset, rgbaData.byteLength),\n usesUnquantizedPositions: source.usesUnquantizedPositions,\n qparams: source.qparams,\n width: dimensions.width,\n height: dimensions.height,\n hasTranslucency: source.hasTranslucency,\n uniformColor: colorTable instanceof ColorDef ? colorTable : undefined,\n featureIndexType: source.featureIndexType,\n uniformFeatureID: source.uniformFeatureID,\n numVertices: this.length,\n numRgbaPerVertex: source.numRgbaPerVertex,\n uvParams: source.uvParams,\n };\n\n return new VertexTable(tableProps);\n }\n}\n\ntype ColorTable = Uint32Array | ColorDef;\n\n/** Remaps portions of a source color table into a filtered target color table. */\nclass ColorTableRemapper {\n private readonly _remappedIndices = new Map<number, number>();\n private readonly _colorTable: Uint32Array;\n public readonly colors: number[] = [];\n private readonly _32 = new Uint32Array(1);\n private readonly _16 = new Uint16Array(this._32.buffer);\n\n public constructor(colorTable: Uint32Array) {\n this._colorTable = colorTable;\n }\n\n /** Extract the color index stored in `vertex`, ensure it is present in the remapped color table, and return its index in that table. */\n public remap(vertex: Uint32Array, usesUnquantizedPositions: boolean | undefined): void {\n const vertIndex = usesUnquantizedPositions ? 4 : 1;\n const shortIndex = usesUnquantizedPositions ? 0 : 1;\n this._32[0] = vertex[vertIndex];\n const oldIndex = this._16[shortIndex];\n let newIndex = this._remappedIndices.get(oldIndex);\n if (undefined === newIndex) {\n newIndex = this.colors.length;\n this._remappedIndices.set(oldIndex, newIndex);\n const color = this._colorTable[oldIndex];\n this.colors.push(color);\n }\n\n this._16[shortIndex] = newIndex;\n vertex[vertIndex] = this._32[0];\n }\n\n /** Construct the finished color table. */\n public buildColorTable(): ColorTable {\n assert(this.colors.length > 0);\n return this.colors.length > 1 ? new Uint32Array(this.colors) : ColorDef.fromAbgr(this.colors[0]);\n }\n}\n\ntype MaterialAtlasTable = Uint32Array | SurfaceMaterial | undefined;\n\nclass MaterialAtlasRemapper {\n private readonly _remappedIndices = new Map<number, number>();\n private readonly _atlasTable: Uint32Array;\n public readonly materials: number[] = [];\n private readonly _32 = new Uint32Array(1);\n private readonly _8 = new Uint8Array(this._32.buffer);\n\n public constructor(_atlasTable: Uint32Array) {\n this._atlasTable = _atlasTable;\n }\n\n /** Extract the mat index stored in `vertex`, ensure it is present in the remapped atlas table, and return its index in that table. */\n public remap(vertex: Uint32Array, usesUnquantizedPositions: boolean | undefined): void {\n const vertIndex = usesUnquantizedPositions ? 3 : 2;\n this._32[0] = vertex[vertIndex];\n const oldIndex = this._8[3];\n let newIndex = this._remappedIndices.get(oldIndex);\n if (undefined === newIndex) {\n newIndex = this.materials.length / 4;\n this._remappedIndices.set(oldIndex, newIndex);\n let index = oldIndex * 4;\n this.materials.push(this._atlasTable[index++]);\n this.materials.push(this._atlasTable[index++]);\n this.materials.push(this._atlasTable[index++]);\n this.materials.push(this._atlasTable[index]);\n }\n\n this._8[3] = newIndex;\n vertex[vertIndex] = this._32[0];\n }\n\n private unpackFloat(value: number): number {\n this._32[0] = value;\n const valUint32 = this._32[0];\n const bias = 38.0;\n const temp = (valUint32 >>> 24) / 2.0;\n let exponent = Math.floor(temp);\n let sign = (temp - exponent) * 2.0;\n sign = -(sign * 2.0 - 1.0);\n const base = sign * (valUint32 & 0xffffff) / 16777216.0;\n exponent = exponent - bias;\n return base * Math.pow(10.0, exponent);\n }\n\n private materialFromAtlasEntry(entry: Uint32Array): SurfaceMaterial | undefined {\n const rgbOverridden = (entry[1] & 0x1000000) !== 0;\n const alphaOverridden = (entry[1] & 0x2000000) !== 0;\n const args: CreateRenderMaterialArgs = {\n alpha: alphaOverridden ? (entry[0] >>> 24) / 255.0 : undefined,\n diffuse: {\n color: rgbOverridden ? ColorDef.fromTbgr(entry[0] & 0xffffff) : undefined,\n weight: (entry[1] >>> 8) / 255.0,\n },\n specular: {\n color: ColorDef.fromTbgr(entry[2]),\n weight: ((entry[1] >>> 16) & 0xff) / 255.0,\n exponent: this.unpackFloat(entry[3]),\n },\n };\n const material = IModelApp.renderSystem.createRenderMaterial(args);\n return createSurfaceMaterial(material);\n }\n\n /** Construct the finished color table. */\n public buildAtlasTable(): MaterialAtlasTable {\n assert(this.materials.length > 0);\n const m = new Uint32Array(this.materials);\n return this.materials.length > 4 ? m : this.materialFromAtlasEntry(m);\n }\n}\n\n/** A node in a split vertex table. Each node corresponds to one or more elements. */\nclass Node {\n public readonly vertices: VertexBuffer;\n public readonly remappedIndices = new Map<number, number>();\n public readonly indices = new IndexBuffer();\n public readonly colors?: ColorTableRemapper;\n public readonly atlas?: MaterialAtlasRemapper;\n public readonly usesUnquantizedPositions?: boolean;\n\n /** `vertexTable` is the source table containing vertex data for all nodes, from which this node will extract the vertices belong to it. */\n public constructor(vertexTable: VertexTable, numColorsPrecedingAtlas: number | undefined) {\n this.vertices = new VertexBuffer(vertexTable);\n if (undefined === vertexTable.uniformColor)\n this.colors = new ColorTableRemapper(new Uint32Array(vertexTable.data.buffer, vertexTable.data.byteOffset + 4 * vertexTable.numVertices * vertexTable.numRgbaPerVertex));\n\n if (undefined !== numColorsPrecedingAtlas) {\n const atlasOffset = (vertexTable.numVertices * vertexTable.numRgbaPerVertex + numColorsPrecedingAtlas) * 4;\n this.atlas = new MaterialAtlasRemapper(new Uint32Array(vertexTable.data.buffer, vertexTable.data.byteOffset + atlasOffset));\n }\n\n this.usesUnquantizedPositions = vertexTable.usesUnquantizedPositions;\n }\n\n public addVertex(originalIndex: number, vertex: Uint32Array): void {\n let newIndex = this.remappedIndices.get(originalIndex);\n if (undefined === newIndex) {\n newIndex = this.vertices.length;\n this.remappedIndices.set(originalIndex, newIndex);\n\n this.colors?.remap(vertex, this.usesUnquantizedPositions);\n this.atlas?.remap(vertex, this.usesUnquantizedPositions);\n this.vertices.push(vertex);\n }\n\n this.indices.push(newIndex);\n }\n\n public buildOutput(maxDimension: number): VertexTableWithIndices {\n const materialAtlas = this.atlas?.buildAtlasTable();\n const material: SurfaceMaterial | undefined = (materialAtlas instanceof Uint32Array) ? undefined : materialAtlas;\n return {\n indices: this.indices.toVertexIndices(),\n vertices: this.vertices.buildVertexTable(maxDimension, this.colors?.buildColorTable(), materialAtlas),\n material,\n };\n }\n}\n\ninterface VertexTableSplitArgs extends VertexTableWithIndices {\n featureTable: PackedFeatureTable;\n atlasOffset?: number;\n}\n\nclass VertexTableSplitter {\n private readonly _input: VertexTableSplitArgs;\n private readonly _computeNodeId: ComputeNodeId;\n private readonly _nodes = new Map<number, Node>();\n\n private constructor(input: VertexTableSplitArgs, computeNodeId: ComputeNodeId) {\n this._input = input;\n this._computeNodeId = computeNodeId;\n }\n\n /** Split the source into one or more output nodes, returning a mapping of integer node Id to node. */\n public static split(source: VertexTableSplitArgs, computeNodeId: ComputeNodeId): Map<number, Node> {\n const splitter = new VertexTableSplitter(source, computeNodeId);\n splitter.split();\n return splitter._nodes;\n }\n\n private split(): void {\n // Track the most recent feature and corresponding node to avoid repeated lookups - vertices for\n // individual features are largely contiguous.\n const curState = {\n featureIndex: -1,\n node: undefined as unknown as Node,\n };\n\n const vertSize = this._input.vertices.numRgbaPerVertex;\n const vertex = new Uint32Array(vertSize);\n const vertexTable = new Uint32Array(this._input.vertices.data.buffer, this._input.vertices.data.byteOffset, this._input.vertices.numVertices * vertSize);\n\n const elemIdPair = { lower: 0, upper: 0 };\n for (const index of this._input.indices) {\n // Extract the data for this vertex without allocating new typed arrays.\n const vertexOffset = index * vertSize;\n for (let i = 0; i < vertex.length; i++)\n vertex[i] = vertexTable[vertexOffset + i];\n\n // Determine to which element the vertex belongs and find the corresponding Node.\n const featureIndex = vertex[2] & 0x00ffffff;\n if (curState.featureIndex !== featureIndex) {\n curState.featureIndex = featureIndex;\n this._input.featureTable.getElementIdPair(featureIndex, elemIdPair);\n const nodeId = this._computeNodeId(elemIdPair, featureIndex);\n let node = this._nodes.get(nodeId);\n if (undefined === node)\n this._nodes.set(nodeId, node = new Node(this._input.vertices, this._input.atlasOffset));\n\n curState.node = node;\n }\n\n // Add the vertex to the appropriate node.\n curState.node.addVertex(index, vertex);\n }\n }\n}\n\nexport interface SplitVertexTableArgs {\n featureTable: PackedFeatureTable;\n maxDimension: number;\n computeNodeId: ComputeNodeId;\n}\n\nexport interface SplitPointStringArgs extends SplitVertexTableArgs {\n params: PointStringParams;\n}\n\n/** Given a PointStringParams and a function that can associate a node Id with an element Id, produce a mapping of nodes to PointStringParams, splitting up\n * the input params as needed.\n * @internal\n */\nexport function splitPointStringParams(args: SplitPointStringArgs): Map<number, PointStringParams> {\n const nodes = VertexTableSplitter.split({\n indices: args.params.indices,\n vertices: args.params.vertices,\n featureTable: args.featureTable,\n }, args.computeNodeId);\n\n const result = new Map<number, PointStringParams>();\n for (const [id, node] of nodes) {\n const { vertices, indices } = node.buildOutput(args.maxDimension);\n result.set(id, new PointStringParams(vertices, indices, args.params.weight));\n }\n\n return result;\n}\n\ninterface RemappedSegmentEdges {\n indices: IndexBuffer;\n endPointAndQuadIndices: Uint32ArrayBuilder;\n}\n\ninterface RemappedSilhouetteEdges extends RemappedSegmentEdges {\n normalPairs: Uint32ArrayBuilder;\n}\n\nclass RemappedPolylineEdges {\n public readonly indices = new IndexBuffer();\n public readonly prevIndices = new IndexBuffer();\n public readonly nextIndicesAndParams = new Uint32ArrayBuilder();\n}\n\ninterface RemappedIndexEdges {\n edges: Uint8ArrayBuilder;\n silhouettes: Uint8ArrayBuilder;\n}\n\ninterface RemappedEdges {\n segments?: RemappedSegmentEdges;\n silhouettes?: RemappedSilhouetteEdges;\n polylines?: RemappedPolylineEdges;\n indexed?: RemappedIndexEdges;\n}\n\ninterface RemappedIndex {\n node: Node;\n id: number;\n index: number;\n}\n\nfunction remapIndex(out: RemappedIndex, srcIndex: number, nodes: Map<number, Node>): boolean {\n for (const [id, node] of nodes) {\n const index = node.remappedIndices.get(srcIndex);\n if (undefined !== index) {\n out.index = index;\n out.node = node;\n out.id = id;\n return true;\n }\n }\n\n assert(false);\n return false;\n}\n\nfunction remapSegmentEdges(type: \"segments\" | \"silhouettes\", source: EdgeParams, nodes: Map<number, Node>, edges: Map<number, RemappedEdges>): void {\n const src = source[type];\n if (!src)\n return;\n\n const srcEndPts = new Uint32Array(src.endPointAndQuadIndices.buffer, src.endPointAndQuadIndices.byteOffset, src.endPointAndQuadIndices.length / 4);\n let srcNormalPairs;\n if (type === \"silhouettes\") {\n assert(undefined !== source.silhouettes);\n srcNormalPairs = new Uint32Array(source.silhouettes.normalPairs.buffer, source.silhouettes.normalPairs.byteOffset, source.silhouettes.normalPairs.length / 4);\n }\n\n let curIndexIndex = 0;\n const remappedIndex = { } as unknown as RemappedIndex;\n for (const srcIndex of src.indices) {\n if (remapIndex(remappedIndex, srcIndex, nodes)) {\n let endPointAndQuad = srcEndPts[curIndexIndex];\n const otherIndex = (endPointAndQuad & 0x00ffffff) >>> 0;\n const newOtherIndex = remappedIndex.node.remappedIndices.get(otherIndex);\n assert(undefined !== newOtherIndex);\n endPointAndQuad = (endPointAndQuad & 0xff000000) | newOtherIndex;\n\n let entry = edges.get(remappedIndex.id);\n if (!entry)\n edges.set(remappedIndex.id, entry = { });\n\n if (srcNormalPairs) {\n if (!entry.silhouettes)\n entry.silhouettes = { indices: new IndexBuffer(), endPointAndQuadIndices: new Uint32ArrayBuilder(), normalPairs: new Uint32ArrayBuilder() };\n\n entry.silhouettes.normalPairs.push(srcNormalPairs[curIndexIndex]);\n } else if (!entry.segments) {\n entry.segments = { indices: new IndexBuffer(), endPointAndQuadIndices: new Uint32ArrayBuilder() };\n }\n\n const segments = entry[type];\n assert(undefined !== segments);\n\n segments.indices.push(remappedIndex.index);\n segments.endPointAndQuadIndices.push(endPointAndQuad);\n }\n\n ++curIndexIndex;\n }\n}\n\nfunction remapPolylineEdges(src: TesselatedPolyline, nodes: Map<number, Node>, edges: Map<number, RemappedEdges>): void {\n const srcNextAndParam = new Uint32Array(src.nextIndicesAndParams.buffer, src.nextIndicesAndParams.byteOffset, src.nextIndicesAndParams.length / 4);\n const prevIter = src.prevIndices[Symbol.iterator]();\n let curIndexIndex = 0;\n const remappedIndex = { } as unknown as RemappedIndex;\n for (const srcIndex of src.indices) {\n if (remapIndex(remappedIndex, srcIndex, nodes)) {\n const prevIndex = prevIter.next().value;\n assert(undefined !== prevIndex);\n const newPrevIndex = remappedIndex.node.remappedIndices.get(prevIndex);\n assert(undefined !== newPrevIndex);\n\n let nextAndParam = srcNextAndParam[curIndexIndex];\n const nextIndex = (nextAndParam & 0x00ffffff) >>> 0;\n const newNextIndex = remappedIndex.node.remappedIndices.get(nextIndex);\n assert(undefined !== newNextIndex);\n nextAndParam = (nextAndParam & 0xff000000) | newNextIndex;\n\n let entry = edges.get(remappedIndex.id);\n if (!entry)\n edges.set(remappedIndex.id, entry = { });\n\n if (!entry.polylines)\n entry.polylines = new RemappedPolylineEdges();\n\n entry.polylines.indices.push(remappedIndex.index);\n entry.polylines.prevIndices.push(newPrevIndex);\n entry.polylines.nextIndicesAndParams.push(nextAndParam);\n }\n\n ++curIndexIndex;\n }\n}\n\nfunction remapIndexedEdges(src: IndexedEdgeParams, nodes: Map<number, Node>, edges: Map<number, RemappedEdges>): void {\n const srcEdgeData = src.edges.data;\n const numSegments = src.edges.numSegments;\n const silhouetteStartByteIndex = numSegments * 6 + src.edges.silhouettePadding;\n\n function getUint24EdgePair(byteIndex: number): [number, number] {\n return [srcEdgeData[byteIndex + 0] | (srcEdgeData[byteIndex + 1] << 8) | srcEdgeData[byteIndex + 2] << 16,\n srcEdgeData[byteIndex + 3] | (srcEdgeData[byteIndex + 4] << 8) | srcEdgeData[byteIndex + 5] << 16];\n }\n\n function setUint24EdgePair(indEdges: RemappedIndexEdges, value1: number, value2: number): void {\n indEdges.edges.push(value1 & 0x0000ff);\n indEdges.edges.push((value1 & 0x00ff00) >>> 8);\n indEdges.edges.push((value1 & 0xff0000) >>> 16);\n indEdges.edges.push(value2 & 0x0000ff);\n indEdges.edges.push((value2 & 0x00ff00) >>> 8);\n indEdges.edges.push((value2 & 0xff0000) >>> 16);\n }\n\n function getUint24SilPair(byteIndex: number): [number, number, number, number] {\n return [srcEdgeData[byteIndex + 0] | (srcEdgeData[byteIndex + 1] << 8) | srcEdgeData[byteIndex + 2] << 16,\n srcEdgeData[byteIndex + 3] | (srcEdgeData[byteIndex + 4] << 8) | srcEdgeData[byteIndex + 5] << 16,\n srcEdgeData[byteIndex + 6] | (srcEdgeData[byteIndex + 7] << 8), srcEdgeData[byteIndex + 8] | (srcEdgeData[byteIndex + 9] << 8)];\n }\n\n function setUint24SilPair(indSil: RemappedIndexEdges, value1: number, value2: number, norm1: number, norm2: number): void {\n indSil.silhouettes.push(value1 & 0x0000ff);\n indSil.silhouettes.push((value1 & 0x00ff00) >>> 8);\n indSil.silhouettes.push((value1 & 0xff0000) >>> 16);\n indSil.silhouettes.push(value2 & 0x0000ff);\n indSil.silhouettes.push((value2 & 0x00ff00) >>> 8);\n indSil.silhouettes.push((value2 & 0xff0000) >>> 16);\n indSil.silhouettes.push(norm1 & 0x0000ff);\n indSil.silhouettes.push((norm1 & 0x00ff00) >>> 8);\n indSil.silhouettes.push(norm2 & 0x0000ff);\n indSil.silhouettes.push((norm2 & 0x00ff00) >>> 8);\n }\n\n let maxIndex = 0;\n for (const srcIndex of src.indices)\n maxIndex = Math.max (srcIndex, maxIndex);\n\n const remappedIndex = { } as unknown as RemappedIndex;\n let es1Index = 0, es2Index = 0, n1 = 0, n2 = 0;\n for (let curSegment = 0, byteIndex = 0; curSegment <= maxIndex; ++curSegment) {\n if (curSegment < numSegments) { // edges\n [es1Index, es2Index] = getUint24EdgePair(byteIndex);\n byteIndex += 6;\n } else { // silhouettes\n byteIndex = silhouetteStartByteIndex + (curSegment - numSegments) * 10;\n [es1Index, es2Index, n1, n2] = getUint24SilPair(byteIndex);\n }\n\n if (remapIndex(remappedIndex, es1Index, nodes)) {\n let entry = edges.get(remappedIndex.id);\n if (!entry)\n edges.set(remappedIndex.id, entry = { });\n\n if (!entry.indexed)\n entry.indexed = { edges: new Uint8ArrayBuilder(), silhouettes: new Uint8ArrayBuilder() };\n\n if (curSegment < numSegments) { // edges\n const newE1Index = remappedIndex.node.remappedIndices.get(es1Index);\n assert(undefined !== newE1Index);\n const newE2Index = remappedIndex.node.remappedIndices.get(es2Index);\n assert(undefined !== newE2Index);\n setUint24EdgePair(entry.indexed, newE1Index, newE2Index);\n } else { // silhouettes\n const newS1Index = remappedIndex.node.remappedIndices.get(es1Index);\n assert(undefined !== newS1Index);\n const newS2Index = remappedIndex.node.remappedIndices.get(es2Index);\n assert(undefined !== newS2Index);\n setUint24SilPair(entry.indexed, newS1Index, newS2Index, n1, n2);\n }\n }\n }\n}\n\nfunction splitEdges(source: EdgeParams, nodes: Map<number, Node>): Map<number, EdgeParams> {\n const edges = new Map<number, RemappedEdges>();\n remapSegmentEdges(\"segments\", source, nodes, edges);\n remapSegmentEdges(\"silhouettes\", source, nodes, edges);\n\n if (source.polylines)\n remapPolylineEdges(source.polylines, nodes, edges);\n\n if (source.indexed)\n remapIndexedEdges(source.indexed, nodes, edges);\n\n const result = new Map<number, EdgeParams>();\n for (const [id, remappedEdges] of edges) {\n if (!remappedEdges.segments && !remappedEdges.silhouettes && !remappedEdges.indexed)\n continue;\n\n let edgeTable = { } as unknown as EdgeTable;\n let edgeIndices = { } as unknown as VertexIndices;\n if (remappedEdges.indexed) {\n const numSegmentEdges = remappedEdges.indexed.edges.length / 6;\n const numSilhouettes = remappedEdges.indexed.silhouettes.length / 10;\n const { width, height, silhouettePadding, silhouetteStartByteIndex } = calculateEdgeTableParams(numSegmentEdges, numSilhouettes, IModelApp.renderSystem.maxTextureSize);\n const data = new Uint8Array(width * height * 4);\n data.set(remappedEdges.indexed.edges.toTypedArray(), 0);\n if (numSilhouettes > 0)\n data.set(remappedEdges.indexed.silhouettes.toTypedArray(), silhouetteStartByteIndex + silhouettePadding);\n\n const numTotalEdges = numSegmentEdges + numSilhouettes;\n edgeIndices = new VertexIndices(new Uint8Array(numTotalEdges * 6 * 3));\n for (let i = 0; i < numTotalEdges; i++)\n for (let j = 0; j < 6; j++)\n edgeIndices.setNthIndex(i * 6 + j, i);\n\n edgeTable = {\n data,\n width,\n height,\n numSegments: numSegmentEdges,\n silhouettePadding,\n };\n }\n\n result.set(id, {\n weight: source.weight,\n linePixels: source.linePixels,\n segments: remappedEdges.segments ? {\n indices: remappedEdges.segments.indices.toVertexIndices(),\n endPointAndQuadIndices: remappedEdges.segments.endPointAndQuadIndices.toUint8Array(),\n } : undefined,\n silhouettes: remappedEdges.silhouettes ? {\n indices: remappedEdges.silhouettes.indices.toVertexIndices(),\n endPointAndQuadIndices: remappedEdges.silhouettes.endPointAndQuadIndices.toUint8Array(),\n normalPairs: remappedEdges.silhouettes.normalPairs.toUint8Array(),\n } : undefined,\n polylines: remappedEdges.polylines ? {\n indices: remappedEdges.polylines.indices.toVertexIndices(),\n prevIndices: remappedEdges.polylines.prevIndices.toVertexIndices(),\n nextIndicesAndParams: remappedEdges.polylines.nextIndicesAndParams.toUint8Array(),\n } : undefined,\n indexed: remappedEdges.indexed ? {\n indices: edgeIndices,\n edges: edgeTable,\n } : undefined,\n });\n }\n\n return result;\n}\n\nexport interface SplitMeshArgs extends SplitVertexTableArgs {\n params: MeshParams;\n}\n\nexport function splitMeshParams(args: SplitMeshArgs): Map<number, MeshParams> {\n const result = new Map<number, MeshParams>();\n\n const mat = args.params.surface.material;\n const atlasOffset = undefined !== mat && mat.isAtlas ? mat.vertexTableOffset : undefined;\n\n const nodes = VertexTableSplitter.split({\n indices: args.params.surface.indices,\n vertices: args.params.vertices,\n featureTable: args.featureTable,\n atlasOffset,\n }, args.computeNodeId);\n\n const edges = args.params.edges ? splitEdges(args.params.edges, nodes) : undefined;\n\n for (const [id, node] of nodes) {\n const { vertices, indices, material } = node.buildOutput(args.maxDimension);\n const params = new MeshParams(\n vertices, {\n type: args.params.surface.type,\n indices,\n fillFlags: args.params.surface.fillFlags,\n hasBakedLighting: args.params.surface.hasBakedLighting,\n textureMapping: args.params.surface.textureMapping,\n material: material !== undefined ? material : args.params.surface.material,\n },\n edges?.get(id),\n args.params.isPlanar,\n // ###TODO handle aux channels.......\n args.params.auxChannels,\n );\n\n result.set(id, params);\n }\n\n return result;\n}\n\nexport interface SplitPolylineArgs extends SplitVertexTableArgs {\n params: PolylineParams;\n}\n\ninterface PolylineNode extends Node {\n prevIndices?: IndexBuffer;\n nextIndicesAndParams?: Uint32ArrayBuilder;\n}\n\nexport function splitPolylineParams(args: SplitPolylineArgs): Map<number, PolylineParams> {\n const nodes = VertexTableSplitter.split({\n indices: args.params.polyline.indices,\n vertices: args.params.vertices,\n featureTable: args.featureTable,\n }, args.computeNodeId) as Map<number, PolylineNode>;\n\n const src = args.params.polyline;\n const srcNextAndParam = new Uint32Array(src.nextIndicesAndParams.buffer, src.nextIndicesAndParams.byteOffset, src.nextIndicesAndParams.length / 4);\n let curIndexIndex = 0;\n const remappedIndex = { } as unknown as RemappedIndex;\n for (const prevIndex of src.prevIndices) {\n if (remapIndex(remappedIndex, prevIndex, nodes)) {\n const node = remappedIndex.node as PolylineNode;\n if (!node.prevIndices) {\n assert(undefined === node.nextIndicesAndParams);\n node.prevIndices = new IndexBuffer(node.indices.numIndices);\n node.nextIndicesAndParams = new Uint32ArrayBuilder({ initialCapacity: node.indices.numIndices });\n } else {\n assert(undefined !== node.nextIndicesAndParams);\n }\n\n node.prevIndices.push(remappedIndex.index);\n\n let nextAndParam = srcNextAndParam[curIndexIndex];\n const nextIndex = (nextAndParam & 0x00ffffff) >>> 0;\n const newNextIndex = remappedIndex.node.remappedIndices.get(nextIndex);\n assert(undefined !== newNextIndex);\n nextAndParam = (nextAndParam & 0xff000000) | newNextIndex;\n node.nextIndicesAndParams.push(nextAndParam);\n }\n\n ++curIndexIndex;\n }\n\n const result = new Map<number, PolylineParams>();\n for (const [id, node] of nodes) {\n assert(undefined !== node.prevIndices && undefined !== node.nextIndicesAndParams);\n const { vertices, indices } = node.buildOutput(args.maxDimension);\n const params = new PolylineParams(\n vertices, {\n indices,\n prevIndices: node.prevIndices.toVertexIndices(),\n nextIndicesAndParams: node.nextIndicesAndParams.toUint8Array(),\n },\n args.params.weight,\n args.params.linePixels,\n args.params.isPlanar,\n args.params.type);\n\n result.set(id, params);\n }\n\n return result;\n}\n"]}
1
+ {"version":3,"file":"VertexTableSplitter.js","sourceRoot":"","sources":["../../../../src/render/primitives/VertexTableSplitter.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert, Uint32ArrayBuilder, Uint8ArrayBuilder } from \"@itwin/core-bentley\";\r\nimport { ColorDef, ComputeNodeId, PackedFeatureTable } from \"@itwin/core-common\";\r\nimport {\r\n computeDimensions, MeshParams, VertexIndices, VertexTable, VertexTableProps, VertexTableWithIndices,\r\n} from \"./VertexTable\";\r\nimport { PointStringParams } from \"./PointStringParams\";\r\nimport { PolylineParams, TesselatedPolyline } from \"./PolylineParams\";\r\nimport { calculateEdgeTableParams, EdgeParams, EdgeTable, IndexedEdgeParams } from \"./EdgeParams\";\r\nimport { createSurfaceMaterial, SurfaceMaterial } from \"./SurfaceParams\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\nimport { CreateRenderMaterialArgs } from \"../RenderMaterial\";\r\n\r\n/** Builds up a [[VertexIndices]].\r\n * Exported strictly for tests.\r\n */\r\nexport class IndexBuffer {\r\n private readonly _builder: Uint8ArrayBuilder;\r\n private readonly _index32 = new Uint32Array(1);\r\n private readonly _index8 = new Uint8Array(this._index32.buffer, 0, 3);\r\n\r\n public constructor(initialCapacity = 3) {\r\n this._builder = new Uint8ArrayBuilder({ initialCapacity: initialCapacity * 3 });\r\n }\r\n\r\n public get numIndices(): number {\r\n assert((this._builder.length % 3) === 0);\r\n return this._builder.length / 3;\r\n }\r\n\r\n public push(index: number): void {\r\n this._index32[0] = index;\r\n this._builder.append(this._index8);\r\n }\r\n\r\n public toVertexIndices(): VertexIndices {\r\n return new VertexIndices(this._builder.toTypedArray());\r\n }\r\n}\r\n\r\n/** Builds up a [[VertexTable]]. */\r\nclass VertexBuffer {\r\n private readonly _builder: Uint32ArrayBuilder;\r\n private readonly _source: VertexTable;\r\n\r\n /** `source` is the original table containing the vertex data from which individual vertices will be obtained. */\r\n public constructor(source: VertexTable) {\r\n this._source = source;\r\n this._builder = new Uint32ArrayBuilder({ initialCapacity: 3 * source.numRgbaPerVertex });\r\n }\r\n\r\n /** The number of vertices currently in the table. */\r\n public get length(): number {\r\n assert((this._builder.length % this.vertexSize) === 0);\r\n return this._builder.length / this.vertexSize;\r\n }\r\n\r\n /** The number of 32-bit unsigned integers (RGBA values) per vertex. */\r\n public get vertexSize(): number {\r\n return this._source.numRgbaPerVertex;\r\n }\r\n\r\n /** Append a vertex. `vertex` must be of size [[vertexSize]]. */\r\n public push(vertex: Uint32Array): void {\r\n assert(vertex.length === this.vertexSize);\r\n this._builder.append(vertex);\r\n }\r\n\r\n /** Construct the finished vertex table. */\r\n public buildVertexTable(maxDimension: number, colorTable: ColorTable | undefined, materialAtlasTable: MaterialAtlasTable): VertexTable {\r\n const source = this._source;\r\n colorTable = colorTable ?? source.uniformColor;\r\n assert(undefined !== colorTable);\r\n\r\n const colorTableLength = colorTable instanceof Uint32Array ? colorTable.length : 0;\r\n const materialAtlasTableLength = materialAtlasTable instanceof Uint32Array ? materialAtlasTable.length : 0;\r\n const dimensions = computeDimensions(this.length, this.vertexSize, colorTableLength + materialAtlasTableLength, maxDimension);\r\n\r\n let rgbaData = this._builder.toTypedArray();\r\n if (dimensions.width * dimensions.height > rgbaData.length) {\r\n const prevData = rgbaData;\r\n rgbaData = new Uint32Array(dimensions.width * dimensions.height);\r\n rgbaData.set(prevData, 0);\r\n }\r\n\r\n let tableSize = this.vertexSize * this.length;\r\n if (colorTable instanceof Uint32Array) {\r\n rgbaData.set(colorTable, tableSize);\r\n tableSize += colorTable.length;\r\n }\r\n\r\n if (materialAtlasTable instanceof Uint32Array)\r\n rgbaData.set(materialAtlasTable, tableSize);\r\n\r\n const tableProps: VertexTableProps = {\r\n data: new Uint8Array(rgbaData.buffer, rgbaData.byteOffset, rgbaData.byteLength),\r\n usesUnquantizedPositions: source.usesUnquantizedPositions,\r\n qparams: source.qparams,\r\n width: dimensions.width,\r\n height: dimensions.height,\r\n hasTranslucency: source.hasTranslucency,\r\n uniformColor: colorTable instanceof ColorDef ? colorTable : undefined,\r\n featureIndexType: source.featureIndexType,\r\n uniformFeatureID: source.uniformFeatureID,\r\n numVertices: this.length,\r\n numRgbaPerVertex: source.numRgbaPerVertex,\r\n uvParams: source.uvParams,\r\n };\r\n\r\n return new VertexTable(tableProps);\r\n }\r\n}\r\n\r\ntype ColorTable = Uint32Array | ColorDef;\r\n\r\n/** Remaps portions of a source color table into a filtered target color table. */\r\nclass ColorTableRemapper {\r\n private readonly _remappedIndices = new Map<number, number>();\r\n private readonly _colorTable: Uint32Array;\r\n public readonly colors: number[] = [];\r\n private readonly _32 = new Uint32Array(1);\r\n private readonly _16 = new Uint16Array(this._32.buffer);\r\n\r\n public constructor(colorTable: Uint32Array) {\r\n this._colorTable = colorTable;\r\n }\r\n\r\n /** Extract the color index stored in `vertex`, ensure it is present in the remapped color table, and return its index in that table. */\r\n public remap(vertex: Uint32Array, usesUnquantizedPositions: boolean | undefined): void {\r\n const vertIndex = usesUnquantizedPositions ? 4 : 1;\r\n const shortIndex = usesUnquantizedPositions ? 0 : 1;\r\n this._32[0] = vertex[vertIndex];\r\n const oldIndex = this._16[shortIndex];\r\n let newIndex = this._remappedIndices.get(oldIndex);\r\n if (undefined === newIndex) {\r\n newIndex = this.colors.length;\r\n this._remappedIndices.set(oldIndex, newIndex);\r\n const color = this._colorTable[oldIndex];\r\n this.colors.push(color);\r\n }\r\n\r\n this._16[shortIndex] = newIndex;\r\n vertex[vertIndex] = this._32[0];\r\n }\r\n\r\n /** Construct the finished color table. */\r\n public buildColorTable(): ColorTable {\r\n assert(this.colors.length > 0);\r\n return this.colors.length > 1 ? new Uint32Array(this.colors) : ColorDef.fromAbgr(this.colors[0]);\r\n }\r\n}\r\n\r\ntype MaterialAtlasTable = Uint32Array | SurfaceMaterial | undefined;\r\n\r\nclass MaterialAtlasRemapper {\r\n private readonly _remappedIndices = new Map<number, number>();\r\n private readonly _atlasTable: Uint32Array;\r\n public readonly materials: number[] = [];\r\n private readonly _32 = new Uint32Array(1);\r\n private readonly _8 = new Uint8Array(this._32.buffer);\r\n\r\n public constructor(_atlasTable: Uint32Array) {\r\n this._atlasTable = _atlasTable;\r\n }\r\n\r\n /** Extract the mat index stored in `vertex`, ensure it is present in the remapped atlas table, and return its index in that table. */\r\n public remap(vertex: Uint32Array, usesUnquantizedPositions: boolean | undefined): void {\r\n const vertIndex = usesUnquantizedPositions ? 3 : 2;\r\n this._32[0] = vertex[vertIndex];\r\n const oldIndex = this._8[3];\r\n let newIndex = this._remappedIndices.get(oldIndex);\r\n if (undefined === newIndex) {\r\n newIndex = this.materials.length / 4;\r\n this._remappedIndices.set(oldIndex, newIndex);\r\n let index = oldIndex * 4;\r\n this.materials.push(this._atlasTable[index++]);\r\n this.materials.push(this._atlasTable[index++]);\r\n this.materials.push(this._atlasTable[index++]);\r\n this.materials.push(this._atlasTable[index]);\r\n }\r\n\r\n this._8[3] = newIndex;\r\n vertex[vertIndex] = this._32[0];\r\n }\r\n\r\n private unpackFloat(value: number): number {\r\n this._32[0] = value;\r\n const valUint32 = this._32[0];\r\n const bias = 38.0;\r\n const temp = (valUint32 >>> 24) / 2.0;\r\n let exponent = Math.floor(temp);\r\n let sign = (temp - exponent) * 2.0;\r\n sign = -(sign * 2.0 - 1.0);\r\n const base = sign * (valUint32 & 0xffffff) / 16777216.0;\r\n exponent = exponent - bias;\r\n return base * Math.pow(10.0, exponent);\r\n }\r\n\r\n private materialFromAtlasEntry(entry: Uint32Array): SurfaceMaterial | undefined {\r\n const rgbOverridden = (entry[1] & 0x1000000) !== 0;\r\n const alphaOverridden = (entry[1] & 0x2000000) !== 0;\r\n const args: CreateRenderMaterialArgs = {\r\n alpha: alphaOverridden ? (entry[0] >>> 24) / 255.0 : undefined,\r\n diffuse: {\r\n color: rgbOverridden ? ColorDef.fromTbgr(entry[0] & 0xffffff) : undefined,\r\n weight: (entry[1] >>> 8) / 255.0,\r\n },\r\n specular: {\r\n color: ColorDef.fromTbgr(entry[2]),\r\n weight: ((entry[1] >>> 16) & 0xff) / 255.0,\r\n exponent: this.unpackFloat(entry[3]),\r\n },\r\n };\r\n const material = IModelApp.renderSystem.createRenderMaterial(args);\r\n return createSurfaceMaterial(material);\r\n }\r\n\r\n /** Construct the finished color table. */\r\n public buildAtlasTable(): MaterialAtlasTable {\r\n assert(this.materials.length > 0);\r\n const m = new Uint32Array(this.materials);\r\n return this.materials.length > 4 ? m : this.materialFromAtlasEntry(m);\r\n }\r\n}\r\n\r\n/** A node in a split vertex table. Each node corresponds to one or more elements. */\r\nclass Node {\r\n public readonly vertices: VertexBuffer;\r\n public readonly remappedIndices = new Map<number, number>();\r\n public readonly indices = new IndexBuffer();\r\n public readonly colors?: ColorTableRemapper;\r\n public readonly atlas?: MaterialAtlasRemapper;\r\n public readonly usesUnquantizedPositions?: boolean;\r\n\r\n /** `vertexTable` is the source table containing vertex data for all nodes, from which this node will extract the vertices belong to it. */\r\n public constructor(vertexTable: VertexTable, numColorsPrecedingAtlas: number | undefined) {\r\n this.vertices = new VertexBuffer(vertexTable);\r\n if (undefined === vertexTable.uniformColor)\r\n this.colors = new ColorTableRemapper(new Uint32Array(vertexTable.data.buffer, vertexTable.data.byteOffset + 4 * vertexTable.numVertices * vertexTable.numRgbaPerVertex));\r\n\r\n if (undefined !== numColorsPrecedingAtlas) {\r\n const atlasOffset = (vertexTable.numVertices * vertexTable.numRgbaPerVertex + numColorsPrecedingAtlas) * 4;\r\n this.atlas = new MaterialAtlasRemapper(new Uint32Array(vertexTable.data.buffer, vertexTable.data.byteOffset + atlasOffset));\r\n }\r\n\r\n this.usesUnquantizedPositions = vertexTable.usesUnquantizedPositions;\r\n }\r\n\r\n public addVertex(originalIndex: number, vertex: Uint32Array): void {\r\n let newIndex = this.remappedIndices.get(originalIndex);\r\n if (undefined === newIndex) {\r\n newIndex = this.vertices.length;\r\n this.remappedIndices.set(originalIndex, newIndex);\r\n\r\n this.colors?.remap(vertex, this.usesUnquantizedPositions);\r\n this.atlas?.remap(vertex, this.usesUnquantizedPositions);\r\n this.vertices.push(vertex);\r\n }\r\n\r\n this.indices.push(newIndex);\r\n }\r\n\r\n public buildOutput(maxDimension: number): VertexTableWithIndices {\r\n const materialAtlas = this.atlas?.buildAtlasTable();\r\n const material: SurfaceMaterial | undefined = (materialAtlas instanceof Uint32Array) ? undefined : materialAtlas;\r\n return {\r\n indices: this.indices.toVertexIndices(),\r\n vertices: this.vertices.buildVertexTable(maxDimension, this.colors?.buildColorTable(), materialAtlas),\r\n material,\r\n };\r\n }\r\n}\r\n\r\ninterface VertexTableSplitArgs extends VertexTableWithIndices {\r\n featureTable: PackedFeatureTable;\r\n atlasOffset?: number;\r\n}\r\n\r\nclass VertexTableSplitter {\r\n private readonly _input: VertexTableSplitArgs;\r\n private readonly _computeNodeId: ComputeNodeId;\r\n private readonly _nodes = new Map<number, Node>();\r\n\r\n private constructor(input: VertexTableSplitArgs, computeNodeId: ComputeNodeId) {\r\n this._input = input;\r\n this._computeNodeId = computeNodeId;\r\n }\r\n\r\n /** Split the source into one or more output nodes, returning a mapping of integer node Id to node. */\r\n public static split(source: VertexTableSplitArgs, computeNodeId: ComputeNodeId): Map<number, Node> {\r\n const splitter = new VertexTableSplitter(source, computeNodeId);\r\n splitter.split();\r\n return splitter._nodes;\r\n }\r\n\r\n private split(): void {\r\n // Track the most recent feature and corresponding node to avoid repeated lookups - vertices for\r\n // individual features are largely contiguous.\r\n const curState = {\r\n featureIndex: -1,\r\n node: undefined as unknown as Node,\r\n };\r\n\r\n const vertSize = this._input.vertices.numRgbaPerVertex;\r\n const vertex = new Uint32Array(vertSize);\r\n const vertexTable = new Uint32Array(this._input.vertices.data.buffer, this._input.vertices.data.byteOffset, this._input.vertices.numVertices * vertSize);\r\n\r\n const elemIdPair = { lower: 0, upper: 0 };\r\n for (const index of this._input.indices) {\r\n // Extract the data for this vertex without allocating new typed arrays.\r\n const vertexOffset = index * vertSize;\r\n for (let i = 0; i < vertex.length; i++)\r\n vertex[i] = vertexTable[vertexOffset + i];\r\n\r\n // Determine to which element the vertex belongs and find the corresponding Node.\r\n const featureIndex = vertex[2] & 0x00ffffff;\r\n if (curState.featureIndex !== featureIndex) {\r\n curState.featureIndex = featureIndex;\r\n this._input.featureTable.getElementIdPair(featureIndex, elemIdPair);\r\n const nodeId = this._computeNodeId(elemIdPair, featureIndex);\r\n let node = this._nodes.get(nodeId);\r\n if (undefined === node)\r\n this._nodes.set(nodeId, node = new Node(this._input.vertices, this._input.atlasOffset));\r\n\r\n curState.node = node;\r\n }\r\n\r\n // Add the vertex to the appropriate node.\r\n curState.node.addVertex(index, vertex);\r\n }\r\n }\r\n}\r\n\r\nexport interface SplitVertexTableArgs {\r\n featureTable: PackedFeatureTable;\r\n maxDimension: number;\r\n computeNodeId: ComputeNodeId;\r\n}\r\n\r\nexport interface SplitPointStringArgs extends SplitVertexTableArgs {\r\n params: PointStringParams;\r\n}\r\n\r\n/** Given a PointStringParams and a function that can associate a node Id with an element Id, produce a mapping of nodes to PointStringParams, splitting up\r\n * the input params as needed.\r\n * @internal\r\n */\r\nexport function splitPointStringParams(args: SplitPointStringArgs): Map<number, PointStringParams> {\r\n const nodes = VertexTableSplitter.split({\r\n indices: args.params.indices,\r\n vertices: args.params.vertices,\r\n featureTable: args.featureTable,\r\n }, args.computeNodeId);\r\n\r\n const result = new Map<number, PointStringParams>();\r\n for (const [id, node] of nodes) {\r\n const { vertices, indices } = node.buildOutput(args.maxDimension);\r\n result.set(id, new PointStringParams(vertices, indices, args.params.weight));\r\n }\r\n\r\n return result;\r\n}\r\n\r\ninterface RemappedSegmentEdges {\r\n indices: IndexBuffer;\r\n endPointAndQuadIndices: Uint32ArrayBuilder;\r\n}\r\n\r\ninterface RemappedSilhouetteEdges extends RemappedSegmentEdges {\r\n normalPairs: Uint32ArrayBuilder;\r\n}\r\n\r\nclass RemappedPolylineEdges {\r\n public readonly indices = new IndexBuffer();\r\n public readonly prevIndices = new IndexBuffer();\r\n public readonly nextIndicesAndParams = new Uint32ArrayBuilder();\r\n}\r\n\r\ninterface RemappedIndexEdges {\r\n edges: Uint8ArrayBuilder;\r\n silhouettes: Uint8ArrayBuilder;\r\n}\r\n\r\ninterface RemappedEdges {\r\n segments?: RemappedSegmentEdges;\r\n silhouettes?: RemappedSilhouetteEdges;\r\n polylines?: RemappedPolylineEdges;\r\n indexed?: RemappedIndexEdges;\r\n}\r\n\r\ninterface RemappedIndex {\r\n node: Node;\r\n id: number;\r\n index: number;\r\n}\r\n\r\nfunction remapIndex(out: RemappedIndex, srcIndex: number, nodes: Map<number, Node>): boolean {\r\n for (const [id, node] of nodes) {\r\n const index = node.remappedIndices.get(srcIndex);\r\n if (undefined !== index) {\r\n out.index = index;\r\n out.node = node;\r\n out.id = id;\r\n return true;\r\n }\r\n }\r\n\r\n assert(false);\r\n return false;\r\n}\r\n\r\nfunction remapSegmentEdges(type: \"segments\" | \"silhouettes\", source: EdgeParams, nodes: Map<number, Node>, edges: Map<number, RemappedEdges>): void {\r\n const src = source[type];\r\n if (!src)\r\n return;\r\n\r\n const srcEndPts = new Uint32Array(src.endPointAndQuadIndices.buffer, src.endPointAndQuadIndices.byteOffset, src.endPointAndQuadIndices.length / 4);\r\n let srcNormalPairs;\r\n if (type === \"silhouettes\") {\r\n assert(undefined !== source.silhouettes);\r\n srcNormalPairs = new Uint32Array(source.silhouettes.normalPairs.buffer, source.silhouettes.normalPairs.byteOffset, source.silhouettes.normalPairs.length / 4);\r\n }\r\n\r\n let curIndexIndex = 0;\r\n const remappedIndex = { } as unknown as RemappedIndex;\r\n for (const srcIndex of src.indices) {\r\n if (remapIndex(remappedIndex, srcIndex, nodes)) {\r\n let endPointAndQuad = srcEndPts[curIndexIndex];\r\n const otherIndex = (endPointAndQuad & 0x00ffffff) >>> 0;\r\n const newOtherIndex = remappedIndex.node.remappedIndices.get(otherIndex);\r\n assert(undefined !== newOtherIndex);\r\n endPointAndQuad = (endPointAndQuad & 0xff000000) | newOtherIndex;\r\n\r\n let entry = edges.get(remappedIndex.id);\r\n if (!entry)\r\n edges.set(remappedIndex.id, entry = { });\r\n\r\n if (srcNormalPairs) {\r\n if (!entry.silhouettes)\r\n entry.silhouettes = { indices: new IndexBuffer(), endPointAndQuadIndices: new Uint32ArrayBuilder(), normalPairs: new Uint32ArrayBuilder() };\r\n\r\n entry.silhouettes.normalPairs.push(srcNormalPairs[curIndexIndex]);\r\n } else if (!entry.segments) {\r\n entry.segments = { indices: new IndexBuffer(), endPointAndQuadIndices: new Uint32ArrayBuilder() };\r\n }\r\n\r\n const segments = entry[type];\r\n assert(undefined !== segments);\r\n\r\n segments.indices.push(remappedIndex.index);\r\n segments.endPointAndQuadIndices.push(endPointAndQuad);\r\n }\r\n\r\n ++curIndexIndex;\r\n }\r\n}\r\n\r\nfunction remapPolylineEdges(src: TesselatedPolyline, nodes: Map<number, Node>, edges: Map<number, RemappedEdges>): void {\r\n const srcNextAndParam = new Uint32Array(src.nextIndicesAndParams.buffer, src.nextIndicesAndParams.byteOffset, src.nextIndicesAndParams.length / 4);\r\n const prevIter = src.prevIndices[Symbol.iterator]();\r\n let curIndexIndex = 0;\r\n const remappedIndex = { } as unknown as RemappedIndex;\r\n for (const srcIndex of src.indices) {\r\n if (remapIndex(remappedIndex, srcIndex, nodes)) {\r\n const prevIndex = prevIter.next().value;\r\n assert(undefined !== prevIndex);\r\n const newPrevIndex = remappedIndex.node.remappedIndices.get(prevIndex);\r\n assert(undefined !== newPrevIndex);\r\n\r\n let nextAndParam = srcNextAndParam[curIndexIndex];\r\n const nextIndex = (nextAndParam & 0x00ffffff) >>> 0;\r\n const newNextIndex = remappedIndex.node.remappedIndices.get(nextIndex);\r\n assert(undefined !== newNextIndex);\r\n nextAndParam = (nextAndParam & 0xff000000) | newNextIndex;\r\n\r\n let entry = edges.get(remappedIndex.id);\r\n if (!entry)\r\n edges.set(remappedIndex.id, entry = { });\r\n\r\n if (!entry.polylines)\r\n entry.polylines = new RemappedPolylineEdges();\r\n\r\n entry.polylines.indices.push(remappedIndex.index);\r\n entry.polylines.prevIndices.push(newPrevIndex);\r\n entry.polylines.nextIndicesAndParams.push(nextAndParam);\r\n }\r\n\r\n ++curIndexIndex;\r\n }\r\n}\r\n\r\nfunction remapIndexedEdges(src: IndexedEdgeParams, nodes: Map<number, Node>, edges: Map<number, RemappedEdges>): void {\r\n const srcEdgeData = src.edges.data;\r\n const numSegments = src.edges.numSegments;\r\n const silhouetteStartByteIndex = numSegments * 6 + src.edges.silhouettePadding;\r\n\r\n function getUint24EdgePair(byteIndex: number): [number, number] {\r\n return [srcEdgeData[byteIndex + 0] | (srcEdgeData[byteIndex + 1] << 8) | srcEdgeData[byteIndex + 2] << 16,\r\n srcEdgeData[byteIndex + 3] | (srcEdgeData[byteIndex + 4] << 8) | srcEdgeData[byteIndex + 5] << 16];\r\n }\r\n\r\n function setUint24EdgePair(indEdges: RemappedIndexEdges, value1: number, value2: number): void {\r\n indEdges.edges.push(value1 & 0x0000ff);\r\n indEdges.edges.push((value1 & 0x00ff00) >>> 8);\r\n indEdges.edges.push((value1 & 0xff0000) >>> 16);\r\n indEdges.edges.push(value2 & 0x0000ff);\r\n indEdges.edges.push((value2 & 0x00ff00) >>> 8);\r\n indEdges.edges.push((value2 & 0xff0000) >>> 16);\r\n }\r\n\r\n function getUint24SilPair(byteIndex: number): [number, number, number, number] {\r\n return [srcEdgeData[byteIndex + 0] | (srcEdgeData[byteIndex + 1] << 8) | srcEdgeData[byteIndex + 2] << 16,\r\n srcEdgeData[byteIndex + 3] | (srcEdgeData[byteIndex + 4] << 8) | srcEdgeData[byteIndex + 5] << 16,\r\n srcEdgeData[byteIndex + 6] | (srcEdgeData[byteIndex + 7] << 8), srcEdgeData[byteIndex + 8] | (srcEdgeData[byteIndex + 9] << 8)];\r\n }\r\n\r\n function setUint24SilPair(indSil: RemappedIndexEdges, value1: number, value2: number, norm1: number, norm2: number): void {\r\n indSil.silhouettes.push(value1 & 0x0000ff);\r\n indSil.silhouettes.push((value1 & 0x00ff00) >>> 8);\r\n indSil.silhouettes.push((value1 & 0xff0000) >>> 16);\r\n indSil.silhouettes.push(value2 & 0x0000ff);\r\n indSil.silhouettes.push((value2 & 0x00ff00) >>> 8);\r\n indSil.silhouettes.push((value2 & 0xff0000) >>> 16);\r\n indSil.silhouettes.push(norm1 & 0x0000ff);\r\n indSil.silhouettes.push((norm1 & 0x00ff00) >>> 8);\r\n indSil.silhouettes.push(norm2 & 0x0000ff);\r\n indSil.silhouettes.push((norm2 & 0x00ff00) >>> 8);\r\n }\r\n\r\n let maxIndex = 0;\r\n for (const srcIndex of src.indices)\r\n maxIndex = Math.max (srcIndex, maxIndex);\r\n\r\n const remappedIndex = { } as unknown as RemappedIndex;\r\n let es1Index = 0, es2Index = 0, n1 = 0, n2 = 0;\r\n for (let curSegment = 0, byteIndex = 0; curSegment <= maxIndex; ++curSegment) {\r\n if (curSegment < numSegments) { // edges\r\n [es1Index, es2Index] = getUint24EdgePair(byteIndex);\r\n byteIndex += 6;\r\n } else { // silhouettes\r\n byteIndex = silhouetteStartByteIndex + (curSegment - numSegments) * 10;\r\n [es1Index, es2Index, n1, n2] = getUint24SilPair(byteIndex);\r\n }\r\n\r\n if (remapIndex(remappedIndex, es1Index, nodes)) {\r\n let entry = edges.get(remappedIndex.id);\r\n if (!entry)\r\n edges.set(remappedIndex.id, entry = { });\r\n\r\n if (!entry.indexed)\r\n entry.indexed = { edges: new Uint8ArrayBuilder(), silhouettes: new Uint8ArrayBuilder() };\r\n\r\n if (curSegment < numSegments) { // edges\r\n const newE1Index = remappedIndex.node.remappedIndices.get(es1Index);\r\n assert(undefined !== newE1Index);\r\n const newE2Index = remappedIndex.node.remappedIndices.get(es2Index);\r\n assert(undefined !== newE2Index);\r\n setUint24EdgePair(entry.indexed, newE1Index, newE2Index);\r\n } else { // silhouettes\r\n const newS1Index = remappedIndex.node.remappedIndices.get(es1Index);\r\n assert(undefined !== newS1Index);\r\n const newS2Index = remappedIndex.node.remappedIndices.get(es2Index);\r\n assert(undefined !== newS2Index);\r\n setUint24SilPair(entry.indexed, newS1Index, newS2Index, n1, n2);\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction splitEdges(source: EdgeParams, nodes: Map<number, Node>): Map<number, EdgeParams> {\r\n const edges = new Map<number, RemappedEdges>();\r\n remapSegmentEdges(\"segments\", source, nodes, edges);\r\n remapSegmentEdges(\"silhouettes\", source, nodes, edges);\r\n\r\n if (source.polylines)\r\n remapPolylineEdges(source.polylines, nodes, edges);\r\n\r\n if (source.indexed)\r\n remapIndexedEdges(source.indexed, nodes, edges);\r\n\r\n const result = new Map<number, EdgeParams>();\r\n for (const [id, remappedEdges] of edges) {\r\n if (!remappedEdges.segments && !remappedEdges.silhouettes && !remappedEdges.indexed)\r\n continue;\r\n\r\n let edgeTable = { } as unknown as EdgeTable;\r\n let edgeIndices = { } as unknown as VertexIndices;\r\n if (remappedEdges.indexed) {\r\n const numSegmentEdges = remappedEdges.indexed.edges.length / 6;\r\n const numSilhouettes = remappedEdges.indexed.silhouettes.length / 10;\r\n const { width, height, silhouettePadding, silhouetteStartByteIndex } = calculateEdgeTableParams(numSegmentEdges, numSilhouettes, IModelApp.renderSystem.maxTextureSize);\r\n const data = new Uint8Array(width * height * 4);\r\n data.set(remappedEdges.indexed.edges.toTypedArray(), 0);\r\n if (numSilhouettes > 0)\r\n data.set(remappedEdges.indexed.silhouettes.toTypedArray(), silhouetteStartByteIndex + silhouettePadding);\r\n\r\n const numTotalEdges = numSegmentEdges + numSilhouettes;\r\n edgeIndices = new VertexIndices(new Uint8Array(numTotalEdges * 6 * 3));\r\n for (let i = 0; i < numTotalEdges; i++)\r\n for (let j = 0; j < 6; j++)\r\n edgeIndices.setNthIndex(i * 6 + j, i);\r\n\r\n edgeTable = {\r\n data,\r\n width,\r\n height,\r\n numSegments: numSegmentEdges,\r\n silhouettePadding,\r\n };\r\n }\r\n\r\n result.set(id, {\r\n weight: source.weight,\r\n linePixels: source.linePixels,\r\n segments: remappedEdges.segments ? {\r\n indices: remappedEdges.segments.indices.toVertexIndices(),\r\n endPointAndQuadIndices: remappedEdges.segments.endPointAndQuadIndices.toUint8Array(),\r\n } : undefined,\r\n silhouettes: remappedEdges.silhouettes ? {\r\n indices: remappedEdges.silhouettes.indices.toVertexIndices(),\r\n endPointAndQuadIndices: remappedEdges.silhouettes.endPointAndQuadIndices.toUint8Array(),\r\n normalPairs: remappedEdges.silhouettes.normalPairs.toUint8Array(),\r\n } : undefined,\r\n polylines: remappedEdges.polylines ? {\r\n indices: remappedEdges.polylines.indices.toVertexIndices(),\r\n prevIndices: remappedEdges.polylines.prevIndices.toVertexIndices(),\r\n nextIndicesAndParams: remappedEdges.polylines.nextIndicesAndParams.toUint8Array(),\r\n } : undefined,\r\n indexed: remappedEdges.indexed ? {\r\n indices: edgeIndices,\r\n edges: edgeTable,\r\n } : undefined,\r\n });\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport interface SplitMeshArgs extends SplitVertexTableArgs {\r\n params: MeshParams;\r\n}\r\n\r\nexport function splitMeshParams(args: SplitMeshArgs): Map<number, MeshParams> {\r\n const result = new Map<number, MeshParams>();\r\n\r\n const mat = args.params.surface.material;\r\n const atlasOffset = undefined !== mat && mat.isAtlas ? mat.vertexTableOffset : undefined;\r\n\r\n const nodes = VertexTableSplitter.split({\r\n indices: args.params.surface.indices,\r\n vertices: args.params.vertices,\r\n featureTable: args.featureTable,\r\n atlasOffset,\r\n }, args.computeNodeId);\r\n\r\n const edges = args.params.edges ? splitEdges(args.params.edges, nodes) : undefined;\r\n\r\n for (const [id, node] of nodes) {\r\n const { vertices, indices, material } = node.buildOutput(args.maxDimension);\r\n const params = new MeshParams(\r\n vertices, {\r\n type: args.params.surface.type,\r\n indices,\r\n fillFlags: args.params.surface.fillFlags,\r\n hasBakedLighting: args.params.surface.hasBakedLighting,\r\n textureMapping: args.params.surface.textureMapping,\r\n material: material !== undefined ? material : args.params.surface.material,\r\n },\r\n edges?.get(id),\r\n args.params.isPlanar,\r\n // ###TODO handle aux channels.......\r\n args.params.auxChannels,\r\n );\r\n\r\n result.set(id, params);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport interface SplitPolylineArgs extends SplitVertexTableArgs {\r\n params: PolylineParams;\r\n}\r\n\r\ninterface PolylineNode extends Node {\r\n prevIndices?: IndexBuffer;\r\n nextIndicesAndParams?: Uint32ArrayBuilder;\r\n}\r\n\r\nexport function splitPolylineParams(args: SplitPolylineArgs): Map<number, PolylineParams> {\r\n const nodes = VertexTableSplitter.split({\r\n indices: args.params.polyline.indices,\r\n vertices: args.params.vertices,\r\n featureTable: args.featureTable,\r\n }, args.computeNodeId) as Map<number, PolylineNode>;\r\n\r\n const src = args.params.polyline;\r\n const srcNextAndParam = new Uint32Array(src.nextIndicesAndParams.buffer, src.nextIndicesAndParams.byteOffset, src.nextIndicesAndParams.length / 4);\r\n let curIndexIndex = 0;\r\n const remappedIndex = { } as unknown as RemappedIndex;\r\n for (const prevIndex of src.prevIndices) {\r\n if (remapIndex(remappedIndex, prevIndex, nodes)) {\r\n const node = remappedIndex.node as PolylineNode;\r\n if (!node.prevIndices) {\r\n assert(undefined === node.nextIndicesAndParams);\r\n node.prevIndices = new IndexBuffer(node.indices.numIndices);\r\n node.nextIndicesAndParams = new Uint32ArrayBuilder({ initialCapacity: node.indices.numIndices });\r\n } else {\r\n assert(undefined !== node.nextIndicesAndParams);\r\n }\r\n\r\n node.prevIndices.push(remappedIndex.index);\r\n\r\n let nextAndParam = srcNextAndParam[curIndexIndex];\r\n const nextIndex = (nextAndParam & 0x00ffffff) >>> 0;\r\n const newNextIndex = remappedIndex.node.remappedIndices.get(nextIndex);\r\n assert(undefined !== newNextIndex);\r\n nextAndParam = (nextAndParam & 0xff000000) | newNextIndex;\r\n node.nextIndicesAndParams.push(nextAndParam);\r\n }\r\n\r\n ++curIndexIndex;\r\n }\r\n\r\n const result = new Map<number, PolylineParams>();\r\n for (const [id, node] of nodes) {\r\n assert(undefined !== node.prevIndices && undefined !== node.nextIndicesAndParams);\r\n const { vertices, indices } = node.buildOutput(args.maxDimension);\r\n const params = new PolylineParams(\r\n vertices, {\r\n indices,\r\n prevIndices: node.prevIndices.toVertexIndices(),\r\n nextIndicesAndParams: node.nextIndicesAndParams.toUint8Array(),\r\n },\r\n args.params.weight,\r\n args.params.linePixels,\r\n args.params.isPlanar,\r\n args.params.type);\r\n\r\n result.set(id, params);\r\n }\r\n\r\n return result;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GeometryAccumulator.js","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryAccumulator.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 { IndexedPolyface, Loop, Path, Point3d, Range3d, SolidPrimitive, Transform } from \"@itwin/core-geometry\";\nimport { AnalysisStyleDisplacement, Feature, QPoint3dList } from \"@itwin/core-common\";\nimport { GraphicBranch } from \"../../GraphicBranch\";\nimport { RenderGraphic } from \"../../RenderGraphic\";\nimport { RenderSystem } from \"../../RenderSystem\";\nimport { DisplayParams } from \"../DisplayParams\";\nimport { MeshBuilderMap } from \"../mesh/MeshBuilderMap\";\nimport { MeshList } from \"../mesh/MeshPrimitives\";\nimport { GeometryOptions } from \"../Primitives\";\nimport { GeometryList } from \"./GeometryList\";\nimport { Geometry, PrimitiveGeometryType } from \"./GeometryPrimitives\";\nimport { IModelApp } from \"../../../IModelApp\";\n\n/** @internal */\nexport class GeometryAccumulator {\n private _transform: Transform;\n private _surfacesOnly: boolean;\n private readonly _analysisDisplacement?: AnalysisStyleDisplacement;\n private readonly _viewIndependentOrigin?: Point3d;\n\n public readonly tileRange: Range3d;\n public readonly geometries: GeometryList = new GeometryList();\n public readonly system: RenderSystem;\n public currentFeature?: Feature;\n\n public get surfacesOnly(): boolean { return this._surfacesOnly; }\n public get transform(): Transform { return this._transform; }\n public get isEmpty(): boolean { return this.geometries.isEmpty; }\n public get haveTransform(): boolean { return !this._transform.isIdentity; }\n\n public constructor(options?: {\n system?: RenderSystem;\n surfacesOnly?: boolean;\n transform?: Transform;\n tileRange?: Range3d;\n analysisStyleDisplacement?: AnalysisStyleDisplacement;\n viewIndependentOrigin?: Point3d;\n feature?: Feature;\n }) {\n this.system = options?.system ?? IModelApp.renderSystem;\n this.tileRange = options?.tileRange ?? Range3d.createNull();\n this._surfacesOnly = true === options?.surfacesOnly;\n this._transform = options?.transform ?? Transform.createIdentity();\n this._analysisDisplacement = options?.analysisStyleDisplacement;\n this._viewIndependentOrigin = options?.viewIndependentOrigin;\n this.currentFeature = options?.feature;\n }\n\n private getPrimitiveRange(geom: PrimitiveGeometryType): Range3d | undefined {\n const range = new Range3d();\n geom.range(undefined, range);\n return range.isNull ? undefined : range;\n }\n\n private calculateTransform(transform: Transform, range: Range3d): Transform {\n if (this.haveTransform)\n transform = this._transform.multiplyTransformTransform(transform);\n\n transform.multiplyRange(range, range);\n return transform;\n }\n\n public addLoop(loop: Loop, displayParams: DisplayParams, transform: Transform, disjoint: boolean): boolean {\n const range = this.getPrimitiveRange(loop);\n if (!range)\n return false;\n\n const xform = this.calculateTransform(transform, range);\n return this.addGeometry(Geometry.createFromLoop(loop, xform, range, displayParams, disjoint, this.currentFeature));\n }\n\n public addLineString(pts: Point3d[], displayParams: DisplayParams, transform: Transform): boolean {\n // Do this.getPrimitiveRange() manually, so there is no need to create a PointString3d object just to find the range\n const range = Range3d.createNull();\n range.extendArray(pts, undefined);\n if (range.isNull)\n return false;\n\n const xform = this.calculateTransform(transform, range);\n return this.addGeometry(Geometry.createFromLineString(pts, xform, range, displayParams, this.currentFeature));\n }\n\n public addPointString(pts: Point3d[], displayParams: DisplayParams, transform: Transform): boolean {\n // Do this.getPrimitiveRange() manually, so there is no need to create a PointString3d object just to find the range\n const range = Range3d.createNull();\n range.extendArray(pts, undefined);\n if (range.isNull)\n return false;\n\n const xform = this.calculateTransform(transform, range);\n return this.addGeometry(Geometry.createFromPointString(pts, xform, range, displayParams, this.currentFeature));\n }\n\n public addPath(path: Path, displayParams: DisplayParams, transform: Transform, disjoint: boolean): boolean {\n const range = this.getPrimitiveRange(path);\n if (!range)\n return false;\n\n const xform = this.calculateTransform(transform, range);\n return this.addGeometry(Geometry.createFromPath(path, xform, range, displayParams, disjoint, this.currentFeature));\n }\n\n public addPolyface(pf: IndexedPolyface, displayParams: DisplayParams, transform: Transform): boolean {\n // Adjust the mesh range based on displacements applied to vertices by analysis style, if applicable.\n let range;\n if (this._analysisDisplacement) {\n const channel = pf.data.auxData?.channels.find((x) => x.name === this._analysisDisplacement!.channelName);\n const displacementRange = channel?.computeDisplacementRange(this._analysisDisplacement.scale);\n if (displacementRange && !displacementRange.isNull) {\n range = Range3d.createNull();\n const pt = new Point3d();\n for (let i = 0; i < pf.data.point.length; i++) {\n pf.data.point.getPoint3dAtUncheckedPointIndex(i, pt);\n range.extendXYZ(pt.x + displacementRange.low.x, pt.y + displacementRange.low.y, pt.z + displacementRange.low.z);\n range.extendXYZ(pt.x + displacementRange.high.x, pt.y + displacementRange.high.y, pt.z + displacementRange.high.z);\n }\n }\n }\n\n if (!range && !(range = this.getPrimitiveRange(pf)))\n return false;\n\n const xform = this.calculateTransform(transform, range);\n return this.addGeometry(Geometry.createFromPolyface(pf, xform, range, displayParams, this.currentFeature));\n }\n\n public addSolidPrimitive(primitive: SolidPrimitive, displayParams: DisplayParams, transform: Transform): boolean {\n const range = this.getPrimitiveRange(primitive);\n if (!range)\n return false;\n\n const xform = this.calculateTransform(transform, range);\n return this.addGeometry(Geometry.createFromSolidPrimitive(primitive, xform, range, displayParams, this.currentFeature));\n }\n\n public addGeometry(geom: Geometry): boolean {\n this.geometries.push(geom);\n return true;\n }\n\n public clear(): void { this.geometries.clear(); }\n\n /**\n * Generates a MeshBuilderMap\n * native: GeometryAccumulator::ToMeshBuilderMap(GeometryOptionsCR options, double tolerance, FeatureTableP featureTable, ViewContextR context) const\n * note : removed featureTable, ViewContext\n * @param tolerance should derive from Viewport.getPixelSizeAtPoint\n */\n public toMeshBuilderMap(options: GeometryOptions, tolerance: number, pickable: { modelId?: string } | undefined): MeshBuilderMap {\n const { geometries } = this; // declare internal dependencies\n\n const range = geometries.computeRange();\n const is2d = !range.isNull && range.isAlmostZeroZ;\n\n return MeshBuilderMap.createFromGeometries(geometries, tolerance, range, is2d, options, pickable);\n }\n\n public toMeshes(options: GeometryOptions, tolerance: number, pickable: { modelId?: string } | undefined): MeshList {\n if (this.geometries.isEmpty)\n return new MeshList();\n\n const builderMap = this.toMeshBuilderMap(options, tolerance, pickable);\n return builderMap.toMeshes();\n }\n\n /**\n * Populate a list of Graphic objects from the accumulated Geometry objects.\n * removed ViewContext\n */\n public saveToGraphicList(graphics: RenderGraphic[], options: GeometryOptions, tolerance: number, pickable: { modelId?: string } | undefined): MeshList | undefined {\n const meshes = this.toMeshes(options, tolerance, pickable);\n if (0 === meshes.length)\n return undefined;\n\n // If the meshes contain quantized positions, they are all quantized to the same range. If that range is small relative to the distance\n // from the origin, quantization errors can produce display artifacts. Remove the translation from the quantization parameters and apply\n // it in the transform instead.\n //\n // If the positions are not quantized, they have already been transformed to be relative to the center of the meshes' range.\n // Apply the inverse translation to put them back into model space.\n const branch = new GraphicBranch(true);\n let transformOrigin: Point3d | undefined;\n let meshesRangeOffset = false;\n\n for (const mesh of meshes) {\n const verts = mesh.points;\n if (branch.isEmpty) {\n if (verts instanceof QPoint3dList) {\n transformOrigin = verts.params.origin.clone();\n verts.params.origin.setZero();\n } else {\n transformOrigin = verts.range.center;\n // In this case we need to modify the qOrigin of the graphic that will get created later since we have translated the origin.\n // We can't modify it directly, but if we temporarily modify the range of the mesh used to create it the qOrigin will get created properly.\n // Range is shared (not cloned) by all meshes and the mesh list itself, so modifying the range of the meshlist will modify it for all meshes.\n // We will then later add this offset back to the range once all of the graphics have been created because it is needed unmodified for locate.\n if (!meshesRangeOffset) {\n meshes.range?.low.subtractInPlace(transformOrigin);\n meshes.range?.high.subtractInPlace(transformOrigin);\n meshesRangeOffset = true;\n }\n }\n } else {\n assert(undefined !== transformOrigin);\n if (verts instanceof QPoint3dList) {\n assert(transformOrigin.isAlmostEqual(verts.params.origin));\n verts.params.origin.setZero();\n } else {\n assert(verts.range.center.isAlmostZero);\n }\n }\n\n const graphic = mesh.getGraphics(this.system, this._viewIndependentOrigin);\n if (undefined !== graphic)\n branch.add(graphic);\n }\n\n if (!branch.isEmpty) {\n assert(undefined !== transformOrigin);\n const transform = Transform.createTranslation(transformOrigin);\n graphics.push(this.system.createBranch(branch, transform));\n if (meshesRangeOffset) { // restore the meshes range that we modified earlier.\n meshes.range?.low.addInPlace(transformOrigin);\n meshes.range?.high.addInPlace(transformOrigin);\n }\n }\n\n return meshes;\n }\n}\n"]}
1
+ {"version":3,"file":"GeometryAccumulator.js","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryAccumulator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { IndexedPolyface, Loop, Path, Point3d, Range3d, SolidPrimitive, Transform } from \"@itwin/core-geometry\";\r\nimport { AnalysisStyleDisplacement, Feature, QPoint3dList } from \"@itwin/core-common\";\r\nimport { GraphicBranch } from \"../../GraphicBranch\";\r\nimport { RenderGraphic } from \"../../RenderGraphic\";\r\nimport { RenderSystem } from \"../../RenderSystem\";\r\nimport { DisplayParams } from \"../DisplayParams\";\r\nimport { MeshBuilderMap } from \"../mesh/MeshBuilderMap\";\r\nimport { MeshList } from \"../mesh/MeshPrimitives\";\r\nimport { GeometryOptions } from \"../Primitives\";\r\nimport { GeometryList } from \"./GeometryList\";\r\nimport { Geometry, PrimitiveGeometryType } from \"./GeometryPrimitives\";\r\nimport { IModelApp } from \"../../../IModelApp\";\r\n\r\n/** @internal */\r\nexport class GeometryAccumulator {\r\n private _transform: Transform;\r\n private _surfacesOnly: boolean;\r\n private readonly _analysisDisplacement?: AnalysisStyleDisplacement;\r\n private readonly _viewIndependentOrigin?: Point3d;\r\n\r\n public readonly tileRange: Range3d;\r\n public readonly geometries: GeometryList = new GeometryList();\r\n public readonly system: RenderSystem;\r\n public currentFeature?: Feature;\r\n\r\n public get surfacesOnly(): boolean { return this._surfacesOnly; }\r\n public get transform(): Transform { return this._transform; }\r\n public get isEmpty(): boolean { return this.geometries.isEmpty; }\r\n public get haveTransform(): boolean { return !this._transform.isIdentity; }\r\n\r\n public constructor(options?: {\r\n system?: RenderSystem;\r\n surfacesOnly?: boolean;\r\n transform?: Transform;\r\n tileRange?: Range3d;\r\n analysisStyleDisplacement?: AnalysisStyleDisplacement;\r\n viewIndependentOrigin?: Point3d;\r\n feature?: Feature;\r\n }) {\r\n this.system = options?.system ?? IModelApp.renderSystem;\r\n this.tileRange = options?.tileRange ?? Range3d.createNull();\r\n this._surfacesOnly = true === options?.surfacesOnly;\r\n this._transform = options?.transform ?? Transform.createIdentity();\r\n this._analysisDisplacement = options?.analysisStyleDisplacement;\r\n this._viewIndependentOrigin = options?.viewIndependentOrigin;\r\n this.currentFeature = options?.feature;\r\n }\r\n\r\n private getPrimitiveRange(geom: PrimitiveGeometryType): Range3d | undefined {\r\n const range = new Range3d();\r\n geom.range(undefined, range);\r\n return range.isNull ? undefined : range;\r\n }\r\n\r\n private calculateTransform(transform: Transform, range: Range3d): Transform {\r\n if (this.haveTransform)\r\n transform = this._transform.multiplyTransformTransform(transform);\r\n\r\n transform.multiplyRange(range, range);\r\n return transform;\r\n }\r\n\r\n public addLoop(loop: Loop, displayParams: DisplayParams, transform: Transform, disjoint: boolean): boolean {\r\n const range = this.getPrimitiveRange(loop);\r\n if (!range)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromLoop(loop, xform, range, displayParams, disjoint, this.currentFeature));\r\n }\r\n\r\n public addLineString(pts: Point3d[], displayParams: DisplayParams, transform: Transform): boolean {\r\n // Do this.getPrimitiveRange() manually, so there is no need to create a PointString3d object just to find the range\r\n const range = Range3d.createNull();\r\n range.extendArray(pts, undefined);\r\n if (range.isNull)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromLineString(pts, xform, range, displayParams, this.currentFeature));\r\n }\r\n\r\n public addPointString(pts: Point3d[], displayParams: DisplayParams, transform: Transform): boolean {\r\n // Do this.getPrimitiveRange() manually, so there is no need to create a PointString3d object just to find the range\r\n const range = Range3d.createNull();\r\n range.extendArray(pts, undefined);\r\n if (range.isNull)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromPointString(pts, xform, range, displayParams, this.currentFeature));\r\n }\r\n\r\n public addPath(path: Path, displayParams: DisplayParams, transform: Transform, disjoint: boolean): boolean {\r\n const range = this.getPrimitiveRange(path);\r\n if (!range)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromPath(path, xform, range, displayParams, disjoint, this.currentFeature));\r\n }\r\n\r\n public addPolyface(pf: IndexedPolyface, displayParams: DisplayParams, transform: Transform): boolean {\r\n // Adjust the mesh range based on displacements applied to vertices by analysis style, if applicable.\r\n let range;\r\n if (this._analysisDisplacement) {\r\n const channel = pf.data.auxData?.channels.find((x) => x.name === this._analysisDisplacement!.channelName);\r\n const displacementRange = channel?.computeDisplacementRange(this._analysisDisplacement.scale);\r\n if (displacementRange && !displacementRange.isNull) {\r\n range = Range3d.createNull();\r\n const pt = new Point3d();\r\n for (let i = 0; i < pf.data.point.length; i++) {\r\n pf.data.point.getPoint3dAtUncheckedPointIndex(i, pt);\r\n range.extendXYZ(pt.x + displacementRange.low.x, pt.y + displacementRange.low.y, pt.z + displacementRange.low.z);\r\n range.extendXYZ(pt.x + displacementRange.high.x, pt.y + displacementRange.high.y, pt.z + displacementRange.high.z);\r\n }\r\n }\r\n }\r\n\r\n if (!range && !(range = this.getPrimitiveRange(pf)))\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromPolyface(pf, xform, range, displayParams, this.currentFeature));\r\n }\r\n\r\n public addSolidPrimitive(primitive: SolidPrimitive, displayParams: DisplayParams, transform: Transform): boolean {\r\n const range = this.getPrimitiveRange(primitive);\r\n if (!range)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromSolidPrimitive(primitive, xform, range, displayParams, this.currentFeature));\r\n }\r\n\r\n public addGeometry(geom: Geometry): boolean {\r\n this.geometries.push(geom);\r\n return true;\r\n }\r\n\r\n public clear(): void { this.geometries.clear(); }\r\n\r\n /**\r\n * Generates a MeshBuilderMap\r\n * native: GeometryAccumulator::ToMeshBuilderMap(GeometryOptionsCR options, double tolerance, FeatureTableP featureTable, ViewContextR context) const\r\n * note : removed featureTable, ViewContext\r\n * @param tolerance should derive from Viewport.getPixelSizeAtPoint\r\n */\r\n public toMeshBuilderMap(options: GeometryOptions, tolerance: number, pickable: { modelId?: string } | undefined): MeshBuilderMap {\r\n const { geometries } = this; // declare internal dependencies\r\n\r\n const range = geometries.computeRange();\r\n const is2d = !range.isNull && range.isAlmostZeroZ;\r\n\r\n return MeshBuilderMap.createFromGeometries(geometries, tolerance, range, is2d, options, pickable);\r\n }\r\n\r\n public toMeshes(options: GeometryOptions, tolerance: number, pickable: { modelId?: string } | undefined): MeshList {\r\n if (this.geometries.isEmpty)\r\n return new MeshList();\r\n\r\n const builderMap = this.toMeshBuilderMap(options, tolerance, pickable);\r\n return builderMap.toMeshes();\r\n }\r\n\r\n /**\r\n * Populate a list of Graphic objects from the accumulated Geometry objects.\r\n * removed ViewContext\r\n */\r\n public saveToGraphicList(graphics: RenderGraphic[], options: GeometryOptions, tolerance: number, pickable: { modelId?: string } | undefined): MeshList | undefined {\r\n const meshes = this.toMeshes(options, tolerance, pickable);\r\n if (0 === meshes.length)\r\n return undefined;\r\n\r\n // If the meshes contain quantized positions, they are all quantized to the same range. If that range is small relative to the distance\r\n // from the origin, quantization errors can produce display artifacts. Remove the translation from the quantization parameters and apply\r\n // it in the transform instead.\r\n //\r\n // If the positions are not quantized, they have already been transformed to be relative to the center of the meshes' range.\r\n // Apply the inverse translation to put them back into model space.\r\n const branch = new GraphicBranch(true);\r\n let transformOrigin: Point3d | undefined;\r\n let meshesRangeOffset = false;\r\n\r\n for (const mesh of meshes) {\r\n const verts = mesh.points;\r\n if (branch.isEmpty) {\r\n if (verts instanceof QPoint3dList) {\r\n transformOrigin = verts.params.origin.clone();\r\n verts.params.origin.setZero();\r\n } else {\r\n transformOrigin = verts.range.center;\r\n // In this case we need to modify the qOrigin of the graphic that will get created later since we have translated the origin.\r\n // We can't modify it directly, but if we temporarily modify the range of the mesh used to create it the qOrigin will get created properly.\r\n // Range is shared (not cloned) by all meshes and the mesh list itself, so modifying the range of the meshlist will modify it for all meshes.\r\n // We will then later add this offset back to the range once all of the graphics have been created because it is needed unmodified for locate.\r\n if (!meshesRangeOffset) {\r\n meshes.range?.low.subtractInPlace(transformOrigin);\r\n meshes.range?.high.subtractInPlace(transformOrigin);\r\n meshesRangeOffset = true;\r\n }\r\n }\r\n } else {\r\n assert(undefined !== transformOrigin);\r\n if (verts instanceof QPoint3dList) {\r\n assert(transformOrigin.isAlmostEqual(verts.params.origin));\r\n verts.params.origin.setZero();\r\n } else {\r\n assert(verts.range.center.isAlmostZero);\r\n }\r\n }\r\n\r\n const graphic = mesh.getGraphics(this.system, this._viewIndependentOrigin);\r\n if (undefined !== graphic)\r\n branch.add(graphic);\r\n }\r\n\r\n if (!branch.isEmpty) {\r\n assert(undefined !== transformOrigin);\r\n const transform = Transform.createTranslation(transformOrigin);\r\n graphics.push(this.system.createBranch(branch, transform));\r\n if (meshesRangeOffset) { // restore the meshes range that we modified earlier.\r\n meshes.range?.low.addInPlace(transformOrigin);\r\n meshes.range?.high.addInPlace(transformOrigin);\r\n }\r\n }\r\n\r\n return meshes;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GeometryList.js","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryList.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,gBAAgB;AAChB,MAAM,OAAO,YAAY;IAAzB;QACU,UAAK,GAAe,EAAE,CAAC;IA6BjC,CAAC;IA3BC,IAAW,KAAK,KAA2B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,IAAW,OAAO,KAAc,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;IACjE,IAAW,MAAM,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAElD,IAAI,CAAC,IAAc;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEM,MAAM,CAAC,GAAiB;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,KAAW,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAExC,YAAY;QACjB,MAAM,KAAK,GAAY,OAAO,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,CAAC,IAAc,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,yBAAyB,KAAgB,OAAO,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;IAE3F,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACvC,CAAC;CACF","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 { Range3d } from \"@itwin/core-geometry\";\nimport { QParams3d } from \"@itwin/core-common\";\nimport { Geometry } from \"./GeometryPrimitives\";\n\n/** @internal */\nexport class GeometryList {\n private _list: Geometry[] = [];\n\n public get first(): Geometry | undefined { return this._list[0]; }\n public get isEmpty(): boolean { return this._list.length === 0; }\n public get length(): number { return this._list.length; }\n\n public push(geom: Geometry): number {\n return this._list.push(geom);\n }\n\n public append(src: GeometryList): GeometryList {\n this._list.push(...src._list);\n return this;\n }\n\n public clear(): void { this._list.length = 0; }\n\n public computeRange(): Range3d {\n const range: Range3d = Range3d.createNull();\n const extendRange = (geom: Geometry) => range.extendRange(geom.tileRange);\n this._list.forEach(extendRange);\n return range;\n }\n\n public computeQuantizationParams(): QParams3d { return QParams3d.fromRange(this.computeRange()); }\n\n public [Symbol.iterator]() {\n return this._list[Symbol.iterator]();\n }\n}\n"]}
1
+ {"version":3,"file":"GeometryList.js","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryList.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAG/C,gBAAgB;AAChB,MAAM,OAAO,YAAY;IAAzB;QACU,UAAK,GAAe,EAAE,CAAC;IA6BjC,CAAC;IA3BC,IAAW,KAAK,KAA2B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,IAAW,OAAO,KAAc,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;IACjE,IAAW,MAAM,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAElD,IAAI,CAAC,IAAc;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAEM,MAAM,CAAC,GAAiB;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,KAAW,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAExC,YAAY;QACjB,MAAM,KAAK,GAAY,OAAO,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,WAAW,GAAG,CAAC,IAAc,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,yBAAyB,KAAgB,OAAO,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;IAE3F,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACvC,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { QParams3d } from \"@itwin/core-common\";\r\nimport { Geometry } from \"./GeometryPrimitives\";\r\n\r\n/** @internal */\r\nexport class GeometryList {\r\n private _list: Geometry[] = [];\r\n\r\n public get first(): Geometry | undefined { return this._list[0]; }\r\n public get isEmpty(): boolean { return this._list.length === 0; }\r\n public get length(): number { return this._list.length; }\r\n\r\n public push(geom: Geometry): number {\r\n return this._list.push(geom);\r\n }\r\n\r\n public append(src: GeometryList): GeometryList {\r\n this._list.push(...src._list);\r\n return this;\r\n }\r\n\r\n public clear(): void { this._list.length = 0; }\r\n\r\n public computeRange(): Range3d {\r\n const range: Range3d = Range3d.createNull();\r\n const extendRange = (geom: Geometry) => range.extendRange(geom.tileRange);\r\n this._list.forEach(extendRange);\r\n return range;\r\n }\r\n\r\n public computeQuantizationParams(): QParams3d { return QParams3d.fromRange(this.computeRange()); }\r\n\r\n public [Symbol.iterator]() {\r\n return this._list[Symbol.iterator]();\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GeometryListBuilder.js","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryListBuilder.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 {\n Arc3d, CurvePrimitive, IndexedPolyface, LineSegment3d, LineString3d, Loop, Path, Point2d, Point3d, Polyface, Range3d, SolidPrimitive, Transform,\n} from \"@itwin/core-geometry\";\nimport { Feature, FeatureTable, Gradient, GraphicParams, PackedFeatureTable, RenderTexture } from \"@itwin/core-common\";\nimport { CustomGraphicBuilderOptions, GraphicBuilder, ViewportGraphicBuilderOptions } from \"../../GraphicBuilder\";\nimport { RenderGraphic } from \"../../RenderGraphic\";\nimport { RenderSystem } from \"../../RenderSystem\";\nimport { DisplayParams } from \"../DisplayParams\";\nimport { GeometryOptions } from \"../Primitives\";\nimport { GeometryAccumulator } from \"./GeometryAccumulator\";\nimport { Geometry } from \"./GeometryPrimitives\";\nimport { MeshList } from \"../mesh/MeshPrimitives\";\n\nfunction copy2dTo3d(pts2d: Point2d[], depth: number): Point3d[] {\n const pts3d: Point3d[] = [];\n for (const point of pts2d)\n pts3d.push(Point3d.create(point.x, point.y, depth));\n return pts3d;\n}\n\n/** @internal */\nexport abstract class GeometryListBuilder extends GraphicBuilder {\n public accum: GeometryAccumulator;\n public readonly graphicParams: GraphicParams = new GraphicParams();\n\n public abstract finishGraphic(accum: GeometryAccumulator): RenderGraphic; // Invoked by Finish() to obtain the finished RenderGraphic.\n\n public constructor(system: RenderSystem, options: ViewportGraphicBuilderOptions | CustomGraphicBuilderOptions, accumulatorTransform = Transform.identity) {\n super(options);\n this.accum = new GeometryAccumulator({\n system,\n transform: accumulatorTransform,\n analysisStyleDisplacement: this.analysisStyle?.displacement,\n viewIndependentOrigin: options.viewIndependentOrigin,\n });\n\n if (this.pickable)\n this.activateFeature(new Feature(this.pickable.id, this.pickable.subCategoryId, this.pickable.geometryClass));\n }\n\n public finish(): RenderGraphic {\n const graphic = this.finishGraphic(this.accum);\n this.accum.clear();\n return graphic;\n }\n\n public activateGraphicParams(graphicParams: GraphicParams): void {\n graphicParams.clone(this.graphicParams);\n }\n\n protected override _activateFeature(feature: Feature): void {\n this.accum.currentFeature = feature;\n }\n\n public addArc2d(ellipse: Arc3d, isEllipse: boolean, filled: boolean, zDepth: number): void {\n if (0.0 === zDepth) {\n this.addArc(ellipse, isEllipse, filled);\n } else {\n const ell: Arc3d = ellipse;\n ell.center.z = zDepth;\n this.addArc(ell, isEllipse, filled);\n }\n }\n\n public addArc(ellipse: Arc3d, isEllipse: boolean, filled: boolean): void {\n let curve;\n if (isEllipse || filled) {\n curve = Loop.create(ellipse);\n } else {\n curve = Path.create(ellipse);\n }\n\n if (filled && !isEllipse && !ellipse.sweep.isFullCircle) {\n const gapSegment: CurvePrimitive = LineSegment3d.create(ellipse.startPoint(), ellipse.endPoint());\n (gapSegment as any).markerBits = 0x00010000; // Set the CURVE_PRIMITIVE_BIT_GapCurve marker bit\n curve.children.push(gapSegment);\n }\n const displayParams = curve.isAnyRegionType ? this.getMeshDisplayParams() : this.getLinearDisplayParams();\n if (curve instanceof Loop)\n this.accum.addLoop(curve, displayParams, this.placement, false);\n else\n this.accum.addPath(curve, displayParams, this.placement, false);\n }\n\n /** take ownership of input points and add as a line string to this builder */\n public addLineString(points: Point3d[]): void {\n if (2 === points.length && points[0].isAlmostEqual(points[1]))\n this.accum.addPointString(points, this.getLinearDisplayParams(), this.placement);\n else\n this.accum.addLineString(points, this.getLinearDisplayParams(), this.placement);\n }\n\n public addLineString2d(points: Point2d[], zDepth: number): void {\n const pts3d = copy2dTo3d(points, zDepth);\n this.addLineString(pts3d);\n }\n\n /** take ownership of input points and add as a point string to this builder */\n public addPointString(points: Point3d[]): void {\n this.accum.addPointString(points, this.getLinearDisplayParams(), this.placement);\n }\n\n public addPointString2d(points: Point2d[], zDepth: number): void {\n const pts3d = copy2dTo3d(points, zDepth);\n this.addPointString(pts3d);\n }\n\n public addShape(points: Point3d[]): void {\n const loop = Loop.create(LineString3d.create(points));\n this.accum.addLoop(loop, this.getMeshDisplayParams(), this.placement, false);\n }\n\n public addShape2d(points: Point2d[], zDepth: number): void {\n const pts3d = copy2dTo3d(points, zDepth);\n this.addShape(pts3d);\n }\n\n public addPath(path: Path): void {\n this.accum.addPath(path, this.getLinearDisplayParams(), this.placement, false);\n }\n\n public addLoop(loop: Loop): void {\n this.accum.addLoop(loop, this.getMeshDisplayParams(), this.placement, false);\n }\n\n public addPolyface(meshData: Polyface): void {\n this.accum.addPolyface(meshData as IndexedPolyface, this.getMeshDisplayParams(), this.placement);\n }\n\n public addSolidPrimitive(primitive: SolidPrimitive): void {\n this.accum.addSolidPrimitive(primitive, this.getMeshDisplayParams(), this.placement);\n }\n\n public getGraphicParams(): GraphicParams { return this.graphicParams; }\n\n public getDisplayParams(type: DisplayParams.Type): DisplayParams { return DisplayParams.createForType(type, this.graphicParams); }\n public getMeshDisplayParams(): DisplayParams { return DisplayParams.createForMesh(this.graphicParams, !this.wantNormals, (grad) => this.resolveGradient(grad)); }\n public getLinearDisplayParams(): DisplayParams { return DisplayParams.createForLinear(this.graphicParams); }\n public get textDisplayParams(): DisplayParams { return DisplayParams.createForText(this.graphicParams); }\n\n public get system(): RenderSystem { return this.accum.system; }\n\n public add(geom: Geometry): void { this.accum.addGeometry(geom); }\n\n private resolveGradient(gradient: Gradient.Symb): RenderTexture | undefined {\n return this.system.getGradientTexture(gradient, this.iModel);\n }\n}\n\n// Set to true to add a range box to every graphic produced by PrimitiveBuilder.\nlet addDebugRangeBox = false;\n\n/** @internal */\nexport class PrimitiveBuilder extends GeometryListBuilder {\n public primitives: RenderGraphic[] = [];\n\n public finishGraphic(accum: GeometryAccumulator): RenderGraphic {\n let meshes: MeshList | undefined;\n let range: Range3d | undefined;\n let featureTable: FeatureTable | undefined;\n if (!accum.isEmpty) {\n // Overlay decorations don't test Z. Tools like to layer multiple primitives on top of one another; they rely on the primitives rendering\n // in that same order to produce correct results (e.g., a thin line rendered atop a thick line of another color).\n // No point generating edges for graphics that are always rendered in smooth shade mode.\n const options = GeometryOptions.createForGraphicBuilder(this);\n const tolerance = this.computeTolerance(accum);\n meshes = accum.saveToGraphicList(this.primitives, options, tolerance, this.pickable);\n if (undefined !== meshes) {\n if (meshes.features?.anyDefined)\n featureTable = meshes.features;\n\n range = meshes.range;\n }\n }\n\n let graphic = (this.primitives.length !== 1) ? this.accum.system.createGraphicList(this.primitives) : this.primitives.pop() as RenderGraphic;\n if (undefined !== featureTable) {\n const batchRange = range ?? new Range3d();\n const batchOptions = this._options.pickable;\n graphic = this.accum.system.createBatch(graphic, PackedFeatureTable.pack(featureTable), batchRange, batchOptions);\n }\n\n if (addDebugRangeBox && range) {\n addDebugRangeBox = false;\n const builder = this.accum.system.createGraphic({ ...this._options });\n builder.addRangeBox(range);\n graphic = this.accum.system.createGraphicList([graphic, builder.finish()]);\n addDebugRangeBox = true;\n }\n\n return graphic;\n }\n\n public computeTolerance(accum: GeometryAccumulator): number {\n return this._computeChordTolerance({\n graphic: this,\n computeRange: () => accum.geometries.computeRange(),\n });\n }\n}\n"]}
1
+ {"version":3,"file":"GeometryListBuilder.js","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryListBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport {\r\n Arc3d, CurvePrimitive, IndexedPolyface, LineSegment3d, LineString3d, Loop, Path, Point2d, Point3d, Polyface, Range3d, SolidPrimitive, Transform,\r\n} from \"@itwin/core-geometry\";\r\nimport { Feature, FeatureTable, Gradient, GraphicParams, PackedFeatureTable, RenderTexture } from \"@itwin/core-common\";\r\nimport { CustomGraphicBuilderOptions, GraphicBuilder, ViewportGraphicBuilderOptions } from \"../../GraphicBuilder\";\r\nimport { RenderGraphic } from \"../../RenderGraphic\";\r\nimport { RenderSystem } from \"../../RenderSystem\";\r\nimport { DisplayParams } from \"../DisplayParams\";\r\nimport { GeometryOptions } from \"../Primitives\";\r\nimport { GeometryAccumulator } from \"./GeometryAccumulator\";\r\nimport { Geometry } from \"./GeometryPrimitives\";\r\nimport { MeshList } from \"../mesh/MeshPrimitives\";\r\n\r\nfunction copy2dTo3d(pts2d: Point2d[], depth: number): Point3d[] {\r\n const pts3d: Point3d[] = [];\r\n for (const point of pts2d)\r\n pts3d.push(Point3d.create(point.x, point.y, depth));\r\n return pts3d;\r\n}\r\n\r\n/** @internal */\r\nexport abstract class GeometryListBuilder extends GraphicBuilder {\r\n public accum: GeometryAccumulator;\r\n public readonly graphicParams: GraphicParams = new GraphicParams();\r\n\r\n public abstract finishGraphic(accum: GeometryAccumulator): RenderGraphic; // Invoked by Finish() to obtain the finished RenderGraphic.\r\n\r\n public constructor(system: RenderSystem, options: ViewportGraphicBuilderOptions | CustomGraphicBuilderOptions, accumulatorTransform = Transform.identity) {\r\n super(options);\r\n this.accum = new GeometryAccumulator({\r\n system,\r\n transform: accumulatorTransform,\r\n analysisStyleDisplacement: this.analysisStyle?.displacement,\r\n viewIndependentOrigin: options.viewIndependentOrigin,\r\n });\r\n\r\n if (this.pickable)\r\n this.activateFeature(new Feature(this.pickable.id, this.pickable.subCategoryId, this.pickable.geometryClass));\r\n }\r\n\r\n public finish(): RenderGraphic {\r\n const graphic = this.finishGraphic(this.accum);\r\n this.accum.clear();\r\n return graphic;\r\n }\r\n\r\n public activateGraphicParams(graphicParams: GraphicParams): void {\r\n graphicParams.clone(this.graphicParams);\r\n }\r\n\r\n protected override _activateFeature(feature: Feature): void {\r\n this.accum.currentFeature = feature;\r\n }\r\n\r\n public addArc2d(ellipse: Arc3d, isEllipse: boolean, filled: boolean, zDepth: number): void {\r\n if (0.0 === zDepth) {\r\n this.addArc(ellipse, isEllipse, filled);\r\n } else {\r\n const ell: Arc3d = ellipse;\r\n ell.center.z = zDepth;\r\n this.addArc(ell, isEllipse, filled);\r\n }\r\n }\r\n\r\n public addArc(ellipse: Arc3d, isEllipse: boolean, filled: boolean): void {\r\n let curve;\r\n if (isEllipse || filled) {\r\n curve = Loop.create(ellipse);\r\n } else {\r\n curve = Path.create(ellipse);\r\n }\r\n\r\n if (filled && !isEllipse && !ellipse.sweep.isFullCircle) {\r\n const gapSegment: CurvePrimitive = LineSegment3d.create(ellipse.startPoint(), ellipse.endPoint());\r\n (gapSegment as any).markerBits = 0x00010000; // Set the CURVE_PRIMITIVE_BIT_GapCurve marker bit\r\n curve.children.push(gapSegment);\r\n }\r\n const displayParams = curve.isAnyRegionType ? this.getMeshDisplayParams() : this.getLinearDisplayParams();\r\n if (curve instanceof Loop)\r\n this.accum.addLoop(curve, displayParams, this.placement, false);\r\n else\r\n this.accum.addPath(curve, displayParams, this.placement, false);\r\n }\r\n\r\n /** take ownership of input points and add as a line string to this builder */\r\n public addLineString(points: Point3d[]): void {\r\n if (2 === points.length && points[0].isAlmostEqual(points[1]))\r\n this.accum.addPointString(points, this.getLinearDisplayParams(), this.placement);\r\n else\r\n this.accum.addLineString(points, this.getLinearDisplayParams(), this.placement);\r\n }\r\n\r\n public addLineString2d(points: Point2d[], zDepth: number): void {\r\n const pts3d = copy2dTo3d(points, zDepth);\r\n this.addLineString(pts3d);\r\n }\r\n\r\n /** take ownership of input points and add as a point string to this builder */\r\n public addPointString(points: Point3d[]): void {\r\n this.accum.addPointString(points, this.getLinearDisplayParams(), this.placement);\r\n }\r\n\r\n public addPointString2d(points: Point2d[], zDepth: number): void {\r\n const pts3d = copy2dTo3d(points, zDepth);\r\n this.addPointString(pts3d);\r\n }\r\n\r\n public addShape(points: Point3d[]): void {\r\n const loop = Loop.create(LineString3d.create(points));\r\n this.accum.addLoop(loop, this.getMeshDisplayParams(), this.placement, false);\r\n }\r\n\r\n public addShape2d(points: Point2d[], zDepth: number): void {\r\n const pts3d = copy2dTo3d(points, zDepth);\r\n this.addShape(pts3d);\r\n }\r\n\r\n public addPath(path: Path): void {\r\n this.accum.addPath(path, this.getLinearDisplayParams(), this.placement, false);\r\n }\r\n\r\n public addLoop(loop: Loop): void {\r\n this.accum.addLoop(loop, this.getMeshDisplayParams(), this.placement, false);\r\n }\r\n\r\n public addPolyface(meshData: Polyface): void {\r\n this.accum.addPolyface(meshData as IndexedPolyface, this.getMeshDisplayParams(), this.placement);\r\n }\r\n\r\n public addSolidPrimitive(primitive: SolidPrimitive): void {\r\n this.accum.addSolidPrimitive(primitive, this.getMeshDisplayParams(), this.placement);\r\n }\r\n\r\n public getGraphicParams(): GraphicParams { return this.graphicParams; }\r\n\r\n public getDisplayParams(type: DisplayParams.Type): DisplayParams { return DisplayParams.createForType(type, this.graphicParams); }\r\n public getMeshDisplayParams(): DisplayParams { return DisplayParams.createForMesh(this.graphicParams, !this.wantNormals, (grad) => this.resolveGradient(grad)); }\r\n public getLinearDisplayParams(): DisplayParams { return DisplayParams.createForLinear(this.graphicParams); }\r\n public get textDisplayParams(): DisplayParams { return DisplayParams.createForText(this.graphicParams); }\r\n\r\n public get system(): RenderSystem { return this.accum.system; }\r\n\r\n public add(geom: Geometry): void { this.accum.addGeometry(geom); }\r\n\r\n private resolveGradient(gradient: Gradient.Symb): RenderTexture | undefined {\r\n return this.system.getGradientTexture(gradient, this.iModel);\r\n }\r\n}\r\n\r\n// Set to true to add a range box to every graphic produced by PrimitiveBuilder.\r\nlet addDebugRangeBox = false;\r\n\r\n/** @internal */\r\nexport class PrimitiveBuilder extends GeometryListBuilder {\r\n public primitives: RenderGraphic[] = [];\r\n\r\n public finishGraphic(accum: GeometryAccumulator): RenderGraphic {\r\n let meshes: MeshList | undefined;\r\n let range: Range3d | undefined;\r\n let featureTable: FeatureTable | undefined;\r\n if (!accum.isEmpty) {\r\n // Overlay decorations don't test Z. Tools like to layer multiple primitives on top of one another; they rely on the primitives rendering\r\n // in that same order to produce correct results (e.g., a thin line rendered atop a thick line of another color).\r\n // No point generating edges for graphics that are always rendered in smooth shade mode.\r\n const options = GeometryOptions.createForGraphicBuilder(this);\r\n const tolerance = this.computeTolerance(accum);\r\n meshes = accum.saveToGraphicList(this.primitives, options, tolerance, this.pickable);\r\n if (undefined !== meshes) {\r\n if (meshes.features?.anyDefined)\r\n featureTable = meshes.features;\r\n\r\n range = meshes.range;\r\n }\r\n }\r\n\r\n let graphic = (this.primitives.length !== 1) ? this.accum.system.createGraphicList(this.primitives) : this.primitives.pop() as RenderGraphic;\r\n if (undefined !== featureTable) {\r\n const batchRange = range ?? new Range3d();\r\n const batchOptions = this._options.pickable;\r\n graphic = this.accum.system.createBatch(graphic, PackedFeatureTable.pack(featureTable), batchRange, batchOptions);\r\n }\r\n\r\n if (addDebugRangeBox && range) {\r\n addDebugRangeBox = false;\r\n const builder = this.accum.system.createGraphic({ ...this._options });\r\n builder.addRangeBox(range);\r\n graphic = this.accum.system.createGraphicList([graphic, builder.finish()]);\r\n addDebugRangeBox = true;\r\n }\r\n\r\n return graphic;\r\n }\r\n\r\n public computeTolerance(accum: GeometryAccumulator): number {\r\n return this._computeChordTolerance({\r\n graphic: this,\r\n computeRange: () => accum.geometries.computeRange(),\r\n });\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GeometryPrimitives.js","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryPrimitives.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 {\n CurveChain, IndexedPolyface, Loop, Path, Point3d, PolyfaceBuilder, PolyfaceQuery, Range3d, SolidPrimitive, StrokeOptions, SweepContour, Transform,\n} from \"@itwin/core-geometry\";\nimport { Feature } from \"@itwin/core-common\";\nimport { DisplayParams } from \"../DisplayParams\";\nimport { PolyfacePrimitive, PolyfacePrimitiveList } from \"../Polyface\";\nimport { StrokesPrimitive, StrokesPrimitiveList, StrokesPrimitivePointList, StrokesPrimitivePointLists } from \"../Strokes\";\n\n/** @internal */\nexport type PrimitiveGeometryType = Loop | Path | IndexedPolyface | SolidPrimitive;\n\n/** @internal */\nexport abstract class Geometry {\n public readonly transform: Transform;\n public readonly tileRange: Range3d;\n public readonly displayParams: DisplayParams;\n public readonly feature?: Feature;\n\n public constructor(transform: Transform, tileRange: Range3d, displayParams: DisplayParams, feature: Feature | undefined) {\n this.transform = transform;\n this.tileRange = tileRange;\n this.displayParams = displayParams;\n this.feature = feature;\n }\n\n public static createFromPointString(pts: Point3d[], tf: Transform, tileRange: Range3d, params: DisplayParams, feature: Feature | undefined): Geometry {\n return new PrimitivePointStringGeometry(pts, tf, tileRange, params, feature);\n }\n\n public static createFromLineString(pts: Point3d[], tf: Transform, tileRange: Range3d, params: DisplayParams, feature: Feature | undefined): Geometry {\n return new PrimitiveLineStringGeometry(pts, tf, tileRange, params, feature);\n }\n\n public static createFromLoop(loop: Loop, tf: Transform, tileRange: Range3d, params: DisplayParams, disjoint: boolean, feature: Feature | undefined): Geometry {\n return new PrimitiveLoopGeometry(loop, tf, tileRange, params, disjoint, feature);\n }\n\n public static createFromSolidPrimitive(primitive: SolidPrimitive, tf: Transform, tileRange: Range3d, params: DisplayParams, feature: Feature | undefined): Geometry {\n return new SolidPrimitiveGeometry(primitive, tf, tileRange, params, feature);\n }\n\n public static createFromPath(path: Path, tf: Transform, tileRange: Range3d, params: DisplayParams, disjoint: boolean, feature: Feature | undefined): Geometry {\n return new PrimitivePathGeometry(path, tf, tileRange, params, disjoint, feature);\n }\n\n public static createFromPolyface(ipf: IndexedPolyface, tf: Transform, tileRange: Range3d, params: DisplayParams, feature: Feature | undefined): Geometry {\n return new PrimitivePolyfaceGeometry(ipf, tf, tileRange, params, feature);\n }\n\n protected abstract _getPolyfaces(facetOptions: StrokeOptions): PolyfacePrimitiveList | undefined;\n protected abstract _getStrokes(facetOptions: StrokeOptions): StrokesPrimitiveList | undefined;\n\n public getPolyfaces(tolerance: number): PolyfacePrimitiveList | undefined {\n const facetOptions = StrokeOptions.createForFacets();\n facetOptions.chordTol = tolerance;\n if (this.displayParams.isTextured)\n facetOptions.needParams = true;\n\n if (!this.displayParams.ignoreLighting) // ###TODO don't generate normals for 2d views.\n facetOptions.needNormals = true;\n\n return this._getPolyfaces(facetOptions);\n }\n\n public getStrokes(tolerance: number): StrokesPrimitiveList | undefined {\n const strokeOptions = StrokeOptions.createForCurves();\n strokeOptions.chordTol = tolerance;\n return this._getStrokes(strokeOptions);\n }\n\n public get hasTexture() { return this.displayParams.isTextured; }\n public doDecimate() { return false; }\n public doVertexCluster() { return true; }\n public part() { return undefined; }\n}\n\n/** @internal */\nexport class PrimitivePathGeometry extends Geometry {\n public readonly path: Path;\n public readonly isDisjoint: boolean;\n\n public constructor(path: Path, tf: Transform, range: Range3d, params: DisplayParams, isDisjoint: boolean, feature: Feature | undefined) {\n super(tf, range, params, feature);\n this.path = path;\n this.isDisjoint = isDisjoint;\n }\n\n protected _getPolyfaces(_facetOptions: StrokeOptions): PolyfacePrimitiveList | undefined { return undefined; }\n\n protected _getStrokes(facetOptions: StrokeOptions): StrokesPrimitiveList | undefined {\n return PrimitivePathGeometry.getStrokesForLoopOrPath(this.path, facetOptions, this.displayParams, this.isDisjoint, this.transform);\n }\n\n public static getStrokesForLoopOrPath(loopOrPath: Loop | Path, facetOptions: StrokeOptions, params: DisplayParams, isDisjoint: boolean, transform: Transform): StrokesPrimitiveList | undefined {\n const strksList = new StrokesPrimitiveList();\n\n if (!loopOrPath.isAnyRegionType || params.wantRegionOutline) {\n const strksPts: StrokesPrimitivePointLists = new StrokesPrimitivePointLists();\n PrimitivePathGeometry.collectCurveStrokes(strksPts, loopOrPath, facetOptions, transform);\n\n if (strksPts.length > 0) {\n const isPlanar = loopOrPath.isAnyRegionType;\n assert(isPlanar === params.wantRegionOutline);\n const strksPrim: StrokesPrimitive = StrokesPrimitive.create(params, isDisjoint, isPlanar);\n strksPrim.strokes = strksPts;\n strksList.push(strksPrim);\n }\n }\n\n return strksList;\n }\n\n private static collectCurveStrokes(strksPts: StrokesPrimitivePointLists, loopOrPath: CurveChain, facetOptions: StrokeOptions, trans: Transform) {\n const strokes = loopOrPath.getPackedStrokes(facetOptions);\n if (undefined !== strokes) {\n const pts = strokes.getPoint3dArray();\n trans.multiplyPoint3dArrayInPlace(pts);\n strksPts.push(new StrokesPrimitivePointList(pts));\n }\n }\n}\n\n/** @internal */\nexport class PrimitivePointStringGeometry extends Geometry {\n public readonly pts: Point3d[];\n\n public constructor(pts: Point3d[], tf: Transform, range: Range3d, params: DisplayParams, feature: Feature | undefined) {\n super(tf, range, params, feature);\n this.pts = pts;\n }\n\n protected _getPolyfaces(_facetOptions: StrokeOptions): PolyfacePrimitiveList | undefined {\n return undefined;\n }\n\n protected _getStrokes(_facetOptions: StrokeOptions): StrokesPrimitiveList | undefined {\n const strksList = new StrokesPrimitiveList();\n const strksPts = new StrokesPrimitivePointLists(new StrokesPrimitivePointList(this.pts));\n\n const strksPrim: StrokesPrimitive = StrokesPrimitive.create(this.displayParams, true, false);\n strksPrim.strokes = strksPts;\n strksPrim.transform(this.transform);\n strksList.push(strksPrim);\n\n return strksList;\n }\n}\n\n/** @internal */\nexport class PrimitiveLineStringGeometry extends Geometry {\n public readonly pts: Point3d[];\n\n public constructor(pts: Point3d[], tf: Transform, range: Range3d, params: DisplayParams, feature: Feature | undefined) {\n super(tf, range, params, feature);\n this.pts = pts;\n }\n\n protected _getPolyfaces(_facetOptions: StrokeOptions): PolyfacePrimitiveList | undefined {\n return undefined;\n }\n\n protected _getStrokes(_facetOptions: StrokeOptions): StrokesPrimitiveList | undefined {\n const strksList = new StrokesPrimitiveList();\n const strksPts = new StrokesPrimitivePointLists(new StrokesPrimitivePointList(this.pts));\n\n const strksPrim: StrokesPrimitive = StrokesPrimitive.create(this.displayParams, false, false);\n strksPrim.strokes = strksPts;\n strksPrim.transform(this.transform);\n strksList.push(strksPrim);\n\n return strksList;\n }\n}\n\n/** @internal */\nexport class PrimitiveLoopGeometry extends Geometry {\n public readonly loop: Loop;\n public readonly isDisjoint: boolean;\n\n public constructor(loop: Loop, tf: Transform, range: Range3d, params: DisplayParams, isDisjoint: boolean, feature: Feature | undefined) {\n super(tf, range, params, feature);\n this.loop = loop;\n this.isDisjoint = isDisjoint;\n }\n\n protected _getPolyfaces(facetOptions: StrokeOptions): PolyfacePrimitiveList | undefined {\n if (!this.loop.isAnyRegionType) {\n return undefined;\n }\n\n // The following is good for single loop things according to Earlin.\n const contour = SweepContour.createForLinearSweep(this.loop);\n if (contour !== undefined) {\n const pfBuilder: PolyfaceBuilder = PolyfaceBuilder.create(facetOptions);\n contour.emitFacets(pfBuilder, false, this.transform); // build facets and emit them to the builder\n const polyface = pfBuilder.claimPolyface();\n const wantEdges = DisplayParams.RegionEdgeType.Default === this.displayParams.regionEdgeType;\n const isPlanar = true;\n return new PolyfacePrimitiveList(PolyfacePrimitive.create(this.displayParams, polyface, wantEdges, isPlanar));\n } // ###TODO: this approach might not work with holes\n\n return undefined;\n }\n\n protected _getStrokes(facetOptions: StrokeOptions): StrokesPrimitiveList | undefined {\n return PrimitivePathGeometry.getStrokesForLoopOrPath(this.loop, facetOptions, this.displayParams, this.isDisjoint, this.transform);\n }\n}\n\n/** @internal */\nexport class PrimitivePolyfaceGeometry extends Geometry {\n public readonly polyface: IndexedPolyface;\n\n public constructor(polyface: IndexedPolyface, tf: Transform, range: Range3d, params: DisplayParams, feature: Feature | undefined) {\n super(tf, range, params, feature);\n this.polyface = tf.isIdentity ? polyface : polyface.cloneTransformed(tf);\n }\n\n protected _getPolyfaces(facetOptions: StrokeOptions): PolyfacePrimitiveList | undefined {\n if (!this.hasTexture) {\n if (this.polyface.data.param)\n this.polyface.data.param.clear();\n\n if (this.polyface.data.paramIndex)\n this.polyface.data.paramIndex = [];\n }\n\n if (!facetOptions.needNormals) {\n if (this.polyface.data.normal)\n this.polyface.data.normal.clear();\n\n if (this.polyface.data.normalIndex)\n this.polyface.data.normalIndex = [];\n } else if (!this.polyface.data.normal || 0 === this.polyface.data.normal.length) {\n PolyfaceQuery.buildAverageNormals(this.polyface);\n }\n\n return new PolyfacePrimitiveList(PolyfacePrimitive.create(this.displayParams, this.polyface));\n }\n\n protected _getStrokes(_facetOptions: StrokeOptions): StrokesPrimitiveList | undefined { return undefined; }\n}\n\nclass SolidPrimitiveGeometry extends Geometry {\n private readonly _primitive: SolidPrimitive;\n\n public constructor(primitive: SolidPrimitive, tf: Transform, range: Range3d, params: DisplayParams, feature: Feature | undefined) {\n super(tf, range, params, feature);\n const xformPrim = tf.isIdentity ? primitive : primitive.cloneTransformed(tf);\n this._primitive = xformPrim !== undefined ? xformPrim as SolidPrimitive : primitive;\n }\n\n protected _getStrokes() { return undefined; }\n\n protected _getPolyfaces(opts: StrokeOptions): PolyfacePrimitiveList {\n const builder = PolyfaceBuilder.create(opts);\n builder.addGeometryQuery(this._primitive);\n return new PolyfacePrimitiveList(PolyfacePrimitive.create(this.displayParams, builder.claimPolyface()));\n }\n}\n"]}
1
+ {"version":3,"file":"GeometryPrimitives.js","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryPrimitives.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport {\r\n CurveChain, IndexedPolyface, Loop, Path, Point3d, PolyfaceBuilder, PolyfaceQuery, Range3d, SolidPrimitive, StrokeOptions, SweepContour, Transform,\r\n} from \"@itwin/core-geometry\";\r\nimport { Feature } from \"@itwin/core-common\";\r\nimport { DisplayParams } from \"../DisplayParams\";\r\nimport { PolyfacePrimitive, PolyfacePrimitiveList } from \"../Polyface\";\r\nimport { StrokesPrimitive, StrokesPrimitiveList, StrokesPrimitivePointList, StrokesPrimitivePointLists } from \"../Strokes\";\r\n\r\n/** @internal */\r\nexport type PrimitiveGeometryType = Loop | Path | IndexedPolyface | SolidPrimitive;\r\n\r\n/** @internal */\r\nexport abstract class Geometry {\r\n public readonly transform: Transform;\r\n public readonly tileRange: Range3d;\r\n public readonly displayParams: DisplayParams;\r\n public readonly feature?: Feature;\r\n\r\n public constructor(transform: Transform, tileRange: Range3d, displayParams: DisplayParams, feature: Feature | undefined) {\r\n this.transform = transform;\r\n this.tileRange = tileRange;\r\n this.displayParams = displayParams;\r\n this.feature = feature;\r\n }\r\n\r\n public static createFromPointString(pts: Point3d[], tf: Transform, tileRange: Range3d, params: DisplayParams, feature: Feature | undefined): Geometry {\r\n return new PrimitivePointStringGeometry(pts, tf, tileRange, params, feature);\r\n }\r\n\r\n public static createFromLineString(pts: Point3d[], tf: Transform, tileRange: Range3d, params: DisplayParams, feature: Feature | undefined): Geometry {\r\n return new PrimitiveLineStringGeometry(pts, tf, tileRange, params, feature);\r\n }\r\n\r\n public static createFromLoop(loop: Loop, tf: Transform, tileRange: Range3d, params: DisplayParams, disjoint: boolean, feature: Feature | undefined): Geometry {\r\n return new PrimitiveLoopGeometry(loop, tf, tileRange, params, disjoint, feature);\r\n }\r\n\r\n public static createFromSolidPrimitive(primitive: SolidPrimitive, tf: Transform, tileRange: Range3d, params: DisplayParams, feature: Feature | undefined): Geometry {\r\n return new SolidPrimitiveGeometry(primitive, tf, tileRange, params, feature);\r\n }\r\n\r\n public static createFromPath(path: Path, tf: Transform, tileRange: Range3d, params: DisplayParams, disjoint: boolean, feature: Feature | undefined): Geometry {\r\n return new PrimitivePathGeometry(path, tf, tileRange, params, disjoint, feature);\r\n }\r\n\r\n public static createFromPolyface(ipf: IndexedPolyface, tf: Transform, tileRange: Range3d, params: DisplayParams, feature: Feature | undefined): Geometry {\r\n return new PrimitivePolyfaceGeometry(ipf, tf, tileRange, params, feature);\r\n }\r\n\r\n protected abstract _getPolyfaces(facetOptions: StrokeOptions): PolyfacePrimitiveList | undefined;\r\n protected abstract _getStrokes(facetOptions: StrokeOptions): StrokesPrimitiveList | undefined;\r\n\r\n public getPolyfaces(tolerance: number): PolyfacePrimitiveList | undefined {\r\n const facetOptions = StrokeOptions.createForFacets();\r\n facetOptions.chordTol = tolerance;\r\n if (this.displayParams.isTextured)\r\n facetOptions.needParams = true;\r\n\r\n if (!this.displayParams.ignoreLighting) // ###TODO don't generate normals for 2d views.\r\n facetOptions.needNormals = true;\r\n\r\n return this._getPolyfaces(facetOptions);\r\n }\r\n\r\n public getStrokes(tolerance: number): StrokesPrimitiveList | undefined {\r\n const strokeOptions = StrokeOptions.createForCurves();\r\n strokeOptions.chordTol = tolerance;\r\n return this._getStrokes(strokeOptions);\r\n }\r\n\r\n public get hasTexture() { return this.displayParams.isTextured; }\r\n public doDecimate() { return false; }\r\n public doVertexCluster() { return true; }\r\n public part() { return undefined; }\r\n}\r\n\r\n/** @internal */\r\nexport class PrimitivePathGeometry extends Geometry {\r\n public readonly path: Path;\r\n public readonly isDisjoint: boolean;\r\n\r\n public constructor(path: Path, tf: Transform, range: Range3d, params: DisplayParams, isDisjoint: boolean, feature: Feature | undefined) {\r\n super(tf, range, params, feature);\r\n this.path = path;\r\n this.isDisjoint = isDisjoint;\r\n }\r\n\r\n protected _getPolyfaces(_facetOptions: StrokeOptions): PolyfacePrimitiveList | undefined { return undefined; }\r\n\r\n protected _getStrokes(facetOptions: StrokeOptions): StrokesPrimitiveList | undefined {\r\n return PrimitivePathGeometry.getStrokesForLoopOrPath(this.path, facetOptions, this.displayParams, this.isDisjoint, this.transform);\r\n }\r\n\r\n public static getStrokesForLoopOrPath(loopOrPath: Loop | Path, facetOptions: StrokeOptions, params: DisplayParams, isDisjoint: boolean, transform: Transform): StrokesPrimitiveList | undefined {\r\n const strksList = new StrokesPrimitiveList();\r\n\r\n if (!loopOrPath.isAnyRegionType || params.wantRegionOutline) {\r\n const strksPts: StrokesPrimitivePointLists = new StrokesPrimitivePointLists();\r\n PrimitivePathGeometry.collectCurveStrokes(strksPts, loopOrPath, facetOptions, transform);\r\n\r\n if (strksPts.length > 0) {\r\n const isPlanar = loopOrPath.isAnyRegionType;\r\n assert(isPlanar === params.wantRegionOutline);\r\n const strksPrim: StrokesPrimitive = StrokesPrimitive.create(params, isDisjoint, isPlanar);\r\n strksPrim.strokes = strksPts;\r\n strksList.push(strksPrim);\r\n }\r\n }\r\n\r\n return strksList;\r\n }\r\n\r\n private static collectCurveStrokes(strksPts: StrokesPrimitivePointLists, loopOrPath: CurveChain, facetOptions: StrokeOptions, trans: Transform) {\r\n const strokes = loopOrPath.getPackedStrokes(facetOptions);\r\n if (undefined !== strokes) {\r\n const pts = strokes.getPoint3dArray();\r\n trans.multiplyPoint3dArrayInPlace(pts);\r\n strksPts.push(new StrokesPrimitivePointList(pts));\r\n }\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PrimitivePointStringGeometry extends Geometry {\r\n public readonly pts: Point3d[];\r\n\r\n public constructor(pts: Point3d[], tf: Transform, range: Range3d, params: DisplayParams, feature: Feature | undefined) {\r\n super(tf, range, params, feature);\r\n this.pts = pts;\r\n }\r\n\r\n protected _getPolyfaces(_facetOptions: StrokeOptions): PolyfacePrimitiveList | undefined {\r\n return undefined;\r\n }\r\n\r\n protected _getStrokes(_facetOptions: StrokeOptions): StrokesPrimitiveList | undefined {\r\n const strksList = new StrokesPrimitiveList();\r\n const strksPts = new StrokesPrimitivePointLists(new StrokesPrimitivePointList(this.pts));\r\n\r\n const strksPrim: StrokesPrimitive = StrokesPrimitive.create(this.displayParams, true, false);\r\n strksPrim.strokes = strksPts;\r\n strksPrim.transform(this.transform);\r\n strksList.push(strksPrim);\r\n\r\n return strksList;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PrimitiveLineStringGeometry extends Geometry {\r\n public readonly pts: Point3d[];\r\n\r\n public constructor(pts: Point3d[], tf: Transform, range: Range3d, params: DisplayParams, feature: Feature | undefined) {\r\n super(tf, range, params, feature);\r\n this.pts = pts;\r\n }\r\n\r\n protected _getPolyfaces(_facetOptions: StrokeOptions): PolyfacePrimitiveList | undefined {\r\n return undefined;\r\n }\r\n\r\n protected _getStrokes(_facetOptions: StrokeOptions): StrokesPrimitiveList | undefined {\r\n const strksList = new StrokesPrimitiveList();\r\n const strksPts = new StrokesPrimitivePointLists(new StrokesPrimitivePointList(this.pts));\r\n\r\n const strksPrim: StrokesPrimitive = StrokesPrimitive.create(this.displayParams, false, false);\r\n strksPrim.strokes = strksPts;\r\n strksPrim.transform(this.transform);\r\n strksList.push(strksPrim);\r\n\r\n return strksList;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PrimitiveLoopGeometry extends Geometry {\r\n public readonly loop: Loop;\r\n public readonly isDisjoint: boolean;\r\n\r\n public constructor(loop: Loop, tf: Transform, range: Range3d, params: DisplayParams, isDisjoint: boolean, feature: Feature | undefined) {\r\n super(tf, range, params, feature);\r\n this.loop = loop;\r\n this.isDisjoint = isDisjoint;\r\n }\r\n\r\n protected _getPolyfaces(facetOptions: StrokeOptions): PolyfacePrimitiveList | undefined {\r\n if (!this.loop.isAnyRegionType) {\r\n return undefined;\r\n }\r\n\r\n // The following is good for single loop things according to Earlin.\r\n const contour = SweepContour.createForLinearSweep(this.loop);\r\n if (contour !== undefined) {\r\n const pfBuilder: PolyfaceBuilder = PolyfaceBuilder.create(facetOptions);\r\n contour.emitFacets(pfBuilder, false, this.transform); // build facets and emit them to the builder\r\n const polyface = pfBuilder.claimPolyface();\r\n const wantEdges = DisplayParams.RegionEdgeType.Default === this.displayParams.regionEdgeType;\r\n const isPlanar = true;\r\n return new PolyfacePrimitiveList(PolyfacePrimitive.create(this.displayParams, polyface, wantEdges, isPlanar));\r\n } // ###TODO: this approach might not work with holes\r\n\r\n return undefined;\r\n }\r\n\r\n protected _getStrokes(facetOptions: StrokeOptions): StrokesPrimitiveList | undefined {\r\n return PrimitivePathGeometry.getStrokesForLoopOrPath(this.loop, facetOptions, this.displayParams, this.isDisjoint, this.transform);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class PrimitivePolyfaceGeometry extends Geometry {\r\n public readonly polyface: IndexedPolyface;\r\n\r\n public constructor(polyface: IndexedPolyface, tf: Transform, range: Range3d, params: DisplayParams, feature: Feature | undefined) {\r\n super(tf, range, params, feature);\r\n this.polyface = tf.isIdentity ? polyface : polyface.cloneTransformed(tf);\r\n }\r\n\r\n protected _getPolyfaces(facetOptions: StrokeOptions): PolyfacePrimitiveList | undefined {\r\n if (!this.hasTexture) {\r\n if (this.polyface.data.param)\r\n this.polyface.data.param.clear();\r\n\r\n if (this.polyface.data.paramIndex)\r\n this.polyface.data.paramIndex = [];\r\n }\r\n\r\n if (!facetOptions.needNormals) {\r\n if (this.polyface.data.normal)\r\n this.polyface.data.normal.clear();\r\n\r\n if (this.polyface.data.normalIndex)\r\n this.polyface.data.normalIndex = [];\r\n } else if (!this.polyface.data.normal || 0 === this.polyface.data.normal.length) {\r\n PolyfaceQuery.buildAverageNormals(this.polyface);\r\n }\r\n\r\n return new PolyfacePrimitiveList(PolyfacePrimitive.create(this.displayParams, this.polyface));\r\n }\r\n\r\n protected _getStrokes(_facetOptions: StrokeOptions): StrokesPrimitiveList | undefined { return undefined; }\r\n}\r\n\r\nclass SolidPrimitiveGeometry extends Geometry {\r\n private readonly _primitive: SolidPrimitive;\r\n\r\n public constructor(primitive: SolidPrimitive, tf: Transform, range: Range3d, params: DisplayParams, feature: Feature | undefined) {\r\n super(tf, range, params, feature);\r\n const xformPrim = tf.isIdentity ? primitive : primitive.cloneTransformed(tf);\r\n this._primitive = xformPrim !== undefined ? xformPrim as SolidPrimitive : primitive;\r\n }\r\n\r\n protected _getStrokes() { return undefined; }\r\n\r\n protected _getPolyfaces(opts: StrokeOptions): PolyfacePrimitiveList {\r\n const builder = PolyfaceBuilder.create(opts);\r\n builder.addGeometryQuery(this._primitive);\r\n return new PolyfacePrimitiveList(PolyfacePrimitive.create(this.displayParams, builder.claimPolyface()));\r\n }\r\n}\r\n"]}