@itwin/core-common 4.0.0-dev.8 → 4.0.0-dev.81

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 (986) hide show
  1. package/CHANGELOG.md +52 -1
  2. package/lib/cjs/AmbientOcclusion.d.ts +49 -49
  3. package/lib/cjs/AmbientOcclusion.js +55 -55
  4. package/lib/cjs/AnalysisStyle.d.ts +134 -134
  5. package/lib/cjs/AnalysisStyle.js +165 -165
  6. package/lib/cjs/AnalysisStyle.js.map +1 -1
  7. package/lib/cjs/Atmosphere.d.ts +99 -0
  8. package/lib/cjs/Atmosphere.d.ts.map +1 -0
  9. package/lib/cjs/Atmosphere.js +134 -0
  10. package/lib/cjs/Atmosphere.js.map +1 -0
  11. package/lib/cjs/AuthorizationClient.d.ts +17 -17
  12. package/lib/cjs/AuthorizationClient.js +9 -9
  13. package/lib/cjs/BackendTypes.d.ts +13 -12
  14. package/lib/cjs/BackendTypes.d.ts.map +1 -1
  15. package/lib/cjs/BackendTypes.js +9 -9
  16. package/lib/cjs/BackendTypes.js.map +1 -1
  17. package/lib/cjs/BackgroundMapProvider.d.ts +51 -51
  18. package/lib/cjs/BackgroundMapProvider.d.ts.map +1 -1
  19. package/lib/cjs/BackgroundMapProvider.js +67 -68
  20. package/lib/cjs/BackgroundMapProvider.js.map +1 -1
  21. package/lib/cjs/BackgroundMapSettings.d.ts +136 -136
  22. package/lib/cjs/BackgroundMapSettings.d.ts.map +1 -1
  23. package/lib/cjs/BackgroundMapSettings.js +154 -156
  24. package/lib/cjs/BackgroundMapSettings.js.map +1 -1
  25. package/lib/cjs/Base64EncodedString.d.ts +32 -32
  26. package/lib/cjs/Base64EncodedString.d.ts.map +1 -1
  27. package/lib/cjs/Base64EncodedString.js +66 -66
  28. package/lib/cjs/Base64EncodedString.js.map +1 -1
  29. package/lib/cjs/BlobReader.d.ts +31 -31
  30. package/lib/cjs/BlobReader.js +84 -84
  31. package/lib/cjs/BriefcaseTypes.d.ts +191 -189
  32. package/lib/cjs/BriefcaseTypes.d.ts.map +1 -1
  33. package/lib/cjs/BriefcaseTypes.js +95 -95
  34. package/lib/cjs/BriefcaseTypes.js.map +1 -1
  35. package/lib/cjs/Camera.d.ts +42 -42
  36. package/lib/cjs/Camera.js +62 -62
  37. package/lib/cjs/Camera.js.map +1 -1
  38. package/lib/cjs/ChangedElements.d.ts +85 -85
  39. package/lib/cjs/ChangedElements.js +23 -23
  40. package/lib/cjs/ChangedEntities.d.ts +45 -45
  41. package/lib/cjs/ChangedEntities.d.ts.map +1 -1
  42. package/lib/cjs/ChangedEntities.js +9 -9
  43. package/lib/cjs/ChangesetProps.d.ts +98 -98
  44. package/lib/cjs/ChangesetProps.d.ts.map +1 -1
  45. package/lib/cjs/ChangesetProps.js +22 -22
  46. package/lib/cjs/ClipStyle.d.ts +89 -89
  47. package/lib/cjs/ClipStyle.js +121 -123
  48. package/lib/cjs/ClipStyle.js.map +1 -1
  49. package/lib/cjs/Code.d.ts +278 -277
  50. package/lib/cjs/Code.d.ts.map +1 -1
  51. package/lib/cjs/Code.js +271 -269
  52. package/lib/cjs/Code.js.map +1 -1
  53. package/lib/cjs/ColorByName.d.ts +161 -161
  54. package/lib/cjs/ColorByName.js +169 -169
  55. package/lib/cjs/ColorDef.d.ts +210 -208
  56. package/lib/cjs/ColorDef.d.ts.map +1 -1
  57. package/lib/cjs/ColorDef.js +572 -571
  58. package/lib/cjs/ColorDef.js.map +1 -1
  59. package/lib/cjs/CommonLoggerCategory.d.ts +18 -18
  60. package/lib/cjs/CommonLoggerCategory.js +26 -26
  61. package/lib/cjs/ConcurrentQuery.d.ts +421 -421
  62. package/lib/cjs/ConcurrentQuery.d.ts.map +1 -1
  63. package/lib/cjs/ConcurrentQuery.js +552 -552
  64. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  65. package/lib/cjs/ContextRealityModel.d.ts +303 -303
  66. package/lib/cjs/ContextRealityModel.js +371 -373
  67. package/lib/cjs/ContextRealityModel.js.map +1 -1
  68. package/lib/cjs/DisplayStyleSettings.d.ts +593 -588
  69. package/lib/cjs/DisplayStyleSettings.d.ts.map +1 -1
  70. package/lib/cjs/DisplayStyleSettings.js +990 -985
  71. package/lib/cjs/DisplayStyleSettings.js.map +1 -1
  72. package/lib/cjs/ECSchemaProps.d.ts +39 -39
  73. package/lib/cjs/ECSchemaProps.js +9 -9
  74. package/lib/cjs/ECSqlReader.d.ts +72 -70
  75. package/lib/cjs/ECSqlReader.d.ts.map +1 -1
  76. package/lib/cjs/ECSqlReader.js +297 -280
  77. package/lib/cjs/ECSqlReader.js.map +1 -1
  78. package/lib/cjs/ECSqlTypes.d.ts +128 -128
  79. package/lib/cjs/ECSqlTypes.js +189 -189
  80. package/lib/cjs/ElementMesh.d.ts +39 -39
  81. package/lib/cjs/ElementMesh.js +56 -56
  82. package/lib/cjs/ElementProps.d.ts +483 -483
  83. package/lib/cjs/ElementProps.d.ts.map +1 -1
  84. package/lib/cjs/ElementProps.js +99 -99
  85. package/lib/cjs/ElementProps.js.map +1 -1
  86. package/lib/cjs/EmphasizeElementsProps.d.ts +55 -55
  87. package/lib/cjs/EmphasizeElementsProps.js +25 -25
  88. package/lib/cjs/EntityProps.d.ts +177 -177
  89. package/lib/cjs/EntityProps.d.ts.map +1 -1
  90. package/lib/cjs/EntityProps.js +113 -113
  91. package/lib/cjs/EntityReference.d.ts +51 -51
  92. package/lib/cjs/EntityReference.d.ts.map +1 -1
  93. package/lib/cjs/EntityReference.js +56 -56
  94. package/lib/cjs/Environment.d.ts +74 -61
  95. package/lib/cjs/Environment.d.ts.map +1 -1
  96. package/lib/cjs/Environment.js +78 -73
  97. package/lib/cjs/Environment.js.map +1 -1
  98. package/lib/cjs/FeatureIndex.d.ts +39 -39
  99. package/lib/cjs/FeatureIndex.js +63 -63
  100. package/lib/cjs/FeatureIndex.js.map +1 -1
  101. package/lib/cjs/FeatureSymbology.d.ts +449 -444
  102. package/lib/cjs/FeatureSymbology.d.ts.map +1 -1
  103. package/lib/cjs/FeatureSymbology.js +618 -614
  104. package/lib/cjs/FeatureSymbology.js.map +1 -1
  105. package/lib/cjs/FeatureTable.d.ts +248 -141
  106. package/lib/cjs/FeatureTable.d.ts.map +1 -1
  107. package/lib/cjs/FeatureTable.js +470 -278
  108. package/lib/cjs/FeatureTable.js.map +1 -1
  109. package/lib/cjs/Fonts.d.ts +51 -51
  110. package/lib/cjs/Fonts.d.ts.map +1 -1
  111. package/lib/cjs/Fonts.js +53 -53
  112. package/lib/cjs/Frustum.d.ts +114 -114
  113. package/lib/cjs/Frustum.js +292 -292
  114. package/lib/cjs/GeoCoordinateServices.d.ts +123 -119
  115. package/lib/cjs/GeoCoordinateServices.d.ts.map +1 -1
  116. package/lib/cjs/GeoCoordinateServices.js +81 -80
  117. package/lib/cjs/GeoCoordinateServices.js.map +1 -1
  118. package/lib/cjs/GeometryContainment.d.ts +28 -28
  119. package/lib/cjs/GeometryContainment.js +9 -9
  120. package/lib/cjs/GeometryParams.d.ts +130 -130
  121. package/lib/cjs/GeometryParams.js +174 -174
  122. package/lib/cjs/GeometrySummary.d.ts +45 -45
  123. package/lib/cjs/GeometrySummary.js +23 -23
  124. package/lib/cjs/Gradient.d.ts +139 -139
  125. package/lib/cjs/Gradient.js +453 -455
  126. package/lib/cjs/Gradient.js.map +1 -1
  127. package/lib/cjs/GraphicParams.d.ts +58 -58
  128. package/lib/cjs/GraphicParams.js +85 -85
  129. package/lib/cjs/GraphicParams.js.map +1 -1
  130. package/lib/cjs/GroundPlane.d.ts +52 -52
  131. package/lib/cjs/GroundPlane.d.ts.map +1 -1
  132. package/lib/cjs/GroundPlane.js +63 -64
  133. package/lib/cjs/GroundPlane.js.map +1 -1
  134. package/lib/cjs/HSLColor.d.ts +20 -20
  135. package/lib/cjs/HSLColor.js +32 -32
  136. package/lib/cjs/HSLColor.js.map +1 -1
  137. package/lib/cjs/HSVColor.d.ts +30 -30
  138. package/lib/cjs/HSVColor.js +59 -59
  139. package/lib/cjs/HSVColor.js.map +1 -1
  140. package/lib/cjs/HiddenLine.d.ts +97 -97
  141. package/lib/cjs/HiddenLine.js +160 -162
  142. package/lib/cjs/HiddenLine.js.map +1 -1
  143. package/lib/cjs/Hilite.d.ts +50 -50
  144. package/lib/cjs/Hilite.js +64 -64
  145. package/lib/cjs/Hilite.js.map +1 -1
  146. package/lib/cjs/IModel.d.ts +358 -359
  147. package/lib/cjs/IModel.d.ts.map +1 -1
  148. package/lib/cjs/IModel.js +347 -347
  149. package/lib/cjs/IModel.js.map +1 -1
  150. package/lib/cjs/IModelError.d.ts +42 -42
  151. package/lib/cjs/IModelError.d.ts.map +1 -1
  152. package/lib/cjs/IModelError.js +71 -71
  153. package/lib/cjs/IModelError.js.map +1 -1
  154. package/lib/cjs/IModelVersion.d.ts +68 -68
  155. package/lib/cjs/IModelVersion.d.ts.map +1 -1
  156. package/lib/cjs/IModelVersion.js +79 -79
  157. package/lib/cjs/Image.d.ts +86 -86
  158. package/lib/cjs/Image.js +128 -128
  159. package/lib/cjs/Image.js.map +1 -1
  160. package/lib/cjs/IpcAppProps.d.ts +141 -141
  161. package/lib/cjs/IpcAppProps.js +23 -23
  162. package/lib/cjs/LightSettings.d.ts +224 -224
  163. package/lib/cjs/LightSettings.js +304 -309
  164. package/lib/cjs/LightSettings.js.map +1 -1
  165. package/lib/cjs/LinePixels.d.ts +34 -34
  166. package/lib/cjs/LinePixels.js +42 -42
  167. package/lib/cjs/Localization.d.ts +117 -113
  168. package/lib/cjs/Localization.d.ts.map +1 -1
  169. package/lib/cjs/Localization.js +33 -33
  170. package/lib/cjs/Localization.js.map +1 -1
  171. package/lib/cjs/MapImagerySettings.d.ts +62 -62
  172. package/lib/cjs/MapImagerySettings.d.ts.map +1 -1
  173. package/lib/cjs/MapImagerySettings.js +80 -80
  174. package/lib/cjs/MapImagerySettings.js.map +1 -1
  175. package/lib/cjs/MapLayerSettings.d.ts +272 -272
  176. package/lib/cjs/MapLayerSettings.d.ts.map +1 -1
  177. package/lib/cjs/MapLayerSettings.js +407 -411
  178. package/lib/cjs/MapLayerSettings.js.map +1 -1
  179. package/lib/cjs/MassProperties.d.ts +64 -64
  180. package/lib/cjs/MassProperties.js +23 -23
  181. package/lib/cjs/MaterialProps.d.ts +153 -153
  182. package/lib/cjs/MaterialProps.d.ts.map +1 -1
  183. package/lib/cjs/MaterialProps.js +35 -35
  184. package/lib/cjs/ModelClipGroup.d.ts +67 -67
  185. package/lib/cjs/ModelClipGroup.js +96 -98
  186. package/lib/cjs/ModelClipGroup.js.map +1 -1
  187. package/lib/cjs/ModelGeometryChanges.d.ts +107 -107
  188. package/lib/cjs/ModelGeometryChanges.d.ts.map +1 -1
  189. package/lib/cjs/ModelGeometryChanges.js +83 -83
  190. package/lib/cjs/ModelProps.d.ts +67 -67
  191. package/lib/cjs/ModelProps.js +9 -9
  192. package/lib/cjs/NativeAppProps.d.ts +122 -122
  193. package/lib/cjs/NativeAppProps.d.ts.map +1 -1
  194. package/lib/cjs/NativeAppProps.js +30 -30
  195. package/lib/cjs/OctEncodedNormal.d.ts +33 -33
  196. package/lib/cjs/OctEncodedNormal.js +98 -98
  197. package/lib/cjs/PlanProjectionSettings.d.ts +47 -47
  198. package/lib/cjs/PlanProjectionSettings.js +63 -63
  199. package/lib/cjs/PlanProjectionSettings.js.map +1 -1
  200. package/lib/cjs/PlanarClipMask.d.ts +177 -177
  201. package/lib/cjs/PlanarClipMask.js +136 -136
  202. package/lib/cjs/PlanarClipMask.js.map +1 -1
  203. package/lib/cjs/QPoint.d.ts +479 -479
  204. package/lib/cjs/QPoint.js +824 -826
  205. package/lib/cjs/QPoint.js.map +1 -1
  206. package/lib/cjs/RealityDataAccessProps.d.ts +41 -41
  207. package/lib/cjs/RealityDataAccessProps.js +19 -19
  208. package/lib/cjs/RealityModelDisplaySettings.d.ts +183 -183
  209. package/lib/cjs/RealityModelDisplaySettings.d.ts.map +1 -1
  210. package/lib/cjs/RealityModelDisplaySettings.js +141 -142
  211. package/lib/cjs/RealityModelDisplaySettings.js.map +1 -1
  212. package/lib/cjs/Render.d.ts +89 -89
  213. package/lib/cjs/Render.js +177 -177
  214. package/lib/cjs/RenderMaterial.d.ts +58 -58
  215. package/lib/cjs/RenderMaterial.js +75 -76
  216. package/lib/cjs/RenderMaterial.js.map +1 -1
  217. package/lib/cjs/RenderSchedule.d.ts +543 -543
  218. package/lib/cjs/RenderSchedule.js +992 -1002
  219. package/lib/cjs/RenderSchedule.js.map +1 -1
  220. package/lib/cjs/RenderTexture.d.ts +70 -70
  221. package/lib/cjs/RenderTexture.d.ts.map +1 -1
  222. package/lib/cjs/RenderTexture.js +59 -59
  223. package/lib/cjs/RenderTexture.js.map +1 -1
  224. package/lib/cjs/RgbColor.d.ts +47 -47
  225. package/lib/cjs/RgbColor.js +77 -77
  226. package/lib/cjs/RpcInterface.d.ts +40 -33
  227. package/lib/cjs/RpcInterface.d.ts.map +1 -1
  228. package/lib/cjs/RpcInterface.js +137 -137
  229. package/lib/cjs/RpcInterface.js.map +1 -1
  230. package/lib/cjs/RpcManager.d.ts +40 -40
  231. package/lib/cjs/RpcManager.js +55 -55
  232. package/lib/cjs/RpcManager.js.map +1 -1
  233. package/lib/cjs/SessionProps.d.ts +16 -16
  234. package/lib/cjs/SessionProps.js +9 -9
  235. package/lib/cjs/SkyBox.d.ts +217 -215
  236. package/lib/cjs/SkyBox.d.ts.map +1 -1
  237. package/lib/cjs/SkyBox.js +209 -210
  238. package/lib/cjs/SkyBox.js.map +1 -1
  239. package/lib/cjs/Snapping.d.ts +49 -49
  240. package/lib/cjs/Snapping.js +9 -9
  241. package/lib/cjs/SolarCalculate.d.ts +27 -27
  242. package/lib/cjs/SolarCalculate.js +211 -211
  243. package/lib/cjs/SolarShadows.d.ts +35 -35
  244. package/lib/cjs/SolarShadows.js +61 -62
  245. package/lib/cjs/SolarShadows.js.map +1 -1
  246. package/lib/cjs/SpatialClassification.d.ts +208 -208
  247. package/lib/cjs/SpatialClassification.js +339 -340
  248. package/lib/cjs/SpatialClassification.js.map +1 -1
  249. package/lib/cjs/SubCategoryAppearance.d.ts +91 -91
  250. package/lib/cjs/SubCategoryAppearance.js +96 -96
  251. package/lib/cjs/SubCategoryAppearance.js.map +1 -1
  252. package/lib/cjs/SubCategoryOverride.d.ts +46 -46
  253. package/lib/cjs/SubCategoryOverride.js +104 -104
  254. package/lib/cjs/SubCategoryOverride.js.map +1 -1
  255. package/lib/cjs/TerrainSettings.d.ts +82 -82
  256. package/lib/cjs/TerrainSettings.d.ts.map +1 -1
  257. package/lib/cjs/TerrainSettings.js +100 -102
  258. package/lib/cjs/TerrainSettings.js.map +1 -1
  259. package/lib/cjs/TextureMapping.d.ts +151 -118
  260. package/lib/cjs/TextureMapping.d.ts.map +1 -1
  261. package/lib/cjs/TextureMapping.js +180 -174
  262. package/lib/cjs/TextureMapping.js.map +1 -1
  263. package/lib/cjs/TextureProps.d.ts +65 -65
  264. package/lib/cjs/TextureProps.js +28 -28
  265. package/lib/cjs/ThematicDisplay.d.ts +230 -230
  266. package/lib/cjs/ThematicDisplay.js +343 -344
  267. package/lib/cjs/ThematicDisplay.js.map +1 -1
  268. package/lib/cjs/Thumbnail.d.ts +26 -26
  269. package/lib/cjs/Thumbnail.js +9 -9
  270. package/lib/cjs/TileProps.d.ts +88 -82
  271. package/lib/cjs/TileProps.d.ts.map +1 -1
  272. package/lib/cjs/TileProps.js +29 -29
  273. package/lib/cjs/TileProps.js.map +1 -1
  274. package/lib/cjs/Tween.d.ts +191 -191
  275. package/lib/cjs/Tween.d.ts.map +1 -1
  276. package/lib/cjs/Tween.js +570 -570
  277. package/lib/cjs/TxnAction.d.ts +21 -21
  278. package/lib/cjs/TxnAction.js +29 -29
  279. package/lib/cjs/ViewDetails.d.ts +125 -125
  280. package/lib/cjs/ViewDetails.js +166 -166
  281. package/lib/cjs/ViewDetails.js.map +1 -1
  282. package/lib/cjs/ViewFlags.d.ts +287 -287
  283. package/lib/cjs/ViewFlags.d.ts.map +1 -1
  284. package/lib/cjs/ViewFlags.js +367 -368
  285. package/lib/cjs/ViewFlags.js.map +1 -1
  286. package/lib/cjs/ViewProps.d.ts +205 -205
  287. package/lib/cjs/ViewProps.js +9 -9
  288. package/lib/cjs/WhiteOnWhiteReversalSettings.d.ts +36 -36
  289. package/lib/cjs/WhiteOnWhiteReversalSettings.js +37 -37
  290. package/lib/cjs/WhiteOnWhiteReversalSettings.js.map +1 -1
  291. package/lib/cjs/core-common.d.ts +244 -244
  292. package/lib/cjs/core-common.d.ts.map +1 -1
  293. package/lib/cjs/core-common.js +264 -260
  294. package/lib/cjs/core-common.js.map +1 -1
  295. package/lib/cjs/domains/FunctionalElementProps.d.ts +11 -11
  296. package/lib/cjs/domains/FunctionalElementProps.js +9 -9
  297. package/lib/cjs/domains/GenericElementProps.d.ts +18 -18
  298. package/lib/cjs/domains/GenericElementProps.js +9 -9
  299. package/lib/cjs/geometry/AdditionalTransform.d.ts +84 -84
  300. package/lib/cjs/geometry/AdditionalTransform.js +85 -85
  301. package/lib/cjs/geometry/AreaPattern.d.ts +82 -82
  302. package/lib/cjs/geometry/AreaPattern.js +203 -204
  303. package/lib/cjs/geometry/AreaPattern.js.map +1 -1
  304. package/lib/cjs/geometry/BoundingSphere.d.ts +27 -27
  305. package/lib/cjs/geometry/BoundingSphere.js +44 -44
  306. package/lib/cjs/geometry/BoundingSphere.js.map +1 -1
  307. package/lib/cjs/geometry/Cartographic.d.ts +137 -137
  308. package/lib/cjs/geometry/Cartographic.js +345 -345
  309. package/lib/cjs/geometry/Cartographic.js.map +1 -1
  310. package/lib/cjs/geometry/CoordinateReferenceSystem.d.ts +269 -269
  311. package/lib/cjs/geometry/CoordinateReferenceSystem.d.ts.map +1 -1
  312. package/lib/cjs/geometry/CoordinateReferenceSystem.js +260 -261
  313. package/lib/cjs/geometry/CoordinateReferenceSystem.js.map +1 -1
  314. package/lib/cjs/geometry/ElementGeometry.d.ts +402 -402
  315. package/lib/cjs/geometry/ElementGeometry.d.ts.map +1 -1
  316. package/lib/cjs/geometry/ElementGeometry.js +1719 -1719
  317. package/lib/cjs/geometry/ElementGeometry.js.map +1 -1
  318. package/lib/cjs/geometry/ElementGeometryFB.d.ts +2372 -2372
  319. package/lib/cjs/geometry/ElementGeometryFB.js +3814 -3814
  320. package/lib/cjs/geometry/ElementGeometryFB.js.map +1 -1
  321. package/lib/cjs/geometry/FrustumPlanes.d.ts +83 -81
  322. package/lib/cjs/geometry/FrustumPlanes.d.ts.map +1 -1
  323. package/lib/cjs/geometry/FrustumPlanes.js +227 -193
  324. package/lib/cjs/geometry/FrustumPlanes.js.map +1 -1
  325. package/lib/cjs/geometry/GeodeticDatum.d.ts +409 -409
  326. package/lib/cjs/geometry/GeodeticDatum.d.ts.map +1 -1
  327. package/lib/cjs/geometry/GeodeticDatum.js +400 -401
  328. package/lib/cjs/geometry/GeodeticDatum.js.map +1 -1
  329. package/lib/cjs/geometry/GeodeticEllipsoid.d.ts +72 -72
  330. package/lib/cjs/geometry/GeodeticEllipsoid.js +71 -72
  331. package/lib/cjs/geometry/GeodeticEllipsoid.js.map +1 -1
  332. package/lib/cjs/geometry/GeometryStream.d.ts +347 -347
  333. package/lib/cjs/geometry/GeometryStream.d.ts.map +1 -1
  334. package/lib/cjs/geometry/GeometryStream.js +468 -469
  335. package/lib/cjs/geometry/GeometryStream.js.map +1 -1
  336. package/lib/cjs/geometry/ImageGraphic.d.ts +74 -74
  337. package/lib/cjs/geometry/ImageGraphic.d.ts.map +1 -1
  338. package/lib/cjs/geometry/ImageGraphic.js +98 -98
  339. package/lib/cjs/geometry/LineStyle.d.ts +71 -71
  340. package/lib/cjs/geometry/LineStyle.js +129 -129
  341. package/lib/cjs/geometry/Placement.d.ts +95 -95
  342. package/lib/cjs/geometry/Placement.d.ts.map +1 -1
  343. package/lib/cjs/geometry/Placement.js +131 -131
  344. package/lib/cjs/geometry/Projection.d.ts +251 -251
  345. package/lib/cjs/geometry/Projection.d.ts.map +1 -1
  346. package/lib/cjs/geometry/Projection.js +198 -198
  347. package/lib/cjs/geometry/Projection.js.map +1 -1
  348. package/lib/cjs/geometry/TextString.d.ts +55 -55
  349. package/lib/cjs/geometry/TextString.js +65 -65
  350. package/lib/cjs/geometry/TextString.js.map +1 -1
  351. package/lib/cjs/ipc/IpcSession.d.ts +23 -23
  352. package/lib/cjs/ipc/IpcSession.js +27 -27
  353. package/lib/cjs/ipc/IpcSocket.d.ts +96 -96
  354. package/lib/cjs/ipc/IpcSocket.d.ts.map +1 -1
  355. package/lib/cjs/ipc/IpcSocket.js +16 -16
  356. package/lib/cjs/ipc/IpcWebSocket.d.ts +60 -61
  357. package/lib/cjs/ipc/IpcWebSocket.d.ts.map +1 -1
  358. package/lib/cjs/ipc/IpcWebSocket.js +148 -151
  359. package/lib/cjs/ipc/IpcWebSocket.js.map +1 -1
  360. package/lib/cjs/ipc/IpcWebSocketTransport.d.ts +15 -15
  361. package/lib/cjs/ipc/IpcWebSocketTransport.js +160 -160
  362. package/lib/cjs/ipc/IpcWebSocketTransport.js.map +1 -1
  363. package/lib/cjs/rpc/DevToolsRpcInterface.d.ts +32 -32
  364. package/lib/cjs/rpc/DevToolsRpcInterface.d.ts.map +1 -1
  365. package/lib/cjs/rpc/DevToolsRpcInterface.js +52 -48
  366. package/lib/cjs/rpc/DevToolsRpcInterface.js.map +1 -1
  367. package/lib/cjs/rpc/IModelReadRpcInterface.d.ts +99 -99
  368. package/lib/cjs/rpc/IModelReadRpcInterface.d.ts.map +1 -1
  369. package/lib/cjs/rpc/IModelReadRpcInterface.js +122 -122
  370. package/lib/cjs/rpc/IModelReadRpcInterface.js.map +1 -1
  371. package/lib/cjs/rpc/IModelTileRpcInterface.d.ts +49 -61
  372. package/lib/cjs/rpc/IModelTileRpcInterface.d.ts.map +1 -1
  373. package/lib/cjs/rpc/IModelTileRpcInterface.js +79 -96
  374. package/lib/cjs/rpc/IModelTileRpcInterface.js.map +1 -1
  375. package/lib/cjs/rpc/SnapshotIModelRpcInterface.d.ts +23 -23
  376. package/lib/cjs/rpc/SnapshotIModelRpcInterface.js +48 -48
  377. package/lib/cjs/rpc/SnapshotIModelRpcInterface.js.map +1 -1
  378. package/lib/cjs/rpc/TestRpcManager.d.ts +20 -20
  379. package/lib/cjs/rpc/TestRpcManager.js +40 -40
  380. package/lib/cjs/rpc/WipRpcInterface.d.ts +29 -29
  381. package/lib/cjs/rpc/WipRpcInterface.js +40 -40
  382. package/lib/cjs/rpc/WipRpcInterface.js.map +1 -1
  383. package/lib/cjs/rpc/core/RpcConfiguration.d.ts +111 -111
  384. package/lib/cjs/rpc/core/RpcConfiguration.d.ts.map +1 -1
  385. package/lib/cjs/rpc/core/RpcConfiguration.js +191 -191
  386. package/lib/cjs/rpc/core/RpcConfiguration.js.map +1 -1
  387. package/lib/cjs/rpc/core/RpcConstants.d.ts +90 -90
  388. package/lib/cjs/rpc/core/RpcConstants.js +109 -109
  389. package/lib/cjs/rpc/core/RpcControl.d.ts +54 -54
  390. package/lib/cjs/rpc/core/RpcControl.js +150 -145
  391. package/lib/cjs/rpc/core/RpcControl.js.map +1 -1
  392. package/lib/cjs/rpc/core/RpcInvocation.d.ts +89 -89
  393. package/lib/cjs/rpc/core/RpcInvocation.d.ts.map +1 -1
  394. package/lib/cjs/rpc/core/RpcInvocation.js +256 -258
  395. package/lib/cjs/rpc/core/RpcInvocation.js.map +1 -1
  396. package/lib/cjs/rpc/core/RpcMarshaling.d.ts +35 -35
  397. package/lib/cjs/rpc/core/RpcMarshaling.js +156 -156
  398. package/lib/cjs/rpc/core/RpcOperation.d.ts +67 -67
  399. package/lib/cjs/rpc/core/RpcOperation.d.ts.map +1 -1
  400. package/lib/cjs/rpc/core/RpcOperation.js +135 -134
  401. package/lib/cjs/rpc/core/RpcOperation.js.map +1 -1
  402. package/lib/cjs/rpc/core/RpcPendingQueue.d.ts +21 -21
  403. package/lib/cjs/rpc/core/RpcPendingQueue.js +94 -95
  404. package/lib/cjs/rpc/core/RpcPendingQueue.js.map +1 -1
  405. package/lib/cjs/rpc/core/RpcProtocol.d.ts +132 -132
  406. package/lib/cjs/rpc/core/RpcProtocol.d.ts.map +1 -1
  407. package/lib/cjs/rpc/core/RpcProtocol.js +127 -127
  408. package/lib/cjs/rpc/core/RpcProtocol.js.map +1 -1
  409. package/lib/cjs/rpc/core/RpcPush.d.ts +68 -68
  410. package/lib/cjs/rpc/core/RpcPush.d.ts.map +1 -1
  411. package/lib/cjs/rpc/core/RpcPush.js +127 -127
  412. package/lib/cjs/rpc/core/RpcPush.js.map +1 -1
  413. package/lib/cjs/rpc/core/RpcRegistry.d.ts +48 -48
  414. package/lib/cjs/rpc/core/RpcRegistry.js +198 -199
  415. package/lib/cjs/rpc/core/RpcRegistry.js.map +1 -1
  416. package/lib/cjs/rpc/core/RpcRequest.d.ts +186 -186
  417. package/lib/cjs/rpc/core/RpcRequest.d.ts.map +1 -1
  418. package/lib/cjs/rpc/core/RpcRequest.js +478 -478
  419. package/lib/cjs/rpc/core/RpcRequest.js.map +1 -1
  420. package/lib/cjs/rpc/core/RpcRequestContext.d.ts +14 -14
  421. package/lib/cjs/rpc/core/RpcRequestContext.js +2 -2
  422. package/lib/cjs/rpc/core/RpcRoutingToken.d.ts +12 -12
  423. package/lib/cjs/rpc/core/RpcRoutingToken.d.ts.map +1 -1
  424. package/lib/cjs/rpc/core/RpcRoutingToken.js +24 -24
  425. package/lib/cjs/rpc/core/RpcRoutingToken.js.map +1 -1
  426. package/lib/cjs/rpc/core/RpcSessionInvocation.d.ts +10 -10
  427. package/lib/cjs/rpc/core/RpcSessionInvocation.js +60 -60
  428. package/lib/cjs/rpc/core/RpcSessionInvocation.js.map +1 -1
  429. package/lib/cjs/rpc/web/BentleyCloudRpcManager.d.ts +48 -46
  430. package/lib/cjs/rpc/web/BentleyCloudRpcManager.d.ts.map +1 -1
  431. package/lib/cjs/rpc/web/BentleyCloudRpcManager.js +76 -73
  432. package/lib/cjs/rpc/web/BentleyCloudRpcManager.js.map +1 -1
  433. package/lib/cjs/rpc/web/BentleyCloudRpcProtocol.d.ts +33 -33
  434. package/lib/cjs/rpc/web/BentleyCloudRpcProtocol.js +141 -143
  435. package/lib/cjs/rpc/web/BentleyCloudRpcProtocol.js.map +1 -1
  436. package/lib/cjs/rpc/web/OpenAPI.d.ts +140 -140
  437. package/lib/cjs/rpc/web/OpenAPI.js +60 -60
  438. package/lib/cjs/rpc/web/OpenAPI.js.map +1 -1
  439. package/lib/cjs/rpc/web/RpcMultipart.d.ts +35 -35
  440. package/lib/cjs/rpc/web/RpcMultipart.js +50 -50
  441. package/lib/cjs/rpc/web/RpcMultipart.js.map +1 -1
  442. package/lib/cjs/rpc/web/WebAppRpcLogging.d.ts +28 -28
  443. package/lib/cjs/rpc/web/WebAppRpcLogging.js +140 -140
  444. package/lib/cjs/rpc/web/WebAppRpcProtocol.d.ts +89 -89
  445. package/lib/cjs/rpc/web/WebAppRpcProtocol.js +116 -116
  446. package/lib/cjs/rpc/web/WebAppRpcProtocol.js.map +1 -1
  447. package/lib/cjs/rpc/web/WebAppRpcRequest.d.ts +67 -67
  448. package/lib/cjs/rpc/web/WebAppRpcRequest.d.ts.map +1 -1
  449. package/lib/cjs/rpc/web/WebAppRpcRequest.js +239 -239
  450. package/lib/cjs/rpc/web/WebAppRpcRequest.js.map +1 -1
  451. package/lib/cjs/rpc/web/multipart/RpcMultipartParser.d.ts +32 -32
  452. package/lib/cjs/rpc/web/multipart/RpcMultipartParser.js +373 -373
  453. package/lib/cjs/tile/B3dmTileIO.d.ts +19 -19
  454. package/lib/cjs/tile/B3dmTileIO.js +66 -66
  455. package/lib/cjs/tile/B3dmTileIO.js.map +1 -1
  456. package/lib/cjs/tile/CompositeTileIO.d.ts +15 -15
  457. package/lib/cjs/tile/CompositeTileIO.js +26 -26
  458. package/lib/cjs/tile/CompositeTileIO.js.map +1 -1
  459. package/lib/cjs/tile/ElementGraphics.d.ts +145 -145
  460. package/lib/cjs/tile/ElementGraphics.d.ts.map +1 -1
  461. package/lib/cjs/tile/ElementGraphics.js +9 -9
  462. package/lib/cjs/tile/GltfTileIO.d.ts +45 -45
  463. package/lib/cjs/tile/GltfTileIO.d.ts.map +1 -1
  464. package/lib/cjs/tile/GltfTileIO.js +109 -109
  465. package/lib/cjs/tile/GltfTileIO.js.map +1 -1
  466. package/lib/cjs/tile/I3dmTileIO.d.ts +20 -20
  467. package/lib/cjs/tile/I3dmTileIO.js +40 -40
  468. package/lib/cjs/tile/I3dmTileIO.js.map +1 -1
  469. package/lib/cjs/tile/IModelTileIO.d.ts +77 -75
  470. package/lib/cjs/tile/IModelTileIO.d.ts.map +1 -1
  471. package/lib/cjs/tile/IModelTileIO.js +97 -95
  472. package/lib/cjs/tile/IModelTileIO.js.map +1 -1
  473. package/lib/cjs/tile/PntsTileIO.d.ts +17 -17
  474. package/lib/cjs/tile/PntsTileIO.js +26 -26
  475. package/lib/cjs/tile/PntsTileIO.js.map +1 -1
  476. package/lib/cjs/tile/TileIO.d.ts +66 -66
  477. package/lib/cjs/tile/TileIO.js +118 -118
  478. package/lib/cjs/tile/TileMetadata.d.ts +228 -228
  479. package/lib/cjs/tile/TileMetadata.d.ts.map +1 -1
  480. package/lib/cjs/tile/TileMetadata.js +675 -676
  481. package/lib/cjs/tile/TileMetadata.js.map +1 -1
  482. package/lib/cjs/tile/Tileset3dSchema.d.ts +97 -0
  483. package/lib/cjs/tile/Tileset3dSchema.d.ts.map +1 -0
  484. package/lib/cjs/tile/Tileset3dSchema.js +10 -0
  485. package/lib/cjs/tile/Tileset3dSchema.js.map +1 -0
  486. package/lib/esm/AmbientOcclusion.d.ts +49 -49
  487. package/lib/esm/AmbientOcclusion.js +52 -52
  488. package/lib/esm/AnalysisStyle.d.ts +134 -134
  489. package/lib/esm/AnalysisStyle.js +160 -159
  490. package/lib/esm/AnalysisStyle.js.map +1 -1
  491. package/lib/esm/Atmosphere.d.ts +99 -0
  492. package/lib/esm/Atmosphere.d.ts.map +1 -0
  493. package/lib/esm/Atmosphere.js +131 -0
  494. package/lib/esm/Atmosphere.js.map +1 -0
  495. package/lib/esm/AuthorizationClient.d.ts +17 -17
  496. package/lib/esm/AuthorizationClient.js +8 -8
  497. package/lib/esm/BackendTypes.d.ts +13 -12
  498. package/lib/esm/BackendTypes.d.ts.map +1 -1
  499. package/lib/esm/BackendTypes.js +8 -8
  500. package/lib/esm/BackendTypes.js.map +1 -1
  501. package/lib/esm/BackgroundMapProvider.d.ts +51 -51
  502. package/lib/esm/BackgroundMapProvider.d.ts.map +1 -1
  503. package/lib/esm/BackgroundMapProvider.js +63 -64
  504. package/lib/esm/BackgroundMapProvider.js.map +1 -1
  505. package/lib/esm/BackgroundMapSettings.d.ts +136 -136
  506. package/lib/esm/BackgroundMapSettings.d.ts.map +1 -1
  507. package/lib/esm/BackgroundMapSettings.js +150 -152
  508. package/lib/esm/BackgroundMapSettings.js.map +1 -1
  509. package/lib/esm/Base64EncodedString.d.ts +32 -32
  510. package/lib/esm/Base64EncodedString.d.ts.map +1 -1
  511. package/lib/esm/Base64EncodedString.js +63 -63
  512. package/lib/esm/Base64EncodedString.js.map +1 -1
  513. package/lib/esm/BlobReader.d.ts +31 -31
  514. package/lib/esm/BlobReader.js +79 -79
  515. package/lib/esm/BriefcaseTypes.d.ts +191 -189
  516. package/lib/esm/BriefcaseTypes.d.ts.map +1 -1
  517. package/lib/esm/BriefcaseTypes.js +92 -92
  518. package/lib/esm/BriefcaseTypes.js.map +1 -1
  519. package/lib/esm/Camera.d.ts +42 -42
  520. package/lib/esm/Camera.js +58 -58
  521. package/lib/esm/Camera.js.map +1 -1
  522. package/lib/esm/ChangedElements.d.ts +85 -85
  523. package/lib/esm/ChangedElements.js +20 -20
  524. package/lib/esm/ChangedEntities.d.ts +45 -45
  525. package/lib/esm/ChangedEntities.d.ts.map +1 -1
  526. package/lib/esm/ChangedEntities.js +8 -8
  527. package/lib/esm/ChangesetProps.d.ts +98 -98
  528. package/lib/esm/ChangesetProps.d.ts.map +1 -1
  529. package/lib/esm/ChangesetProps.js +19 -19
  530. package/lib/esm/ClipStyle.d.ts +89 -89
  531. package/lib/esm/ClipStyle.js +118 -118
  532. package/lib/esm/ClipStyle.js.map +1 -1
  533. package/lib/esm/Code.d.ts +278 -277
  534. package/lib/esm/Code.d.ts.map +1 -1
  535. package/lib/esm/Code.js +266 -264
  536. package/lib/esm/Code.js.map +1 -1
  537. package/lib/esm/ColorByName.d.ts +161 -161
  538. package/lib/esm/ColorByName.js +166 -166
  539. package/lib/esm/ColorDef.d.ts +210 -208
  540. package/lib/esm/ColorDef.d.ts.map +1 -1
  541. package/lib/esm/ColorDef.js +569 -567
  542. package/lib/esm/ColorDef.js.map +1 -1
  543. package/lib/esm/CommonLoggerCategory.d.ts +18 -18
  544. package/lib/esm/CommonLoggerCategory.js +23 -23
  545. package/lib/esm/ConcurrentQuery.d.ts +421 -421
  546. package/lib/esm/ConcurrentQuery.d.ts.map +1 -1
  547. package/lib/esm/ConcurrentQuery.js +545 -545
  548. package/lib/esm/ConcurrentQuery.js.map +1 -1
  549. package/lib/esm/ContextRealityModel.d.ts +303 -303
  550. package/lib/esm/ContextRealityModel.js +366 -368
  551. package/lib/esm/ContextRealityModel.js.map +1 -1
  552. package/lib/esm/DisplayStyleSettings.d.ts +593 -588
  553. package/lib/esm/DisplayStyleSettings.d.ts.map +1 -1
  554. package/lib/esm/DisplayStyleSettings.js +985 -980
  555. package/lib/esm/DisplayStyleSettings.js.map +1 -1
  556. package/lib/esm/ECSchemaProps.d.ts +39 -39
  557. package/lib/esm/ECSchemaProps.js +8 -8
  558. package/lib/esm/ECSqlReader.d.ts +72 -70
  559. package/lib/esm/ECSqlReader.d.ts.map +1 -1
  560. package/lib/esm/ECSqlReader.js +293 -275
  561. package/lib/esm/ECSqlReader.js.map +1 -1
  562. package/lib/esm/ECSqlTypes.d.ts +128 -128
  563. package/lib/esm/ECSqlTypes.js +185 -185
  564. package/lib/esm/ElementMesh.d.ts +39 -39
  565. package/lib/esm/ElementMesh.js +52 -52
  566. package/lib/esm/ElementProps.d.ts +483 -483
  567. package/lib/esm/ElementProps.d.ts.map +1 -1
  568. package/lib/esm/ElementProps.js +93 -92
  569. package/lib/esm/ElementProps.js.map +1 -1
  570. package/lib/esm/EmphasizeElementsProps.d.ts +55 -55
  571. package/lib/esm/EmphasizeElementsProps.js +22 -22
  572. package/lib/esm/EntityProps.d.ts +177 -177
  573. package/lib/esm/EntityProps.d.ts.map +1 -1
  574. package/lib/esm/EntityProps.js +108 -108
  575. package/lib/esm/EntityReference.d.ts +51 -51
  576. package/lib/esm/EntityReference.d.ts.map +1 -1
  577. package/lib/esm/EntityReference.js +52 -52
  578. package/lib/esm/Environment.d.ts +74 -61
  579. package/lib/esm/Environment.d.ts.map +1 -1
  580. package/lib/esm/Environment.js +75 -69
  581. package/lib/esm/Environment.js.map +1 -1
  582. package/lib/esm/FeatureIndex.d.ts +39 -39
  583. package/lib/esm/FeatureIndex.js +57 -57
  584. package/lib/esm/FeatureIndex.js.map +1 -1
  585. package/lib/esm/FeatureSymbology.d.ts +449 -444
  586. package/lib/esm/FeatureSymbology.d.ts.map +1 -1
  587. package/lib/esm/FeatureSymbology.js +615 -609
  588. package/lib/esm/FeatureSymbology.js.map +1 -1
  589. package/lib/esm/FeatureTable.d.ts +248 -141
  590. package/lib/esm/FeatureTable.d.ts.map +1 -1
  591. package/lib/esm/FeatureTable.js +462 -272
  592. package/lib/esm/FeatureTable.js.map +1 -1
  593. package/lib/esm/Fonts.d.ts +51 -51
  594. package/lib/esm/Fonts.d.ts.map +1 -1
  595. package/lib/esm/Fonts.js +49 -49
  596. package/lib/esm/Frustum.d.ts +114 -114
  597. package/lib/esm/Frustum.js +288 -288
  598. package/lib/esm/GeoCoordinateServices.d.ts +123 -119
  599. package/lib/esm/GeoCoordinateServices.d.ts.map +1 -1
  600. package/lib/esm/GeoCoordinateServices.js +77 -76
  601. package/lib/esm/GeoCoordinateServices.js.map +1 -1
  602. package/lib/esm/GeometryContainment.d.ts +28 -28
  603. package/lib/esm/GeometryContainment.js +8 -8
  604. package/lib/esm/GeometryParams.d.ts +130 -130
  605. package/lib/esm/GeometryParams.js +170 -170
  606. package/lib/esm/GeometrySummary.d.ts +45 -45
  607. package/lib/esm/GeometrySummary.js +20 -20
  608. package/lib/esm/Gradient.d.ts +139 -139
  609. package/lib/esm/Gradient.js +450 -452
  610. package/lib/esm/Gradient.js.map +1 -1
  611. package/lib/esm/GraphicParams.d.ts +58 -58
  612. package/lib/esm/GraphicParams.js +81 -81
  613. package/lib/esm/GraphicParams.js.map +1 -1
  614. package/lib/esm/GroundPlane.d.ts +52 -52
  615. package/lib/esm/GroundPlane.d.ts.map +1 -1
  616. package/lib/esm/GroundPlane.js +60 -60
  617. package/lib/esm/GroundPlane.js.map +1 -1
  618. package/lib/esm/HSLColor.d.ts +20 -20
  619. package/lib/esm/HSLColor.js +28 -28
  620. package/lib/esm/HSLColor.js.map +1 -1
  621. package/lib/esm/HSVColor.d.ts +30 -30
  622. package/lib/esm/HSVColor.js +55 -55
  623. package/lib/esm/HSVColor.js.map +1 -1
  624. package/lib/esm/HiddenLine.d.ts +97 -97
  625. package/lib/esm/HiddenLine.js +157 -159
  626. package/lib/esm/HiddenLine.js.map +1 -1
  627. package/lib/esm/Hilite.d.ts +50 -50
  628. package/lib/esm/Hilite.js +61 -61
  629. package/lib/esm/Hilite.js.map +1 -1
  630. package/lib/esm/IModel.d.ts +358 -359
  631. package/lib/esm/IModel.d.ts.map +1 -1
  632. package/lib/esm/IModel.js +343 -342
  633. package/lib/esm/IModel.js.map +1 -1
  634. package/lib/esm/IModelError.d.ts +42 -42
  635. package/lib/esm/IModelError.d.ts.map +1 -1
  636. package/lib/esm/IModelError.js +56 -56
  637. package/lib/esm/IModelError.js.map +1 -1
  638. package/lib/esm/IModelVersion.d.ts +68 -68
  639. package/lib/esm/IModelVersion.d.ts.map +1 -1
  640. package/lib/esm/IModelVersion.js +75 -75
  641. package/lib/esm/Image.d.ts +86 -86
  642. package/lib/esm/Image.js +120 -120
  643. package/lib/esm/Image.js.map +1 -1
  644. package/lib/esm/IpcAppProps.d.ts +141 -141
  645. package/lib/esm/IpcAppProps.js +19 -19
  646. package/lib/esm/LightSettings.d.ts +224 -224
  647. package/lib/esm/LightSettings.js +297 -301
  648. package/lib/esm/LightSettings.js.map +1 -1
  649. package/lib/esm/LinePixels.d.ts +34 -34
  650. package/lib/esm/LinePixels.js +39 -39
  651. package/lib/esm/Localization.d.ts +117 -113
  652. package/lib/esm/Localization.d.ts.map +1 -1
  653. package/lib/esm/Localization.js +29 -29
  654. package/lib/esm/Localization.js.map +1 -1
  655. package/lib/esm/MapImagerySettings.d.ts +62 -62
  656. package/lib/esm/MapImagerySettings.d.ts.map +1 -1
  657. package/lib/esm/MapImagerySettings.js +76 -76
  658. package/lib/esm/MapImagerySettings.js.map +1 -1
  659. package/lib/esm/MapLayerSettings.d.ts +272 -272
  660. package/lib/esm/MapLayerSettings.d.ts.map +1 -1
  661. package/lib/esm/MapLayerSettings.js +399 -403
  662. package/lib/esm/MapLayerSettings.js.map +1 -1
  663. package/lib/esm/MassProperties.d.ts +64 -64
  664. package/lib/esm/MassProperties.js +20 -20
  665. package/lib/esm/MaterialProps.d.ts +153 -153
  666. package/lib/esm/MaterialProps.d.ts.map +1 -1
  667. package/lib/esm/MaterialProps.js +32 -32
  668. package/lib/esm/ModelClipGroup.d.ts +67 -67
  669. package/lib/esm/ModelClipGroup.js +91 -93
  670. package/lib/esm/ModelClipGroup.js.map +1 -1
  671. package/lib/esm/ModelGeometryChanges.d.ts +107 -107
  672. package/lib/esm/ModelGeometryChanges.d.ts.map +1 -1
  673. package/lib/esm/ModelGeometryChanges.js +80 -80
  674. package/lib/esm/ModelProps.d.ts +67 -67
  675. package/lib/esm/ModelProps.js +8 -8
  676. package/lib/esm/NativeAppProps.d.ts +122 -122
  677. package/lib/esm/NativeAppProps.d.ts.map +1 -1
  678. package/lib/esm/NativeAppProps.js +27 -27
  679. package/lib/esm/OctEncodedNormal.d.ts +33 -33
  680. package/lib/esm/OctEncodedNormal.js +93 -93
  681. package/lib/esm/PlanProjectionSettings.d.ts +47 -47
  682. package/lib/esm/PlanProjectionSettings.js +59 -59
  683. package/lib/esm/PlanProjectionSettings.js.map +1 -1
  684. package/lib/esm/PlanarClipMask.d.ts +177 -177
  685. package/lib/esm/PlanarClipMask.js +133 -132
  686. package/lib/esm/PlanarClipMask.js.map +1 -1
  687. package/lib/esm/QPoint.d.ts +479 -479
  688. package/lib/esm/QPoint.js +813 -815
  689. package/lib/esm/QPoint.js.map +1 -1
  690. package/lib/esm/RealityDataAccessProps.d.ts +41 -41
  691. package/lib/esm/RealityDataAccessProps.js +16 -16
  692. package/lib/esm/RealityModelDisplaySettings.d.ts +183 -183
  693. package/lib/esm/RealityModelDisplaySettings.d.ts.map +1 -1
  694. package/lib/esm/RealityModelDisplaySettings.js +138 -137
  695. package/lib/esm/RealityModelDisplaySettings.js.map +1 -1
  696. package/lib/esm/Render.d.ts +89 -89
  697. package/lib/esm/Render.js +165 -165
  698. package/lib/esm/RenderMaterial.d.ts +58 -58
  699. package/lib/esm/RenderMaterial.js +71 -72
  700. package/lib/esm/RenderMaterial.js.map +1 -1
  701. package/lib/esm/RenderSchedule.d.ts +543 -543
  702. package/lib/esm/RenderSchedule.js +989 -999
  703. package/lib/esm/RenderSchedule.js.map +1 -1
  704. package/lib/esm/RenderTexture.d.ts +70 -70
  705. package/lib/esm/RenderTexture.d.ts.map +1 -1
  706. package/lib/esm/RenderTexture.js +55 -55
  707. package/lib/esm/RenderTexture.js.map +1 -1
  708. package/lib/esm/RgbColor.d.ts +47 -47
  709. package/lib/esm/RgbColor.js +73 -73
  710. package/lib/esm/RpcInterface.d.ts +40 -33
  711. package/lib/esm/RpcInterface.d.ts.map +1 -1
  712. package/lib/esm/RpcInterface.js +133 -133
  713. package/lib/esm/RpcInterface.js.map +1 -1
  714. package/lib/esm/RpcManager.d.ts +40 -40
  715. package/lib/esm/RpcManager.js +51 -51
  716. package/lib/esm/RpcManager.js.map +1 -1
  717. package/lib/esm/SessionProps.d.ts +16 -16
  718. package/lib/esm/SessionProps.js +8 -8
  719. package/lib/esm/SkyBox.d.ts +217 -215
  720. package/lib/esm/SkyBox.d.ts.map +1 -1
  721. package/lib/esm/SkyBox.js +204 -203
  722. package/lib/esm/SkyBox.js.map +1 -1
  723. package/lib/esm/Snapping.d.ts +49 -49
  724. package/lib/esm/Snapping.js +8 -8
  725. package/lib/esm/SolarCalculate.d.ts +27 -27
  726. package/lib/esm/SolarCalculate.js +204 -204
  727. package/lib/esm/SolarShadows.d.ts +35 -35
  728. package/lib/esm/SolarShadows.js +58 -58
  729. package/lib/esm/SolarShadows.js.map +1 -1
  730. package/lib/esm/SpatialClassification.d.ts +208 -208
  731. package/lib/esm/SpatialClassification.js +333 -334
  732. package/lib/esm/SpatialClassification.js.map +1 -1
  733. package/lib/esm/SubCategoryAppearance.d.ts +91 -91
  734. package/lib/esm/SubCategoryAppearance.js +93 -92
  735. package/lib/esm/SubCategoryAppearance.js.map +1 -1
  736. package/lib/esm/SubCategoryOverride.d.ts +46 -46
  737. package/lib/esm/SubCategoryOverride.js +101 -100
  738. package/lib/esm/SubCategoryOverride.js.map +1 -1
  739. package/lib/esm/TerrainSettings.d.ts +82 -82
  740. package/lib/esm/TerrainSettings.d.ts.map +1 -1
  741. package/lib/esm/TerrainSettings.js +96 -98
  742. package/lib/esm/TerrainSettings.js.map +1 -1
  743. package/lib/esm/TextureMapping.d.ts +151 -118
  744. package/lib/esm/TextureMapping.d.ts.map +1 -1
  745. package/lib/esm/TextureMapping.js +176 -170
  746. package/lib/esm/TextureMapping.js.map +1 -1
  747. package/lib/esm/TextureProps.d.ts +65 -65
  748. package/lib/esm/TextureProps.js +25 -25
  749. package/lib/esm/ThematicDisplay.d.ts +230 -230
  750. package/lib/esm/ThematicDisplay.js +337 -337
  751. package/lib/esm/ThematicDisplay.js.map +1 -1
  752. package/lib/esm/Thumbnail.d.ts +26 -26
  753. package/lib/esm/Thumbnail.js +8 -8
  754. package/lib/esm/TileProps.d.ts +88 -82
  755. package/lib/esm/TileProps.d.ts.map +1 -1
  756. package/lib/esm/TileProps.js +25 -25
  757. package/lib/esm/TileProps.js.map +1 -1
  758. package/lib/esm/Tween.d.ts +191 -191
  759. package/lib/esm/Tween.d.ts.map +1 -1
  760. package/lib/esm/Tween.js +565 -565
  761. package/lib/esm/TxnAction.d.ts +21 -21
  762. package/lib/esm/TxnAction.js +26 -26
  763. package/lib/esm/ViewDetails.d.ts +125 -125
  764. package/lib/esm/ViewDetails.js +162 -161
  765. package/lib/esm/ViewDetails.js.map +1 -1
  766. package/lib/esm/ViewFlags.d.ts +287 -287
  767. package/lib/esm/ViewFlags.d.ts.map +1 -1
  768. package/lib/esm/ViewFlags.js +364 -364
  769. package/lib/esm/ViewFlags.js.map +1 -1
  770. package/lib/esm/ViewProps.d.ts +205 -205
  771. package/lib/esm/ViewProps.js +8 -8
  772. package/lib/esm/WhiteOnWhiteReversalSettings.d.ts +36 -36
  773. package/lib/esm/WhiteOnWhiteReversalSettings.js +34 -33
  774. package/lib/esm/WhiteOnWhiteReversalSettings.js.map +1 -1
  775. package/lib/esm/core-common.d.ts +244 -244
  776. package/lib/esm/core-common.d.ts.map +1 -1
  777. package/lib/esm/core-common.js +248 -248
  778. package/lib/esm/core-common.js.map +1 -1
  779. package/lib/esm/domains/FunctionalElementProps.d.ts +11 -11
  780. package/lib/esm/domains/FunctionalElementProps.js +8 -8
  781. package/lib/esm/domains/GenericElementProps.d.ts +18 -18
  782. package/lib/esm/domains/GenericElementProps.js +8 -8
  783. package/lib/esm/geometry/AdditionalTransform.d.ts +84 -84
  784. package/lib/esm/geometry/AdditionalTransform.js +80 -80
  785. package/lib/esm/geometry/AreaPattern.d.ts +82 -82
  786. package/lib/esm/geometry/AreaPattern.js +200 -201
  787. package/lib/esm/geometry/AreaPattern.js.map +1 -1
  788. package/lib/esm/geometry/BoundingSphere.d.ts +27 -27
  789. package/lib/esm/geometry/BoundingSphere.js +40 -40
  790. package/lib/esm/geometry/BoundingSphere.js.map +1 -1
  791. package/lib/esm/geometry/Cartographic.d.ts +137 -137
  792. package/lib/esm/geometry/Cartographic.js +341 -340
  793. package/lib/esm/geometry/Cartographic.js.map +1 -1
  794. package/lib/esm/geometry/CoordinateReferenceSystem.d.ts +269 -269
  795. package/lib/esm/geometry/CoordinateReferenceSystem.d.ts.map +1 -1
  796. package/lib/esm/geometry/CoordinateReferenceSystem.js +253 -254
  797. package/lib/esm/geometry/CoordinateReferenceSystem.js.map +1 -1
  798. package/lib/esm/geometry/ElementGeometry.d.ts +402 -402
  799. package/lib/esm/geometry/ElementGeometry.d.ts.map +1 -1
  800. package/lib/esm/geometry/ElementGeometry.js +1716 -1716
  801. package/lib/esm/geometry/ElementGeometry.js.map +1 -1
  802. package/lib/esm/geometry/ElementGeometryFB.d.ts +2372 -2372
  803. package/lib/esm/geometry/ElementGeometryFB.js +3811 -3811
  804. package/lib/esm/geometry/ElementGeometryFB.js.map +1 -1
  805. package/lib/esm/geometry/FrustumPlanes.d.ts +83 -81
  806. package/lib/esm/geometry/FrustumPlanes.d.ts.map +1 -1
  807. package/lib/esm/geometry/FrustumPlanes.js +223 -189
  808. package/lib/esm/geometry/FrustumPlanes.js.map +1 -1
  809. package/lib/esm/geometry/GeodeticDatum.d.ts +409 -409
  810. package/lib/esm/geometry/GeodeticDatum.d.ts.map +1 -1
  811. package/lib/esm/geometry/GeodeticDatum.js +389 -390
  812. package/lib/esm/geometry/GeodeticDatum.js.map +1 -1
  813. package/lib/esm/geometry/GeodeticEllipsoid.d.ts +72 -72
  814. package/lib/esm/geometry/GeodeticEllipsoid.js +67 -68
  815. package/lib/esm/geometry/GeodeticEllipsoid.js.map +1 -1
  816. package/lib/esm/geometry/GeometryStream.d.ts +347 -347
  817. package/lib/esm/geometry/GeometryStream.d.ts.map +1 -1
  818. package/lib/esm/geometry/GeometryStream.js +463 -464
  819. package/lib/esm/geometry/GeometryStream.js.map +1 -1
  820. package/lib/esm/geometry/ImageGraphic.d.ts +74 -74
  821. package/lib/esm/geometry/ImageGraphic.d.ts.map +1 -1
  822. package/lib/esm/geometry/ImageGraphic.js +93 -93
  823. package/lib/esm/geometry/LineStyle.d.ts +71 -71
  824. package/lib/esm/geometry/LineStyle.js +126 -126
  825. package/lib/esm/geometry/Placement.d.ts +95 -95
  826. package/lib/esm/geometry/Placement.d.ts.map +1 -1
  827. package/lib/esm/geometry/Placement.js +126 -126
  828. package/lib/esm/geometry/Projection.d.ts +251 -251
  829. package/lib/esm/geometry/Projection.d.ts.map +1 -1
  830. package/lib/esm/geometry/Projection.js +192 -192
  831. package/lib/esm/geometry/Projection.js.map +1 -1
  832. package/lib/esm/geometry/TextString.d.ts +55 -55
  833. package/lib/esm/geometry/TextString.js +61 -61
  834. package/lib/esm/geometry/TextString.js.map +1 -1
  835. package/lib/esm/ipc/IpcSession.d.ts +23 -23
  836. package/lib/esm/ipc/IpcSession.js +23 -23
  837. package/lib/esm/ipc/IpcSocket.d.ts +96 -96
  838. package/lib/esm/ipc/IpcSocket.d.ts.map +1 -1
  839. package/lib/esm/ipc/IpcSocket.js +12 -12
  840. package/lib/esm/ipc/IpcWebSocket.d.ts +60 -61
  841. package/lib/esm/ipc/IpcWebSocket.d.ts.map +1 -1
  842. package/lib/esm/ipc/IpcWebSocket.js +143 -145
  843. package/lib/esm/ipc/IpcWebSocket.js.map +1 -1
  844. package/lib/esm/ipc/IpcWebSocketTransport.d.ts +15 -15
  845. package/lib/esm/ipc/IpcWebSocketTransport.js +156 -156
  846. package/lib/esm/ipc/IpcWebSocketTransport.js.map +1 -1
  847. package/lib/esm/rpc/DevToolsRpcInterface.d.ts +32 -32
  848. package/lib/esm/rpc/DevToolsRpcInterface.d.ts.map +1 -1
  849. package/lib/esm/rpc/DevToolsRpcInterface.js +49 -44
  850. package/lib/esm/rpc/DevToolsRpcInterface.js.map +1 -1
  851. package/lib/esm/rpc/IModelReadRpcInterface.d.ts +99 -99
  852. package/lib/esm/rpc/IModelReadRpcInterface.d.ts.map +1 -1
  853. package/lib/esm/rpc/IModelReadRpcInterface.js +118 -117
  854. package/lib/esm/rpc/IModelReadRpcInterface.js.map +1 -1
  855. package/lib/esm/rpc/IModelTileRpcInterface.d.ts +49 -61
  856. package/lib/esm/rpc/IModelTileRpcInterface.d.ts.map +1 -1
  857. package/lib/esm/rpc/IModelTileRpcInterface.js +76 -92
  858. package/lib/esm/rpc/IModelTileRpcInterface.js.map +1 -1
  859. package/lib/esm/rpc/SnapshotIModelRpcInterface.d.ts +23 -23
  860. package/lib/esm/rpc/SnapshotIModelRpcInterface.js +45 -44
  861. package/lib/esm/rpc/SnapshotIModelRpcInterface.js.map +1 -1
  862. package/lib/esm/rpc/TestRpcManager.d.ts +20 -20
  863. package/lib/esm/rpc/TestRpcManager.js +36 -36
  864. package/lib/esm/rpc/WipRpcInterface.d.ts +29 -29
  865. package/lib/esm/rpc/WipRpcInterface.js +37 -36
  866. package/lib/esm/rpc/WipRpcInterface.js.map +1 -1
  867. package/lib/esm/rpc/core/RpcConfiguration.d.ts +111 -111
  868. package/lib/esm/rpc/core/RpcConfiguration.d.ts.map +1 -1
  869. package/lib/esm/rpc/core/RpcConfiguration.js +185 -184
  870. package/lib/esm/rpc/core/RpcConfiguration.js.map +1 -1
  871. package/lib/esm/rpc/core/RpcConstants.d.ts +90 -90
  872. package/lib/esm/rpc/core/RpcConstants.js +106 -106
  873. package/lib/esm/rpc/core/RpcControl.d.ts +54 -54
  874. package/lib/esm/rpc/core/RpcControl.js +144 -138
  875. package/lib/esm/rpc/core/RpcControl.js.map +1 -1
  876. package/lib/esm/rpc/core/RpcInvocation.d.ts +89 -89
  877. package/lib/esm/rpc/core/RpcInvocation.d.ts.map +1 -1
  878. package/lib/esm/rpc/core/RpcInvocation.js +253 -254
  879. package/lib/esm/rpc/core/RpcInvocation.js.map +1 -1
  880. package/lib/esm/rpc/core/RpcMarshaling.d.ts +35 -35
  881. package/lib/esm/rpc/core/RpcMarshaling.js +152 -152
  882. package/lib/esm/rpc/core/RpcOperation.d.ts +67 -67
  883. package/lib/esm/rpc/core/RpcOperation.d.ts.map +1 -1
  884. package/lib/esm/rpc/core/RpcOperation.js +130 -129
  885. package/lib/esm/rpc/core/RpcOperation.js.map +1 -1
  886. package/lib/esm/rpc/core/RpcPendingQueue.d.ts +21 -21
  887. package/lib/esm/rpc/core/RpcPendingQueue.js +90 -91
  888. package/lib/esm/rpc/core/RpcPendingQueue.js.map +1 -1
  889. package/lib/esm/rpc/core/RpcProtocol.d.ts +132 -132
  890. package/lib/esm/rpc/core/RpcProtocol.d.ts.map +1 -1
  891. package/lib/esm/rpc/core/RpcProtocol.js +124 -123
  892. package/lib/esm/rpc/core/RpcProtocol.js.map +1 -1
  893. package/lib/esm/rpc/core/RpcPush.d.ts +68 -68
  894. package/lib/esm/rpc/core/RpcPush.d.ts.map +1 -1
  895. package/lib/esm/rpc/core/RpcPush.js +121 -119
  896. package/lib/esm/rpc/core/RpcPush.js.map +1 -1
  897. package/lib/esm/rpc/core/RpcRegistry.d.ts +48 -48
  898. package/lib/esm/rpc/core/RpcRegistry.js +194 -195
  899. package/lib/esm/rpc/core/RpcRegistry.js.map +1 -1
  900. package/lib/esm/rpc/core/RpcRequest.d.ts +186 -186
  901. package/lib/esm/rpc/core/RpcRequest.d.ts.map +1 -1
  902. package/lib/esm/rpc/core/RpcRequest.js +474 -473
  903. package/lib/esm/rpc/core/RpcRequest.js.map +1 -1
  904. package/lib/esm/rpc/core/RpcRequestContext.d.ts +14 -14
  905. package/lib/esm/rpc/core/RpcRequestContext.js +1 -1
  906. package/lib/esm/rpc/core/RpcRoutingToken.d.ts +12 -12
  907. package/lib/esm/rpc/core/RpcRoutingToken.d.ts.map +1 -1
  908. package/lib/esm/rpc/core/RpcRoutingToken.js +21 -20
  909. package/lib/esm/rpc/core/RpcRoutingToken.js.map +1 -1
  910. package/lib/esm/rpc/core/RpcSessionInvocation.d.ts +10 -10
  911. package/lib/esm/rpc/core/RpcSessionInvocation.js +56 -56
  912. package/lib/esm/rpc/core/RpcSessionInvocation.js.map +1 -1
  913. package/lib/esm/rpc/web/BentleyCloudRpcManager.d.ts +48 -46
  914. package/lib/esm/rpc/web/BentleyCloudRpcManager.d.ts.map +1 -1
  915. package/lib/esm/rpc/web/BentleyCloudRpcManager.js +72 -68
  916. package/lib/esm/rpc/web/BentleyCloudRpcManager.js.map +1 -1
  917. package/lib/esm/rpc/web/BentleyCloudRpcProtocol.d.ts +33 -33
  918. package/lib/esm/rpc/web/BentleyCloudRpcProtocol.js +137 -139
  919. package/lib/esm/rpc/web/BentleyCloudRpcProtocol.js.map +1 -1
  920. package/lib/esm/rpc/web/OpenAPI.d.ts +140 -140
  921. package/lib/esm/rpc/web/OpenAPI.js +56 -56
  922. package/lib/esm/rpc/web/OpenAPI.js.map +1 -1
  923. package/lib/esm/rpc/web/RpcMultipart.d.ts +35 -35
  924. package/lib/esm/rpc/web/RpcMultipart.js +47 -46
  925. package/lib/esm/rpc/web/RpcMultipart.js.map +1 -1
  926. package/lib/esm/rpc/web/WebAppRpcLogging.d.ts +28 -28
  927. package/lib/esm/rpc/web/WebAppRpcLogging.js +136 -136
  928. package/lib/esm/rpc/web/WebAppRpcProtocol.d.ts +89 -89
  929. package/lib/esm/rpc/web/WebAppRpcProtocol.js +112 -112
  930. package/lib/esm/rpc/web/WebAppRpcProtocol.js.map +1 -1
  931. package/lib/esm/rpc/web/WebAppRpcRequest.d.ts +67 -67
  932. package/lib/esm/rpc/web/WebAppRpcRequest.d.ts.map +1 -1
  933. package/lib/esm/rpc/web/WebAppRpcRequest.js +236 -235
  934. package/lib/esm/rpc/web/WebAppRpcRequest.js.map +1 -1
  935. package/lib/esm/rpc/web/multipart/RpcMultipartParser.d.ts +32 -32
  936. package/lib/esm/rpc/web/multipart/RpcMultipartParser.js +369 -369
  937. package/lib/esm/tile/B3dmTileIO.d.ts +19 -19
  938. package/lib/esm/tile/B3dmTileIO.js +62 -62
  939. package/lib/esm/tile/B3dmTileIO.js.map +1 -1
  940. package/lib/esm/tile/CompositeTileIO.d.ts +15 -15
  941. package/lib/esm/tile/CompositeTileIO.js +22 -22
  942. package/lib/esm/tile/CompositeTileIO.js.map +1 -1
  943. package/lib/esm/tile/ElementGraphics.d.ts +145 -145
  944. package/lib/esm/tile/ElementGraphics.d.ts.map +1 -1
  945. package/lib/esm/tile/ElementGraphics.js +8 -8
  946. package/lib/esm/tile/GltfTileIO.d.ts +45 -45
  947. package/lib/esm/tile/GltfTileIO.d.ts.map +1 -1
  948. package/lib/esm/tile/GltfTileIO.js +105 -105
  949. package/lib/esm/tile/GltfTileIO.js.map +1 -1
  950. package/lib/esm/tile/I3dmTileIO.d.ts +20 -20
  951. package/lib/esm/tile/I3dmTileIO.js +36 -36
  952. package/lib/esm/tile/I3dmTileIO.js.map +1 -1
  953. package/lib/esm/tile/IModelTileIO.d.ts +77 -75
  954. package/lib/esm/tile/IModelTileIO.d.ts.map +1 -1
  955. package/lib/esm/tile/IModelTileIO.js +93 -90
  956. package/lib/esm/tile/IModelTileIO.js.map +1 -1
  957. package/lib/esm/tile/PntsTileIO.d.ts +17 -17
  958. package/lib/esm/tile/PntsTileIO.js +22 -22
  959. package/lib/esm/tile/PntsTileIO.js.map +1 -1
  960. package/lib/esm/tile/TileIO.d.ts +66 -66
  961. package/lib/esm/tile/TileIO.js +110 -110
  962. package/lib/esm/tile/TileMetadata.d.ts +228 -228
  963. package/lib/esm/tile/TileMetadata.d.ts.map +1 -1
  964. package/lib/esm/tile/TileMetadata.js +660 -661
  965. package/lib/esm/tile/TileMetadata.js.map +1 -1
  966. package/lib/esm/tile/Tileset3dSchema.d.ts +97 -0
  967. package/lib/esm/tile/Tileset3dSchema.d.ts.map +1 -0
  968. package/lib/esm/tile/Tileset3dSchema.js +9 -0
  969. package/lib/esm/tile/Tileset3dSchema.js.map +1 -0
  970. package/package.json +14 -14
  971. package/lib/cjs/CloudStorage.d.ts +0 -63
  972. package/lib/cjs/CloudStorage.d.ts.map +0 -1
  973. package/lib/cjs/CloudStorage.js +0 -114
  974. package/lib/cjs/CloudStorage.js.map +0 -1
  975. package/lib/cjs/CloudStorageTileCache.d.ts +0 -28
  976. package/lib/cjs/CloudStorageTileCache.d.ts.map +0 -1
  977. package/lib/cjs/CloudStorageTileCache.js +0 -67
  978. package/lib/cjs/CloudStorageTileCache.js.map +0 -1
  979. package/lib/esm/CloudStorage.d.ts +0 -63
  980. package/lib/esm/CloudStorage.d.ts.map +0 -1
  981. package/lib/esm/CloudStorage.js +0 -110
  982. package/lib/esm/CloudStorage.js.map +0 -1
  983. package/lib/esm/CloudStorageTileCache.d.ts +0 -28
  984. package/lib/esm/CloudStorageTileCache.d.ts.map +0 -1
  985. package/lib/esm/CloudStorageTileCache.js +0 -63
  986. package/lib/esm/CloudStorageTileCache.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ElementGeometry.js","sourceRoot":"","sources":["../../../src/geometry/ElementGeometry.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\nimport { flatbuffers } from \"flatbuffers\";\r\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { Angle, AngleSweep, Arc3d, BentleyGeometryFlatBuffer, CurveCollection, FrameBuilder, GeometryQuery, LineString3d, Loop, Matrix3d, Plane3dByOriginAndUnitNormal, Point2d, Point3d, Point3dArray, PointString3d, Polyface, PolyfaceQuery, Range3d, SolidPrimitive, Transform, Vector3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport { EGFBAccessors } from \"./ElementGeometryFB\";\r\nimport { Base64EncodedString } from \"../Base64EncodedString\";\r\nimport { TextString, TextStringProps } from \"./TextString\";\r\nimport { ColorDef } from \"../ColorDef\";\r\nimport { BackgroundFill, FillDisplay, GeometryClass, GeometryParams } from \"../GeometryParams\";\r\nimport { Gradient } from \"../Gradient\";\r\nimport { ThematicGradientSettings, ThematicGradientSettingsProps } from \"../ThematicDisplay\";\r\nimport { AreaPattern } from \"./AreaPattern\";\r\nimport { BRepEntity } from \"./GeometryStream\";\r\nimport { ImageGraphic, ImageGraphicCorners, ImageGraphicProps } from \"./ImageGraphic\";\r\nimport { LineStyle } from \"./LineStyle\";\r\nimport { ElementAlignedBox3d, Placement2d, Placement3d } from \"./Placement\";\r\nimport { isPlacement2dProps, PlacementProps } from \"../ElementProps\";\r\n\r\n/** Specifies the type of an entry in a geometry stream.\r\n * @see [[ElementGeometryDataEntry.opcode]].\r\n * @public\r\n * @extensions\r\n */\r\nexport enum ElementGeometryOpcode {\r\n /** Local range of the next geometric primitive in the geometry stream. */\r\n SubGraphicRange = 2,\r\n /** A reference to a [GeometryPart]($backend). */\r\n PartReference = 3,\r\n /** Sets symbology for subsequent geometry to override [SubCategory]($backend) appearance */\r\n BasicSymbology = 4,\r\n /** A line, line string, shape, or point string (automatic simplification of a [CurvePrimitive]($core-geometry) or [CurveCollection]($core-geometry)) */\r\n PointPrimitive = 5,\r\n /** A 2d line, line string, shape, or point string (automatic simplification of a [CurvePrimitive]($core-geometry) or [CurveCollection]($core-geometry)) */\r\n PointPrimitive2d = 6,\r\n /** Arc or ellipse (automatic simplification of a [CurvePrimitive]($core-geometry) or [CurveCollection]($core-geometry)) */\r\n ArcPrimitive = 7,\r\n /** [CurveCollection]($core-geometry) */\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n CurveCollection = 8,\r\n /** [Polyface]($core-geometry) */\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n Polyface = 9,\r\n /** [CurvePrimitive]($core-geometry) */\r\n CurvePrimitive = 10,\r\n /** [SolidPrimitive]($core-geometry) */\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n SolidPrimitive = 11,\r\n /** [BSplineSurface3d]($core-geometry) */\r\n BsplineSurface = 12,\r\n /** Opaque and [[Gradient]] fills. */\r\n Fill = 19,\r\n /** Hatch, cross-hatch, or [[AreaPattern]]. */\r\n Pattern = 20,\r\n /** [[RenderMaterial]] */\r\n Material = 21,\r\n /** [[TextString]] */\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n TextString = 22,\r\n /** Specifies line style overrides as a [[LineStyle.Modifier]] */\r\n LineStyleModifiers = 23,\r\n /** Boundary represention solid, sheet, or wire body as a [[BRepEntity.DataProps]] */\r\n BRep = 25,\r\n /** Small single-tile raster image as an [[ImageGraphic]] */\r\n Image = 28,\r\n}\r\n\r\n/** Describes an entry in a geometry stream as an op-code plus the binary flatbuffer representation of the associated data.\r\n * @see [[FlatBufferGeometryStream]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ElementGeometryDataEntry {\r\n /** The type of this entry. */\r\n opcode: ElementGeometryOpcode;\r\n /** Zero-based flatbuffer-encoded data. */\r\n data: Uint8Array;\r\n}\r\n\r\n/** Information provided to [[ElementGeometryFunction]].\r\n * @alpha\r\n */\r\nexport interface ElementGeometryInfo {\r\n /** ID for the [Category]($core-backend), undefined for geometry parts */\r\n categoryId?: Id64String;\r\n /** A row-major storage 4x3 transform to world coordinate, undefined for geometry parts */\r\n sourceToWorld?: Float64Array;\r\n /** The element aligned bounding box for the geometry stream stored as 6 values for low/high */\r\n bbox?: Float64Array;\r\n /** If true, geometry displays oriented to face the camera */\r\n viewIndependent?: boolean;\r\n /** If true, geometry stream contained breps that were omitted or replaced as requested */\r\n brepsPresent?: boolean;\r\n /** The geometry stream data */\r\n entryArray: ElementGeometryDataEntry[];\r\n}\r\n\r\n/** A callback function that receives geometry stream data.\r\n * @see [IModelDb.elementGeometryRequest]($core-backend)\r\n * @alpha\r\n */\r\nexport type ElementGeometryFunction = (info: ElementGeometryInfo) => void;\r\n\r\n/** Parameters for [IModelDb.elementGeometryRequest]($core-backend)\r\n * @alpha\r\n */\r\nexport interface ElementGeometryRequest {\r\n /** The source element for the geometry stream */\r\n elementId: Id64String;\r\n /** A function to call for the geometry stream data */\r\n onGeometry: ElementGeometryFunction;\r\n /** Whether to omit BRep data */\r\n skipBReps?: boolean;\r\n /** When not omitting BReps, whether to return a mesh or curve representation instead of the brep data */\r\n replaceBReps?: boolean;\r\n /** Option for replaceBReps, max distance from a face to the original geometry, see [StrokeOptions]($core-geometry) */\r\n chordTol?: number;\r\n /** Option for replaceBReps, max angle difference in radians for approximated face, see [StrokeOptions]($core-geometry) */\r\n angleTol?: number;\r\n /** Option for replaceBReps, max length of any edge in generated faces, see [StrokeOptions]($core-geometry) */\r\n maxEdgeLength?: number;\r\n /** Option for replaceBReps, ignore faces with bounding boxes smaller than this size when facetting */\r\n minBRepFeatureSize?: number;\r\n}\r\n\r\n/** Parameters for building the geometry stream of a [[GeometricElement]] using ElementGeometry.Builder\r\n * Note: The geometry stream is always in local coordinates, that is, relative to the element's [[Placement]].\r\n * @alpha\r\n */\r\nexport interface ElementGeometryBuilderParams {\r\n /** The geometry stream data */\r\n entryArray: ElementGeometryDataEntry[];\r\n /** If true, create geometry that displays oriented to face the camera */\r\n viewIndependent?: boolean;\r\n}\r\n\r\n/** Parameters for building the geometry stream of a [[GeometryPart]] using ElementGeometry.Builder.\r\n * @alpha\r\n */\r\nexport interface ElementGeometryBuilderParamsForPart {\r\n /** The geometry stream data */\r\n entryArray: ElementGeometryDataEntry[];\r\n /** If true, create geometry part with 2d geometry */\r\n is2dPart?: boolean;\r\n}\r\n\r\n/** Values for [[BRepGeometryCreate.operation]]\r\n * @alpha\r\n */\r\nexport enum BRepGeometryOperation {\r\n /** Unite target (first entry) with one or more tool entities. */\r\n Unite = 0,\r\n /** Subtract one or more tool entities from target entity (first entry) */\r\n Subtract = 1,\r\n /** Intersect target (first entry) with one or more tool entities */\r\n Intersect = 2,\r\n /** Sew the given set of surfaces together by joining those that share edges in common */\r\n Sew = 3,\r\n /** Create a cut in the target (first entry) using a planar region (second entry) and optional depth */\r\n Cut = 4,\r\n /** Create a pad or pocket in the target (first entry) using a planar region (second entry) */\r\n Emboss = 5,\r\n /** Create a solid from a surface by offsetting using the specified forward and backward distances */\r\n Thicken = 6,\r\n /** Create a shelled solid by offsetting all faces by the supplied distance */\r\n Hollow = 7,\r\n /** Create a solid or surface by sweeping a planar profile (first entry) along a path (second entry) */\r\n Sweep = 8,\r\n /** Create a solid or surface by lofting through a set of paths or regions */\r\n Loft = 9,\r\n /** Create a solid or sheet with all non-smooth/non-laminar edges rounded */\r\n Round = 10,\r\n /** Offset all faces of a solid or sheet target by the supplied distance. */\r\n Offset = 11,\r\n}\r\n\r\n/** Parameters for [[BRepGeometryOperation.Cut]]\r\n * @alpha\r\n */\r\nexport interface BRepCutProps {\r\n /** Optional cut depth; through solid if not specified */\r\n distance?: number;\r\n /** Optional cut direction; in direction of profile normal if not specified */\r\n bothDirections?: boolean;\r\n}\r\n\r\n/** Parameters for [[BRepGeometryOperation.Thicken]]\r\n * @alpha\r\n */\r\nexport interface BRepThickenProps {\r\n /** Offset to apply in surface normal direction; at least one of frontDistance or backDistance must be specified */\r\n frontDistance?: number;\r\n /** Offset to apply in reverse surface normal direction */\r\n backDistance?: number;\r\n}\r\n\r\n/** Parameters for [[BRepGeometryOperation.Hollow]]\r\n * @alpha\r\n */\r\nexport interface BRepHollowProps {\r\n /** Offset to apply to all faces; positive value shells outwards, negative value shells inwards */\r\n distance: number;\r\n}\r\n\r\n/** Parameters for [[BRepGeometryOperation.Round]]\r\n * @alpha\r\n */\r\nexport interface BRepRoundProps {\r\n /** Radius to apply to all non-laminar/non-smooth edges */\r\n radius: number;\r\n}\r\n\r\n/** Parameters for [[BRepGeometryOperation.Offset]]\r\n * @alpha\r\n */\r\nexport interface BRepOffsetProps {\r\n /** Offset to apply to all faces; positive value offsets outwards, negative value offsets inwards */\r\n distance: number;\r\n}\r\n\r\n/** Parameters for [IModelDb.createBRepGeometry]($core-backend)\r\n * @alpha\r\n */\r\nexport interface BRepGeometryCreate {\r\n /** The operation to perform on the input geometry */\r\n operation: BRepGeometryOperation;\r\n /** The input target and tool geometry (curves, surfaces, and solids) to perform the given operation on */\r\n entryArray: ElementGeometryDataEntry[];\r\n /** A function to call for the result geometry */\r\n onResult: BRepGeometryFunction;\r\n /** Whether disjoint results should be returned as multiple entries or a single disjoint body */\r\n separateDisjoint?: boolean;\r\n /** Options and parameters for this operation */\r\n parameters?: BRepCutProps | BRepThickenProps | BRepHollowProps | BRepRoundProps | BRepOffsetProps;\r\n}\r\n\r\n/** Information provided to [[BRepGeometryFunction]].\r\n * @alpha\r\n */\r\nexport interface BRepGeometryInfo {\r\n /** The result geometry if the operation was successful */\r\n entryArray: ElementGeometryDataEntry[];\r\n}\r\n\r\n/** A callback function that receives brep operation result geometry.\r\n * @see [IModelDb.createBRepGeometry]($core-backend)\r\n * @alpha\r\n */\r\nexport type BRepGeometryFunction = (info: BRepGeometryInfo) => void;\r\n\r\n/** Provides utility functions for working with [[ElementGeometryDataEntry]].\r\n * @alpha\r\n */\r\nexport namespace ElementGeometry {\r\n /** [[ElementGeometry.Builder]] is a helper class for populating a [[ElementGeometryDataEntry]] array needed to create a [[GeometricElement]] or [[GeometryPart]]. */\r\n export class Builder {\r\n private _localToWorld?: Transform;\r\n private _worldToLocal?: Transform;\r\n /** GeometryStream entries */\r\n public readonly entries: ElementGeometryDataEntry[] = [];\r\n\r\n /** Current placement transform, converts local coordinate (placement relative) input to world */\r\n public get localToWorld() { return this._localToWorld; }\r\n\r\n /** Current inverse placement transform, converts world coordinate input to local (placement relative) */\r\n public get worldToLocal() { return this._worldToLocal; }\r\n\r\n /** Supply optional local to world transform. Used to transform world coordinate input relative to element placement.\r\n * For a [[GeometricElement]]'s placement to be meaningful, world coordinate geometry should never be appended to an element with an identity placement.\r\n * Can be called with undefined or identity transform to start appending geometry supplied in local coordinates again.\r\n */\r\n public setLocalToWorld(localToWorld?: Transform) {\r\n this._localToWorld = (undefined === localToWorld || localToWorld.isIdentity ? undefined : localToWorld.clone());\r\n this._worldToLocal = (undefined === this._localToWorld ? undefined : this._localToWorld.inverse());\r\n }\r\n\r\n /** Supply local to world transform from a Point3d and optional YawPitchRollAngles.\r\n * @see [[Placement3d]]\r\n */\r\n public setLocalToWorld3d(origin: Point3d, angles: YawPitchRollAngles = YawPitchRollAngles.createDegrees(0.0, 0.0, 0.0)) {\r\n this.setLocalToWorld(Transform.createOriginAndMatrix(origin, angles.toMatrix3d()));\r\n }\r\n\r\n /** Supply local to world transform from a Point2d and optional Angle.\r\n * @see [[Placement2d]]\r\n */\r\n public setLocalToWorld2d(origin: Point2d, angle: Angle = Angle.createDegrees(0.0)) {\r\n this.setLocalToWorld(Transform.createOriginAndMatrix(Point3d.createFrom(origin), Matrix3d.createRotationAroundVector(Vector3d.unitZ(), angle)));\r\n }\r\n\r\n /** Supply local to world transform from a PlacementProps2d or PlacementProps3d.\r\n * @see [[PlacementProps]]\r\n */\r\n public setLocalToWorldFromPlacement(props: PlacementProps) {\r\n const placement = isPlacement2dProps(props) ? Placement2d.fromJSON(props) : Placement3d.fromJSON(props);\r\n this.setLocalToWorld(placement.transform);\r\n }\r\n\r\n /** Compute angles suitable for passing to [[setLocalToWorld3d]] from an array of 3d points. */\r\n public static placementAnglesFromPoints(pts: Point3d[], defaultUp?: Vector3d, result?: YawPitchRollAngles): YawPitchRollAngles {\r\n const angles = result ? result : new YawPitchRollAngles();\r\n const zVec = defaultUp ? defaultUp.clone() : Vector3d.unitZ();\r\n const matrix = Matrix3d.createRigidHeadsUp(zVec);\r\n\r\n YawPitchRollAngles.createFromMatrix3d(matrix, angles);\r\n\r\n if (pts.length < 2 || pts[0].isAlmostEqual(pts[1]))\r\n return angles;\r\n\r\n // Check if points have a well defined normal to use instead of defaultUp...\r\n const frameTransform = FrameBuilder.createFrameToDistantPoints(pts);\r\n if (undefined !== frameTransform) {\r\n const plane = Plane3dByOriginAndUnitNormal.create(pts[0], frameTransform.matrix.getColumn(2));\r\n if (undefined !== plane && Point3dArray.isCloseToPlane(pts, plane))\r\n zVec.setFrom(plane.getNormalRef());\r\n }\r\n\r\n const xVec = Vector3d.createStartEnd(pts[0], pts[1]);\r\n if (xVec.isParallelTo(zVec, true))\r\n return angles;\r\n\r\n const yVec = xVec.unitCrossProduct(zVec);\r\n if (undefined === yVec)\r\n return angles;\r\n\r\n Matrix3d.createColumns(xVec, yVec, zVec, matrix);\r\n if (undefined === Matrix3d.createRigidFromMatrix3d(matrix, undefined, matrix))\r\n return angles;\r\n\r\n YawPitchRollAngles.createFromMatrix3d(matrix, angles);\r\n return angles;\r\n }\r\n\r\n /** Compute angle suitable for passing to [[setLocalToWorld2d]] from an array of xy plane points. */\r\n public static placementAngleFromPoints(pts: Point3d[], result?: Angle): Angle {\r\n const angles = ElementGeometry.Builder.placementAnglesFromPoints(pts);\r\n if (undefined === result)\r\n return angles.yaw;\r\n result.setFrom(angles.yaw);\r\n return result;\r\n }\r\n\r\n /** Store local ranges for all subsequent geometry appended. Can improve performance of range testing for elements with a GeometryStream\r\n * containing more than one [[GeometryQuery]] differentiable by range. Not useful for a single [[GeometryQuery]] as its range and that of the [[GeometricElement]] are the same.\r\n * Ignored when defining a [[GeometryPart]] and not needed when only appending [[GeometryPart]] instances to a [[GeometricElement]] as these store their own range.\r\n */\r\n public appendGeometryRanges(): boolean {\r\n const entry = fromSubGraphicRange(Range3d.create()); // Computed on backend, just need opcode...\r\n if (undefined === entry)\r\n return false;\r\n this.entries.push(entry);\r\n return true;\r\n }\r\n\r\n /** Change [[GeometryParams]] for subsequent geometry.\r\n * It is not valid to change the sub-category when defining a [[GeometryPart]]. A [[GeometryPart]] inherits the symbology of their instance for anything not explicitly overridden.\r\n */\r\n public appendGeometryParamsChange(geomParams: GeometryParams): boolean {\r\n return appendGeometryParams(geomParams, this.entries, this._worldToLocal);\r\n }\r\n\r\n /** Append a [[GeometryQuery]] supplied in either local or world coordinates to the [[ElementGeometryDataEntry]] array */\r\n public appendGeometryQuery(geometry: GeometryQuery): boolean {\r\n const entry = ElementGeometry.fromGeometryQuery(geometry, this._worldToLocal);\r\n if (undefined === entry)\r\n return false;\r\n this.entries.push(entry);\r\n return true;\r\n }\r\n\r\n /** Append a [[TextString]] supplied in either local or world coordinates to the [[ElementGeometryDataEntry]] array */\r\n public appendTextString(text: TextString): boolean {\r\n const entry = ElementGeometry.fromTextString(text.toJSON(), this._worldToLocal);\r\n if (undefined === entry)\r\n return false;\r\n this.entries.push(entry);\r\n return true;\r\n }\r\n\r\n /** Append a [[ImageGraphic]] supplied in either local or world coordinates to the [[ElementGeometryDataEntry]] array */\r\n public appendImageGraphic(image: ImageGraphic): boolean {\r\n const entry = ElementGeometry.fromImageGraphic(image.toJSON(), this._worldToLocal);\r\n if (undefined === entry)\r\n return false;\r\n this.entries.push(entry);\r\n return true;\r\n }\r\n\r\n /** Append a [[BRepEntity.DataProps]] supplied in either local or world coordinates to the [[ElementGeometryDataEntry]] array.\r\n * Provided for compatibility with GeometryStreamBuilder only.\r\n * Backend code should use IModelDb.createBRepGeometry to create a brep [[ElementGeometryDataEntry]] directly.\r\n */\r\n public appendBRepData(brep: BRepEntity.DataProps): boolean {\r\n const entry = ElementGeometry.fromBRep(brep, this._worldToLocal);\r\n if (undefined === entry)\r\n return false;\r\n this.entries.push(entry);\r\n return true;\r\n }\r\n\r\n /** Append a [[GeometryPart]] instance with relative transform to the [[ElementGeometryDataEntry]] array for creating a [[GeometricElement]].\r\n * Not valid when defining a [[GeometryPart]] as nesting of parts is not supported.\r\n */\r\n public appendGeometryPart(partId: Id64String, partTransform?: Transform): boolean {\r\n const entry = ElementGeometry.fromGeometryPart(partId, partTransform, this._worldToLocal);\r\n if (undefined === entry)\r\n return false;\r\n this.entries.push(entry);\r\n return true;\r\n }\r\n\r\n /** Append a [[GeometryPart]] instance with relative position, orientation, and scale to the [[ElementGeometryDataEntry]] array for creating a [[GeometricElement3d]].\r\n * Not valid when defining a [[GeometryPart]] as nesting of parts is not supported.\r\n */\r\n public appendGeometryPart3d(partId: Id64String, instanceOrigin?: Point3d, instanceRotation?: YawPitchRollAngles, instanceScale?: number): boolean {\r\n const partTransform = Transform.createOriginAndMatrix(instanceOrigin, instanceRotation ? instanceRotation.toMatrix3d() : Matrix3d.createIdentity());\r\n if (undefined !== instanceScale)\r\n partTransform.matrix.scaleColumnsInPlace(instanceScale, instanceScale, instanceScale);\r\n return this.appendGeometryPart(partId, partTransform);\r\n }\r\n\r\n /** Append a [[GeometryPart]] instance with relative position, orientation, and scale to the [[ElementGeometryDataEntry]] array for creating a [[GeometricElement2d]].\r\n * Not valid when defining a [[GeometryPart]] as nesting of parts is not supported.\r\n */\r\n public appendGeometryPart2d(partId: Id64String, instanceOrigin?: Point2d, instanceRotation?: Angle, instanceScale?: number): boolean {\r\n return this.appendGeometryPart3d(partId, instanceOrigin ? Point3d.createFrom(instanceOrigin) : undefined, instanceRotation ? new YawPitchRollAngles(instanceRotation) : undefined, instanceScale);\r\n }\r\n }\r\n\r\n /** Current state information for [[ElementGeometry.Iterator]] */\r\n export interface IteratorData {\r\n /** A [[GeometryParams]] representing the appearance of the current geometric entry */\r\n readonly geomParams: GeometryParams;\r\n /** Placement transform, used for converting placement relative, local coordinate entries to world */\r\n readonly localToWorld?: Transform;\r\n /** Optional stored local range for the current geometric entry */\r\n readonly localRange?: Range3d;\r\n /** The current displayable opcode */\r\n readonly value: ElementGeometryDataEntry;\r\n }\r\n\r\n export class IteratorEntry implements IteratorData {\r\n public readonly geomParams: GeometryParams;\r\n public readonly localToWorld?: Transform;\r\n public localRange?: Range3d;\r\n private _value?: ElementGeometryDataEntry;\r\n private readonly _applyLocalToWorld: boolean;\r\n\r\n public constructor(geomParams: GeometryParams, localToWorld: Transform, applyLocalToWorld?: boolean) {\r\n this.geomParams = geomParams;\r\n this.localToWorld = localToWorld;\r\n this._applyLocalToWorld = applyLocalToWorld ? !localToWorld.isIdentity : false;\r\n }\r\n\r\n public get value() { return this._value!; }\r\n public set value(value: ElementGeometryDataEntry) { this._value = value; }\r\n\r\n public get outputTransform(): Transform | undefined {\r\n return this._applyLocalToWorld ? this.localToWorld : undefined;\r\n }\r\n\r\n /** Return the [[GeometryQuery]] representation for the current entry */\r\n public toGeometryQuery(): GeometryQuery | undefined {\r\n return toGeometryQuery(this.value, this.outputTransform);\r\n }\r\n\r\n /** Return the [[BRepEntity.DataProps]] representation for the current entry for checking brep type and face attachments. */\r\n public toBRepData(wantBRepData: boolean = false): BRepEntity.DataProps | undefined {\r\n return toBRep(this.value, wantBRepData, this.outputTransform);\r\n }\r\n\r\n /** Return the [[TextString]] representation for the current entry */\r\n public toTextString(): TextString | undefined {\r\n const props = toTextString(this.value, this.outputTransform);\r\n return (undefined !== props ? new TextString(props) : undefined);\r\n }\r\n\r\n /** Return the [[ImageGraphic]] representation for the current entry */\r\n public toImageGraphic(): ImageGraphic | undefined {\r\n const props = toImageGraphic(this.value, this.outputTransform);\r\n return (undefined !== props ? ImageGraphic.fromJSON(props) : undefined);\r\n }\r\n\r\n /** Return the GeometryPart information for the current entry */\r\n public toGeometryPart(partToLocal?: Transform, partToWorld?: Transform): Id64String | undefined {\r\n if (undefined === partToLocal && undefined !== partToWorld)\r\n partToLocal = Transform.createIdentity();\r\n\r\n const partId = toGeometryPart(this.value, partToLocal);\r\n if (undefined === partId || undefined === partToLocal || undefined === partToWorld)\r\n return partId;\r\n\r\n if (undefined !== this.localToWorld)\r\n this.localToWorld.multiplyTransformTransform(partToLocal, partToWorld);\r\n\r\n return partId;\r\n }\r\n }\r\n\r\n /** [[ElementGeometry.Iterator]] is a helper class for iterating a [[ElementGeometryDataEntry]] array.\r\n * Each [[ElementGeometryDataEntry]] returned by the iterator represents exactly one displayable entry.\r\n */\r\n export class Iterator implements IterableIterator<IteratorEntry> {\r\n /** GeometryStream entries */\r\n public readonly entryArray: ElementGeometryDataEntry[];\r\n /** The geometric element's placement or geometry part's local range (placement.bbox) */\r\n public readonly placement: Placement3d;\r\n /** If true, geometry displays oriented to face the camera */\r\n public readonly viewIndependent?: boolean;\r\n /** If true, geometry stream contained breps that were omitted or replaced as requested */\r\n public readonly brepsPresent?: boolean;\r\n /** Current entry position */\r\n private _index = 0;\r\n /** Allocated on first call to next() and reused thereafter */\r\n private _entry?: IteratorEntry;\r\n /** Used to initialize this._entry */\r\n private readonly _appearance: GeometryParams;\r\n private readonly _localToWorld: Transform;\r\n /** Whether deserialized entry data is returned in world or local coordinates */\r\n private _applyLocalToWorld = false;\r\n\r\n /** Construct a new Iterator given a [[ElementGeometryInfo]] from either a [[GeometricElement3d]], [[GeometricElement2d]], or [[GeometryPart]].\r\n * Supply the optional [[GeometryParams]] and localToWorld transform to iterate a [[GeometryPart]] in the context of a [[GeometricElement]] reference.\r\n */\r\n public constructor(info: ElementGeometryInfo, categoryOrGeometryParams?: Id64String | GeometryParams, localToWorld?: Transform) {\r\n this.entryArray = info.entryArray;\r\n this.viewIndependent = info.viewIndependent;\r\n this.brepsPresent = info.brepsPresent;\r\n\r\n if (undefined !== info.categoryId)\r\n categoryOrGeometryParams = info.categoryId;\r\n\r\n if (undefined !== categoryOrGeometryParams)\r\n this._appearance = typeof categoryOrGeometryParams === \"string\" ? new GeometryParams(categoryOrGeometryParams) : categoryOrGeometryParams;\r\n else\r\n this._appearance = new GeometryParams(Id64.invalid);\r\n\r\n if (undefined !== info.sourceToWorld)\r\n localToWorld = ElementGeometry.toTransform(info.sourceToWorld);\r\n\r\n if (undefined !== localToWorld)\r\n this._localToWorld = localToWorld;\r\n else\r\n this._localToWorld = Transform.createIdentity();\r\n\r\n const orgAng = YawPitchRollAngles.tryFromTransform(this._localToWorld);\r\n if (undefined === orgAng.angles)\r\n orgAng.angles = YawPitchRollAngles.createDegrees(0, 0, 0);\r\n\r\n let bbox = (undefined !== info.bbox ? ElementGeometry.toElementAlignedBox3d(info.bbox) : undefined);\r\n if (undefined === bbox)\r\n bbox = Range3d.createNull();\r\n\r\n this.placement = new Placement3d(orgAng.origin, orgAng.angles, bbox);\r\n }\r\n\r\n /** Call to return deserialized entry data in world coordinates */\r\n public requestWorldCoordinates(): void {\r\n this._applyLocalToWorld = !this._localToWorld.isIdentity;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private get entry() {\r\n if (undefined === this._entry)\r\n this._entry = new IteratorEntry(this._appearance, this._localToWorld, this._applyLocalToWorld);\r\n\r\n return this._entry;\r\n }\r\n\r\n /** Advance to next displayable opcode (geometric entry or geometry part) while updating the current [[GeometryParams]] from appearance related opcodes. */\r\n public next(): IteratorResult<IteratorEntry> {\r\n while (this._index < this.entryArray.length) {\r\n const value = this.entryArray[this._index++];\r\n if (ElementGeometry.isAppearanceEntry(value)) {\r\n const localToWorld = (this._applyLocalToWorld ? this._localToWorld : undefined);\r\n ElementGeometry.updateGeometryParams(value, this.entry.geomParams, localToWorld);\r\n } else if (ElementGeometryOpcode.SubGraphicRange === value.opcode) {\r\n // NOTE: localRange remains valid until the next sub-range entry is encountered...\r\n this.entry.localRange = ElementGeometry.toSubGraphicRange(value);\r\n } else if (ElementGeometryOpcode.PartReference === value.opcode) {\r\n this.entry.value = value;\r\n return { value: this.entry, done: false };\r\n } else if (ElementGeometry.isGeometricEntry(value)) {\r\n this.entry.value = value;\r\n return { value: this.entry, done: false };\r\n }\r\n }\r\n\r\n return { value: this.entry, done: true };\r\n }\r\n\r\n public [Symbol.iterator](): IterableIterator<IteratorEntry> {\r\n return this;\r\n }\r\n }\r\n\r\n /** Return whether the supplied entry can be represented as a [[GeometryQuery]] */\r\n export function isGeometryQueryEntry(entry: ElementGeometryDataEntry): boolean {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.PointPrimitive:\r\n case ElementGeometryOpcode.PointPrimitive2d:\r\n case ElementGeometryOpcode.ArcPrimitive:\r\n case ElementGeometryOpcode.CurveCollection:\r\n case ElementGeometryOpcode.Polyface:\r\n case ElementGeometryOpcode.CurvePrimitive:\r\n case ElementGeometryOpcode.SolidPrimitive:\r\n case ElementGeometryOpcode.BsplineSurface:\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /** Return whether the supplied entry is displayable geometry [[GeometryQuery]], [[BRepEntity.DataProps]], [[TextString]], or [[ImageGraphic]] */\r\n export function isGeometricEntry(entry: ElementGeometryDataEntry): boolean {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.BRep:\r\n case ElementGeometryOpcode.TextString:\r\n case ElementGeometryOpcode.Image:\r\n return true;\r\n\r\n default:\r\n return isGeometryQueryEntry(entry);\r\n }\r\n }\r\n\r\n /** Return whether the supplied entry is geometric or a part reference */\r\n export function isDisplayableEntry(entry: ElementGeometryDataEntry): boolean {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.PartReference:\r\n return true;\r\n\r\n default:\r\n return isGeometricEntry(entry);\r\n }\r\n }\r\n\r\n /** Return whether the supplied entry represents appearance information */\r\n export function isAppearanceEntry(entry: ElementGeometryDataEntry): boolean {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.BasicSymbology:\r\n case ElementGeometryOpcode.Fill:\r\n case ElementGeometryOpcode.Pattern:\r\n case ElementGeometryOpcode.Material:\r\n case ElementGeometryOpcode.LineStyleModifiers:\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /** Return whether the supplied entry represents a single open curve or path */\r\n export function isCurve(entry: ElementGeometryDataEntry): boolean {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.PointPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive.getRootAsPointPrimitive(buffer);\r\n return (EGFBAccessors.BoundaryType.Open === ppfb.boundary());\r\n }\r\n\r\n case ElementGeometryOpcode.PointPrimitive2d: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive2d.getRootAsPointPrimitive2d(buffer);\r\n return (EGFBAccessors.BoundaryType.Open === ppfb.boundary());\r\n }\r\n\r\n case ElementGeometryOpcode.ArcPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.ArcPrimitive.getRootAsArcPrimitive(buffer);\r\n return (EGFBAccessors.BoundaryType.Open === ppfb.boundary());\r\n }\r\n\r\n case ElementGeometryOpcode.CurvePrimitive: {\r\n // should never be a point string or closed bcurve...\r\n return true;\r\n }\r\n\r\n case ElementGeometryOpcode.CurveCollection: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return false;\r\n return (\"curveCollection\" === geom.geometryCategory && !(geom as CurveCollection).isAnyRegionType);\r\n }\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /** Return whether the supplied entry represents a loop, planar region, open polyface, or sheet body */\r\n export function isSurface(entry: ElementGeometryDataEntry): boolean {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.PointPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive.getRootAsPointPrimitive(buffer);\r\n return (EGFBAccessors.BoundaryType.Closed === ppfb.boundary());\r\n }\r\n\r\n case ElementGeometryOpcode.PointPrimitive2d: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive2d.getRootAsPointPrimitive2d(buffer);\r\n return (EGFBAccessors.BoundaryType.Closed === ppfb.boundary());\r\n }\r\n\r\n case ElementGeometryOpcode.ArcPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.ArcPrimitive.getRootAsArcPrimitive(buffer);\r\n return (EGFBAccessors.BoundaryType.Closed === ppfb.boundary());\r\n }\r\n\r\n case ElementGeometryOpcode.CurvePrimitive: {\r\n // should never be a closed bcurve...\r\n return false;\r\n }\r\n\r\n case ElementGeometryOpcode.CurveCollection: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return false;\r\n return (\"curveCollection\" === geom.geometryCategory && (geom as CurveCollection).isAnyRegionType);\r\n }\r\n\r\n case ElementGeometryOpcode.SolidPrimitive: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return false;\r\n return (\"solid\" === geom.geometryCategory && !(geom as SolidPrimitive).isClosedVolume);\r\n }\r\n\r\n case ElementGeometryOpcode.Polyface: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return false;\r\n if (\"polyface\" !== geom.geometryCategory)\r\n return false;\r\n const polyface = (geom as Polyface);\r\n switch (polyface.expectedClosure) {\r\n case 0:\r\n return !PolyfaceQuery.isPolyfaceClosedByEdgePairing(polyface);\r\n case 1:\r\n return true;\r\n case 2:\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n case ElementGeometryOpcode.BsplineSurface: {\r\n // never treated as a solid even if closed/periodic in u/v...\r\n return true;\r\n }\r\n\r\n case ElementGeometryOpcode.BRep: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.BRepData.getRootAsBRepData(buffer);\r\n return (EGFBAccessors.BRepType.Sheet === ppfb.brepType());\r\n }\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /** Return whether the supplied entry represents a capped solid, closed polyface, or solid body */\r\n export function isSolid(entry: ElementGeometryDataEntry): boolean {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.SolidPrimitive: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return false;\r\n return (\"solid\" === geom.geometryCategory && (geom as SolidPrimitive).isClosedVolume);\r\n }\r\n\r\n case ElementGeometryOpcode.Polyface: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return false;\r\n if (\"polyface\" !== geom.geometryCategory)\r\n return false;\r\n const polyface = (geom as Polyface);\r\n switch (polyface.expectedClosure) {\r\n case 0:\r\n return PolyfaceQuery.isPolyfaceClosedByEdgePairing(polyface);\r\n case 2:\r\n return true;\r\n case 1:\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n case ElementGeometryOpcode.BRep: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.BRepData.getRootAsBRepData(buffer);\r\n return (EGFBAccessors.BRepType.Solid === ppfb.brepType());\r\n }\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /** Return the body type that would be used to represent the supplied entry */\r\n export function getBRepEntityType(entry: ElementGeometryDataEntry): BRepEntity.Type | undefined {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.PointPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive.getRootAsPointPrimitive(buffer);\r\n if (EGFBAccessors.BoundaryType.None === ppfb.boundary())\r\n return undefined;\r\n return (EGFBAccessors.BoundaryType.Closed === ppfb.boundary() ? BRepEntity.Type.Sheet : BRepEntity.Type.Wire);\r\n }\r\n\r\n case ElementGeometryOpcode.PointPrimitive2d: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive2d.getRootAsPointPrimitive2d(buffer);\r\n if (EGFBAccessors.BoundaryType.None === ppfb.boundary())\r\n return undefined;\r\n return (EGFBAccessors.BoundaryType.Closed === ppfb.boundary() ? BRepEntity.Type.Sheet : BRepEntity.Type.Wire);\r\n }\r\n\r\n case ElementGeometryOpcode.ArcPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.ArcPrimitive.getRootAsArcPrimitive(buffer);\r\n return (EGFBAccessors.BoundaryType.Closed === ppfb.boundary() ? BRepEntity.Type.Sheet : BRepEntity.Type.Wire);\r\n }\r\n\r\n case ElementGeometryOpcode.CurvePrimitive: {\r\n // should never be a point string or closed bcurve...\r\n return BRepEntity.Type.Wire;\r\n }\r\n\r\n case ElementGeometryOpcode.CurveCollection: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return undefined;\r\n if (\"curveCollection\" !== geom.geometryCategory)\r\n return undefined;\r\n const curves = geom as CurveCollection;\r\n return (curves.isAnyRegionType ? BRepEntity.Type.Sheet : BRepEntity.Type.Wire);\r\n }\r\n\r\n case ElementGeometryOpcode.SolidPrimitive: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return undefined;\r\n if (\"solid\" !== geom.geometryCategory)\r\n return undefined;\r\n const solid = geom as SolidPrimitive;\r\n return (solid.isClosedVolume ? BRepEntity.Type.Solid : BRepEntity.Type.Sheet);\r\n }\r\n\r\n case ElementGeometryOpcode.BsplineSurface: {\r\n // always a surface...\r\n return BRepEntity.Type.Sheet;\r\n }\r\n\r\n case ElementGeometryOpcode.Polyface: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return undefined;\r\n if (\"polyface\" !== geom.geometryCategory)\r\n return undefined;\r\n const polyface = (geom as Polyface);\r\n switch (polyface.expectedClosure) {\r\n case 0:\r\n return PolyfaceQuery.isPolyfaceClosedByEdgePairing(polyface) ? BRepEntity.Type.Solid : BRepEntity.Type.Sheet;\r\n case 1:\r\n return BRepEntity.Type.Sheet;\r\n case 2:\r\n return BRepEntity.Type.Solid;\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n case ElementGeometryOpcode.BRep: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.BRepData.getRootAsBRepData(buffer);\r\n switch (ppfb.brepType()) {\r\n case EGFBAccessors.BRepType.Wire:\r\n return BRepEntity.Type.Wire; // always be persisted as a curve type...\r\n case EGFBAccessors.BRepType.Sheet:\r\n return BRepEntity.Type.Sheet;\r\n case EGFBAccessors.BRepType.Solid:\r\n return BRepEntity.Type.Solid;\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n /** Return entry as a [[GeometryQuery]] */\r\n export function toGeometryQuery(entry: ElementGeometryDataEntry, localToWorld?: Transform): GeometryQuery | undefined {\r\n if (!isGeometryQueryEntry(entry))\r\n return undefined;\r\n\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.PointPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive.getRootAsPointPrimitive(buffer);\r\n\r\n const pts: Point3d[] = [];\r\n for (let i = 0; i < ppfb.coordsLength(); i++)\r\n pts.push(Point3d.create(ppfb.coords(i)!.x(), ppfb.coords(i)!.y(), ppfb.coords(i)!.z()));\r\n\r\n if (0 === pts.length)\r\n return undefined;\r\n\r\n if (undefined !== localToWorld)\r\n localToWorld.multiplyPoint3dArrayInPlace(pts);\r\n\r\n switch (ppfb.boundary()) {\r\n case EGFBAccessors.BoundaryType.Open:\r\n return LineString3d.createPoints(pts);\r\n case EGFBAccessors.BoundaryType.Closed:\r\n return Loop.createPolygon(pts);\r\n default:\r\n return PointString3d.createPoints(pts);\r\n }\r\n }\r\n\r\n case ElementGeometryOpcode.PointPrimitive2d: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive2d.getRootAsPointPrimitive2d(buffer);\r\n\r\n const pts: Point3d[] = [];\r\n for (let i = 0; i < ppfb.coordsLength(); i++)\r\n pts.push(Point3d.create(ppfb.coords(i)!.x(), ppfb.coords(i)!.y()));\r\n\r\n if (0 === pts.length)\r\n return undefined;\r\n\r\n if (undefined !== localToWorld)\r\n localToWorld.multiplyPoint3dArrayInPlace(pts);\r\n\r\n switch (ppfb.boundary()) {\r\n case EGFBAccessors.BoundaryType.Open:\r\n return LineString3d.createPoints(pts);\r\n case EGFBAccessors.BoundaryType.Closed:\r\n return Loop.createPolygon(pts);\r\n default:\r\n return PointString3d.createPoints(pts);\r\n }\r\n }\r\n\r\n case ElementGeometryOpcode.ArcPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.ArcPrimitive.getRootAsArcPrimitive(buffer);\r\n\r\n const center = Point3d.create(ppfb.center()!.x(), ppfb.center()!.y(), ppfb.center()!.z());\r\n const vector0 = Vector3d.create(ppfb.vector0()!.x(), ppfb.vector0()!.y(), ppfb.vector0()!.z());\r\n const vector90 = Vector3d.create(ppfb.vector90()!.x(), ppfb.vector90()!.y(), ppfb.vector90()!.z());\r\n const arc = Arc3d.create(center, vector0, vector90, AngleSweep.createStartSweepRadians(ppfb.start(), ppfb.sweep()));\r\n\r\n if (undefined !== localToWorld && !arc.tryTransformInPlace(localToWorld))\r\n return undefined;\r\n\r\n return (EGFBAccessors.BoundaryType.Closed === ppfb.boundary() ? Loop.create(arc) : arc);\r\n }\r\n\r\n case ElementGeometryOpcode.CurvePrimitive:\r\n case ElementGeometryOpcode.CurveCollection:\r\n case ElementGeometryOpcode.SolidPrimitive:\r\n case ElementGeometryOpcode.BsplineSurface:\r\n case ElementGeometryOpcode.Polyface:\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return undefined; // Should always be a single entry not an array...\r\n if (undefined !== localToWorld && !geom.tryTransformInPlace(localToWorld))\r\n return undefined;\r\n return geom;\r\n\r\n default:\r\n return undefined; // Not a GeometryQuery, need to be handled explicitly...\r\n }\r\n }\r\n\r\n /** Create entry from a [[GeometryQuery]] */\r\n export function fromGeometryQuery(geom: GeometryQuery, worldToLocal?: Transform): ElementGeometryDataEntry | undefined {\r\n let opcode;\r\n switch (geom.geometryCategory) {\r\n case \"bsurf\":\r\n opcode = ElementGeometryOpcode.BsplineSurface;\r\n break;\r\n case \"curveCollection\":\r\n opcode = ElementGeometryOpcode.CurveCollection;\r\n break;\r\n case \"curvePrimitive\":\r\n case \"pointCollection\":\r\n opcode = ElementGeometryOpcode.CurvePrimitive;\r\n break;\r\n case \"polyface\":\r\n opcode = ElementGeometryOpcode.Polyface;\r\n break;\r\n case \"solid\":\r\n opcode = ElementGeometryOpcode.SolidPrimitive;\r\n break;\r\n default:\r\n return undefined;\r\n }\r\n\r\n if (undefined !== worldToLocal) {\r\n const localGeom = geom.cloneTransformed(worldToLocal);\r\n if (undefined === localGeom)\r\n return undefined;\r\n geom = localGeom;\r\n }\r\n\r\n const data = BentleyGeometryFlatBuffer.geometryToBytes(geom, true);\r\n if (undefined === data)\r\n return undefined;\r\n\r\n return { opcode, data };\r\n }\r\n\r\n /** Return entry as a [[TextString]] */\r\n export function toTextString(entry: ElementGeometryDataEntry, localToWorld?: Transform): TextStringProps | undefined {\r\n if (ElementGeometryOpcode.TextString !== entry.opcode)\r\n return undefined;\r\n\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.TextString.getRootAsTextString(buffer);\r\n\r\n const style = ppfb.style();\r\n if (null === style)\r\n return undefined;\r\n\r\n const text = ppfb.text();\r\n const props: TextStringProps = { text: (null !== text ? text : \"\"), font: style.fontId(), height: style.height() };\r\n\r\n props.widthFactor = style.widthFactor();\r\n props.bold = style.isBold();\r\n props.italic = style.isItalic();\r\n props.underline = style.isUnderlined();\r\n\r\n const transform = ppfb.transform();\r\n if (null !== transform) {\r\n props.origin = Point3d.create(transform.form3d03(), transform.form3d13(), transform.form3d23());\r\n props.rotation = YawPitchRollAngles.createFromMatrix3d(Matrix3d.createRowValues(transform.form3d00(), transform.form3d01(), transform.form3d02(), transform.form3d10(), transform.form3d11(), transform.form3d12(), transform.form3d20(), transform.form3d21(), transform.form3d22()));\r\n }\r\n\r\n if (undefined === localToWorld)\r\n return props;\r\n\r\n const textString = new TextString(props);\r\n if (!textString.transformInPlace(localToWorld))\r\n return undefined;\r\n\r\n return textString.toJSON();\r\n }\r\n\r\n /** Create entry from a [[TextString]] */\r\n export function fromTextString(text: TextStringProps, worldToLocal?: Transform): ElementGeometryDataEntry | undefined {\r\n if (undefined !== worldToLocal) {\r\n const localText = new TextString(text);\r\n if (!localText.transformInPlace(worldToLocal))\r\n return undefined;\r\n text = localText.toJSON();\r\n }\r\n\r\n const fbb = new flatbuffers.Builder();\r\n const builder = EGFBAccessors.TextString;\r\n\r\n const textOffset = fbb.createString(text.text);\r\n const styleOffset = EGFBAccessors.TextStringStyle.createTextStringStyle(fbb, 1, 0, text.font, undefined === text.bold ? false : text.bold, undefined === text.italic ? false : text.italic, undefined === text.underline ? false : text.underline, text.height, undefined === text.widthFactor ? 1.0 : text.widthFactor);\r\n\r\n builder.startTextString(fbb);\r\n\r\n builder.addMajorVersion(fbb, 1);\r\n builder.addMinorVersion(fbb, 0);\r\n\r\n builder.addText(fbb, textOffset);\r\n builder.addStyle(fbb, styleOffset);\r\n\r\n if (undefined !== text.origin || undefined !== text.rotation) {\r\n const origin = Point3d.fromJSON(text.origin);\r\n const angles = YawPitchRollAngles.fromJSON(text.rotation);\r\n const matrix = angles.toMatrix3d();\r\n const coffs = matrix.coffs;\r\n const transformOffset = EGFBAccessors.TextStringTransform.createTextStringTransform(fbb, coffs[0], coffs[1], coffs[2], origin.x, coffs[3], coffs[4], coffs[5], origin.y, coffs[6], coffs[7], coffs[8], origin.z);\r\n builder.addTransform(fbb, transformOffset);\r\n }\r\n\r\n const mLoc = builder.endTextString(fbb);\r\n fbb.finish(mLoc);\r\n const data = fbb.asUint8Array();\r\n\r\n return { opcode: ElementGeometryOpcode.TextString, data };\r\n }\r\n\r\n /** Return entry as a [[ImageGraphic]] */\r\n export function toImageGraphic(entry: ElementGeometryDataEntry, localToWorld?: Transform): ImageGraphicProps | undefined {\r\n if (ElementGeometryOpcode.Image !== entry.opcode)\r\n return undefined;\r\n\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.Image.getRootAsImage(buffer);\r\n\r\n const textureLong = ppfb.textureId();\r\n const textureId = Id64.fromUint32Pair(textureLong.low, textureLong.high);\r\n const hasBorder = (1 === ppfb.drawBorder());\r\n\r\n const corners = new ImageGraphicCorners(Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero());\r\n const corner0 = ppfb.tileCorner0();\r\n const corner1 = ppfb.tileCorner1();\r\n const corner2 = ppfb.tileCorner2();\r\n const corner3 = ppfb.tileCorner3();\r\n\r\n if (null !== corner0)\r\n corners[0].setFrom(Point3d.create(corner0.x(), corner0.y(), corner0.z()));\r\n if (null !== corner1)\r\n corners[1].setFrom(Point3d.create(corner1.x(), corner1.y(), corner1.z()));\r\n if (null !== corner2)\r\n corners[2].setFrom(Point3d.create(corner2.x(), corner2.y(), corner2.z()));\r\n if (null !== corner3)\r\n corners[3].setFrom(Point3d.create(corner3.x(), corner3.y(), corner3.z()));\r\n\r\n if (undefined !== localToWorld) {\r\n localToWorld.multiplyXYAndZInPlace(corners[0]);\r\n localToWorld.multiplyXYAndZInPlace(corners[1]);\r\n localToWorld.multiplyXYAndZInPlace(corners[2]);\r\n localToWorld.multiplyXYAndZInPlace(corners[3]);\r\n }\r\n\r\n return { corners: corners.toJSON(), textureId, hasBorder };\r\n }\r\n\r\n /** Create entry from a [[ImageGraphic]] */\r\n export function fromImageGraphic(image: ImageGraphicProps, worldToLocal?: Transform): ElementGeometryDataEntry | undefined {\r\n if (undefined !== worldToLocal) {\r\n const localImage = ImageGraphic.fromJSON(image).cloneTransformed(worldToLocal);\r\n image = localImage.toJSON();\r\n }\r\n\r\n const fbb = new flatbuffers.Builder();\r\n const builder = EGFBAccessors.Image;\r\n builder.startImage(fbb);\r\n\r\n const textudeIdPair = Id64.getUint32Pair(image.textureId);\r\n builder.addTextureId(fbb, flatbuffers.Long.create(textudeIdPair.lower, textudeIdPair.upper));\r\n builder.addDrawBorder(fbb, image.hasBorder ? 1 : 0);\r\n\r\n const corners = ImageGraphicCorners.fromJSON(image.corners);\r\n const cornerOffset0 = EGFBAccessors.DPoint3d.createDPoint3d(fbb, corners[0].x, corners[0].y, corners[0].z);\r\n builder.addTileCorner0(fbb, cornerOffset0);\r\n const cornerOffset1 = EGFBAccessors.DPoint3d.createDPoint3d(fbb, corners[1].x, corners[1].y, corners[1].z);\r\n builder.addTileCorner1(fbb, cornerOffset1);\r\n const cornerOffset2 = EGFBAccessors.DPoint3d.createDPoint3d(fbb, corners[2].x, corners[2].y, corners[2].z);\r\n builder.addTileCorner2(fbb, cornerOffset2);\r\n const cornerOffset3 = EGFBAccessors.DPoint3d.createDPoint3d(fbb, corners[3].x, corners[3].y, corners[3].z);\r\n builder.addTileCorner3(fbb, cornerOffset3);\r\n\r\n const mLoc = builder.endImage(fbb);\r\n fbb.finish(mLoc);\r\n const data = fbb.asUint8Array();\r\n\r\n return { opcode: ElementGeometryOpcode.Image, data };\r\n }\r\n\r\n /** Return entry as a [[BRepEntity.DataProps]] for checking brep type and face attachments. */\r\n export function toBRep(entry: ElementGeometryDataEntry, wantBRepData: boolean = false, localToWorld?: Transform): BRepEntity.DataProps | undefined {\r\n if (ElementGeometryOpcode.BRep !== entry.opcode)\r\n return undefined;\r\n\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.BRepData.getRootAsBRepData(buffer);\r\n\r\n const toBRepType = (typeFb: EGFBAccessors.BRepType) => {\r\n switch (typeFb) {\r\n case EGFBAccessors.BRepType.Wire:\r\n return BRepEntity.Type.Wire;\r\n case EGFBAccessors.BRepType.Sheet:\r\n return BRepEntity.Type.Sheet;\r\n default:\r\n return BRepEntity.Type.Solid;\r\n }\r\n };\r\n\r\n const type = toBRepType(ppfb.brepType());\r\n\r\n let transform;\r\n const entityTransform = ppfb.entityTransform();\r\n if (null !== entityTransform)\r\n transform = Transform.createRowValues(entityTransform.x00(), entityTransform.x01(), entityTransform.x02(), entityTransform.tx(), entityTransform.x10(), entityTransform.x11(), entityTransform.x12(), entityTransform.ty(), entityTransform.x20(), entityTransform.x21(), entityTransform.x22(), entityTransform.tz());\r\n\r\n if (undefined !== localToWorld) {\r\n if (undefined !== transform)\r\n transform.multiplyTransformTransform(localToWorld, transform);\r\n else\r\n transform = localToWorld;\r\n }\r\n\r\n const faceSymbLen = ppfb.symbologyLength();\r\n let faceSymbology;\r\n if (0 !== faceSymbLen) {\r\n const faceSymbPropsArray: BRepEntity.FaceSymbologyProps[] = [];\r\n for (let index = 0; index < faceSymbLen; ++index) {\r\n const faceSymbFb = ppfb.symbology(index);\r\n const faceSymbProps: BRepEntity.FaceSymbologyProps = {};\r\n if (null !== faceSymbFb) {\r\n if (1 === faceSymbFb.useColor())\r\n faceSymbProps.color = faceSymbFb.color();\r\n if (1 === faceSymbFb.useMaterial())\r\n faceSymbProps.materialId = Id64.fromUint32Pair(faceSymbFb.materialId().low, faceSymbFb.materialId().high);\r\n faceSymbProps.transparency = faceSymbFb.transparency();\r\n }\r\n faceSymbPropsArray.push(faceSymbProps);\r\n }\r\n faceSymbology = faceSymbPropsArray;\r\n }\r\n\r\n let data;\r\n const entityData = ppfb.entityDataArray();\r\n if (wantBRepData && null !== entityData)\r\n data = Base64EncodedString.fromUint8Array(entityData);\r\n\r\n return { data, type, transform: transform?.toJSON(), faceSymbology };\r\n }\r\n\r\n /** Create entry from a [[BRepEntity.DataProps]]. Provided for compatibility with GeometryStreamBuilder only. */\r\n export function fromBRep(brep: BRepEntity.DataProps, worldToLocal?: Transform): ElementGeometryDataEntry | undefined {\r\n if (undefined !== worldToLocal) {\r\n const entityTrans = Transform.fromJSON(brep.transform);\r\n const localTrans = entityTrans.multiplyTransformTransform(worldToLocal);\r\n brep = {\r\n data: brep.data,\r\n type: brep.type,\r\n transform: localTrans.isIdentity ? undefined : localTrans.toJSON(),\r\n faceSymbology: brep.faceSymbology,\r\n };\r\n }\r\n\r\n const fbb = new flatbuffers.Builder();\r\n const builder = EGFBAccessors.BRepData;\r\n let dataOffset;\r\n let faceSymbOffset;\r\n\r\n if (undefined !== brep.data) {\r\n const entityData = Base64EncodedString.toUint8Array(brep.data);\r\n if (entityData.length === 0)\r\n return undefined;\r\n\r\n dataOffset = builder.createEntityDataVector(fbb, entityData);\r\n }\r\n\r\n if (undefined !== brep.faceSymbology) {\r\n builder.startSymbologyVector(fbb, brep.faceSymbology.length);\r\n for (let i = brep.faceSymbology.length - 1; i >= 0; i--) {\r\n const symb = brep.faceSymbology[i];\r\n const materialIdPair = Id64.getUint32Pair(symb.materialId ? symb.materialId : Id64.invalid);\r\n const matLong = flatbuffers.Long.create(materialIdPair.lower, materialIdPair.upper);\r\n EGFBAccessors.FaceSymbology.createFaceSymbology(fbb, symb.color ? 1 : 0, symb.materialId ? 1 : 0, symb.color ? symb.color : 0, matLong, symb.transparency ? symb.transparency : 0, 0, 0);\r\n }\r\n faceSymbOffset = fbb.endVector();\r\n }\r\n\r\n builder.startBRepData(fbb);\r\n\r\n const toEGFBBRepType = (type: BRepEntity.Type) => {\r\n switch (type) {\r\n case BRepEntity.Type.Wire:\r\n return EGFBAccessors.BRepType.Wire;\r\n case BRepEntity.Type.Sheet:\r\n return EGFBAccessors.BRepType.Sheet;\r\n default:\r\n return EGFBAccessors.BRepType.Solid;\r\n }\r\n };\r\n\r\n if (undefined !== brep.type)\r\n builder.addBrepType(fbb, toEGFBBRepType(brep.type));\r\n\r\n if (undefined !== brep.transform) {\r\n const transform = Transform.fromJSON(brep.transform);\r\n const transformOffset = EGFBAccessors.Transform.createTransform(fbb, transform.matrix.coffs[0], transform.matrix.coffs[1], transform.matrix.coffs[2], transform.origin.x, transform.matrix.coffs[3], transform.matrix.coffs[4], transform.matrix.coffs[5], transform.origin.y, transform.matrix.coffs[6], transform.matrix.coffs[7], transform.matrix.coffs[8], transform.origin.z);\r\n builder.addEntityTransform(fbb, transformOffset);\r\n }\r\n\r\n if (undefined !== dataOffset)\r\n builder.addEntityData(fbb, dataOffset);\r\n\r\n if (undefined !== faceSymbOffset)\r\n builder.addSymbology(fbb, faceSymbOffset);\r\n\r\n const mLoc = builder.endBRepData(fbb);\r\n fbb.finish(mLoc);\r\n const data = fbb.asUint8Array();\r\n\r\n return { opcode: ElementGeometryOpcode.BRep, data };\r\n }\r\n\r\n /** Apply transform directly to ElementGeometryDataEntry for a BRep */\r\n export function transformBRep(entry: ElementGeometryDataEntry, inputTransform: Transform): boolean {\r\n if (ElementGeometryOpcode.BRep !== entry.opcode)\r\n return false;\r\n\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.BRepData.getRootAsBRepData(buffer);\r\n\r\n const fbb = new flatbuffers.Builder();\r\n const builder = EGFBAccessors.BRepData;\r\n\r\n const entityData = ppfb.entityDataArray();\r\n const dataOffset = (null !== entityData ? builder.createEntityDataVector(fbb, entityData) : undefined);\r\n\r\n let faceSymbOffset;\r\n const faceSymbLen = ppfb.symbologyLength();\r\n if (0 !== faceSymbLen) {\r\n builder.startSymbologyVector(fbb, faceSymbLen);\r\n for (let i = faceSymbLen - 1; i >= 0; i--) {\r\n const faceSymbFb = ppfb.symbology(i);\r\n if (null === faceSymbFb)\r\n continue;\r\n EGFBAccessors.FaceSymbology.createFaceSymbology(fbb, faceSymbFb.useColor(), faceSymbFb.useMaterial(), faceSymbFb.color(), faceSymbFb.materialId(), faceSymbFb.transparency(), 0, 0);\r\n }\r\n faceSymbOffset = fbb.endVector();\r\n }\r\n\r\n builder.startBRepData(fbb);\r\n builder.addBrepType(fbb, ppfb.brepType());\r\n\r\n let transform;\r\n const entityTransform = ppfb.entityTransform();\r\n if (null !== entityTransform)\r\n transform = Transform.createRowValues(entityTransform.x00(), entityTransform.x01(), entityTransform.x02(), entityTransform.tx(), entityTransform.x10(), entityTransform.x11(), entityTransform.x12(), entityTransform.ty(), entityTransform.x20(), entityTransform.x21(), entityTransform.x22(), entityTransform.tz());\r\n\r\n if (undefined !== transform)\r\n transform.multiplyTransformTransform(inputTransform, transform);\r\n else\r\n transform = inputTransform;\r\n\r\n const transformOffset = EGFBAccessors.Transform.createTransform(fbb, transform.matrix.coffs[0], transform.matrix.coffs[1], transform.matrix.coffs[2], transform.origin.x, transform.matrix.coffs[3], transform.matrix.coffs[4], transform.matrix.coffs[5], transform.origin.y, transform.matrix.coffs[6], transform.matrix.coffs[7], transform.matrix.coffs[8], transform.origin.z);\r\n builder.addEntityTransform(fbb, transformOffset);\r\n\r\n if (undefined !== dataOffset)\r\n builder.addEntityData(fbb, dataOffset);\r\n\r\n if (undefined !== faceSymbOffset)\r\n builder.addSymbology(fbb, faceSymbOffset);\r\n\r\n const mLoc = builder.endBRepData(fbb);\r\n fbb.finish(mLoc);\r\n entry.data = fbb.asUint8Array();\r\n\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n enum StyleMod {\r\n Scale = 0x01,\r\n DashScale = 0x02,\r\n GapScale = 0x04,\r\n StartWidth = 0x08,\r\n EndWidth = 0x10,\r\n DistPhase = 0x20,\r\n FractPhase = 0x40,\r\n CenterPhase = 0x80,\r\n Normal = 0x0100,\r\n Rotation = 0x0200,\r\n PhysicalWidth = 0x02000,\r\n SegMode = 0x40000000,\r\n NoSegMode = 0x80000000,\r\n }\r\n\r\n /** Update the supplied [[GeometryParams]] from an entry with appearance information */\r\n export function updateGeometryParams(entry: ElementGeometryDataEntry, geomParams: GeometryParams, localToWorld?: Transform): boolean {\r\n if (!isAppearanceEntry(entry))\r\n return false;\r\n\r\n let changed = false;\r\n\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.BasicSymbology: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.BasicSymbology.getRootAsBasicSymbology(buffer);\r\n\r\n const subcatLong = ppfb.subCategoryId();\r\n let subcatId = Id64.fromUint32Pair(subcatLong.low, subcatLong.high);\r\n\r\n if (Id64.isInvalid(subcatId))\r\n subcatId = geomParams.subCategoryId; // Preserve current sub-category if not explicitly stored...\r\n\r\n if (Id64.isValid(subcatId)) {\r\n geomParams.setSubCategoryId(subcatId); // Reset to sub-category appearance...\r\n changed = true;\r\n }\r\n\r\n if (ppfb.useColor()) {\r\n const lineColor = ColorDef.fromTbgr(ppfb.color());\r\n if (undefined === geomParams.lineColor || !lineColor.equals(geomParams.lineColor)) {\r\n geomParams.lineColor = lineColor;\r\n changed = true;\r\n }\r\n }\r\n\r\n if (ppfb.useWeight()) {\r\n const weight = ppfb.weight();\r\n if (undefined === geomParams.weight || weight !== geomParams.weight) {\r\n geomParams.weight = weight;\r\n changed = true;\r\n }\r\n }\r\n\r\n if (ppfb.useStyle()) {\r\n const styleLong = ppfb.lineStyleId();\r\n const styleId = Id64.fromUint32Pair(styleLong.low, styleLong.high);\r\n if (undefined === geomParams.styleInfo || styleId !== geomParams.styleInfo.styleId) {\r\n geomParams.styleInfo = new LineStyle.Info(styleId);\r\n changed = true;\r\n }\r\n }\r\n\r\n const transparency = ppfb.transparency();\r\n if (transparency !== (undefined !== geomParams.elmTransparency ? geomParams.elmTransparency : 0)) {\r\n geomParams.elmTransparency = transparency;\r\n changed = true;\r\n }\r\n\r\n const displayPriority = ppfb.displayPriority();\r\n if (displayPriority !== (undefined !== geomParams.elmPriority ? geomParams.elmPriority : 0)) {\r\n geomParams.elmPriority = displayPriority;\r\n changed = true;\r\n }\r\n\r\n const geometryClass = ppfb.geomClass();\r\n if (geometryClass !== (undefined !== geomParams.geometryClass ? geomParams.geometryClass : GeometryClass.Primary)) {\r\n geomParams.geometryClass = geometryClass;\r\n changed = true;\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n case ElementGeometryOpcode.LineStyleModifiers: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.LineStyleModifiers.getRootAsLineStyleModifiers(buffer);\r\n const props: LineStyle.ModifierProps = {};\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.Scale))\r\n props.scale = ppfb.scale();\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.GapScale))\r\n props.gapScale = ppfb.gapScale();\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.DashScale))\r\n props.dashScale = ppfb.dashScale();\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.StartWidth))\r\n props.startWidth = ppfb.startWidth();\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.EndWidth))\r\n props.endWidth = ppfb.endWidth();\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.DistPhase))\r\n props.distPhase = ppfb.distPhase();\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.FractPhase))\r\n props.fractPhase = ppfb.fractPhase();\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.CenterPhase))\r\n props.centerPhase = true;\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.SegMode))\r\n props.segmentMode = true;\r\n else if (0 !== (ppfb.modifiers() & StyleMod.NoSegMode))\r\n props.segmentMode = false;\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.PhysicalWidth))\r\n props.physicalWidth = true;\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.Normal)) {\r\n const normal = ppfb.normal();\r\n if (null !== normal)\r\n props.normal = Vector3d.create(normal.x(), normal.y(), normal.z());\r\n }\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.Rotation))\r\n props.rotation = YawPitchRollAngles.createDegrees(ppfb.yaw(), ppfb.pitch(), ppfb.roll());\r\n\r\n const styleMod = new LineStyle.Modifier(props);\r\n if (undefined !== localToWorld)\r\n styleMod.applyTransform(localToWorld);\r\n\r\n if (undefined === geomParams.styleInfo) {\r\n geomParams.styleInfo = new LineStyle.Info(Id64.invalid, styleMod);\r\n changed = true;\r\n } else if (undefined === geomParams.styleInfo.styleMod || !styleMod.equals(geomParams.styleInfo.styleMod)) {\r\n geomParams.styleInfo.styleMod = styleMod;\r\n changed = true;\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n case ElementGeometryOpcode.Fill: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.AreaFill.getRootAsAreaFill(buffer);\r\n\r\n const toFillDisplay = (fill: EGFBAccessors.FillDisplay) => {\r\n switch (fill) {\r\n case EGFBAccessors.FillDisplay.ByView:\r\n return FillDisplay.ByView;\r\n case EGFBAccessors.FillDisplay.Always:\r\n return FillDisplay.Always;\r\n case EGFBAccessors.FillDisplay.Blanking:\r\n return FillDisplay.Blanking;\r\n default:\r\n return FillDisplay.Never;\r\n }\r\n };\r\n\r\n const fillDisplay = toFillDisplay(ppfb.fill());\r\n if (fillDisplay !== (undefined !== geomParams.fillDisplay ? geomParams.fillDisplay : FillDisplay.Never)) {\r\n geomParams.fillDisplay = fillDisplay;\r\n changed = true;\r\n }\r\n\r\n if (FillDisplay.Never === fillDisplay)\r\n return changed;\r\n\r\n const transparency = ppfb.transparency();\r\n if (transparency !== (undefined !== geomParams.fillTransparency ? geomParams.fillTransparency : 0)) {\r\n geomParams.fillTransparency = transparency;\r\n changed = true;\r\n }\r\n\r\n if (EGFBAccessors.GradientMode.None !== ppfb.mode()) {\r\n const toGradientMode = (mode: EGFBAccessors.GradientMode) => {\r\n switch (mode) {\r\n case EGFBAccessors.GradientMode.Linear:\r\n return Gradient.Mode.Linear;\r\n case EGFBAccessors.GradientMode.Curved:\r\n return Gradient.Mode.Curved;\r\n case EGFBAccessors.GradientMode.Cylindrical:\r\n return Gradient.Mode.Cylindrical;\r\n case EGFBAccessors.GradientMode.Spherical:\r\n return Gradient.Mode.Spherical;\r\n case EGFBAccessors.GradientMode.Hemispherical:\r\n return Gradient.Mode.Hemispherical;\r\n case EGFBAccessors.GradientMode.Thematic:\r\n return Gradient.Mode.Thematic;\r\n default:\r\n return Gradient.Mode.None;\r\n }\r\n };\r\n\r\n const keys: Gradient.KeyColorProps[] = [];\r\n const colors = ppfb.colorsArray();\r\n const values = ppfb.valuesArray();\r\n if (null !== colors && null !== values && colors.length === values.length) {\r\n for (let iKey = 0; iKey < colors.length; ++iKey)\r\n keys.push({ value: values[iKey], color: colors[iKey] });\r\n }\r\n\r\n const props: Gradient.SymbProps = { mode: toGradientMode(ppfb.mode()), keys };\r\n\r\n const flags = ppfb.flags();\r\n const angle = ppfb.angle();\r\n const tint = ppfb.tint();\r\n const shift = ppfb.shift();\r\n\r\n props.flags = (0 !== flags ? flags : undefined);\r\n props.angle = (0 !== angle ? { radians: angle } : undefined);\r\n props.tint = (0 !== tint ? tint : undefined);\r\n props.shift = (0 !== shift ? shift : undefined);\r\n\r\n if (Gradient.Mode.Thematic === props.mode) {\r\n const thematic = ppfb.thematicSettings();\r\n\r\n if (null !== thematic) {\r\n const tprops: ThematicGradientSettingsProps = {};\r\n\r\n const mode = thematic.mode();\r\n const stepCount = thematic.stepCount();\r\n const marginColor = thematic.marginColor();\r\n const colorScheme = thematic.colorScheme();\r\n\r\n tprops.mode = (0 !== mode ? mode : undefined);\r\n tprops.stepCount = (0 !== stepCount ? stepCount : undefined);\r\n tprops.marginColor = (0 !== marginColor ? marginColor : undefined);\r\n tprops.colorScheme = (0 !== colorScheme ? colorScheme : undefined);\r\n\r\n props.thematicSettings = tprops;\r\n }\r\n }\r\n\r\n const gradient = Gradient.Symb.fromJSON(props);\r\n if (undefined === geomParams.gradient || !gradient.equals(geomParams.gradient)) {\r\n geomParams.gradient = gradient;\r\n changed = true;\r\n }\r\n } else if (0 !== ppfb.backgroundFill()) {\r\n const backgroundFill = (2 === ppfb.backgroundFill() ? BackgroundFill.Outline : BackgroundFill.Solid);\r\n if (backgroundFill !== geomParams.backgroundFill) {\r\n geomParams.backgroundFill = backgroundFill;\r\n changed = true;\r\n }\r\n } else if (ppfb.useColor()) {\r\n const fillColor = ColorDef.fromTbgr(ppfb.color());\r\n if (undefined === geomParams.fillColor || !fillColor.equals(geomParams.fillColor)) {\r\n geomParams.fillColor = fillColor;\r\n changed = true;\r\n }\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n case ElementGeometryOpcode.Pattern: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.AreaPattern.getRootAsAreaPattern(buffer);\r\n const props: AreaPattern.ParamsProps = {};\r\n\r\n const origin = ppfb.origin();\r\n if (null !== origin) {\r\n const point = Point3d.create(origin.x(), origin.y(), origin.z());\r\n if (!point.isAlmostZero)\r\n props.origin = point;\r\n }\r\n\r\n const rotation = ppfb.rotation();\r\n if (null !== rotation) {\r\n const angles = YawPitchRollAngles.createFromMatrix3d(Matrix3d.createRowValues(\r\n rotation.x00(), rotation.x01(), rotation.x02(),\r\n rotation.x10(), rotation.x11(), rotation.x12(),\r\n rotation.x20(), rotation.x21(), rotation.x22())\r\n );\r\n if (undefined !== angles && !angles.isIdentity())\r\n props.rotation = angles;\r\n }\r\n\r\n const space1 = ppfb.space1();\r\n const space2 = ppfb.space2();\r\n const angle1 = ppfb.angle1();\r\n const angle2 = ppfb.angle2();\r\n const scale = ppfb.scale();\r\n\r\n props.space1 = (0 !== space1 ? space1 : undefined);\r\n props.space2 = (0 !== space2 ? space2 : undefined);\r\n props.angle1 = (0 !== angle1 ? { radians: angle1 } : undefined);\r\n props.angle2 = (0 !== angle2 ? { radians: angle2 } : undefined);\r\n props.scale = (0 !== scale ? scale : undefined);\r\n\r\n if (ppfb.useColor())\r\n props.color = ppfb.color();\r\n\r\n if (ppfb.useWeight())\r\n props.weight = ppfb.weight();\r\n\r\n props.invisibleBoundary = (1 === ppfb.invisibleBoundary() ? true : undefined);\r\n props.snappable = (1 === ppfb.snappable() ? true : undefined);\r\n\r\n const symbolId = Id64.fromUint32Pair(ppfb.symbolId().low, ppfb.symbolId().high);\r\n props.symbolId = (Id64.isValid(symbolId) ? symbolId : undefined);\r\n\r\n const nDefLines = ppfb.defLineLength();\r\n if (0 !== nDefLines) {\r\n const defLines: AreaPattern.HatchDefLineProps[] = [];\r\n\r\n for (let iLine = 0; iLine < nDefLines; ++iLine) {\r\n const defLine = ppfb.defLine(iLine);\r\n if (!defLine)\r\n continue;\r\n\r\n const line: AreaPattern.HatchDefLineProps = {};\r\n\r\n const angle = defLine.angle();\r\n line.angle = (0 !== angle ? { radians: defLine.angle() } : undefined);\r\n\r\n const through = defLine.through();\r\n if (through) {\r\n const thr = Point2d.create(through.x(), through.y());\r\n if (!thr.isAlmostZero)\r\n line.through = thr;\r\n }\r\n\r\n const offset = defLine.offset();\r\n if (offset) {\r\n const off = Point2d.create(offset.x(), offset.y());\r\n if (!off.isAlmostZero)\r\n line.offset = off;\r\n }\r\n\r\n const dashArray = defLine.dashesArray();\r\n if (0 !== defLine.dashesLength() && null !== dashArray) {\r\n const dashes: number[] = [];\r\n for (const value of dashArray) {\r\n dashes.push(value);\r\n }\r\n line.dashes = dashes;\r\n }\r\n\r\n defLines.push(line);\r\n }\r\n\r\n props.defLines = defLines;\r\n }\r\n\r\n const pattern = AreaPattern.Params.fromJSON(props);\r\n if (undefined !== localToWorld)\r\n pattern.applyTransform(localToWorld);\r\n\r\n if (undefined === geomParams.pattern || !pattern.equals(geomParams.pattern)) {\r\n geomParams.pattern = pattern;\r\n changed = true;\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n case ElementGeometryOpcode.Material: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.Material.getRootAsMaterial(buffer);\r\n\r\n if (ppfb.useMaterial()) {\r\n const matLong = ppfb.materialId();\r\n const materialId = Id64.fromUint32Pair(matLong.low, matLong.high);\r\n if (undefined === geomParams.materialId || materialId !== geomParams.materialId) {\r\n geomParams.materialId = materialId;\r\n changed = true;\r\n }\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n default:\r\n return changed;\r\n }\r\n }\r\n\r\n /** Append entries to represent a [[GeometryParams]] */\r\n export function appendGeometryParams(geomParams: GeometryParams, entries: ElementGeometryDataEntry[], worldToLocal?: Transform): boolean {\r\n const fbbBas = new flatbuffers.Builder();\r\n const builder = EGFBAccessors.BasicSymbology;\r\n builder.startBasicSymbology(fbbBas);\r\n\r\n const subcatIdPair = Id64.getUint32Pair(geomParams.subCategoryId);\r\n builder.addSubCategoryId(fbbBas, flatbuffers.Long.create(subcatIdPair.lower, subcatIdPair.upper));\r\n\r\n if (undefined !== geomParams.lineColor) {\r\n builder.addColor(fbbBas, geomParams.lineColor.tbgr);\r\n builder.addUseColor(fbbBas, 1);\r\n }\r\n\r\n if (undefined !== geomParams.weight) {\r\n builder.addWeight(fbbBas, geomParams.weight);\r\n builder.addUseWeight(fbbBas, 1);\r\n }\r\n\r\n if (undefined !== geomParams.styleInfo) {\r\n const styleIdPair = Id64.getUint32Pair(geomParams.styleInfo.styleId);\r\n builder.addLineStyleId(fbbBas, flatbuffers.Long.create(styleIdPair.lower, styleIdPair.upper));\r\n builder.addUseStyle(fbbBas, 1);\r\n }\r\n\r\n if (undefined !== geomParams.elmTransparency && 0 !== geomParams.elmTransparency) {\r\n builder.addTransparency(fbbBas, geomParams.elmTransparency);\r\n }\r\n\r\n if (undefined !== geomParams.elmPriority && 0 !== geomParams.elmPriority) {\r\n builder.addDisplayPriority(fbbBas, geomParams.elmPriority);\r\n }\r\n\r\n if (undefined !== geomParams.geometryClass && GeometryClass.Primary !== geomParams.geometryClass) {\r\n builder.addGeomClass(fbbBas, geomParams.geometryClass);\r\n }\r\n\r\n const mLoc = builder.endBasicSymbology(fbbBas);\r\n fbbBas.finish(mLoc);\r\n const data = fbbBas.asUint8Array();\r\n\r\n entries.push({ opcode: ElementGeometryOpcode.BasicSymbology, data });\r\n\r\n if (undefined !== geomParams.styleInfo && undefined !== geomParams.styleInfo.styleMod) {\r\n const fbbLS = new flatbuffers.Builder();\r\n const builderLS = EGFBAccessors.LineStyleModifiers;\r\n builderLS.startLineStyleModifiers(fbbLS);\r\n\r\n let lsMods = geomParams.styleInfo.styleMod;\r\n if (undefined !== worldToLocal) {\r\n lsMods = new LineStyle.Modifier(lsMods);\r\n if (!lsMods.applyTransform(worldToLocal))\r\n return false;\r\n }\r\n\r\n let modifiers = 0;\r\n\r\n if (undefined !== lsMods.scale) {\r\n builderLS.addScale(fbbLS, lsMods.scale);\r\n modifiers |= StyleMod.Scale;\r\n }\r\n\r\n if (undefined !== lsMods.dashScale) {\r\n builderLS.addDashScale(fbbLS, lsMods.dashScale);\r\n modifiers |= StyleMod.DashScale;\r\n }\r\n\r\n if (undefined !== lsMods.gapScale) {\r\n builderLS.addGapScale(fbbLS, lsMods.gapScale);\r\n modifiers |= StyleMod.GapScale;\r\n }\r\n\r\n if (undefined !== lsMods.startWidth) {\r\n builderLS.addStartWidth(fbbLS, lsMods.startWidth);\r\n modifiers |= StyleMod.StartWidth;\r\n }\r\n\r\n if (undefined !== lsMods.endWidth) {\r\n builderLS.addEndWidth(fbbLS, lsMods.endWidth);\r\n modifiers |= StyleMod.EndWidth;\r\n }\r\n\r\n if (undefined !== lsMods.distPhase) {\r\n builderLS.addDistPhase(fbbLS, lsMods.distPhase);\r\n modifiers |= StyleMod.DistPhase;\r\n }\r\n\r\n if (undefined !== lsMods.fractPhase) {\r\n builderLS.addFractPhase(fbbLS, lsMods.fractPhase);\r\n modifiers |= StyleMod.FractPhase;\r\n }\r\n\r\n if (lsMods.centerPhase) {\r\n modifiers |= StyleMod.CenterPhase;\r\n }\r\n\r\n if (undefined !== lsMods.segmentMode) {\r\n modifiers |= (lsMods.segmentMode ? StyleMod.SegMode : StyleMod.NoSegMode);\r\n }\r\n\r\n if (lsMods.physicalWidth) {\r\n modifiers |= StyleMod.PhysicalWidth;\r\n }\r\n\r\n if (undefined !== lsMods.normal) {\r\n const normalOffset = EGFBAccessors.DVec3d.createDVec3d(fbbLS, lsMods.normal.x, lsMods.normal.y, lsMods.normal.z);\r\n builderLS.addNormal(fbbLS, normalOffset);\r\n modifiers |= StyleMod.Normal;\r\n }\r\n\r\n if (undefined !== lsMods.rotation) {\r\n builderLS.addYaw(fbbLS, lsMods.rotation.yaw.degrees);\r\n builderLS.addPitch(fbbLS, lsMods.rotation.pitch.degrees);\r\n builderLS.addRoll(fbbLS, lsMods.rotation.roll.degrees);\r\n modifiers |= StyleMod.Rotation;\r\n }\r\n\r\n builderLS.addModifiers(fbbLS, modifiers);\r\n\r\n const mLocLS = builderLS.endLineStyleModifiers(fbbLS);\r\n fbbLS.finish(mLocLS);\r\n const dataLS = fbbLS.asUint8Array();\r\n\r\n if (0 !== modifiers)\r\n entries.push({ opcode: ElementGeometryOpcode.LineStyleModifiers, data: dataLS });\r\n }\r\n\r\n if (undefined !== geomParams.fillDisplay && FillDisplay.Never !== geomParams.fillDisplay) {\r\n const fbbFill = new flatbuffers.Builder();\r\n const builderFill = EGFBAccessors.AreaFill;\r\n\r\n let keyValuesOff;\r\n let keyColorsOff;\r\n let thematicOffset;\r\n\r\n if (undefined !== geomParams.gradient) {\r\n const keyColors: number[] = [];\r\n const keyValues: number[] = [];\r\n\r\n for (const key of geomParams.gradient.keys) {\r\n keyColors.push(key.color.tbgr);\r\n keyValues.push(key.value);\r\n }\r\n\r\n keyValuesOff = builderFill.createValuesVector(fbbFill, keyValues);\r\n keyColorsOff = builderFill.createColorsVector(fbbFill, keyColors);\r\n\r\n if (Gradient.Mode.Thematic === geomParams.gradient.mode && undefined !== geomParams.gradient.thematicSettings) {\r\n const thematic = geomParams.gradient.thematicSettings;\r\n const builderThematic = EGFBAccessors.ThematicSettings;\r\n builderThematic.startThematicSettings(fbbFill);\r\n\r\n builderThematic.addMode(fbbFill, thematic.mode);\r\n builderThematic.addStepCount(fbbFill, thematic.stepCount);\r\n builderThematic.addMarginColor(fbbFill, thematic.marginColor.tbgr);\r\n builderThematic.addColorScheme(fbbFill, thematic.colorScheme);\r\n\r\n const rangeOffset = EGFBAccessors.DRange1d.createDRange1d(fbbFill, ThematicGradientSettings.contentRange, ThematicGradientSettings.contentMax);\r\n builderThematic.addRange(fbbFill, rangeOffset);\r\n\r\n thematicOffset = builderThematic.endThematicSettings(fbbFill);\r\n }\r\n }\r\n\r\n builderFill.startAreaFill(fbbFill);\r\n\r\n const toEGFBFillDisplay = (fill: FillDisplay) => {\r\n switch (fill) {\r\n case FillDisplay.ByView:\r\n return EGFBAccessors.FillDisplay.ByView;\r\n case FillDisplay.Always:\r\n return EGFBAccessors.FillDisplay.Always;\r\n case FillDisplay.Blanking:\r\n return EGFBAccessors.FillDisplay.Blanking;\r\n default:\r\n return EGFBAccessors.FillDisplay.None;\r\n }\r\n };\r\n\r\n builderFill.addFill(fbbFill, toEGFBFillDisplay(geomParams.fillDisplay));\r\n\r\n if (undefined !== geomParams.fillTransparency)\r\n builderFill.addTransparency(fbbFill, geomParams.fillTransparency);\r\n\r\n if (undefined !== geomParams.gradient) {\r\n const toEGFBGradientMode = (mode: Gradient.Mode) => {\r\n switch (mode) {\r\n case Gradient.Mode.Linear:\r\n return EGFBAccessors.GradientMode.Linear;\r\n case Gradient.Mode.Curved:\r\n return EGFBAccessors.GradientMode.Curved;\r\n case Gradient.Mode.Cylindrical:\r\n return EGFBAccessors.GradientMode.Cylindrical;\r\n case Gradient.Mode.Spherical:\r\n return EGFBAccessors.GradientMode.Spherical;\r\n case Gradient.Mode.Hemispherical:\r\n return EGFBAccessors.GradientMode.Hemispherical;\r\n case Gradient.Mode.Thematic:\r\n return EGFBAccessors.GradientMode.Thematic;\r\n default:\r\n return EGFBAccessors.GradientMode.None;\r\n }\r\n };\r\n\r\n builderFill.addMode(fbbFill, toEGFBGradientMode(geomParams.gradient.mode));\r\n\r\n builderFill.addFlags(fbbFill, geomParams.gradient.flags);\r\n builderFill.addShift(fbbFill, geomParams.gradient.shift);\r\n\r\n if (undefined !== geomParams.gradient.tint)\r\n builderFill.addTint(fbbFill, geomParams.gradient.tint);\r\n\r\n if (undefined !== geomParams.gradient.angle)\r\n builderFill.addAngle(fbbFill, geomParams.gradient.angle.radians);\r\n\r\n if (undefined !== keyValuesOff)\r\n builderFill.addValues(fbbFill, keyValuesOff);\r\n\r\n if (undefined !== keyColorsOff)\r\n builderFill.addColors(fbbFill, keyColorsOff);\r\n\r\n if (undefined !== thematicOffset)\r\n builderFill.addThematicSettings(fbbFill, thematicOffset);\r\n } else if (undefined !== geomParams.backgroundFill && BackgroundFill.None !== geomParams.backgroundFill) {\r\n builderFill.addBackgroundFill(fbbFill, BackgroundFill.Outline === geomParams.backgroundFill ? 2 : 1);\r\n } else if (undefined !== geomParams.fillColor) {\r\n builderFill.addColor(fbbFill, geomParams.fillColor.tbgr);\r\n builderFill.addUseColor(fbbFill, 1);\r\n }\r\n\r\n const mLocFill = builderFill.endAreaFill(fbbFill);\r\n fbbFill.finish(mLocFill);\r\n const dataFill = fbbFill.asUint8Array();\r\n\r\n entries.push({ opcode: ElementGeometryOpcode.Fill, data: dataFill });\r\n }\r\n\r\n if (undefined !== geomParams.pattern) {\r\n const fbbPat = new flatbuffers.Builder();\r\n const builderPat = EGFBAccessors.AreaPattern;\r\n\r\n let pattern = geomParams.pattern;\r\n if (undefined !== worldToLocal) {\r\n pattern = pattern.clone();\r\n if (!pattern.applyTransform(worldToLocal))\r\n return false;\r\n }\r\n\r\n let defLineVecOffset;\r\n\r\n if (undefined !== pattern.defLines) {\r\n const defLines = pattern.defLines;\r\n const builderDefLines = EGFBAccessors.DwgHatchDefLine;\r\n const defLineOffsets: number[] = [];\r\n\r\n for (const line of defLines) {\r\n let dashOffset;\r\n\r\n if (undefined !== line.dashes)\r\n dashOffset = builderDefLines.createDashesVector(fbbPat, line.dashes);\r\n\r\n builderDefLines.startDwgHatchDefLine(fbbPat);\r\n\r\n if (undefined !== line.angle)\r\n builderDefLines.addAngle(fbbPat, line.angle.radians);\r\n\r\n // NOTE: Backend requires through and offset to be present...\r\n const throughOffset = EGFBAccessors.DPoint2d.createDPoint2d(fbbPat, undefined !== line.through ? line.through.x : 0, undefined !== line.through ? line.through.y : 0);\r\n builderDefLines.addThrough(fbbPat, throughOffset);\r\n\r\n const offsetOffset = EGFBAccessors.DPoint2d.createDPoint2d(fbbPat, undefined !== line.offset ? line.offset.x : 0, undefined !== line.offset ? line.offset.y : 0);\r\n builderDefLines.addOffset(fbbPat, offsetOffset);\r\n\r\n if (undefined !== dashOffset)\r\n builderDefLines.addDashes(fbbPat, dashOffset);\r\n\r\n defLineOffsets.push(builderDefLines.endDwgHatchDefLine(fbbPat));\r\n }\r\n\r\n if (0 !== defLineOffsets.length)\r\n defLineVecOffset = builderPat.createDefLineVector(fbbPat, defLineOffsets);\r\n }\r\n\r\n builderPat.startAreaPattern(fbbPat);\r\n\r\n if (undefined !== pattern.origin) {\r\n const originOffset = EGFBAccessors.DPoint3d.createDPoint3d(fbbPat, pattern.origin.x, pattern.origin.y, pattern.origin.z);\r\n builderPat.addOrigin(fbbPat, originOffset);\r\n }\r\n\r\n if (undefined !== pattern.rotation) {\r\n const matrix = pattern.rotation.toMatrix3d();\r\n const coffs = matrix.coffs;\r\n const rotationOffset = EGFBAccessors.RotMatrix.createRotMatrix(fbbPat, coffs[0], coffs[1], coffs[2], coffs[3], coffs[4], coffs[5], coffs[6], coffs[7], coffs[8]);\r\n builderPat.addRotation(fbbPat, rotationOffset);\r\n }\r\n\r\n if (undefined !== pattern.space1)\r\n builderPat.addSpace1(fbbPat, pattern.space1);\r\n\r\n if (undefined !== pattern.space2)\r\n builderPat.addSpace2(fbbPat, pattern.space2);\r\n\r\n if (undefined !== pattern.angle1)\r\n builderPat.addAngle1(fbbPat, pattern.angle1.radians);\r\n\r\n if (undefined !== pattern.angle2)\r\n builderPat.addAngle2(fbbPat, pattern.angle2.radians);\r\n\r\n if (undefined !== pattern.scale)\r\n builderPat.addScale(fbbPat, pattern.scale);\r\n\r\n if (undefined !== pattern.color) {\r\n builderPat.addColor(fbbPat, pattern.color.tbgr);\r\n builderPat.addUseColor(fbbPat, 1);\r\n }\r\n\r\n if (undefined !== pattern.weight) {\r\n builderPat.addWeight(fbbPat, pattern.weight);\r\n builderPat.addUseWeight(fbbPat, 1);\r\n }\r\n\r\n if (undefined !== pattern.invisibleBoundary && pattern.invisibleBoundary)\r\n builderPat.addInvisibleBoundary(fbbPat, 1);\r\n\r\n if (undefined !== pattern.snappable && pattern.snappable)\r\n builderPat.addSnappable(fbbPat, 1);\r\n\r\n if (undefined !== pattern.symbolId) {\r\n const symbolIdPair = Id64.getUint32Pair(pattern.symbolId);\r\n builderPat.addSymbolId(fbbPat, flatbuffers.Long.create(symbolIdPair.lower, symbolIdPair.upper));\r\n }\r\n\r\n if (undefined !== defLineVecOffset)\r\n builderPat.addDefLine(fbbPat, defLineVecOffset);\r\n\r\n const mLocPat = builderPat.endAreaPattern(fbbPat);\r\n fbbPat.finish(mLocPat);\r\n const dataPat = fbbPat.asUint8Array();\r\n\r\n entries.push({ opcode: ElementGeometryOpcode.Pattern, data: dataPat });\r\n }\r\n\r\n if (undefined !== geomParams.materialId) {\r\n const fbbMat = new flatbuffers.Builder();\r\n const builderMat = EGFBAccessors.Material;\r\n builderMat.startMaterial(fbbMat);\r\n\r\n const matIdPair = Id64.getUint32Pair(geomParams.materialId);\r\n builderMat.addMaterialId(fbbMat, flatbuffers.Long.create(matIdPair.lower, matIdPair.upper));\r\n builderMat.addUseMaterial(fbbMat, 1);\r\n\r\n const mLocMat = builderMat.endMaterial(fbbMat);\r\n fbbMat.finish(mLocMat);\r\n const dataMat = fbbMat.asUint8Array();\r\n\r\n entries.push({ opcode: ElementGeometryOpcode.Material, data: dataMat });\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Return entry as [[GeometryPart]] id and instance transform */\r\n export function toGeometryPart(entry: ElementGeometryDataEntry, partToElement?: Transform): Id64String | undefined {\r\n if (ElementGeometryOpcode.PartReference !== entry.opcode)\r\n return undefined;\r\n\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.GeometryPart.getRootAsGeometryPart(buffer);\r\n\r\n const partLong = ppfb.geomPartId();\r\n const partId = Id64.fromUint32Pair(partLong.low, partLong.high);\r\n\r\n if (undefined !== partToElement) {\r\n let origin;\r\n const originfb = ppfb.origin();\r\n if (null !== originfb)\r\n origin = Point3d.create(originfb.x(), originfb.y(), originfb.z());\r\n else\r\n origin = Point3d.createZero();\r\n\r\n const angles = YawPitchRollAngles.createDegrees(ppfb.yaw(), ppfb.pitch(), ppfb.roll());\r\n const matrix = angles.toMatrix3d();\r\n if (1.0 !== ppfb.scale())\r\n matrix.scaleColumnsInPlace(ppfb.scale(), ppfb.scale(), ppfb.scale());\r\n\r\n Transform.createOriginAndMatrix(origin, matrix, partToElement);\r\n }\r\n\r\n return partId;\r\n }\r\n\r\n /** Create entry from a [[GeometryPart]] id and instance transform */\r\n export function fromGeometryPart(partId: Id64String, partTransform?: Transform, worldToLocal?: Transform): ElementGeometryDataEntry | undefined {\r\n let partToElement = partTransform;\r\n if (undefined !== worldToLocal)\r\n partToElement = worldToLocal.multiplyTransformTransform(undefined !== partTransform ? partTransform : Transform.createIdentity());\r\n\r\n const fbb = new flatbuffers.Builder();\r\n const builder = EGFBAccessors.GeometryPart;\r\n builder.startGeometryPart(fbb);\r\n\r\n const idPair = Id64.getUint32Pair(partId);\r\n builder.addGeomPartId(fbb, flatbuffers.Long.create(idPair.lower, idPair.upper));\r\n\r\n if (undefined !== partToElement && !partToElement.isIdentity) {\r\n const originOffset = EGFBAccessors.DPoint3d.createDPoint3d(fbb, partToElement.origin.x, partToElement.origin.y, partToElement.origin.z);\r\n builder.addOrigin(fbb, originOffset);\r\n\r\n const angles = YawPitchRollAngles.createFromMatrix3d(partToElement.matrix);\r\n if (undefined !== angles) {\r\n builder.addYaw(fbb, angles.yaw.degrees);\r\n builder.addPitch(fbb, angles.pitch.degrees);\r\n builder.addRoll(fbb, angles.roll.degrees);\r\n }\r\n\r\n const result = partToElement.matrix.factorRigidWithSignedScale();\r\n if (undefined !== result && result.scale > 0.0)\r\n builder.addScale(fbb, result.scale);\r\n }\r\n\r\n const mLoc = builder.endGeometryPart(fbb);\r\n fbb.finish(mLoc);\r\n const data = fbb.asUint8Array();\r\n\r\n return { opcode: ElementGeometryOpcode.PartReference, data };\r\n }\r\n\r\n /** Return entry as a [[ElementAlignedBox3d]] representing the local range of a geometric entry */\r\n export function toSubGraphicRange(entry: ElementGeometryDataEntry): ElementAlignedBox3d | undefined {\r\n if (ElementGeometryOpcode.SubGraphicRange !== entry.opcode)\r\n return undefined;\r\n\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive.getRootAsPointPrimitive(buffer);\r\n\r\n if (2 !== ppfb.coordsLength())\r\n return undefined;\r\n\r\n const low = Point3d.create(ppfb.coords(0)!.x(), ppfb.coords(0)!.y(), ppfb.coords(0)!.z());\r\n const high = Point3d.create(ppfb.coords(1)!.x(), ppfb.coords(1)!.y(), ppfb.coords(1)!.z());\r\n\r\n return Range3d.create(low, high);\r\n }\r\n\r\n /** Create entry from a [[ElementAlignedBox3d]] to compute and store local ranges for subsequent geometric entries */\r\n export function fromSubGraphicRange(bbox: ElementAlignedBox3d): ElementGeometryDataEntry | undefined {\r\n const fbb = new flatbuffers.Builder();\r\n const builder = EGFBAccessors.PointPrimitive;\r\n\r\n builder.startCoordsVector(fbb, 2);\r\n fbb.addFloat64(bbox.high.z);\r\n fbb.addFloat64(bbox.high.y);\r\n fbb.addFloat64(bbox.high.x);\r\n fbb.addFloat64(bbox.low.z);\r\n fbb.addFloat64(bbox.low.y);\r\n fbb.addFloat64(bbox.low.x);\r\n const offset = fbb.endVector();\r\n\r\n builder.startPointPrimitive(fbb);\r\n builder.addCoords(fbb, offset);\r\n\r\n const mLoc = builder.endPointPrimitive(fbb);\r\n fbb.finish(mLoc);\r\n const data = fbb.asUint8Array();\r\n\r\n return { opcode: ElementGeometryOpcode.SubGraphicRange, data };\r\n }\r\n\r\n /** Create [[Transform]] from row-major storage 4x3 Float64Array */\r\n export function toTransform(sourceToWorld: Float64Array): Transform | undefined {\r\n if (12 !== sourceToWorld.length)\r\n return undefined;\r\n return Transform.createRowValues(\r\n sourceToWorld[0], sourceToWorld[1], sourceToWorld[2], sourceToWorld[3],\r\n sourceToWorld[4], sourceToWorld[5], sourceToWorld[6], sourceToWorld[7],\r\n sourceToWorld[8], sourceToWorld[9], sourceToWorld[10], sourceToWorld[11]\r\n );\r\n }\r\n\r\n /** Create [[ElementAlignedBox3d]] from lowX, lowY, lowZ, highX, highY, highZ Float64Array */\r\n export function toElementAlignedBox3d(bbox: Float64Array): ElementAlignedBox3d | undefined {\r\n if (6 !== bbox.length)\r\n return undefined;\r\n return Range3d.fromFloat64Array(bbox);\r\n }\r\n}\r\n\r\n"]}
1
+ {"version":3,"file":"ElementGeometry.js","sourceRoot":"","sources":["../../../src/geometry/ElementGeometry.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\nimport { flatbuffers } from \"flatbuffers\";\r\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { Angle, AngleSweep, Arc3d, BentleyGeometryFlatBuffer, CurveCollection, FrameBuilder, GeometryQuery, LineString3d, Loop, Matrix3d, Plane3dByOriginAndUnitNormal, Point2d, Point3d, Point3dArray, PointString3d, Polyface, PolyfaceQuery, Range3d, SolidPrimitive, Transform, Vector3d, YawPitchRollAngles } from \"@itwin/core-geometry\";\r\nimport { EGFBAccessors } from \"./ElementGeometryFB\";\r\nimport { Base64EncodedString } from \"../Base64EncodedString\";\r\nimport { TextString, TextStringProps } from \"./TextString\";\r\nimport { ColorDef } from \"../ColorDef\";\r\nimport { BackgroundFill, FillDisplay, GeometryClass, GeometryParams } from \"../GeometryParams\";\r\nimport { Gradient } from \"../Gradient\";\r\nimport { ThematicGradientSettings, ThematicGradientSettingsProps } from \"../ThematicDisplay\";\r\nimport { AreaPattern } from \"./AreaPattern\";\r\nimport { BRepEntity } from \"./GeometryStream\";\r\nimport { ImageGraphic, ImageGraphicCorners, ImageGraphicProps } from \"./ImageGraphic\";\r\nimport { LineStyle } from \"./LineStyle\";\r\nimport { ElementAlignedBox3d, Placement2d, Placement3d } from \"./Placement\";\r\nimport { isPlacement2dProps, PlacementProps } from \"../ElementProps\";\r\n\r\n/** Specifies the type of an entry in a geometry stream.\r\n * @see [[ElementGeometryDataEntry.opcode]].\r\n * @public\r\n * @extensions\r\n */\r\nexport enum ElementGeometryOpcode {\r\n /** Local range of the next geometric primitive in the geometry stream. */\r\n SubGraphicRange = 2,\r\n /** A reference to a [GeometryPart]($backend). */\r\n PartReference = 3,\r\n /** Sets symbology for subsequent geometry to override [SubCategory]($backend) appearance */\r\n BasicSymbology = 4,\r\n /** A line, line string, shape, or point string (automatic simplification of a [CurvePrimitive]($core-geometry) or [CurveCollection]($core-geometry)) */\r\n PointPrimitive = 5,\r\n /** A 2d line, line string, shape, or point string (automatic simplification of a [CurvePrimitive]($core-geometry) or [CurveCollection]($core-geometry)) */\r\n PointPrimitive2d = 6,\r\n /** Arc or ellipse (automatic simplification of a [CurvePrimitive]($core-geometry) or [CurveCollection]($core-geometry)) */\r\n ArcPrimitive = 7,\r\n /** [CurveCollection]($core-geometry) */\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n CurveCollection = 8,\r\n /** [Polyface]($core-geometry) */\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n Polyface = 9,\r\n /** [CurvePrimitive]($core-geometry) */\r\n CurvePrimitive = 10,\r\n /** [SolidPrimitive]($core-geometry) */\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n SolidPrimitive = 11,\r\n /** [BSplineSurface3d]($core-geometry) */\r\n BsplineSurface = 12,\r\n /** Opaque and [[Gradient]] fills. */\r\n Fill = 19,\r\n /** Hatch, cross-hatch, or [[AreaPattern]]. */\r\n Pattern = 20,\r\n /** [[RenderMaterial]] */\r\n Material = 21,\r\n /** [[TextString]] */\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n TextString = 22,\r\n /** Specifies line style overrides as a [[LineStyle.Modifier]] */\r\n LineStyleModifiers = 23,\r\n /** Boundary represention solid, sheet, or wire body as a [[BRepEntity.DataProps]] */\r\n BRep = 25,\r\n /** Small single-tile raster image as an [[ImageGraphic]] */\r\n Image = 28,\r\n}\r\n\r\n/** Describes an entry in a geometry stream as an op-code plus the binary flatbuffer representation of the associated data.\r\n * @see [[FlatBufferGeometryStream]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ElementGeometryDataEntry {\r\n /** The type of this entry. */\r\n opcode: ElementGeometryOpcode;\r\n /** Zero-based flatbuffer-encoded data. */\r\n data: Uint8Array;\r\n}\r\n\r\n/** Information provided to [[ElementGeometryFunction]].\r\n * @alpha\r\n */\r\nexport interface ElementGeometryInfo {\r\n /** ID for the [Category]($core-backend), undefined for geometry parts */\r\n categoryId?: Id64String;\r\n /** A row-major storage 4x3 transform to world coordinate, undefined for geometry parts */\r\n sourceToWorld?: Float64Array;\r\n /** The element aligned bounding box for the geometry stream stored as 6 values for low/high */\r\n bbox?: Float64Array;\r\n /** If true, geometry displays oriented to face the camera */\r\n viewIndependent?: boolean;\r\n /** If true, geometry stream contained breps that were omitted or replaced as requested */\r\n brepsPresent?: boolean;\r\n /** The geometry stream data */\r\n entryArray: ElementGeometryDataEntry[];\r\n}\r\n\r\n/** A callback function that receives geometry stream data.\r\n * @see [IModelDb.elementGeometryRequest]($core-backend)\r\n * @alpha\r\n */\r\nexport type ElementGeometryFunction = (info: ElementGeometryInfo) => void;\r\n\r\n/** Parameters for [IModelDb.elementGeometryRequest]($core-backend)\r\n * @alpha\r\n */\r\nexport interface ElementGeometryRequest {\r\n /** The source element for the geometry stream */\r\n elementId: Id64String;\r\n /** A function to call for the geometry stream data */\r\n onGeometry: ElementGeometryFunction;\r\n /** Whether to omit BRep data */\r\n skipBReps?: boolean;\r\n /** When not omitting BReps, whether to return a mesh or curve representation instead of the brep data */\r\n replaceBReps?: boolean;\r\n /** Option for replaceBReps, max distance from a face to the original geometry, see [StrokeOptions]($core-geometry) */\r\n chordTol?: number;\r\n /** Option for replaceBReps, max angle difference in radians for approximated face, see [StrokeOptions]($core-geometry) */\r\n angleTol?: number;\r\n /** Option for replaceBReps, max length of any edge in generated faces, see [StrokeOptions]($core-geometry) */\r\n maxEdgeLength?: number;\r\n /** Option for replaceBReps, ignore faces with bounding boxes smaller than this size when facetting */\r\n minBRepFeatureSize?: number;\r\n}\r\n\r\n/** Parameters for building the geometry stream of a [[GeometricElement]] using ElementGeometry.Builder\r\n * Note: The geometry stream is always in local coordinates, that is, relative to the element's [[Placement]].\r\n * @alpha\r\n */\r\nexport interface ElementGeometryBuilderParams {\r\n /** The geometry stream data */\r\n entryArray: ElementGeometryDataEntry[];\r\n /** If true, create geometry that displays oriented to face the camera */\r\n viewIndependent?: boolean;\r\n}\r\n\r\n/** Parameters for building the geometry stream of a [[GeometryPart]] using ElementGeometry.Builder.\r\n * @alpha\r\n */\r\nexport interface ElementGeometryBuilderParamsForPart {\r\n /** The geometry stream data */\r\n entryArray: ElementGeometryDataEntry[];\r\n /** If true, create geometry part with 2d geometry */\r\n is2dPart?: boolean;\r\n}\r\n\r\n/** Values for [[BRepGeometryCreate.operation]]\r\n * @alpha\r\n */\r\nexport enum BRepGeometryOperation {\r\n /** Unite target (first entry) with one or more tool entities. */\r\n Unite = 0,\r\n /** Subtract one or more tool entities from target entity (first entry) */\r\n Subtract = 1,\r\n /** Intersect target (first entry) with one or more tool entities */\r\n Intersect = 2,\r\n /** Sew the given set of surfaces together by joining those that share edges in common */\r\n Sew = 3,\r\n /** Create a cut in the target (first entry) using a planar region (second entry) and optional depth */\r\n Cut = 4,\r\n /** Create a pad or pocket in the target (first entry) using a planar region (second entry) */\r\n Emboss = 5,\r\n /** Create a solid from a surface by offsetting using the specified forward and backward distances */\r\n Thicken = 6,\r\n /** Create a shelled solid by offsetting all faces by the supplied distance */\r\n Hollow = 7,\r\n /** Create a solid or surface by sweeping a planar profile (first entry) along a path (second entry) */\r\n Sweep = 8,\r\n /** Create a solid or surface by lofting through a set of paths or regions */\r\n Loft = 9,\r\n /** Create a solid or sheet with all non-smooth/non-laminar edges rounded */\r\n Round = 10,\r\n /** Offset all faces of a solid or sheet target by the supplied distance. */\r\n Offset = 11,\r\n}\r\n\r\n/** Parameters for [[BRepGeometryOperation.Cut]]\r\n * @alpha\r\n */\r\nexport interface BRepCutProps {\r\n /** Optional cut depth; through solid if not specified */\r\n distance?: number;\r\n /** Optional cut direction; in direction of profile normal if not specified */\r\n bothDirections?: boolean;\r\n}\r\n\r\n/** Parameters for [[BRepGeometryOperation.Thicken]]\r\n * @alpha\r\n */\r\nexport interface BRepThickenProps {\r\n /** Offset to apply in surface normal direction; at least one of frontDistance or backDistance must be specified */\r\n frontDistance?: number;\r\n /** Offset to apply in reverse surface normal direction */\r\n backDistance?: number;\r\n}\r\n\r\n/** Parameters for [[BRepGeometryOperation.Hollow]]\r\n * @alpha\r\n */\r\nexport interface BRepHollowProps {\r\n /** Offset to apply to all faces; positive value shells outwards, negative value shells inwards */\r\n distance: number;\r\n}\r\n\r\n/** Parameters for [[BRepGeometryOperation.Round]]\r\n * @alpha\r\n */\r\nexport interface BRepRoundProps {\r\n /** Radius to apply to all non-laminar/non-smooth edges */\r\n radius: number;\r\n}\r\n\r\n/** Parameters for [[BRepGeometryOperation.Offset]]\r\n * @alpha\r\n */\r\nexport interface BRepOffsetProps {\r\n /** Offset to apply to all faces; positive value offsets outwards, negative value offsets inwards */\r\n distance: number;\r\n}\r\n\r\n/** Parameters for [IModelDb.createBRepGeometry]($core-backend)\r\n * @alpha\r\n */\r\nexport interface BRepGeometryCreate {\r\n /** The operation to perform on the input geometry */\r\n operation: BRepGeometryOperation;\r\n /** The input target and tool geometry (curves, surfaces, and solids) to perform the given operation on */\r\n entryArray: ElementGeometryDataEntry[];\r\n /** A function to call for the result geometry */\r\n onResult: BRepGeometryFunction;\r\n /** Whether disjoint results should be returned as multiple entries or a single disjoint body */\r\n separateDisjoint?: boolean;\r\n /** Options and parameters for this operation */\r\n parameters?: BRepCutProps | BRepThickenProps | BRepHollowProps | BRepRoundProps | BRepOffsetProps;\r\n}\r\n\r\n/** Information provided to [[BRepGeometryFunction]].\r\n * @alpha\r\n */\r\nexport interface BRepGeometryInfo {\r\n /** The result geometry if the operation was successful */\r\n entryArray: ElementGeometryDataEntry[];\r\n}\r\n\r\n/** A callback function that receives brep operation result geometry.\r\n * @see [IModelDb.createBRepGeometry]($core-backend)\r\n * @alpha\r\n */\r\nexport type BRepGeometryFunction = (info: BRepGeometryInfo) => void;\r\n\r\n/** Provides utility functions for working with [[ElementGeometryDataEntry]].\r\n * @alpha\r\n */\r\nexport namespace ElementGeometry {\r\n /** [[ElementGeometry.Builder]] is a helper class for populating a [[ElementGeometryDataEntry]] array needed to create a [[GeometricElement]] or [[GeometryPart]]. */\r\n export class Builder {\r\n private _localToWorld?: Transform;\r\n private _worldToLocal?: Transform;\r\n /** GeometryStream entries */\r\n public readonly entries: ElementGeometryDataEntry[] = [];\r\n\r\n /** Current placement transform, converts local coordinate (placement relative) input to world */\r\n public get localToWorld() { return this._localToWorld; }\r\n\r\n /** Current inverse placement transform, converts world coordinate input to local (placement relative) */\r\n public get worldToLocal() { return this._worldToLocal; }\r\n\r\n /** Supply optional local to world transform. Used to transform world coordinate input relative to element placement.\r\n * For a [[GeometricElement]]'s placement to be meaningful, world coordinate geometry should never be appended to an element with an identity placement.\r\n * Can be called with undefined or identity transform to start appending geometry supplied in local coordinates again.\r\n */\r\n public setLocalToWorld(localToWorld?: Transform) {\r\n this._localToWorld = (undefined === localToWorld || localToWorld.isIdentity ? undefined : localToWorld.clone());\r\n this._worldToLocal = (undefined === this._localToWorld ? undefined : this._localToWorld.inverse());\r\n }\r\n\r\n /** Supply local to world transform from a Point3d and optional YawPitchRollAngles.\r\n * @see [[Placement3d]]\r\n */\r\n public setLocalToWorld3d(origin: Point3d, angles: YawPitchRollAngles = YawPitchRollAngles.createDegrees(0.0, 0.0, 0.0)) {\r\n this.setLocalToWorld(Transform.createOriginAndMatrix(origin, angles.toMatrix3d()));\r\n }\r\n\r\n /** Supply local to world transform from a Point2d and optional Angle.\r\n * @see [[Placement2d]]\r\n */\r\n public setLocalToWorld2d(origin: Point2d, angle: Angle = Angle.createDegrees(0.0)) {\r\n this.setLocalToWorld(Transform.createOriginAndMatrix(Point3d.createFrom(origin), Matrix3d.createRotationAroundVector(Vector3d.unitZ(), angle)));\r\n }\r\n\r\n /** Supply local to world transform from a PlacementProps2d or PlacementProps3d.\r\n * @see [[PlacementProps]]\r\n */\r\n public setLocalToWorldFromPlacement(props: PlacementProps) {\r\n const placement = isPlacement2dProps(props) ? Placement2d.fromJSON(props) : Placement3d.fromJSON(props);\r\n this.setLocalToWorld(placement.transform);\r\n }\r\n\r\n /** Compute angles suitable for passing to [[setLocalToWorld3d]] from an array of 3d points. */\r\n public static placementAnglesFromPoints(pts: Point3d[], defaultUp?: Vector3d, result?: YawPitchRollAngles): YawPitchRollAngles {\r\n const angles = result ? result : new YawPitchRollAngles();\r\n const zVec = defaultUp ? defaultUp.clone() : Vector3d.unitZ();\r\n const matrix = Matrix3d.createRigidHeadsUp(zVec);\r\n\r\n YawPitchRollAngles.createFromMatrix3d(matrix, angles);\r\n\r\n if (pts.length < 2 || pts[0].isAlmostEqual(pts[1]))\r\n return angles;\r\n\r\n // Check if points have a well defined normal to use instead of defaultUp...\r\n const frameTransform = FrameBuilder.createFrameToDistantPoints(pts);\r\n if (undefined !== frameTransform) {\r\n const plane = Plane3dByOriginAndUnitNormal.create(pts[0], frameTransform.matrix.getColumn(2));\r\n if (undefined !== plane && Point3dArray.isCloseToPlane(pts, plane))\r\n zVec.setFrom(plane.getNormalRef());\r\n }\r\n\r\n const xVec = Vector3d.createStartEnd(pts[0], pts[1]);\r\n if (xVec.isParallelTo(zVec, true))\r\n return angles;\r\n\r\n const yVec = xVec.unitCrossProduct(zVec);\r\n if (undefined === yVec)\r\n return angles;\r\n\r\n Matrix3d.createColumns(xVec, yVec, zVec, matrix);\r\n if (undefined === Matrix3d.createRigidFromMatrix3d(matrix, undefined, matrix))\r\n return angles;\r\n\r\n YawPitchRollAngles.createFromMatrix3d(matrix, angles);\r\n return angles;\r\n }\r\n\r\n /** Compute angle suitable for passing to [[setLocalToWorld2d]] from an array of xy plane points. */\r\n public static placementAngleFromPoints(pts: Point3d[], result?: Angle): Angle {\r\n const angles = ElementGeometry.Builder.placementAnglesFromPoints(pts);\r\n if (undefined === result)\r\n return angles.yaw;\r\n result.setFrom(angles.yaw);\r\n return result;\r\n }\r\n\r\n /** Store local ranges for all subsequent geometry appended. Can improve performance of range testing for elements with a GeometryStream\r\n * containing more than one [[GeometryQuery]] differentiable by range. Not useful for a single [[GeometryQuery]] as its range and that of the [[GeometricElement]] are the same.\r\n * Ignored when defining a [[GeometryPart]] and not needed when only appending [[GeometryPart]] instances to a [[GeometricElement]] as these store their own range.\r\n */\r\n public appendGeometryRanges(): boolean {\r\n const entry = fromSubGraphicRange(Range3d.create()); // Computed on backend, just need opcode...\r\n if (undefined === entry)\r\n return false;\r\n this.entries.push(entry);\r\n return true;\r\n }\r\n\r\n /** Change [[GeometryParams]] for subsequent geometry.\r\n * It is not valid to change the sub-category when defining a [[GeometryPart]]. A [[GeometryPart]] inherits the symbology of their instance for anything not explicitly overridden.\r\n */\r\n public appendGeometryParamsChange(geomParams: GeometryParams): boolean {\r\n return appendGeometryParams(geomParams, this.entries, this._worldToLocal);\r\n }\r\n\r\n /** Append a [[GeometryQuery]] supplied in either local or world coordinates to the [[ElementGeometryDataEntry]] array */\r\n public appendGeometryQuery(geometry: GeometryQuery): boolean {\r\n const entry = ElementGeometry.fromGeometryQuery(geometry, this._worldToLocal);\r\n if (undefined === entry)\r\n return false;\r\n this.entries.push(entry);\r\n return true;\r\n }\r\n\r\n /** Append a [[TextString]] supplied in either local or world coordinates to the [[ElementGeometryDataEntry]] array */\r\n public appendTextString(text: TextString): boolean {\r\n const entry = ElementGeometry.fromTextString(text.toJSON(), this._worldToLocal);\r\n if (undefined === entry)\r\n return false;\r\n this.entries.push(entry);\r\n return true;\r\n }\r\n\r\n /** Append a [[ImageGraphic]] supplied in either local or world coordinates to the [[ElementGeometryDataEntry]] array */\r\n public appendImageGraphic(image: ImageGraphic): boolean {\r\n const entry = ElementGeometry.fromImageGraphic(image.toJSON(), this._worldToLocal);\r\n if (undefined === entry)\r\n return false;\r\n this.entries.push(entry);\r\n return true;\r\n }\r\n\r\n /** Append a [[BRepEntity.DataProps]] supplied in either local or world coordinates to the [[ElementGeometryDataEntry]] array.\r\n * Provided for compatibility with GeometryStreamBuilder only.\r\n * Backend code should use IModelDb.createBRepGeometry to create a brep [[ElementGeometryDataEntry]] directly.\r\n */\r\n public appendBRepData(brep: BRepEntity.DataProps): boolean {\r\n const entry = ElementGeometry.fromBRep(brep, this._worldToLocal);\r\n if (undefined === entry)\r\n return false;\r\n this.entries.push(entry);\r\n return true;\r\n }\r\n\r\n /** Append a [[GeometryPart]] instance with relative transform to the [[ElementGeometryDataEntry]] array for creating a [[GeometricElement]].\r\n * Not valid when defining a [[GeometryPart]] as nesting of parts is not supported.\r\n */\r\n public appendGeometryPart(partId: Id64String, partTransform?: Transform): boolean {\r\n const entry = ElementGeometry.fromGeometryPart(partId, partTransform, this._worldToLocal);\r\n if (undefined === entry)\r\n return false;\r\n this.entries.push(entry);\r\n return true;\r\n }\r\n\r\n /** Append a [[GeometryPart]] instance with relative position, orientation, and scale to the [[ElementGeometryDataEntry]] array for creating a [[GeometricElement3d]].\r\n * Not valid when defining a [[GeometryPart]] as nesting of parts is not supported.\r\n */\r\n public appendGeometryPart3d(partId: Id64String, instanceOrigin?: Point3d, instanceRotation?: YawPitchRollAngles, instanceScale?: number): boolean {\r\n const partTransform = Transform.createOriginAndMatrix(instanceOrigin, instanceRotation ? instanceRotation.toMatrix3d() : Matrix3d.createIdentity());\r\n if (undefined !== instanceScale)\r\n partTransform.matrix.scaleColumnsInPlace(instanceScale, instanceScale, instanceScale);\r\n return this.appendGeometryPart(partId, partTransform);\r\n }\r\n\r\n /** Append a [[GeometryPart]] instance with relative position, orientation, and scale to the [[ElementGeometryDataEntry]] array for creating a [[GeometricElement2d]].\r\n * Not valid when defining a [[GeometryPart]] as nesting of parts is not supported.\r\n */\r\n public appendGeometryPart2d(partId: Id64String, instanceOrigin?: Point2d, instanceRotation?: Angle, instanceScale?: number): boolean {\r\n return this.appendGeometryPart3d(partId, instanceOrigin ? Point3d.createFrom(instanceOrigin) : undefined, instanceRotation ? new YawPitchRollAngles(instanceRotation) : undefined, instanceScale);\r\n }\r\n }\r\n\r\n /** Current state information for [[ElementGeometry.Iterator]] */\r\n export interface IteratorData {\r\n /** A [[GeometryParams]] representing the appearance of the current geometric entry */\r\n readonly geomParams: GeometryParams;\r\n /** Placement transform, used for converting placement relative, local coordinate entries to world */\r\n readonly localToWorld?: Transform;\r\n /** Optional stored local range for the current geometric entry */\r\n readonly localRange?: Range3d;\r\n /** The current displayable opcode */\r\n readonly value: ElementGeometryDataEntry;\r\n }\r\n\r\n export class IteratorEntry implements IteratorData {\r\n public readonly geomParams: GeometryParams;\r\n public readonly localToWorld?: Transform;\r\n public localRange?: Range3d;\r\n private _value?: ElementGeometryDataEntry;\r\n private readonly _applyLocalToWorld: boolean;\r\n\r\n public constructor(geomParams: GeometryParams, localToWorld: Transform, applyLocalToWorld?: boolean) {\r\n this.geomParams = geomParams;\r\n this.localToWorld = localToWorld;\r\n this._applyLocalToWorld = applyLocalToWorld ? !localToWorld.isIdentity : false;\r\n }\r\n\r\n public get value() { return this._value!; }\r\n public set value(value: ElementGeometryDataEntry) { this._value = value; }\r\n\r\n public get outputTransform(): Transform | undefined {\r\n return this._applyLocalToWorld ? this.localToWorld : undefined;\r\n }\r\n\r\n /** Return the [[GeometryQuery]] representation for the current entry */\r\n public toGeometryQuery(): GeometryQuery | undefined {\r\n return toGeometryQuery(this.value, this.outputTransform);\r\n }\r\n\r\n /** Return the [[BRepEntity.DataProps]] representation for the current entry for checking brep type and face attachments. */\r\n public toBRepData(wantBRepData: boolean = false): BRepEntity.DataProps | undefined {\r\n return toBRep(this.value, wantBRepData, this.outputTransform);\r\n }\r\n\r\n /** Return the [[TextString]] representation for the current entry */\r\n public toTextString(): TextString | undefined {\r\n const props = toTextString(this.value, this.outputTransform);\r\n return (undefined !== props ? new TextString(props) : undefined);\r\n }\r\n\r\n /** Return the [[ImageGraphic]] representation for the current entry */\r\n public toImageGraphic(): ImageGraphic | undefined {\r\n const props = toImageGraphic(this.value, this.outputTransform);\r\n return (undefined !== props ? ImageGraphic.fromJSON(props) : undefined);\r\n }\r\n\r\n /** Return the GeometryPart information for the current entry */\r\n public toGeometryPart(partToLocal?: Transform, partToWorld?: Transform): Id64String | undefined {\r\n if (undefined === partToLocal && undefined !== partToWorld)\r\n partToLocal = Transform.createIdentity();\r\n\r\n const partId = toGeometryPart(this.value, partToLocal);\r\n if (undefined === partId || undefined === partToLocal || undefined === partToWorld)\r\n return partId;\r\n\r\n if (undefined !== this.localToWorld)\r\n this.localToWorld.multiplyTransformTransform(partToLocal, partToWorld);\r\n\r\n return partId;\r\n }\r\n }\r\n\r\n /** [[ElementGeometry.Iterator]] is a helper class for iterating a [[ElementGeometryDataEntry]] array.\r\n * Each [[ElementGeometryDataEntry]] returned by the iterator represents exactly one displayable entry.\r\n */\r\n export class Iterator implements IterableIterator<IteratorEntry> {\r\n /** GeometryStream entries */\r\n public readonly entryArray: ElementGeometryDataEntry[];\r\n /** The geometric element's placement or geometry part's local range (placement.bbox) */\r\n public readonly placement: Placement3d;\r\n /** If true, geometry displays oriented to face the camera */\r\n public readonly viewIndependent?: boolean;\r\n /** If true, geometry stream contained breps that were omitted or replaced as requested */\r\n public readonly brepsPresent?: boolean;\r\n /** Current entry position */\r\n private _index = 0;\r\n /** Allocated on first call to next() and reused thereafter */\r\n private _entry?: IteratorEntry;\r\n /** Used to initialize this._entry */\r\n private readonly _appearance: GeometryParams;\r\n private readonly _localToWorld: Transform;\r\n /** Whether deserialized entry data is returned in world or local coordinates */\r\n private _applyLocalToWorld = false;\r\n\r\n /** Construct a new Iterator given a [[ElementGeometryInfo]] from either a [[GeometricElement3d]], [[GeometricElement2d]], or [[GeometryPart]].\r\n * Supply the optional [[GeometryParams]] and localToWorld transform to iterate a [[GeometryPart]] in the context of a [[GeometricElement]] reference.\r\n */\r\n public constructor(info: ElementGeometryInfo, categoryOrGeometryParams?: Id64String | GeometryParams, localToWorld?: Transform) {\r\n this.entryArray = info.entryArray;\r\n this.viewIndependent = info.viewIndependent;\r\n this.brepsPresent = info.brepsPresent;\r\n\r\n if (undefined !== info.categoryId)\r\n categoryOrGeometryParams = info.categoryId;\r\n\r\n if (undefined !== categoryOrGeometryParams)\r\n this._appearance = typeof categoryOrGeometryParams === \"string\" ? new GeometryParams(categoryOrGeometryParams) : categoryOrGeometryParams;\r\n else\r\n this._appearance = new GeometryParams(Id64.invalid);\r\n\r\n if (undefined !== info.sourceToWorld)\r\n localToWorld = ElementGeometry.toTransform(info.sourceToWorld);\r\n\r\n if (undefined !== localToWorld)\r\n this._localToWorld = localToWorld;\r\n else\r\n this._localToWorld = Transform.createIdentity();\r\n\r\n const orgAng = YawPitchRollAngles.tryFromTransform(this._localToWorld);\r\n if (undefined === orgAng.angles)\r\n orgAng.angles = YawPitchRollAngles.createDegrees(0, 0, 0);\r\n\r\n let bbox = (undefined !== info.bbox ? ElementGeometry.toElementAlignedBox3d(info.bbox) : undefined);\r\n if (undefined === bbox)\r\n bbox = Range3d.createNull();\r\n\r\n this.placement = new Placement3d(orgAng.origin, orgAng.angles, bbox);\r\n }\r\n\r\n /** Call to return deserialized entry data in world coordinates */\r\n public requestWorldCoordinates(): void {\r\n this._applyLocalToWorld = !this._localToWorld.isIdentity;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n private get entry() {\r\n if (undefined === this._entry)\r\n this._entry = new IteratorEntry(this._appearance, this._localToWorld, this._applyLocalToWorld);\r\n\r\n return this._entry;\r\n }\r\n\r\n /** Advance to next displayable opcode (geometric entry or geometry part) while updating the current [[GeometryParams]] from appearance related opcodes. */\r\n public next(): IteratorResult<IteratorEntry> {\r\n while (this._index < this.entryArray.length) {\r\n const value = this.entryArray[this._index++];\r\n if (ElementGeometry.isAppearanceEntry(value)) {\r\n const localToWorld = (this._applyLocalToWorld ? this._localToWorld : undefined);\r\n ElementGeometry.updateGeometryParams(value, this.entry.geomParams, localToWorld);\r\n } else if (ElementGeometryOpcode.SubGraphicRange === value.opcode) {\r\n // NOTE: localRange remains valid until the next sub-range entry is encountered...\r\n this.entry.localRange = ElementGeometry.toSubGraphicRange(value);\r\n } else if (ElementGeometryOpcode.PartReference === value.opcode) {\r\n this.entry.value = value;\r\n return { value: this.entry, done: false };\r\n } else if (ElementGeometry.isGeometricEntry(value)) {\r\n this.entry.value = value;\r\n return { value: this.entry, done: false };\r\n }\r\n }\r\n\r\n return { value: this.entry, done: true };\r\n }\r\n\r\n public [Symbol.iterator](): IterableIterator<IteratorEntry> {\r\n return this;\r\n }\r\n }\r\n\r\n /** Return whether the supplied entry can be represented as a [[GeometryQuery]] */\r\n export function isGeometryQueryEntry(entry: ElementGeometryDataEntry): boolean {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.PointPrimitive:\r\n case ElementGeometryOpcode.PointPrimitive2d:\r\n case ElementGeometryOpcode.ArcPrimitive:\r\n case ElementGeometryOpcode.CurveCollection:\r\n case ElementGeometryOpcode.Polyface:\r\n case ElementGeometryOpcode.CurvePrimitive:\r\n case ElementGeometryOpcode.SolidPrimitive:\r\n case ElementGeometryOpcode.BsplineSurface:\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /** Return whether the supplied entry is displayable geometry [[GeometryQuery]], [[BRepEntity.DataProps]], [[TextString]], or [[ImageGraphic]] */\r\n export function isGeometricEntry(entry: ElementGeometryDataEntry): boolean {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.BRep:\r\n case ElementGeometryOpcode.TextString:\r\n case ElementGeometryOpcode.Image:\r\n return true;\r\n\r\n default:\r\n return isGeometryQueryEntry(entry);\r\n }\r\n }\r\n\r\n /** Return whether the supplied entry is geometric or a part reference */\r\n export function isDisplayableEntry(entry: ElementGeometryDataEntry): boolean {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.PartReference:\r\n return true;\r\n\r\n default:\r\n return isGeometricEntry(entry);\r\n }\r\n }\r\n\r\n /** Return whether the supplied entry represents appearance information */\r\n export function isAppearanceEntry(entry: ElementGeometryDataEntry): boolean {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.BasicSymbology:\r\n case ElementGeometryOpcode.Fill:\r\n case ElementGeometryOpcode.Pattern:\r\n case ElementGeometryOpcode.Material:\r\n case ElementGeometryOpcode.LineStyleModifiers:\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /** Return whether the supplied entry represents a single open curve or path */\r\n export function isCurve(entry: ElementGeometryDataEntry): boolean {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.PointPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive.getRootAsPointPrimitive(buffer);\r\n return (EGFBAccessors.BoundaryType.Open === ppfb.boundary());\r\n }\r\n\r\n case ElementGeometryOpcode.PointPrimitive2d: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive2d.getRootAsPointPrimitive2d(buffer);\r\n return (EGFBAccessors.BoundaryType.Open === ppfb.boundary());\r\n }\r\n\r\n case ElementGeometryOpcode.ArcPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.ArcPrimitive.getRootAsArcPrimitive(buffer);\r\n return (EGFBAccessors.BoundaryType.Open === ppfb.boundary());\r\n }\r\n\r\n case ElementGeometryOpcode.CurvePrimitive: {\r\n // should never be a point string or closed bcurve...\r\n return true;\r\n }\r\n\r\n case ElementGeometryOpcode.CurveCollection: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return false;\r\n return (\"curveCollection\" === geom.geometryCategory && !(geom as CurveCollection).isAnyRegionType);\r\n }\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /** Return whether the supplied entry represents a loop, planar region, open polyface, or sheet body */\r\n export function isSurface(entry: ElementGeometryDataEntry): boolean {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.PointPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive.getRootAsPointPrimitive(buffer);\r\n return (EGFBAccessors.BoundaryType.Closed === ppfb.boundary());\r\n }\r\n\r\n case ElementGeometryOpcode.PointPrimitive2d: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive2d.getRootAsPointPrimitive2d(buffer);\r\n return (EGFBAccessors.BoundaryType.Closed === ppfb.boundary());\r\n }\r\n\r\n case ElementGeometryOpcode.ArcPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.ArcPrimitive.getRootAsArcPrimitive(buffer);\r\n return (EGFBAccessors.BoundaryType.Closed === ppfb.boundary());\r\n }\r\n\r\n case ElementGeometryOpcode.CurvePrimitive: {\r\n // should never be a closed bcurve...\r\n return false;\r\n }\r\n\r\n case ElementGeometryOpcode.CurveCollection: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return false;\r\n return (\"curveCollection\" === geom.geometryCategory && (geom as CurveCollection).isAnyRegionType);\r\n }\r\n\r\n case ElementGeometryOpcode.SolidPrimitive: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return false;\r\n return (\"solid\" === geom.geometryCategory && !(geom as SolidPrimitive).isClosedVolume);\r\n }\r\n\r\n case ElementGeometryOpcode.Polyface: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return false;\r\n if (\"polyface\" !== geom.geometryCategory)\r\n return false;\r\n const polyface = (geom as Polyface);\r\n switch (polyface.expectedClosure) {\r\n case 0:\r\n return !PolyfaceQuery.isPolyfaceClosedByEdgePairing(polyface);\r\n case 1:\r\n return true;\r\n case 2:\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n case ElementGeometryOpcode.BsplineSurface: {\r\n // never treated as a solid even if closed/periodic in u/v...\r\n return true;\r\n }\r\n\r\n case ElementGeometryOpcode.BRep: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.BRepData.getRootAsBRepData(buffer);\r\n return (EGFBAccessors.BRepType.Sheet === ppfb.brepType());\r\n }\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /** Return whether the supplied entry represents a capped solid, closed polyface, or solid body */\r\n export function isSolid(entry: ElementGeometryDataEntry): boolean {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.SolidPrimitive: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return false;\r\n return (\"solid\" === geom.geometryCategory && (geom as SolidPrimitive).isClosedVolume);\r\n }\r\n\r\n case ElementGeometryOpcode.Polyface: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return false;\r\n if (\"polyface\" !== geom.geometryCategory)\r\n return false;\r\n const polyface = (geom as Polyface);\r\n switch (polyface.expectedClosure) {\r\n case 0:\r\n return PolyfaceQuery.isPolyfaceClosedByEdgePairing(polyface);\r\n case 2:\r\n return true;\r\n case 1:\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n case ElementGeometryOpcode.BRep: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.BRepData.getRootAsBRepData(buffer);\r\n return (EGFBAccessors.BRepType.Solid === ppfb.brepType());\r\n }\r\n\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n /** Return the body type that would be used to represent the supplied entry */\r\n export function getBRepEntityType(entry: ElementGeometryDataEntry): BRepEntity.Type | undefined {\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.PointPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive.getRootAsPointPrimitive(buffer);\r\n if (EGFBAccessors.BoundaryType.None === ppfb.boundary())\r\n return undefined;\r\n return (EGFBAccessors.BoundaryType.Closed === ppfb.boundary() ? BRepEntity.Type.Sheet : BRepEntity.Type.Wire);\r\n }\r\n\r\n case ElementGeometryOpcode.PointPrimitive2d: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive2d.getRootAsPointPrimitive2d(buffer);\r\n if (EGFBAccessors.BoundaryType.None === ppfb.boundary())\r\n return undefined;\r\n return (EGFBAccessors.BoundaryType.Closed === ppfb.boundary() ? BRepEntity.Type.Sheet : BRepEntity.Type.Wire);\r\n }\r\n\r\n case ElementGeometryOpcode.ArcPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.ArcPrimitive.getRootAsArcPrimitive(buffer);\r\n return (EGFBAccessors.BoundaryType.Closed === ppfb.boundary() ? BRepEntity.Type.Sheet : BRepEntity.Type.Wire);\r\n }\r\n\r\n case ElementGeometryOpcode.CurvePrimitive: {\r\n // should never be a point string or closed bcurve...\r\n return BRepEntity.Type.Wire;\r\n }\r\n\r\n case ElementGeometryOpcode.CurveCollection: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return undefined;\r\n if (\"curveCollection\" !== geom.geometryCategory)\r\n return undefined;\r\n const curves = geom as CurveCollection;\r\n return (curves.isAnyRegionType ? BRepEntity.Type.Sheet : BRepEntity.Type.Wire);\r\n }\r\n\r\n case ElementGeometryOpcode.SolidPrimitive: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return undefined;\r\n if (\"solid\" !== geom.geometryCategory)\r\n return undefined;\r\n const solid = geom as SolidPrimitive;\r\n return (solid.isClosedVolume ? BRepEntity.Type.Solid : BRepEntity.Type.Sheet);\r\n }\r\n\r\n case ElementGeometryOpcode.BsplineSurface: {\r\n // always a surface...\r\n return BRepEntity.Type.Sheet;\r\n }\r\n\r\n case ElementGeometryOpcode.Polyface: {\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return undefined;\r\n if (\"polyface\" !== geom.geometryCategory)\r\n return undefined;\r\n const polyface = (geom as Polyface);\r\n switch (polyface.expectedClosure) {\r\n case 0:\r\n return PolyfaceQuery.isPolyfaceClosedByEdgePairing(polyface) ? BRepEntity.Type.Solid : BRepEntity.Type.Sheet;\r\n case 1:\r\n return BRepEntity.Type.Sheet;\r\n case 2:\r\n return BRepEntity.Type.Solid;\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n case ElementGeometryOpcode.BRep: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.BRepData.getRootAsBRepData(buffer);\r\n switch (ppfb.brepType()) {\r\n case EGFBAccessors.BRepType.Wire:\r\n return BRepEntity.Type.Wire; // always be persisted as a curve type...\r\n case EGFBAccessors.BRepType.Sheet:\r\n return BRepEntity.Type.Sheet;\r\n case EGFBAccessors.BRepType.Solid:\r\n return BRepEntity.Type.Solid;\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n default:\r\n return undefined;\r\n }\r\n }\r\n\r\n /** Return entry as a [[GeometryQuery]] */\r\n export function toGeometryQuery(entry: ElementGeometryDataEntry, localToWorld?: Transform): GeometryQuery | undefined {\r\n if (!isGeometryQueryEntry(entry))\r\n return undefined;\r\n\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.PointPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive.getRootAsPointPrimitive(buffer);\r\n\r\n const pts: Point3d[] = [];\r\n for (let i = 0; i < ppfb.coordsLength(); i++)\r\n pts.push(Point3d.create(ppfb.coords(i)!.x(), ppfb.coords(i)!.y(), ppfb.coords(i)!.z()));\r\n\r\n if (0 === pts.length)\r\n return undefined;\r\n\r\n if (undefined !== localToWorld)\r\n localToWorld.multiplyPoint3dArrayInPlace(pts);\r\n\r\n switch (ppfb.boundary()) {\r\n case EGFBAccessors.BoundaryType.Open:\r\n return LineString3d.createPoints(pts);\r\n case EGFBAccessors.BoundaryType.Closed:\r\n return Loop.createPolygon(pts);\r\n default:\r\n return PointString3d.createPoints(pts);\r\n }\r\n }\r\n\r\n case ElementGeometryOpcode.PointPrimitive2d: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive2d.getRootAsPointPrimitive2d(buffer);\r\n\r\n const pts: Point3d[] = [];\r\n for (let i = 0; i < ppfb.coordsLength(); i++)\r\n pts.push(Point3d.create(ppfb.coords(i)!.x(), ppfb.coords(i)!.y()));\r\n\r\n if (0 === pts.length)\r\n return undefined;\r\n\r\n if (undefined !== localToWorld)\r\n localToWorld.multiplyPoint3dArrayInPlace(pts);\r\n\r\n switch (ppfb.boundary()) {\r\n case EGFBAccessors.BoundaryType.Open:\r\n return LineString3d.createPoints(pts);\r\n case EGFBAccessors.BoundaryType.Closed:\r\n return Loop.createPolygon(pts);\r\n default:\r\n return PointString3d.createPoints(pts);\r\n }\r\n }\r\n\r\n case ElementGeometryOpcode.ArcPrimitive: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.ArcPrimitive.getRootAsArcPrimitive(buffer);\r\n\r\n const center = Point3d.create(ppfb.center()!.x(), ppfb.center()!.y(), ppfb.center()!.z());\r\n const vector0 = Vector3d.create(ppfb.vector0()!.x(), ppfb.vector0()!.y(), ppfb.vector0()!.z());\r\n const vector90 = Vector3d.create(ppfb.vector90()!.x(), ppfb.vector90()!.y(), ppfb.vector90()!.z());\r\n const arc = Arc3d.create(center, vector0, vector90, AngleSweep.createStartSweepRadians(ppfb.start(), ppfb.sweep()));\r\n\r\n if (undefined !== localToWorld && !arc.tryTransformInPlace(localToWorld))\r\n return undefined;\r\n\r\n return (EGFBAccessors.BoundaryType.Closed === ppfb.boundary() ? Loop.create(arc) : arc);\r\n }\r\n\r\n case ElementGeometryOpcode.CurvePrimitive:\r\n case ElementGeometryOpcode.CurveCollection:\r\n case ElementGeometryOpcode.SolidPrimitive:\r\n case ElementGeometryOpcode.BsplineSurface:\r\n case ElementGeometryOpcode.Polyface:\r\n const geom = BentleyGeometryFlatBuffer.bytesToGeometry(entry.data, true);\r\n if (undefined === geom || Array.isArray(geom))\r\n return undefined; // Should always be a single entry not an array...\r\n if (undefined !== localToWorld && !geom.tryTransformInPlace(localToWorld))\r\n return undefined;\r\n return geom;\r\n\r\n default:\r\n return undefined; // Not a GeometryQuery, need to be handled explicitly...\r\n }\r\n }\r\n\r\n /** Create entry from a [[GeometryQuery]] */\r\n export function fromGeometryQuery(geom: GeometryQuery, worldToLocal?: Transform): ElementGeometryDataEntry | undefined {\r\n let opcode;\r\n switch (geom.geometryCategory) {\r\n case \"bsurf\":\r\n opcode = ElementGeometryOpcode.BsplineSurface;\r\n break;\r\n case \"curveCollection\":\r\n opcode = ElementGeometryOpcode.CurveCollection;\r\n break;\r\n case \"curvePrimitive\":\r\n case \"pointCollection\":\r\n opcode = ElementGeometryOpcode.CurvePrimitive;\r\n break;\r\n case \"polyface\":\r\n opcode = ElementGeometryOpcode.Polyface;\r\n break;\r\n case \"solid\":\r\n opcode = ElementGeometryOpcode.SolidPrimitive;\r\n break;\r\n default:\r\n return undefined;\r\n }\r\n\r\n if (undefined !== worldToLocal) {\r\n const localGeom = geom.cloneTransformed(worldToLocal);\r\n if (undefined === localGeom)\r\n return undefined;\r\n geom = localGeom;\r\n }\r\n\r\n const data = BentleyGeometryFlatBuffer.geometryToBytes(geom, true);\r\n if (undefined === data)\r\n return undefined;\r\n\r\n return { opcode, data };\r\n }\r\n\r\n /** Return entry as a [[TextString]] */\r\n export function toTextString(entry: ElementGeometryDataEntry, localToWorld?: Transform): TextStringProps | undefined {\r\n if (ElementGeometryOpcode.TextString !== entry.opcode)\r\n return undefined;\r\n\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.TextString.getRootAsTextString(buffer);\r\n\r\n const style = ppfb.style();\r\n if (null === style)\r\n return undefined;\r\n\r\n const text = ppfb.text();\r\n const props: TextStringProps = { text: (null !== text ? text : \"\"), font: style.fontId(), height: style.height() };\r\n\r\n props.widthFactor = style.widthFactor();\r\n props.bold = style.isBold();\r\n props.italic = style.isItalic();\r\n props.underline = style.isUnderlined();\r\n\r\n const transform = ppfb.transform();\r\n if (null !== transform) {\r\n props.origin = Point3d.create(transform.form3d03(), transform.form3d13(), transform.form3d23());\r\n props.rotation = YawPitchRollAngles.createFromMatrix3d(Matrix3d.createRowValues(transform.form3d00(), transform.form3d01(), transform.form3d02(), transform.form3d10(), transform.form3d11(), transform.form3d12(), transform.form3d20(), transform.form3d21(), transform.form3d22()));\r\n }\r\n\r\n if (undefined === localToWorld)\r\n return props;\r\n\r\n const textString = new TextString(props);\r\n if (!textString.transformInPlace(localToWorld))\r\n return undefined;\r\n\r\n return textString.toJSON();\r\n }\r\n\r\n /** Create entry from a [[TextString]] */\r\n export function fromTextString(text: TextStringProps, worldToLocal?: Transform): ElementGeometryDataEntry | undefined {\r\n if (undefined !== worldToLocal) {\r\n const localText = new TextString(text);\r\n if (!localText.transformInPlace(worldToLocal))\r\n return undefined;\r\n text = localText.toJSON();\r\n }\r\n\r\n const fbb = new flatbuffers.Builder();\r\n const builder = EGFBAccessors.TextString;\r\n\r\n const textOffset = fbb.createString(text.text);\r\n const styleOffset = EGFBAccessors.TextStringStyle.createTextStringStyle(fbb, 1, 0, text.font, undefined === text.bold ? false : text.bold, undefined === text.italic ? false : text.italic, undefined === text.underline ? false : text.underline, text.height, undefined === text.widthFactor ? 1.0 : text.widthFactor);\r\n\r\n builder.startTextString(fbb);\r\n\r\n builder.addMajorVersion(fbb, 1);\r\n builder.addMinorVersion(fbb, 0);\r\n\r\n builder.addText(fbb, textOffset);\r\n builder.addStyle(fbb, styleOffset);\r\n\r\n if (undefined !== text.origin || undefined !== text.rotation) {\r\n const origin = Point3d.fromJSON(text.origin);\r\n const angles = YawPitchRollAngles.fromJSON(text.rotation);\r\n const matrix = angles.toMatrix3d();\r\n const coffs = matrix.coffs;\r\n const transformOffset = EGFBAccessors.TextStringTransform.createTextStringTransform(fbb, coffs[0], coffs[1], coffs[2], origin.x, coffs[3], coffs[4], coffs[5], origin.y, coffs[6], coffs[7], coffs[8], origin.z);\r\n builder.addTransform(fbb, transformOffset);\r\n }\r\n\r\n const mLoc = builder.endTextString(fbb);\r\n fbb.finish(mLoc);\r\n const data = fbb.asUint8Array();\r\n\r\n return { opcode: ElementGeometryOpcode.TextString, data };\r\n }\r\n\r\n /** Return entry as a [[ImageGraphic]] */\r\n export function toImageGraphic(entry: ElementGeometryDataEntry, localToWorld?: Transform): ImageGraphicProps | undefined {\r\n if (ElementGeometryOpcode.Image !== entry.opcode)\r\n return undefined;\r\n\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.Image.getRootAsImage(buffer);\r\n\r\n const textureLong = ppfb.textureId();\r\n const textureId = Id64.fromUint32Pair(textureLong.low, textureLong.high);\r\n const hasBorder = (1 === ppfb.drawBorder());\r\n\r\n const corners = new ImageGraphicCorners(Point3d.createZero(), Point3d.createZero(), Point3d.createZero(), Point3d.createZero());\r\n const corner0 = ppfb.tileCorner0();\r\n const corner1 = ppfb.tileCorner1();\r\n const corner2 = ppfb.tileCorner2();\r\n const corner3 = ppfb.tileCorner3();\r\n\r\n if (null !== corner0)\r\n corners[0].setFrom(Point3d.create(corner0.x(), corner0.y(), corner0.z()));\r\n if (null !== corner1)\r\n corners[1].setFrom(Point3d.create(corner1.x(), corner1.y(), corner1.z()));\r\n if (null !== corner2)\r\n corners[2].setFrom(Point3d.create(corner2.x(), corner2.y(), corner2.z()));\r\n if (null !== corner3)\r\n corners[3].setFrom(Point3d.create(corner3.x(), corner3.y(), corner3.z()));\r\n\r\n if (undefined !== localToWorld) {\r\n localToWorld.multiplyXYAndZInPlace(corners[0]);\r\n localToWorld.multiplyXYAndZInPlace(corners[1]);\r\n localToWorld.multiplyXYAndZInPlace(corners[2]);\r\n localToWorld.multiplyXYAndZInPlace(corners[3]);\r\n }\r\n\r\n return { corners: corners.toJSON(), textureId, hasBorder };\r\n }\r\n\r\n /** Create entry from a [[ImageGraphic]] */\r\n export function fromImageGraphic(image: ImageGraphicProps, worldToLocal?: Transform): ElementGeometryDataEntry | undefined {\r\n if (undefined !== worldToLocal) {\r\n const localImage = ImageGraphic.fromJSON(image).cloneTransformed(worldToLocal);\r\n image = localImage.toJSON();\r\n }\r\n\r\n const fbb = new flatbuffers.Builder();\r\n const builder = EGFBAccessors.Image;\r\n builder.startImage(fbb);\r\n\r\n const textudeIdPair = Id64.getUint32Pair(image.textureId);\r\n builder.addTextureId(fbb, flatbuffers.Long.create(textudeIdPair.lower, textudeIdPair.upper));\r\n builder.addDrawBorder(fbb, image.hasBorder ? 1 : 0);\r\n\r\n const corners = ImageGraphicCorners.fromJSON(image.corners);\r\n const cornerOffset0 = EGFBAccessors.DPoint3d.createDPoint3d(fbb, corners[0].x, corners[0].y, corners[0].z);\r\n builder.addTileCorner0(fbb, cornerOffset0);\r\n const cornerOffset1 = EGFBAccessors.DPoint3d.createDPoint3d(fbb, corners[1].x, corners[1].y, corners[1].z);\r\n builder.addTileCorner1(fbb, cornerOffset1);\r\n const cornerOffset2 = EGFBAccessors.DPoint3d.createDPoint3d(fbb, corners[2].x, corners[2].y, corners[2].z);\r\n builder.addTileCorner2(fbb, cornerOffset2);\r\n const cornerOffset3 = EGFBAccessors.DPoint3d.createDPoint3d(fbb, corners[3].x, corners[3].y, corners[3].z);\r\n builder.addTileCorner3(fbb, cornerOffset3);\r\n\r\n const mLoc = builder.endImage(fbb);\r\n fbb.finish(mLoc);\r\n const data = fbb.asUint8Array();\r\n\r\n return { opcode: ElementGeometryOpcode.Image, data };\r\n }\r\n\r\n /** Return entry as a [[BRepEntity.DataProps]] for checking brep type and face attachments. */\r\n export function toBRep(entry: ElementGeometryDataEntry, wantBRepData: boolean = false, localToWorld?: Transform): BRepEntity.DataProps | undefined {\r\n if (ElementGeometryOpcode.BRep !== entry.opcode)\r\n return undefined;\r\n\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.BRepData.getRootAsBRepData(buffer);\r\n\r\n const toBRepType = (typeFb: EGFBAccessors.BRepType) => {\r\n switch (typeFb) {\r\n case EGFBAccessors.BRepType.Wire:\r\n return BRepEntity.Type.Wire;\r\n case EGFBAccessors.BRepType.Sheet:\r\n return BRepEntity.Type.Sheet;\r\n default:\r\n return BRepEntity.Type.Solid;\r\n }\r\n };\r\n\r\n const type = toBRepType(ppfb.brepType());\r\n\r\n let transform;\r\n const entityTransform = ppfb.entityTransform();\r\n if (null !== entityTransform)\r\n transform = Transform.createRowValues(entityTransform.x00(), entityTransform.x01(), entityTransform.x02(), entityTransform.tx(), entityTransform.x10(), entityTransform.x11(), entityTransform.x12(), entityTransform.ty(), entityTransform.x20(), entityTransform.x21(), entityTransform.x22(), entityTransform.tz());\r\n\r\n if (undefined !== localToWorld) {\r\n if (undefined !== transform)\r\n transform.multiplyTransformTransform(localToWorld, transform);\r\n else\r\n transform = localToWorld;\r\n }\r\n\r\n const faceSymbLen = ppfb.symbologyLength();\r\n let faceSymbology;\r\n if (0 !== faceSymbLen) {\r\n const faceSymbPropsArray: BRepEntity.FaceSymbologyProps[] = [];\r\n for (let index = 0; index < faceSymbLen; ++index) {\r\n const faceSymbFb = ppfb.symbology(index);\r\n const faceSymbProps: BRepEntity.FaceSymbologyProps = {};\r\n if (null !== faceSymbFb) {\r\n if (1 === faceSymbFb.useColor())\r\n faceSymbProps.color = faceSymbFb.color();\r\n if (1 === faceSymbFb.useMaterial())\r\n faceSymbProps.materialId = Id64.fromUint32Pair(faceSymbFb.materialId().low, faceSymbFb.materialId().high);\r\n faceSymbProps.transparency = faceSymbFb.transparency();\r\n }\r\n faceSymbPropsArray.push(faceSymbProps);\r\n }\r\n faceSymbology = faceSymbPropsArray;\r\n }\r\n\r\n let data;\r\n const entityData = ppfb.entityDataArray();\r\n if (wantBRepData && null !== entityData)\r\n data = Base64EncodedString.fromUint8Array(entityData);\r\n\r\n return { data, type, transform: transform?.toJSON(), faceSymbology };\r\n }\r\n\r\n /** Create entry from a [[BRepEntity.DataProps]]. Provided for compatibility with GeometryStreamBuilder only. */\r\n export function fromBRep(brep: BRepEntity.DataProps, worldToLocal?: Transform): ElementGeometryDataEntry | undefined {\r\n if (undefined !== worldToLocal) {\r\n const entityTrans = Transform.fromJSON(brep.transform);\r\n const localTrans = entityTrans.multiplyTransformTransform(worldToLocal);\r\n brep = {\r\n data: brep.data,\r\n type: brep.type,\r\n transform: localTrans.isIdentity ? undefined : localTrans.toJSON(),\r\n faceSymbology: brep.faceSymbology,\r\n };\r\n }\r\n\r\n const fbb = new flatbuffers.Builder();\r\n const builder = EGFBAccessors.BRepData;\r\n let dataOffset;\r\n let faceSymbOffset;\r\n\r\n if (undefined !== brep.data) {\r\n const entityData = Base64EncodedString.toUint8Array(brep.data);\r\n if (entityData.length === 0)\r\n return undefined;\r\n\r\n dataOffset = builder.createEntityDataVector(fbb, entityData);\r\n }\r\n\r\n if (undefined !== brep.faceSymbology) {\r\n builder.startSymbologyVector(fbb, brep.faceSymbology.length);\r\n for (let i = brep.faceSymbology.length - 1; i >= 0; i--) {\r\n const symb = brep.faceSymbology[i];\r\n const materialIdPair = Id64.getUint32Pair(symb.materialId ? symb.materialId : Id64.invalid);\r\n const matLong = flatbuffers.Long.create(materialIdPair.lower, materialIdPair.upper);\r\n EGFBAccessors.FaceSymbology.createFaceSymbology(fbb, symb.color ? 1 : 0, symb.materialId ? 1 : 0, symb.color ? symb.color : 0, matLong, symb.transparency ? symb.transparency : 0, 0, 0);\r\n }\r\n faceSymbOffset = fbb.endVector();\r\n }\r\n\r\n builder.startBRepData(fbb);\r\n\r\n const toEGFBBRepType = (type: BRepEntity.Type) => {\r\n switch (type) {\r\n case BRepEntity.Type.Wire:\r\n return EGFBAccessors.BRepType.Wire;\r\n case BRepEntity.Type.Sheet:\r\n return EGFBAccessors.BRepType.Sheet;\r\n default:\r\n return EGFBAccessors.BRepType.Solid;\r\n }\r\n };\r\n\r\n if (undefined !== brep.type)\r\n builder.addBrepType(fbb, toEGFBBRepType(brep.type));\r\n\r\n if (undefined !== brep.transform) {\r\n const transform = Transform.fromJSON(brep.transform);\r\n const transformOffset = EGFBAccessors.Transform.createTransform(fbb, transform.matrix.coffs[0], transform.matrix.coffs[1], transform.matrix.coffs[2], transform.origin.x, transform.matrix.coffs[3], transform.matrix.coffs[4], transform.matrix.coffs[5], transform.origin.y, transform.matrix.coffs[6], transform.matrix.coffs[7], transform.matrix.coffs[8], transform.origin.z);\r\n builder.addEntityTransform(fbb, transformOffset);\r\n }\r\n\r\n if (undefined !== dataOffset)\r\n builder.addEntityData(fbb, dataOffset);\r\n\r\n if (undefined !== faceSymbOffset)\r\n builder.addSymbology(fbb, faceSymbOffset);\r\n\r\n const mLoc = builder.endBRepData(fbb);\r\n fbb.finish(mLoc);\r\n const data = fbb.asUint8Array();\r\n\r\n return { opcode: ElementGeometryOpcode.BRep, data };\r\n }\r\n\r\n /** Apply transform directly to ElementGeometryDataEntry for a BRep */\r\n export function transformBRep(entry: ElementGeometryDataEntry, inputTransform: Transform): boolean {\r\n if (ElementGeometryOpcode.BRep !== entry.opcode)\r\n return false;\r\n\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.BRepData.getRootAsBRepData(buffer);\r\n\r\n const fbb = new flatbuffers.Builder();\r\n const builder = EGFBAccessors.BRepData;\r\n\r\n const entityData = ppfb.entityDataArray();\r\n const dataOffset = (null !== entityData ? builder.createEntityDataVector(fbb, entityData) : undefined);\r\n\r\n let faceSymbOffset;\r\n const faceSymbLen = ppfb.symbologyLength();\r\n if (0 !== faceSymbLen) {\r\n builder.startSymbologyVector(fbb, faceSymbLen);\r\n for (let i = faceSymbLen - 1; i >= 0; i--) {\r\n const faceSymbFb = ppfb.symbology(i);\r\n if (null === faceSymbFb)\r\n continue;\r\n EGFBAccessors.FaceSymbology.createFaceSymbology(fbb, faceSymbFb.useColor(), faceSymbFb.useMaterial(), faceSymbFb.color(), faceSymbFb.materialId(), faceSymbFb.transparency(), 0, 0);\r\n }\r\n faceSymbOffset = fbb.endVector();\r\n }\r\n\r\n builder.startBRepData(fbb);\r\n builder.addBrepType(fbb, ppfb.brepType());\r\n\r\n let transform;\r\n const entityTransform = ppfb.entityTransform();\r\n if (null !== entityTransform)\r\n transform = Transform.createRowValues(entityTransform.x00(), entityTransform.x01(), entityTransform.x02(), entityTransform.tx(), entityTransform.x10(), entityTransform.x11(), entityTransform.x12(), entityTransform.ty(), entityTransform.x20(), entityTransform.x21(), entityTransform.x22(), entityTransform.tz());\r\n\r\n if (undefined !== transform)\r\n transform.multiplyTransformTransform(inputTransform, transform);\r\n else\r\n transform = inputTransform;\r\n\r\n const transformOffset = EGFBAccessors.Transform.createTransform(fbb, transform.matrix.coffs[0], transform.matrix.coffs[1], transform.matrix.coffs[2], transform.origin.x, transform.matrix.coffs[3], transform.matrix.coffs[4], transform.matrix.coffs[5], transform.origin.y, transform.matrix.coffs[6], transform.matrix.coffs[7], transform.matrix.coffs[8], transform.origin.z);\r\n builder.addEntityTransform(fbb, transformOffset);\r\n\r\n if (undefined !== dataOffset)\r\n builder.addEntityData(fbb, dataOffset);\r\n\r\n if (undefined !== faceSymbOffset)\r\n builder.addSymbology(fbb, faceSymbOffset);\r\n\r\n const mLoc = builder.endBRepData(fbb);\r\n fbb.finish(mLoc);\r\n entry.data = fbb.asUint8Array();\r\n\r\n return true;\r\n }\r\n\r\n /** @internal */\r\n enum StyleMod {\r\n Scale = 0x01,\r\n DashScale = 0x02,\r\n GapScale = 0x04,\r\n StartWidth = 0x08,\r\n EndWidth = 0x10,\r\n DistPhase = 0x20,\r\n FractPhase = 0x40,\r\n CenterPhase = 0x80,\r\n Normal = 0x0100,\r\n Rotation = 0x0200,\r\n PhysicalWidth = 0x02000,\r\n SegMode = 0x40000000,\r\n NoSegMode = 0x80000000,\r\n }\r\n\r\n /** Update the supplied [[GeometryParams]] from an entry with appearance information */\r\n export function updateGeometryParams(entry: ElementGeometryDataEntry, geomParams: GeometryParams, localToWorld?: Transform): boolean {\r\n if (!isAppearanceEntry(entry))\r\n return false;\r\n\r\n let changed = false;\r\n\r\n switch (entry.opcode) {\r\n case ElementGeometryOpcode.BasicSymbology: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.BasicSymbology.getRootAsBasicSymbology(buffer);\r\n\r\n const subcatLong = ppfb.subCategoryId();\r\n let subcatId = Id64.fromUint32Pair(subcatLong.low, subcatLong.high);\r\n\r\n if (Id64.isInvalid(subcatId))\r\n subcatId = geomParams.subCategoryId; // Preserve current sub-category if not explicitly stored...\r\n\r\n if (Id64.isValid(subcatId)) {\r\n geomParams.setSubCategoryId(subcatId); // Reset to sub-category appearance...\r\n changed = true;\r\n }\r\n\r\n if (ppfb.useColor()) {\r\n const lineColor = ColorDef.fromTbgr(ppfb.color());\r\n if (undefined === geomParams.lineColor || !lineColor.equals(geomParams.lineColor)) {\r\n geomParams.lineColor = lineColor;\r\n changed = true;\r\n }\r\n }\r\n\r\n if (ppfb.useWeight()) {\r\n const weight = ppfb.weight();\r\n if (undefined === geomParams.weight || weight !== geomParams.weight) {\r\n geomParams.weight = weight;\r\n changed = true;\r\n }\r\n }\r\n\r\n if (ppfb.useStyle()) {\r\n const styleLong = ppfb.lineStyleId();\r\n const styleId = Id64.fromUint32Pair(styleLong.low, styleLong.high);\r\n if (undefined === geomParams.styleInfo || styleId !== geomParams.styleInfo.styleId) {\r\n geomParams.styleInfo = new LineStyle.Info(styleId);\r\n changed = true;\r\n }\r\n }\r\n\r\n const transparency = ppfb.transparency();\r\n if (transparency !== (undefined !== geomParams.elmTransparency ? geomParams.elmTransparency : 0)) {\r\n geomParams.elmTransparency = transparency;\r\n changed = true;\r\n }\r\n\r\n const displayPriority = ppfb.displayPriority();\r\n if (displayPriority !== (undefined !== geomParams.elmPriority ? geomParams.elmPriority : 0)) {\r\n geomParams.elmPriority = displayPriority;\r\n changed = true;\r\n }\r\n\r\n const geometryClass = ppfb.geomClass();\r\n if (geometryClass !== (undefined !== geomParams.geometryClass ? geomParams.geometryClass : GeometryClass.Primary)) {\r\n geomParams.geometryClass = geometryClass;\r\n changed = true;\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n case ElementGeometryOpcode.LineStyleModifiers: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.LineStyleModifiers.getRootAsLineStyleModifiers(buffer);\r\n const props: LineStyle.ModifierProps = {};\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.Scale))\r\n props.scale = ppfb.scale();\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.GapScale))\r\n props.gapScale = ppfb.gapScale();\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.DashScale))\r\n props.dashScale = ppfb.dashScale();\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.StartWidth))\r\n props.startWidth = ppfb.startWidth();\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.EndWidth))\r\n props.endWidth = ppfb.endWidth();\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.DistPhase))\r\n props.distPhase = ppfb.distPhase();\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.FractPhase))\r\n props.fractPhase = ppfb.fractPhase();\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.CenterPhase))\r\n props.centerPhase = true;\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.SegMode))\r\n props.segmentMode = true;\r\n else if (0 !== (ppfb.modifiers() & StyleMod.NoSegMode))\r\n props.segmentMode = false;\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.PhysicalWidth))\r\n props.physicalWidth = true;\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.Normal)) {\r\n const normal = ppfb.normal();\r\n if (null !== normal)\r\n props.normal = Vector3d.create(normal.x(), normal.y(), normal.z());\r\n }\r\n\r\n if (0 !== (ppfb.modifiers() & StyleMod.Rotation))\r\n props.rotation = YawPitchRollAngles.createDegrees(ppfb.yaw(), ppfb.pitch(), ppfb.roll());\r\n\r\n const styleMod = new LineStyle.Modifier(props);\r\n if (undefined !== localToWorld)\r\n styleMod.applyTransform(localToWorld);\r\n\r\n if (undefined === geomParams.styleInfo) {\r\n geomParams.styleInfo = new LineStyle.Info(Id64.invalid, styleMod);\r\n changed = true;\r\n } else if (undefined === geomParams.styleInfo.styleMod || !styleMod.equals(geomParams.styleInfo.styleMod)) {\r\n geomParams.styleInfo.styleMod = styleMod;\r\n changed = true;\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n case ElementGeometryOpcode.Fill: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.AreaFill.getRootAsAreaFill(buffer);\r\n\r\n const toFillDisplay = (fill: EGFBAccessors.FillDisplay) => {\r\n switch (fill) {\r\n case EGFBAccessors.FillDisplay.ByView:\r\n return FillDisplay.ByView;\r\n case EGFBAccessors.FillDisplay.Always:\r\n return FillDisplay.Always;\r\n case EGFBAccessors.FillDisplay.Blanking:\r\n return FillDisplay.Blanking;\r\n default:\r\n return FillDisplay.Never;\r\n }\r\n };\r\n\r\n const fillDisplay = toFillDisplay(ppfb.fill());\r\n if (fillDisplay !== (undefined !== geomParams.fillDisplay ? geomParams.fillDisplay : FillDisplay.Never)) {\r\n geomParams.fillDisplay = fillDisplay;\r\n changed = true;\r\n }\r\n\r\n if (FillDisplay.Never === fillDisplay)\r\n return changed;\r\n\r\n const transparency = ppfb.transparency();\r\n if (transparency !== (undefined !== geomParams.fillTransparency ? geomParams.fillTransparency : 0)) {\r\n geomParams.fillTransparency = transparency;\r\n changed = true;\r\n }\r\n\r\n if (EGFBAccessors.GradientMode.None !== ppfb.mode()) {\r\n const toGradientMode = (mode: EGFBAccessors.GradientMode) => {\r\n switch (mode) {\r\n case EGFBAccessors.GradientMode.Linear:\r\n return Gradient.Mode.Linear;\r\n case EGFBAccessors.GradientMode.Curved:\r\n return Gradient.Mode.Curved;\r\n case EGFBAccessors.GradientMode.Cylindrical:\r\n return Gradient.Mode.Cylindrical;\r\n case EGFBAccessors.GradientMode.Spherical:\r\n return Gradient.Mode.Spherical;\r\n case EGFBAccessors.GradientMode.Hemispherical:\r\n return Gradient.Mode.Hemispherical;\r\n case EGFBAccessors.GradientMode.Thematic:\r\n return Gradient.Mode.Thematic;\r\n default:\r\n return Gradient.Mode.None;\r\n }\r\n };\r\n\r\n const keys: Gradient.KeyColorProps[] = [];\r\n const colors = ppfb.colorsArray();\r\n const values = ppfb.valuesArray();\r\n if (null !== colors && null !== values && colors.length === values.length) {\r\n for (let iKey = 0; iKey < colors.length; ++iKey)\r\n keys.push({ value: values[iKey], color: colors[iKey] });\r\n }\r\n\r\n const props: Gradient.SymbProps = { mode: toGradientMode(ppfb.mode()), keys };\r\n\r\n const flags = ppfb.flags();\r\n const angle = ppfb.angle();\r\n const tint = ppfb.tint();\r\n const shift = ppfb.shift();\r\n\r\n props.flags = (0 !== flags ? flags : undefined);\r\n props.angle = (0 !== angle ? { radians: angle } : undefined);\r\n props.tint = (0 !== tint ? tint : undefined);\r\n props.shift = (0 !== shift ? shift : undefined);\r\n\r\n if (Gradient.Mode.Thematic === props.mode) {\r\n const thematic = ppfb.thematicSettings();\r\n\r\n if (null !== thematic) {\r\n const tprops: ThematicGradientSettingsProps = {};\r\n\r\n const mode = thematic.mode();\r\n const stepCount = thematic.stepCount();\r\n const marginColor = thematic.marginColor();\r\n const colorScheme = thematic.colorScheme();\r\n\r\n tprops.mode = (0 !== mode ? mode : undefined);\r\n tprops.stepCount = (0 !== stepCount ? stepCount : undefined);\r\n tprops.marginColor = (0 !== marginColor ? marginColor : undefined);\r\n tprops.colorScheme = (0 !== colorScheme ? colorScheme : undefined);\r\n\r\n props.thematicSettings = tprops;\r\n }\r\n }\r\n\r\n const gradient = Gradient.Symb.fromJSON(props);\r\n if (undefined === geomParams.gradient || !gradient.equals(geomParams.gradient)) {\r\n geomParams.gradient = gradient;\r\n changed = true;\r\n }\r\n } else if (0 !== ppfb.backgroundFill()) {\r\n const backgroundFill = (2 === ppfb.backgroundFill() ? BackgroundFill.Outline : BackgroundFill.Solid);\r\n if (backgroundFill !== geomParams.backgroundFill) {\r\n geomParams.backgroundFill = backgroundFill;\r\n changed = true;\r\n }\r\n } else if (ppfb.useColor()) {\r\n const fillColor = ColorDef.fromTbgr(ppfb.color());\r\n if (undefined === geomParams.fillColor || !fillColor.equals(geomParams.fillColor)) {\r\n geomParams.fillColor = fillColor;\r\n changed = true;\r\n }\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n case ElementGeometryOpcode.Pattern: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.AreaPattern.getRootAsAreaPattern(buffer);\r\n const props: AreaPattern.ParamsProps = {};\r\n\r\n const origin = ppfb.origin();\r\n if (null !== origin) {\r\n const point = Point3d.create(origin.x(), origin.y(), origin.z());\r\n if (!point.isAlmostZero)\r\n props.origin = point;\r\n }\r\n\r\n const rotation = ppfb.rotation();\r\n if (null !== rotation) {\r\n const angles = YawPitchRollAngles.createFromMatrix3d(Matrix3d.createRowValues(\r\n rotation.x00(), rotation.x01(), rotation.x02(),\r\n rotation.x10(), rotation.x11(), rotation.x12(),\r\n rotation.x20(), rotation.x21(), rotation.x22())\r\n );\r\n if (undefined !== angles && !angles.isIdentity())\r\n props.rotation = angles;\r\n }\r\n\r\n const space1 = ppfb.space1();\r\n const space2 = ppfb.space2();\r\n const angle1 = ppfb.angle1();\r\n const angle2 = ppfb.angle2();\r\n const scale = ppfb.scale();\r\n\r\n props.space1 = (0 !== space1 ? space1 : undefined);\r\n props.space2 = (0 !== space2 ? space2 : undefined);\r\n props.angle1 = (0 !== angle1 ? { radians: angle1 } : undefined);\r\n props.angle2 = (0 !== angle2 ? { radians: angle2 } : undefined);\r\n props.scale = (0 !== scale ? scale : undefined);\r\n\r\n if (ppfb.useColor())\r\n props.color = ppfb.color();\r\n\r\n if (ppfb.useWeight())\r\n props.weight = ppfb.weight();\r\n\r\n props.invisibleBoundary = (1 === ppfb.invisibleBoundary() ? true : undefined);\r\n props.snappable = (1 === ppfb.snappable() ? true : undefined);\r\n\r\n const symbolId = Id64.fromUint32Pair(ppfb.symbolId().low, ppfb.symbolId().high);\r\n props.symbolId = (Id64.isValid(symbolId) ? symbolId : undefined);\r\n\r\n const nDefLines = ppfb.defLineLength();\r\n if (0 !== nDefLines) {\r\n const defLines: AreaPattern.HatchDefLineProps[] = [];\r\n\r\n for (let iLine = 0; iLine < nDefLines; ++iLine) {\r\n const defLine = ppfb.defLine(iLine);\r\n if (!defLine)\r\n continue;\r\n\r\n const line: AreaPattern.HatchDefLineProps = {};\r\n\r\n const angle = defLine.angle();\r\n line.angle = (0 !== angle ? { radians: defLine.angle() } : undefined);\r\n\r\n const through = defLine.through();\r\n if (through) {\r\n const thr = Point2d.create(through.x(), through.y());\r\n if (!thr.isAlmostZero)\r\n line.through = thr;\r\n }\r\n\r\n const offset = defLine.offset();\r\n if (offset) {\r\n const off = Point2d.create(offset.x(), offset.y());\r\n if (!off.isAlmostZero)\r\n line.offset = off;\r\n }\r\n\r\n const dashArray = defLine.dashesArray();\r\n if (0 !== defLine.dashesLength() && null !== dashArray) {\r\n const dashes: number[] = [];\r\n for (const value of dashArray) {\r\n dashes.push(value);\r\n }\r\n line.dashes = dashes;\r\n }\r\n\r\n defLines.push(line);\r\n }\r\n\r\n props.defLines = defLines;\r\n }\r\n\r\n const pattern = AreaPattern.Params.fromJSON(props);\r\n if (undefined !== localToWorld)\r\n pattern.applyTransform(localToWorld);\r\n\r\n if (undefined === geomParams.pattern || !pattern.equals(geomParams.pattern)) {\r\n geomParams.pattern = pattern;\r\n changed = true;\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n case ElementGeometryOpcode.Material: {\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.Material.getRootAsMaterial(buffer);\r\n\r\n if (ppfb.useMaterial()) {\r\n const matLong = ppfb.materialId();\r\n const materialId = Id64.fromUint32Pair(matLong.low, matLong.high);\r\n if (undefined === geomParams.materialId || materialId !== geomParams.materialId) {\r\n geomParams.materialId = materialId;\r\n changed = true;\r\n }\r\n }\r\n\r\n return changed;\r\n }\r\n\r\n default:\r\n return changed;\r\n }\r\n }\r\n\r\n /** Append entries to represent a [[GeometryParams]] */\r\n export function appendGeometryParams(geomParams: GeometryParams, entries: ElementGeometryDataEntry[], worldToLocal?: Transform): boolean {\r\n const fbbBas = new flatbuffers.Builder();\r\n const builder = EGFBAccessors.BasicSymbology;\r\n builder.startBasicSymbology(fbbBas);\r\n\r\n const subcatIdPair = Id64.getUint32Pair(geomParams.subCategoryId);\r\n builder.addSubCategoryId(fbbBas, flatbuffers.Long.create(subcatIdPair.lower, subcatIdPair.upper));\r\n\r\n if (undefined !== geomParams.lineColor) {\r\n builder.addColor(fbbBas, geomParams.lineColor.tbgr);\r\n builder.addUseColor(fbbBas, 1);\r\n }\r\n\r\n if (undefined !== geomParams.weight) {\r\n builder.addWeight(fbbBas, geomParams.weight);\r\n builder.addUseWeight(fbbBas, 1);\r\n }\r\n\r\n if (undefined !== geomParams.styleInfo) {\r\n const styleIdPair = Id64.getUint32Pair(geomParams.styleInfo.styleId);\r\n builder.addLineStyleId(fbbBas, flatbuffers.Long.create(styleIdPair.lower, styleIdPair.upper));\r\n builder.addUseStyle(fbbBas, 1);\r\n }\r\n\r\n if (undefined !== geomParams.elmTransparency && 0 !== geomParams.elmTransparency) {\r\n builder.addTransparency(fbbBas, geomParams.elmTransparency);\r\n }\r\n\r\n if (undefined !== geomParams.elmPriority && 0 !== geomParams.elmPriority) {\r\n builder.addDisplayPriority(fbbBas, geomParams.elmPriority);\r\n }\r\n\r\n if (undefined !== geomParams.geometryClass && GeometryClass.Primary !== geomParams.geometryClass) {\r\n builder.addGeomClass(fbbBas, geomParams.geometryClass);\r\n }\r\n\r\n const mLoc = builder.endBasicSymbology(fbbBas);\r\n fbbBas.finish(mLoc);\r\n const data = fbbBas.asUint8Array();\r\n\r\n entries.push({ opcode: ElementGeometryOpcode.BasicSymbology, data });\r\n\r\n if (undefined !== geomParams.styleInfo && undefined !== geomParams.styleInfo.styleMod) {\r\n const fbbLS = new flatbuffers.Builder();\r\n const builderLS = EGFBAccessors.LineStyleModifiers;\r\n builderLS.startLineStyleModifiers(fbbLS);\r\n\r\n let lsMods = geomParams.styleInfo.styleMod;\r\n if (undefined !== worldToLocal) {\r\n lsMods = new LineStyle.Modifier(lsMods);\r\n if (!lsMods.applyTransform(worldToLocal))\r\n return false;\r\n }\r\n\r\n let modifiers = 0;\r\n\r\n if (undefined !== lsMods.scale) {\r\n builderLS.addScale(fbbLS, lsMods.scale);\r\n modifiers |= StyleMod.Scale;\r\n }\r\n\r\n if (undefined !== lsMods.dashScale) {\r\n builderLS.addDashScale(fbbLS, lsMods.dashScale);\r\n modifiers |= StyleMod.DashScale;\r\n }\r\n\r\n if (undefined !== lsMods.gapScale) {\r\n builderLS.addGapScale(fbbLS, lsMods.gapScale);\r\n modifiers |= StyleMod.GapScale;\r\n }\r\n\r\n if (undefined !== lsMods.startWidth) {\r\n builderLS.addStartWidth(fbbLS, lsMods.startWidth);\r\n modifiers |= StyleMod.StartWidth;\r\n }\r\n\r\n if (undefined !== lsMods.endWidth) {\r\n builderLS.addEndWidth(fbbLS, lsMods.endWidth);\r\n modifiers |= StyleMod.EndWidth;\r\n }\r\n\r\n if (undefined !== lsMods.distPhase) {\r\n builderLS.addDistPhase(fbbLS, lsMods.distPhase);\r\n modifiers |= StyleMod.DistPhase;\r\n }\r\n\r\n if (undefined !== lsMods.fractPhase) {\r\n builderLS.addFractPhase(fbbLS, lsMods.fractPhase);\r\n modifiers |= StyleMod.FractPhase;\r\n }\r\n\r\n if (lsMods.centerPhase) {\r\n modifiers |= StyleMod.CenterPhase;\r\n }\r\n\r\n if (undefined !== lsMods.segmentMode) {\r\n modifiers |= (lsMods.segmentMode ? StyleMod.SegMode : StyleMod.NoSegMode);\r\n }\r\n\r\n if (lsMods.physicalWidth) {\r\n modifiers |= StyleMod.PhysicalWidth;\r\n }\r\n\r\n if (undefined !== lsMods.normal) {\r\n const normalOffset = EGFBAccessors.DVec3d.createDVec3d(fbbLS, lsMods.normal.x, lsMods.normal.y, lsMods.normal.z);\r\n builderLS.addNormal(fbbLS, normalOffset);\r\n modifiers |= StyleMod.Normal;\r\n }\r\n\r\n if (undefined !== lsMods.rotation) {\r\n builderLS.addYaw(fbbLS, lsMods.rotation.yaw.degrees);\r\n builderLS.addPitch(fbbLS, lsMods.rotation.pitch.degrees);\r\n builderLS.addRoll(fbbLS, lsMods.rotation.roll.degrees);\r\n modifiers |= StyleMod.Rotation;\r\n }\r\n\r\n builderLS.addModifiers(fbbLS, modifiers);\r\n\r\n const mLocLS = builderLS.endLineStyleModifiers(fbbLS);\r\n fbbLS.finish(mLocLS);\r\n const dataLS = fbbLS.asUint8Array();\r\n\r\n if (0 !== modifiers)\r\n entries.push({ opcode: ElementGeometryOpcode.LineStyleModifiers, data: dataLS });\r\n }\r\n\r\n if (undefined !== geomParams.fillDisplay && FillDisplay.Never !== geomParams.fillDisplay) {\r\n const fbbFill = new flatbuffers.Builder();\r\n const builderFill = EGFBAccessors.AreaFill;\r\n\r\n let keyValuesOff;\r\n let keyColorsOff;\r\n let thematicOffset;\r\n\r\n if (undefined !== geomParams.gradient) {\r\n const keyColors: number[] = [];\r\n const keyValues: number[] = [];\r\n\r\n for (const key of geomParams.gradient.keys) {\r\n keyColors.push(key.color.tbgr);\r\n keyValues.push(key.value);\r\n }\r\n\r\n keyValuesOff = builderFill.createValuesVector(fbbFill, keyValues);\r\n keyColorsOff = builderFill.createColorsVector(fbbFill, keyColors);\r\n\r\n if (Gradient.Mode.Thematic === geomParams.gradient.mode && undefined !== geomParams.gradient.thematicSettings) {\r\n const thematic = geomParams.gradient.thematicSettings;\r\n const builderThematic = EGFBAccessors.ThematicSettings;\r\n builderThematic.startThematicSettings(fbbFill);\r\n\r\n builderThematic.addMode(fbbFill, thematic.mode);\r\n builderThematic.addStepCount(fbbFill, thematic.stepCount);\r\n builderThematic.addMarginColor(fbbFill, thematic.marginColor.tbgr);\r\n builderThematic.addColorScheme(fbbFill, thematic.colorScheme);\r\n\r\n const rangeOffset = EGFBAccessors.DRange1d.createDRange1d(fbbFill, ThematicGradientSettings.contentRange, ThematicGradientSettings.contentMax);\r\n builderThematic.addRange(fbbFill, rangeOffset);\r\n\r\n thematicOffset = builderThematic.endThematicSettings(fbbFill);\r\n }\r\n }\r\n\r\n builderFill.startAreaFill(fbbFill);\r\n\r\n const toEGFBFillDisplay = (fill: FillDisplay) => {\r\n switch (fill) {\r\n case FillDisplay.ByView:\r\n return EGFBAccessors.FillDisplay.ByView;\r\n case FillDisplay.Always:\r\n return EGFBAccessors.FillDisplay.Always;\r\n case FillDisplay.Blanking:\r\n return EGFBAccessors.FillDisplay.Blanking;\r\n default:\r\n return EGFBAccessors.FillDisplay.None;\r\n }\r\n };\r\n\r\n builderFill.addFill(fbbFill, toEGFBFillDisplay(geomParams.fillDisplay));\r\n\r\n if (undefined !== geomParams.fillTransparency)\r\n builderFill.addTransparency(fbbFill, geomParams.fillTransparency);\r\n\r\n if (undefined !== geomParams.gradient) {\r\n const toEGFBGradientMode = (mode: Gradient.Mode) => {\r\n switch (mode) {\r\n case Gradient.Mode.Linear:\r\n return EGFBAccessors.GradientMode.Linear;\r\n case Gradient.Mode.Curved:\r\n return EGFBAccessors.GradientMode.Curved;\r\n case Gradient.Mode.Cylindrical:\r\n return EGFBAccessors.GradientMode.Cylindrical;\r\n case Gradient.Mode.Spherical:\r\n return EGFBAccessors.GradientMode.Spherical;\r\n case Gradient.Mode.Hemispherical:\r\n return EGFBAccessors.GradientMode.Hemispherical;\r\n case Gradient.Mode.Thematic:\r\n return EGFBAccessors.GradientMode.Thematic;\r\n default:\r\n return EGFBAccessors.GradientMode.None;\r\n }\r\n };\r\n\r\n builderFill.addMode(fbbFill, toEGFBGradientMode(geomParams.gradient.mode));\r\n\r\n builderFill.addFlags(fbbFill, geomParams.gradient.flags);\r\n builderFill.addShift(fbbFill, geomParams.gradient.shift);\r\n\r\n if (undefined !== geomParams.gradient.tint)\r\n builderFill.addTint(fbbFill, geomParams.gradient.tint);\r\n\r\n if (undefined !== geomParams.gradient.angle)\r\n builderFill.addAngle(fbbFill, geomParams.gradient.angle.radians);\r\n\r\n if (undefined !== keyValuesOff)\r\n builderFill.addValues(fbbFill, keyValuesOff);\r\n\r\n if (undefined !== keyColorsOff)\r\n builderFill.addColors(fbbFill, keyColorsOff);\r\n\r\n if (undefined !== thematicOffset)\r\n builderFill.addThematicSettings(fbbFill, thematicOffset);\r\n } else if (undefined !== geomParams.backgroundFill && BackgroundFill.None !== geomParams.backgroundFill) {\r\n builderFill.addBackgroundFill(fbbFill, BackgroundFill.Outline === geomParams.backgroundFill ? 2 : 1);\r\n } else if (undefined !== geomParams.fillColor) {\r\n builderFill.addColor(fbbFill, geomParams.fillColor.tbgr);\r\n builderFill.addUseColor(fbbFill, 1);\r\n }\r\n\r\n const mLocFill = builderFill.endAreaFill(fbbFill);\r\n fbbFill.finish(mLocFill);\r\n const dataFill = fbbFill.asUint8Array();\r\n\r\n entries.push({ opcode: ElementGeometryOpcode.Fill, data: dataFill });\r\n }\r\n\r\n if (undefined !== geomParams.pattern) {\r\n const fbbPat = new flatbuffers.Builder();\r\n const builderPat = EGFBAccessors.AreaPattern;\r\n\r\n let pattern = geomParams.pattern;\r\n if (undefined !== worldToLocal) {\r\n pattern = pattern.clone();\r\n if (!pattern.applyTransform(worldToLocal))\r\n return false;\r\n }\r\n\r\n let defLineVecOffset;\r\n\r\n if (undefined !== pattern.defLines) {\r\n const defLines = pattern.defLines;\r\n const builderDefLines = EGFBAccessors.DwgHatchDefLine;\r\n const defLineOffsets: number[] = [];\r\n\r\n for (const line of defLines) {\r\n let dashOffset;\r\n\r\n if (undefined !== line.dashes)\r\n dashOffset = builderDefLines.createDashesVector(fbbPat, line.dashes);\r\n\r\n builderDefLines.startDwgHatchDefLine(fbbPat);\r\n\r\n if (undefined !== line.angle)\r\n builderDefLines.addAngle(fbbPat, line.angle.radians);\r\n\r\n // NOTE: Backend requires through and offset to be present...\r\n const throughOffset = EGFBAccessors.DPoint2d.createDPoint2d(fbbPat, undefined !== line.through ? line.through.x : 0, undefined !== line.through ? line.through.y : 0);\r\n builderDefLines.addThrough(fbbPat, throughOffset);\r\n\r\n const offsetOffset = EGFBAccessors.DPoint2d.createDPoint2d(fbbPat, undefined !== line.offset ? line.offset.x : 0, undefined !== line.offset ? line.offset.y : 0);\r\n builderDefLines.addOffset(fbbPat, offsetOffset);\r\n\r\n if (undefined !== dashOffset)\r\n builderDefLines.addDashes(fbbPat, dashOffset);\r\n\r\n defLineOffsets.push(builderDefLines.endDwgHatchDefLine(fbbPat));\r\n }\r\n\r\n if (0 !== defLineOffsets.length)\r\n defLineVecOffset = builderPat.createDefLineVector(fbbPat, defLineOffsets);\r\n }\r\n\r\n builderPat.startAreaPattern(fbbPat);\r\n\r\n if (undefined !== pattern.origin) {\r\n const originOffset = EGFBAccessors.DPoint3d.createDPoint3d(fbbPat, pattern.origin.x, pattern.origin.y, pattern.origin.z);\r\n builderPat.addOrigin(fbbPat, originOffset);\r\n }\r\n\r\n if (undefined !== pattern.rotation) {\r\n const matrix = pattern.rotation.toMatrix3d();\r\n const coffs = matrix.coffs;\r\n const rotationOffset = EGFBAccessors.RotMatrix.createRotMatrix(fbbPat, coffs[0], coffs[1], coffs[2], coffs[3], coffs[4], coffs[5], coffs[6], coffs[7], coffs[8]);\r\n builderPat.addRotation(fbbPat, rotationOffset);\r\n }\r\n\r\n if (undefined !== pattern.space1)\r\n builderPat.addSpace1(fbbPat, pattern.space1);\r\n\r\n if (undefined !== pattern.space2)\r\n builderPat.addSpace2(fbbPat, pattern.space2);\r\n\r\n if (undefined !== pattern.angle1)\r\n builderPat.addAngle1(fbbPat, pattern.angle1.radians);\r\n\r\n if (undefined !== pattern.angle2)\r\n builderPat.addAngle2(fbbPat, pattern.angle2.radians);\r\n\r\n if (undefined !== pattern.scale)\r\n builderPat.addScale(fbbPat, pattern.scale);\r\n\r\n if (undefined !== pattern.color) {\r\n builderPat.addColor(fbbPat, pattern.color.tbgr);\r\n builderPat.addUseColor(fbbPat, 1);\r\n }\r\n\r\n if (undefined !== pattern.weight) {\r\n builderPat.addWeight(fbbPat, pattern.weight);\r\n builderPat.addUseWeight(fbbPat, 1);\r\n }\r\n\r\n if (undefined !== pattern.invisibleBoundary && pattern.invisibleBoundary)\r\n builderPat.addInvisibleBoundary(fbbPat, 1);\r\n\r\n if (undefined !== pattern.snappable && pattern.snappable)\r\n builderPat.addSnappable(fbbPat, 1);\r\n\r\n if (undefined !== pattern.symbolId) {\r\n const symbolIdPair = Id64.getUint32Pair(pattern.symbolId);\r\n builderPat.addSymbolId(fbbPat, flatbuffers.Long.create(symbolIdPair.lower, symbolIdPair.upper));\r\n }\r\n\r\n if (undefined !== defLineVecOffset)\r\n builderPat.addDefLine(fbbPat, defLineVecOffset);\r\n\r\n const mLocPat = builderPat.endAreaPattern(fbbPat);\r\n fbbPat.finish(mLocPat);\r\n const dataPat = fbbPat.asUint8Array();\r\n\r\n entries.push({ opcode: ElementGeometryOpcode.Pattern, data: dataPat });\r\n }\r\n\r\n if (undefined !== geomParams.materialId) {\r\n const fbbMat = new flatbuffers.Builder();\r\n const builderMat = EGFBAccessors.Material;\r\n builderMat.startMaterial(fbbMat);\r\n\r\n const matIdPair = Id64.getUint32Pair(geomParams.materialId);\r\n builderMat.addMaterialId(fbbMat, flatbuffers.Long.create(matIdPair.lower, matIdPair.upper));\r\n builderMat.addUseMaterial(fbbMat, 1);\r\n\r\n const mLocMat = builderMat.endMaterial(fbbMat);\r\n fbbMat.finish(mLocMat);\r\n const dataMat = fbbMat.asUint8Array();\r\n\r\n entries.push({ opcode: ElementGeometryOpcode.Material, data: dataMat });\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Return entry as [[GeometryPart]] id and instance transform */\r\n export function toGeometryPart(entry: ElementGeometryDataEntry, partToElement?: Transform): Id64String | undefined {\r\n if (ElementGeometryOpcode.PartReference !== entry.opcode)\r\n return undefined;\r\n\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.GeometryPart.getRootAsGeometryPart(buffer);\r\n\r\n const partLong = ppfb.geomPartId();\r\n const partId = Id64.fromUint32Pair(partLong.low, partLong.high);\r\n\r\n if (undefined !== partToElement) {\r\n let origin;\r\n const originfb = ppfb.origin();\r\n if (null !== originfb)\r\n origin = Point3d.create(originfb.x(), originfb.y(), originfb.z());\r\n else\r\n origin = Point3d.createZero();\r\n\r\n const angles = YawPitchRollAngles.createDegrees(ppfb.yaw(), ppfb.pitch(), ppfb.roll());\r\n const matrix = angles.toMatrix3d();\r\n if (1.0 !== ppfb.scale())\r\n matrix.scaleColumnsInPlace(ppfb.scale(), ppfb.scale(), ppfb.scale());\r\n\r\n Transform.createOriginAndMatrix(origin, matrix, partToElement);\r\n }\r\n\r\n return partId;\r\n }\r\n\r\n /** Create entry from a [[GeometryPart]] id and instance transform */\r\n export function fromGeometryPart(partId: Id64String, partTransform?: Transform, worldToLocal?: Transform): ElementGeometryDataEntry | undefined {\r\n let partToElement = partTransform;\r\n if (undefined !== worldToLocal)\r\n partToElement = worldToLocal.multiplyTransformTransform(undefined !== partTransform ? partTransform : Transform.createIdentity());\r\n\r\n const fbb = new flatbuffers.Builder();\r\n const builder = EGFBAccessors.GeometryPart;\r\n builder.startGeometryPart(fbb);\r\n\r\n const idPair = Id64.getUint32Pair(partId);\r\n builder.addGeomPartId(fbb, flatbuffers.Long.create(idPair.lower, idPair.upper));\r\n\r\n if (undefined !== partToElement && !partToElement.isIdentity) {\r\n const originOffset = EGFBAccessors.DPoint3d.createDPoint3d(fbb, partToElement.origin.x, partToElement.origin.y, partToElement.origin.z);\r\n builder.addOrigin(fbb, originOffset);\r\n\r\n const angles = YawPitchRollAngles.createFromMatrix3d(partToElement.matrix);\r\n if (undefined !== angles) {\r\n builder.addYaw(fbb, angles.yaw.degrees);\r\n builder.addPitch(fbb, angles.pitch.degrees);\r\n builder.addRoll(fbb, angles.roll.degrees);\r\n }\r\n\r\n const result = partToElement.matrix.factorRigidWithSignedScale();\r\n if (undefined !== result && result.scale > 0.0)\r\n builder.addScale(fbb, result.scale);\r\n }\r\n\r\n const mLoc = builder.endGeometryPart(fbb);\r\n fbb.finish(mLoc);\r\n const data = fbb.asUint8Array();\r\n\r\n return { opcode: ElementGeometryOpcode.PartReference, data };\r\n }\r\n\r\n /** Return entry as a [[ElementAlignedBox3d]] representing the local range of a geometric entry */\r\n export function toSubGraphicRange(entry: ElementGeometryDataEntry): ElementAlignedBox3d | undefined {\r\n if (ElementGeometryOpcode.SubGraphicRange !== entry.opcode)\r\n return undefined;\r\n\r\n const buffer = new flatbuffers.ByteBuffer(entry.data);\r\n const ppfb = EGFBAccessors.PointPrimitive.getRootAsPointPrimitive(buffer);\r\n\r\n if (2 !== ppfb.coordsLength())\r\n return undefined;\r\n\r\n const low = Point3d.create(ppfb.coords(0)!.x(), ppfb.coords(0)!.y(), ppfb.coords(0)!.z());\r\n const high = Point3d.create(ppfb.coords(1)!.x(), ppfb.coords(1)!.y(), ppfb.coords(1)!.z());\r\n\r\n return Range3d.create(low, high);\r\n }\r\n\r\n /** Create entry from a [[ElementAlignedBox3d]] to compute and store local ranges for subsequent geometric entries */\r\n export function fromSubGraphicRange(bbox: ElementAlignedBox3d): ElementGeometryDataEntry | undefined {\r\n const fbb = new flatbuffers.Builder();\r\n const builder = EGFBAccessors.PointPrimitive;\r\n\r\n builder.startCoordsVector(fbb, 2);\r\n fbb.addFloat64(bbox.high.z);\r\n fbb.addFloat64(bbox.high.y);\r\n fbb.addFloat64(bbox.high.x);\r\n fbb.addFloat64(bbox.low.z);\r\n fbb.addFloat64(bbox.low.y);\r\n fbb.addFloat64(bbox.low.x);\r\n const offset = fbb.endVector();\r\n\r\n builder.startPointPrimitive(fbb);\r\n builder.addCoords(fbb, offset);\r\n\r\n const mLoc = builder.endPointPrimitive(fbb);\r\n fbb.finish(mLoc);\r\n const data = fbb.asUint8Array();\r\n\r\n return { opcode: ElementGeometryOpcode.SubGraphicRange, data };\r\n }\r\n\r\n /** Create [[Transform]] from row-major storage 4x3 Float64Array */\r\n export function toTransform(sourceToWorld: Float64Array): Transform | undefined {\r\n if (12 !== sourceToWorld.length)\r\n return undefined;\r\n return Transform.createRowValues(\r\n sourceToWorld[0], sourceToWorld[1], sourceToWorld[2], sourceToWorld[3],\r\n sourceToWorld[4], sourceToWorld[5], sourceToWorld[6], sourceToWorld[7],\r\n sourceToWorld[8], sourceToWorld[9], sourceToWorld[10], sourceToWorld[11]\r\n );\r\n }\r\n\r\n /** Create [[ElementAlignedBox3d]] from lowX, lowY, lowZ, highX, highY, highZ Float64Array */\r\n export function toElementAlignedBox3d(bbox: Float64Array): ElementAlignedBox3d | undefined {\r\n if (6 !== bbox.length)\r\n return undefined;\r\n return Range3d.fromFloat64Array(bbox);\r\n }\r\n}\r\n\r\n"]}