@itwin/core-backend 3.6.0-dev.8 → 3.6.0

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 (267) hide show
  1. package/CHANGELOG.md +45 -1
  2. package/LICENSE.md +1 -1
  3. package/lib/cjs/AliCloudStorageService.d.ts +23 -23
  4. package/lib/cjs/AliCloudStorageService.js +71 -71
  5. package/lib/cjs/AliCloudStorageService.js.map +1 -1
  6. package/lib/cjs/BackendHubAccess.d.ts +224 -224
  7. package/lib/cjs/BackendHubAccess.js +41 -41
  8. package/lib/cjs/BackendHubAccess.js.map +1 -1
  9. package/lib/cjs/BackendLoggerCategory.d.ts +91 -91
  10. package/lib/cjs/BackendLoggerCategory.js +99 -99
  11. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  12. package/lib/cjs/BisCoreSchema.d.ts +21 -21
  13. package/lib/cjs/BisCoreSchema.js +60 -60
  14. package/lib/cjs/BisCoreSchema.js.map +1 -1
  15. package/lib/cjs/BriefcaseManager.d.ts +170 -170
  16. package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
  17. package/lib/cjs/BriefcaseManager.js +414 -413
  18. package/lib/cjs/BriefcaseManager.js.map +1 -1
  19. package/lib/cjs/Category.d.ts +153 -153
  20. package/lib/cjs/Category.js +243 -243
  21. package/lib/cjs/Category.js.map +1 -1
  22. package/lib/cjs/ChangeSummaryManager.d.ts +187 -187
  23. package/lib/cjs/ChangeSummaryManager.js +447 -447
  24. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  25. package/lib/cjs/ChangedElementsDb.d.ts +99 -99
  26. package/lib/cjs/ChangedElementsDb.js +165 -165
  27. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  28. package/lib/cjs/ChangedElementsManager.d.ts +39 -39
  29. package/lib/cjs/ChangedElementsManager.js +88 -88
  30. package/lib/cjs/ChangedElementsManager.js.map +1 -1
  31. package/lib/cjs/CheckpointManager.d.ts +121 -120
  32. package/lib/cjs/CheckpointManager.d.ts.map +1 -1
  33. package/lib/cjs/CheckpointManager.js +349 -343
  34. package/lib/cjs/CheckpointManager.js.map +1 -1
  35. package/lib/cjs/ClassRegistry.d.ts +79 -79
  36. package/lib/cjs/ClassRegistry.d.ts.map +1 -1
  37. package/lib/cjs/ClassRegistry.js +250 -249
  38. package/lib/cjs/ClassRegistry.js.map +1 -1
  39. package/lib/cjs/CloudSqlite.d.ts +350 -350
  40. package/lib/cjs/CloudSqlite.d.ts.map +1 -1
  41. package/lib/cjs/CloudSqlite.js +153 -152
  42. package/lib/cjs/CloudSqlite.js.map +1 -1
  43. package/lib/cjs/CloudStorageBackend.d.ts +58 -58
  44. package/lib/cjs/CloudStorageBackend.js +173 -173
  45. package/lib/cjs/CloudStorageBackend.js.map +1 -1
  46. package/lib/cjs/CodeService.d.ts +396 -396
  47. package/lib/cjs/CodeService.js +63 -63
  48. package/lib/cjs/CodeService.js.map +1 -1
  49. package/lib/cjs/CodeSpecs.d.ts +55 -50
  50. package/lib/cjs/CodeSpecs.d.ts.map +1 -1
  51. package/lib/cjs/CodeSpecs.js +124 -112
  52. package/lib/cjs/CodeSpecs.js.map +1 -1
  53. package/lib/cjs/ConcurrentQuery.d.ts +13 -13
  54. package/lib/cjs/ConcurrentQuery.js +36 -36
  55. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  56. package/lib/cjs/CustomViewState3dCreator.d.ts +21 -21
  57. package/lib/cjs/CustomViewState3dCreator.js +81 -81
  58. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  59. package/lib/cjs/DevTools.d.ts +71 -71
  60. package/lib/cjs/DevTools.js +154 -154
  61. package/lib/cjs/DevTools.js.map +1 -1
  62. package/lib/cjs/DisplayStyle.d.ts +106 -106
  63. package/lib/cjs/DisplayStyle.js +256 -256
  64. package/lib/cjs/DisplayStyle.js.map +1 -1
  65. package/lib/cjs/ECDb.d.ts +191 -191
  66. package/lib/cjs/ECDb.js +350 -350
  67. package/lib/cjs/ECDb.js.map +1 -1
  68. package/lib/cjs/ECSchemaXmlContext.d.ts +18 -18
  69. package/lib/cjs/ECSchemaXmlContext.js +41 -41
  70. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  71. package/lib/cjs/ECSqlStatement.d.ts +473 -466
  72. package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
  73. package/lib/cjs/ECSqlStatement.js +791 -791
  74. package/lib/cjs/ECSqlStatement.js.map +1 -1
  75. package/lib/cjs/Element.d.ts +1109 -1102
  76. package/lib/cjs/Element.d.ts.map +1 -1
  77. package/lib/cjs/Element.js +1427 -1416
  78. package/lib/cjs/Element.js.map +1 -1
  79. package/lib/cjs/ElementAspect.d.ts +179 -176
  80. package/lib/cjs/ElementAspect.d.ts.map +1 -1
  81. package/lib/cjs/ElementAspect.js +211 -211
  82. package/lib/cjs/ElementAspect.js.map +1 -1
  83. package/lib/cjs/ElementGraphics.d.ts +9 -9
  84. package/lib/cjs/ElementGraphics.js +41 -41
  85. package/lib/cjs/ElementGraphics.js.map +1 -1
  86. package/lib/cjs/ElementTreeWalker.d.ts +162 -162
  87. package/lib/cjs/ElementTreeWalker.js +409 -409
  88. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  89. package/lib/cjs/Entity.d.ts +106 -106
  90. package/lib/cjs/Entity.js +134 -134
  91. package/lib/cjs/Entity.js.map +1 -1
  92. package/lib/cjs/EntityReferences.d.ts +49 -49
  93. package/lib/cjs/EntityReferences.js +95 -95
  94. package/lib/cjs/EntityReferences.js.map +1 -1
  95. package/lib/cjs/ExportGraphics.d.ts +317 -317
  96. package/lib/cjs/ExportGraphics.js +208 -208
  97. package/lib/cjs/ExportGraphics.js.map +1 -1
  98. package/lib/cjs/ExternalSource.d.ts +96 -96
  99. package/lib/cjs/ExternalSource.js +131 -131
  100. package/lib/cjs/ExternalSource.js.map +1 -1
  101. package/lib/cjs/GeoCoordConfig.d.ts +19 -19
  102. package/lib/cjs/GeoCoordConfig.js +85 -85
  103. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  104. package/lib/cjs/GeometrySummary.d.ts +4 -4
  105. package/lib/cjs/GeometrySummary.js +380 -380
  106. package/lib/cjs/GeometrySummary.js.map +1 -1
  107. package/lib/cjs/HubMock.d.ts +94 -94
  108. package/lib/cjs/HubMock.js +222 -222
  109. package/lib/cjs/HubMock.js.map +1 -1
  110. package/lib/cjs/IModelCloneContext.d.ts +8 -8
  111. package/lib/cjs/IModelCloneContext.d.ts.map +1 -1
  112. package/lib/cjs/IModelCloneContext.js +15 -15
  113. package/lib/cjs/IModelCloneContext.js.map +1 -1
  114. package/lib/cjs/IModelDb.d.ts +1210 -1183
  115. package/lib/cjs/IModelDb.d.ts.map +1 -1
  116. package/lib/cjs/IModelDb.js +2386 -2374
  117. package/lib/cjs/IModelDb.js.map +1 -1
  118. package/lib/cjs/IModelElementCloneContext.d.ts +89 -89
  119. package/lib/cjs/IModelElementCloneContext.js +159 -159
  120. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  121. package/lib/cjs/IModelHost.d.ts +369 -370
  122. package/lib/cjs/IModelHost.d.ts.map +1 -1
  123. package/lib/cjs/IModelHost.js +496 -496
  124. package/lib/cjs/IModelHost.js.map +1 -1
  125. package/lib/cjs/IModelJsFs.d.ts +62 -62
  126. package/lib/cjs/IModelJsFs.js +140 -140
  127. package/lib/cjs/IModelJsFs.js.map +1 -1
  128. package/lib/cjs/IpcHost.d.ts +104 -104
  129. package/lib/cjs/IpcHost.js +278 -278
  130. package/lib/cjs/IpcHost.js.map +1 -1
  131. package/lib/cjs/LineStyle.d.ts +311 -311
  132. package/lib/cjs/LineStyle.js +295 -295
  133. package/lib/cjs/LineStyle.js.map +1 -1
  134. package/lib/cjs/LocalHub.d.ts +162 -162
  135. package/lib/cjs/LocalHub.d.ts.map +1 -1
  136. package/lib/cjs/LocalHub.js +585 -587
  137. package/lib/cjs/LocalHub.js.map +1 -1
  138. package/lib/cjs/LocalhostIpcHost.d.ts +20 -20
  139. package/lib/cjs/LocalhostIpcHost.js +81 -81
  140. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  141. package/lib/cjs/Material.d.ts +131 -103
  142. package/lib/cjs/Material.d.ts.map +1 -1
  143. package/lib/cjs/Material.js +181 -147
  144. package/lib/cjs/Material.js.map +1 -1
  145. package/lib/cjs/Model.d.ts +392 -392
  146. package/lib/cjs/Model.js +485 -485
  147. package/lib/cjs/Model.js.map +1 -1
  148. package/lib/cjs/NativeAppStorage.d.ts +51 -51
  149. package/lib/cjs/NativeAppStorage.js +202 -202
  150. package/lib/cjs/NativeAppStorage.js.map +1 -1
  151. package/lib/cjs/NativeHost.d.ts +52 -52
  152. package/lib/cjs/NativeHost.js +163 -163
  153. package/lib/cjs/NativeHost.js.map +1 -1
  154. package/lib/cjs/NavigationRelationship.d.ts +156 -156
  155. package/lib/cjs/NavigationRelationship.js +225 -225
  156. package/lib/cjs/NavigationRelationship.js.map +1 -1
  157. package/lib/cjs/PromiseMemoizer.d.ts +51 -51
  158. package/lib/cjs/PromiseMemoizer.js +101 -101
  159. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  160. package/lib/cjs/PropertyStore.d.ts +132 -132
  161. package/lib/cjs/PropertyStore.js +11 -11
  162. package/lib/cjs/PropertyStore.js.map +1 -1
  163. package/lib/cjs/Relationship.d.ts +416 -416
  164. package/lib/cjs/Relationship.js +494 -494
  165. package/lib/cjs/Relationship.js.map +1 -1
  166. package/lib/cjs/RpcBackend.d.ts +5 -5
  167. package/lib/cjs/RpcBackend.d.ts.map +1 -1
  168. package/lib/cjs/RpcBackend.js +32 -31
  169. package/lib/cjs/RpcBackend.js.map +1 -1
  170. package/lib/cjs/SQLiteDb.d.ts +219 -219
  171. package/lib/cjs/SQLiteDb.js +214 -214
  172. package/lib/cjs/SQLiteDb.js.map +1 -1
  173. package/lib/cjs/Schema.d.ts +55 -55
  174. package/lib/cjs/Schema.js +83 -83
  175. package/lib/cjs/Schema.js.map +1 -1
  176. package/lib/cjs/ServerBasedLocks.d.ts +57 -57
  177. package/lib/cjs/ServerBasedLocks.js +168 -168
  178. package/lib/cjs/ServerBasedLocks.js.map +1 -1
  179. package/lib/cjs/SqliteStatement.d.ts +360 -360
  180. package/lib/cjs/SqliteStatement.js +586 -586
  181. package/lib/cjs/SqliteStatement.js.map +1 -1
  182. package/lib/cjs/Texture.d.ts +58 -58
  183. package/lib/cjs/Texture.js +82 -82
  184. package/lib/cjs/Texture.js.map +1 -1
  185. package/lib/cjs/TileStorage.d.ts +18 -18
  186. package/lib/cjs/TileStorage.js +90 -90
  187. package/lib/cjs/TileStorage.js.map +1 -1
  188. package/lib/cjs/TxnManager.d.ts +202 -202
  189. package/lib/cjs/TxnManager.js +356 -356
  190. package/lib/cjs/TxnManager.js.map +1 -1
  191. package/lib/cjs/ViewDefinition.d.ts +439 -439
  192. package/lib/cjs/ViewDefinition.js +646 -646
  193. package/lib/cjs/ViewDefinition.js.map +1 -1
  194. package/lib/cjs/ViewStateHydrator.d.ts +13 -13
  195. package/lib/cjs/ViewStateHydrator.js +103 -103
  196. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  197. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  198. package/lib/cjs/assets/Settings/Schemas/Cloud.Schema.json +67 -67
  199. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +31 -31
  200. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +52 -52
  201. package/lib/cjs/assets/Settings/backend.setting.json5 +138 -138
  202. package/lib/cjs/core-backend.d.ts +184 -184
  203. package/lib/cjs/core-backend.js +204 -204
  204. package/lib/cjs/core-backend.js.map +1 -1
  205. package/lib/cjs/domains/FunctionalElements.d.ts +101 -101
  206. package/lib/cjs/domains/FunctionalElements.js +145 -145
  207. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  208. package/lib/cjs/domains/FunctionalSchema.d.ts +13 -13
  209. package/lib/cjs/domains/FunctionalSchema.d.ts.map +1 -1
  210. package/lib/cjs/domains/FunctionalSchema.js +40 -40
  211. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  212. package/lib/cjs/domains/GenericElements.d.ts +177 -177
  213. package/lib/cjs/domains/GenericElements.js +263 -263
  214. package/lib/cjs/domains/GenericElements.js.map +1 -1
  215. package/lib/cjs/domains/GenericSchema.d.ts +10 -10
  216. package/lib/cjs/domains/GenericSchema.js +28 -28
  217. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  218. package/lib/cjs/rpc/multipart.d.ts +11 -11
  219. package/lib/cjs/rpc/multipart.d.ts.map +1 -1
  220. package/lib/cjs/rpc/multipart.js +71 -70
  221. package/lib/cjs/rpc/multipart.js.map +1 -1
  222. package/lib/cjs/rpc/tracing.d.ts +28 -28
  223. package/lib/cjs/rpc/tracing.d.ts.map +1 -1
  224. package/lib/cjs/rpc/tracing.js +74 -73
  225. package/lib/cjs/rpc/tracing.js.map +1 -1
  226. package/lib/cjs/rpc/web/logging.d.ts +9 -9
  227. package/lib/cjs/rpc/web/logging.d.ts.map +1 -1
  228. package/lib/cjs/rpc/web/logging.js +43 -42
  229. package/lib/cjs/rpc/web/logging.js.map +1 -1
  230. package/lib/cjs/rpc/web/request.d.ts +6 -6
  231. package/lib/cjs/rpc/web/request.d.ts.map +1 -1
  232. package/lib/cjs/rpc/web/request.js +74 -73
  233. package/lib/cjs/rpc/web/request.js.map +1 -1
  234. package/lib/cjs/rpc/web/response.d.ts +6 -6
  235. package/lib/cjs/rpc/web/response.d.ts.map +1 -1
  236. package/lib/cjs/rpc/web/response.js +106 -105
  237. package/lib/cjs/rpc/web/response.js.map +1 -1
  238. package/lib/cjs/rpc-impl/DevToolsRpcImpl.d.ts +15 -15
  239. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js +32 -32
  240. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  241. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts +47 -47
  242. package/lib/cjs/rpc-impl/IModelReadRpcImpl.d.ts.map +1 -1
  243. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js +294 -291
  244. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  245. package/lib/cjs/rpc-impl/IModelTileRpcImpl.d.ts +22 -22
  246. package/lib/cjs/rpc-impl/IModelTileRpcImpl.d.ts.map +1 -1
  247. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js +205 -202
  248. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  249. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.d.ts +36 -36
  250. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js +168 -168
  251. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  252. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.d.ts +16 -16
  253. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js +43 -43
  254. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  255. package/lib/cjs/rpc-impl/WipRpcImpl.d.ts +15 -15
  256. package/lib/cjs/rpc-impl/WipRpcImpl.js +37 -37
  257. package/lib/cjs/rpc-impl/WipRpcImpl.js.map +1 -1
  258. package/lib/cjs/workspace/Settings.d.ts +186 -186
  259. package/lib/cjs/workspace/Settings.js +155 -155
  260. package/lib/cjs/workspace/Settings.js.map +1 -1
  261. package/lib/cjs/workspace/SettingsSchemas.d.ts +75 -75
  262. package/lib/cjs/workspace/SettingsSchemas.js +191 -191
  263. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  264. package/lib/cjs/workspace/Workspace.d.ts +414 -414
  265. package/lib/cjs/workspace/Workspace.js +543 -543
  266. package/lib/cjs/workspace/Workspace.js.map +1 -1
  267. package/package.json +13 -13
@@ -1,209 +1,209 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
- * See LICENSE.md in the project root for license terms and full copyright notice.
5
- *--------------------------------------------------------------------------------------------*/
6
- /** @packageDocumentation
7
- * @module iModels
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.ExportGraphicsMeshVisitor = exports.ExportGraphics = void 0;
11
- const core_bentley_1 = require("@itwin/core-bentley");
12
- const core_geometry_1 = require("@itwin/core-geometry");
13
- /** Provides utility functions for working with data generated by [IModelDb.exportGraphics]($core-backend)
14
- * @public
15
- */
16
- var ExportGraphics;
17
- (function (ExportGraphics) {
18
- /** Test if ExportPartDisplayInfos have exactly the same values.
19
- * @public
20
- */
21
- function arePartDisplayInfosEqual(lhs, rhs) {
22
- if (lhs.categoryId !== rhs.categoryId)
23
- return false;
24
- if (lhs.subCategoryId !== rhs.subCategoryId)
25
- return false;
26
- if (lhs.materialId !== rhs.materialId)
27
- return false;
28
- if (lhs.elmTransparency !== rhs.elmTransparency)
29
- return false;
30
- if (lhs.lineColor !== rhs.lineColor)
31
- return false;
32
- return true;
33
- }
34
- ExportGraphics.arePartDisplayInfosEqual = arePartDisplayInfosEqual;
35
- /**
36
- * Convert an ExportGraphicsMesh to an IndexedPolyface usable by the geometry API.
37
- * @note The resulting IndexedPolyface may have duplicate points, normals and params. If problematic, call [PolyfaceData.compress]($core-geometry)
38
- * @public
39
- */
40
- function convertToIndexedPolyface(mesh) {
41
- const polyface = core_geometry_1.IndexedPolyface.create(true, true, false, mesh.isTwoSided);
42
- const p = mesh.points;
43
- for (let i = 0; i < p.length; i += 3)
44
- polyface.data.point.pushXYZ(p[i], p[i + 1], p[i + 2]);
45
- const n = mesh.normals;
46
- (0, core_bentley_1.assert)(undefined !== polyface.data.normal);
47
- for (let i = 0; i < n.length; i += 3)
48
- polyface.data.normal.pushXYZ(n[i], n[i + 1], n[i + 2]);
49
- const uv = mesh.params;
50
- (0, core_bentley_1.assert)(undefined !== polyface.data.param);
51
- for (let i = 0; i < uv.length; i += 2)
52
- polyface.data.param.pushXY(uv[i], uv[i + 1]);
53
- const indices = mesh.indices;
54
- const addIndex = (idx) => {
55
- polyface.addPointIndex(idx, true);
56
- polyface.addNormalIndex(idx);
57
- polyface.addParamIndex(idx);
58
- };
59
- for (let i = 0; i < indices.length; i += 3) {
60
- addIndex(indices[i]);
61
- addIndex(indices[i + 1]);
62
- addIndex(indices[i + 2]);
63
- polyface.terminateFacet(false);
64
- }
65
- return polyface;
66
- }
67
- ExportGraphics.convertToIndexedPolyface = convertToIndexedPolyface;
68
- })(ExportGraphics = exports.ExportGraphics || (exports.ExportGraphics = {}));
69
- /**
70
- * * Iterator to walk the facets of an ExportGraphicsMesh and present them to the world as if visiting a Polyface.
71
- * * Because the ExportGraphicsMesh has limited data:
72
- * * There is no auxData in this visitor.
73
- * * There is no color in this visitor.
74
- * * All edgeVisible are true.
75
- * @public
76
- */
77
- class ExportGraphicsMeshVisitor extends core_geometry_1.PolyfaceData {
78
- // to be called from static factory method that validates the polyface ...
79
- constructor(facets, numWrap) {
80
- super(facets.normals.length > 0, facets.params.length > 0, false, facets.isTwoSided);
81
- this._polyface = facets;
82
- this._numWrap = numWrap;
83
- this._nextFacetIndex = 0;
84
- this._currentFacetIndex = -1;
85
- this.twoSided = facets.isTwoSided;
86
- this.reset();
87
- }
88
- /** Create a visitor for iterating the facets of `polyface`, with indicated number of points to be added to each facet to produce closed point arrays
89
- * Typical wrap counts are:
90
- * * 0 -- leave the point arrays with "missing final edge"
91
- * * 1 -- add point 0 as closure point
92
- * * 2 -- add points 0 and 1 as closure and wrap point. This is useful when vertex visit requires two adjacent vectors, e.g. for cross products.
93
- */
94
- static create(polyface, numWrap) {
95
- return new ExportGraphicsMeshVisitor(polyface, numWrap);
96
- }
97
- /** Reset the iterator to start at the first facet of the polyface. */
98
- reset() {
99
- this.moveToReadIndex(0);
100
- this._nextFacetIndex = 0; // so immediate moveToNextFacet stays here.
101
- }
102
- /** Select a facet by simple index. */
103
- moveToReadIndex(facetIndex) {
104
- if (facetIndex < 0 || 2 + facetIndex * 3 >= this._polyface.indices.length)
105
- return false;
106
- this._currentFacetIndex = facetIndex;
107
- this._nextFacetIndex = facetIndex + 1;
108
- this.point.length = 0;
109
- const points = this.point;
110
- points.length = 0;
111
- this.pointIndex.length = 0;
112
- this.point.length = 0;
113
- this.edgeVisible.length = 0;
114
- const sourcePoints = this._polyface.points;
115
- const indices = this._polyface.indices;
116
- const i0 = 3 * facetIndex;
117
- for (let i = i0; i < i0 + 3; i++) {
118
- const k = 3 * indices[i];
119
- this.pointIndex.push(indices[i]);
120
- this.point.pushXYZ(sourcePoints[k], sourcePoints[k + 1], sourcePoints[k + 2]);
121
- this.edgeVisible.push(true);
122
- }
123
- for (let i = 0; i < this._numWrap; i++) {
124
- this.point.pushFromGrowableXYZArray(this.point, i);
125
- }
126
- const sourceParams = this._polyface.params;
127
- if (sourceParams.length > 0 && this.paramIndex && this.param) {
128
- this.paramIndex.length = 0;
129
- this.param.length = 0;
130
- for (let i = i0; i < i0 + 3; i++) {
131
- const k = 2 * indices[i];
132
- this.paramIndex.push(indices[i]);
133
- this.param.pushXY(sourceParams[k], sourceParams[k + 1]);
134
- }
135
- for (let i = 0; i < this._numWrap; i++) {
136
- this.param.pushFromGrowableXYArray(this.param, i);
137
- }
138
- }
139
- const sourceNormals = this._polyface.normals;
140
- if (sourceNormals.length > 0 && this.normalIndex && this.normal) {
141
- this.normalIndex.length = 0;
142
- this.normal.length = 0;
143
- for (let i = i0; i < i0 + 3; i++) {
144
- const k = 3 * indices[i];
145
- this.normalIndex.push(indices[i]);
146
- this.normal.pushXYZ(sourceNormals[k], sourceNormals[k + 1], sourceNormals[k + 2]);
147
- }
148
- for (let i = 0; i < this._numWrap; i++) {
149
- this.normal.pushFromGrowableXYZArray(this.normal, i);
150
- }
151
- }
152
- return true;
153
- }
154
- moveToNextFacet() {
155
- return this.moveToReadIndex(this._nextFacetIndex);
156
- }
157
- /** Set the number of vertices to replicate in visitor arrays. */
158
- setNumWrap(numWrap) { this._numWrap = numWrap; }
159
- /** Return the index (in the client polyface) of the current facet */
160
- currentReadIndex() { return this._currentFacetIndex; }
161
- /** Return the point index of vertex i within the currently loaded facet */
162
- clientPointIndex(i) { return this.pointIndex[i]; }
163
- /** Return the param index of vertex i within the currently loaded facet.
164
- * Use the artificial paramIndex, which matches pointIndex.
165
- */
166
- clientParamIndex(i) { return this.paramIndex ? this.paramIndex[i] : -1; }
167
- /** Return the normal index of vertex i within the currently loaded facet.
168
- * Use the artificial paramIndex, which matches pointIndex.
169
- */
170
- clientNormalIndex(i) { return this.normalIndex ? this.normalIndex[i] : -1; }
171
- /** Return the color index of vertex i within the currently loaded facet */
172
- clientColorIndex(_i) { return 1; }
173
- /** Return the aux data index of vertex i within the currently loaded facet */
174
- clientAuxIndex(_i) { return -1; }
175
- /** return the client polyface */
176
- clientPolyface() { return undefined; }
177
- /** clear the contents of all arrays. Use this along with transferDataFrom methods to build up new facets */
178
- clearArrays() {
179
- if (this.point !== undefined)
180
- this.point.length = 0;
181
- if (this.param !== undefined)
182
- this.param.length = 0;
183
- if (this.normal !== undefined)
184
- this.normal.length = 0;
185
- // ignore color and aux -- they never exist.
186
- }
187
- /** transfer interpolated data from the other visitor.
188
- * * all data values are interpolated at `fraction` between `other` values at index0 and index1.
189
- */
190
- pushInterpolatedDataFrom(other, index0, fraction, index1) {
191
- this.point.pushInterpolatedFromGrowableXYZArray(other.point, index0, fraction, index1);
192
- if (this.param && other.param && index0 < other.param.length && index1 < other.param.length)
193
- this.param.pushInterpolatedFromGrowableXYArray(other.param, index0, fraction, index1);
194
- if (this.normal && other.normal && index0 < other.normal.length && index1 < other.normal.length)
195
- this.normal.pushInterpolatedFromGrowableXYZArray(other.normal, index0, fraction, index1);
196
- }
197
- /** transfer data from a specified index of the other visitor as new data in this visitor. */
198
- pushDataFrom(other, index) {
199
- this.point.pushFromGrowableXYZArray(other.point, index);
200
- if (this.color && other.color && index < other.color.length)
201
- this.color.push(other.color[index]);
202
- if (this.param && other.param && index < other.param.length)
203
- this.param.pushFromGrowableXYArray(other.param, index);
204
- if (this.normal && other.normal && index < other.normal.length)
205
- this.normal.pushFromGrowableXYZArray(other.normal, index);
206
- }
207
- }
208
- exports.ExportGraphicsMeshVisitor = ExportGraphicsMeshVisitor;
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ /** @packageDocumentation
7
+ * @module iModels
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.ExportGraphicsMeshVisitor = exports.ExportGraphics = void 0;
11
+ const core_bentley_1 = require("@itwin/core-bentley");
12
+ const core_geometry_1 = require("@itwin/core-geometry");
13
+ /** Provides utility functions for working with data generated by [IModelDb.exportGraphics]($core-backend)
14
+ * @public
15
+ */
16
+ var ExportGraphics;
17
+ (function (ExportGraphics) {
18
+ /** Test if ExportPartDisplayInfos have exactly the same values.
19
+ * @public
20
+ */
21
+ function arePartDisplayInfosEqual(lhs, rhs) {
22
+ if (lhs.categoryId !== rhs.categoryId)
23
+ return false;
24
+ if (lhs.subCategoryId !== rhs.subCategoryId)
25
+ return false;
26
+ if (lhs.materialId !== rhs.materialId)
27
+ return false;
28
+ if (lhs.elmTransparency !== rhs.elmTransparency)
29
+ return false;
30
+ if (lhs.lineColor !== rhs.lineColor)
31
+ return false;
32
+ return true;
33
+ }
34
+ ExportGraphics.arePartDisplayInfosEqual = arePartDisplayInfosEqual;
35
+ /**
36
+ * Convert an ExportGraphicsMesh to an IndexedPolyface usable by the geometry API.
37
+ * @note The resulting IndexedPolyface may have duplicate points, normals and params. If problematic, call [PolyfaceData.compress]($core-geometry)
38
+ * @public
39
+ */
40
+ function convertToIndexedPolyface(mesh) {
41
+ const polyface = core_geometry_1.IndexedPolyface.create(true, true, false, mesh.isTwoSided);
42
+ const p = mesh.points;
43
+ for (let i = 0; i < p.length; i += 3)
44
+ polyface.data.point.pushXYZ(p[i], p[i + 1], p[i + 2]);
45
+ const n = mesh.normals;
46
+ (0, core_bentley_1.assert)(undefined !== polyface.data.normal);
47
+ for (let i = 0; i < n.length; i += 3)
48
+ polyface.data.normal.pushXYZ(n[i], n[i + 1], n[i + 2]);
49
+ const uv = mesh.params;
50
+ (0, core_bentley_1.assert)(undefined !== polyface.data.param);
51
+ for (let i = 0; i < uv.length; i += 2)
52
+ polyface.data.param.pushXY(uv[i], uv[i + 1]);
53
+ const indices = mesh.indices;
54
+ const addIndex = (idx) => {
55
+ polyface.addPointIndex(idx, true);
56
+ polyface.addNormalIndex(idx);
57
+ polyface.addParamIndex(idx);
58
+ };
59
+ for (let i = 0; i < indices.length; i += 3) {
60
+ addIndex(indices[i]);
61
+ addIndex(indices[i + 1]);
62
+ addIndex(indices[i + 2]);
63
+ polyface.terminateFacet(false);
64
+ }
65
+ return polyface;
66
+ }
67
+ ExportGraphics.convertToIndexedPolyface = convertToIndexedPolyface;
68
+ })(ExportGraphics = exports.ExportGraphics || (exports.ExportGraphics = {}));
69
+ /**
70
+ * * Iterator to walk the facets of an ExportGraphicsMesh and present them to the world as if visiting a Polyface.
71
+ * * Because the ExportGraphicsMesh has limited data:
72
+ * * There is no auxData in this visitor.
73
+ * * There is no color in this visitor.
74
+ * * All edgeVisible are true.
75
+ * @public
76
+ */
77
+ class ExportGraphicsMeshVisitor extends core_geometry_1.PolyfaceData {
78
+ // to be called from static factory method that validates the polyface ...
79
+ constructor(facets, numWrap) {
80
+ super(facets.normals.length > 0, facets.params.length > 0, false, facets.isTwoSided);
81
+ this._polyface = facets;
82
+ this._numWrap = numWrap;
83
+ this._nextFacetIndex = 0;
84
+ this._currentFacetIndex = -1;
85
+ this.twoSided = facets.isTwoSided;
86
+ this.reset();
87
+ }
88
+ /** Create a visitor for iterating the facets of `polyface`, with indicated number of points to be added to each facet to produce closed point arrays
89
+ * Typical wrap counts are:
90
+ * * 0 -- leave the point arrays with "missing final edge"
91
+ * * 1 -- add point 0 as closure point
92
+ * * 2 -- add points 0 and 1 as closure and wrap point. This is useful when vertex visit requires two adjacent vectors, e.g. for cross products.
93
+ */
94
+ static create(polyface, numWrap) {
95
+ return new ExportGraphicsMeshVisitor(polyface, numWrap);
96
+ }
97
+ /** Reset the iterator to start at the first facet of the polyface. */
98
+ reset() {
99
+ this.moveToReadIndex(0);
100
+ this._nextFacetIndex = 0; // so immediate moveToNextFacet stays here.
101
+ }
102
+ /** Select a facet by simple index. */
103
+ moveToReadIndex(facetIndex) {
104
+ if (facetIndex < 0 || 2 + facetIndex * 3 >= this._polyface.indices.length)
105
+ return false;
106
+ this._currentFacetIndex = facetIndex;
107
+ this._nextFacetIndex = facetIndex + 1;
108
+ this.point.length = 0;
109
+ const points = this.point;
110
+ points.length = 0;
111
+ this.pointIndex.length = 0;
112
+ this.point.length = 0;
113
+ this.edgeVisible.length = 0;
114
+ const sourcePoints = this._polyface.points;
115
+ const indices = this._polyface.indices;
116
+ const i0 = 3 * facetIndex;
117
+ for (let i = i0; i < i0 + 3; i++) {
118
+ const k = 3 * indices[i];
119
+ this.pointIndex.push(indices[i]);
120
+ this.point.pushXYZ(sourcePoints[k], sourcePoints[k + 1], sourcePoints[k + 2]);
121
+ this.edgeVisible.push(true);
122
+ }
123
+ for (let i = 0; i < this._numWrap; i++) {
124
+ this.point.pushFromGrowableXYZArray(this.point, i);
125
+ }
126
+ const sourceParams = this._polyface.params;
127
+ if (sourceParams.length > 0 && this.paramIndex && this.param) {
128
+ this.paramIndex.length = 0;
129
+ this.param.length = 0;
130
+ for (let i = i0; i < i0 + 3; i++) {
131
+ const k = 2 * indices[i];
132
+ this.paramIndex.push(indices[i]);
133
+ this.param.pushXY(sourceParams[k], sourceParams[k + 1]);
134
+ }
135
+ for (let i = 0; i < this._numWrap; i++) {
136
+ this.param.pushFromGrowableXYArray(this.param, i);
137
+ }
138
+ }
139
+ const sourceNormals = this._polyface.normals;
140
+ if (sourceNormals.length > 0 && this.normalIndex && this.normal) {
141
+ this.normalIndex.length = 0;
142
+ this.normal.length = 0;
143
+ for (let i = i0; i < i0 + 3; i++) {
144
+ const k = 3 * indices[i];
145
+ this.normalIndex.push(indices[i]);
146
+ this.normal.pushXYZ(sourceNormals[k], sourceNormals[k + 1], sourceNormals[k + 2]);
147
+ }
148
+ for (let i = 0; i < this._numWrap; i++) {
149
+ this.normal.pushFromGrowableXYZArray(this.normal, i);
150
+ }
151
+ }
152
+ return true;
153
+ }
154
+ moveToNextFacet() {
155
+ return this.moveToReadIndex(this._nextFacetIndex);
156
+ }
157
+ /** Set the number of vertices to replicate in visitor arrays. */
158
+ setNumWrap(numWrap) { this._numWrap = numWrap; }
159
+ /** Return the index (in the client polyface) of the current facet */
160
+ currentReadIndex() { return this._currentFacetIndex; }
161
+ /** Return the point index of vertex i within the currently loaded facet */
162
+ clientPointIndex(i) { return this.pointIndex[i]; }
163
+ /** Return the param index of vertex i within the currently loaded facet.
164
+ * Use the artificial paramIndex, which matches pointIndex.
165
+ */
166
+ clientParamIndex(i) { return this.paramIndex ? this.paramIndex[i] : -1; }
167
+ /** Return the normal index of vertex i within the currently loaded facet.
168
+ * Use the artificial paramIndex, which matches pointIndex.
169
+ */
170
+ clientNormalIndex(i) { return this.normalIndex ? this.normalIndex[i] : -1; }
171
+ /** Return the color index of vertex i within the currently loaded facet */
172
+ clientColorIndex(_i) { return 1; }
173
+ /** Return the aux data index of vertex i within the currently loaded facet */
174
+ clientAuxIndex(_i) { return -1; }
175
+ /** return the client polyface */
176
+ clientPolyface() { return undefined; }
177
+ /** clear the contents of all arrays. Use this along with transferDataFrom methods to build up new facets */
178
+ clearArrays() {
179
+ if (this.point !== undefined)
180
+ this.point.length = 0;
181
+ if (this.param !== undefined)
182
+ this.param.length = 0;
183
+ if (this.normal !== undefined)
184
+ this.normal.length = 0;
185
+ // ignore color and aux -- they never exist.
186
+ }
187
+ /** transfer interpolated data from the other visitor.
188
+ * * all data values are interpolated at `fraction` between `other` values at index0 and index1.
189
+ */
190
+ pushInterpolatedDataFrom(other, index0, fraction, index1) {
191
+ this.point.pushInterpolatedFromGrowableXYZArray(other.point, index0, fraction, index1);
192
+ if (this.param && other.param && index0 < other.param.length && index1 < other.param.length)
193
+ this.param.pushInterpolatedFromGrowableXYArray(other.param, index0, fraction, index1);
194
+ if (this.normal && other.normal && index0 < other.normal.length && index1 < other.normal.length)
195
+ this.normal.pushInterpolatedFromGrowableXYZArray(other.normal, index0, fraction, index1);
196
+ }
197
+ /** transfer data from a specified index of the other visitor as new data in this visitor. */
198
+ pushDataFrom(other, index) {
199
+ this.point.pushFromGrowableXYZArray(other.point, index);
200
+ if (this.color && other.color && index < other.color.length)
201
+ this.color.push(other.color[index]);
202
+ if (this.param && other.param && index < other.param.length)
203
+ this.param.pushFromGrowableXYArray(other.param, index);
204
+ if (this.normal && other.normal && index < other.normal.length)
205
+ this.normal.pushFromGrowableXYZArray(other.normal, index);
206
+ }
207
+ }
208
+ exports.ExportGraphicsMeshVisitor = ExportGraphicsMeshVisitor;
209
209
  //# sourceMappingURL=ExportGraphics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ExportGraphics.js","sourceRoot":"","sources":["../../src/ExportGraphics.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 iModels\r\n */\r\n\r\nimport { assert, Id64Array, Id64String } from \"@itwin/core-bentley\";\r\nimport { IndexedPolyface, Polyface, PolyfaceData, PolyfaceVisitor } from \"@itwin/core-geometry\";\r\nimport { ColorDefProps, GeometryClass } from \"@itwin/core-common\";\r\n\r\n/** A collection of line segments, suitable for direct use with graphics APIs.\r\n * The structure of this data matches GL_LINES in OpenGL.\r\n * See [IModelDb.exportGraphics]($core-backend)\r\n * @public\r\n */\r\nexport interface ExportGraphicsLines {\r\n /** Zero-based vertex indices, every two indices represent a line segment */\r\n indices: Int32Array;\r\n /** Vertices for these lines, laid out in the pattern XYZXYZ */\r\n points: Float64Array;\r\n}\r\n\r\n/** Info provided to ExportLinesFunction about linework graphics.\r\n * See [IModelDb.exportGraphics]($core-backend)\r\n * @public\r\n */\r\nexport interface ExportLinesInfo {\r\n /** The element ID for the element the graphics originated from */\r\n elementId: Id64String;\r\n /** ID for the [SubCategory]($core-backend) for these graphics */\r\n subCategory: Id64String;\r\n /** The color and transparency for these graphics */\r\n color: ColorDefProps;\r\n /** GeometryClass for these graphics */\r\n geometryClass: GeometryClass;\r\n /** The linework for these graphics */\r\n lines: ExportGraphicsLines;\r\n}\r\n\r\n/** A callback function that receives generated line graphics.\r\n * See [IModelDb.exportGraphics]($core-backend)\r\n * @public\r\n */\r\nexport type ExportLinesFunction = (info: ExportLinesInfo) => void;\r\n\r\n/** A triangulated mesh with unified indices, suitable for direct use with graphics APIs.\r\n * See [IModelDb.exportGraphics]($core-backend)\r\n * @public\r\n */\r\nexport interface ExportGraphicsMesh {\r\n /** Zero-based vertex indices, every three indices represent a triangle */\r\n indices: Int32Array;\r\n /** Vertices for this mesh, laid out in the pattern XYZXYZ */\r\n points: Float64Array;\r\n /** Normals for this mesh, laid out in the pattern XYZXYZ */\r\n normals: Float32Array;\r\n /** Parameters (uvs) for this mesh, laid out in the pattern XYXY */\r\n params: Float32Array;\r\n /** If true, clients should assume both sides of the mesh are visible and not cull backfaces. */\r\n isTwoSided: boolean;\r\n}\r\n\r\n/** Info provided to ExportGraphicsFunction about graphics.\r\n * See [IModelDb.exportGraphics]($core-backend)\r\n * @public\r\n */\r\nexport interface ExportGraphicsInfo {\r\n /** The element ID for the element the graphics originated from */\r\n elementId: Id64String;\r\n /** ID for the [SubCategory]($core-backend) for these graphics */\r\n subCategory: Id64String;\r\n /** The color and transparency for these graphics */\r\n color: ColorDefProps;\r\n /** GeometryClass for these graphics */\r\n geometryClass: GeometryClass;\r\n /** If defined, ID for the [RenderMaterialElement]($core-backend) for these graphics */\r\n materialId?: Id64String;\r\n /** If defined, ID for the [Texture]($core-backend) for these graphics */\r\n textureId?: Id64String;\r\n /** The mesh for these graphics */\r\n mesh: ExportGraphicsMesh;\r\n}\r\n\r\n/** Information about the base display properties when a [GeometryPart]($core-backend) was\r\n * referenced. This is intended to be used with [IModelDb.exportPartGraphics]($core-backend).\r\n * * If two ExportPartInstanceInfo have the same ExportPartDisplayInfos, they will result in the\r\n * same graphics (with a different transform).\r\n * * If two ExportPartInstanceInfo have different ExportPartDisplayInfos, they may result in different\r\n * graphics.\r\n * @public\r\n */\r\nexport interface ExportPartDisplayInfo {\r\n categoryId: Id64String;\r\n subCategoryId: Id64String;\r\n geometryClass: GeometryClass;\r\n materialId: Id64String;\r\n elmTransparency: number;\r\n lineColor: number;\r\n}\r\n\r\n/** Information about references to [GeometryPart]($core-backend) elements found during\r\n * a call to [IModelDb.exportGraphics]($core-backend).\r\n * See [IModelDb.exportPartGraphics]($core-backend) for the intended use case.\r\n * @public\r\n */\r\nexport interface ExportPartInstanceInfo {\r\n /** ID for the [GeometryPart]($core-backend) */\r\n partId: Id64String;\r\n /** ID for the element that contained the reference to the [GeometryPart]($core-backend) */\r\n partInstanceId: Id64String;\r\n /** The base display properties when the [GeometryPart]($core-backend) was referenced. */\r\n displayProps: ExportPartDisplayInfo;\r\n /** A row-major storage 4x3 transform for this instance.\r\n * See export-gltf under test-apps in the iTwin.js monorepo for a working reference.\r\n */\r\n transform?: Float64Array;\r\n}\r\n\r\n/** A callback function that receives generated graphics.\r\n * See [IModelDb.exportGraphics]($core-backend)\r\n * @public\r\n */\r\nexport type ExportGraphicsFunction = (info: ExportGraphicsInfo) => void;\r\n\r\n/** Parameters for [IModelDb.exportGraphics]($core-backend)\r\n * @public\r\n */\r\nexport interface ExportGraphicsOptions {\r\n /** The source elements for the exported graphics */\r\n elementIdArray: Id64Array;\r\n /** A function to call for each unique element ID, color and texture combination */\r\n onGraphics: ExportGraphicsFunction;\r\n /** An optional function to call if line graphics are desired. */\r\n onLineGraphics?: ExportLinesFunction;\r\n /** If supplied, any references to [GeometryPart]($core-backend) elements found will be\r\n * recorded in this array. In this case, graphics that would result from the GeometryPart\r\n * will not be supplied via onGraphics. See [IModelDb.exportPartGraphics]($core-backend)\r\n */\r\n partInstanceArray?: ExportPartInstanceInfo[];\r\n /** Max distance from a face to the original geometry, see [StrokeOptions]($core-geometry).\r\n * If not supplied, defaults to zero and angleTol will control the quality of the resulting mesh.\r\n */\r\n chordTol?: number;\r\n /** Max angle difference in radians for approximated face, see [StrokeOptions]($core-geometry).\r\n * If not supplied, defaults to PI/12 (15 degrees).\r\n */\r\n angleTol?: number;\r\n /** Max length of any edge in generated faces, see [StrokeOptions]($core-geometry).\r\n * If not supplied, there is no maximum length of an edge. Supplying this value can greatly increase the\r\n * size of the resulting geometry, and should only be done in cases where necessary (if you don't know\r\n * that it's necessary, it's almost certainly not!)\r\n */\r\n maxEdgeLength?: number;\r\n /** The longest dimension of a line style's largest component must be at least this size in order for\r\n * exportGraphics to evaluate and generate its graphics. If undefined, this defaults to 0.1.\r\n * Line styles can evaluate to 3D geometry that clients expect to receive from exportGraphics, but they\r\n * can also generate gigabytes of mesh data when line styles with small components are applied to long\r\n * line strings.\r\n */\r\n minLineStyleComponentSize?: number;\r\n /** Max distance between mesh vertices for them to be collapsed.\r\n * Meshes stored in GeometryStreams are unaffected by StrokeOptions settings. If decimationTol is undefined,\r\n * they are output from exportGraphics without any reduction in quality and can be too detailed for\r\n * some uses. However, decimation is a destructive operation that can introduce gaps and other visual\r\n * anomalies so it is important to choose an appropriate setting for your use case.\r\n */\r\n decimationTol?: number;\r\n /** BRep features with bounding boxes smaller than this size will not generate graphics.\r\n * This option can be used to ignore expensive details from [BRepEntity.DataProps]($core-common)\r\n * like screws and screw holes.\r\n */\r\n minBRepFeatureSize?: number;\r\n}\r\n\r\n/** Info provided to ExportPartFunction about graphics.\r\n * See [IModelDb.exportPartGraphics]($core-backend)\r\n * @public\r\n */\r\nexport interface ExportPartInfo {\r\n /** The color and transparency for these graphics */\r\n color: ColorDefProps;\r\n /** GeometryClass for these graphics */\r\n geometryClass: GeometryClass;\r\n /** If defined, ID for the [RenderMaterialElement]($core-backend) for these graphics */\r\n materialId?: Id64String;\r\n /** If defined, ID for the [Texture]($core-backend) for these graphics */\r\n textureId?: Id64String;\r\n /** The mesh for these graphics */\r\n mesh: ExportGraphicsMesh;\r\n}\r\n\r\n/** A callback function that receives generated graphics for a [GeometryPart]($core-backend).\r\n * See [IModelDb.exportPartGraphics]($core-backend)\r\n * @public\r\n */\r\nexport type ExportPartFunction = (info: ExportPartInfo) => void;\r\n\r\n/** Info provided to ExportPartFunction about line graphics.\r\n * See [IModelDb.exportPartGraphics]($core-backend)\r\n * @public\r\n */\r\nexport interface ExportPartLinesInfo {\r\n /** The color and transparency for these graphics */\r\n color: ColorDefProps;\r\n /** GeometryClass for these graphics */\r\n geometryClass: GeometryClass;\r\n /** The linework for these graphics */\r\n lines: ExportGraphicsLines;\r\n}\r\n\r\n/** A callback function that receives generated line graphics for a [GeometryPart]($core-backend).\r\n * See [IModelDb.exportPartGraphics]($core-backend)\r\n * @public\r\n */\r\nexport type ExportPartLinesFunction = (info: ExportPartLinesInfo) => void;\r\n\r\n/** Parameters for [IModelDb.exportPartGraphics]($core-backend)\r\n * @public\r\n */\r\nexport interface ExportPartGraphicsOptions {\r\n /** The ID for the source [GeometryPart]($core-backend) */\r\n elementId: Id64String;\r\n /** The base display properties to use for generating the graphics. This should come from an\r\n * ExportPartInstanceProps generated by [IModelDb.exportGraphics]($core-backend)\r\n */\r\n displayProps: ExportPartDisplayInfo;\r\n /** A function to call for each unique color and texture combination. */\r\n onPartGraphics: ExportPartFunction;\r\n /** An optional function to call if line graphics are desired. */\r\n onPartLineGraphics?: ExportPartLinesFunction;\r\n /** Max distance from a face to the original geometry, see [StrokeOptions]($core-geometry).\r\n * If not supplied, defaults to zero and angleTol will control the quality of the resulting mesh.\r\n */\r\n chordTol?: number;\r\n /** Max angle difference in radians for approximated face, see [StrokeOptions]($core-geometry).\r\n * If not supplied, defaults to PI/12 (15 degrees).\r\n */\r\n angleTol?: number;\r\n /** Max length of any edge in generated faces, see [StrokeOptions]($core-geometry)\r\n * If not supplied, there is no maximum length of an edge. Supplying this value can greatly increase the\r\n * size of the resulting geometry, and should only be done in cases where necessary (if you don't know\r\n * that it's necessary, it's almost certainly not!)\r\n */\r\n maxEdgeLength?: number;\r\n /** The longest dimension of a line style's largest component must be at least this size in order for\r\n * exportGraphics to evaluate and generate its graphics. If undefined, this defaults to 0.1.\r\n * Line styles can evaluate to 3D geometry that clients expect to receive from exportGraphics, but they\r\n * can also generate gigabytes of mesh data when line styles with small components are applied to long\r\n * line strings.\r\n */\r\n minLineStyleComponentSize?: number;\r\n /** Max distance between mesh vertices for them to be collapsed.\r\n * Meshes stored in GeometryStreams are unaffected by StrokeOptions settings. If decimationTol is undefined,\r\n * they are output from exportGraphics without any reduction in quality and can be too detailed for\r\n * some uses. However, decimation is a destructive operation that can introduce gaps and other visual\r\n * anomalies so it is important to choose an appropriate setting for your use case.\r\n */\r\n decimationTol?: number;\r\n /** BRep features with bounding boxes smaller than this size will not generate graphics.\r\n * This option can be used to ignore expensive details from [BRepEntity.DataProps]($core-common)\r\n * like screws and screw holes.\r\n */\r\n minBRepFeatureSize?: number;\r\n}\r\n\r\n/** Provides utility functions for working with data generated by [IModelDb.exportGraphics]($core-backend)\r\n * @public\r\n */\r\nexport namespace ExportGraphics {\r\n /** Test if ExportPartDisplayInfos have exactly the same values.\r\n * @public\r\n */\r\n export function arePartDisplayInfosEqual(lhs: ExportPartDisplayInfo, rhs: ExportPartDisplayInfo): boolean {\r\n if (lhs.categoryId !== rhs.categoryId)\r\n return false;\r\n if (lhs.subCategoryId !== rhs.subCategoryId)\r\n return false;\r\n if (lhs.materialId !== rhs.materialId)\r\n return false;\r\n if (lhs.elmTransparency !== rhs.elmTransparency)\r\n return false;\r\n if (lhs.lineColor !== rhs.lineColor)\r\n return false;\r\n return true;\r\n }\r\n\r\n /**\r\n * Convert an ExportGraphicsMesh to an IndexedPolyface usable by the geometry API.\r\n * @note The resulting IndexedPolyface may have duplicate points, normals and params. If problematic, call [PolyfaceData.compress]($core-geometry)\r\n * @public\r\n */\r\n export function convertToIndexedPolyface(mesh: ExportGraphicsMesh): IndexedPolyface {\r\n const polyface = IndexedPolyface.create(true, true, false, mesh.isTwoSided);\r\n\r\n const p: Float64Array = mesh.points;\r\n for (let i = 0; i < p.length; i += 3)\r\n polyface.data.point.pushXYZ(p[i], p[i + 1], p[i + 2]);\r\n\r\n const n: Float32Array = mesh.normals;\r\n assert(undefined !== polyface.data.normal);\r\n for (let i = 0; i < n.length; i += 3)\r\n polyface.data.normal.pushXYZ(n[i], n[i + 1], n[i + 2]);\r\n\r\n const uv: Float32Array = mesh.params;\r\n assert(undefined !== polyface.data.param);\r\n for (let i = 0; i < uv.length; i += 2)\r\n polyface.data.param.pushXY(uv[i], uv[i + 1]);\r\n\r\n const indices = mesh.indices;\r\n const addIndex = (idx: number) => {\r\n polyface.addPointIndex(idx, true);\r\n polyface.addNormalIndex(idx);\r\n polyface.addParamIndex(idx);\r\n };\r\n for (let i = 0; i < indices.length; i += 3) {\r\n addIndex(indices[i]);\r\n addIndex(indices[i + 1]);\r\n addIndex(indices[i + 2]);\r\n polyface.terminateFacet(false);\r\n }\r\n\r\n return polyface;\r\n }\r\n}\r\n/**\r\n * * Iterator to walk the facets of an ExportGraphicsMesh and present them to the world as if visiting a Polyface.\r\n * * Because the ExportGraphicsMesh has limited data:\r\n * * There is no auxData in this visitor.\r\n * * There is no color in this visitor.\r\n * * All edgeVisible are true.\r\n * @public\r\n */\r\nexport class ExportGraphicsMeshVisitor extends PolyfaceData implements PolyfaceVisitor {\r\n private _currentFacetIndex: number;\r\n private _nextFacetIndex: number;\r\n private _numWrap: number;\r\n private _polyface: ExportGraphicsMesh;\r\n // to be called from static factory method that validates the polyface ...\r\n private constructor(facets: ExportGraphicsMesh, numWrap: number) {\r\n super(facets.normals.length > 0, facets.params.length > 0, false, facets.isTwoSided);\r\n this._polyface = facets;\r\n this._numWrap = numWrap;\r\n\r\n this._nextFacetIndex = 0;\r\n this._currentFacetIndex = -1;\r\n this.twoSided = facets.isTwoSided;\r\n this.reset();\r\n }\r\n /** Create a visitor for iterating the facets of `polyface`, with indicated number of points to be added to each facet to produce closed point arrays\r\n * Typical wrap counts are:\r\n * * 0 -- leave the point arrays with \"missing final edge\"\r\n * * 1 -- add point 0 as closure point\r\n * * 2 -- add points 0 and 1 as closure and wrap point. This is useful when vertex visit requires two adjacent vectors, e.g. for cross products.\r\n */\r\n public static create(polyface: ExportGraphicsMesh, numWrap: number): ExportGraphicsMeshVisitor {\r\n return new ExportGraphicsMeshVisitor(polyface, numWrap);\r\n }\r\n /** Reset the iterator to start at the first facet of the polyface. */\r\n public reset(): void {\r\n this.moveToReadIndex(0);\r\n this._nextFacetIndex = 0; // so immediate moveToNextFacet stays here.\r\n }\r\n /** Select a facet by simple index. */\r\n public moveToReadIndex(facetIndex: number): boolean {\r\n if (facetIndex < 0 || 2 + facetIndex * 3 >= this._polyface.indices.length)\r\n return false;\r\n this._currentFacetIndex = facetIndex;\r\n this._nextFacetIndex = facetIndex + 1;\r\n this.point.length = 0;\r\n const points = this.point;\r\n points.length = 0;\r\n this.pointIndex.length = 0;\r\n this.point.length = 0;\r\n this.edgeVisible.length = 0;\r\n const sourcePoints = this._polyface.points;\r\n const indices = this._polyface.indices;\r\n const i0 = 3 * facetIndex;\r\n for (let i = i0; i < i0 + 3; i++) {\r\n const k = 3 * indices[i];\r\n this.pointIndex.push(indices[i]);\r\n this.point.pushXYZ(sourcePoints[k], sourcePoints[k + 1], sourcePoints[k + 2]);\r\n this.edgeVisible.push(true);\r\n }\r\n for (let i = 0; i < this._numWrap; i++) {\r\n this.point.pushFromGrowableXYZArray(this.point, i);\r\n }\r\n\r\n const sourceParams = this._polyface.params;\r\n if (sourceParams.length > 0 && this.paramIndex && this.param) {\r\n this.paramIndex.length = 0;\r\n this.param.length = 0;\r\n for (let i = i0; i < i0 + 3; i++) {\r\n const k = 2 * indices[i];\r\n this.paramIndex.push(indices[i]);\r\n this.param.pushXY(sourceParams[k], sourceParams[k + 1]);\r\n }\r\n for (let i = 0; i < this._numWrap; i++) {\r\n this.param.pushFromGrowableXYArray(this.param, i);\r\n }\r\n }\r\n\r\n const sourceNormals = this._polyface.normals;\r\n if (sourceNormals.length > 0 && this.normalIndex && this.normal) {\r\n this.normalIndex.length = 0;\r\n this.normal.length = 0;\r\n for (let i = i0; i < i0 + 3; i++) {\r\n const k = 3 * indices[i];\r\n this.normalIndex.push(indices[i]);\r\n this.normal.pushXYZ(sourceNormals[k], sourceNormals[k + 1], sourceNormals[k + 2]);\r\n }\r\n for (let i = 0; i < this._numWrap; i++) {\r\n this.normal.pushFromGrowableXYZArray(this.normal, i);\r\n }\r\n }\r\n return true;\r\n }\r\n public moveToNextFacet(): boolean {\r\n return this.moveToReadIndex(this._nextFacetIndex);\r\n }\r\n /** Set the number of vertices to replicate in visitor arrays. */\r\n public setNumWrap(numWrap: number): void { this._numWrap = numWrap; }\r\n\r\n /** Return the index (in the client polyface) of the current facet */\r\n public currentReadIndex(): number { return this._currentFacetIndex; }\r\n /** Return the point index of vertex i within the currently loaded facet */\r\n public clientPointIndex(i: number): number { return this.pointIndex[i]; }\r\n /** Return the param index of vertex i within the currently loaded facet.\r\n * Use the artificial paramIndex, which matches pointIndex.\r\n */\r\n public clientParamIndex(i: number): number { return this.paramIndex ? this.paramIndex[i] : -1; }\r\n /** Return the normal index of vertex i within the currently loaded facet.\r\n * Use the artificial paramIndex, which matches pointIndex.\r\n */\r\n public clientNormalIndex(i: number): number { return this.normalIndex ? this.normalIndex[i] : -1; }\r\n /** Return the color index of vertex i within the currently loaded facet */\r\n public clientColorIndex(_i: number): number { return 1; }\r\n /** Return the aux data index of vertex i within the currently loaded facet */\r\n public clientAuxIndex(_i: number): number { return -1; }\r\n\r\n /** return the client polyface */\r\n public clientPolyface(): Polyface { return (undefined as unknown) as Polyface; }\r\n /** clear the contents of all arrays. Use this along with transferDataFrom methods to build up new facets */\r\n public clearArrays(): void {\r\n if (this.point !== undefined)\r\n this.point.length = 0;\r\n if (this.param !== undefined)\r\n this.param.length = 0;\r\n if (this.normal !== undefined)\r\n this.normal.length = 0;\r\n // ignore color and aux -- they never exist.\r\n }\r\n /** transfer interpolated data from the other visitor.\r\n * * all data values are interpolated at `fraction` between `other` values at index0 and index1.\r\n */\r\n public pushInterpolatedDataFrom(other: PolyfaceVisitor, index0: number, fraction: number, index1: number): void {\r\n this.point.pushInterpolatedFromGrowableXYZArray(other.point, index0, fraction, index1);\r\n if (this.param && other.param && index0 < other.param.length && index1 < other.param.length)\r\n this.param.pushInterpolatedFromGrowableXYArray(other.param, index0, fraction, index1);\r\n if (this.normal && other.normal && index0 < other.normal.length && index1 < other.normal.length)\r\n this.normal.pushInterpolatedFromGrowableXYZArray(other.normal, index0, fraction, index1);\r\n }\r\n /** transfer data from a specified index of the other visitor as new data in this visitor. */\r\n public pushDataFrom(other: PolyfaceVisitor, index: number): void {\r\n this.point.pushFromGrowableXYZArray(other.point, index);\r\n if (this.color && other.color && index < other.color.length)\r\n this.color.push(other.color[index]);\r\n if (this.param && other.param && index < other.param.length)\r\n this.param.pushFromGrowableXYArray(other.param, index);\r\n if (this.normal && other.normal && index < other.normal.length)\r\n this.normal.pushFromGrowableXYZArray(other.normal, index);\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"ExportGraphics.js","sourceRoot":"","sources":["../../src/ExportGraphics.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 iModels\n */\n\nimport { assert, Id64Array, Id64String } from \"@itwin/core-bentley\";\nimport { IndexedPolyface, Polyface, PolyfaceData, PolyfaceVisitor } from \"@itwin/core-geometry\";\nimport { ColorDefProps, GeometryClass } from \"@itwin/core-common\";\n\n/** A collection of line segments, suitable for direct use with graphics APIs.\n * The structure of this data matches GL_LINES in OpenGL.\n * See [IModelDb.exportGraphics]($core-backend)\n * @public\n */\nexport interface ExportGraphicsLines {\n /** Zero-based vertex indices, every two indices represent a line segment */\n indices: Int32Array;\n /** Vertices for these lines, laid out in the pattern XYZXYZ */\n points: Float64Array;\n}\n\n/** Info provided to ExportLinesFunction about linework graphics.\n * See [IModelDb.exportGraphics]($core-backend)\n * @public\n */\nexport interface ExportLinesInfo {\n /** The element ID for the element the graphics originated from */\n elementId: Id64String;\n /** ID for the [SubCategory]($core-backend) for these graphics */\n subCategory: Id64String;\n /** The color and transparency for these graphics */\n color: ColorDefProps;\n /** GeometryClass for these graphics */\n geometryClass: GeometryClass;\n /** The linework for these graphics */\n lines: ExportGraphicsLines;\n}\n\n/** A callback function that receives generated line graphics.\n * See [IModelDb.exportGraphics]($core-backend)\n * @public\n */\nexport type ExportLinesFunction = (info: ExportLinesInfo) => void;\n\n/** A triangulated mesh with unified indices, suitable for direct use with graphics APIs.\n * See [IModelDb.exportGraphics]($core-backend)\n * @public\n */\nexport interface ExportGraphicsMesh {\n /** Zero-based vertex indices, every three indices represent a triangle */\n indices: Int32Array;\n /** Vertices for this mesh, laid out in the pattern XYZXYZ */\n points: Float64Array;\n /** Normals for this mesh, laid out in the pattern XYZXYZ */\n normals: Float32Array;\n /** Parameters (uvs) for this mesh, laid out in the pattern XYXY */\n params: Float32Array;\n /** If true, clients should assume both sides of the mesh are visible and not cull backfaces. */\n isTwoSided: boolean;\n}\n\n/** Info provided to ExportGraphicsFunction about graphics.\n * See [IModelDb.exportGraphics]($core-backend)\n * @public\n */\nexport interface ExportGraphicsInfo {\n /** The element ID for the element the graphics originated from */\n elementId: Id64String;\n /** ID for the [SubCategory]($core-backend) for these graphics */\n subCategory: Id64String;\n /** The color and transparency for these graphics */\n color: ColorDefProps;\n /** GeometryClass for these graphics */\n geometryClass: GeometryClass;\n /** If defined, ID for the [RenderMaterialElement]($core-backend) for these graphics */\n materialId?: Id64String;\n /** If defined, ID for the [Texture]($core-backend) for these graphics */\n textureId?: Id64String;\n /** The mesh for these graphics */\n mesh: ExportGraphicsMesh;\n}\n\n/** Information about the base display properties when a [GeometryPart]($core-backend) was\n * referenced. This is intended to be used with [IModelDb.exportPartGraphics]($core-backend).\n * * If two ExportPartInstanceInfo have the same ExportPartDisplayInfos, they will result in the\n * same graphics (with a different transform).\n * * If two ExportPartInstanceInfo have different ExportPartDisplayInfos, they may result in different\n * graphics.\n * @public\n */\nexport interface ExportPartDisplayInfo {\n categoryId: Id64String;\n subCategoryId: Id64String;\n geometryClass: GeometryClass;\n materialId: Id64String;\n elmTransparency: number;\n lineColor: number;\n}\n\n/** Information about references to [GeometryPart]($core-backend) elements found during\n * a call to [IModelDb.exportGraphics]($core-backend).\n * See [IModelDb.exportPartGraphics]($core-backend) for the intended use case.\n * @public\n */\nexport interface ExportPartInstanceInfo {\n /** ID for the [GeometryPart]($core-backend) */\n partId: Id64String;\n /** ID for the element that contained the reference to the [GeometryPart]($core-backend) */\n partInstanceId: Id64String;\n /** The base display properties when the [GeometryPart]($core-backend) was referenced. */\n displayProps: ExportPartDisplayInfo;\n /** A row-major storage 4x3 transform for this instance.\n * See export-gltf under test-apps in the iTwin.js monorepo for a working reference.\n */\n transform?: Float64Array;\n}\n\n/** A callback function that receives generated graphics.\n * See [IModelDb.exportGraphics]($core-backend)\n * @public\n */\nexport type ExportGraphicsFunction = (info: ExportGraphicsInfo) => void;\n\n/** Parameters for [IModelDb.exportGraphics]($core-backend)\n * @public\n */\nexport interface ExportGraphicsOptions {\n /** The source elements for the exported graphics */\n elementIdArray: Id64Array;\n /** A function to call for each unique element ID, color and texture combination */\n onGraphics: ExportGraphicsFunction;\n /** An optional function to call if line graphics are desired. */\n onLineGraphics?: ExportLinesFunction;\n /** If supplied, any references to [GeometryPart]($core-backend) elements found will be\n * recorded in this array. In this case, graphics that would result from the GeometryPart\n * will not be supplied via onGraphics. See [IModelDb.exportPartGraphics]($core-backend)\n */\n partInstanceArray?: ExportPartInstanceInfo[];\n /** Max distance from a face to the original geometry, see [StrokeOptions]($core-geometry).\n * If not supplied, defaults to zero and angleTol will control the quality of the resulting mesh.\n */\n chordTol?: number;\n /** Max angle difference in radians for approximated face, see [StrokeOptions]($core-geometry).\n * If not supplied, defaults to PI/12 (15 degrees).\n */\n angleTol?: number;\n /** Max length of any edge in generated faces, see [StrokeOptions]($core-geometry).\n * If not supplied, there is no maximum length of an edge. Supplying this value can greatly increase the\n * size of the resulting geometry, and should only be done in cases where necessary (if you don't know\n * that it's necessary, it's almost certainly not!)\n */\n maxEdgeLength?: number;\n /** The longest dimension of a line style's largest component must be at least this size in order for\n * exportGraphics to evaluate and generate its graphics. If undefined, this defaults to 0.1.\n * Line styles can evaluate to 3D geometry that clients expect to receive from exportGraphics, but they\n * can also generate gigabytes of mesh data when line styles with small components are applied to long\n * line strings.\n */\n minLineStyleComponentSize?: number;\n /** Max distance between mesh vertices for them to be collapsed.\n * Meshes stored in GeometryStreams are unaffected by StrokeOptions settings. If decimationTol is undefined,\n * they are output from exportGraphics without any reduction in quality and can be too detailed for\n * some uses. However, decimation is a destructive operation that can introduce gaps and other visual\n * anomalies so it is important to choose an appropriate setting for your use case.\n */\n decimationTol?: number;\n /** BRep features with bounding boxes smaller than this size will not generate graphics.\n * This option can be used to ignore expensive details from [BRepEntity.DataProps]($core-common)\n * like screws and screw holes.\n */\n minBRepFeatureSize?: number;\n}\n\n/** Info provided to ExportPartFunction about graphics.\n * See [IModelDb.exportPartGraphics]($core-backend)\n * @public\n */\nexport interface ExportPartInfo {\n /** The color and transparency for these graphics */\n color: ColorDefProps;\n /** GeometryClass for these graphics */\n geometryClass: GeometryClass;\n /** If defined, ID for the [RenderMaterialElement]($core-backend) for these graphics */\n materialId?: Id64String;\n /** If defined, ID for the [Texture]($core-backend) for these graphics */\n textureId?: Id64String;\n /** The mesh for these graphics */\n mesh: ExportGraphicsMesh;\n}\n\n/** A callback function that receives generated graphics for a [GeometryPart]($core-backend).\n * See [IModelDb.exportPartGraphics]($core-backend)\n * @public\n */\nexport type ExportPartFunction = (info: ExportPartInfo) => void;\n\n/** Info provided to ExportPartFunction about line graphics.\n * See [IModelDb.exportPartGraphics]($core-backend)\n * @public\n */\nexport interface ExportPartLinesInfo {\n /** The color and transparency for these graphics */\n color: ColorDefProps;\n /** GeometryClass for these graphics */\n geometryClass: GeometryClass;\n /** The linework for these graphics */\n lines: ExportGraphicsLines;\n}\n\n/** A callback function that receives generated line graphics for a [GeometryPart]($core-backend).\n * See [IModelDb.exportPartGraphics]($core-backend)\n * @public\n */\nexport type ExportPartLinesFunction = (info: ExportPartLinesInfo) => void;\n\n/** Parameters for [IModelDb.exportPartGraphics]($core-backend)\n * @public\n */\nexport interface ExportPartGraphicsOptions {\n /** The ID for the source [GeometryPart]($core-backend) */\n elementId: Id64String;\n /** The base display properties to use for generating the graphics. This should come from an\n * ExportPartInstanceProps generated by [IModelDb.exportGraphics]($core-backend)\n */\n displayProps: ExportPartDisplayInfo;\n /** A function to call for each unique color and texture combination. */\n onPartGraphics: ExportPartFunction;\n /** An optional function to call if line graphics are desired. */\n onPartLineGraphics?: ExportPartLinesFunction;\n /** Max distance from a face to the original geometry, see [StrokeOptions]($core-geometry).\n * If not supplied, defaults to zero and angleTol will control the quality of the resulting mesh.\n */\n chordTol?: number;\n /** Max angle difference in radians for approximated face, see [StrokeOptions]($core-geometry).\n * If not supplied, defaults to PI/12 (15 degrees).\n */\n angleTol?: number;\n /** Max length of any edge in generated faces, see [StrokeOptions]($core-geometry)\n * If not supplied, there is no maximum length of an edge. Supplying this value can greatly increase the\n * size of the resulting geometry, and should only be done in cases where necessary (if you don't know\n * that it's necessary, it's almost certainly not!)\n */\n maxEdgeLength?: number;\n /** The longest dimension of a line style's largest component must be at least this size in order for\n * exportGraphics to evaluate and generate its graphics. If undefined, this defaults to 0.1.\n * Line styles can evaluate to 3D geometry that clients expect to receive from exportGraphics, but they\n * can also generate gigabytes of mesh data when line styles with small components are applied to long\n * line strings.\n */\n minLineStyleComponentSize?: number;\n /** Max distance between mesh vertices for them to be collapsed.\n * Meshes stored in GeometryStreams are unaffected by StrokeOptions settings. If decimationTol is undefined,\n * they are output from exportGraphics without any reduction in quality and can be too detailed for\n * some uses. However, decimation is a destructive operation that can introduce gaps and other visual\n * anomalies so it is important to choose an appropriate setting for your use case.\n */\n decimationTol?: number;\n /** BRep features with bounding boxes smaller than this size will not generate graphics.\n * This option can be used to ignore expensive details from [BRepEntity.DataProps]($core-common)\n * like screws and screw holes.\n */\n minBRepFeatureSize?: number;\n}\n\n/** Provides utility functions for working with data generated by [IModelDb.exportGraphics]($core-backend)\n * @public\n */\nexport namespace ExportGraphics {\n /** Test if ExportPartDisplayInfos have exactly the same values.\n * @public\n */\n export function arePartDisplayInfosEqual(lhs: ExportPartDisplayInfo, rhs: ExportPartDisplayInfo): boolean {\n if (lhs.categoryId !== rhs.categoryId)\n return false;\n if (lhs.subCategoryId !== rhs.subCategoryId)\n return false;\n if (lhs.materialId !== rhs.materialId)\n return false;\n if (lhs.elmTransparency !== rhs.elmTransparency)\n return false;\n if (lhs.lineColor !== rhs.lineColor)\n return false;\n return true;\n }\n\n /**\n * Convert an ExportGraphicsMesh to an IndexedPolyface usable by the geometry API.\n * @note The resulting IndexedPolyface may have duplicate points, normals and params. If problematic, call [PolyfaceData.compress]($core-geometry)\n * @public\n */\n export function convertToIndexedPolyface(mesh: ExportGraphicsMesh): IndexedPolyface {\n const polyface = IndexedPolyface.create(true, true, false, mesh.isTwoSided);\n\n const p: Float64Array = mesh.points;\n for (let i = 0; i < p.length; i += 3)\n polyface.data.point.pushXYZ(p[i], p[i + 1], p[i + 2]);\n\n const n: Float32Array = mesh.normals;\n assert(undefined !== polyface.data.normal);\n for (let i = 0; i < n.length; i += 3)\n polyface.data.normal.pushXYZ(n[i], n[i + 1], n[i + 2]);\n\n const uv: Float32Array = mesh.params;\n assert(undefined !== polyface.data.param);\n for (let i = 0; i < uv.length; i += 2)\n polyface.data.param.pushXY(uv[i], uv[i + 1]);\n\n const indices = mesh.indices;\n const addIndex = (idx: number) => {\n polyface.addPointIndex(idx, true);\n polyface.addNormalIndex(idx);\n polyface.addParamIndex(idx);\n };\n for (let i = 0; i < indices.length; i += 3) {\n addIndex(indices[i]);\n addIndex(indices[i + 1]);\n addIndex(indices[i + 2]);\n polyface.terminateFacet(false);\n }\n\n return polyface;\n }\n}\n/**\n * * Iterator to walk the facets of an ExportGraphicsMesh and present them to the world as if visiting a Polyface.\n * * Because the ExportGraphicsMesh has limited data:\n * * There is no auxData in this visitor.\n * * There is no color in this visitor.\n * * All edgeVisible are true.\n * @public\n */\nexport class ExportGraphicsMeshVisitor extends PolyfaceData implements PolyfaceVisitor {\n private _currentFacetIndex: number;\n private _nextFacetIndex: number;\n private _numWrap: number;\n private _polyface: ExportGraphicsMesh;\n // to be called from static factory method that validates the polyface ...\n private constructor(facets: ExportGraphicsMesh, numWrap: number) {\n super(facets.normals.length > 0, facets.params.length > 0, false, facets.isTwoSided);\n this._polyface = facets;\n this._numWrap = numWrap;\n\n this._nextFacetIndex = 0;\n this._currentFacetIndex = -1;\n this.twoSided = facets.isTwoSided;\n this.reset();\n }\n /** Create a visitor for iterating the facets of `polyface`, with indicated number of points to be added to each facet to produce closed point arrays\n * Typical wrap counts are:\n * * 0 -- leave the point arrays with \"missing final edge\"\n * * 1 -- add point 0 as closure point\n * * 2 -- add points 0 and 1 as closure and wrap point. This is useful when vertex visit requires two adjacent vectors, e.g. for cross products.\n */\n public static create(polyface: ExportGraphicsMesh, numWrap: number): ExportGraphicsMeshVisitor {\n return new ExportGraphicsMeshVisitor(polyface, numWrap);\n }\n /** Reset the iterator to start at the first facet of the polyface. */\n public reset(): void {\n this.moveToReadIndex(0);\n this._nextFacetIndex = 0; // so immediate moveToNextFacet stays here.\n }\n /** Select a facet by simple index. */\n public moveToReadIndex(facetIndex: number): boolean {\n if (facetIndex < 0 || 2 + facetIndex * 3 >= this._polyface.indices.length)\n return false;\n this._currentFacetIndex = facetIndex;\n this._nextFacetIndex = facetIndex + 1;\n this.point.length = 0;\n const points = this.point;\n points.length = 0;\n this.pointIndex.length = 0;\n this.point.length = 0;\n this.edgeVisible.length = 0;\n const sourcePoints = this._polyface.points;\n const indices = this._polyface.indices;\n const i0 = 3 * facetIndex;\n for (let i = i0; i < i0 + 3; i++) {\n const k = 3 * indices[i];\n this.pointIndex.push(indices[i]);\n this.point.pushXYZ(sourcePoints[k], sourcePoints[k + 1], sourcePoints[k + 2]);\n this.edgeVisible.push(true);\n }\n for (let i = 0; i < this._numWrap; i++) {\n this.point.pushFromGrowableXYZArray(this.point, i);\n }\n\n const sourceParams = this._polyface.params;\n if (sourceParams.length > 0 && this.paramIndex && this.param) {\n this.paramIndex.length = 0;\n this.param.length = 0;\n for (let i = i0; i < i0 + 3; i++) {\n const k = 2 * indices[i];\n this.paramIndex.push(indices[i]);\n this.param.pushXY(sourceParams[k], sourceParams[k + 1]);\n }\n for (let i = 0; i < this._numWrap; i++) {\n this.param.pushFromGrowableXYArray(this.param, i);\n }\n }\n\n const sourceNormals = this._polyface.normals;\n if (sourceNormals.length > 0 && this.normalIndex && this.normal) {\n this.normalIndex.length = 0;\n this.normal.length = 0;\n for (let i = i0; i < i0 + 3; i++) {\n const k = 3 * indices[i];\n this.normalIndex.push(indices[i]);\n this.normal.pushXYZ(sourceNormals[k], sourceNormals[k + 1], sourceNormals[k + 2]);\n }\n for (let i = 0; i < this._numWrap; i++) {\n this.normal.pushFromGrowableXYZArray(this.normal, i);\n }\n }\n return true;\n }\n public moveToNextFacet(): boolean {\n return this.moveToReadIndex(this._nextFacetIndex);\n }\n /** Set the number of vertices to replicate in visitor arrays. */\n public setNumWrap(numWrap: number): void { this._numWrap = numWrap; }\n\n /** Return the index (in the client polyface) of the current facet */\n public currentReadIndex(): number { return this._currentFacetIndex; }\n /** Return the point index of vertex i within the currently loaded facet */\n public clientPointIndex(i: number): number { return this.pointIndex[i]; }\n /** Return the param index of vertex i within the currently loaded facet.\n * Use the artificial paramIndex, which matches pointIndex.\n */\n public clientParamIndex(i: number): number { return this.paramIndex ? this.paramIndex[i] : -1; }\n /** Return the normal index of vertex i within the currently loaded facet.\n * Use the artificial paramIndex, which matches pointIndex.\n */\n public clientNormalIndex(i: number): number { return this.normalIndex ? this.normalIndex[i] : -1; }\n /** Return the color index of vertex i within the currently loaded facet */\n public clientColorIndex(_i: number): number { return 1; }\n /** Return the aux data index of vertex i within the currently loaded facet */\n public clientAuxIndex(_i: number): number { return -1; }\n\n /** return the client polyface */\n public clientPolyface(): Polyface { return (undefined as unknown) as Polyface; }\n /** clear the contents of all arrays. Use this along with transferDataFrom methods to build up new facets */\n public clearArrays(): void {\n if (this.point !== undefined)\n this.point.length = 0;\n if (this.param !== undefined)\n this.param.length = 0;\n if (this.normal !== undefined)\n this.normal.length = 0;\n // ignore color and aux -- they never exist.\n }\n /** transfer interpolated data from the other visitor.\n * * all data values are interpolated at `fraction` between `other` values at index0 and index1.\n */\n public pushInterpolatedDataFrom(other: PolyfaceVisitor, index0: number, fraction: number, index1: number): void {\n this.point.pushInterpolatedFromGrowableXYZArray(other.point, index0, fraction, index1);\n if (this.param && other.param && index0 < other.param.length && index1 < other.param.length)\n this.param.pushInterpolatedFromGrowableXYArray(other.param, index0, fraction, index1);\n if (this.normal && other.normal && index0 < other.normal.length && index1 < other.normal.length)\n this.normal.pushInterpolatedFromGrowableXYZArray(other.normal, index0, fraction, index1);\n }\n /** transfer data from a specified index of the other visitor as new data in this visitor. */\n public pushDataFrom(other: PolyfaceVisitor, index: number): void {\n this.point.pushFromGrowableXYZArray(other.point, index);\n if (this.color && other.color && index < other.color.length)\n this.color.push(other.color[index]);\n if (this.param && other.param && index < other.param.length)\n this.param.pushFromGrowableXYArray(other.param, index);\n if (this.normal && other.normal && index < other.normal.length)\n this.normal.pushFromGrowableXYZArray(other.normal, index);\n }\n\n}\n"]}