@itwin/core-common 5.0.0-dev.40 → 5.0.0-dev.41

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 (433) hide show
  1. package/lib/cjs/AmbientOcclusion.js.map +1 -1
  2. package/lib/cjs/AnalysisStyle.d.ts +0 -3
  3. package/lib/cjs/AnalysisStyle.d.ts.map +1 -1
  4. package/lib/cjs/AnalysisStyle.js +0 -3
  5. package/lib/cjs/AnalysisStyle.js.map +1 -1
  6. package/lib/cjs/Atmosphere.js.map +1 -1
  7. package/lib/cjs/AuthorizationClient.js.map +1 -1
  8. package/lib/cjs/BackendTypes.js.map +1 -1
  9. package/lib/cjs/BackgroundMapProvider.js.map +1 -1
  10. package/lib/cjs/BackgroundMapSettings.js.map +1 -1
  11. package/lib/cjs/Base64EncodedString.js.map +1 -1
  12. package/lib/cjs/BlobReader.js.map +1 -1
  13. package/lib/cjs/BriefcaseTypes.js.map +1 -1
  14. package/lib/cjs/Camera.js.map +1 -1
  15. package/lib/cjs/ChangedElements.js.map +1 -1
  16. package/lib/cjs/ChangedEntities.js.map +1 -1
  17. package/lib/cjs/ChangesetProps.js.map +1 -1
  18. package/lib/cjs/ClipStyle.js.map +1 -1
  19. package/lib/cjs/Code.js.map +1 -1
  20. package/lib/cjs/ColorByName.js.map +1 -1
  21. package/lib/cjs/ColorDef.js.map +1 -1
  22. package/lib/cjs/CommonLoggerCategory.js.map +1 -1
  23. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  24. package/lib/cjs/ContextRealityModel.js.map +1 -1
  25. package/lib/cjs/ContourDisplay.js.map +1 -1
  26. package/lib/cjs/DisplayStyleSettings.js.map +1 -1
  27. package/lib/cjs/ECSchemaProps.js.map +1 -1
  28. package/lib/cjs/ECSqlReader.js.map +1 -1
  29. package/lib/cjs/ECSqlTypes.js.map +1 -1
  30. package/lib/cjs/ElementMesh.js.map +1 -1
  31. package/lib/cjs/ElementProps.js.map +1 -1
  32. package/lib/cjs/EmphasizeElementsProps.js.map +1 -1
  33. package/lib/cjs/EntityProps.js.map +1 -1
  34. package/lib/cjs/EntityReference.js.map +1 -1
  35. package/lib/cjs/Environment.js.map +1 -1
  36. package/lib/cjs/FeatureIndex.js.map +1 -1
  37. package/lib/cjs/FeatureSymbology.d.ts +25 -46
  38. package/lib/cjs/FeatureSymbology.d.ts.map +1 -1
  39. package/lib/cjs/FeatureSymbology.js +14 -29
  40. package/lib/cjs/FeatureSymbology.js.map +1 -1
  41. package/lib/cjs/FeatureTable.d.ts +6 -108
  42. package/lib/cjs/FeatureTable.d.ts.map +1 -1
  43. package/lib/cjs/FeatureTable.js +8 -329
  44. package/lib/cjs/FeatureTable.js.map +1 -1
  45. package/lib/cjs/Fonts.js.map +1 -1
  46. package/lib/cjs/Frustum.js.map +1 -1
  47. package/lib/cjs/GenericInstanceFilter.js.map +1 -1
  48. package/lib/cjs/GeoCoordinateServices.js.map +1 -1
  49. package/lib/cjs/GeometryContainment.js.map +1 -1
  50. package/lib/cjs/GeometryParams.js.map +1 -1
  51. package/lib/cjs/GeometrySummary.js.map +1 -1
  52. package/lib/cjs/Gradient.d.ts +3 -4
  53. package/lib/cjs/Gradient.d.ts.map +1 -1
  54. package/lib/cjs/Gradient.js +3 -4
  55. package/lib/cjs/Gradient.js.map +1 -1
  56. package/lib/cjs/GraphicParams.js.map +1 -1
  57. package/lib/cjs/GroundPlane.js.map +1 -1
  58. package/lib/cjs/HSLColor.js.map +1 -1
  59. package/lib/cjs/HSVColor.js.map +1 -1
  60. package/lib/cjs/HiddenLine.d.ts +17 -18
  61. package/lib/cjs/HiddenLine.d.ts.map +1 -1
  62. package/lib/cjs/HiddenLine.js +0 -1
  63. package/lib/cjs/HiddenLine.js.map +1 -1
  64. package/lib/cjs/Hilite.js.map +1 -1
  65. package/lib/cjs/IModel.js.map +1 -1
  66. package/lib/cjs/IModelError.js.map +1 -1
  67. package/lib/cjs/IModelVersion.js.map +1 -1
  68. package/lib/cjs/ITwinError.js.map +1 -1
  69. package/lib/cjs/Image.d.ts +7 -8
  70. package/lib/cjs/Image.d.ts.map +1 -1
  71. package/lib/cjs/Image.js +3 -4
  72. package/lib/cjs/Image.js.map +1 -1
  73. package/lib/cjs/IpcAppProps.js.map +1 -1
  74. package/lib/cjs/LightSettings.js.map +1 -1
  75. package/lib/cjs/LinePixels.js.map +1 -1
  76. package/lib/cjs/Localization.js.map +1 -1
  77. package/lib/cjs/MapImagerySettings.js.map +1 -1
  78. package/lib/cjs/MapLayerSettings.js.map +1 -1
  79. package/lib/cjs/MassProperties.js.map +1 -1
  80. package/lib/cjs/MaterialProps.js.map +1 -1
  81. package/lib/cjs/ModelClipGroup.js.map +1 -1
  82. package/lib/cjs/ModelGeometryChanges.js.map +1 -1
  83. package/lib/cjs/ModelProps.js.map +1 -1
  84. package/lib/cjs/NativeAppProps.js.map +1 -1
  85. package/lib/cjs/OctEncodedNormal.js.map +1 -1
  86. package/lib/cjs/PlanProjectionSettings.d.ts +1 -2
  87. package/lib/cjs/PlanProjectionSettings.d.ts.map +1 -1
  88. package/lib/cjs/PlanProjectionSettings.js +0 -1
  89. package/lib/cjs/PlanProjectionSettings.js.map +1 -1
  90. package/lib/cjs/PlanarClipMask.d.ts +0 -12
  91. package/lib/cjs/PlanarClipMask.d.ts.map +1 -1
  92. package/lib/cjs/PlanarClipMask.js.map +1 -1
  93. package/lib/cjs/QPoint.d.ts +5 -5
  94. package/lib/cjs/QPoint.d.ts.map +1 -1
  95. package/lib/cjs/QPoint.js +5 -5
  96. package/lib/cjs/QPoint.js.map +1 -1
  97. package/lib/cjs/RealityDataAccessProps.js.map +1 -1
  98. package/lib/cjs/RealityModelDisplaySettings.js.map +1 -1
  99. package/lib/cjs/RenderMaterial.js.map +1 -1
  100. package/lib/cjs/RenderPolyline.d.ts +36 -0
  101. package/lib/cjs/RenderPolyline.d.ts.map +1 -0
  102. package/lib/cjs/RenderPolyline.js +26 -0
  103. package/lib/cjs/RenderPolyline.js.map +1 -0
  104. package/lib/cjs/RenderTexture.js.map +1 -1
  105. package/lib/cjs/RgbColor.js.map +1 -1
  106. package/lib/cjs/RpcInterface.js.map +1 -1
  107. package/lib/cjs/RpcManager.js.map +1 -1
  108. package/lib/cjs/SessionProps.js.map +1 -1
  109. package/lib/cjs/SkyBox.js.map +1 -1
  110. package/lib/cjs/SolarCalculate.js.map +1 -1
  111. package/lib/cjs/SolarShadows.js.map +1 -1
  112. package/lib/cjs/SpatialClassification.js.map +1 -1
  113. package/lib/cjs/SubCategoryAppearance.js.map +1 -1
  114. package/lib/cjs/SubCategoryOverride.js.map +1 -1
  115. package/lib/cjs/TerrainSettings.js.map +1 -1
  116. package/lib/cjs/TextureMapping.d.ts +17 -14
  117. package/lib/cjs/TextureMapping.d.ts.map +1 -1
  118. package/lib/cjs/TextureMapping.js +22 -17
  119. package/lib/cjs/TextureMapping.js.map +1 -1
  120. package/lib/cjs/TextureProps.js.map +1 -1
  121. package/lib/cjs/ThematicDisplay.js.map +1 -1
  122. package/lib/cjs/Thumbnail.js.map +1 -1
  123. package/lib/cjs/TileProps.js.map +1 -1
  124. package/lib/cjs/Tween.js.map +1 -1
  125. package/lib/cjs/TxnAction.js.map +1 -1
  126. package/lib/cjs/ViewDetails.js.map +1 -1
  127. package/lib/cjs/ViewFlags.d.ts +1 -3
  128. package/lib/cjs/ViewFlags.d.ts.map +1 -1
  129. package/lib/cjs/ViewFlags.js +1 -3
  130. package/lib/cjs/ViewFlags.js.map +1 -1
  131. package/lib/cjs/ViewProps.js.map +1 -1
  132. package/lib/cjs/WhiteOnWhiteReversalSettings.js.map +1 -1
  133. package/lib/cjs/annotation/TextAnnotation.js.map +1 -1
  134. package/lib/cjs/annotation/TextBlock.js.map +1 -1
  135. package/lib/cjs/annotation/TextBlockGeometryProps.js.map +1 -1
  136. package/lib/cjs/annotation/TextBlockLayoutResult.js.map +1 -1
  137. package/lib/cjs/annotation/TextStyle.js.map +1 -1
  138. package/lib/cjs/core-common.d.ts +1 -1
  139. package/lib/cjs/core-common.d.ts.map +1 -1
  140. package/lib/cjs/core-common.js +1 -1
  141. package/lib/cjs/core-common.js.map +1 -1
  142. package/lib/cjs/domains/FunctionalElementProps.js.map +1 -1
  143. package/lib/cjs/domains/GenericElementProps.js.map +1 -1
  144. package/lib/cjs/geometry/AdditionalTransform.js.map +1 -1
  145. package/lib/cjs/geometry/AreaPattern.js.map +1 -1
  146. package/lib/cjs/geometry/BoundingSphere.js.map +1 -1
  147. package/lib/cjs/geometry/Cartographic.js.map +1 -1
  148. package/lib/cjs/geometry/CoordinateReferenceSystem.js.map +1 -1
  149. package/lib/cjs/geometry/ElementGeometry.js.map +1 -1
  150. package/lib/cjs/geometry/ElementGeometryFB.js.map +1 -1
  151. package/lib/cjs/geometry/FrustumPlanes.js.map +1 -1
  152. package/lib/cjs/geometry/GeodeticDatum.js.map +1 -1
  153. package/lib/cjs/geometry/GeodeticEllipsoid.js.map +1 -1
  154. package/lib/cjs/geometry/GeometryStream.js.map +1 -1
  155. package/lib/cjs/geometry/ImageGraphic.js.map +1 -1
  156. package/lib/cjs/geometry/LineStyle.js.map +1 -1
  157. package/lib/cjs/geometry/Placement.js.map +1 -1
  158. package/lib/cjs/geometry/Projection.js.map +1 -1
  159. package/lib/cjs/geometry/TextString.js.map +1 -1
  160. package/lib/cjs/internal/PackedFeatureTable.d.ts +111 -0
  161. package/lib/cjs/internal/PackedFeatureTable.d.ts.map +1 -0
  162. package/lib/cjs/internal/PackedFeatureTable.js +349 -0
  163. package/lib/cjs/internal/PackedFeatureTable.js.map +1 -0
  164. package/lib/cjs/internal/RenderMesh.d.ts +52 -0
  165. package/lib/cjs/internal/RenderMesh.d.ts.map +1 -0
  166. package/lib/cjs/{Render.js → internal/RenderMesh.js} +3 -25
  167. package/lib/cjs/internal/RenderMesh.js.map +1 -0
  168. package/lib/cjs/internal/Snapping.js.map +1 -1
  169. package/lib/cjs/internal/cross-package.d.ts +2 -0
  170. package/lib/cjs/internal/cross-package.d.ts.map +1 -1
  171. package/lib/cjs/internal/cross-package.js +12 -0
  172. package/lib/cjs/internal/cross-package.js.map +1 -1
  173. package/lib/cjs/ipc/IpcSession.js.map +1 -1
  174. package/lib/cjs/ipc/IpcSocket.js.map +1 -1
  175. package/lib/cjs/ipc/IpcWebSocket.js.map +1 -1
  176. package/lib/cjs/ipc/IpcWebSocketTransport.js.map +1 -1
  177. package/lib/cjs/rpc/DevToolsRpcInterface.js.map +1 -1
  178. package/lib/cjs/rpc/IModelReadRpcInterface.js.map +1 -1
  179. package/lib/cjs/rpc/IModelTileRpcInterface.js.map +1 -1
  180. package/lib/cjs/rpc/SnapshotIModelRpcInterface.js.map +1 -1
  181. package/lib/cjs/rpc/TestRpcManager.js.map +1 -1
  182. package/lib/cjs/rpc/core/RpcConfiguration.js.map +1 -1
  183. package/lib/cjs/rpc/core/RpcConstants.js.map +1 -1
  184. package/lib/cjs/rpc/core/RpcControl.js.map +1 -1
  185. package/lib/cjs/rpc/core/RpcInvocation.js.map +1 -1
  186. package/lib/cjs/rpc/core/RpcMarshaling.js.map +1 -1
  187. package/lib/cjs/rpc/core/RpcOperation.js.map +1 -1
  188. package/lib/cjs/rpc/core/RpcPendingQueue.js.map +1 -1
  189. package/lib/cjs/rpc/core/RpcProtocol.js.map +1 -1
  190. package/lib/cjs/rpc/core/RpcPush.js.map +1 -1
  191. package/lib/cjs/rpc/core/RpcRegistry.js.map +1 -1
  192. package/lib/cjs/rpc/core/RpcRequest.js.map +1 -1
  193. package/lib/cjs/rpc/core/RpcRequestContext.js.map +1 -1
  194. package/lib/cjs/rpc/core/RpcRoutingToken.js.map +1 -1
  195. package/lib/cjs/rpc/core/RpcSessionInvocation.js.map +1 -1
  196. package/lib/cjs/rpc/web/BentleyCloudRpcManager.js.map +1 -1
  197. package/lib/cjs/rpc/web/BentleyCloudRpcProtocol.js.map +1 -1
  198. package/lib/cjs/rpc/web/OpenAPI.js.map +1 -1
  199. package/lib/cjs/rpc/web/RpcMultipart.js.map +1 -1
  200. package/lib/cjs/rpc/web/WebAppRpcLogging.js.map +1 -1
  201. package/lib/cjs/rpc/web/WebAppRpcProtocol.js.map +1 -1
  202. package/lib/cjs/rpc/web/WebAppRpcRequest.js.map +1 -1
  203. package/lib/cjs/rpc/web/multipart/RpcMultipartParser.js.map +1 -1
  204. package/lib/cjs/tile/B3dmTileIO.js.map +1 -1
  205. package/lib/cjs/tile/CompositeTileIO.js.map +1 -1
  206. package/lib/cjs/tile/ElementGraphics.js.map +1 -1
  207. package/lib/cjs/tile/GltfTileIO.js.map +1 -1
  208. package/lib/cjs/tile/I3dmTileIO.js.map +1 -1
  209. package/lib/cjs/tile/IModelTileIO.js.map +1 -1
  210. package/lib/cjs/tile/PntsTileIO.js.map +1 -1
  211. package/lib/cjs/tile/TileIO.js.map +1 -1
  212. package/lib/cjs/tile/TileMetadata.js.map +1 -1
  213. package/lib/cjs/tile/Tileset3dSchema.js.map +1 -1
  214. package/lib/esm/AmbientOcclusion.js.map +1 -1
  215. package/lib/esm/AnalysisStyle.d.ts +0 -3
  216. package/lib/esm/AnalysisStyle.d.ts.map +1 -1
  217. package/lib/esm/AnalysisStyle.js +0 -3
  218. package/lib/esm/AnalysisStyle.js.map +1 -1
  219. package/lib/esm/Atmosphere.js.map +1 -1
  220. package/lib/esm/AuthorizationClient.js.map +1 -1
  221. package/lib/esm/BackendTypes.js.map +1 -1
  222. package/lib/esm/BackgroundMapProvider.js.map +1 -1
  223. package/lib/esm/BackgroundMapSettings.js.map +1 -1
  224. package/lib/esm/Base64EncodedString.js.map +1 -1
  225. package/lib/esm/BlobReader.js.map +1 -1
  226. package/lib/esm/BriefcaseTypes.js.map +1 -1
  227. package/lib/esm/Camera.js.map +1 -1
  228. package/lib/esm/ChangedElements.js.map +1 -1
  229. package/lib/esm/ChangedEntities.js.map +1 -1
  230. package/lib/esm/ChangesetProps.js.map +1 -1
  231. package/lib/esm/ClipStyle.js.map +1 -1
  232. package/lib/esm/Code.js.map +1 -1
  233. package/lib/esm/ColorByName.js.map +1 -1
  234. package/lib/esm/ColorDef.js.map +1 -1
  235. package/lib/esm/CommonLoggerCategory.js.map +1 -1
  236. package/lib/esm/ConcurrentQuery.js.map +1 -1
  237. package/lib/esm/ContextRealityModel.js.map +1 -1
  238. package/lib/esm/ContourDisplay.js.map +1 -1
  239. package/lib/esm/DisplayStyleSettings.js.map +1 -1
  240. package/lib/esm/ECSchemaProps.js.map +1 -1
  241. package/lib/esm/ECSqlReader.js.map +1 -1
  242. package/lib/esm/ECSqlTypes.js.map +1 -1
  243. package/lib/esm/ElementMesh.js.map +1 -1
  244. package/lib/esm/ElementProps.js.map +1 -1
  245. package/lib/esm/EmphasizeElementsProps.js.map +1 -1
  246. package/lib/esm/EntityProps.js.map +1 -1
  247. package/lib/esm/EntityReference.js.map +1 -1
  248. package/lib/esm/Environment.js.map +1 -1
  249. package/lib/esm/FeatureIndex.js.map +1 -1
  250. package/lib/esm/FeatureSymbology.d.ts +25 -46
  251. package/lib/esm/FeatureSymbology.d.ts.map +1 -1
  252. package/lib/esm/FeatureSymbology.js +14 -29
  253. package/lib/esm/FeatureSymbology.js.map +1 -1
  254. package/lib/esm/FeatureTable.d.ts +6 -108
  255. package/lib/esm/FeatureTable.d.ts.map +1 -1
  256. package/lib/esm/FeatureTable.js +6 -324
  257. package/lib/esm/FeatureTable.js.map +1 -1
  258. package/lib/esm/Fonts.js.map +1 -1
  259. package/lib/esm/Frustum.js.map +1 -1
  260. package/lib/esm/GenericInstanceFilter.js.map +1 -1
  261. package/lib/esm/GeoCoordinateServices.js.map +1 -1
  262. package/lib/esm/GeometryContainment.js.map +1 -1
  263. package/lib/esm/GeometryParams.js.map +1 -1
  264. package/lib/esm/GeometrySummary.js.map +1 -1
  265. package/lib/esm/Gradient.d.ts +3 -4
  266. package/lib/esm/Gradient.d.ts.map +1 -1
  267. package/lib/esm/Gradient.js +3 -4
  268. package/lib/esm/Gradient.js.map +1 -1
  269. package/lib/esm/GraphicParams.js.map +1 -1
  270. package/lib/esm/GroundPlane.js.map +1 -1
  271. package/lib/esm/HSLColor.js.map +1 -1
  272. package/lib/esm/HSVColor.js.map +1 -1
  273. package/lib/esm/HiddenLine.d.ts +17 -18
  274. package/lib/esm/HiddenLine.d.ts.map +1 -1
  275. package/lib/esm/HiddenLine.js +0 -1
  276. package/lib/esm/HiddenLine.js.map +1 -1
  277. package/lib/esm/Hilite.js.map +1 -1
  278. package/lib/esm/IModel.js.map +1 -1
  279. package/lib/esm/IModelError.js.map +1 -1
  280. package/lib/esm/IModelVersion.js.map +1 -1
  281. package/lib/esm/ITwinError.js.map +1 -1
  282. package/lib/esm/Image.d.ts +7 -8
  283. package/lib/esm/Image.d.ts.map +1 -1
  284. package/lib/esm/Image.js +3 -4
  285. package/lib/esm/Image.js.map +1 -1
  286. package/lib/esm/IpcAppProps.js.map +1 -1
  287. package/lib/esm/LightSettings.js.map +1 -1
  288. package/lib/esm/LinePixels.js.map +1 -1
  289. package/lib/esm/Localization.js.map +1 -1
  290. package/lib/esm/MapImagerySettings.js.map +1 -1
  291. package/lib/esm/MapLayerSettings.js.map +1 -1
  292. package/lib/esm/MassProperties.js.map +1 -1
  293. package/lib/esm/MaterialProps.js.map +1 -1
  294. package/lib/esm/ModelClipGroup.js.map +1 -1
  295. package/lib/esm/ModelGeometryChanges.js.map +1 -1
  296. package/lib/esm/ModelProps.js.map +1 -1
  297. package/lib/esm/NativeAppProps.js.map +1 -1
  298. package/lib/esm/OctEncodedNormal.js.map +1 -1
  299. package/lib/esm/PlanProjectionSettings.d.ts +1 -2
  300. package/lib/esm/PlanProjectionSettings.d.ts.map +1 -1
  301. package/lib/esm/PlanProjectionSettings.js +0 -1
  302. package/lib/esm/PlanProjectionSettings.js.map +1 -1
  303. package/lib/esm/PlanarClipMask.d.ts +0 -12
  304. package/lib/esm/PlanarClipMask.d.ts.map +1 -1
  305. package/lib/esm/PlanarClipMask.js.map +1 -1
  306. package/lib/esm/QPoint.d.ts +5 -5
  307. package/lib/esm/QPoint.d.ts.map +1 -1
  308. package/lib/esm/QPoint.js +5 -5
  309. package/lib/esm/QPoint.js.map +1 -1
  310. package/lib/esm/RealityDataAccessProps.js.map +1 -1
  311. package/lib/esm/RealityModelDisplaySettings.js.map +1 -1
  312. package/lib/esm/RenderMaterial.js.map +1 -1
  313. package/lib/esm/RenderPolyline.d.ts +36 -0
  314. package/lib/esm/RenderPolyline.d.ts.map +1 -0
  315. package/lib/esm/RenderPolyline.js +23 -0
  316. package/lib/esm/RenderPolyline.js.map +1 -0
  317. package/lib/esm/RenderTexture.js.map +1 -1
  318. package/lib/esm/RgbColor.js.map +1 -1
  319. package/lib/esm/RpcInterface.js.map +1 -1
  320. package/lib/esm/RpcManager.js.map +1 -1
  321. package/lib/esm/SessionProps.js.map +1 -1
  322. package/lib/esm/SkyBox.js.map +1 -1
  323. package/lib/esm/SolarCalculate.js.map +1 -1
  324. package/lib/esm/SolarShadows.js.map +1 -1
  325. package/lib/esm/SpatialClassification.js.map +1 -1
  326. package/lib/esm/SubCategoryAppearance.js.map +1 -1
  327. package/lib/esm/SubCategoryOverride.js.map +1 -1
  328. package/lib/esm/TerrainSettings.js.map +1 -1
  329. package/lib/esm/TextureMapping.d.ts +17 -14
  330. package/lib/esm/TextureMapping.d.ts.map +1 -1
  331. package/lib/esm/TextureMapping.js +22 -17
  332. package/lib/esm/TextureMapping.js.map +1 -1
  333. package/lib/esm/TextureProps.js.map +1 -1
  334. package/lib/esm/ThematicDisplay.js.map +1 -1
  335. package/lib/esm/Thumbnail.js.map +1 -1
  336. package/lib/esm/TileProps.js.map +1 -1
  337. package/lib/esm/Tween.js.map +1 -1
  338. package/lib/esm/TxnAction.js.map +1 -1
  339. package/lib/esm/ViewDetails.js.map +1 -1
  340. package/lib/esm/ViewFlags.d.ts +1 -3
  341. package/lib/esm/ViewFlags.d.ts.map +1 -1
  342. package/lib/esm/ViewFlags.js +1 -3
  343. package/lib/esm/ViewFlags.js.map +1 -1
  344. package/lib/esm/ViewProps.js.map +1 -1
  345. package/lib/esm/WhiteOnWhiteReversalSettings.js.map +1 -1
  346. package/lib/esm/annotation/TextAnnotation.js.map +1 -1
  347. package/lib/esm/annotation/TextBlock.js.map +1 -1
  348. package/lib/esm/annotation/TextBlockGeometryProps.js.map +1 -1
  349. package/lib/esm/annotation/TextBlockLayoutResult.js.map +1 -1
  350. package/lib/esm/annotation/TextStyle.js.map +1 -1
  351. package/lib/esm/core-common.d.ts +1 -1
  352. package/lib/esm/core-common.d.ts.map +1 -1
  353. package/lib/esm/core-common.js +1 -1
  354. package/lib/esm/core-common.js.map +1 -1
  355. package/lib/esm/domains/FunctionalElementProps.js.map +1 -1
  356. package/lib/esm/domains/GenericElementProps.js.map +1 -1
  357. package/lib/esm/geometry/AdditionalTransform.js.map +1 -1
  358. package/lib/esm/geometry/AreaPattern.js.map +1 -1
  359. package/lib/esm/geometry/BoundingSphere.js.map +1 -1
  360. package/lib/esm/geometry/Cartographic.js.map +1 -1
  361. package/lib/esm/geometry/CoordinateReferenceSystem.js.map +1 -1
  362. package/lib/esm/geometry/ElementGeometry.js.map +1 -1
  363. package/lib/esm/geometry/ElementGeometryFB.js.map +1 -1
  364. package/lib/esm/geometry/FrustumPlanes.js.map +1 -1
  365. package/lib/esm/geometry/GeodeticDatum.js.map +1 -1
  366. package/lib/esm/geometry/GeodeticEllipsoid.js.map +1 -1
  367. package/lib/esm/geometry/GeometryStream.js.map +1 -1
  368. package/lib/esm/geometry/ImageGraphic.js.map +1 -1
  369. package/lib/esm/geometry/LineStyle.js.map +1 -1
  370. package/lib/esm/geometry/Placement.js.map +1 -1
  371. package/lib/esm/geometry/Projection.js.map +1 -1
  372. package/lib/esm/geometry/TextString.js.map +1 -1
  373. package/lib/esm/internal/PackedFeatureTable.d.ts +111 -0
  374. package/lib/esm/internal/PackedFeatureTable.d.ts.map +1 -0
  375. package/lib/esm/internal/PackedFeatureTable.js +342 -0
  376. package/lib/esm/internal/PackedFeatureTable.js.map +1 -0
  377. package/lib/esm/internal/RenderMesh.d.ts +52 -0
  378. package/lib/esm/internal/RenderMesh.d.ts.map +1 -0
  379. package/lib/esm/{Render.js → internal/RenderMesh.js} +2 -23
  380. package/lib/esm/internal/RenderMesh.js.map +1 -0
  381. package/lib/esm/internal/Snapping.js.map +1 -1
  382. package/lib/esm/internal/cross-package.d.ts +2 -0
  383. package/lib/esm/internal/cross-package.d.ts.map +1 -1
  384. package/lib/esm/internal/cross-package.js +2 -1
  385. package/lib/esm/internal/cross-package.js.map +1 -1
  386. package/lib/esm/ipc/IpcSession.js.map +1 -1
  387. package/lib/esm/ipc/IpcSocket.js.map +1 -1
  388. package/lib/esm/ipc/IpcWebSocket.js.map +1 -1
  389. package/lib/esm/ipc/IpcWebSocketTransport.js.map +1 -1
  390. package/lib/esm/rpc/DevToolsRpcInterface.js.map +1 -1
  391. package/lib/esm/rpc/IModelReadRpcInterface.js.map +1 -1
  392. package/lib/esm/rpc/IModelTileRpcInterface.js.map +1 -1
  393. package/lib/esm/rpc/SnapshotIModelRpcInterface.js.map +1 -1
  394. package/lib/esm/rpc/TestRpcManager.js.map +1 -1
  395. package/lib/esm/rpc/core/RpcConfiguration.js.map +1 -1
  396. package/lib/esm/rpc/core/RpcConstants.js.map +1 -1
  397. package/lib/esm/rpc/core/RpcControl.js.map +1 -1
  398. package/lib/esm/rpc/core/RpcInvocation.js.map +1 -1
  399. package/lib/esm/rpc/core/RpcMarshaling.js.map +1 -1
  400. package/lib/esm/rpc/core/RpcOperation.js.map +1 -1
  401. package/lib/esm/rpc/core/RpcPendingQueue.js.map +1 -1
  402. package/lib/esm/rpc/core/RpcProtocol.js.map +1 -1
  403. package/lib/esm/rpc/core/RpcPush.js.map +1 -1
  404. package/lib/esm/rpc/core/RpcRegistry.js.map +1 -1
  405. package/lib/esm/rpc/core/RpcRequest.js.map +1 -1
  406. package/lib/esm/rpc/core/RpcRequestContext.js.map +1 -1
  407. package/lib/esm/rpc/core/RpcRoutingToken.js.map +1 -1
  408. package/lib/esm/rpc/core/RpcSessionInvocation.js.map +1 -1
  409. package/lib/esm/rpc/web/BentleyCloudRpcManager.js.map +1 -1
  410. package/lib/esm/rpc/web/BentleyCloudRpcProtocol.js.map +1 -1
  411. package/lib/esm/rpc/web/OpenAPI.js.map +1 -1
  412. package/lib/esm/rpc/web/RpcMultipart.js.map +1 -1
  413. package/lib/esm/rpc/web/WebAppRpcLogging.js.map +1 -1
  414. package/lib/esm/rpc/web/WebAppRpcProtocol.js.map +1 -1
  415. package/lib/esm/rpc/web/WebAppRpcRequest.js.map +1 -1
  416. package/lib/esm/rpc/web/multipart/RpcMultipartParser.js.map +1 -1
  417. package/lib/esm/tile/B3dmTileIO.js.map +1 -1
  418. package/lib/esm/tile/CompositeTileIO.js.map +1 -1
  419. package/lib/esm/tile/ElementGraphics.js.map +1 -1
  420. package/lib/esm/tile/GltfTileIO.js.map +1 -1
  421. package/lib/esm/tile/I3dmTileIO.js.map +1 -1
  422. package/lib/esm/tile/IModelTileIO.js.map +1 -1
  423. package/lib/esm/tile/PntsTileIO.js.map +1 -1
  424. package/lib/esm/tile/TileIO.js.map +1 -1
  425. package/lib/esm/tile/TileMetadata.js.map +1 -1
  426. package/lib/esm/tile/Tileset3dSchema.js.map +1 -1
  427. package/package.json +6 -6
  428. package/lib/cjs/Render.d.ts +0 -85
  429. package/lib/cjs/Render.d.ts.map +0 -1
  430. package/lib/cjs/Render.js.map +0 -1
  431. package/lib/esm/Render.d.ts +0 -85
  432. package/lib/esm/Render.d.ts.map +0 -1
  433. package/lib/esm/Render.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TextString.js","sourceRoot":"","sources":["../../../src/geometry/TextString.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 Geometry\n */\n\nimport { Point2d, Point3d, Range2d, Transform, Vector3d, XYZProps, YawPitchRollAngles, YawPitchRollProps } from \"@itwin/core-geometry\";\nimport { FontId } from \"../Fonts\";\n\n/**\n * Optional cached text layout information used to support legacy proxy graphics.\n * @beta\n */\nexport interface TextStringGlyphData {\n glyphIds: number[];\n glyphOrigins: Point2d[];\n range: Range2d;\n}\n\n/** Properties for a TextString class.\n * @see [[GeometryStreamEntryProps]]\n * @public\n * @extensions\n */\nexport interface TextStringProps {\n /** text string */\n text: string;\n /** FontId for the TextString. FontIds are mapped to font names and types via the FontMap */\n font: FontId;\n /* text height */\n height: number;\n /* width / height ratio. Default is 1.0 */\n widthFactor?: number;\n /** bold text. Default is false */\n bold?: boolean;\n /** italic text. Default is false */\n italic?: boolean;\n /** underline text. Default is false */\n underline?: boolean;\n /** Optional position relative to element's placement. Default is 0,0,0 */\n origin?: XYZProps;\n /** Optional rotation relative to element's placement. Default is identity matrix */\n rotation?: YawPitchRollProps;\n}\n\n/** A single line of text, all with the same font, styles (underline, bold, italic), and size.\n * This class also holds the origin and direction for the text.\n * A paragraph is composed of one or more instances of TextStrings.\n * @public\n */\nexport class TextString {\n /** Text string */\n public text: string;\n /** FontId for this TextString. FontIds are mapped to font names and types via the FontMap */\n public font: FontId;\n /* text height, in meters */\n public height: number;\n /* width / height ratio. Default is 1.0 */\n public widthFactor?: number;\n /** bold text. Default is false */\n public bold?: boolean;\n /** italic text. Default is false */\n public italic?: boolean;\n /** underline text. Default is false */\n public underline?: boolean;\n /** position relative to element's placement */\n public readonly origin: Point3d;\n /** Rotation relative to element's placement */\n public readonly rotation: YawPitchRollAngles;\n public get width() { return this.height * (this.widthFactor ? this.widthFactor : 1.0); }\n\n public constructor(props: TextStringProps) {\n this.text = props.text;\n this.font = props.font;\n this.height = props.height;\n this.widthFactor = props.widthFactor;\n this.bold = props.bold;\n this.italic = props.italic;\n this.underline = props.underline;\n this.origin = Point3d.fromJSON(props.origin);\n this.rotation = YawPitchRollAngles.fromJSON(props.rotation);\n }\n\n public toJSON(): TextStringProps {\n const props: TextStringProps = {\n text: this.text,\n font: this.font,\n height: this.height,\n widthFactor: this.widthFactor,\n bold: this.bold,\n italic: this.italic,\n underline: this.underline,\n };\n\n if (!this.origin.isAlmostZero) {\n props.origin = this.origin.toJSON();\n }\n\n if (!this.rotation.isIdentity()) {\n props.rotation = this.rotation.toJSON();\n }\n\n return props;\n }\n\n public transformInPlace(transform: Transform): boolean {\n const newOrigin = transform.multiplyPoint3d(this.origin, this.origin);\n const newTransform = this.rotation.toMatrix3d().multiplyMatrixTransform(transform);\n const scales = new Vector3d();\n if (!newTransform.matrix.normalizeColumnsInPlace(scales))\n return false;\n const newRotation = YawPitchRollAngles.createFromMatrix3d(newTransform.matrix);\n if (undefined === newRotation)\n return false;\n const newHeight = this.height * scales.y;\n const newWidth = this.width * scales.x;\n if (newHeight < 1.0e-10 || newWidth < 1.0e-10)\n return false;\n this.origin.setFrom(newOrigin);\n this.rotation.setFrom(newRotation);\n this.height = newHeight;\n this.widthFactor = (newHeight === newWidth ? undefined : (newWidth / newHeight));\n return true;\n }\n}\n"]}
1
+ {"version":3,"file":"TextString.js","sourceRoot":"","sources":["../../../src/geometry/TextString.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 Geometry\r\n */\r\n\r\nimport { Point2d, Point3d, Range2d, Transform, Vector3d, XYZProps, YawPitchRollAngles, YawPitchRollProps } from \"@itwin/core-geometry\";\r\nimport { FontId } from \"../Fonts\";\r\n\r\n/**\r\n * Optional cached text layout information used to support legacy proxy graphics.\r\n * @beta\r\n */\r\nexport interface TextStringGlyphData {\r\n glyphIds: number[];\r\n glyphOrigins: Point2d[];\r\n range: Range2d;\r\n}\r\n\r\n/** Properties for a TextString class.\r\n * @see [[GeometryStreamEntryProps]]\r\n * @public\r\n * @extensions\r\n */\r\nexport interface TextStringProps {\r\n /** text string */\r\n text: string;\r\n /** FontId for the TextString. FontIds are mapped to font names and types via the FontMap */\r\n font: FontId;\r\n /* text height */\r\n height: number;\r\n /* width / height ratio. Default is 1.0 */\r\n widthFactor?: number;\r\n /** bold text. Default is false */\r\n bold?: boolean;\r\n /** italic text. Default is false */\r\n italic?: boolean;\r\n /** underline text. Default is false */\r\n underline?: boolean;\r\n /** Optional position relative to element's placement. Default is 0,0,0 */\r\n origin?: XYZProps;\r\n /** Optional rotation relative to element's placement. Default is identity matrix */\r\n rotation?: YawPitchRollProps;\r\n}\r\n\r\n/** A single line of text, all with the same font, styles (underline, bold, italic), and size.\r\n * This class also holds the origin and direction for the text.\r\n * A paragraph is composed of one or more instances of TextStrings.\r\n * @public\r\n */\r\nexport class TextString {\r\n /** Text string */\r\n public text: string;\r\n /** FontId for this TextString. FontIds are mapped to font names and types via the FontMap */\r\n public font: FontId;\r\n /* text height, in meters */\r\n public height: number;\r\n /* width / height ratio. Default is 1.0 */\r\n public widthFactor?: number;\r\n /** bold text. Default is false */\r\n public bold?: boolean;\r\n /** italic text. Default is false */\r\n public italic?: boolean;\r\n /** underline text. Default is false */\r\n public underline?: boolean;\r\n /** position relative to element's placement */\r\n public readonly origin: Point3d;\r\n /** Rotation relative to element's placement */\r\n public readonly rotation: YawPitchRollAngles;\r\n public get width() { return this.height * (this.widthFactor ? this.widthFactor : 1.0); }\r\n\r\n public constructor(props: TextStringProps) {\r\n this.text = props.text;\r\n this.font = props.font;\r\n this.height = props.height;\r\n this.widthFactor = props.widthFactor;\r\n this.bold = props.bold;\r\n this.italic = props.italic;\r\n this.underline = props.underline;\r\n this.origin = Point3d.fromJSON(props.origin);\r\n this.rotation = YawPitchRollAngles.fromJSON(props.rotation);\r\n }\r\n\r\n public toJSON(): TextStringProps {\r\n const props: TextStringProps = {\r\n text: this.text,\r\n font: this.font,\r\n height: this.height,\r\n widthFactor: this.widthFactor,\r\n bold: this.bold,\r\n italic: this.italic,\r\n underline: this.underline,\r\n };\r\n\r\n if (!this.origin.isAlmostZero) {\r\n props.origin = this.origin.toJSON();\r\n }\r\n\r\n if (!this.rotation.isIdentity()) {\r\n props.rotation = this.rotation.toJSON();\r\n }\r\n\r\n return props;\r\n }\r\n\r\n public transformInPlace(transform: Transform): boolean {\r\n const newOrigin = transform.multiplyPoint3d(this.origin, this.origin);\r\n const newTransform = this.rotation.toMatrix3d().multiplyMatrixTransform(transform);\r\n const scales = new Vector3d();\r\n if (!newTransform.matrix.normalizeColumnsInPlace(scales))\r\n return false;\r\n const newRotation = YawPitchRollAngles.createFromMatrix3d(newTransform.matrix);\r\n if (undefined === newRotation)\r\n return false;\r\n const newHeight = this.height * scales.y;\r\n const newWidth = this.width * scales.x;\r\n if (newHeight < 1.0e-10 || newWidth < 1.0e-10)\r\n return false;\r\n this.origin.setFrom(newOrigin);\r\n this.rotation.setFrom(newRotation);\r\n this.height = newHeight;\r\n this.widthFactor = (newHeight === newWidth ? undefined : (newWidth / newHeight));\r\n return true;\r\n }\r\n}\r\n"]}
@@ -0,0 +1,111 @@
1
+ /** @packageDocumentation
2
+ * @module Rendering
3
+ */
4
+ import { Id64, Id64String, UintArray } from "@itwin/core-bentley";
5
+ import { BatchType, ComputeNodeId, FeatureTable, ModelFeature, PackedFeature, PackedFeatureWithIndex, RenderFeatureTable } from "../FeatureTable";
6
+ /**
7
+ * An immutable, packed representation of a [[FeatureTable]]. The features are packed into a single array of 32-bit integer values,
8
+ * wherein each feature occupies 3 32-bit integers.
9
+ * @internal
10
+ */
11
+ export declare class PackedFeatureTable implements RenderFeatureTable {
12
+ readonly data: Uint32Array;
13
+ readonly batchModelId: Id64String;
14
+ readonly batchModelIdPair: Id64.Uint32Pair;
15
+ readonly numFeatures: number;
16
+ readonly anyDefined: boolean;
17
+ readonly type: BatchType;
18
+ animationNodeIds?: UintArray;
19
+ get byteLength(): number;
20
+ /** Construct a PackedFeatureTable from the packed binary data.
21
+ * This is used internally when deserializing Tiles in iMdl format.
22
+ * @internal
23
+ */
24
+ constructor(data: Uint32Array, modelId: Id64String, numFeatures: number, type: BatchType, animationNodeIds?: UintArray);
25
+ /** Create a packed feature table from a [[FeatureTable]]. */
26
+ static pack(featureTable: FeatureTable): PackedFeatureTable;
27
+ /** Retrieve the Feature associated with the specified index. */
28
+ getFeature(featureIndex: number, result: ModelFeature): ModelFeature;
29
+ /** Returns the Feature associated with the specified index, or undefined if the index is out of range. */
30
+ findFeature(featureIndex: number, result: ModelFeature): ModelFeature | undefined;
31
+ /** @internal */
32
+ getElementIdPair(featureIndex: number, out?: Id64.Uint32Pair): Id64.Uint32Pair;
33
+ /** @internal */
34
+ getSubCategoryIdPair(featureIndex: number): Id64.Uint32Pair;
35
+ /** @internal */
36
+ getAnimationNodeId(featureIndex: number): number;
37
+ /** @internal */
38
+ getPackedFeature(featureIndex: number, result: PackedFeature): PackedFeature;
39
+ getModelIdPair(_featureIndex: number, out: Id64.Uint32Pair): Id64.Uint32Pair;
40
+ /** Returns the element ID of the Feature associated with the specified index, or undefined if the index is out of range. */
41
+ findElementId(featureIndex: number): Id64String | undefined;
42
+ /** Return true if this table contains exactly 1 feature. */
43
+ get isUniform(): boolean;
44
+ /** If this table contains exactly 1 feature, return it. */
45
+ getUniform(result: ModelFeature): ModelFeature | undefined;
46
+ get isVolumeClassifier(): boolean;
47
+ get isPlanarClassifier(): boolean;
48
+ get isClassifier(): boolean;
49
+ /** Unpack the features into a [[FeatureTable]]. */
50
+ unpack(): FeatureTable;
51
+ populateAnimationNodeIds(computeNodeId: ComputeNodeId, maxNodeId: number): void;
52
+ iterator(output: PackedFeatureWithIndex): Iterator<PackedFeatureWithIndex>;
53
+ iterable(output: PackedFeatureWithIndex): Iterable<PackedFeatureWithIndex>;
54
+ private get _subCategoriesOffset();
55
+ private readId;
56
+ }
57
+ interface PackedFeatureModelEntry {
58
+ lastFeatureIndex: number;
59
+ idLower: number;
60
+ idUpper: number;
61
+ }
62
+ /** A table of model Ids associated with a [[MultiModelPackedFeatureTable]].
63
+ * The feature indices in the packed feature table are grouped together by model, such that the first N features belong to model 1, the next M features to model 2, and so on.
64
+ * The model table itself consists of one entry per model, where each entry looks like:
65
+ * indexOfLastFeatureInModel: u32
66
+ * modelId: u64
67
+ * The modelId associated with a feature can therefore be derived by finding the entry in the model table with the highest indexOfLastFeatureInModel no greater than the feature index.
68
+ * This lookup can be optimized using binary search.
69
+ * Moreover, while iterating the feature table in sequence, the model table can be iterated in parallel so that no per-feature lookup of model Id is required.
70
+ * @internal
71
+ */
72
+ export declare class PackedFeatureModelTable {
73
+ private readonly _data;
74
+ constructor(data: Uint32Array);
75
+ /** The number of models in the table. */
76
+ get length(): number;
77
+ get byteLength(): number;
78
+ private getLastFeatureIndex;
79
+ getEntry(modelIndex: number, result: PackedFeatureModelEntry): PackedFeatureModelEntry;
80
+ /** Get the Id of the model associated with the specified feature, or an invalid Id if the feature is not associated with any model. */
81
+ getModelIdPair(featureIndex: number, result?: Id64.Uint32Pair): Id64.Uint32Pair;
82
+ }
83
+ /** A PackedFeatureTable with a PackedFeatureModelTable appended to it, capable of storing features belonging to more than one model.
84
+ * @internal
85
+ */
86
+ export declare class MultiModelPackedFeatureTable implements RenderFeatureTable {
87
+ private readonly _features;
88
+ private readonly _models;
89
+ constructor(features: PackedFeatureTable, models: PackedFeatureModelTable);
90
+ static create(data: Uint32Array, batchModelId: Id64String, numFeatures: number, type: BatchType, numSubCategories: number): MultiModelPackedFeatureTable;
91
+ get batchModelId(): string;
92
+ get batchModelIdPair(): Id64.Uint32Pair;
93
+ get numFeatures(): number;
94
+ get type(): BatchType;
95
+ get animationNodeIds(): UintArray | undefined;
96
+ set animationNodeIds(ids: UintArray | undefined);
97
+ get byteLength(): number;
98
+ getPackedFeature(featureIndex: number, result: PackedFeature): PackedFeature;
99
+ getFeature(featureIndex: number, result: ModelFeature): ModelFeature;
100
+ findFeature(featureIndex: number, result: ModelFeature): ModelFeature | undefined;
101
+ getElementIdPair(featureIndex: number, out: Id64.Uint32Pair): Id64.Uint32Pair;
102
+ getModelIdPair(featureIndex: number, out: Id64.Uint32Pair): Id64.Uint32Pair;
103
+ findElementId(featureIndex: number): Id64String | undefined;
104
+ iterator(output: PackedFeatureWithIndex): Iterator<PackedFeatureWithIndex>;
105
+ iterable(output: PackedFeatureWithIndex): Iterable<PackedFeatureWithIndex>;
106
+ getAnimationNodeId(featureIndex: number): number;
107
+ populateAnimationNodeIds(computeNodeId: ComputeNodeId, maxNodeId: number): void;
108
+ }
109
+ export declare function createPackedFeature(): PackedFeature;
110
+ export {};
111
+ //# sourceMappingURL=PackedFeatureTable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PackedFeatureTable.d.ts","sourceRoot":"","sources":["../../../src/internal/PackedFeatureTable.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,349 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ /** @packageDocumentation
7
+ * @module Rendering
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.MultiModelPackedFeatureTable = exports.PackedFeatureModelTable = exports.PackedFeatureTable = void 0;
11
+ exports.createPackedFeature = createPackedFeature;
12
+ const core_bentley_1 = require("@itwin/core-bentley");
13
+ const FeatureTable_1 = require("../FeatureTable");
14
+ const GeometryParams_1 = require("../GeometryParams");
15
+ /**
16
+ * An immutable, packed representation of a [[FeatureTable]]. The features are packed into a single array of 32-bit integer values,
17
+ * wherein each feature occupies 3 32-bit integers.
18
+ * @internal
19
+ */
20
+ class PackedFeatureTable {
21
+ get byteLength() { return this.data.byteLength; }
22
+ /** Construct a PackedFeatureTable from the packed binary data.
23
+ * This is used internally when deserializing Tiles in iMdl format.
24
+ * @internal
25
+ */
26
+ constructor(data, modelId, numFeatures, type, animationNodeIds) {
27
+ this.data = data;
28
+ this.batchModelId = modelId;
29
+ this.batchModelIdPair = core_bentley_1.Id64.getUint32Pair(modelId);
30
+ this.numFeatures = numFeatures;
31
+ this.type = type;
32
+ this.animationNodeIds = animationNodeIds;
33
+ switch (this.numFeatures) {
34
+ case 0:
35
+ this.anyDefined = false;
36
+ break;
37
+ case 1:
38
+ this.anyDefined = FeatureTable_1.ModelFeature.isDefined(this.getFeature(0, FeatureTable_1.ModelFeature.create()));
39
+ break;
40
+ default:
41
+ this.anyDefined = true;
42
+ break;
43
+ }
44
+ (0, core_bentley_1.assert)(this.data.length >= this._subCategoriesOffset);
45
+ (0, core_bentley_1.assert)(undefined === this.animationNodeIds || this.animationNodeIds.length === this.numFeatures);
46
+ }
47
+ /** Create a packed feature table from a [[FeatureTable]]. */
48
+ static pack(featureTable) {
49
+ // We must determine how many subcategories we have ahead of time to compute the size of the Uint32Array, as
50
+ // the array cannot be resized after it is created.
51
+ // We are not too worried about this as FeatureTables created on the front-end will contain few if any features; those obtained from the
52
+ // back-end arrive within tiles already in the packed format.
53
+ const subcategories = new Map();
54
+ for (const iv of featureTable.getArray()) {
55
+ const found = subcategories.get(iv.value.subCategoryId.toString());
56
+ if (undefined === found)
57
+ subcategories.set(iv.value.subCategoryId, subcategories.size);
58
+ }
59
+ // We need 3 32-bit integers per feature, plus 2 32-bit integers per subcategory.
60
+ const subCategoriesOffset = 3 * featureTable.length;
61
+ const nUint32s = subCategoriesOffset + 2 * subcategories.size;
62
+ const uint32s = new Uint32Array(nUint32s);
63
+ for (const iv of featureTable.getArray()) {
64
+ const feature = iv.value;
65
+ const index = iv.index * 3;
66
+ let subCategoryIndex = subcategories.get(feature.subCategoryId);
67
+ (0, core_bentley_1.assert)(undefined !== subCategoryIndex); // we inserted it above...
68
+ subCategoryIndex |= (feature.geometryClass << 24);
69
+ uint32s[index + 0] = core_bentley_1.Id64.getLowerUint32(feature.elementId);
70
+ uint32s[index + 1] = core_bentley_1.Id64.getUpperUint32(feature.elementId);
71
+ uint32s[index + 2] = subCategoryIndex;
72
+ }
73
+ subcategories.forEach((index, id, _map) => {
74
+ const index32 = subCategoriesOffset + 2 * index;
75
+ uint32s[index32 + 0] = core_bentley_1.Id64.getLowerUint32(id);
76
+ uint32s[index32 + 1] = core_bentley_1.Id64.getUpperUint32(id);
77
+ });
78
+ return new PackedFeatureTable(uint32s, featureTable.modelId, featureTable.length, featureTable.type);
79
+ }
80
+ /** Retrieve the Feature associated with the specified index. */
81
+ getFeature(featureIndex, result) {
82
+ const packed = this.getPackedFeature(featureIndex, scratchPackedFeature);
83
+ return FeatureTable_1.ModelFeature.unpack(packed, result, this.batchModelId);
84
+ }
85
+ /** Returns the Feature associated with the specified index, or undefined if the index is out of range. */
86
+ findFeature(featureIndex, result) {
87
+ return featureIndex < this.numFeatures ? this.getFeature(featureIndex, result) : undefined;
88
+ }
89
+ /** @internal */
90
+ getElementIdPair(featureIndex, out) {
91
+ out = out ?? { lower: 0, upper: 0 };
92
+ (0, core_bentley_1.assert)(featureIndex < this.numFeatures);
93
+ const offset = 3 * featureIndex;
94
+ out.lower = this.data[offset];
95
+ out.upper = this.data[offset + 1];
96
+ return out;
97
+ }
98
+ /** @internal */
99
+ getSubCategoryIdPair(featureIndex) {
100
+ const index = 3 * featureIndex;
101
+ let subCatIndex = this.data[index + 2];
102
+ subCatIndex = (subCatIndex & 0x00ffffff) >>> 0;
103
+ subCatIndex = subCatIndex * 2 + this._subCategoriesOffset;
104
+ return { lower: this.data[subCatIndex], upper: this.data[subCatIndex + 1] };
105
+ }
106
+ /** @internal */
107
+ getAnimationNodeId(featureIndex) {
108
+ return undefined !== this.animationNodeIds && featureIndex < this.numFeatures ? this.animationNodeIds[featureIndex] : 0;
109
+ }
110
+ /** @internal */
111
+ getPackedFeature(featureIndex, result) {
112
+ (0, core_bentley_1.assert)(featureIndex < this.numFeatures);
113
+ const index32 = 3 * featureIndex;
114
+ result.elementId.lower = this.data[index32];
115
+ result.elementId.upper = this.data[index32 + 1];
116
+ const subCatIndexAndClass = this.data[index32 + 2];
117
+ result.geometryClass = (subCatIndexAndClass >>> 24) & 0xff;
118
+ let subCatIndex = (subCatIndexAndClass & 0x00ffffff) >>> 0;
119
+ subCatIndex = subCatIndex * 2 + this._subCategoriesOffset;
120
+ result.subCategoryId.lower = this.data[subCatIndex];
121
+ result.subCategoryId.upper = this.data[subCatIndex + 1];
122
+ result.animationNodeId = this.getAnimationNodeId(featureIndex);
123
+ result.modelId.lower = this.batchModelIdPair.lower;
124
+ result.modelId.upper = this.batchModelIdPair.upper;
125
+ return result;
126
+ }
127
+ getModelIdPair(_featureIndex, out) {
128
+ out.lower = this.batchModelIdPair.lower;
129
+ out.upper = this.batchModelIdPair.upper;
130
+ return out;
131
+ }
132
+ /** Returns the element ID of the Feature associated with the specified index, or undefined if the index is out of range. */
133
+ findElementId(featureIndex) {
134
+ if (featureIndex >= this.numFeatures)
135
+ return undefined;
136
+ else
137
+ return this.readId(3 * featureIndex);
138
+ }
139
+ /** Return true if this table contains exactly 1 feature. */
140
+ get isUniform() { return 1 === this.numFeatures; }
141
+ /** If this table contains exactly 1 feature, return it. */
142
+ getUniform(result) {
143
+ return this.isUniform ? this.getFeature(0, result) : undefined;
144
+ }
145
+ get isVolumeClassifier() { return FeatureTable_1.BatchType.VolumeClassifier === this.type; }
146
+ get isPlanarClassifier() { return FeatureTable_1.BatchType.VolumeClassifier === this.type; }
147
+ get isClassifier() { return this.isVolumeClassifier || this.isPlanarClassifier; }
148
+ /** Unpack the features into a [[FeatureTable]]. */
149
+ unpack() {
150
+ const table = new FeatureTable_1.FeatureTable(this.numFeatures, this.batchModelId);
151
+ const feature = FeatureTable_1.ModelFeature.create();
152
+ for (let i = 0; i < this.numFeatures; i++) {
153
+ this.getFeature(i, feature);
154
+ table.insertWithIndex(new FeatureTable_1.Feature(feature.elementId, feature.subCategoryId, feature.geometryClass), i);
155
+ }
156
+ return table;
157
+ }
158
+ populateAnimationNodeIds(computeNodeId, maxNodeId) {
159
+ (0, core_bentley_1.assert)(undefined === this.animationNodeIds);
160
+ this.animationNodeIds = populateAnimationNodeIds(this, computeNodeId, maxNodeId);
161
+ }
162
+ *iterator(output) {
163
+ for (let i = 0; i < this.numFeatures; i++) {
164
+ this.getPackedFeature(i, output);
165
+ output.index = i;
166
+ yield output;
167
+ }
168
+ }
169
+ iterable(output) {
170
+ return {
171
+ [Symbol.iterator]: () => this.iterator(output),
172
+ };
173
+ }
174
+ get _subCategoriesOffset() { return this.numFeatures * 3; }
175
+ readId(offset32) {
176
+ return core_bentley_1.Id64.fromUint32Pair(this.data[offset32], this.data[offset32 + 1]);
177
+ }
178
+ }
179
+ exports.PackedFeatureTable = PackedFeatureTable;
180
+ const scratchPackedFeatureModelEntry = { lastFeatureIndex: -1, idLower: -1, idUpper: -1 };
181
+ /** A table of model Ids associated with a [[MultiModelPackedFeatureTable]].
182
+ * The feature indices in the packed feature table are grouped together by model, such that the first N features belong to model 1, the next M features to model 2, and so on.
183
+ * The model table itself consists of one entry per model, where each entry looks like:
184
+ * indexOfLastFeatureInModel: u32
185
+ * modelId: u64
186
+ * The modelId associated with a feature can therefore be derived by finding the entry in the model table with the highest indexOfLastFeatureInModel no greater than the feature index.
187
+ * This lookup can be optimized using binary search.
188
+ * Moreover, while iterating the feature table in sequence, the model table can be iterated in parallel so that no per-feature lookup of model Id is required.
189
+ * @internal
190
+ */
191
+ class PackedFeatureModelTable {
192
+ constructor(data) {
193
+ this._data = data;
194
+ (0, core_bentley_1.assert)(this._data.length % 3 === 0);
195
+ }
196
+ /** The number of models in the table. */
197
+ get length() {
198
+ return this._data.length / 3;
199
+ }
200
+ get byteLength() {
201
+ return this._data.byteLength;
202
+ }
203
+ getLastFeatureIndex(modelIndex) {
204
+ return this._data[modelIndex * 3];
205
+ }
206
+ getEntry(modelIndex, result) {
207
+ if (modelIndex >= this.length) {
208
+ result.idLower = result.idUpper = 0;
209
+ result.lastFeatureIndex = Number.MAX_SAFE_INTEGER;
210
+ return result;
211
+ }
212
+ const index = modelIndex * 3;
213
+ result.lastFeatureIndex = this._data[index + 0];
214
+ result.idLower = this._data[index + 1];
215
+ result.idUpper = this._data[index + 2];
216
+ return result;
217
+ }
218
+ /** Get the Id of the model associated with the specified feature, or an invalid Id if the feature is not associated with any model. */
219
+ getModelIdPair(featureIndex, result) {
220
+ if (!result)
221
+ result = { lower: 0, upper: 0 };
222
+ else
223
+ result.lower = result.upper = 0;
224
+ let first = 0;
225
+ const last = this.length;
226
+ let count = last;
227
+ while (count > 0) {
228
+ const step = Math.floor(count / 2);
229
+ const mid = first + step;
230
+ const lastFeatureIndex = this.getLastFeatureIndex(mid);
231
+ if (featureIndex > lastFeatureIndex) {
232
+ first = mid + 1;
233
+ count -= step + 1;
234
+ }
235
+ else {
236
+ count = step;
237
+ }
238
+ }
239
+ if (first < last) {
240
+ result.lower = this._data[first * 3 + 1];
241
+ result.upper = this._data[first * 3 + 2];
242
+ }
243
+ return result;
244
+ }
245
+ }
246
+ exports.PackedFeatureModelTable = PackedFeatureModelTable;
247
+ /** A PackedFeatureTable with a PackedFeatureModelTable appended to it, capable of storing features belonging to more than one model.
248
+ * @internal
249
+ */
250
+ class MultiModelPackedFeatureTable {
251
+ constructor(features, models) {
252
+ this._features = features;
253
+ this._models = models;
254
+ }
255
+ static create(data, batchModelId, numFeatures, type, numSubCategories) {
256
+ const modelTableOffset = 3 * numFeatures + 2 * numSubCategories;
257
+ const featureData = data.subarray(0, modelTableOffset);
258
+ const features = new PackedFeatureTable(featureData, batchModelId, numFeatures, type);
259
+ const modelData = data.subarray(modelTableOffset);
260
+ const models = new PackedFeatureModelTable(modelData);
261
+ return new MultiModelPackedFeatureTable(features, models);
262
+ }
263
+ get batchModelId() { return this._features.batchModelId; }
264
+ get batchModelIdPair() { return this._features.batchModelIdPair; }
265
+ get numFeatures() { return this._features.numFeatures; }
266
+ get type() { return this._features.type; }
267
+ get animationNodeIds() { return this._features.animationNodeIds; }
268
+ set animationNodeIds(ids) { this._features.animationNodeIds = ids; }
269
+ get byteLength() {
270
+ return this._features.byteLength + this._models.byteLength;
271
+ }
272
+ getPackedFeature(featureIndex, result) {
273
+ this._features.getPackedFeature(featureIndex, result);
274
+ this._models.getModelIdPair(featureIndex, result.modelId);
275
+ return result;
276
+ }
277
+ getFeature(featureIndex, result) {
278
+ const packed = this.getPackedFeature(featureIndex, scratchPackedFeature);
279
+ return FeatureTable_1.ModelFeature.unpack(packed, result);
280
+ }
281
+ findFeature(featureIndex, result) {
282
+ return featureIndex < this.numFeatures ? this.getFeature(featureIndex, result) : undefined;
283
+ }
284
+ getElementIdPair(featureIndex, out) {
285
+ return this._features.getElementIdPair(featureIndex, out);
286
+ }
287
+ getModelIdPair(featureIndex, out) {
288
+ this._models.getModelIdPair(featureIndex, out);
289
+ return out;
290
+ }
291
+ findElementId(featureIndex) {
292
+ return this._features.findElementId(featureIndex);
293
+ }
294
+ *iterator(output) {
295
+ // Rather than perform a binary search on the model table to find each feature's model Id, traverse the model table in parallel with the feature table.
296
+ let modelIndex = 0;
297
+ const modelEntry = this._models.getEntry(modelIndex, scratchPackedFeatureModelEntry);
298
+ for (let featureIndex = 0; featureIndex < this.numFeatures; featureIndex++) {
299
+ if (featureIndex > modelEntry.lastFeatureIndex)
300
+ this._models.getEntry(++modelIndex, modelEntry);
301
+ this._features.getPackedFeature(featureIndex, output);
302
+ output.modelId.lower = modelEntry.idLower;
303
+ output.modelId.upper = modelEntry.idUpper;
304
+ output.index = featureIndex;
305
+ yield output;
306
+ }
307
+ }
308
+ iterable(output) {
309
+ return {
310
+ [Symbol.iterator]: () => this.iterator(output),
311
+ };
312
+ }
313
+ getAnimationNodeId(featureIndex) {
314
+ return this._features.getAnimationNodeId(featureIndex);
315
+ }
316
+ populateAnimationNodeIds(computeNodeId, maxNodeId) {
317
+ this._features.animationNodeIds = populateAnimationNodeIds(this, computeNodeId, maxNodeId);
318
+ }
319
+ }
320
+ exports.MultiModelPackedFeatureTable = MultiModelPackedFeatureTable;
321
+ function createPackedFeature() {
322
+ const pair = { upper: 0, lower: 0 };
323
+ return {
324
+ modelId: { ...pair },
325
+ elementId: { ...pair },
326
+ subCategoryId: { ...pair },
327
+ geometryClass: GeometryParams_1.GeometryClass.Primary,
328
+ animationNodeId: 0,
329
+ };
330
+ }
331
+ const scratchPackedFeature = createPackedFeature();
332
+ function populateAnimationNodeIds(table, computeNodeId, maxNodeId) {
333
+ (0, core_bentley_1.assert)(maxNodeId > 0);
334
+ let nodeIds;
335
+ const outputFeature = FeatureTable_1.PackedFeature.createWithIndex();
336
+ for (const feature of table.iterable(outputFeature)) {
337
+ const nodeId = computeNodeId(feature);
338
+ (0, core_bentley_1.assert)(nodeId <= maxNodeId);
339
+ if (0 !== nodeId) {
340
+ if (!nodeIds) {
341
+ const size = table.numFeatures;
342
+ nodeIds = maxNodeId < 0x100 ? new Uint8Array(size) : (maxNodeId < 0x10000 ? new Uint16Array(size) : new Uint32Array(size));
343
+ }
344
+ nodeIds[feature.index] = nodeId;
345
+ }
346
+ }
347
+ return nodeIds;
348
+ }
349
+ //# sourceMappingURL=PackedFeatureTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PackedFeatureTable.js","sourceRoot":"","sources":["../../../src/internal/PackedFeatureTable.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 assert, Id64, Id64String, UintArray,\r\n} from \"@itwin/core-bentley\";\r\nimport { BatchType, ComputeNodeId, Feature, FeatureTable, ModelFeature, PackedFeature, PackedFeatureWithIndex, RenderFeatureTable } from \"../FeatureTable\";\r\nimport { GeometryClass } from \"../GeometryParams\";\r\n\r\n/**\r\n * An immutable, packed representation of a [[FeatureTable]]. The features are packed into a single array of 32-bit integer values,\r\n * wherein each feature occupies 3 32-bit integers.\r\n * @internal\r\n */\r\nexport class PackedFeatureTable implements RenderFeatureTable {\r\n public readonly data: Uint32Array;\r\n public readonly batchModelId: Id64String;\r\n public readonly batchModelIdPair: Id64.Uint32Pair;\r\n public readonly numFeatures: number;\r\n public readonly anyDefined: boolean;\r\n public readonly type: BatchType;\r\n public animationNodeIds?: UintArray;\r\n\r\n public get byteLength(): number { return this.data.byteLength; }\r\n\r\n /** Construct a PackedFeatureTable from the packed binary data.\r\n * This is used internally when deserializing Tiles in iMdl format.\r\n * @internal\r\n */\r\n public constructor(data: Uint32Array, modelId: Id64String, numFeatures: number, type: BatchType, animationNodeIds?: UintArray) {\r\n this.data = data;\r\n this.batchModelId = modelId;\r\n this.batchModelIdPair = Id64.getUint32Pair(modelId);\r\n this.numFeatures = numFeatures;\r\n this.type = type;\r\n this.animationNodeIds = animationNodeIds;\r\n\r\n switch (this.numFeatures) {\r\n case 0:\r\n this.anyDefined = false;\r\n break;\r\n case 1:\r\n this.anyDefined = ModelFeature.isDefined(this.getFeature(0, ModelFeature.create()));\r\n break;\r\n default:\r\n this.anyDefined = true;\r\n break;\r\n }\r\n\r\n assert(this.data.length >= this._subCategoriesOffset);\r\n assert(undefined === this.animationNodeIds || this.animationNodeIds.length === this.numFeatures);\r\n }\r\n\r\n /** Create a packed feature table from a [[FeatureTable]]. */\r\n public static pack(featureTable: FeatureTable): PackedFeatureTable {\r\n // We must determine how many subcategories we have ahead of time to compute the size of the Uint32Array, as\r\n // the array cannot be resized after it is created.\r\n // We are not too worried about this as FeatureTables created on the front-end will contain few if any features; those obtained from the\r\n // back-end arrive within tiles already in the packed format.\r\n const subcategories = new Map<string, number>();\r\n for (const iv of featureTable.getArray()) {\r\n const found = subcategories.get(iv.value.subCategoryId.toString());\r\n if (undefined === found)\r\n subcategories.set(iv.value.subCategoryId, subcategories.size);\r\n }\r\n\r\n // We need 3 32-bit integers per feature, plus 2 32-bit integers per subcategory.\r\n const subCategoriesOffset = 3 * featureTable.length;\r\n const nUint32s = subCategoriesOffset + 2 * subcategories.size;\r\n const uint32s = new Uint32Array(nUint32s);\r\n\r\n for (const iv of featureTable.getArray()) {\r\n const feature = iv.value;\r\n const index = iv.index * 3;\r\n\r\n let subCategoryIndex = subcategories.get(feature.subCategoryId)!;\r\n assert(undefined !== subCategoryIndex); // we inserted it above...\r\n subCategoryIndex |= (feature.geometryClass << 24);\r\n\r\n uint32s[index + 0] = Id64.getLowerUint32(feature.elementId);\r\n uint32s[index + 1] = Id64.getUpperUint32(feature.elementId);\r\n uint32s[index + 2] = subCategoryIndex;\r\n }\r\n\r\n subcategories.forEach((index: number, id: string, _map) => {\r\n const index32 = subCategoriesOffset + 2 * index;\r\n uint32s[index32 + 0] = Id64.getLowerUint32(id);\r\n uint32s[index32 + 1] = Id64.getUpperUint32(id);\r\n });\r\n\r\n return new PackedFeatureTable(uint32s, featureTable.modelId, featureTable.length, featureTable.type);\r\n }\r\n\r\n /** Retrieve the Feature associated with the specified index. */\r\n public getFeature(featureIndex: number, result: ModelFeature): ModelFeature {\r\n const packed = this.getPackedFeature(featureIndex, scratchPackedFeature);\r\n return ModelFeature.unpack(packed, result, this.batchModelId);\r\n }\r\n\r\n /** Returns the Feature associated with the specified index, or undefined if the index is out of range. */\r\n public findFeature(featureIndex: number, result: ModelFeature): ModelFeature | undefined {\r\n return featureIndex < this.numFeatures ? this.getFeature(featureIndex, result) : undefined;\r\n }\r\n\r\n /** @internal */\r\n public getElementIdPair(featureIndex: number, out?: Id64.Uint32Pair): Id64.Uint32Pair {\r\n out = out ?? { lower: 0, upper: 0 };\r\n assert(featureIndex < this.numFeatures);\r\n const offset = 3 * featureIndex;\r\n out.lower = this.data[offset];\r\n out.upper = this.data[offset + 1];\r\n return out;\r\n }\r\n\r\n /** @internal */\r\n public getSubCategoryIdPair(featureIndex: number): Id64.Uint32Pair {\r\n const index = 3 * featureIndex;\r\n let subCatIndex = this.data[index + 2];\r\n subCatIndex = (subCatIndex & 0x00ffffff) >>> 0;\r\n subCatIndex = subCatIndex * 2 + this._subCategoriesOffset;\r\n return { lower: this.data[subCatIndex], upper: this.data[subCatIndex + 1] };\r\n }\r\n\r\n /** @internal */\r\n public getAnimationNodeId(featureIndex: number): number {\r\n return undefined !== this.animationNodeIds && featureIndex < this.numFeatures ? this.animationNodeIds[featureIndex] : 0;\r\n }\r\n\r\n /** @internal */\r\n public getPackedFeature(featureIndex: number, result: PackedFeature): PackedFeature {\r\n assert(featureIndex < this.numFeatures);\r\n\r\n const index32 = 3 * featureIndex;\r\n result.elementId.lower = this.data[index32];\r\n result.elementId.upper = this.data[index32 + 1];\r\n\r\n const subCatIndexAndClass = this.data[index32 + 2];\r\n result.geometryClass = (subCatIndexAndClass >>> 24) & 0xff;\r\n\r\n let subCatIndex = (subCatIndexAndClass & 0x00ffffff) >>> 0;\r\n subCatIndex = subCatIndex * 2 + this._subCategoriesOffset;\r\n result.subCategoryId.lower = this.data[subCatIndex];\r\n result.subCategoryId.upper = this.data[subCatIndex + 1];\r\n\r\n result.animationNodeId = this.getAnimationNodeId(featureIndex);\r\n result.modelId.lower = this.batchModelIdPair.lower;\r\n result.modelId.upper = this.batchModelIdPair.upper;\r\n\r\n return result;\r\n }\r\n\r\n public getModelIdPair(_featureIndex: number, out: Id64.Uint32Pair): Id64.Uint32Pair {\r\n out.lower = this.batchModelIdPair.lower;\r\n out.upper = this.batchModelIdPair.upper;\r\n return out;\r\n }\r\n\r\n /** Returns the element ID of the Feature associated with the specified index, or undefined if the index is out of range. */\r\n public findElementId(featureIndex: number): Id64String | undefined {\r\n if (featureIndex >= this.numFeatures)\r\n return undefined;\r\n else\r\n return this.readId(3 * featureIndex);\r\n }\r\n\r\n /** Return true if this table contains exactly 1 feature. */\r\n public get isUniform(): boolean { return 1 === this.numFeatures; }\r\n\r\n /** If this table contains exactly 1 feature, return it. */\r\n public getUniform(result: ModelFeature): ModelFeature | undefined {\r\n return this.isUniform ? this.getFeature(0, result) : undefined;\r\n }\r\n\r\n public get isVolumeClassifier(): boolean { return BatchType.VolumeClassifier === this.type; }\r\n public get isPlanarClassifier(): boolean { return BatchType.VolumeClassifier === this.type; }\r\n public get isClassifier(): boolean { return this.isVolumeClassifier || this.isPlanarClassifier; }\r\n\r\n /** Unpack the features into a [[FeatureTable]]. */\r\n public unpack(): FeatureTable {\r\n const table = new FeatureTable(this.numFeatures, this.batchModelId);\r\n const feature = ModelFeature.create();\r\n for (let i = 0; i < this.numFeatures; i++) {\r\n this.getFeature(i, feature);\r\n table.insertWithIndex(new Feature(feature.elementId, feature.subCategoryId, feature.geometryClass), i);\r\n }\r\n\r\n return table;\r\n }\r\n\r\n public populateAnimationNodeIds(computeNodeId: ComputeNodeId, maxNodeId: number): void {\r\n assert(undefined === this.animationNodeIds);\r\n this.animationNodeIds = populateAnimationNodeIds(this, computeNodeId, maxNodeId);\r\n }\r\n\r\n public * iterator(output: PackedFeatureWithIndex): Iterator<PackedFeatureWithIndex> {\r\n for (let i = 0; i < this.numFeatures; i++) {\r\n this.getPackedFeature(i, output);\r\n output.index = i;\r\n yield output;\r\n }\r\n }\r\n\r\n public iterable(output: PackedFeatureWithIndex): Iterable<PackedFeatureWithIndex> {\r\n return {\r\n [Symbol.iterator]: () => this.iterator(output),\r\n };\r\n }\r\n\r\n private get _subCategoriesOffset(): number { return this.numFeatures * 3; }\r\n\r\n private readId(offset32: number): Id64String {\r\n return Id64.fromUint32Pair(this.data[offset32], this.data[offset32 + 1]);\r\n }\r\n}\r\n\r\ninterface PackedFeatureModelEntry {\r\n lastFeatureIndex: number;\r\n idLower: number;\r\n idUpper: number;\r\n}\r\n\r\nconst scratchPackedFeatureModelEntry = { lastFeatureIndex: -1, idLower: -1, idUpper: -1 };\r\n\r\n/** A table of model Ids associated with a [[MultiModelPackedFeatureTable]].\r\n * The feature indices in the packed feature table are grouped together by model, such that the first N features belong to model 1, the next M features to model 2, and so on.\r\n * The model table itself consists of one entry per model, where each entry looks like:\r\n * indexOfLastFeatureInModel: u32\r\n * modelId: u64\r\n * The modelId associated with a feature can therefore be derived by finding the entry in the model table with the highest indexOfLastFeatureInModel no greater than the feature index.\r\n * This lookup can be optimized using binary search.\r\n * Moreover, while iterating the feature table in sequence, the model table can be iterated in parallel so that no per-feature lookup of model Id is required.\r\n * @internal\r\n */\r\nexport class PackedFeatureModelTable {\r\n private readonly _data: Uint32Array;\r\n\r\n public constructor(data: Uint32Array) {\r\n this._data = data;\r\n assert(this._data.length % 3 === 0);\r\n }\r\n\r\n /** The number of models in the table. */\r\n public get length(): number {\r\n return this._data.length / 3;\r\n }\r\n\r\n public get byteLength(): number {\r\n return this._data.byteLength;\r\n }\r\n\r\n private getLastFeatureIndex(modelIndex: number): number {\r\n return this._data[modelIndex * 3];\r\n }\r\n\r\n public getEntry(modelIndex: number, result: PackedFeatureModelEntry): PackedFeatureModelEntry {\r\n if (modelIndex >= this.length) {\r\n result.idLower = result.idUpper = 0;\r\n result.lastFeatureIndex = Number.MAX_SAFE_INTEGER;\r\n return result;\r\n }\r\n\r\n const index = modelIndex * 3;\r\n result.lastFeatureIndex = this._data[index + 0];\r\n result.idLower = this._data[index + 1];\r\n result.idUpper = this._data[index + 2];\r\n return result;\r\n }\r\n\r\n /** Get the Id of the model associated with the specified feature, or an invalid Id if the feature is not associated with any model. */\r\n public getModelIdPair(featureIndex: number, result?: Id64.Uint32Pair): Id64.Uint32Pair {\r\n if (!result)\r\n result = { lower: 0, upper: 0 };\r\n else\r\n result.lower = result.upper = 0;\r\n\r\n let first = 0;\r\n const last = this.length;\r\n let count = last;\r\n while (count > 0) {\r\n const step = Math.floor(count / 2);\r\n const mid = first + step;\r\n const lastFeatureIndex = this.getLastFeatureIndex(mid);\r\n if (featureIndex > lastFeatureIndex) {\r\n first = mid + 1;\r\n count -= step + 1;\r\n } else {\r\n count = step;\r\n }\r\n }\r\n\r\n if (first < last) {\r\n result.lower = this._data[first * 3 + 1];\r\n result.upper = this._data[first * 3 + 2];\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\n/** A PackedFeatureTable with a PackedFeatureModelTable appended to it, capable of storing features belonging to more than one model.\r\n * @internal\r\n */\r\nexport class MultiModelPackedFeatureTable implements RenderFeatureTable {\r\n private readonly _features: PackedFeatureTable;\r\n private readonly _models: PackedFeatureModelTable;\r\n\r\n public constructor(features: PackedFeatureTable, models: PackedFeatureModelTable) {\r\n this._features = features;\r\n this._models = models;\r\n }\r\n\r\n public static create(data: Uint32Array, batchModelId: Id64String, numFeatures: number, type: BatchType, numSubCategories: number): MultiModelPackedFeatureTable {\r\n const modelTableOffset = 3 * numFeatures + 2 * numSubCategories;\r\n const featureData = data.subarray(0, modelTableOffset);\r\n const features = new PackedFeatureTable(featureData, batchModelId, numFeatures, type);\r\n\r\n const modelData = data.subarray(modelTableOffset);\r\n const models = new PackedFeatureModelTable(modelData);\r\n\r\n return new MultiModelPackedFeatureTable(features, models);\r\n }\r\n\r\n public get batchModelId() { return this._features.batchModelId; }\r\n public get batchModelIdPair() { return this._features.batchModelIdPair; }\r\n public get numFeatures() { return this._features.numFeatures; }\r\n public get type() { return this._features.type; }\r\n public get animationNodeIds(): UintArray | undefined { return this._features.animationNodeIds; }\r\n public set animationNodeIds(ids: UintArray | undefined) { this._features.animationNodeIds = ids; }\r\n\r\n public get byteLength() {\r\n return this._features.byteLength + this._models.byteLength;\r\n }\r\n\r\n public getPackedFeature(featureIndex: number, result: PackedFeature): PackedFeature {\r\n this._features.getPackedFeature(featureIndex, result);\r\n this._models.getModelIdPair(featureIndex, result.modelId);\r\n return result;\r\n }\r\n\r\n public getFeature(featureIndex: number, result: ModelFeature): ModelFeature {\r\n const packed = this.getPackedFeature(featureIndex, scratchPackedFeature);\r\n return ModelFeature.unpack(packed, result);\r\n }\r\n\r\n public findFeature(featureIndex: number, result: ModelFeature): ModelFeature | undefined {\r\n return featureIndex < this.numFeatures ? this.getFeature(featureIndex, result) : undefined;\r\n }\r\n\r\n public getElementIdPair(featureIndex: number, out: Id64.Uint32Pair): Id64.Uint32Pair {\r\n return this._features.getElementIdPair(featureIndex, out);\r\n }\r\n\r\n public getModelIdPair(featureIndex: number, out: Id64.Uint32Pair): Id64.Uint32Pair {\r\n this._models.getModelIdPair(featureIndex, out);\r\n return out;\r\n }\r\n\r\n public findElementId(featureIndex: number): Id64String | undefined {\r\n return this._features.findElementId(featureIndex);\r\n }\r\n\r\n public * iterator(output: PackedFeatureWithIndex): Iterator<PackedFeatureWithIndex> {\r\n // Rather than perform a binary search on the model table to find each feature's model Id, traverse the model table in parallel with the feature table.\r\n let modelIndex = 0;\r\n const modelEntry = this._models.getEntry(modelIndex, scratchPackedFeatureModelEntry);\r\n\r\n for (let featureIndex = 0; featureIndex < this.numFeatures; featureIndex++) {\r\n if (featureIndex > modelEntry.lastFeatureIndex)\r\n this._models.getEntry(++modelIndex, modelEntry);\r\n\r\n this._features.getPackedFeature(featureIndex, output);\r\n output.modelId.lower = modelEntry.idLower;\r\n output.modelId.upper = modelEntry.idUpper;\r\n output.index = featureIndex;\r\n yield output;\r\n }\r\n }\r\n\r\n public iterable(output: PackedFeatureWithIndex): Iterable<PackedFeatureWithIndex> {\r\n return {\r\n [Symbol.iterator]: () => this.iterator(output),\r\n };\r\n }\r\n\r\n public getAnimationNodeId(featureIndex: number): number {\r\n return this._features.getAnimationNodeId(featureIndex);\r\n }\r\n\r\n public populateAnimationNodeIds(computeNodeId: ComputeNodeId, maxNodeId: number): void {\r\n this._features.animationNodeIds = populateAnimationNodeIds(this, computeNodeId, maxNodeId);\r\n }\r\n}\r\n\r\nexport function createPackedFeature(): PackedFeature {\r\n const pair = { upper: 0, lower: 0 };\r\n return {\r\n modelId: { ...pair },\r\n elementId: { ...pair },\r\n subCategoryId: { ...pair },\r\n geometryClass: GeometryClass.Primary,\r\n animationNodeId: 0,\r\n };\r\n}\r\n\r\nconst scratchPackedFeature = createPackedFeature();\r\n\r\nfunction populateAnimationNodeIds(table: RenderFeatureTable, computeNodeId: ComputeNodeId, maxNodeId: number): UintArray | undefined {\r\n assert(maxNodeId > 0);\r\n\r\n let nodeIds;\r\n const outputFeature = PackedFeature.createWithIndex();\r\n for (const feature of table.iterable(outputFeature)) {\r\n const nodeId = computeNodeId(feature);\r\n assert(nodeId <= maxNodeId);\r\n if (0 !== nodeId) {\r\n if (!nodeIds) {\r\n const size = table.numFeatures;\r\n nodeIds = maxNodeId < 0x100 ? new Uint8Array(size) : (maxNodeId < 0x10000 ? new Uint16Array(size) : new Uint32Array(size));\r\n }\r\n\r\n nodeIds[feature.index] = nodeId;\r\n }\r\n }\r\n\r\n return nodeIds;\r\n}\r\n\r\n"]}
@@ -0,0 +1,52 @@
1
+ /** @packageDocumentation
2
+ * @module Rendering
3
+ */
4
+ import { OctEncodedNormalPair } from "../OctEncodedNormal";
5
+ import { PolylineIndices } from "../RenderPolyline";
6
+ /** @internal */
7
+ export declare class MeshPolyline {
8
+ readonly indices: PolylineIndices;
9
+ constructor(indices?: PolylineIndices);
10
+ addIndex(index: number): void;
11
+ clear(): void;
12
+ }
13
+ /** @internal */
14
+ export type MeshPolylineList = MeshPolyline[];
15
+ /** @internal */
16
+ export declare class MeshEdge {
17
+ indices: number[];
18
+ constructor(index0?: number, index1?: number);
19
+ compareTo(other: MeshEdge): number;
20
+ }
21
+ /** @internal */
22
+ export declare class MeshEdges {
23
+ visible: MeshEdge[];
24
+ silhouette: MeshEdge[];
25
+ polylines: MeshPolylineList;
26
+ silhouetteNormals: OctEncodedNormalPair[];
27
+ constructor();
28
+ }
29
+ /** @internal */
30
+ export declare class EdgeArgs {
31
+ edges?: MeshEdge[];
32
+ init(meshEdges?: MeshEdges): boolean;
33
+ clear(): void;
34
+ get isValid(): boolean;
35
+ get numEdges(): number;
36
+ }
37
+ /** @internal */
38
+ export declare class SilhouetteEdgeArgs extends EdgeArgs {
39
+ normals?: OctEncodedNormalPair[];
40
+ init(meshEdges?: MeshEdges): boolean;
41
+ clear(): void;
42
+ }
43
+ /** @internal */
44
+ export declare class PolylineEdgeArgs {
45
+ lines?: PolylineIndices[];
46
+ constructor(lines?: PolylineIndices[]);
47
+ init(lines?: PolylineIndices[]): boolean;
48
+ get numLines(): number;
49
+ get isValid(): boolean;
50
+ clear(): void;
51
+ }
52
+ //# sourceMappingURL=RenderMesh.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RenderMesh.d.ts","sourceRoot":"","sources":["../../../src/internal/RenderMesh.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,gBAAgB;AAChB,qBAAa,YAAY;IACvB,SAAgB,OAAO,EAAE,eAAe,CAAC;gBAEtB,OAAO,GAAE,eAAoB;IAIzC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAMtB,KAAK;CACb;AAED,gBAAgB;AAChB,MAAM,MAAM,gBAAgB,GAAG,YAAY,EAAE,CAAC;AAE9C,gBAAgB;AAChB,qBAAa,QAAQ;IACZ,OAAO,WAAU;gBAEL,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAY5C,SAAS,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM;CAO1C;AAED,gBAAgB;AAChB,qBAAa,SAAS;IACb,OAAO,EAAE,QAAQ,EAAE,CAAM;IACzB,UAAU,EAAE,QAAQ,EAAE,CAAM;IAC5B,SAAS,EAAE,gBAAgB,CAAM;IACjC,iBAAiB,EAAE,oBAAoB,EAAE,CAAM;;CAEvD;AAED,gBAAgB;AAChB,qBAAa,QAAQ;IACZ,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IAEnB,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO;IAQpC,KAAK,IAAI,IAAI;IACpB,IAAW,OAAO,IAAI,OAAO,CAA8B;IAC3D,IAAW,QAAQ,WAA+D;CACnF;AAED,gBAAgB;AAChB,qBAAa,kBAAmB,SAAQ,QAAQ;IACvC,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAExB,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS;IAU1B,KAAK;CAItB;AAED,gBAAgB;AAChB,qBAAa,gBAAgB;IACpB,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;gBAEd,KAAK,CAAC,EAAE,eAAe,EAAE;IAErC,IAAI,CAAC,KAAK,CAAC,EAAE,eAAe,EAAE,GAAG,OAAO;IAK/C,IAAW,QAAQ,WAA+D;IAClF,IAAW,OAAO,YAAgC;IAC3C,KAAK;CACb"}