@itwin/core-backend 5.9.0-dev.1 → 5.9.0-dev.11

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 (752) hide show
  1. package/CHANGELOG.md +30 -1
  2. package/lib/cjs/BackendHubAccess.d.ts +38 -0
  3. package/lib/cjs/BackendHubAccess.d.ts.map +1 -1
  4. package/lib/cjs/BackendHubAccess.js.map +1 -1
  5. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  6. package/lib/cjs/BisCoreSchema.js.map +1 -1
  7. package/lib/cjs/BlobContainerService.js.map +1 -1
  8. package/lib/cjs/BriefcaseManager.js +3 -3
  9. package/lib/cjs/BriefcaseManager.js.map +1 -1
  10. package/lib/cjs/CatalogDb.js.map +1 -1
  11. package/lib/cjs/Category.d.ts +37 -7
  12. package/lib/cjs/Category.d.ts.map +1 -1
  13. package/lib/cjs/Category.js +33 -42
  14. package/lib/cjs/Category.js.map +1 -1
  15. package/lib/cjs/ChangeSummaryManager.js +2 -2
  16. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  17. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  18. package/lib/cjs/ChangesetECAdaptor.d.ts.map +1 -1
  19. package/lib/cjs/ChangesetECAdaptor.js +253 -250
  20. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  21. package/lib/cjs/ChannelControl.d.ts +29 -0
  22. package/lib/cjs/ChannelControl.d.ts.map +1 -1
  23. package/lib/cjs/ChannelControl.js.map +1 -1
  24. package/lib/cjs/CheckpointManager.js +1 -1
  25. package/lib/cjs/CheckpointManager.js.map +1 -1
  26. package/lib/cjs/ClassRegistry.js +5 -5
  27. package/lib/cjs/ClassRegistry.js.map +1 -1
  28. package/lib/cjs/CloudSqlite.d.ts +1 -1
  29. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  30. package/lib/cjs/CloudSqlite.js +68 -13
  31. package/lib/cjs/CloudSqlite.js.map +1 -1
  32. package/lib/cjs/CodeService.js.map +1 -1
  33. package/lib/cjs/CodeSpecs.d.ts +32 -3
  34. package/lib/cjs/CodeSpecs.d.ts.map +1 -1
  35. package/lib/cjs/CodeSpecs.js +48 -20
  36. package/lib/cjs/CodeSpecs.js.map +1 -1
  37. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  38. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  39. package/lib/cjs/DevTools.js.map +1 -1
  40. package/lib/cjs/DisplayStyle.d.ts +18 -3
  41. package/lib/cjs/DisplayStyle.d.ts.map +1 -1
  42. package/lib/cjs/DisplayStyle.js +10 -21
  43. package/lib/cjs/DisplayStyle.js.map +1 -1
  44. package/lib/cjs/ECDb.js.map +1 -1
  45. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  46. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  47. package/lib/cjs/ECSqlStatement.js.map +1 -1
  48. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  49. package/lib/cjs/EditTxn.d.ts +262 -0
  50. package/lib/cjs/EditTxn.d.ts.map +1 -0
  51. package/lib/cjs/EditTxn.js +548 -0
  52. package/lib/cjs/EditTxn.js.map +1 -0
  53. package/lib/cjs/Element.d.ts +74 -5
  54. package/lib/cjs/Element.d.ts.map +1 -1
  55. package/lib/cjs/Element.js +63 -75
  56. package/lib/cjs/Element.js.map +1 -1
  57. package/lib/cjs/ElementAspect.d.ts +10 -0
  58. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  59. package/lib/cjs/ElementAspect.js +21 -12
  60. package/lib/cjs/ElementAspect.js.map +1 -1
  61. package/lib/cjs/ElementGraphics.js.map +1 -1
  62. package/lib/cjs/ElementTreeWalker.d.ts +56 -3
  63. package/lib/cjs/ElementTreeWalker.d.ts.map +1 -1
  64. package/lib/cjs/ElementTreeWalker.js +53 -40
  65. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  66. package/lib/cjs/Entity.js.map +1 -1
  67. package/lib/cjs/EntityReferences.js.map +1 -1
  68. package/lib/cjs/ExportGraphics.js.map +1 -1
  69. package/lib/cjs/ExternalSource.d.ts +11 -2
  70. package/lib/cjs/ExternalSource.d.ts.map +1 -1
  71. package/lib/cjs/ExternalSource.js +10 -8
  72. package/lib/cjs/ExternalSource.js.map +1 -1
  73. package/lib/cjs/FontFile.js.map +1 -1
  74. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  75. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  76. package/lib/cjs/GeometrySummary.js +47 -47
  77. package/lib/cjs/GeometrySummary.js.map +1 -1
  78. package/lib/cjs/IModelDb.d.ts +74 -23
  79. package/lib/cjs/IModelDb.d.ts.map +1 -1
  80. package/lib/cjs/IModelDb.js +193 -297
  81. package/lib/cjs/IModelDb.js.map +1 -1
  82. package/lib/cjs/IModelDbFonts.js.map +1 -1
  83. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  84. package/lib/cjs/IModelHost.d.ts +58 -1
  85. package/lib/cjs/IModelHost.d.ts.map +1 -1
  86. package/lib/cjs/IModelHost.js +89 -0
  87. package/lib/cjs/IModelHost.js.map +1 -1
  88. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  89. package/lib/cjs/IModelJsFs.js.map +1 -1
  90. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  91. package/lib/cjs/IpcHost.d.ts.map +1 -1
  92. package/lib/cjs/IpcHost.js +35 -15
  93. package/lib/cjs/IpcHost.js.map +1 -1
  94. package/lib/cjs/LineStyle.d.ts +47 -7
  95. package/lib/cjs/LineStyle.d.ts.map +1 -1
  96. package/lib/cjs/LineStyle.js +38 -33
  97. package/lib/cjs/LineStyle.js.map +1 -1
  98. package/lib/cjs/LocalHub.js +1 -1
  99. package/lib/cjs/LocalHub.js.map +1 -1
  100. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  101. package/lib/cjs/LockControl.d.ts +85 -1
  102. package/lib/cjs/LockControl.d.ts.map +1 -1
  103. package/lib/cjs/LockControl.js.map +1 -1
  104. package/lib/cjs/Material.d.ts +8 -1
  105. package/lib/cjs/Material.d.ts.map +1 -1
  106. package/lib/cjs/Material.js +6 -12
  107. package/lib/cjs/Material.js.map +1 -1
  108. package/lib/cjs/Model.d.ts +59 -20
  109. package/lib/cjs/Model.d.ts.map +1 -1
  110. package/lib/cjs/Model.js +38 -80
  111. package/lib/cjs/Model.js.map +1 -1
  112. package/lib/cjs/NativeAppStorage.js.map +1 -1
  113. package/lib/cjs/NativeHost.js.map +1 -1
  114. package/lib/cjs/NavigationRelationship.js.map +1 -1
  115. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  116. package/lib/cjs/PropertyStore.js.map +1 -1
  117. package/lib/cjs/Relationship.d.ts +72 -7
  118. package/lib/cjs/Relationship.d.ts.map +1 -1
  119. package/lib/cjs/Relationship.js +39 -21
  120. package/lib/cjs/Relationship.js.map +1 -1
  121. package/lib/cjs/RpcBackend.js.map +1 -1
  122. package/lib/cjs/SQLiteDb.js.map +1 -1
  123. package/lib/cjs/Schema.js.map +1 -1
  124. package/lib/cjs/SchemaSync.js +4 -4
  125. package/lib/cjs/SchemaSync.js.map +1 -1
  126. package/lib/cjs/SchemaUtils.js.map +1 -1
  127. package/lib/cjs/SheetIndex.d.ts +9 -0
  128. package/lib/cjs/SheetIndex.d.ts.map +1 -1
  129. package/lib/cjs/SheetIndex.js +38 -35
  130. package/lib/cjs/SheetIndex.js.map +1 -1
  131. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  132. package/lib/cjs/SqliteStatement.js.map +1 -1
  133. package/lib/cjs/StashManager.js +1 -1
  134. package/lib/cjs/StashManager.js.map +1 -1
  135. package/lib/cjs/Texture.d.ts +6 -0
  136. package/lib/cjs/Texture.d.ts.map +1 -1
  137. package/lib/cjs/Texture.js +6 -14
  138. package/lib/cjs/Texture.js.map +1 -1
  139. package/lib/cjs/TileStorage.js.map +1 -1
  140. package/lib/cjs/TxnManager.d.ts +105 -9
  141. package/lib/cjs/TxnManager.d.ts.map +1 -1
  142. package/lib/cjs/TxnManager.js +194 -15
  143. package/lib/cjs/TxnManager.js.map +1 -1
  144. package/lib/cjs/ViewDefinition.d.ts +21 -1
  145. package/lib/cjs/ViewDefinition.d.ts.map +1 -1
  146. package/lib/cjs/ViewDefinition.js +27 -66
  147. package/lib/cjs/ViewDefinition.js.map +1 -1
  148. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  149. package/lib/cjs/ViewStore.js.map +1 -1
  150. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +14 -6
  151. package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  152. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +33 -27
  153. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  154. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  155. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  156. package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
  157. package/lib/cjs/annotations/TextAnnotationElement.js +6 -5
  158. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  159. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  160. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  161. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  162. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  163. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
  164. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
  165. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  166. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  167. package/lib/cjs/core-backend.d.ts +1 -0
  168. package/lib/cjs/core-backend.d.ts.map +1 -1
  169. package/lib/cjs/core-backend.js +1 -0
  170. package/lib/cjs/core-backend.js.map +1 -1
  171. package/lib/cjs/domains/FunctionalElements.d.ts +6 -2
  172. package/lib/cjs/domains/FunctionalElements.d.ts.map +1 -1
  173. package/lib/cjs/domains/FunctionalElements.js +8 -13
  174. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  175. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  176. package/lib/cjs/domains/GenericElements.d.ts +11 -4
  177. package/lib/cjs/domains/GenericElements.d.ts.map +1 -1
  178. package/lib/cjs/domains/GenericElements.js +13 -24
  179. package/lib/cjs/domains/GenericElements.js.map +1 -1
  180. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  181. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  182. package/lib/cjs/internal/ChannelAdmin.d.ts +15 -0
  183. package/lib/cjs/internal/ChannelAdmin.d.ts.map +1 -1
  184. package/lib/cjs/internal/ChannelAdmin.js +5 -3
  185. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  186. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  187. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  188. package/lib/cjs/internal/HubMock.d.ts +2 -0
  189. package/lib/cjs/internal/HubMock.d.ts.map +1 -1
  190. package/lib/cjs/internal/HubMock.js +7 -0
  191. package/lib/cjs/internal/HubMock.js.map +1 -1
  192. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  193. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  194. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  195. package/lib/cjs/internal/NoLocks.d.ts.map +1 -1
  196. package/lib/cjs/internal/NoLocks.js +6 -0
  197. package/lib/cjs/internal/NoLocks.js.map +1 -1
  198. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  199. package/lib/cjs/internal/ServerBasedLocks.d.ts +12 -0
  200. package/lib/cjs/internal/ServerBasedLocks.d.ts.map +1 -1
  201. package/lib/cjs/internal/ServerBasedLocks.js +285 -4
  202. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  203. package/lib/cjs/internal/Symbols.d.ts +4 -0
  204. package/lib/cjs/internal/Symbols.d.ts.map +1 -1
  205. package/lib/cjs/internal/Symbols.js +5 -1
  206. package/lib/cjs/internal/Symbols.js.map +1 -1
  207. package/lib/cjs/internal/annotations/fields.d.ts +3 -2
  208. package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
  209. package/lib/cjs/internal/annotations/fields.js +7 -6
  210. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  211. package/lib/cjs/internal/cross-package.js.map +1 -1
  212. package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts +18 -3
  213. package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts.map +1 -1
  214. package/lib/cjs/internal/workspace/SettingsEditorImpl.js +49 -242
  215. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  216. package/lib/cjs/internal/workspace/SettingsImpl.d.ts.map +1 -1
  217. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  218. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  219. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +0 -1
  220. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  221. package/lib/cjs/internal/workspace/WorkspaceImpl.js +70 -41
  222. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  223. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  224. package/lib/cjs/rpc/multipart.js.map +1 -1
  225. package/lib/cjs/rpc/tracing.js.map +1 -1
  226. package/lib/cjs/rpc/web/logging.js.map +1 -1
  227. package/lib/cjs/rpc/web/request.js.map +1 -1
  228. package/lib/cjs/rpc/web/response.js.map +1 -1
  229. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  230. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  231. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  232. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
  233. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  234. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  235. package/lib/cjs/workspace/Settings.d.ts +11 -5
  236. package/lib/cjs/workspace/Settings.d.ts.map +1 -1
  237. package/lib/cjs/workspace/Settings.js.map +1 -1
  238. package/lib/cjs/workspace/SettingsDb.d.ts +20 -99
  239. package/lib/cjs/workspace/SettingsDb.d.ts.map +1 -1
  240. package/lib/cjs/workspace/SettingsDb.js +23 -7
  241. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  242. package/lib/cjs/workspace/SettingsEditor.d.ts +40 -226
  243. package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -1
  244. package/lib/cjs/workspace/SettingsEditor.js +86 -25
  245. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  246. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  247. package/lib/cjs/workspace/Workspace.d.ts +7 -11
  248. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  249. package/lib/cjs/workspace/Workspace.js.map +1 -1
  250. package/lib/cjs/workspace/WorkspaceEditor.d.ts +14 -0
  251. package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
  252. package/lib/cjs/workspace/WorkspaceEditor.js +1 -1
  253. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  254. package/lib/esm/BackendHubAccess.d.ts +38 -0
  255. package/lib/esm/BackendHubAccess.d.ts.map +1 -1
  256. package/lib/esm/BackendHubAccess.js.map +1 -1
  257. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  258. package/lib/esm/BisCoreSchema.js.map +1 -1
  259. package/lib/esm/BlobContainerService.js.map +1 -1
  260. package/lib/esm/BriefcaseManager.js +3 -3
  261. package/lib/esm/BriefcaseManager.js.map +1 -1
  262. package/lib/esm/CatalogDb.js.map +1 -1
  263. package/lib/esm/Category.d.ts +37 -7
  264. package/lib/esm/Category.d.ts.map +1 -1
  265. package/lib/esm/Category.js +33 -42
  266. package/lib/esm/Category.js.map +1 -1
  267. package/lib/esm/ChangeSummaryManager.js +2 -2
  268. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  269. package/lib/esm/ChangedElementsDb.js.map +1 -1
  270. package/lib/esm/ChangesetECAdaptor.d.ts.map +1 -1
  271. package/lib/esm/ChangesetECAdaptor.js +253 -250
  272. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  273. package/lib/esm/ChannelControl.d.ts +29 -0
  274. package/lib/esm/ChannelControl.d.ts.map +1 -1
  275. package/lib/esm/ChannelControl.js.map +1 -1
  276. package/lib/esm/CheckpointManager.js +1 -1
  277. package/lib/esm/CheckpointManager.js.map +1 -1
  278. package/lib/esm/ClassRegistry.js +5 -5
  279. package/lib/esm/ClassRegistry.js.map +1 -1
  280. package/lib/esm/CloudSqlite.d.ts +1 -1
  281. package/lib/esm/CloudSqlite.d.ts.map +1 -1
  282. package/lib/esm/CloudSqlite.js +69 -14
  283. package/lib/esm/CloudSqlite.js.map +1 -1
  284. package/lib/esm/CodeService.js.map +1 -1
  285. package/lib/esm/CodeSpecs.d.ts +32 -3
  286. package/lib/esm/CodeSpecs.d.ts.map +1 -1
  287. package/lib/esm/CodeSpecs.js +49 -21
  288. package/lib/esm/CodeSpecs.js.map +1 -1
  289. package/lib/esm/ConcurrentQuery.js.map +1 -1
  290. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  291. package/lib/esm/DevTools.js.map +1 -1
  292. package/lib/esm/DisplayStyle.d.ts +18 -3
  293. package/lib/esm/DisplayStyle.d.ts.map +1 -1
  294. package/lib/esm/DisplayStyle.js +10 -21
  295. package/lib/esm/DisplayStyle.js.map +1 -1
  296. package/lib/esm/ECDb.js.map +1 -1
  297. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  298. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  299. package/lib/esm/ECSqlStatement.js.map +1 -1
  300. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  301. package/lib/esm/EditTxn.d.ts +262 -0
  302. package/lib/esm/EditTxn.d.ts.map +1 -0
  303. package/lib/esm/EditTxn.js +543 -0
  304. package/lib/esm/EditTxn.js.map +1 -0
  305. package/lib/esm/Element.d.ts +74 -5
  306. package/lib/esm/Element.d.ts.map +1 -1
  307. package/lib/esm/Element.js +64 -76
  308. package/lib/esm/Element.js.map +1 -1
  309. package/lib/esm/ElementAspect.d.ts +10 -0
  310. package/lib/esm/ElementAspect.d.ts.map +1 -1
  311. package/lib/esm/ElementAspect.js +22 -13
  312. package/lib/esm/ElementAspect.js.map +1 -1
  313. package/lib/esm/ElementGraphics.js.map +1 -1
  314. package/lib/esm/ElementTreeWalker.d.ts +56 -3
  315. package/lib/esm/ElementTreeWalker.d.ts.map +1 -1
  316. package/lib/esm/ElementTreeWalker.js +53 -40
  317. package/lib/esm/ElementTreeWalker.js.map +1 -1
  318. package/lib/esm/Entity.js.map +1 -1
  319. package/lib/esm/EntityReferences.js.map +1 -1
  320. package/lib/esm/ExportGraphics.js.map +1 -1
  321. package/lib/esm/ExternalSource.d.ts +11 -2
  322. package/lib/esm/ExternalSource.d.ts.map +1 -1
  323. package/lib/esm/ExternalSource.js +10 -8
  324. package/lib/esm/ExternalSource.js.map +1 -1
  325. package/lib/esm/FontFile.js.map +1 -1
  326. package/lib/esm/GeoCoordConfig.js.map +1 -1
  327. package/lib/esm/GeographicCRSServices.js.map +1 -1
  328. package/lib/esm/GeometrySummary.js +47 -47
  329. package/lib/esm/GeometrySummary.js.map +1 -1
  330. package/lib/esm/IModelDb.d.ts +74 -23
  331. package/lib/esm/IModelDb.d.ts.map +1 -1
  332. package/lib/esm/IModelDb.js +195 -299
  333. package/lib/esm/IModelDb.js.map +1 -1
  334. package/lib/esm/IModelDbFonts.js.map +1 -1
  335. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  336. package/lib/esm/IModelHost.d.ts +58 -1
  337. package/lib/esm/IModelHost.d.ts.map +1 -1
  338. package/lib/esm/IModelHost.js +91 -2
  339. package/lib/esm/IModelHost.js.map +1 -1
  340. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  341. package/lib/esm/IModelJsFs.js.map +1 -1
  342. package/lib/esm/ImageSourceConversion.js.map +1 -1
  343. package/lib/esm/IpcHost.d.ts.map +1 -1
  344. package/lib/esm/IpcHost.js +36 -16
  345. package/lib/esm/IpcHost.js.map +1 -1
  346. package/lib/esm/LineStyle.d.ts +47 -7
  347. package/lib/esm/LineStyle.d.ts.map +1 -1
  348. package/lib/esm/LineStyle.js +38 -33
  349. package/lib/esm/LineStyle.js.map +1 -1
  350. package/lib/esm/LocalHub.js +1 -1
  351. package/lib/esm/LocalHub.js.map +1 -1
  352. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  353. package/lib/esm/LockControl.d.ts +85 -1
  354. package/lib/esm/LockControl.d.ts.map +1 -1
  355. package/lib/esm/LockControl.js.map +1 -1
  356. package/lib/esm/Material.d.ts +8 -1
  357. package/lib/esm/Material.d.ts.map +1 -1
  358. package/lib/esm/Material.js +6 -12
  359. package/lib/esm/Material.js.map +1 -1
  360. package/lib/esm/Model.d.ts +59 -20
  361. package/lib/esm/Model.d.ts.map +1 -1
  362. package/lib/esm/Model.js +39 -81
  363. package/lib/esm/Model.js.map +1 -1
  364. package/lib/esm/NativeAppStorage.js.map +1 -1
  365. package/lib/esm/NativeHost.js.map +1 -1
  366. package/lib/esm/NavigationRelationship.js.map +1 -1
  367. package/lib/esm/PromiseMemoizer.js.map +1 -1
  368. package/lib/esm/PropertyStore.js.map +1 -1
  369. package/lib/esm/Relationship.d.ts +72 -7
  370. package/lib/esm/Relationship.d.ts.map +1 -1
  371. package/lib/esm/Relationship.js +40 -22
  372. package/lib/esm/Relationship.js.map +1 -1
  373. package/lib/esm/RpcBackend.js.map +1 -1
  374. package/lib/esm/SQLiteDb.js.map +1 -1
  375. package/lib/esm/Schema.js.map +1 -1
  376. package/lib/esm/SchemaSync.js +5 -5
  377. package/lib/esm/SchemaSync.js.map +1 -1
  378. package/lib/esm/SchemaUtils.js.map +1 -1
  379. package/lib/esm/SheetIndex.d.ts +9 -0
  380. package/lib/esm/SheetIndex.d.ts.map +1 -1
  381. package/lib/esm/SheetIndex.js +38 -35
  382. package/lib/esm/SheetIndex.js.map +1 -1
  383. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  384. package/lib/esm/SqliteStatement.js.map +1 -1
  385. package/lib/esm/StashManager.js +1 -1
  386. package/lib/esm/StashManager.js.map +1 -1
  387. package/lib/esm/Texture.d.ts +6 -0
  388. package/lib/esm/Texture.d.ts.map +1 -1
  389. package/lib/esm/Texture.js +6 -14
  390. package/lib/esm/Texture.js.map +1 -1
  391. package/lib/esm/TileStorage.js.map +1 -1
  392. package/lib/esm/TxnManager.d.ts +105 -9
  393. package/lib/esm/TxnManager.d.ts.map +1 -1
  394. package/lib/esm/TxnManager.js +194 -15
  395. package/lib/esm/TxnManager.js.map +1 -1
  396. package/lib/esm/ViewDefinition.d.ts +21 -1
  397. package/lib/esm/ViewDefinition.d.ts.map +1 -1
  398. package/lib/esm/ViewDefinition.js +27 -66
  399. package/lib/esm/ViewDefinition.js.map +1 -1
  400. package/lib/esm/ViewStateHydrator.js.map +1 -1
  401. package/lib/esm/ViewStore.js.map +1 -1
  402. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +14 -6
  403. package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
  404. package/lib/esm/annotations/ElementDrivesTextAnnotation.js +33 -27
  405. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  406. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  407. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  408. package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
  409. package/lib/esm/annotations/TextAnnotationElement.js +6 -5
  410. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  411. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  412. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  413. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  414. package/lib/esm/core-backend.d.ts +1 -0
  415. package/lib/esm/core-backend.d.ts.map +1 -1
  416. package/lib/esm/core-backend.js +1 -0
  417. package/lib/esm/core-backend.js.map +1 -1
  418. package/lib/esm/domains/FunctionalElements.d.ts +6 -2
  419. package/lib/esm/domains/FunctionalElements.d.ts.map +1 -1
  420. package/lib/esm/domains/FunctionalElements.js +8 -13
  421. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  422. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  423. package/lib/esm/domains/GenericElements.d.ts +11 -4
  424. package/lib/esm/domains/GenericElements.d.ts.map +1 -1
  425. package/lib/esm/domains/GenericElements.js +13 -24
  426. package/lib/esm/domains/GenericElements.js.map +1 -1
  427. package/lib/esm/domains/GenericSchema.js.map +1 -1
  428. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  429. package/lib/esm/internal/ChannelAdmin.d.ts +15 -0
  430. package/lib/esm/internal/ChannelAdmin.d.ts.map +1 -1
  431. package/lib/esm/internal/ChannelAdmin.js +6 -4
  432. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  433. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  434. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  435. package/lib/esm/internal/HubMock.d.ts +2 -0
  436. package/lib/esm/internal/HubMock.d.ts.map +1 -1
  437. package/lib/esm/internal/HubMock.js +7 -0
  438. package/lib/esm/internal/HubMock.js.map +1 -1
  439. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  440. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  441. package/lib/esm/internal/NativePlatform.js.map +1 -1
  442. package/lib/esm/internal/NoLocks.d.ts.map +1 -1
  443. package/lib/esm/internal/NoLocks.js +6 -0
  444. package/lib/esm/internal/NoLocks.js.map +1 -1
  445. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  446. package/lib/esm/internal/ServerBasedLocks.d.ts +12 -0
  447. package/lib/esm/internal/ServerBasedLocks.d.ts.map +1 -1
  448. package/lib/esm/internal/ServerBasedLocks.js +286 -5
  449. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  450. package/lib/esm/internal/Symbols.d.ts +4 -0
  451. package/lib/esm/internal/Symbols.d.ts.map +1 -1
  452. package/lib/esm/internal/Symbols.js +4 -0
  453. package/lib/esm/internal/Symbols.js.map +1 -1
  454. package/lib/esm/internal/annotations/fields.d.ts +3 -2
  455. package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
  456. package/lib/esm/internal/annotations/fields.js +7 -6
  457. package/lib/esm/internal/annotations/fields.js.map +1 -1
  458. package/lib/esm/internal/cross-package.js.map +1 -1
  459. package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts +18 -3
  460. package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts.map +1 -1
  461. package/lib/esm/internal/workspace/SettingsEditorImpl.js +52 -246
  462. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  463. package/lib/esm/internal/workspace/SettingsImpl.d.ts.map +1 -1
  464. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  465. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  466. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +0 -1
  467. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  468. package/lib/esm/internal/workspace/WorkspaceImpl.js +71 -41
  469. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  470. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  471. package/lib/esm/rpc/multipart.js.map +1 -1
  472. package/lib/esm/rpc/tracing.js.map +1 -1
  473. package/lib/esm/rpc/web/logging.js.map +1 -1
  474. package/lib/esm/rpc/web/request.js.map +1 -1
  475. package/lib/esm/rpc/web/response.js.map +1 -1
  476. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  477. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  478. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  479. package/lib/esm/rpc-impl/RpcBriefcaseUtility.d.ts.map +1 -1
  480. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  481. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  482. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  483. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  484. package/lib/esm/test/AttachDb.test.js +11 -11
  485. package/lib/esm/test/AttachDb.test.js.map +1 -1
  486. package/lib/esm/test/ElementDrivesElement.test.d.ts +20 -19
  487. package/lib/esm/test/ElementDrivesElement.test.d.ts.map +1 -1
  488. package/lib/esm/test/ElementDrivesElement.test.js +134 -119
  489. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  490. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  491. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  492. package/lib/esm/test/IModelHost.test.js +56 -2
  493. package/lib/esm/test/IModelHost.test.js.map +1 -1
  494. package/lib/esm/test/IModelTestUtils.d.ts +23 -23
  495. package/lib/esm/test/IModelTestUtils.d.ts.map +1 -1
  496. package/lib/esm/test/IModelTestUtils.js +466 -449
  497. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  498. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  499. package/lib/esm/test/IpcHost.test.js +112 -0
  500. package/lib/esm/test/IpcHost.test.js.map +1 -1
  501. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  502. package/lib/esm/test/PrintElementTree.js.map +1 -1
  503. package/lib/esm/test/PropertyDb.test.js +2 -2
  504. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  505. package/lib/esm/test/RevisionUtility.js.map +1 -1
  506. package/lib/esm/test/SchemaUtils.test.js +25 -25
  507. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  508. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  509. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +156 -147
  510. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  511. package/lib/esm/test/TestChangeSetUtility.d.ts.map +1 -1
  512. package/lib/esm/test/TestChangeSetUtility.js +11 -7
  513. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  514. package/lib/esm/test/TestEditTxn.d.ts +8 -0
  515. package/lib/esm/test/TestEditTxn.d.ts.map +1 -0
  516. package/lib/esm/test/TestEditTxn.js +34 -0
  517. package/lib/esm/test/TestEditTxn.js.map +1 -0
  518. package/lib/esm/test/TestUtils.d.ts +1 -0
  519. package/lib/esm/test/TestUtils.d.ts.map +1 -1
  520. package/lib/esm/test/TestUtils.js +8 -1
  521. package/lib/esm/test/TestUtils.js.map +1 -1
  522. package/lib/esm/test/annotations/Fields.test.js +135 -143
  523. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  524. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  525. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  526. package/lib/esm/test/annotations/TextAnnotation.test.js +156 -99
  527. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  528. package/lib/esm/test/annotations/TextBlock.test.js +5 -3
  529. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  530. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  531. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  532. package/lib/esm/test/categories/Category.test.js +63 -3
  533. package/lib/esm/test/categories/Category.test.js.map +1 -1
  534. package/lib/esm/test/codespec/CodeSpec.test.js +88 -5
  535. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  536. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  537. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  538. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  539. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  540. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  541. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  542. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  543. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  544. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  545. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  546. package/lib/esm/test/ecdb/ECSqlAst.test.js +68 -67
  547. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  548. package/lib/esm/test/ecdb/ECSqlQuery.test.js +6 -6
  549. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  550. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -333
  551. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  552. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  553. package/lib/esm/test/ecdb/QueryReaders.test.js +47 -44
  554. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  555. package/lib/esm/test/ecdb/SqliteStatement.test.js +2 -2
  556. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  557. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
  558. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +30 -28
  559. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  560. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  561. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  562. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  563. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  564. package/lib/esm/test/element/DeleteDefinitionElements.test.js +159 -143
  565. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  566. package/lib/esm/test/element/ElementAspect.test.js +90 -82
  567. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  568. package/lib/esm/test/element/ElementDependencyGraph.test.d.ts.map +1 -1
  569. package/lib/esm/test/element/ElementDependencyGraph.test.js +51 -43
  570. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  571. package/lib/esm/test/element/ElementRoundTrip.test.js +176 -177
  572. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  573. package/lib/esm/test/element/ExcludedElements.test.js +2 -2
  574. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  575. package/lib/esm/test/element/ExternalSource.test.js +40 -38
  576. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  577. package/lib/esm/test/element/NullStructArray.test.js +23 -22
  578. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  579. package/lib/esm/test/element/ProjectInformationRecord.test.js +5 -2
  580. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  581. package/lib/esm/test/element/SheetInformationAspect.test.js +43 -11
  582. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  583. package/lib/esm/test/element/UrlLink.test.js +2 -2
  584. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  585. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  586. package/lib/esm/test/font/IModelDbFonts.test.js +87 -73
  587. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  588. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +194 -155
  589. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  590. package/lib/esm/test/hubaccess/BriefcaseManager.test.js +2 -4
  591. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  592. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  593. package/lib/esm/test/hubaccess/Rebase.test.js +369 -303
  594. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  595. package/lib/esm/test/hubaccess/SemanticRebase.test.js +467 -392
  596. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  597. package/lib/esm/test/imageData.js.map +1 -1
  598. package/lib/esm/test/imodel/Code.test.js +31 -31
  599. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  600. package/lib/esm/test/imodel/ElementTreeWalker.test.js +57 -48
  601. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  602. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  603. package/lib/esm/test/imodel/IModel.test.js +463 -388
  604. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  605. package/lib/esm/test/imodel/ProjectExtents.test.js +2 -2
  606. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  607. package/lib/esm/test/imodel/SchemaXmlImport.test.js +77 -13
  608. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  609. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  610. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  611. package/lib/esm/test/incrementalSchemaLocater/TestContext.d.ts.map +1 -1
  612. package/lib/esm/test/incrementalSchemaLocater/TestContext.js +2 -2
  613. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  614. package/lib/esm/test/index.d.ts +1 -0
  615. package/lib/esm/test/index.d.ts.map +1 -1
  616. package/lib/esm/test/index.js +1 -0
  617. package/lib/esm/test/index.js.map +1 -1
  618. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  619. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  620. package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
  621. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  622. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  623. package/lib/esm/test/rpc/response.test.js.map +1 -1
  624. package/lib/esm/test/schema/ClassRegistry.test.js +122 -121
  625. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  626. package/lib/esm/test/schema/FunctionalDomain.test.js +36 -34
  627. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  628. package/lib/esm/test/schema/GenericDomain.test.js +114 -94
  629. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  630. package/lib/esm/test/schema/IModelSchemaContext.test.js +11 -10
  631. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  632. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +226 -211
  633. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  634. package/lib/esm/test/sheetindex/SheetIndex.test.d.ts +1 -3
  635. package/lib/esm/test/sheetindex/SheetIndex.test.d.ts.map +1 -1
  636. package/lib/esm/test/sheetindex/SheetIndex.test.js +312 -247
  637. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  638. package/lib/esm/test/standalone/ChangeMerge.test.js +101 -82
  639. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  640. package/lib/esm/test/standalone/ChangesetReader.test.js +242 -213
  641. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  642. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  643. package/lib/esm/test/standalone/DisplayStyle.test.js +43 -40
  644. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  645. package/lib/esm/test/standalone/Drawing.test.js +4 -3
  646. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  647. package/lib/esm/test/standalone/EditTxn.test.d.ts +2 -0
  648. package/lib/esm/test/standalone/EditTxn.test.d.ts.map +1 -0
  649. package/lib/esm/test/standalone/EditTxn.test.js +219 -0
  650. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -0
  651. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  652. package/lib/esm/test/standalone/ElementMesh.test.js +16 -13
  653. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  654. package/lib/esm/test/standalone/ExportGraphics.test.js +40 -34
  655. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  656. package/lib/esm/test/standalone/GeometryChangeEvents.test.js +11 -15
  657. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  658. package/lib/esm/test/standalone/GeometryStream.test.js +212 -165
  659. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  660. package/lib/esm/test/standalone/HubMock.test.js +31 -25
  661. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  662. package/lib/esm/test/standalone/IModelLimits.test.js +11 -8
  663. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  664. package/lib/esm/test/standalone/IModelWrite.test.d.ts +2 -2
  665. package/lib/esm/test/standalone/IModelWrite.test.d.ts.map +1 -1
  666. package/lib/esm/test/standalone/IModelWrite.test.js +211 -169
  667. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  668. package/lib/esm/test/standalone/ITwinWorkspace.test.d.ts +2 -0
  669. package/lib/esm/test/standalone/ITwinWorkspace.test.d.ts.map +1 -0
  670. package/lib/esm/test/standalone/ITwinWorkspace.test.js +236 -0
  671. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -0
  672. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js +25 -22
  673. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  674. package/lib/esm/test/standalone/IntegrityCheck.test.js +20 -18
  675. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  676. package/lib/esm/test/standalone/MergeConflict.test.d.ts +2 -2
  677. package/lib/esm/test/standalone/MergeConflict.test.d.ts.map +1 -1
  678. package/lib/esm/test/standalone/MergeConflict.test.js +49 -33
  679. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  680. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  681. package/lib/esm/test/standalone/RenderMaterialElement.test.js +5 -5
  682. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  683. package/lib/esm/test/standalone/RenderTimeline.test.js +3 -2
  684. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  685. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  686. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  687. package/lib/esm/test/standalone/SectionDrawing.test.js +7 -7
  688. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  689. package/lib/esm/test/standalone/ServerBasedLocks.test.js +928 -22
  690. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  691. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  692. package/lib/esm/test/standalone/Settings.test.js +26 -4
  693. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  694. package/lib/esm/test/standalone/SettingsSchemas.test.js +2 -1
  695. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  696. package/lib/esm/test/standalone/SnapshotDb.test.js +3 -1
  697. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  698. package/lib/esm/test/standalone/StandaloneDb.test.js +27 -26
  699. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  700. package/lib/esm/test/standalone/Texture.test.js +5 -4
  701. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  702. package/lib/esm/test/standalone/TileCache.test.d.ts.map +1 -1
  703. package/lib/esm/test/standalone/TileCache.test.js +5 -3
  704. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  705. package/lib/esm/test/standalone/TileTree.test.js +35 -31
  706. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  707. package/lib/esm/test/standalone/TxnManager.test.js +700 -653
  708. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  709. package/lib/esm/test/standalone/ViewDefinition.test.js +295 -229
  710. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  711. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  712. package/lib/esm/test/standalone/Workspace.test.js +72 -22
  713. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  714. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  715. package/lib/esm/test/workspace/SettingsDb.test.js +28 -456
  716. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  717. package/lib/esm/workspace/Settings.d.ts +11 -5
  718. package/lib/esm/workspace/Settings.d.ts.map +1 -1
  719. package/lib/esm/workspace/Settings.js.map +1 -1
  720. package/lib/esm/workspace/SettingsDb.d.ts +20 -99
  721. package/lib/esm/workspace/SettingsDb.d.ts.map +1 -1
  722. package/lib/esm/workspace/SettingsDb.js +20 -6
  723. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  724. package/lib/esm/workspace/SettingsEditor.d.ts +40 -226
  725. package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -1
  726. package/lib/esm/workspace/SettingsEditor.js +85 -24
  727. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  728. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  729. package/lib/esm/workspace/Workspace.d.ts +7 -11
  730. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  731. package/lib/esm/workspace/Workspace.js.map +1 -1
  732. package/lib/esm/workspace/WorkspaceEditor.d.ts +14 -0
  733. package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
  734. package/lib/esm/workspace/WorkspaceEditor.js +1 -1
  735. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  736. package/package.json +14 -14
  737. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts +0 -38
  738. package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts.map +0 -1
  739. package/lib/cjs/internal/workspace/SettingsDbImpl.js +0 -108
  740. package/lib/cjs/internal/workspace/SettingsDbImpl.js.map +0 -1
  741. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts +0 -14
  742. package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts.map +0 -1
  743. package/lib/cjs/internal/workspace/SettingsSqliteDb.js +0 -40
  744. package/lib/cjs/internal/workspace/SettingsSqliteDb.js.map +0 -1
  745. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts +0 -38
  746. package/lib/esm/internal/workspace/SettingsDbImpl.d.ts.map +0 -1
  747. package/lib/esm/internal/workspace/SettingsDbImpl.js +0 -104
  748. package/lib/esm/internal/workspace/SettingsDbImpl.js.map +0 -1
  749. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts +0 -14
  750. package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts.map +0 -1
  751. package/lib/esm/internal/workspace/SettingsSqliteDb.js +0 -36
  752. package/lib/esm/internal/workspace/SettingsSqliteDb.js.map +0 -1
@@ -1,12 +1,13 @@
1
1
  /** @packageDocumentation
2
2
  * @module Elements
3
3
  */
4
- import { RelatedElement, RelationshipProps, TextBlock } from "@itwin/core-common";
5
- import { ElementDrivesElement } from "../Relationship";
6
- import { IModelDb } from "../IModelDb";
7
- import { Element } from "../Element";
8
4
  import { Id64String } from "@itwin/core-bentley";
5
+ import { RelatedElement, TextBlock } from "@itwin/core-common";
6
+ import { Element } from "../Element";
7
+ import { IModelDb } from "../IModelDb";
9
8
  import { IModelElementCloneContext } from "../IModelElementCloneContext";
9
+ import { ElementDrivesElement, OnDependencyArg } from "../Relationship";
10
+ import { EditTxn } from "../EditTxn";
10
11
  /** Describes one of potentially many [TextBlock]($common)s hosted by an [[ITextAnnotation]].
11
12
  * For example, a [[TextAnnotation2d]] hosts only a single text block, but an element representing a table may
12
13
  * host one text block for each cell in the table, in which case it might use the combination of row and column
@@ -55,10 +56,11 @@ export interface EvaluateFieldsArgs {
55
56
  */
56
57
  export declare class ElementDrivesTextAnnotation extends ElementDrivesElement {
57
58
  static get className(): string;
59
+ private static updateFieldDependenciesImpl;
58
60
  /** @internal */
59
- static onRootChanged(props: RelationshipProps, iModel: IModelDb): void;
61
+ static onRootChangedArg(arg: OnDependencyArg): void;
60
62
  /** @internal */
61
- static onDeletedDependency(props: RelationshipProps, iModel: IModelDb): void;
63
+ static onDeletedDependencyArg(arg: OnDependencyArg): void;
62
64
  /** Returns true if `iModel` contains a version of the BisCore schema new enough to support this relationship.
63
65
  * If not, the schema should be updated before inserting any [FieldRun]($common)s, or those runs will not
64
66
  * update when the source element changes.
@@ -67,8 +69,14 @@ export declare class ElementDrivesTextAnnotation extends ElementDrivesElement {
67
69
  /** Examines all of the [FieldRun]($common)s within the specified [[ITextAnnotation]] and ensures that the appropriate
68
70
  * `ElementDrivesTextAnnotation` relationships exist between the fields' source elements and this target element.
69
71
  * It also deletes any stale relationships left over from fields that were deleted or whose source elements changed.
72
+ * @deprecated Use ElementDrivesTextAnnotation.updateFieldDependencies(txn, ...) instead.
70
73
  */
71
74
  static updateFieldDependencies(annotationElementId: Id64String, iModel: IModelDb): void;
75
+ /** Examines all of the [FieldRun]($common)s within the specified [[ITextAnnotation]] and ensures that the appropriate
76
+ * `ElementDrivesTextAnnotation` relationships exist between the fields' source elements and this target element.
77
+ * It also deletes any stale relationships left over from fields that were deleted or whose source elements changed.
78
+ */
79
+ static updateFieldDependencies(txn: EditTxn, annotationElementId: Id64String): void;
72
80
  /** Recompute the display strings of all [FieldRun]($common)s in a [TextBlock]($common).
73
81
  * @returns the number of fields whose display strings were modified.
74
82
  * @throws Error if evaluation of any field fails.
@@ -1 +1 @@
1
- {"version":3,"file":"ElementDrivesTextAnnotation.d.ts","sourceRoot":"","sources":["../../../src/annotations/ElementDrivesTextAnnotation.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAA8B,MAAM,oBAAoB,CAAC;AAC9G,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAkB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAEzE;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,sBAAsB;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,gIAAgI;IAChI,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;CACtB;AAKD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,oCAAoC,CAAC;IACxD,sFAAsF;IACtF,aAAa,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC1C,mGAAmG;IACnG,gBAAgB,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;CACtD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,eAAe,GAAG,OAAO,CAExF;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,KAAK,EAAE,SAAS,CAAC;IACjB,oGAAoG;IACpG,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,qBAAa,2BAA4B,SAAQ,oBAAoB;IACnE,WAA2B,SAAS,IAAI,MAAM,CAA0C;IAExF,gBAAgB;WACO,aAAa,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI;IAItF,gBAAgB;WACO,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI;IAI5F;;;OAGG;WACW,oBAAoB,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO;IAI7D;;;OAGG;WACW,uBAAuB,CAAC,mBAAmB,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI;IAqE9F;;;OAGG;WACW,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM;IAI9D;;;OAGG;WACW,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,yBAAyB,GAAG,IAAI;CAwB5F;AAED;;GAEG;AACH,qBAAa,oCAAqC,SAAQ,cAAc;IACtE,OAAc,aAAa,SAAkD;gBAC1D,qBAAqB,EAAE,UAAU,EAAE,YAAY,GAAE,MAA2D;CAGhI"}
1
+ {"version":3,"file":"ElementDrivesTextAnnotation.d.ts","sourceRoot":"","sources":["../../../src/annotations/ElementDrivesTextAnnotation.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAkB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,SAAS,EAA8B,MAAM,oBAAoB,CAAC;AAE3F,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAGzE,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,sBAAsB;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,gIAAgI;IAChI,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;CACtB;AAKD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,oCAAoC,CAAC;IACxD,sFAAsF;IACtF,aAAa,IAAI,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC1C,mGAAmG;IACnG,gBAAgB,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;CACtD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,eAAe,GAAG,OAAO,CAExF;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,KAAK,EAAE,SAAS,CAAC;IACjB,oGAAoG;IACpG,MAAM,EAAE,QAAQ,CAAC;CAClB;AAED;;;;;;;GAOG;AACH,qBAAa,2BAA4B,SAAQ,oBAAoB;IACnE,WAA2B,SAAS,IAAI,MAAM,CAA0C;IAExF,OAAO,CAAC,MAAM,CAAC,2BAA2B;IAsE1C,gBAAgB;WACO,gBAAgB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAInE,gBAAgB;WACO,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI;IAIzE;;;OAGG;WACW,oBAAoB,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO;IAI7D;;;;OAIG;WACW,uBAAuB,CAAC,mBAAmB,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,GAAG,IAAI;IAE9F;;;OAGG;WACW,uBAAuB,CAAC,GAAG,EAAE,OAAO,EAAE,mBAAmB,EAAE,UAAU,GAAG,IAAI;IAU1F;;;OAGG;WACW,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM;IAI9D;;;OAGG;WACW,WAAW,CAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,yBAAyB,GAAG,IAAI;CAwB5F;AAED;;GAEG;AACH,qBAAa,oCAAqC,SAAQ,cAAc;IACtE,OAAc,aAAa,SAAkD;gBAC1D,qBAAqB,EAAE,UAAU,EAAE,YAAY,GAAE,MAA2D;CAGhI"}
@@ -9,11 +9,13 @@
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.TextAnnotationUsesTextStyleByDefault = exports.ElementDrivesTextAnnotation = void 0;
11
11
  exports.isITextAnnotation = isITextAnnotation;
12
- const core_common_1 = require("@itwin/core-common");
13
- const Relationship_1 = require("../Relationship");
14
- const fields_1 = require("../internal/annotations/fields");
15
12
  const core_bentley_1 = require("@itwin/core-bentley");
13
+ const core_common_1 = require("@itwin/core-common");
16
14
  const ecschema_metadata_1 = require("@itwin/ecschema-metadata");
15
+ const fields_1 = require("../internal/annotations/fields");
16
+ const Symbols_1 = require("../internal/Symbols");
17
+ const Relationship_1 = require("../Relationship");
18
+ const EditTxn_1 = require("../EditTxn");
17
19
  // ElementDrivesTextAnnotation was introduced in this version of BisCore - iModels with earlier versions cannot support field dependencies.
18
20
  const minBisCoreVersion = new ecschema_metadata_1.ECVersion(1, 0, 22);
19
21
  /** Returns `true` if the specified `element` implements [[ITextAnnotation]].
@@ -32,26 +34,8 @@ function isITextAnnotation(element) {
32
34
  */
33
35
  class ElementDrivesTextAnnotation extends Relationship_1.ElementDrivesElement {
34
36
  static get className() { return "ElementDrivesTextAnnotation"; }
35
- /** @internal */
36
- static onRootChanged(props, iModel) {
37
- (0, fields_1.updateElementFields)(props, iModel, false);
38
- }
39
- /** @internal */
40
- static onDeletedDependency(props, iModel) {
41
- (0, fields_1.updateElementFields)(props, iModel, true);
42
- }
43
- /** Returns true if `iModel` contains a version of the BisCore schema new enough to support this relationship.
44
- * If not, the schema should be updated before inserting any [FieldRun]($common)s, or those runs will not
45
- * update when the source element changes.
46
- */
47
- static isSupportedForIModel(iModel) {
48
- return iModel.meetsMinimumSchemaVersion("BisCore", minBisCoreVersion);
49
- }
50
- /** Examines all of the [FieldRun]($common)s within the specified [[ITextAnnotation]] and ensures that the appropriate
51
- * `ElementDrivesTextAnnotation` relationships exist between the fields' source elements and this target element.
52
- * It also deletes any stale relationships left over from fields that were deleted or whose source elements changed.
53
- */
54
- static updateFieldDependencies(annotationElementId, iModel) {
37
+ static updateFieldDependenciesImpl(txn, annotationElementId) {
38
+ const iModel = txn.iModel;
55
39
  const annotationElement = iModel.elements.tryGetElement(annotationElementId);
56
40
  if (!annotationElement || !isITextAnnotation(annotationElement)) {
57
41
  return;
@@ -82,7 +66,7 @@ class ElementDrivesTextAnnotation extends Relationship_1.ElementDrivesElement {
82
66
  }
83
67
  if (haveFields) {
84
68
  iModel.requireMinimumSchemaVersion("BisCore", minBisCoreVersion, "Text fields");
85
- (0, fields_1.updateAllFields)(annotationElementId, iModel);
69
+ (0, fields_1.updateAllFields)(annotationElementId, txn);
86
70
  }
87
71
  const staleRelationships = new Set();
88
72
  if (this.isSupportedForIModel(iModel)) {
@@ -102,13 +86,35 @@ class ElementDrivesTextAnnotation extends Relationship_1.ElementDrivesElement {
102
86
  }
103
87
  for (const [sourceId, relationshipId] of sourceToRelationship) {
104
88
  if (relationshipId === null) {
105
- ElementDrivesTextAnnotation.create(annotationElement.iModel, sourceId, annotationElement.id).insert();
89
+ txn.insertRelationship(ElementDrivesTextAnnotation.create(annotationElement.iModel, sourceId, annotationElement.id).toJSON());
106
90
  }
107
91
  }
108
92
  if (staleRelationships.size > 0) {
109
- const staleRelationshipProps = Array.from(staleRelationships).map(relationshipId => annotationElement.iModel.relationships.getInstanceProps("BisCore.ElementDrivesTextAnnotation", relationshipId));
110
- annotationElement.iModel.relationships.deleteInstances(staleRelationshipProps);
93
+ const staleRelationshipProps = Array.from(staleRelationships).map((relationshipId) => annotationElement.iModel.relationships.getInstanceProps("BisCore.ElementDrivesTextAnnotation", relationshipId));
94
+ txn.deleteRelationships(staleRelationshipProps);
95
+ }
96
+ }
97
+ /** @internal */
98
+ static onRootChangedArg(arg) {
99
+ (0, fields_1.updateElementFields)(arg.props, arg.indirectEditTxn, false);
100
+ }
101
+ /** @internal */
102
+ static onDeletedDependencyArg(arg) {
103
+ (0, fields_1.updateElementFields)(arg.props, arg.indirectEditTxn, true);
104
+ }
105
+ /** Returns true if `iModel` contains a version of the BisCore schema new enough to support this relationship.
106
+ * If not, the schema should be updated before inserting any [FieldRun]($common)s, or those runs will not
107
+ * update when the source element changes.
108
+ */
109
+ static isSupportedForIModel(iModel) {
110
+ return iModel.meetsMinimumSchemaVersion("BisCore", minBisCoreVersion);
111
+ }
112
+ static updateFieldDependencies(arg1, arg2) {
113
+ if (arg1 instanceof EditTxn_1.EditTxn) {
114
+ this.updateFieldDependenciesImpl(arg1, arg2);
115
+ return;
111
116
  }
117
+ this.updateFieldDependenciesImpl(arg2[Symbols_1._implicitTxn], arg1);
112
118
  }
113
119
  /** Recompute the display strings of all [FieldRun]($common)s in a [TextBlock]($common).
114
120
  * @returns the number of fields whose display strings were modified.
@@ -1 +1 @@
1
- {"version":3,"file":"ElementDrivesTextAnnotation.js","sourceRoot":"","sources":["../../../src/annotations/ElementDrivesTextAnnotation.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Elements\n */\n\nimport { RelatedElement, RelationshipProps, TextBlock, traverseTextBlockComponent } from \"@itwin/core-common\";\nimport { ElementDrivesElement } from \"../Relationship\";\nimport { IModelDb } from \"../IModelDb\";\nimport { Element } from \"../Element\";\nimport { createUpdateContext, updateAllFields, updateElementFields, updateFields } from \"../internal/annotations/fields\";\nimport { DbResult, Id64, Id64String } from \"@itwin/core-bentley\";\nimport { ECVersion } from \"@itwin/ecschema-metadata\";\nimport { IModelElementCloneContext } from \"../IModelElementCloneContext\";\n\n/** Describes one of potentially many [TextBlock]($common)s hosted by an [[ITextAnnotation]].\n * For example, a [[TextAnnotation2d]] hosts only a single text block, but an element representing a table may\n * host one text block for each cell in the table, in which case it might use the combination of row and column\n * as the [[id]] for each text block.\n * @beta\n */\nexport interface TextBlockAndId {\n /** The text block. */\n readonly textBlock: TextBlock;\n /** An opaque identifier that allows the [[ITextAnnotation]] to discern which of its hosted text blocks is being referred to. */\n readonly id: unknown;\n}\n\n// ElementDrivesTextAnnotation was introduced in this version of BisCore - iModels with earlier versions cannot support field dependencies.\nconst minBisCoreVersion = new ECVersion(1, 0, 22);\n\n/** Interface implemented by [[GeometricElement]] subclasses whose schemas declare them to implement the mix-in `BisCore:ITextAnnotation`.\n * Such elements may host any number of [TextBlock]($common)s. `ITextAnnotation` provides a uniform way to interact with text regardless of\n * the type of element to which it belongs.\n * @beta\n */\nexport interface ITextAnnotation {\n /** The default [[AnnotationTextStyle]] used by the text annotation. */\n defaultTextStyle?: TextAnnotationUsesTextStyleByDefault;\n /** Obtain a collection of all of the [TextBlock]($common)s hosted by this element. */\n getTextBlocks(): Iterable<TextBlockAndId>;\n /** Update the element in-memory to replace the contents of the specified [TextBlock]($common)s. */\n updateTextBlocks(textBlocks: TextBlockAndId[]): void;\n}\n\n/** Returns `true` if the specified `element` implements [[ITextAnnotation]].\n * @beta\n */\nexport function isITextAnnotation(element: Element): element is ITextAnnotation & Element {\n return [\"getTextBlocks\", \"updateTextBlocks\"].every((x) => x in element && typeof (element as any)[x] === \"function\");\n}\n\n/** Arguments supplied to [[ElementDrivesTextAnnotation.evaluateFields]].\n * @beta\n */\nexport interface EvaluateFieldsArgs {\n /** The text block whose fields are to be evaluated. */\n block: TextBlock;\n /** The iModel containing the elements supplying the display strings for the fields in [[block]]. */\n iModel: IModelDb;\n}\n\n/** A relationship in which the source element hosts one or more properties that are displayed by a target [[ITextAnnotation]] element.\n * This relationship is used to automatically update the [FieldRun]($common)s contained in the target element when the source element is modified.\n * An [[ITextAnnotation]] element should invoke [[updateFieldDependencies]] from its [[Element.onInserted]] and [[Element.onUpdated]] functions to\n * establish or update the relationships required for the [FieldRun]($common)s it contains.\n * @note This relationship was introduced in version 01.00.22 of the BisCore schema. [FieldRun]($common)s created in iModels that have not been upgraded to\n * that version or newer will not automatically update. Use [[isSupportedForIModel]] to check.\n * @beta\n */\nexport class ElementDrivesTextAnnotation extends ElementDrivesElement {\n public static override get className(): string { return \"ElementDrivesTextAnnotation\"; }\n\n /** @internal */\n public static override onRootChanged(props: RelationshipProps, iModel: IModelDb): void {\n updateElementFields(props, iModel, false);\n }\n\n /** @internal */\n public static override onDeletedDependency(props: RelationshipProps, iModel: IModelDb): void {\n updateElementFields(props, iModel, true);\n }\n\n /** Returns true if `iModel` contains a version of the BisCore schema new enough to support this relationship.\n * If not, the schema should be updated before inserting any [FieldRun]($common)s, or those runs will not\n * update when the source element changes.\n */\n public static isSupportedForIModel(iModel: IModelDb): boolean {\n return iModel.meetsMinimumSchemaVersion(\"BisCore\", minBisCoreVersion);\n }\n\n /** Examines all of the [FieldRun]($common)s within the specified [[ITextAnnotation]] and ensures that the appropriate\n * `ElementDrivesTextAnnotation` relationships exist between the fields' source elements and this target element.\n * It also deletes any stale relationships left over from fields that were deleted or whose source elements changed.\n */\n public static updateFieldDependencies(annotationElementId: Id64String, iModel: IModelDb): void {\n const annotationElement = iModel.elements.tryGetElement<Element>(annotationElementId);\n if (!annotationElement || !isITextAnnotation(annotationElement)) {\n return;\n }\n\n // The native layer will allow us to insert relationships to invalid or non-existent source elements...errors will arise later. Prevent it.\n function isValidSourceId(id: Id64String): boolean {\n if (!Id64.isValidId64(id)) {\n return false;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return iModel.withPreparedStatement(\"SELECT CodeValue FROM BisCore.Element WHERE ECInstanceId=?\", (stmt) => {\n stmt.bindId(1, id);\n return DbResult.BE_SQLITE_ROW === stmt.step();\n });\n }\n\n const sourceToRelationship = new Map<Id64String, Id64String | null>();\n const blocks = annotationElement.getTextBlocks();\n\n let haveFields = false;\n for (const block of blocks) {\n for (const { child } of traverseTextBlockComponent(block.textBlock)) {\n if (child.type === \"field\") {\n haveFields = true;\n if (isValidSourceId(child.propertyHost.elementId)) {\n sourceToRelationship.set(child.propertyHost.elementId, null);\n }\n }\n }\n }\n\n if (haveFields) {\n iModel.requireMinimumSchemaVersion(\"BisCore\", minBisCoreVersion, \"Text fields\");\n updateAllFields(annotationElementId, iModel)\n }\n\n const staleRelationships = new Set<Id64String>();\n if (this.isSupportedForIModel(iModel)) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n annotationElement.iModel.withPreparedStatement(`SELECT ECInstanceId, SourceECInstanceId FROM BisCore.ElementDrivesTextAnnotation WHERE TargetECInstanceId=${annotationElement.id}`, (stmt) => {\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\n const relationshipId = stmt.getValue(0).getId();\n const sourceId = stmt.getValue(1).getId();\n if (sourceToRelationship.has(sourceId)) {\n sourceToRelationship.set(sourceId, relationshipId);\n } else {\n staleRelationships.add(relationshipId);\n }\n }\n });\n }\n\n for (const [sourceId, relationshipId] of sourceToRelationship) {\n if (relationshipId === null) {\n ElementDrivesTextAnnotation.create(annotationElement.iModel, sourceId, annotationElement.id).insert();\n }\n }\n\n if (staleRelationships.size > 0) {\n const staleRelationshipProps = Array.from(staleRelationships).map(relationshipId =>\n annotationElement.iModel.relationships.getInstanceProps(\"BisCore.ElementDrivesTextAnnotation\", relationshipId)\n );\n annotationElement.iModel.relationships.deleteInstances(staleRelationshipProps);\n }\n }\n\n /** Recompute the display strings of all [FieldRun]($common)s in a [TextBlock]($common).\n * @returns the number of fields whose display strings were modified.\n * @throws Error if evaluation of any field fails.\n */\n public static evaluateFields(args: EvaluateFieldsArgs): number {\n return updateFields(args.block, createUpdateContext(undefined, args.iModel, false))\n }\n\n /** When copying an [[ITextAnnotation]] from one iModel into another, remaps the element Ids in any [FieldPropertyHost]($common) within the cloned element\n * so that they refer to elements in the `context`'s target iModel, and sets any Ids that cannot be remapped to [Id64.invalid]($bentley).\n * Implementations of `ITextAnnotation` should invoke this function from their implementations of [[Element.onCloned]].\n */\n public static remapFields(clone: ITextAnnotation, context: IModelElementCloneContext): void {\n if (!context.isBetweenIModels) {\n return;\n }\n\n const updatedBlocks = [];\n for (const block of clone.getTextBlocks()) {\n let anyUpdated = false;\n for (const { child } of traverseTextBlockComponent(block.textBlock)) {\n if (child.type === \"field\") {\n child.propertyHost.elementId = context.findTargetElementId(child.propertyHost.elementId);\n anyUpdated = true;\n }\n }\n\n if (anyUpdated) {\n updatedBlocks.push(block);\n }\n }\n\n if (updatedBlocks.length > 0) {\n clone.updateTextBlocks(updatedBlocks);\n }\n }\n}\n\n/** Relationship indicating that the [[AnnotationTextStyle]] is being used as the default style for the [[ITextAnnotation]].\n * @beta\n */\nexport class TextAnnotationUsesTextStyleByDefault extends RelatedElement {\n public static classFullName = \"BisCore:TextAnnotationUsesTextStyleByDefault\";\n public constructor(annotationTextStyleId: Id64String, relClassName: string = TextAnnotationUsesTextStyleByDefault.classFullName) {\n super({ id: annotationTextStyleId, relClassName });\n }\n}\n"]}
1
+ {"version":3,"file":"ElementDrivesTextAnnotation.js","sourceRoot":"","sources":["../../../src/annotations/ElementDrivesTextAnnotation.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 Elements\r\n */\r\n\r\nimport { DbResult, Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { RelatedElement, TextBlock, traverseTextBlockComponent } from \"@itwin/core-common\";\r\nimport { ECVersion } from \"@itwin/ecschema-metadata\";\r\nimport { Element } from \"../Element\";\r\nimport { IModelDb } from \"../IModelDb\";\r\nimport { IModelElementCloneContext } from \"../IModelElementCloneContext\";\r\nimport { createUpdateContext, updateAllFields, updateElementFields, updateFields } from \"../internal/annotations/fields\";\r\nimport { _implicitTxn } from \"../internal/Symbols\";\r\nimport { ElementDrivesElement, OnDependencyArg } from \"../Relationship\";\r\nimport { EditTxn } from \"../EditTxn\";\r\n\r\n/** Describes one of potentially many [TextBlock]($common)s hosted by an [[ITextAnnotation]].\r\n * For example, a [[TextAnnotation2d]] hosts only a single text block, but an element representing a table may\r\n * host one text block for each cell in the table, in which case it might use the combination of row and column\r\n * as the [[id]] for each text block.\r\n * @beta\r\n */\r\nexport interface TextBlockAndId {\r\n /** The text block. */\r\n readonly textBlock: TextBlock;\r\n /** An opaque identifier that allows the [[ITextAnnotation]] to discern which of its hosted text blocks is being referred to. */\r\n readonly id: unknown;\r\n}\r\n\r\n// ElementDrivesTextAnnotation was introduced in this version of BisCore - iModels with earlier versions cannot support field dependencies.\r\nconst minBisCoreVersion = new ECVersion(1, 0, 22);\r\n\r\n/** Interface implemented by [[GeometricElement]] subclasses whose schemas declare them to implement the mix-in `BisCore:ITextAnnotation`.\r\n * Such elements may host any number of [TextBlock]($common)s. `ITextAnnotation` provides a uniform way to interact with text regardless of\r\n * the type of element to which it belongs.\r\n * @beta\r\n */\r\nexport interface ITextAnnotation {\r\n /** The default [[AnnotationTextStyle]] used by the text annotation. */\r\n defaultTextStyle?: TextAnnotationUsesTextStyleByDefault;\r\n /** Obtain a collection of all of the [TextBlock]($common)s hosted by this element. */\r\n getTextBlocks(): Iterable<TextBlockAndId>;\r\n /** Update the element in-memory to replace the contents of the specified [TextBlock]($common)s. */\r\n updateTextBlocks(textBlocks: TextBlockAndId[]): void;\r\n}\r\n\r\n/** Returns `true` if the specified `element` implements [[ITextAnnotation]].\r\n * @beta\r\n */\r\nexport function isITextAnnotation(element: Element): element is ITextAnnotation & Element {\r\n return [\"getTextBlocks\", \"updateTextBlocks\"].every((x) => x in element && typeof (element as any)[x] === \"function\");\r\n}\r\n\r\n/** Arguments supplied to [[ElementDrivesTextAnnotation.evaluateFields]].\r\n * @beta\r\n */\r\nexport interface EvaluateFieldsArgs {\r\n /** The text block whose fields are to be evaluated. */\r\n block: TextBlock;\r\n /** The iModel containing the elements supplying the display strings for the fields in [[block]]. */\r\n iModel: IModelDb;\r\n}\r\n\r\n/** A relationship in which the source element hosts one or more properties that are displayed by a target [[ITextAnnotation]] element.\r\n * This relationship is used to automatically update the [FieldRun]($common)s contained in the target element when the source element is modified.\r\n * An [[ITextAnnotation]] element should invoke [[updateFieldDependencies]] from its [[Element.onInserted]] and [[Element.onUpdated]] functions to\r\n * establish or update the relationships required for the [FieldRun]($common)s it contains.\r\n * @note This relationship was introduced in version 01.00.22 of the BisCore schema. [FieldRun]($common)s created in iModels that have not been upgraded to\r\n * that version or newer will not automatically update. Use [[isSupportedForIModel]] to check.\r\n * @beta\r\n */\r\nexport class ElementDrivesTextAnnotation extends ElementDrivesElement {\r\n public static override get className(): string { return \"ElementDrivesTextAnnotation\"; }\r\n\r\n private static updateFieldDependenciesImpl(txn: EditTxn, annotationElementId: Id64String): void {\r\n const iModel = txn.iModel;\r\n const annotationElement = iModel.elements.tryGetElement<Element>(annotationElementId);\r\n if (!annotationElement || !isITextAnnotation(annotationElement)) {\r\n return;\r\n }\r\n\r\n // The native layer will allow us to insert relationships to invalid or non-existent source elements...errors will arise later. Prevent it.\r\n function isValidSourceId(id: Id64String): boolean {\r\n if (!Id64.isValidId64(id)) {\r\n return false;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return iModel.withPreparedStatement(\"SELECT CodeValue FROM BisCore.Element WHERE ECInstanceId=?\", (stmt) => {\r\n stmt.bindId(1, id);\r\n return DbResult.BE_SQLITE_ROW === stmt.step();\r\n });\r\n }\r\n\r\n const sourceToRelationship = new Map<Id64String, Id64String | null>();\r\n const blocks = annotationElement.getTextBlocks();\r\n\r\n let haveFields = false;\r\n for (const block of blocks) {\r\n for (const { child } of traverseTextBlockComponent(block.textBlock)) {\r\n if (child.type === \"field\") {\r\n haveFields = true;\r\n if (isValidSourceId(child.propertyHost.elementId)) {\r\n sourceToRelationship.set(child.propertyHost.elementId, null);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (haveFields) {\r\n iModel.requireMinimumSchemaVersion(\"BisCore\", minBisCoreVersion, \"Text fields\");\r\n updateAllFields(annotationElementId, txn);\r\n }\r\n\r\n const staleRelationships = new Set<Id64String>();\r\n if (this.isSupportedForIModel(iModel)) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n annotationElement.iModel.withPreparedStatement(`SELECT ECInstanceId, SourceECInstanceId FROM BisCore.ElementDrivesTextAnnotation WHERE TargetECInstanceId=${annotationElement.id}`, (stmt) => {\r\n while (DbResult.BE_SQLITE_ROW === stmt.step()) {\r\n const relationshipId = stmt.getValue(0).getId();\r\n const sourceId = stmt.getValue(1).getId();\r\n if (sourceToRelationship.has(sourceId)) {\r\n sourceToRelationship.set(sourceId, relationshipId);\r\n } else {\r\n staleRelationships.add(relationshipId);\r\n }\r\n }\r\n });\r\n }\r\n\r\n for (const [sourceId, relationshipId] of sourceToRelationship) {\r\n if (relationshipId === null) {\r\n txn.insertRelationship(ElementDrivesTextAnnotation.create(annotationElement.iModel, sourceId, annotationElement.id).toJSON());\r\n }\r\n }\r\n\r\n if (staleRelationships.size > 0) {\r\n const staleRelationshipProps = Array.from(staleRelationships).map((relationshipId) =>\r\n annotationElement.iModel.relationships.getInstanceProps(\"BisCore.ElementDrivesTextAnnotation\", relationshipId)\r\n );\r\n txn.deleteRelationships(staleRelationshipProps);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public static override onRootChangedArg(arg: OnDependencyArg): void {\r\n updateElementFields(arg.props, arg.indirectEditTxn, false);\r\n }\r\n\r\n /** @internal */\r\n public static override onDeletedDependencyArg(arg: OnDependencyArg): void {\r\n updateElementFields(arg.props, arg.indirectEditTxn, true);\r\n }\r\n\r\n /** Returns true if `iModel` contains a version of the BisCore schema new enough to support this relationship.\r\n * If not, the schema should be updated before inserting any [FieldRun]($common)s, or those runs will not\r\n * update when the source element changes.\r\n */\r\n public static isSupportedForIModel(iModel: IModelDb): boolean {\r\n return iModel.meetsMinimumSchemaVersion(\"BisCore\", minBisCoreVersion);\r\n }\r\n\r\n /** Examines all of the [FieldRun]($common)s within the specified [[ITextAnnotation]] and ensures that the appropriate\r\n * `ElementDrivesTextAnnotation` relationships exist between the fields' source elements and this target element.\r\n * It also deletes any stale relationships left over from fields that were deleted or whose source elements changed.\r\n * @deprecated Use ElementDrivesTextAnnotation.updateFieldDependencies(txn, ...) instead.\r\n */\r\n public static updateFieldDependencies(annotationElementId: Id64String, iModel: IModelDb): void;\r\n\r\n /** Examines all of the [FieldRun]($common)s within the specified [[ITextAnnotation]] and ensures that the appropriate\r\n * `ElementDrivesTextAnnotation` relationships exist between the fields' source elements and this target element.\r\n * It also deletes any stale relationships left over from fields that were deleted or whose source elements changed.\r\n */\r\n public static updateFieldDependencies(txn: EditTxn, annotationElementId: Id64String): void;\r\n public static updateFieldDependencies(arg1: EditTxn | Id64String, arg2: Id64String | IModelDb): void {\r\n if (arg1 instanceof EditTxn) {\r\n this.updateFieldDependenciesImpl(arg1, arg2 as Id64String);\r\n return;\r\n }\r\n\r\n this.updateFieldDependenciesImpl((arg2 as IModelDb)[_implicitTxn], arg1);\r\n }\r\n\r\n /** Recompute the display strings of all [FieldRun]($common)s in a [TextBlock]($common).\r\n * @returns the number of fields whose display strings were modified.\r\n * @throws Error if evaluation of any field fails.\r\n */\r\n public static evaluateFields(args: EvaluateFieldsArgs): number {\r\n return updateFields(args.block, createUpdateContext(undefined, args.iModel, false))\r\n }\r\n\r\n /** When copying an [[ITextAnnotation]] from one iModel into another, remaps the element Ids in any [FieldPropertyHost]($common) within the cloned element\r\n * so that they refer to elements in the `context`'s target iModel, and sets any Ids that cannot be remapped to [Id64.invalid]($bentley).\r\n * Implementations of `ITextAnnotation` should invoke this function from their implementations of [[Element.onCloned]].\r\n */\r\n public static remapFields(clone: ITextAnnotation, context: IModelElementCloneContext): void {\r\n if (!context.isBetweenIModels) {\r\n return;\r\n }\r\n\r\n const updatedBlocks = [];\r\n for (const block of clone.getTextBlocks()) {\r\n let anyUpdated = false;\r\n for (const { child } of traverseTextBlockComponent(block.textBlock)) {\r\n if (child.type === \"field\") {\r\n child.propertyHost.elementId = context.findTargetElementId(child.propertyHost.elementId);\r\n anyUpdated = true;\r\n }\r\n }\r\n\r\n if (anyUpdated) {\r\n updatedBlocks.push(block);\r\n }\r\n }\r\n\r\n if (updatedBlocks.length > 0) {\r\n clone.updateTextBlocks(updatedBlocks);\r\n }\r\n }\r\n}\r\n\r\n/** Relationship indicating that the [[AnnotationTextStyle]] is being used as the default style for the [[ITextAnnotation]].\r\n * @beta\r\n */\r\nexport class TextAnnotationUsesTextStyleByDefault extends RelatedElement {\r\n public static classFullName = \"BisCore:TextAnnotationUsesTextStyleByDefault\";\r\n public constructor(annotationTextStyleId: Id64String, relClassName: string = TextAnnotationUsesTextStyleByDefault.classFullName) {\r\n super({ id: annotationTextStyleId, relClassName });\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"FrameGeometry.js","sourceRoot":"","sources":["../../../src/annotations/FrameGeometry.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module ElementGeometry\n */\n\n\nimport { BackgroundFill, ColorDef, ElementGeometry, FillDisplay, GeometryParams, TextAnnotationFrameShape, TextFrameStyleProps } from \"@itwin/core-common\";\nimport { Angle, AngleSweep, Arc3d, LineString3d, Loop, Path, Point3d, Range2d, Transform, Vector2d } from \"@itwin/core-geometry\";\n\n/**\n * Based on the frame style, this method will construct and append [[GeometryParams]] (for line style) and a [[Loop]] (for the frame shape) to the builder.\n * @param builder that will be appended to in place\n * @param frame\n * @param range to enclose with the frame\n * @param transform that transforms the range to world coordinates\n * @returns `true` if any geometry was appended to the builder\n* @beta\n */\nexport function appendFrameToBuilder(builder: ElementGeometry.Builder, frame: TextFrameStyleProps, range: Range2d, transform: Transform, geomParams: GeometryParams): boolean {\n if (frame.shape === \"none\" || frame.shape === undefined) {\n return false;\n }\n\n const params = geomParams.clone();\n\n if (frame.fillColor === \"none\" || frame.fillColor === undefined) {\n params.fillDisplay = FillDisplay.Never;\n } else if (frame.fillColor === \"background\") {\n params.backgroundFill = BackgroundFill.Solid;\n params.fillDisplay = FillDisplay.Blanking;\n } else if (frame.fillColor !== \"subcategory\") {\n params.fillColor = ColorDef.fromJSON(frame.fillColor);\n params.lineColor = params.fillColor;\n params.fillDisplay = FillDisplay.Blanking;\n }\n\n if (frame.borderColor !== \"subcategory\") {\n params.lineColor = ColorDef.fromJSON(frame.borderColor);\n params.weight = frame.borderWeight;\n }\n\n const frameGeometry = computeFrame({ frame: frame.shape, range, transform });\n if (!builder.appendGeometryParamsChange(params) || !builder.appendGeometryQuery(frameGeometry)) {\n return false;\n }\n\n // The tile generator does not produce an outline for shapes with blanking fill. We must add the outline separately.\n if (params.fillDisplay === FillDisplay.Blanking) {\n const outlineParams = params.clone();\n outlineParams.fillDisplay = FillDisplay.Never;\n if (!builder.appendGeometryParamsChange(outlineParams) || !builder.appendGeometryQuery(frameGeometry)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Arguments for the [[computeFrame]] method.\n * @beta\n */\nexport interface ComputeFrameArgs {\n /** Frame shape to be calculated */\n frame: Exclude<TextAnnotationFrameShape, \"none\">;\n /** Range to be enclosed */\n range: Range2d;\n /** Transform that translates and rotates the range to world coordinates */\n transform: Transform;\n}\n\n/**\n * Computes the frame geometry based on the provided frame shape and range.\n * @returns a [Loop]($geometry) or [Path]($geometry) (if it's just a line) that represents the frame geometry\n * @beta\n */\nexport function computeFrame(args: ComputeFrameArgs): Loop | Path {\n switch (args.frame) {\n case \"line\": return computeLine(args.range, args.transform);\n case \"rectangle\": return computeRectangle(args.range, args.transform);\n case \"circle\": return computeCircle(args.range, args.transform);\n case \"equilateralTriangle\": return computeTriangle(args.range, args.transform);\n case \"diamond\": return computeDiamond(args.range, args.transform);\n case \"square\": return computeSquare(args.range, args.transform);\n case \"pentagon\": return computePolygon(5, args.range, args.transform, 90);\n case \"hexagon\": return computePolygon(6, args.range, args.transform);\n case \"octagon\": return computePolygon(8, args.range, args.transform, 180 / 8); // or pi/8 in radians\n case \"capsule\": return computeCapsule(args.range, args.transform);\n case \"roundedRectangle\": return computeRoundedRectangle(args.range, args.transform);\n default: return computeRectangle(args.range, args.transform);\n }\n}\n\n/**\n * Arguments for the [[computeIntervalPoints]] method.\n * @beta\n */\nexport interface ComputeIntervalPointsArgs extends ComputeFrameArgs {\n /** A factor applied to divide each straight edge. A value of 1 will place a single point on each vertex. */\n lineIntervalFactor?: number;\n /** A factor applied to divide each straight edge. A value of 1 will place a single point on each vertex. */\n arcIntervalFactor?: number;\n}\n\n/**\n * Computes points along the edges of the frame geometry based on the provided frame shape, range, and interval factors.\n * These can be used for snapping or attaching leaders.\n * @returns an array of [[Point3d]] that represent the points along the edges of the frame geometry. Returns `undefined` if the loop created by `computeFrame` is empty.\n * @beta\n */\nexport function computeIntervalPoints({ frame, range, transform, lineIntervalFactor = 0.5, arcIntervalFactor = 0.25 }: ComputeIntervalPointsArgs): Point3d[] | undefined {\n const points: Point3d[] = [];\n const curves = computeFrame({ frame, range, transform }).collectCurvePrimitives(undefined, false, true);\n\n curves.forEach((curve) => {\n const end = curve instanceof Arc3d ? arcIntervalFactor : lineIntervalFactor;\n for (let interval = 0; interval <= 1; interval += end) {\n points.push(curve.fractionToPoint(interval));\n }\n });\n return points;\n}\n\n/** Line - currently just adds an underline. Once we have leaders, this method may change. */\nconst computeLine = (range: Range2d, transform: Transform): Path => {\n const points = [Point3d.create(range.low.x, range.low.y), Point3d.create(range.high.x, range.low.y)];\n const frame = LineString3d.createPoints(points);\n\n return Path.create(frame.cloneTransformed(transform));\n}\n\n/** Rectangle - simplest frame */\nconst computeRectangle = (range: Range2d, transform: Transform): Loop => {\n const points = range.corners3d(true);\n const frame = LineString3d.createPoints(points);\n\n return Loop.create(frame.cloneTransformed(transform));\n}\n\n/** Rounded Rectangle: each corner will be turned into an arc with the radius of the arc being the @param radiusFactor * the height (yLength) of the range */\nconst computeRoundedRectangle = (range: Range2d, transform: Transform, radiusFactor: number = 0.25): Loop => {\n const radius = range.yLength() * radiusFactor * Math.sqrt(2);\n // We're going to circumscribe the range with our rounded edges. The corners of the range will fall on 45 degree angles.\n const radiusOffsetFactor = range.yLength() * radiusFactor;\n\n // These values are the origins of the circles\n const inLeft = range.low.x + radiusOffsetFactor;\n const inRight = range.high.x - radiusOffsetFactor;\n const inBottom = range.low.y + radiusOffsetFactor;\n const inTop = range.high.y - radiusOffsetFactor\n\n // These values exist on the circles\n const exLeft = inLeft - radius;\n const exRight = inRight + radius;\n const exBottom = inBottom - radius;\n const exTop = inTop + radius;\n\n const q1 = AngleSweep.createStartEndDegrees(0, 90);\n const q2 = AngleSweep.createStartEndDegrees(90, 180);\n const q3 = AngleSweep.createStartEndDegrees(180, 270);\n const q4 = AngleSweep.createStartEndDegrees(270, 360);\n\n\n const curves = [\n LineString3d.create([Point3d.create(inRight, exTop), Point3d.create(inLeft, exTop)]), // top\n Arc3d.createXY(Point3d.create(inLeft, inTop), radius, q2), // top left\n LineString3d.create([Point3d.create(exLeft, inTop), Point3d.create(exLeft, inBottom)]), // left\n Arc3d.createXY(Point3d.create(inLeft, inBottom), radius, q3), // bottom left\n LineString3d.create([Point3d.create(inLeft, exBottom), Point3d.create(inRight, exBottom)]), // bottom\n Arc3d.createXY(Point3d.create(inRight, inBottom), radius, q4), // bottom right\n LineString3d.create([Point3d.create(exRight, inBottom), Point3d.create(exRight, inTop)]), // right\n Arc3d.createXY(Point3d.create(inRight, inTop), radius, q1), // top right\n ];\n\n return Loop.createArray(curves.map((curve) => curve.cloneTransformed(transform)))\n}\n\n\n/** Circle */\nconst computeCircle = (range: Range2d, transform: Transform): Loop => {\n const radius = range.low.distance(range.high) / 2;\n const frame = Arc3d.createXY(Point3d.createFrom(range.center), radius);\n return Loop.create(frame.cloneTransformed(transform));\n}\n\n/** Equilateral Triangle */\nconst computeTriangle = (range: Range2d, transform: Transform): Loop => {\n\n const xLength = range.xLength();\n const yLength = range.yLength();\n const center = range.center;\n const points: Point3d[] = [];\n\n const magnitude = (xLength > yLength) ? (xLength * Math.sqrt(3) + yLength) / 2 : (yLength * Math.sqrt(3) + xLength) / 2;\n\n const v1 = Vector2d.create(0, magnitude);\n const vectors = [\n v1, // top\n v1.rotateXY(Angle.createDegrees(120)), // left\n v1.rotateXY(Angle.createDegrees(240)), // right\n v1 // top\n ];\n\n vectors.forEach((v) => {\n points.push(Point3d.create(center.x + v.x, center.y + v.y));\n });\n\n const frame = LineString3d.createPoints(points);\n\n return Loop.create(frame.cloneTransformed(transform));\n}\n\n/** Diamond (square rotated 45 degrees) */\nconst computeDiamond = (range: Range2d, transform: Transform): Loop => {\n const offset = (range.xLength() + range.yLength()) / 2;\n const center = range.center;\n\n const points = [\n Point3d.createFrom({ x: center.x, y: center.y + offset }), // top\n Point3d.createFrom({ x: center.x + offset, y: center.y }), // right\n Point3d.createFrom({ x: center.x, y: center.y - offset }), // bottom\n Point3d.createFrom({ x: center.x - offset, y: center.y }), // left\n Point3d.createFrom({ x: center.x, y: center.y + offset }), // top\n ];\n\n const frame = LineString3d.createPoints(points);\n\n return Loop.create(frame.cloneTransformed(transform));\n}\n\n/** Square */\nconst computeSquare = (range: Range2d, transform: Transform): Loop => {\n\n // Extend range\n const xLength = range.xLength() / 2;\n const yLength = range.yLength() / 2;\n const center = range.center;\n if (xLength > yLength) {\n range.extendPoint({ x: center.x, y: center.y + xLength });\n range.extendPoint({ x: center.x, y: center.y - xLength });\n } else {\n range.extendPoint({ x: center.x + yLength, y: center.y });\n range.extendPoint({ x: center.x - yLength, y: center.y });\n }\n\n const points = range.corners3d(true);\n const frame = LineString3d.createPoints(points);\n\n return Loop.create(frame.cloneTransformed(transform));\n}\n\n/** Capsule (or pill shape) */\nconst computeCapsule = (range: Range2d, transform: Transform): Loop => {\n const height = range.yLength();\n const radius = height * (Math.sqrt(2) / 2);\n\n // We're going to circumscribe the range with our rounded edges. The corners of the range will fall on 45 degree angles.\n const radiusOffsetFactor = height / 2;\n\n // These values are the origins of the circles\n const inLeft = range.low.x + radiusOffsetFactor;\n const inRight = range.high.x - radiusOffsetFactor;\n const inBottom = range.low.y + radiusOffsetFactor;\n const inTop = range.high.y - radiusOffsetFactor\n\n // These values exist on the circles\n const exBottom = inBottom - radius;\n const exTop = inTop + radius;\n\n const leftHalfCircle = AngleSweep.createStartEndDegrees(90, 270);\n const rightHalfCircle = AngleSweep.createStartEndDegrees(-90, 90);\n\n const curves = [\n LineString3d.create([Point3d.create(inRight, exTop), Point3d.create(inLeft, exTop)]), // top\n Arc3d.createXY(Point3d.create(inLeft, range.center.y), radius, leftHalfCircle), // left\n LineString3d.create([Point3d.create(inLeft, exBottom), Point3d.create(inRight, exBottom)]), // bottom\n Arc3d.createXY(Point3d.create(inRight, range.center.y), radius, rightHalfCircle), // right\n ];\n\n return Loop.createArray(curves.map((curve) => curve.cloneTransformed(transform)));\n}\n\n/** Regular polygon with n sides: note, this a generic method that can be used to create any polygon, but the frame will not be as tightly encapsulating. */\nconst computePolygon = (n: number, range: Range2d, transform: Transform, angleOffset: number = 0): Loop => {\n // These are math terms: cspell:ignore inradius circumradius\n if (n < 3) throw new Error(\"A polygon must have at least 3 sides.\");\n\n // We're assuming the polygon is a regular polygon with `n` sides.\n // The center of the polygon is the center of the range.\n const center = range.center;\n // The inradius is the distance from the center to the midpoint of each side of the polygon. On our range, this coincides with the distance from the center to one of its corners.\n const inradius = range.low.distance(range.high) / 2;\n // The circumradius is the distance from the center to each vertex of the polygon.\n const circumradius = inradius / Math.cos(Math.PI / n);\n\n // The exterior angles add up to 360 degrees.\n const angleIncrement = 360 / n;\n const vertices: Point3d[] = [];\n\n // Add a point for each vertex\n for (let i = 0; i < n; i++) {\n const angle = Angle.createDegrees(i * angleIncrement + angleOffset);\n const vector = Vector2d.createPolar(circumradius, angle);\n vertices.push(Point3d.create(center.x + vector.x, center.y + vector.y));\n }\n\n // Close the polygon\n vertices.push(vertices[0]);\n\n // Finally compute the loop!\n const frame = LineString3d.createPoints(vertices);\n return Loop.create(frame.cloneTransformed(transform));\n};"]}
1
+ {"version":3,"file":"FrameGeometry.js","sourceRoot":"","sources":["../../../src/annotations/FrameGeometry.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 ElementGeometry\r\n */\r\n\r\n\r\nimport { BackgroundFill, ColorDef, ElementGeometry, FillDisplay, GeometryParams, TextAnnotationFrameShape, TextFrameStyleProps } from \"@itwin/core-common\";\r\nimport { Angle, AngleSweep, Arc3d, LineString3d, Loop, Path, Point3d, Range2d, Transform, Vector2d } from \"@itwin/core-geometry\";\r\n\r\n/**\r\n * Based on the frame style, this method will construct and append [[GeometryParams]] (for line style) and a [[Loop]] (for the frame shape) to the builder.\r\n * @param builder that will be appended to in place\r\n * @param frame\r\n * @param range to enclose with the frame\r\n * @param transform that transforms the range to world coordinates\r\n * @returns `true` if any geometry was appended to the builder\r\n* @beta\r\n */\r\nexport function appendFrameToBuilder(builder: ElementGeometry.Builder, frame: TextFrameStyleProps, range: Range2d, transform: Transform, geomParams: GeometryParams): boolean {\r\n if (frame.shape === \"none\" || frame.shape === undefined) {\r\n return false;\r\n }\r\n\r\n const params = geomParams.clone();\r\n\r\n if (frame.fillColor === \"none\" || frame.fillColor === undefined) {\r\n params.fillDisplay = FillDisplay.Never;\r\n } else if (frame.fillColor === \"background\") {\r\n params.backgroundFill = BackgroundFill.Solid;\r\n params.fillDisplay = FillDisplay.Blanking;\r\n } else if (frame.fillColor !== \"subcategory\") {\r\n params.fillColor = ColorDef.fromJSON(frame.fillColor);\r\n params.lineColor = params.fillColor;\r\n params.fillDisplay = FillDisplay.Blanking;\r\n }\r\n\r\n if (frame.borderColor !== \"subcategory\") {\r\n params.lineColor = ColorDef.fromJSON(frame.borderColor);\r\n params.weight = frame.borderWeight;\r\n }\r\n\r\n const frameGeometry = computeFrame({ frame: frame.shape, range, transform });\r\n if (!builder.appendGeometryParamsChange(params) || !builder.appendGeometryQuery(frameGeometry)) {\r\n return false;\r\n }\r\n\r\n // The tile generator does not produce an outline for shapes with blanking fill. We must add the outline separately.\r\n if (params.fillDisplay === FillDisplay.Blanking) {\r\n const outlineParams = params.clone();\r\n outlineParams.fillDisplay = FillDisplay.Never;\r\n if (!builder.appendGeometryParamsChange(outlineParams) || !builder.appendGeometryQuery(frameGeometry)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Arguments for the [[computeFrame]] method.\r\n * @beta\r\n */\r\nexport interface ComputeFrameArgs {\r\n /** Frame shape to be calculated */\r\n frame: Exclude<TextAnnotationFrameShape, \"none\">;\r\n /** Range to be enclosed */\r\n range: Range2d;\r\n /** Transform that translates and rotates the range to world coordinates */\r\n transform: Transform;\r\n}\r\n\r\n/**\r\n * Computes the frame geometry based on the provided frame shape and range.\r\n * @returns a [Loop]($geometry) or [Path]($geometry) (if it's just a line) that represents the frame geometry\r\n * @beta\r\n */\r\nexport function computeFrame(args: ComputeFrameArgs): Loop | Path {\r\n switch (args.frame) {\r\n case \"line\": return computeLine(args.range, args.transform);\r\n case \"rectangle\": return computeRectangle(args.range, args.transform);\r\n case \"circle\": return computeCircle(args.range, args.transform);\r\n case \"equilateralTriangle\": return computeTriangle(args.range, args.transform);\r\n case \"diamond\": return computeDiamond(args.range, args.transform);\r\n case \"square\": return computeSquare(args.range, args.transform);\r\n case \"pentagon\": return computePolygon(5, args.range, args.transform, 90);\r\n case \"hexagon\": return computePolygon(6, args.range, args.transform);\r\n case \"octagon\": return computePolygon(8, args.range, args.transform, 180 / 8); // or pi/8 in radians\r\n case \"capsule\": return computeCapsule(args.range, args.transform);\r\n case \"roundedRectangle\": return computeRoundedRectangle(args.range, args.transform);\r\n default: return computeRectangle(args.range, args.transform);\r\n }\r\n}\r\n\r\n/**\r\n * Arguments for the [[computeIntervalPoints]] method.\r\n * @beta\r\n */\r\nexport interface ComputeIntervalPointsArgs extends ComputeFrameArgs {\r\n /** A factor applied to divide each straight edge. A value of 1 will place a single point on each vertex. */\r\n lineIntervalFactor?: number;\r\n /** A factor applied to divide each straight edge. A value of 1 will place a single point on each vertex. */\r\n arcIntervalFactor?: number;\r\n}\r\n\r\n/**\r\n * Computes points along the edges of the frame geometry based on the provided frame shape, range, and interval factors.\r\n * These can be used for snapping or attaching leaders.\r\n * @returns an array of [[Point3d]] that represent the points along the edges of the frame geometry. Returns `undefined` if the loop created by `computeFrame` is empty.\r\n * @beta\r\n */\r\nexport function computeIntervalPoints({ frame, range, transform, lineIntervalFactor = 0.5, arcIntervalFactor = 0.25 }: ComputeIntervalPointsArgs): Point3d[] | undefined {\r\n const points: Point3d[] = [];\r\n const curves = computeFrame({ frame, range, transform }).collectCurvePrimitives(undefined, false, true);\r\n\r\n curves.forEach((curve) => {\r\n const end = curve instanceof Arc3d ? arcIntervalFactor : lineIntervalFactor;\r\n for (let interval = 0; interval <= 1; interval += end) {\r\n points.push(curve.fractionToPoint(interval));\r\n }\r\n });\r\n return points;\r\n}\r\n\r\n/** Line - currently just adds an underline. Once we have leaders, this method may change. */\r\nconst computeLine = (range: Range2d, transform: Transform): Path => {\r\n const points = [Point3d.create(range.low.x, range.low.y), Point3d.create(range.high.x, range.low.y)];\r\n const frame = LineString3d.createPoints(points);\r\n\r\n return Path.create(frame.cloneTransformed(transform));\r\n}\r\n\r\n/** Rectangle - simplest frame */\r\nconst computeRectangle = (range: Range2d, transform: Transform): Loop => {\r\n const points = range.corners3d(true);\r\n const frame = LineString3d.createPoints(points);\r\n\r\n return Loop.create(frame.cloneTransformed(transform));\r\n}\r\n\r\n/** Rounded Rectangle: each corner will be turned into an arc with the radius of the arc being the @param radiusFactor * the height (yLength) of the range */\r\nconst computeRoundedRectangle = (range: Range2d, transform: Transform, radiusFactor: number = 0.25): Loop => {\r\n const radius = range.yLength() * radiusFactor * Math.sqrt(2);\r\n // We're going to circumscribe the range with our rounded edges. The corners of the range will fall on 45 degree angles.\r\n const radiusOffsetFactor = range.yLength() * radiusFactor;\r\n\r\n // These values are the origins of the circles\r\n const inLeft = range.low.x + radiusOffsetFactor;\r\n const inRight = range.high.x - radiusOffsetFactor;\r\n const inBottom = range.low.y + radiusOffsetFactor;\r\n const inTop = range.high.y - radiusOffsetFactor\r\n\r\n // These values exist on the circles\r\n const exLeft = inLeft - radius;\r\n const exRight = inRight + radius;\r\n const exBottom = inBottom - radius;\r\n const exTop = inTop + radius;\r\n\r\n const q1 = AngleSweep.createStartEndDegrees(0, 90);\r\n const q2 = AngleSweep.createStartEndDegrees(90, 180);\r\n const q3 = AngleSweep.createStartEndDegrees(180, 270);\r\n const q4 = AngleSweep.createStartEndDegrees(270, 360);\r\n\r\n\r\n const curves = [\r\n LineString3d.create([Point3d.create(inRight, exTop), Point3d.create(inLeft, exTop)]), // top\r\n Arc3d.createXY(Point3d.create(inLeft, inTop), radius, q2), // top left\r\n LineString3d.create([Point3d.create(exLeft, inTop), Point3d.create(exLeft, inBottom)]), // left\r\n Arc3d.createXY(Point3d.create(inLeft, inBottom), radius, q3), // bottom left\r\n LineString3d.create([Point3d.create(inLeft, exBottom), Point3d.create(inRight, exBottom)]), // bottom\r\n Arc3d.createXY(Point3d.create(inRight, inBottom), radius, q4), // bottom right\r\n LineString3d.create([Point3d.create(exRight, inBottom), Point3d.create(exRight, inTop)]), // right\r\n Arc3d.createXY(Point3d.create(inRight, inTop), radius, q1), // top right\r\n ];\r\n\r\n return Loop.createArray(curves.map((curve) => curve.cloneTransformed(transform)))\r\n}\r\n\r\n\r\n/** Circle */\r\nconst computeCircle = (range: Range2d, transform: Transform): Loop => {\r\n const radius = range.low.distance(range.high) / 2;\r\n const frame = Arc3d.createXY(Point3d.createFrom(range.center), radius);\r\n return Loop.create(frame.cloneTransformed(transform));\r\n}\r\n\r\n/** Equilateral Triangle */\r\nconst computeTriangle = (range: Range2d, transform: Transform): Loop => {\r\n\r\n const xLength = range.xLength();\r\n const yLength = range.yLength();\r\n const center = range.center;\r\n const points: Point3d[] = [];\r\n\r\n const magnitude = (xLength > yLength) ? (xLength * Math.sqrt(3) + yLength) / 2 : (yLength * Math.sqrt(3) + xLength) / 2;\r\n\r\n const v1 = Vector2d.create(0, magnitude);\r\n const vectors = [\r\n v1, // top\r\n v1.rotateXY(Angle.createDegrees(120)), // left\r\n v1.rotateXY(Angle.createDegrees(240)), // right\r\n v1 // top\r\n ];\r\n\r\n vectors.forEach((v) => {\r\n points.push(Point3d.create(center.x + v.x, center.y + v.y));\r\n });\r\n\r\n const frame = LineString3d.createPoints(points);\r\n\r\n return Loop.create(frame.cloneTransformed(transform));\r\n}\r\n\r\n/** Diamond (square rotated 45 degrees) */\r\nconst computeDiamond = (range: Range2d, transform: Transform): Loop => {\r\n const offset = (range.xLength() + range.yLength()) / 2;\r\n const center = range.center;\r\n\r\n const points = [\r\n Point3d.createFrom({ x: center.x, y: center.y + offset }), // top\r\n Point3d.createFrom({ x: center.x + offset, y: center.y }), // right\r\n Point3d.createFrom({ x: center.x, y: center.y - offset }), // bottom\r\n Point3d.createFrom({ x: center.x - offset, y: center.y }), // left\r\n Point3d.createFrom({ x: center.x, y: center.y + offset }), // top\r\n ];\r\n\r\n const frame = LineString3d.createPoints(points);\r\n\r\n return Loop.create(frame.cloneTransformed(transform));\r\n}\r\n\r\n/** Square */\r\nconst computeSquare = (range: Range2d, transform: Transform): Loop => {\r\n\r\n // Extend range\r\n const xLength = range.xLength() / 2;\r\n const yLength = range.yLength() / 2;\r\n const center = range.center;\r\n if (xLength > yLength) {\r\n range.extendPoint({ x: center.x, y: center.y + xLength });\r\n range.extendPoint({ x: center.x, y: center.y - xLength });\r\n } else {\r\n range.extendPoint({ x: center.x + yLength, y: center.y });\r\n range.extendPoint({ x: center.x - yLength, y: center.y });\r\n }\r\n\r\n const points = range.corners3d(true);\r\n const frame = LineString3d.createPoints(points);\r\n\r\n return Loop.create(frame.cloneTransformed(transform));\r\n}\r\n\r\n/** Capsule (or pill shape) */\r\nconst computeCapsule = (range: Range2d, transform: Transform): Loop => {\r\n const height = range.yLength();\r\n const radius = height * (Math.sqrt(2) / 2);\r\n\r\n // We're going to circumscribe the range with our rounded edges. The corners of the range will fall on 45 degree angles.\r\n const radiusOffsetFactor = height / 2;\r\n\r\n // These values are the origins of the circles\r\n const inLeft = range.low.x + radiusOffsetFactor;\r\n const inRight = range.high.x - radiusOffsetFactor;\r\n const inBottom = range.low.y + radiusOffsetFactor;\r\n const inTop = range.high.y - radiusOffsetFactor\r\n\r\n // These values exist on the circles\r\n const exBottom = inBottom - radius;\r\n const exTop = inTop + radius;\r\n\r\n const leftHalfCircle = AngleSweep.createStartEndDegrees(90, 270);\r\n const rightHalfCircle = AngleSweep.createStartEndDegrees(-90, 90);\r\n\r\n const curves = [\r\n LineString3d.create([Point3d.create(inRight, exTop), Point3d.create(inLeft, exTop)]), // top\r\n Arc3d.createXY(Point3d.create(inLeft, range.center.y), radius, leftHalfCircle), // left\r\n LineString3d.create([Point3d.create(inLeft, exBottom), Point3d.create(inRight, exBottom)]), // bottom\r\n Arc3d.createXY(Point3d.create(inRight, range.center.y), radius, rightHalfCircle), // right\r\n ];\r\n\r\n return Loop.createArray(curves.map((curve) => curve.cloneTransformed(transform)));\r\n}\r\n\r\n/** Regular polygon with n sides: note, this a generic method that can be used to create any polygon, but the frame will not be as tightly encapsulating. */\r\nconst computePolygon = (n: number, range: Range2d, transform: Transform, angleOffset: number = 0): Loop => {\r\n // These are math terms: cspell:ignore inradius circumradius\r\n if (n < 3) throw new Error(\"A polygon must have at least 3 sides.\");\r\n\r\n // We're assuming the polygon is a regular polygon with `n` sides.\r\n // The center of the polygon is the center of the range.\r\n const center = range.center;\r\n // The inradius is the distance from the center to the midpoint of each side of the polygon. On our range, this coincides with the distance from the center to one of its corners.\r\n const inradius = range.low.distance(range.high) / 2;\r\n // The circumradius is the distance from the center to each vertex of the polygon.\r\n const circumradius = inradius / Math.cos(Math.PI / n);\r\n\r\n // The exterior angles add up to 360 degrees.\r\n const angleIncrement = 360 / n;\r\n const vertices: Point3d[] = [];\r\n\r\n // Add a point for each vertex\r\n for (let i = 0; i < n; i++) {\r\n const angle = Angle.createDegrees(i * angleIncrement + angleOffset);\r\n const vector = Vector2d.createPolar(circumradius, angle);\r\n vertices.push(Point3d.create(center.x + vector.x, center.y + vector.y));\r\n }\r\n\r\n // Close the polygon\r\n vertices.push(vertices[0]);\r\n\r\n // Finally compute the loop!\r\n const frame = LineString3d.createPoints(vertices);\r\n return Loop.create(frame.cloneTransformed(transform));\r\n};"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LeaderGeometry.js","sourceRoot":"","sources":["../../../src/annotations/LeaderGeometry.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module ElementGeometry\n */\n\nimport { ColorDef, ElementGeometry, FillDisplay, GeometryParams, TextAnnotationLeader, TextFrameStyleProps, TextStyleColor, TextStyleSettings } from \"@itwin/core-common\";\nimport { Angle, Arc3d, CurveCurve, CurvePrimitive, LineSegment3d, LineString3d, Loop, Path, Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\nimport { computeFrame } from \"./FrameGeometry\";\nimport { TextBlockLayout, TextStyleResolver } from \"./TextBlockLayout\";\n\n/**\n * Constructs and appends leader lines and their terminators to the provided geometry builder for a text annotation.\n *\n * This function processes an array of `TextAnnotationLeader` objects, computes their attachment points\n * relative to a text frame (or a default rectangular frame if none is provided), and appends the leader\n * line and terminator geometry to the builder. It also applies color overrides if specified\n * in the leader's style overrides.\n *\n * @param builder - The geometry builder to which the leader geometries will be appended.\n * @param leaders - An array of leader properties.\n * @param layout - The layout information for the text block, including its range.\n * @param transform - The transform to apply to the frame and leader geometry.\n * @param params - The geometry parameters, such as color, to use for the leader lines.\n * @param textStyleResolver - Resolver for text styles, used to obtain leader styles.\n * @param scaleFactor - The scale factor to apply to leader dimensions, usually comes from the `scaleFactor` of a [[Drawing]] element.\n * @returns `true` if at least one leader with a terminator was successfully appended; otherwise, `false`.\n * @beta\n */\nexport function appendLeadersToBuilder(builder: ElementGeometry.Builder, leaders: TextAnnotationLeader[], layout: TextBlockLayout, transform: Transform, params: GeometryParams, textStyleResolver: TextStyleResolver, scaleFactor: number): boolean {\n let result = true;\n const scaledBlockTextHeight = textStyleResolver.blockSettings.textHeight * scaleFactor;\n let frame: TextFrameStyleProps | undefined = textStyleResolver.blockSettings.frame;\n\n // If there is no frame, use a rectangular frame to compute the attachmentPoints for leaders.\n if (frame === undefined || frame.shape === \"none\") {\n frame = { shape: \"rectangle\" }\n }\n if (frame.shape === undefined || frame.shape === \"none\") return false;\n const frameCurve = computeFrame({ frame: frame.shape, range: layout.range, transform });\n\n for (const leader of leaders) {\n const leaderStyle = textStyleResolver.resolveSettings(leader.styleOverrides ?? {}, true);\n\n let effectiveColor: TextStyleColor = \"subcategory\";\n\n if (leaderStyle.leader.color === \"inherit\") {\n effectiveColor = leaderStyle.color;\n } else if (leaderStyle.leader.color !== \"subcategory\") {\n effectiveColor = leaderStyle.leader.color;\n }\n\n if (effectiveColor !== \"subcategory\") {\n params.lineColor = ColorDef.fromJSON(effectiveColor);\n result = result && builder.appendGeometryParamsChange(params);\n }\n\n const attachmentPoint = computeLeaderAttachmentPoint(leader, frameCurve, layout, transform);\n if (!attachmentPoint) return false;\n\n // Leader line geometry\n const leaderLinePoints: Point3d[] = [];\n\n leaderLinePoints.push(leader.startPoint)\n\n leader.intermediatePoints?.forEach((point) => {\n leaderLinePoints.push(point);\n });\n\n if (leaderStyle.leader.wantElbow) {\n const elbowLength = leaderStyle.leader.elbowLength * scaledBlockTextHeight;\n const elbowDirection = computeElbowDirection(attachmentPoint, frameCurve, elbowLength);\n if (elbowDirection)\n leaderLinePoints.push(attachmentPoint.plusScaled(elbowDirection, elbowLength))\n }\n\n leaderLinePoints.push(attachmentPoint)\n\n const terminatorDirection = Vector3d.createStartEnd(\n leaderLinePoints[0], leaderLinePoints[1]\n ).normalize();\n const terminatorWidth = leaderStyle.leader.terminatorWidthFactor * scaledBlockTextHeight;\n // Truncate the first segment of the leader lines to account for the arrowhead size when closedArrow (hollow triangle) terminatorShape is used.\n if (leaderStyle.leader.terminatorShape === \"closedArrow\") {\n if (terminatorDirection)\n leaderLinePoints[0] = leaderLinePoints[0].plusScaled(terminatorDirection, terminatorWidth);\n }\n\n result = result && builder.appendGeometryQuery(LineString3d.create(leaderLinePoints));\n\n if (leaderStyle.leader.terminatorShape !== \"none\") {\n // Terminator geometry\n if (!terminatorDirection) continue; // Assuming leaders without terminators is a valid case.\n result = result && createTerminatorGeometry(builder, leader.startPoint, terminatorDirection, params, leaderStyle, scaledBlockTextHeight);\n\n }\n\n }\n return result;\n}\n\n/**\n * Creates the geometry for a terminator at the end of a leader line.\n * @param builder The geometry builder to append the terminator geometry to.\n * @param point The starting point of the leader line.\n * @param dir The direction vector of the leader line.\n * @param params The geometry parameters to use for the terminator.\n * @param textStyleSettings The text style settings to use for the terminator.\n * @param textHeight The height of the text block.\n * @returns True if the geometry was successfully created, false otherwise.\n * @beta\n */\nexport function createTerminatorGeometry(builder: ElementGeometry.Builder, point: Point3d, dir: Vector3d, params: GeometryParams, textStyleSettings: TextStyleSettings, textHeight: number): boolean {\n\n let result = true;\n const termY = dir.unitCrossProduct(Vector3d.unitZ());\n if (!termY) return false; // If dir is parallel to Z, we can't create a terminator\n const terminatorHeight = textStyleSettings.leader.terminatorHeightFactor * textHeight;\n const terminatorWidth = textStyleSettings.leader.terminatorWidthFactor * textHeight;\n const terminatorHalfHeight = terminatorHeight / 2;\n const basePoint = point.plusScaled(dir, terminatorWidth);\n const point1 = basePoint.plusScaled(termY, terminatorHalfHeight);\n const point2 = basePoint.plusScaled(termY.negate(), terminatorHalfHeight);\n\n // Helper function to add fill parameters\n const addFillParams = () => {\n params.fillDisplay = FillDisplay.Always;\n result = result && builder.appendGeometryParamsChange(params);\n };\n\n // Helper function to create geometry entry\n const addGeometry = (content: CurvePrimitive, useLoop = false) => {\n const finalContent = useLoop ? Loop.create(content) : content;\n result = result && builder.appendGeometryQuery(finalContent);\n };\n\n switch (textStyleSettings.leader.terminatorShape) {\n case \"openArrow\": {\n const lineString = LineString3d.create([point1, point, point2]);\n addGeometry(lineString);\n break;\n }\n\n case \"closedArrow\": {\n const lineString = LineString3d.create([point1, point, point2, point1]);\n addGeometry(lineString);\n break;\n }\n\n case \"closedArrowFilled\": {\n addFillParams();\n const lineString = LineString3d.create([point1, point, point2, point1]);\n addGeometry(lineString, true);\n break;\n }\n\n case \"circle\": {\n const circle = Arc3d.createXY(point, terminatorHalfHeight);\n addGeometry(circle);\n break;\n }\n\n case \"circleFilled\": {\n addFillParams();\n const circle = Arc3d.createXY(point, terminatorHalfHeight);\n addGeometry(circle, true);\n break;\n }\n\n case \"slash\": {\n const normalizedVector = dir.normalize();\n if (!normalizedVector) throw new Error(\"Invalid reference vector for slash terminator.\");\n\n const rotatedVector = normalizedVector.rotateXY(Angle.createDegrees(45));\n const startPoint = point.plusScaled(rotatedVector, -terminatorHalfHeight);\n const endPoint = point.plusScaled(rotatedVector, terminatorHalfHeight);\n\n const slashLine = LineSegment3d.create(startPoint, endPoint);\n addGeometry(slashLine);\n break;\n }\n }\n\n return result;\n};\n\n\n/**\n * Computes the direction vector for an \"elbow\" for leader based on the attachment point and a frame curve.\n * The elbow direction is determined by whether the attachment point is closer to the left or right side of the frame.\n * If the computed elbow would be tangent to the frame at the intersection, no elbow direction is returned.\n *\n * @param attachmentPoint - The point where the leader attaches.\n * @param frameCurve - The frame curve (either a Loop or Path) to which the leader is attached.\n * @param elbowLength - The length of the elbow segment to be created.\n * @returns The direction vector for the elbow, or `undefined` if the elbow would be tangent to the frame.\n * @beta\n */\nexport function computeElbowDirection(attachmentPoint: Point3d, frameCurve: Loop | Path, elbowLength: number): Vector3d | undefined {\n\n let elbowDirection: Vector3d | undefined;\n // Determine the direction based on the closest point's position relative to the frame\n const isCloserToLeft = Math.abs(attachmentPoint.x - frameCurve.range().low.x) < Math.abs(attachmentPoint.x - frameCurve.range().high.x);\n\n // Decide the direction: left (-X) or right (+X)\n elbowDirection = isCloserToLeft ? Vector3d.unitX().negate() : Vector3d.unitX();\n\n // Verify if the elbow is a tangent to the frame, if yes, do not create an elbow\n const elbowPoint = attachmentPoint.plusScaled(elbowDirection, elbowLength);\n const elbowLine = LineSegment3d.create(attachmentPoint, elbowPoint);\n // Find intersection points between the elbow and the frame\n const intersections = CurveCurve.intersectionXYZPairs(elbowLine, false, frameCurve, false);\n // As the elbow will intersect the frame only at one point, we can safely use the first intersection\n const intersection = intersections[0];\n const curveFraction = intersection.detailB.fraction;\n const derivative = intersection.detailB.curve?.fractionToPointAndDerivative(curveFraction);\n const tangent = derivative?.direction.normalize();\n const lineDirection = Vector3d.createStartEnd(elbowLine.point0Ref, elbowLine.point1Ref).normalize();\n if (tangent && lineDirection) {\n const dot = tangent.dotProduct(lineDirection);\n // If the tangent and line direction are aligned (dot product close to 1 or -1), it's tangent\n if (Math.abs(dot) > 0.999) {\n elbowDirection = undefined;\n }\n }\n return elbowDirection;\n}\n\n/**\n * Computes the attachment point for a leader line on a text annotation frame.\n *\n * The attachment point is determined based on the leader's attachment mode:\n * - `\"Nearest\"`: Finds the closest point on the frame curve to the leader's start point.\n * - `\"KeyPoint\"`: Uses a specific curve segment and fraction along that segment to determine the point.\n * - `\"TextPoint\"`: Calculates a point on the text layout (top/bottom, left/right) and projects it onto the frame curve.\n *\n * @param leader - The leader props.\n * @param frameCurve - The curve (Loop or Path) representing the annotation frame.\n * @param textLayout - The layout information for the text block.\n * @param transform - The transform applied to the text layout.\n * @returns The computed attachment point as a `Point3d`, or `undefined` if it cannot be determined.\n * @beta\n */\nexport function computeLeaderAttachmentPoint(\n leader: TextAnnotationLeader,\n frameCurve: Loop | Path,\n textLayout: TextBlockLayout,\n transform: Transform\n): Point3d | undefined {\n let attachmentPoint: Point3d | undefined;\n\n if (leader.attachment.mode === \"Nearest\") {\n attachmentPoint = frameCurve.closestPoint(leader.startPoint)?.point;\n } else if (leader.attachment.mode === \"KeyPoint\") {\n const curves = frameCurve.collectCurvePrimitives(undefined, false, true);\n const curveIndex = leader.attachment.curveIndex;\n const fraction = leader.attachment.fraction;\n if (curveIndex >= curves.length) {\n // If the curveIndex is invalid, use the last curve\n // This is a fallback to avoid out-of-bounds access\n attachmentPoint = curves[curves.length - 1].fractionToPoint(fraction);\n } else {\n attachmentPoint = curves[curveIndex].fractionToPoint(fraction);\n }\n } else { // attachment.mode=\"TextPoint\"\n let scaleDirection = transform.matrix.getColumn(0).negate(); // direction to draw a scaled line from text attachment point to find intersection point on frame\n let lineIndex: number;\n if (leader.attachment.position.includes(\"Top\")) {\n lineIndex = 0\n } else {\n lineIndex = textLayout.lines.length - 1\n }\n const lineRange = textLayout.lines[lineIndex].range;\n const lineOffset = textLayout.lines[lineIndex].offsetFromDocument;\n const origin = transform.multiplyPoint3d(Point3d.fromJSON(lineOffset));\n let attachmentPointOnText = origin.plusScaled(transform.matrix.getColumn(1), ((lineRange.yLength()) / 2));\n\n if (leader.attachment.position.includes(\"Right\")) {\n attachmentPointOnText = attachmentPointOnText.plusScaled(transform.matrix.getColumn(0), lineRange.xLength());\n scaleDirection = scaleDirection.negate();\n }\n // Find the nearest intersection point on the frame to get the correct attachment point\n // Extend the direction vector to create a target point far along the direction\n const targetPoint = attachmentPointOnText.plusScaled(scaleDirection, 1e6); // Scale the direction vector to a large value\n const intersectionLine = LineSegment3d.create(attachmentPointOnText, targetPoint);\n const closestPointDetail = CurveCurve.intersectionXYZPairs(intersectionLine, false, frameCurve, false);\n attachmentPoint = closestPointDetail[0]?.detailA.point;\n }\n return attachmentPoint;\n}"]}
1
+ {"version":3,"file":"LeaderGeometry.js","sourceRoot":"","sources":["../../../src/annotations/LeaderGeometry.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 ElementGeometry\r\n */\r\n\r\nimport { ColorDef, ElementGeometry, FillDisplay, GeometryParams, TextAnnotationLeader, TextFrameStyleProps, TextStyleColor, TextStyleSettings } from \"@itwin/core-common\";\r\nimport { Angle, Arc3d, CurveCurve, CurvePrimitive, LineSegment3d, LineString3d, Loop, Path, Point3d, Transform, Vector3d } from \"@itwin/core-geometry\";\r\nimport { computeFrame } from \"./FrameGeometry\";\r\nimport { TextBlockLayout, TextStyleResolver } from \"./TextBlockLayout\";\r\n\r\n/**\r\n * Constructs and appends leader lines and their terminators to the provided geometry builder for a text annotation.\r\n *\r\n * This function processes an array of `TextAnnotationLeader` objects, computes their attachment points\r\n * relative to a text frame (or a default rectangular frame if none is provided), and appends the leader\r\n * line and terminator geometry to the builder. It also applies color overrides if specified\r\n * in the leader's style overrides.\r\n *\r\n * @param builder - The geometry builder to which the leader geometries will be appended.\r\n * @param leaders - An array of leader properties.\r\n * @param layout - The layout information for the text block, including its range.\r\n * @param transform - The transform to apply to the frame and leader geometry.\r\n * @param params - The geometry parameters, such as color, to use for the leader lines.\r\n * @param textStyleResolver - Resolver for text styles, used to obtain leader styles.\r\n * @param scaleFactor - The scale factor to apply to leader dimensions, usually comes from the `scaleFactor` of a [[Drawing]] element.\r\n * @returns `true` if at least one leader with a terminator was successfully appended; otherwise, `false`.\r\n * @beta\r\n */\r\nexport function appendLeadersToBuilder(builder: ElementGeometry.Builder, leaders: TextAnnotationLeader[], layout: TextBlockLayout, transform: Transform, params: GeometryParams, textStyleResolver: TextStyleResolver, scaleFactor: number): boolean {\r\n let result = true;\r\n const scaledBlockTextHeight = textStyleResolver.blockSettings.textHeight * scaleFactor;\r\n let frame: TextFrameStyleProps | undefined = textStyleResolver.blockSettings.frame;\r\n\r\n // If there is no frame, use a rectangular frame to compute the attachmentPoints for leaders.\r\n if (frame === undefined || frame.shape === \"none\") {\r\n frame = { shape: \"rectangle\" }\r\n }\r\n if (frame.shape === undefined || frame.shape === \"none\") return false;\r\n const frameCurve = computeFrame({ frame: frame.shape, range: layout.range, transform });\r\n\r\n for (const leader of leaders) {\r\n const leaderStyle = textStyleResolver.resolveSettings(leader.styleOverrides ?? {}, true);\r\n\r\n let effectiveColor: TextStyleColor = \"subcategory\";\r\n\r\n if (leaderStyle.leader.color === \"inherit\") {\r\n effectiveColor = leaderStyle.color;\r\n } else if (leaderStyle.leader.color !== \"subcategory\") {\r\n effectiveColor = leaderStyle.leader.color;\r\n }\r\n\r\n if (effectiveColor !== \"subcategory\") {\r\n params.lineColor = ColorDef.fromJSON(effectiveColor);\r\n result = result && builder.appendGeometryParamsChange(params);\r\n }\r\n\r\n const attachmentPoint = computeLeaderAttachmentPoint(leader, frameCurve, layout, transform);\r\n if (!attachmentPoint) return false;\r\n\r\n // Leader line geometry\r\n const leaderLinePoints: Point3d[] = [];\r\n\r\n leaderLinePoints.push(leader.startPoint)\r\n\r\n leader.intermediatePoints?.forEach((point) => {\r\n leaderLinePoints.push(point);\r\n });\r\n\r\n if (leaderStyle.leader.wantElbow) {\r\n const elbowLength = leaderStyle.leader.elbowLength * scaledBlockTextHeight;\r\n const elbowDirection = computeElbowDirection(attachmentPoint, frameCurve, elbowLength);\r\n if (elbowDirection)\r\n leaderLinePoints.push(attachmentPoint.plusScaled(elbowDirection, elbowLength))\r\n }\r\n\r\n leaderLinePoints.push(attachmentPoint)\r\n\r\n const terminatorDirection = Vector3d.createStartEnd(\r\n leaderLinePoints[0], leaderLinePoints[1]\r\n ).normalize();\r\n const terminatorWidth = leaderStyle.leader.terminatorWidthFactor * scaledBlockTextHeight;\r\n // Truncate the first segment of the leader lines to account for the arrowhead size when closedArrow (hollow triangle) terminatorShape is used.\r\n if (leaderStyle.leader.terminatorShape === \"closedArrow\") {\r\n if (terminatorDirection)\r\n leaderLinePoints[0] = leaderLinePoints[0].plusScaled(terminatorDirection, terminatorWidth);\r\n }\r\n\r\n result = result && builder.appendGeometryQuery(LineString3d.create(leaderLinePoints));\r\n\r\n if (leaderStyle.leader.terminatorShape !== \"none\") {\r\n // Terminator geometry\r\n if (!terminatorDirection) continue; // Assuming leaders without terminators is a valid case.\r\n result = result && createTerminatorGeometry(builder, leader.startPoint, terminatorDirection, params, leaderStyle, scaledBlockTextHeight);\r\n\r\n }\r\n\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Creates the geometry for a terminator at the end of a leader line.\r\n * @param builder The geometry builder to append the terminator geometry to.\r\n * @param point The starting point of the leader line.\r\n * @param dir The direction vector of the leader line.\r\n * @param params The geometry parameters to use for the terminator.\r\n * @param textStyleSettings The text style settings to use for the terminator.\r\n * @param textHeight The height of the text block.\r\n * @returns True if the geometry was successfully created, false otherwise.\r\n * @beta\r\n */\r\nexport function createTerminatorGeometry(builder: ElementGeometry.Builder, point: Point3d, dir: Vector3d, params: GeometryParams, textStyleSettings: TextStyleSettings, textHeight: number): boolean {\r\n\r\n let result = true;\r\n const termY = dir.unitCrossProduct(Vector3d.unitZ());\r\n if (!termY) return false; // If dir is parallel to Z, we can't create a terminator\r\n const terminatorHeight = textStyleSettings.leader.terminatorHeightFactor * textHeight;\r\n const terminatorWidth = textStyleSettings.leader.terminatorWidthFactor * textHeight;\r\n const terminatorHalfHeight = terminatorHeight / 2;\r\n const basePoint = point.plusScaled(dir, terminatorWidth);\r\n const point1 = basePoint.plusScaled(termY, terminatorHalfHeight);\r\n const point2 = basePoint.plusScaled(termY.negate(), terminatorHalfHeight);\r\n\r\n // Helper function to add fill parameters\r\n const addFillParams = () => {\r\n params.fillDisplay = FillDisplay.Always;\r\n result = result && builder.appendGeometryParamsChange(params);\r\n };\r\n\r\n // Helper function to create geometry entry\r\n const addGeometry = (content: CurvePrimitive, useLoop = false) => {\r\n const finalContent = useLoop ? Loop.create(content) : content;\r\n result = result && builder.appendGeometryQuery(finalContent);\r\n };\r\n\r\n switch (textStyleSettings.leader.terminatorShape) {\r\n case \"openArrow\": {\r\n const lineString = LineString3d.create([point1, point, point2]);\r\n addGeometry(lineString);\r\n break;\r\n }\r\n\r\n case \"closedArrow\": {\r\n const lineString = LineString3d.create([point1, point, point2, point1]);\r\n addGeometry(lineString);\r\n break;\r\n }\r\n\r\n case \"closedArrowFilled\": {\r\n addFillParams();\r\n const lineString = LineString3d.create([point1, point, point2, point1]);\r\n addGeometry(lineString, true);\r\n break;\r\n }\r\n\r\n case \"circle\": {\r\n const circle = Arc3d.createXY(point, terminatorHalfHeight);\r\n addGeometry(circle);\r\n break;\r\n }\r\n\r\n case \"circleFilled\": {\r\n addFillParams();\r\n const circle = Arc3d.createXY(point, terminatorHalfHeight);\r\n addGeometry(circle, true);\r\n break;\r\n }\r\n\r\n case \"slash\": {\r\n const normalizedVector = dir.normalize();\r\n if (!normalizedVector) throw new Error(\"Invalid reference vector for slash terminator.\");\r\n\r\n const rotatedVector = normalizedVector.rotateXY(Angle.createDegrees(45));\r\n const startPoint = point.plusScaled(rotatedVector, -terminatorHalfHeight);\r\n const endPoint = point.plusScaled(rotatedVector, terminatorHalfHeight);\r\n\r\n const slashLine = LineSegment3d.create(startPoint, endPoint);\r\n addGeometry(slashLine);\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\n\r\n/**\r\n * Computes the direction vector for an \"elbow\" for leader based on the attachment point and a frame curve.\r\n * The elbow direction is determined by whether the attachment point is closer to the left or right side of the frame.\r\n * If the computed elbow would be tangent to the frame at the intersection, no elbow direction is returned.\r\n *\r\n * @param attachmentPoint - The point where the leader attaches.\r\n * @param frameCurve - The frame curve (either a Loop or Path) to which the leader is attached.\r\n * @param elbowLength - The length of the elbow segment to be created.\r\n * @returns The direction vector for the elbow, or `undefined` if the elbow would be tangent to the frame.\r\n * @beta\r\n */\r\nexport function computeElbowDirection(attachmentPoint: Point3d, frameCurve: Loop | Path, elbowLength: number): Vector3d | undefined {\r\n\r\n let elbowDirection: Vector3d | undefined;\r\n // Determine the direction based on the closest point's position relative to the frame\r\n const isCloserToLeft = Math.abs(attachmentPoint.x - frameCurve.range().low.x) < Math.abs(attachmentPoint.x - frameCurve.range().high.x);\r\n\r\n // Decide the direction: left (-X) or right (+X)\r\n elbowDirection = isCloserToLeft ? Vector3d.unitX().negate() : Vector3d.unitX();\r\n\r\n // Verify if the elbow is a tangent to the frame, if yes, do not create an elbow\r\n const elbowPoint = attachmentPoint.plusScaled(elbowDirection, elbowLength);\r\n const elbowLine = LineSegment3d.create(attachmentPoint, elbowPoint);\r\n // Find intersection points between the elbow and the frame\r\n const intersections = CurveCurve.intersectionXYZPairs(elbowLine, false, frameCurve, false);\r\n // As the elbow will intersect the frame only at one point, we can safely use the first intersection\r\n const intersection = intersections[0];\r\n const curveFraction = intersection.detailB.fraction;\r\n const derivative = intersection.detailB.curve?.fractionToPointAndDerivative(curveFraction);\r\n const tangent = derivative?.direction.normalize();\r\n const lineDirection = Vector3d.createStartEnd(elbowLine.point0Ref, elbowLine.point1Ref).normalize();\r\n if (tangent && lineDirection) {\r\n const dot = tangent.dotProduct(lineDirection);\r\n // If the tangent and line direction are aligned (dot product close to 1 or -1), it's tangent\r\n if (Math.abs(dot) > 0.999) {\r\n elbowDirection = undefined;\r\n }\r\n }\r\n return elbowDirection;\r\n}\r\n\r\n/**\r\n * Computes the attachment point for a leader line on a text annotation frame.\r\n *\r\n * The attachment point is determined based on the leader's attachment mode:\r\n * - `\"Nearest\"`: Finds the closest point on the frame curve to the leader's start point.\r\n * - `\"KeyPoint\"`: Uses a specific curve segment and fraction along that segment to determine the point.\r\n * - `\"TextPoint\"`: Calculates a point on the text layout (top/bottom, left/right) and projects it onto the frame curve.\r\n *\r\n * @param leader - The leader props.\r\n * @param frameCurve - The curve (Loop or Path) representing the annotation frame.\r\n * @param textLayout - The layout information for the text block.\r\n * @param transform - The transform applied to the text layout.\r\n * @returns The computed attachment point as a `Point3d`, or `undefined` if it cannot be determined.\r\n * @beta\r\n */\r\nexport function computeLeaderAttachmentPoint(\r\n leader: TextAnnotationLeader,\r\n frameCurve: Loop | Path,\r\n textLayout: TextBlockLayout,\r\n transform: Transform\r\n): Point3d | undefined {\r\n let attachmentPoint: Point3d | undefined;\r\n\r\n if (leader.attachment.mode === \"Nearest\") {\r\n attachmentPoint = frameCurve.closestPoint(leader.startPoint)?.point;\r\n } else if (leader.attachment.mode === \"KeyPoint\") {\r\n const curves = frameCurve.collectCurvePrimitives(undefined, false, true);\r\n const curveIndex = leader.attachment.curveIndex;\r\n const fraction = leader.attachment.fraction;\r\n if (curveIndex >= curves.length) {\r\n // If the curveIndex is invalid, use the last curve\r\n // This is a fallback to avoid out-of-bounds access\r\n attachmentPoint = curves[curves.length - 1].fractionToPoint(fraction);\r\n } else {\r\n attachmentPoint = curves[curveIndex].fractionToPoint(fraction);\r\n }\r\n } else { // attachment.mode=\"TextPoint\"\r\n let scaleDirection = transform.matrix.getColumn(0).negate(); // direction to draw a scaled line from text attachment point to find intersection point on frame\r\n let lineIndex: number;\r\n if (leader.attachment.position.includes(\"Top\")) {\r\n lineIndex = 0\r\n } else {\r\n lineIndex = textLayout.lines.length - 1\r\n }\r\n const lineRange = textLayout.lines[lineIndex].range;\r\n const lineOffset = textLayout.lines[lineIndex].offsetFromDocument;\r\n const origin = transform.multiplyPoint3d(Point3d.fromJSON(lineOffset));\r\n let attachmentPointOnText = origin.plusScaled(transform.matrix.getColumn(1), ((lineRange.yLength()) / 2));\r\n\r\n if (leader.attachment.position.includes(\"Right\")) {\r\n attachmentPointOnText = attachmentPointOnText.plusScaled(transform.matrix.getColumn(0), lineRange.xLength());\r\n scaleDirection = scaleDirection.negate();\r\n }\r\n // Find the nearest intersection point on the frame to get the correct attachment point\r\n // Extend the direction vector to create a target point far along the direction\r\n const targetPoint = attachmentPointOnText.plusScaled(scaleDirection, 1e6); // Scale the direction vector to a large value\r\n const intersectionLine = LineSegment3d.create(attachmentPointOnText, targetPoint);\r\n const closestPointDetail = CurveCurve.intersectionXYZPairs(intersectionLine, false, frameCurve, false);\r\n attachmentPoint = closestPointDetail[0]?.detailA.point;\r\n }\r\n return attachmentPoint;\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TextAnnotationElement.d.ts","sourceRoot":"","sources":["../../../src/annotations/TextAnnotationElement.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TextAnnotationElement.d.ts","sourceRoot":"","sources":["../../../src/annotations/TextAnnotationElement.ts"],"names":[],"mappings":"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"}
@@ -214,12 +214,12 @@ class TextAnnotation2d extends Element_1.AnnotationElement2d /* implements IText
214
214
  /** @internal */
215
215
  static onInserted(arg) {
216
216
  super.onInserted(arg);
217
- ElementDrivesTextAnnotation_1.ElementDrivesTextAnnotation.updateFieldDependencies(arg.id, arg.iModel);
217
+ ElementDrivesTextAnnotation_1.ElementDrivesTextAnnotation.updateFieldDependencies(arg.iModel.getIndirectTxn(), arg.id);
218
218
  }
219
219
  /** @internal */
220
220
  static onUpdated(arg) {
221
221
  super.onUpdated(arg);
222
- ElementDrivesTextAnnotation_1.ElementDrivesTextAnnotation.updateFieldDependencies(arg.id, arg.iModel);
222
+ ElementDrivesTextAnnotation_1.ElementDrivesTextAnnotation.updateFieldDependencies(arg.iModel.getIndirectTxn(), arg.id);
223
223
  }
224
224
  collectReferenceIds(referenceIds) {
225
225
  super.collectReferenceIds(referenceIds);
@@ -380,12 +380,12 @@ class TextAnnotation3d extends Element_1.GraphicalElement3d /* implements ITextA
380
380
  /** @internal */
381
381
  static onInserted(arg) {
382
382
  super.onInserted(arg);
383
- ElementDrivesTextAnnotation_1.ElementDrivesTextAnnotation.updateFieldDependencies(arg.id, arg.iModel);
383
+ ElementDrivesTextAnnotation_1.ElementDrivesTextAnnotation.updateFieldDependencies(arg.iModel.getIndirectTxn(), arg.id);
384
384
  }
385
385
  /** @internal */
386
386
  static onUpdated(arg) {
387
387
  super.onUpdated(arg);
388
- ElementDrivesTextAnnotation_1.ElementDrivesTextAnnotation.updateFieldDependencies(arg.id, arg.iModel);
388
+ ElementDrivesTextAnnotation_1.ElementDrivesTextAnnotation.updateFieldDependencies(arg.iModel.getIndirectTxn(), arg.id);
389
389
  }
390
390
  collectReferenceIds(referenceIds) {
391
391
  super.collectReferenceIds(referenceIds);
@@ -629,7 +629,8 @@ class AnnotationTextStyle extends Element_1.DefinitionElement {
629
629
  }
630
630
  // Copy the style into the target iModel and remap its Id.
631
631
  const dstStyleProps = await context.cloneElement(srcStyle);
632
- dstStyleId = context.targetDb.elements.insertElement(dstStyleProps);
632
+ dstStyleId = context.targetDb.getIndirectTxn().insertElement(dstStyleProps);
633
+ (0, core_bentley_1.assert)(undefined !== dstStyleId);
633
634
  context.remapElement(sourceTextStyleId, dstStyleId);
634
635
  return dstStyleId;
635
636
  }