@itwin/core-frontend 4.1.0-dev.56 → 4.1.0-dev.62

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 (260) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/lib/cjs/AccuDraw.d.ts +2 -3
  3. package/lib/cjs/AccuDraw.d.ts.map +1 -1
  4. package/lib/cjs/AccuDraw.js +5 -6
  5. package/lib/cjs/AccuDraw.js.map +1 -1
  6. package/lib/cjs/AccuSnap.d.ts +7 -1
  7. package/lib/cjs/AccuSnap.d.ts.map +1 -1
  8. package/lib/cjs/AccuSnap.js +14 -1
  9. package/lib/cjs/AccuSnap.js.map +1 -1
  10. package/lib/cjs/BriefcaseConnection.d.ts +3 -3
  11. package/lib/cjs/BriefcaseConnection.js +3 -3
  12. package/lib/cjs/BriefcaseConnection.js.map +1 -1
  13. package/lib/cjs/ChangeFlags.d.ts +25 -12
  14. package/lib/cjs/ChangeFlags.d.ts.map +1 -1
  15. package/lib/cjs/ChangeFlags.js +24 -11
  16. package/lib/cjs/ChangeFlags.js.map +1 -1
  17. package/lib/cjs/DrawingViewState.d.ts +2 -2
  18. package/lib/cjs/DrawingViewState.d.ts.map +1 -1
  19. package/lib/cjs/DrawingViewState.js +2 -2
  20. package/lib/cjs/DrawingViewState.js.map +1 -1
  21. package/lib/cjs/ElementLocateManager.d.ts +0 -1
  22. package/lib/cjs/ElementLocateManager.d.ts.map +1 -1
  23. package/lib/cjs/ElementLocateManager.js +3 -33
  24. package/lib/cjs/ElementLocateManager.js.map +1 -1
  25. package/lib/cjs/IModelApp.d.ts +18 -14
  26. package/lib/cjs/IModelApp.d.ts.map +1 -1
  27. package/lib/cjs/IModelApp.js +16 -12
  28. package/lib/cjs/IModelApp.js.map +1 -1
  29. package/lib/cjs/IModelConnection.d.ts +12 -6
  30. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  31. package/lib/cjs/IModelConnection.js +12 -6
  32. package/lib/cjs/IModelConnection.js.map +1 -1
  33. package/lib/cjs/SheetViewState.d.ts +2 -2
  34. package/lib/cjs/SheetViewState.d.ts.map +1 -1
  35. package/lib/cjs/SheetViewState.js +2 -2
  36. package/lib/cjs/SheetViewState.js.map +1 -1
  37. package/lib/cjs/SpatialViewState.d.ts +2 -2
  38. package/lib/cjs/SpatialViewState.d.ts.map +1 -1
  39. package/lib/cjs/SpatialViewState.js +2 -2
  40. package/lib/cjs/SpatialViewState.js.map +1 -1
  41. package/lib/cjs/ViewContext.d.ts +19 -0
  42. package/lib/cjs/ViewContext.d.ts.map +1 -1
  43. package/lib/cjs/ViewContext.js +9 -0
  44. package/lib/cjs/ViewContext.js.map +1 -1
  45. package/lib/cjs/ViewManager.d.ts +4 -2
  46. package/lib/cjs/ViewManager.d.ts.map +1 -1
  47. package/lib/cjs/ViewManager.js +4 -2
  48. package/lib/cjs/ViewManager.js.map +1 -1
  49. package/lib/cjs/ViewState.d.ts +12 -19
  50. package/lib/cjs/ViewState.d.ts.map +1 -1
  51. package/lib/cjs/ViewState.js +8 -5
  52. package/lib/cjs/ViewState.js.map +1 -1
  53. package/lib/cjs/Viewport.d.ts +52 -14
  54. package/lib/cjs/Viewport.d.ts.map +1 -1
  55. package/lib/cjs/Viewport.js +53 -14
  56. package/lib/cjs/Viewport.js.map +1 -1
  57. package/lib/cjs/core-frontend.d.ts +21 -4
  58. package/lib/cjs/core-frontend.d.ts.map +1 -1
  59. package/lib/cjs/core-frontend.js +21 -4
  60. package/lib/cjs/core-frontend.js.map +1 -1
  61. package/lib/cjs/render/InstancedGraphicParams.d.ts +3 -4
  62. package/lib/cjs/render/InstancedGraphicParams.d.ts.map +1 -1
  63. package/lib/cjs/render/InstancedGraphicParams.js.map +1 -1
  64. package/lib/cjs/render/Pixel.d.ts +52 -0
  65. package/lib/cjs/render/Pixel.d.ts.map +1 -1
  66. package/lib/cjs/render/Pixel.js +40 -0
  67. package/lib/cjs/render/Pixel.js.map +1 -1
  68. package/lib/cjs/render/RenderSystem.d.ts +17 -4
  69. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  70. package/lib/cjs/render/RenderSystem.js +1 -2
  71. package/lib/cjs/render/RenderSystem.js.map +1 -1
  72. package/lib/cjs/render/primitives/EdgeParams.js +9 -9
  73. package/lib/cjs/render/primitives/EdgeParams.js.map +1 -1
  74. package/lib/cjs/render/primitives/PointCloudPrimitive.d.ts +1 -0
  75. package/lib/cjs/render/primitives/PointCloudPrimitive.d.ts.map +1 -1
  76. package/lib/cjs/render/primitives/PointCloudPrimitive.js.map +1 -1
  77. package/lib/cjs/render/primitives/PointStringParams.d.ts +1 -0
  78. package/lib/cjs/render/primitives/PointStringParams.d.ts.map +1 -1
  79. package/lib/cjs/render/primitives/PointStringParams.js +3 -2
  80. package/lib/cjs/render/primitives/PointStringParams.js.map +1 -1
  81. package/lib/cjs/render/primitives/PolylineParams.d.ts +5 -2
  82. package/lib/cjs/render/primitives/PolylineParams.d.ts.map +1 -1
  83. package/lib/cjs/render/primitives/PolylineParams.js +13 -10
  84. package/lib/cjs/render/primitives/PolylineParams.js.map +1 -1
  85. package/lib/cjs/render/primitives/VertexTableBuilder.d.ts +4 -1
  86. package/lib/cjs/render/primitives/VertexTableBuilder.d.ts.map +1 -1
  87. package/lib/cjs/render/primitives/VertexTableBuilder.js +5 -2
  88. package/lib/cjs/render/primitives/VertexTableBuilder.js.map +1 -1
  89. package/lib/cjs/render/primitives/mesh/MeshBuilder.d.ts +1 -0
  90. package/lib/cjs/render/primitives/mesh/MeshBuilder.d.ts.map +1 -1
  91. package/lib/cjs/render/primitives/mesh/MeshBuilder.js +1 -0
  92. package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +1 -1
  93. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts +56 -8
  94. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  95. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js +17 -16
  96. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  97. package/lib/cjs/render/webgl/SceneCompositor.d.ts +1 -0
  98. package/lib/cjs/render/webgl/SceneCompositor.d.ts.map +1 -1
  99. package/lib/cjs/render/webgl/SceneCompositor.js +1 -0
  100. package/lib/cjs/render/webgl/SceneCompositor.js.map +1 -1
  101. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  102. package/lib/cjs/render/webgl/Target.js +10 -8
  103. package/lib/cjs/render/webgl/Target.js.map +1 -1
  104. package/lib/cjs/tile/FetchCloudStorage.d.ts +15 -0
  105. package/lib/cjs/tile/FetchCloudStorage.d.ts.map +1 -0
  106. package/lib/cjs/tile/FetchCloudStorage.js +35 -0
  107. package/lib/cjs/tile/FetchCloudStorage.js.map +1 -0
  108. package/lib/cjs/tile/RealityTile.d.ts +8 -3
  109. package/lib/cjs/tile/RealityTile.d.ts.map +1 -1
  110. package/lib/cjs/tile/RealityTile.js +4 -1
  111. package/lib/cjs/tile/RealityTile.js.map +1 -1
  112. package/lib/cjs/tile/TileAdmin.d.ts +0 -1
  113. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  114. package/lib/cjs/tile/TileAdmin.js +3 -37
  115. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  116. package/lib/cjs/tile/internal.d.ts +1 -0
  117. package/lib/cjs/tile/internal.d.ts.map +1 -1
  118. package/lib/cjs/tile/internal.js +1 -0
  119. package/lib/cjs/tile/internal.js.map +1 -1
  120. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js +2 -2
  121. package/lib/cjs/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  122. package/lib/cjs/tools/ToolAdmin.d.ts +3 -3
  123. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  124. package/lib/cjs/tools/ToolAdmin.js +3 -3
  125. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  126. package/lib/esm/AccuDraw.d.ts +2 -3
  127. package/lib/esm/AccuDraw.d.ts.map +1 -1
  128. package/lib/esm/AccuDraw.js +5 -6
  129. package/lib/esm/AccuDraw.js.map +1 -1
  130. package/lib/esm/AccuSnap.d.ts +7 -1
  131. package/lib/esm/AccuSnap.d.ts.map +1 -1
  132. package/lib/esm/AccuSnap.js +14 -1
  133. package/lib/esm/AccuSnap.js.map +1 -1
  134. package/lib/esm/BriefcaseConnection.d.ts +3 -3
  135. package/lib/esm/BriefcaseConnection.js +3 -3
  136. package/lib/esm/BriefcaseConnection.js.map +1 -1
  137. package/lib/esm/ChangeFlags.d.ts +25 -12
  138. package/lib/esm/ChangeFlags.d.ts.map +1 -1
  139. package/lib/esm/ChangeFlags.js +24 -11
  140. package/lib/esm/ChangeFlags.js.map +1 -1
  141. package/lib/esm/DrawingViewState.d.ts +2 -2
  142. package/lib/esm/DrawingViewState.d.ts.map +1 -1
  143. package/lib/esm/DrawingViewState.js +2 -2
  144. package/lib/esm/DrawingViewState.js.map +1 -1
  145. package/lib/esm/ElementLocateManager.d.ts +0 -1
  146. package/lib/esm/ElementLocateManager.d.ts.map +1 -1
  147. package/lib/esm/ElementLocateManager.js +4 -34
  148. package/lib/esm/ElementLocateManager.js.map +1 -1
  149. package/lib/esm/IModelApp.d.ts +18 -14
  150. package/lib/esm/IModelApp.d.ts.map +1 -1
  151. package/lib/esm/IModelApp.js +16 -12
  152. package/lib/esm/IModelApp.js.map +1 -1
  153. package/lib/esm/IModelConnection.d.ts +12 -6
  154. package/lib/esm/IModelConnection.d.ts.map +1 -1
  155. package/lib/esm/IModelConnection.js +12 -6
  156. package/lib/esm/IModelConnection.js.map +1 -1
  157. package/lib/esm/SheetViewState.d.ts +2 -2
  158. package/lib/esm/SheetViewState.d.ts.map +1 -1
  159. package/lib/esm/SheetViewState.js +2 -2
  160. package/lib/esm/SheetViewState.js.map +1 -1
  161. package/lib/esm/SpatialViewState.d.ts +2 -2
  162. package/lib/esm/SpatialViewState.d.ts.map +1 -1
  163. package/lib/esm/SpatialViewState.js +2 -2
  164. package/lib/esm/SpatialViewState.js.map +1 -1
  165. package/lib/esm/ViewContext.d.ts +19 -0
  166. package/lib/esm/ViewContext.d.ts.map +1 -1
  167. package/lib/esm/ViewContext.js +9 -0
  168. package/lib/esm/ViewContext.js.map +1 -1
  169. package/lib/esm/ViewManager.d.ts +4 -2
  170. package/lib/esm/ViewManager.d.ts.map +1 -1
  171. package/lib/esm/ViewManager.js +4 -2
  172. package/lib/esm/ViewManager.js.map +1 -1
  173. package/lib/esm/ViewState.d.ts +12 -19
  174. package/lib/esm/ViewState.d.ts.map +1 -1
  175. package/lib/esm/ViewState.js +8 -5
  176. package/lib/esm/ViewState.js.map +1 -1
  177. package/lib/esm/Viewport.d.ts +52 -14
  178. package/lib/esm/Viewport.d.ts.map +1 -1
  179. package/lib/esm/Viewport.js +53 -14
  180. package/lib/esm/Viewport.js.map +1 -1
  181. package/lib/esm/core-frontend.d.ts +21 -4
  182. package/lib/esm/core-frontend.d.ts.map +1 -1
  183. package/lib/esm/core-frontend.js +21 -4
  184. package/lib/esm/core-frontend.js.map +1 -1
  185. package/lib/esm/render/InstancedGraphicParams.d.ts +3 -4
  186. package/lib/esm/render/InstancedGraphicParams.d.ts.map +1 -1
  187. package/lib/esm/render/InstancedGraphicParams.js.map +1 -1
  188. package/lib/esm/render/Pixel.d.ts +52 -0
  189. package/lib/esm/render/Pixel.d.ts.map +1 -1
  190. package/lib/esm/render/Pixel.js +40 -0
  191. package/lib/esm/render/Pixel.js.map +1 -1
  192. package/lib/esm/render/RenderSystem.d.ts +17 -4
  193. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  194. package/lib/esm/render/RenderSystem.js +1 -2
  195. package/lib/esm/render/RenderSystem.js.map +1 -1
  196. package/lib/esm/render/primitives/EdgeParams.js +9 -9
  197. package/lib/esm/render/primitives/EdgeParams.js.map +1 -1
  198. package/lib/esm/render/primitives/PointCloudPrimitive.d.ts +1 -0
  199. package/lib/esm/render/primitives/PointCloudPrimitive.d.ts.map +1 -1
  200. package/lib/esm/render/primitives/PointCloudPrimitive.js.map +1 -1
  201. package/lib/esm/render/primitives/PointStringParams.d.ts +1 -0
  202. package/lib/esm/render/primitives/PointStringParams.d.ts.map +1 -1
  203. package/lib/esm/render/primitives/PointStringParams.js +3 -2
  204. package/lib/esm/render/primitives/PointStringParams.js.map +1 -1
  205. package/lib/esm/render/primitives/PolylineParams.d.ts +5 -2
  206. package/lib/esm/render/primitives/PolylineParams.d.ts.map +1 -1
  207. package/lib/esm/render/primitives/PolylineParams.js +14 -11
  208. package/lib/esm/render/primitives/PolylineParams.js.map +1 -1
  209. package/lib/esm/render/primitives/VertexTableBuilder.d.ts +4 -1
  210. package/lib/esm/render/primitives/VertexTableBuilder.d.ts.map +1 -1
  211. package/lib/esm/render/primitives/VertexTableBuilder.js +6 -3
  212. package/lib/esm/render/primitives/VertexTableBuilder.js.map +1 -1
  213. package/lib/esm/render/primitives/mesh/MeshBuilder.d.ts +1 -0
  214. package/lib/esm/render/primitives/mesh/MeshBuilder.d.ts.map +1 -1
  215. package/lib/esm/render/primitives/mesh/MeshBuilder.js +1 -0
  216. package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +1 -1
  217. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts +56 -8
  218. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +1 -1
  219. package/lib/esm/render/primitives/mesh/MeshPrimitives.js +18 -17
  220. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +1 -1
  221. package/lib/esm/render/webgl/SceneCompositor.d.ts +1 -0
  222. package/lib/esm/render/webgl/SceneCompositor.d.ts.map +1 -1
  223. package/lib/esm/render/webgl/SceneCompositor.js +1 -0
  224. package/lib/esm/render/webgl/SceneCompositor.js.map +1 -1
  225. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  226. package/lib/esm/render/webgl/Target.js +10 -8
  227. package/lib/esm/render/webgl/Target.js.map +1 -1
  228. package/lib/esm/tile/FetchCloudStorage.d.ts +15 -0
  229. package/lib/esm/tile/FetchCloudStorage.d.ts.map +1 -0
  230. package/lib/esm/tile/FetchCloudStorage.js +31 -0
  231. package/lib/esm/tile/FetchCloudStorage.js.map +1 -0
  232. package/lib/esm/tile/RealityTile.d.ts +8 -3
  233. package/lib/esm/tile/RealityTile.d.ts.map +1 -1
  234. package/lib/esm/tile/RealityTile.js +4 -1
  235. package/lib/esm/tile/RealityTile.js.map +1 -1
  236. package/lib/esm/tile/TileAdmin.d.ts +0 -1
  237. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  238. package/lib/esm/tile/TileAdmin.js +4 -15
  239. package/lib/esm/tile/TileAdmin.js.map +1 -1
  240. package/lib/esm/tile/internal.d.ts +1 -0
  241. package/lib/esm/tile/internal.d.ts.map +1 -1
  242. package/lib/esm/tile/internal.js +1 -0
  243. package/lib/esm/tile/internal.js.map +1 -1
  244. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js +2 -2
  245. package/lib/esm/tile/map/ImageryProviders/ArcGISImageryProvider.js.map +1 -1
  246. package/lib/esm/tools/ToolAdmin.d.ts +3 -3
  247. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  248. package/lib/esm/tools/ToolAdmin.js +3 -3
  249. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  250. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  251. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  252. package/package.json +21 -24
  253. package/lib/cjs/render-primitives.d.ts +0 -18
  254. package/lib/cjs/render-primitives.d.ts.map +0 -1
  255. package/lib/cjs/render-primitives.js +0 -38
  256. package/lib/cjs/render-primitives.js.map +0 -1
  257. package/lib/esm/render-primitives.d.ts +0 -18
  258. package/lib/esm/render-primitives.d.ts.map +0 -1
  259. package/lib/esm/render-primitives.js +0 -22
  260. package/lib/esm/render-primitives.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PolylineParams.js","sourceRoot":"","sources":["../../../../src/render/primitives/PolylineParams.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { PolylineData, QPoint3dList } from \"@itwin/core-common\";\r\nimport { MeshArgs, PolylineArgs } from \"./mesh/MeshPrimitives\";\r\nimport { VertexTableBuilder } from \"./VertexTableBuilder\";\r\nimport { PolylineParams, TesselatedPolyline } from \"../../common/render/primitives/PolylineParams\";\r\nimport { VertexIndices } from \"../../common/render/primitives/VertexIndices\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\n\r\n/** Parameter associated with each vertex index of a tesselated polyline. */\r\nconst enum PolylineParam { // eslint-disable-line no-restricted-syntax\r\n kNone = 0,\r\n kSquare = 1 * 3,\r\n kMiter = 2 * 3,\r\n kMiterInsideOnly = 3 * 3,\r\n kJointBase = 4 * 3,\r\n kNegatePerp = 8 * 3,\r\n kNegateAlong = 16 * 3,\r\n kNoneAdjustWeight = 32 * 3,\r\n}\r\n\r\nexport function tesselatePolylineFromMesh(args: MeshArgs): TesselatedPolyline | undefined {\r\n const tesselator = PolylineTesselator.fromMesh(args);\r\n return tesselator?.tesselate();\r\n}\r\n\r\nclass PolylineVertex {\r\n public isSegmentStart: boolean = false;\r\n public isPolylineStartOrEnd: boolean = false;\r\n public vertexIndex: number = 0;\r\n public prevIndex: number = 0;\r\n public nextIndex: number = 0;\r\n\r\n public constructor() { }\r\n\r\n public init(isSegmentStart: boolean, isPolylineStartOrEnd: boolean, vertexIndex: number, prevIndex: number, nextIndex: number) {\r\n this.isSegmentStart = isSegmentStart;\r\n this.isPolylineStartOrEnd = isPolylineStartOrEnd;\r\n this.vertexIndex = vertexIndex;\r\n this.prevIndex = prevIndex;\r\n this.nextIndex = nextIndex;\r\n }\r\n\r\n public computeParam(negatePerp: boolean, adjacentToJoint: boolean = false, joint: boolean = false, noDisplacement: boolean = false): number {\r\n if (joint)\r\n return PolylineParam.kJointBase;\r\n\r\n let param: PolylineParam;\r\n if (noDisplacement)\r\n param = PolylineParam.kNoneAdjustWeight; // prevent getting tossed before width adjustment\r\n else if (adjacentToJoint)\r\n param = PolylineParam.kMiterInsideOnly;\r\n else\r\n param = this.isPolylineStartOrEnd ? PolylineParam.kSquare : PolylineParam.kMiter;\r\n\r\n let adjust = 0;\r\n if (negatePerp)\r\n adjust = PolylineParam.kNegatePerp;\r\n if (!this.isSegmentStart)\r\n adjust += PolylineParam.kNegateAlong;\r\n\r\n return param + adjust;\r\n }\r\n}\r\n\r\nclass PolylineTesselator {\r\n private _polylines: PolylineData[];\r\n private _doJoints: boolean;\r\n private _numIndices = 0;\r\n private _vertIndex: number[] = [];\r\n private _prevIndex: number[] = [];\r\n private _nextIndex: number[] = [];\r\n private _nextParam: number[] = [];\r\n private _position: Point3d[] = [];\r\n\r\n public constructor(polylines: PolylineData[], points: QPoint3dList | Point3d[], doJointTriangles: boolean) {\r\n this._polylines = polylines;\r\n if (points instanceof QPoint3dList) {\r\n for (const p of points.list)\r\n this._position.push(p.unquantize(points.params));\r\n } else {\r\n this._position = points;\r\n }\r\n\r\n this._doJoints = doJointTriangles;\r\n }\r\n\r\n public static fromPolyline(args: PolylineArgs): PolylineTesselator {\r\n return new PolylineTesselator(args.polylines, args.points, wantJointTriangles(args.width, args.flags.is2d));\r\n }\r\n\r\n public static fromMesh(args: MeshArgs): PolylineTesselator | undefined {\r\n if (undefined !== args.edges?.polylines.lines && undefined !== args.points)\r\n return new PolylineTesselator(args.edges.polylines.lines, args.points, wantJointTriangles(args.edges.width, true === args.is2d));\r\n\r\n return undefined;\r\n }\r\n\r\n public tesselate(): TesselatedPolyline {\r\n this._tesselate();\r\n\r\n const vertIndex = VertexIndices.fromArray(this._vertIndex);\r\n const prevIndex = VertexIndices.fromArray(this._prevIndex);\r\n\r\n const nextIndexAndParam = new Uint8Array(this._numIndices * 4);\r\n for (let i = 0; i < this._numIndices; i++) {\r\n const index = this._nextIndex[i];\r\n const j = i * 4;\r\n VertexIndices.encodeIndex(index, nextIndexAndParam, j);\r\n nextIndexAndParam[j + 3] = this._nextParam[i] & 0x000000ff;\r\n }\r\n\r\n return {\r\n indices: vertIndex,\r\n prevIndices: prevIndex,\r\n nextIndicesAndParams: nextIndexAndParam,\r\n };\r\n }\r\n\r\n private _tesselate() {\r\n const v0 = new PolylineVertex(), v1 = new PolylineVertex();\r\n const maxJointDot = -0.7;\r\n\r\n for (const line of this._polylines) {\r\n if (line.numIndices < 2)\r\n continue;\r\n\r\n const last = line.numIndices - 1;\r\n const isClosed: boolean = line.vertIndices[0] === line.vertIndices[last];\r\n\r\n for (let i = 0; i < last; ++i) {\r\n const idx0 = line.vertIndices[i];\r\n const idx1 = line.vertIndices[i + 1];\r\n const isStart: boolean = (0 === i);\r\n const isEnd: boolean = (last - 1 === i);\r\n const prevIdx0 = isStart ? (isClosed ? line.vertIndices[last - 1] : idx0) : line.vertIndices[i - 1];\r\n const nextIdx1 = isEnd ? (isClosed ? line.vertIndices[1] : idx1) : line.vertIndices[i + 2];\r\n\r\n v0.init(true, isStart && !isClosed, idx0, prevIdx0, idx1);\r\n v1.init(false, isEnd && !isClosed, idx1, nextIdx1, idx0);\r\n\r\n const jointAt0: boolean = this._doJoints && (isClosed || !isStart) && this._dotProduct(v0) > maxJointDot;\r\n const jointAt1: boolean = this._doJoints && (isClosed || !isEnd) && this._dotProduct(v1) > maxJointDot;\r\n\r\n if (jointAt0 || jointAt1) {\r\n this._addVertex(v0, v0.computeParam(true, jointAt0, false, false));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\r\n this._addVertex(v1, v1.computeParam(true, jointAt1, false, false));\r\n\r\n if (jointAt0)\r\n this.addJointTriangles(v0, v0.computeParam(false, true, false, true), v0);\r\n\r\n if (jointAt1)\r\n this.addJointTriangles(v1, v1.computeParam(false, true, false, true), v1);\r\n } else {\r\n this._addVertex(v0, v0.computeParam(true));\r\n this._addVertex(v1, v1.computeParam(false));\r\n this._addVertex(v0, v0.computeParam(false));\r\n this._addVertex(v0, v0.computeParam(false));\r\n this._addVertex(v1, v1.computeParam(false));\r\n this._addVertex(v1, v1.computeParam(true));\r\n }\r\n }\r\n }\r\n }\r\n\r\n private addJointTriangles(v0: PolylineVertex, p0: number, v1: PolylineVertex): void {\r\n const param = v1.computeParam(false, false, true);\r\n for (let i = 0; i < 3; i++) {\r\n this._addVertex(v0, p0);\r\n this._addVertex(v1, param + i + 1);\r\n this._addVertex(v1, param + i);\r\n }\r\n }\r\n\r\n private _dotProduct(v: PolylineVertex): number {\r\n const pos: Point3d = this._position[v.vertexIndex];\r\n const prevDir: Vector3d = Vector3d.createStartEnd(this._position[v.prevIndex], pos);\r\n const nextDir: Vector3d = Vector3d.createStartEnd(this._position[v.nextIndex], pos);\r\n return prevDir.dotProduct(nextDir);\r\n }\r\n\r\n private _addVertex(vertex: PolylineVertex, param: number): void {\r\n this._vertIndex[this._numIndices] = vertex.vertexIndex;\r\n this._prevIndex[this._numIndices] = vertex.prevIndex;\r\n this._nextIndex[this._numIndices] = vertex.nextIndex;\r\n this._nextParam[this._numIndices] = param;\r\n this._numIndices++;\r\n }\r\n}\r\n\r\n/** Strictly for tests. @internal */\r\nexport function tesselatePolyline(polylines: PolylineData[], points: QPoint3dList, doJointTriangles: boolean): TesselatedPolyline {\r\n const tesselator = new PolylineTesselator(polylines, points, doJointTriangles);\r\n return tesselator.tesselate();\r\n}\r\n\r\nexport function createPolylineParams(args: PolylineArgs): PolylineParams | undefined {\r\n assert(!args.flags.isDisjoint);\r\n const vertices = VertexTableBuilder.buildFromPolylines(args, IModelApp.renderSystem.maxTextureSize);\r\n if (undefined === vertices)\r\n return undefined;\r\n\r\n const tesselator = PolylineTesselator.fromPolyline(args);\r\n if (undefined === tesselator)\r\n return undefined;\r\n\r\n return {\r\n vertices,\r\n polyline: tesselator.tesselate(),\r\n isPlanar: args.flags.isPlanar,\r\n type: args.flags.type,\r\n weight: args.width,\r\n linePixels: args.linePixels,\r\n };\r\n}\r\n\r\nexport function wantJointTriangles(weight: number, is2d: boolean): boolean {\r\n // Joints are incredibly expensive. In 3d, only generate them if the line is sufficiently wide for them to be noticeable.\r\n const jointWidthThreshold = 3;\r\n return is2d || weight >= jointWidthThreshold;\r\n}\r\n"]}
1
+ {"version":3,"file":"PolylineParams.js","sourceRoot":"","sources":["../../../../src/render/primitives/PolylineParams.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Point3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { PolylineIndices, PolylineTypeFlags, QPoint3dList } from \"@itwin/core-common\";\r\nimport { MeshArgs, PolylineArgs } from \"./mesh/MeshPrimitives\";\r\nimport { VertexTableBuilder } from \"./VertexTableBuilder\";\r\nimport { PolylineParams, TesselatedPolyline } from \"../../common/render/primitives/PolylineParams\";\r\nimport { VertexIndices } from \"../../common/render/primitives/VertexIndices\";\r\nimport { IModelApp } from \"../../IModelApp\";\r\n\r\n/** Parameter associated with each vertex index of a tesselated polyline. */\r\nconst enum PolylineParam { // eslint-disable-line no-restricted-syntax\r\n kNone = 0,\r\n kSquare = 1 * 3,\r\n kMiter = 2 * 3,\r\n kMiterInsideOnly = 3 * 3,\r\n kJointBase = 4 * 3,\r\n kNegatePerp = 8 * 3,\r\n kNegateAlong = 16 * 3,\r\n kNoneAdjustWeight = 32 * 3,\r\n}\r\n\r\n/** @internal */\r\nexport function tesselatePolylineFromMesh(args: MeshArgs): TesselatedPolyline | undefined {\r\n const tesselator = PolylineTesselator.fromMesh(args);\r\n return tesselator?.tesselate();\r\n}\r\n\r\nclass PolylineVertex {\r\n public isSegmentStart: boolean = false;\r\n public isPolylineStartOrEnd: boolean = false;\r\n public vertexIndex: number = 0;\r\n public prevIndex: number = 0;\r\n public nextIndex: number = 0;\r\n\r\n public constructor() { }\r\n\r\n public init(isSegmentStart: boolean, isPolylineStartOrEnd: boolean, vertexIndex: number, prevIndex: number, nextIndex: number) {\r\n this.isSegmentStart = isSegmentStart;\r\n this.isPolylineStartOrEnd = isPolylineStartOrEnd;\r\n this.vertexIndex = vertexIndex;\r\n this.prevIndex = prevIndex;\r\n this.nextIndex = nextIndex;\r\n }\r\n\r\n public computeParam(negatePerp: boolean, adjacentToJoint: boolean = false, joint: boolean = false, noDisplacement: boolean = false): number {\r\n if (joint)\r\n return PolylineParam.kJointBase;\r\n\r\n let param: PolylineParam;\r\n if (noDisplacement)\r\n param = PolylineParam.kNoneAdjustWeight; // prevent getting tossed before width adjustment\r\n else if (adjacentToJoint)\r\n param = PolylineParam.kMiterInsideOnly;\r\n else\r\n param = this.isPolylineStartOrEnd ? PolylineParam.kSquare : PolylineParam.kMiter;\r\n\r\n let adjust = 0;\r\n if (negatePerp)\r\n adjust = PolylineParam.kNegatePerp;\r\n if (!this.isSegmentStart)\r\n adjust += PolylineParam.kNegateAlong;\r\n\r\n return param + adjust;\r\n }\r\n}\r\n\r\nclass PolylineTesselator {\r\n private _polylines: PolylineIndices[];\r\n private _doJoints: boolean;\r\n private _numIndices = 0;\r\n private _vertIndex: number[] = [];\r\n private _prevIndex: number[] = [];\r\n private _nextIndex: number[] = [];\r\n private _nextParam: number[] = [];\r\n private _position: Point3d[] = [];\r\n\r\n public constructor(polylines: PolylineIndices[], points: QPoint3dList | Point3d[], doJointTriangles: boolean) {\r\n this._polylines = polylines;\r\n if (points instanceof QPoint3dList) {\r\n for (const p of points.list)\r\n this._position.push(p.unquantize(points.params));\r\n } else {\r\n this._position = points;\r\n }\r\n\r\n this._doJoints = doJointTriangles;\r\n }\r\n\r\n public static fromPolyline(args: PolylineArgs): PolylineTesselator {\r\n return new PolylineTesselator(args.polylines, args.points, wantJointTriangles(args.width, !!args.flags.is2d));\r\n }\r\n\r\n public static fromMesh(args: MeshArgs): PolylineTesselator | undefined {\r\n if (undefined !== args.edges?.polylines.lines && undefined !== args.points)\r\n return new PolylineTesselator(args.edges.polylines.lines, args.points, wantJointTriangles(args.edges.width, true === args.is2d));\r\n\r\n return undefined;\r\n }\r\n\r\n public tesselate(): TesselatedPolyline {\r\n this._tesselate();\r\n\r\n const vertIndex = VertexIndices.fromArray(this._vertIndex);\r\n const prevIndex = VertexIndices.fromArray(this._prevIndex);\r\n\r\n const nextIndexAndParam = new Uint8Array(this._numIndices * 4);\r\n for (let i = 0; i < this._numIndices; i++) {\r\n const index = this._nextIndex[i];\r\n const j = i * 4;\r\n VertexIndices.encodeIndex(index, nextIndexAndParam, j);\r\n nextIndexAndParam[j + 3] = this._nextParam[i] & 0x000000ff;\r\n }\r\n\r\n return {\r\n indices: vertIndex,\r\n prevIndices: prevIndex,\r\n nextIndicesAndParams: nextIndexAndParam,\r\n };\r\n }\r\n\r\n private _tesselate() {\r\n const v0 = new PolylineVertex(), v1 = new PolylineVertex();\r\n const maxJointDot = -0.7;\r\n\r\n for (const line of this._polylines) {\r\n if (line.length < 2)\r\n continue;\r\n\r\n const last = line.length - 1;\r\n const isClosed: boolean = line[0] === line[last];\r\n\r\n for (let i = 0; i < last; ++i) {\r\n const idx0 = line[i];\r\n const idx1 = line[i + 1];\r\n const isStart: boolean = (0 === i);\r\n const isEnd: boolean = (last - 1 === i);\r\n const prevIdx0 = isStart ? (isClosed ? line[last - 1] : idx0) : line[i - 1];\r\n const nextIdx1 = isEnd ? (isClosed ? line[1] : idx1) : line[i + 2];\r\n\r\n v0.init(true, isStart && !isClosed, idx0, prevIdx0, idx1);\r\n v1.init(false, isEnd && !isClosed, idx1, nextIdx1, idx0);\r\n\r\n const jointAt0: boolean = this._doJoints && (isClosed || !isStart) && this._dotProduct(v0) > maxJointDot;\r\n const jointAt1: boolean = this._doJoints && (isClosed || !isEnd) && this._dotProduct(v1) > maxJointDot;\r\n\r\n if (jointAt0 || jointAt1) {\r\n this._addVertex(v0, v0.computeParam(true, jointAt0, false, false));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, false));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, true));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\r\n this._addVertex(v0, v0.computeParam(false, jointAt0, false, false));\r\n this._addVertex(v1, v1.computeParam(false, jointAt1, false, true));\r\n this._addVertex(v1, v1.computeParam(true, jointAt1, false, false));\r\n\r\n if (jointAt0)\r\n this.addJointTriangles(v0, v0.computeParam(false, true, false, true), v0);\r\n\r\n if (jointAt1)\r\n this.addJointTriangles(v1, v1.computeParam(false, true, false, true), v1);\r\n } else {\r\n this._addVertex(v0, v0.computeParam(true));\r\n this._addVertex(v1, v1.computeParam(false));\r\n this._addVertex(v0, v0.computeParam(false));\r\n this._addVertex(v0, v0.computeParam(false));\r\n this._addVertex(v1, v1.computeParam(false));\r\n this._addVertex(v1, v1.computeParam(true));\r\n }\r\n }\r\n }\r\n }\r\n\r\n private addJointTriangles(v0: PolylineVertex, p0: number, v1: PolylineVertex): void {\r\n const param = v1.computeParam(false, false, true);\r\n for (let i = 0; i < 3; i++) {\r\n this._addVertex(v0, p0);\r\n this._addVertex(v1, param + i + 1);\r\n this._addVertex(v1, param + i);\r\n }\r\n }\r\n\r\n private _dotProduct(v: PolylineVertex): number {\r\n const pos: Point3d = this._position[v.vertexIndex];\r\n const prevDir: Vector3d = Vector3d.createStartEnd(this._position[v.prevIndex], pos);\r\n const nextDir: Vector3d = Vector3d.createStartEnd(this._position[v.nextIndex], pos);\r\n return prevDir.dotProduct(nextDir);\r\n }\r\n\r\n private _addVertex(vertex: PolylineVertex, param: number): void {\r\n this._vertIndex[this._numIndices] = vertex.vertexIndex;\r\n this._prevIndex[this._numIndices] = vertex.prevIndex;\r\n this._nextIndex[this._numIndices] = vertex.nextIndex;\r\n this._nextParam[this._numIndices] = param;\r\n this._numIndices++;\r\n }\r\n}\r\n\r\n/** Strictly for tests. @internal */\r\nexport function tesselatePolyline(polylines: PolylineIndices[], points: QPoint3dList, doJointTriangles: boolean): TesselatedPolyline {\r\n const tesselator = new PolylineTesselator(polylines, points, doJointTriangles);\r\n return tesselator.tesselate();\r\n}\r\n\r\n/** @internal */\r\nexport function createPolylineParams(args: PolylineArgs): PolylineParams | undefined {\r\n assert(!args.flags.isDisjoint);\r\n const vertices = VertexTableBuilder.buildFromPolylines(args, IModelApp.renderSystem.maxTextureSize);\r\n if (undefined === vertices)\r\n return undefined;\r\n\r\n const tesselator = PolylineTesselator.fromPolyline(args);\r\n if (undefined === tesselator)\r\n return undefined;\r\n\r\n return {\r\n vertices,\r\n polyline: tesselator.tesselate(),\r\n isPlanar: !!args.flags.isPlanar,\r\n type: args.flags.type ?? PolylineTypeFlags.Normal,\r\n weight: args.width,\r\n linePixels: args.linePixels,\r\n };\r\n}\r\n\r\n/** @internal */\r\nexport function wantJointTriangles(weight: number, is2d: boolean): boolean {\r\n // Joints are incredibly expensive. In 3d, only generate them if the line is sufficiently wide for them to be noticeable.\r\n const jointWidthThreshold = 3;\r\n return is2d || weight >= jointWidthThreshold;\r\n}\r\n"]}
@@ -5,8 +5,11 @@ import { ColorIndex, FeatureIndex, QParams2d, QParams3d } from "@itwin/core-comm
5
5
  import { VertexTable } from "../../common/render/primitives/VertexTable";
6
6
  import { MeshParams } from "../../common/render/primitives/MeshParams";
7
7
  import { MeshArgs, PolylineArgs } from "./mesh/MeshPrimitives";
8
+ /** @internal */
8
9
  export declare function createMeshParams(args: MeshArgs, maxDimension: number): MeshParams;
9
- /** Builds a VertexTable from some data type supplying the vertex data. */
10
+ /** Builds a VertexTable from some data type supplying the vertex data.
11
+ * @internal
12
+ */
10
13
  export declare abstract class VertexTableBuilder {
11
14
  data?: Uint8Array;
12
15
  private _curIndex;
@@ -1 +1 @@
1
- {"version":3,"file":"VertexTableBuilder.d.ts","sourceRoot":"","sources":["../../../../src/render/primitives/VertexTableBuilder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACK,UAAU,EAAE,YAAY,EAAoB,SAAS,EAAE,SAAS,EAC3E,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAqB,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAE5F,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAGvE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG/D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,UAAU,CAwBjF;AAED,0EAA0E;AAC1E,8BAAsB,kBAAkB;IAC/B,IAAI,CAAC,EAAE,UAAU,CAAC;IACzB,OAAO,CAAC,SAAS,CAAa;IAE9B,aAAoB,WAAW,IAAI,MAAM,CAAC;IAC1C,aAAoB,gBAAgB,IAAI,MAAM,CAAC;IAC/C,aAAoB,OAAO,IAAI,SAAS,CAAC;IACzC,aAAoB,wBAAwB,IAAI,OAAO,CAAC;IACxD,IAAW,QAAQ,IAAI,SAAS,GAAG,SAAS,CAAsB;aAClD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAE9C,gBAAgB,CAAC,UAAU,EAAE,UAAU;IAQ9C,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM;IAKhC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM;IAQ7B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAI9B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAK9B,OAAO,CAAC,WAAW;IA6BZ,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,WAAW;WAgCrF,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;CAQpG"}
1
+ {"version":3,"file":"VertexTableBuilder.d.ts","sourceRoot":"","sources":["../../../../src/render/primitives/VertexTableBuilder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,OAAO,EACK,UAAU,EAAE,YAAY,EAA+B,SAAS,EAAE,SAAS,EACtF,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAqB,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAE5F,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAGvE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG/D,gBAAgB;AAChB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,UAAU,CAwBjF;AAED;;GAEG;AACH,8BAAsB,kBAAkB;IAC/B,IAAI,CAAC,EAAE,UAAU,CAAC;IACzB,OAAO,CAAC,SAAS,CAAa;IAE9B,aAAoB,WAAW,IAAI,MAAM,CAAC;IAC1C,aAAoB,gBAAgB,IAAI,MAAM,CAAC;IAC/C,aAAoB,OAAO,IAAI,SAAS,CAAC;IACzC,aAAoB,wBAAwB,IAAI,OAAO,CAAC;IACxD,IAAW,QAAQ,IAAI,SAAS,GAAG,SAAS,CAAsB;aAClD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAE9C,gBAAgB,CAAC,UAAU,EAAE,UAAU;IAQ9C,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM;IAKhC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM;IAQ7B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAI9B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAK9B,OAAO,CAAC,WAAW;IA6BZ,KAAK,CAAC,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,WAAW;WAgCrF,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;CAQpG"}
@@ -16,6 +16,7 @@ const VertexTable_1 = require("../../common/render/primitives/VertexTable");
16
16
  const SurfaceParams_1 = require("../../common/render/primitives/SurfaceParams");
17
17
  const VertexIndices_1 = require("../../common/render/primitives/VertexIndices");
18
18
  const EdgeParams_1 = require("./EdgeParams");
19
+ /** @internal */
19
20
  function createMeshParams(args, maxDimension) {
20
21
  const builder = createMeshBuilder(args);
21
22
  const vertices = builder.build(args.colors, args.features, maxDimension);
@@ -23,7 +24,7 @@ function createMeshParams(args, maxDimension) {
23
24
  const surface = {
24
25
  type: builder.type,
25
26
  indices: surfaceIndices,
26
- fillFlags: args.fillFlags,
27
+ fillFlags: args.fillFlags ?? core_common_1.FillFlags.ByView,
27
28
  hasBakedLighting: true === args.hasBakedLighting,
28
29
  textureMapping: undefined !== args.textureMapping ? { texture: args.textureMapping.texture, alwaysDisplayed: false } : undefined,
29
30
  material: (0, SurfaceParams_1.createSurfaceMaterial)(args.material),
@@ -39,7 +40,9 @@ function createMeshParams(args, maxDimension) {
39
40
  };
40
41
  }
41
42
  exports.createMeshParams = createMeshParams;
42
- /** Builds a VertexTable from some data type supplying the vertex data. */
43
+ /** Builds a VertexTable from some data type supplying the vertex data.
44
+ * @internal
45
+ */
43
46
  class VertexTableBuilder {
44
47
  constructor() {
45
48
  this._curIndex = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"VertexTableBuilder.js","sourceRoot":"","sources":["../../../../src/render/primitives/VertexTableBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, Range2d } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, ColorIndex, FeatureIndex, FeatureIndexType, QParams2d, QParams3d, QPoint2d, QPoint3dList,\r\n} from \"@itwin/core-common\";\r\nimport { AuxChannelTable } from \"../../common/render/primitives/AuxChannelTable\";\r\nimport { computeDimensions, VertexTable } from \"../../common/render/primitives/VertexTable\";\r\nimport { createSurfaceMaterial, SurfaceParams, SurfaceType } from \"../../common/render/primitives/SurfaceParams\";\r\nimport { MeshParams } from \"../../common/render/primitives/MeshParams\";\r\nimport { Point3dList } from \"../../common/render/primitives/MeshPrimitive\";\r\nimport { VertexIndices } from \"../../common/render/primitives/VertexIndices\";\r\nimport { MeshArgs, PolylineArgs } from \"./mesh/MeshPrimitives\";\r\nimport { createEdgeParams } from \"./EdgeParams\";\r\n\r\nexport function createMeshParams(args: MeshArgs, maxDimension: number): MeshParams {\r\n const builder = createMeshBuilder(args);\r\n const vertices = builder.build(args.colors, args.features, maxDimension);\r\n\r\n const surfaceIndices = VertexIndices.fromArray(args.vertIndices);\r\n\r\n const surface: SurfaceParams = {\r\n type: builder.type,\r\n indices: surfaceIndices,\r\n fillFlags: args.fillFlags,\r\n hasBakedLighting: true === args.hasBakedLighting,\r\n textureMapping: undefined !== args.textureMapping ? { texture: args.textureMapping.texture, alwaysDisplayed: false } : undefined,\r\n material: createSurfaceMaterial(args.material),\r\n };\r\n\r\n const channels = undefined !== args.auxChannels ? AuxChannelTable.fromChannels(args.auxChannels, vertices.numVertices, maxDimension) : undefined;\r\n const edges = createEdgeParams(args);\r\n return {\r\n vertices,\r\n surface,\r\n edges,\r\n isPlanar: !!args.isPlanar,\r\n auxChannels: channels,\r\n };\r\n}\r\n\r\n/** Builds a VertexTable from some data type supplying the vertex data. */\r\nexport abstract class VertexTableBuilder {\r\n public data?: Uint8Array;\r\n private _curIndex: number = 0;\r\n\r\n public abstract get numVertices(): number;\r\n public abstract get numRgbaPerVertex(): number;\r\n public abstract get qparams(): QParams3d;\r\n public abstract get usesUnquantizedPositions(): boolean;\r\n public get uvParams(): QParams2d | undefined { return undefined; }\r\n public abstract appendVertex(vertIndex: number): void;\r\n\r\n public appendColorTable(colorIndex: ColorIndex) {\r\n if (undefined !== colorIndex.nonUniform) {\r\n for (const color of colorIndex.nonUniform.colors) {\r\n this.appendColor(color);\r\n }\r\n }\r\n }\r\n\r\n protected advance(nBytes: number) {\r\n this._curIndex += nBytes;\r\n assert(this._curIndex <= this.data!.length);\r\n }\r\n\r\n protected append8(val: number) {\r\n assert(0 <= val);\r\n assert(val <= 0xff);\r\n assert(val === Math.floor(val));\r\n\r\n this.data![this._curIndex] = val;\r\n this.advance(1);\r\n }\r\n protected append16(val: number) {\r\n this.append8(val & 0x00ff);\r\n this.append8(val >>> 8);\r\n }\r\n protected append32(val: number) {\r\n this.append16(val & 0x0000ffff);\r\n this.append16(val >>> 16);\r\n }\r\n\r\n private appendColor(tbgr: number) {\r\n const colors = ColorDef.getColors(tbgr);\r\n\r\n // invert transparency => alpha\r\n colors.t = 255 - colors.t;\r\n\r\n // premultiply alpha...\r\n switch (colors.t) {\r\n case 0:\r\n colors.r = colors.g = colors.b = 0;\r\n break;\r\n case 255:\r\n break;\r\n default: {\r\n const f = colors.t / 255.0;\r\n colors.r = Math.floor(colors.r * f + 0.5);\r\n colors.g = Math.floor(colors.g * f + 0.5);\r\n colors.b = Math.floor(colors.b * f + 0.5);\r\n break;\r\n }\r\n }\r\n\r\n // Store 32-bit value in little-endian order (red first)\r\n this.append8(colors.r);\r\n this.append8(colors.g);\r\n this.append8(colors.b);\r\n this.append8(colors.t);\r\n }\r\n\r\n public build(colorIndex: ColorIndex, featureIndex: FeatureIndex, maxDimension: number): VertexTable {\r\n const { numVertices, numRgbaPerVertex } = this;\r\n const numColors = colorIndex.isUniform ? 0 : colorIndex.numColors;\r\n const dimensions = computeDimensions(numVertices, numRgbaPerVertex, numColors, maxDimension);\r\n assert(0 === dimensions.width % numRgbaPerVertex || (0 < numColors && 1 === dimensions.height));\r\n\r\n const data = new Uint8Array(dimensions.width * dimensions.height * 4);\r\n\r\n this.data = data;\r\n for (let i = 0; i < numVertices; i++)\r\n this.appendVertex(i);\r\n\r\n this.appendColorTable(colorIndex);\r\n\r\n this.data = undefined;\r\n\r\n return {\r\n data,\r\n qparams: this.qparams,\r\n usesUnquantizedPositions: this.usesUnquantizedPositions,\r\n width: dimensions.width,\r\n height: dimensions.height,\r\n hasTranslucency: colorIndex.hasAlpha,\r\n uniformColor: colorIndex.uniform,\r\n numVertices,\r\n numRgbaPerVertex,\r\n uvParams: this.uvParams,\r\n featureIndexType: featureIndex.type,\r\n uniformFeatureID: featureIndex.type === FeatureIndexType.Uniform ? featureIndex.featureID : undefined,\r\n };\r\n }\r\n\r\n public static buildFromPolylines(args: PolylineArgs, maxDimension: number): VertexTable | undefined {\r\n const polylines = args.polylines;\r\n if (polylines.length === 0)\r\n return undefined;\r\n\r\n const builder = createPolylineBuilder(args);\r\n return builder.build(args.colors, args.features, maxDimension);\r\n }\r\n}\r\n\r\ntype VertexData = PolylineArgs | MeshArgs;\r\ntype Quantized<T extends VertexData> = Omit<T, \"points\"> & { points: QPoint3dList };\r\ntype Unquantized<T extends VertexData> = Omit<T, \"points\"> & { points: Omit<Point3dList, \"add\"> };\r\n\r\nnamespace Quantized { // eslint-disable-line @typescript-eslint/no-redeclare\r\n /**\r\n * Supplies vertex data from a PolylineArgs or MeshArgs. Each vertex consists of 12 bytes:\r\n * pos.x 00\r\n * pos.y 02\r\n * pos.z 04\r\n * colorIndex 06\r\n * featureIndex 08 (24 bits)\r\n * materialIndex 0B (for meshes that use a material atlas; otherwise unused). NOTE: Currently front-end code does not produce material atlases.\r\n */\r\n export class SimpleBuilder<T extends Quantized<VertexData>> extends VertexTableBuilder {\r\n public args: T;\r\n protected _qpoints: QPoint3dList;\r\n\r\n public constructor(args: T) {\r\n super();\r\n this._qpoints = args.points;\r\n this.args = args;\r\n assert(undefined !== this.args.points);\r\n }\r\n\r\n public get numVertices() { return this.args.points.length; }\r\n public get numRgbaPerVertex() { return 3; }\r\n public get usesUnquantizedPositions() { return false; }\r\n public get qparams() {\r\n return this._qpoints.params;\r\n }\r\n\r\n public appendVertex(vertIndex: number): void {\r\n this.appendPosition(vertIndex);\r\n this.appendColorIndex(vertIndex);\r\n this.appendFeatureIndex(vertIndex);\r\n }\r\n\r\n protected appendPosition(vertIndex: number) {\r\n this.append16(this._qpoints.list[vertIndex].x);\r\n this.append16(this._qpoints.list[vertIndex].y);\r\n this.append16(this._qpoints.list[vertIndex].z);\r\n }\r\n\r\n protected appendColorIndex(vertIndex: number) {\r\n if (undefined !== this.args.colors.nonUniform) {\r\n this.append16(this.args.colors.nonUniform.indices[vertIndex]);\r\n } else {\r\n this.advance(2);\r\n }\r\n }\r\n\r\n protected appendFeatureIndex(vertIndex: number) {\r\n if (undefined !== this.args.features.featureIDs) {\r\n this.append32(this.args.features.featureIDs[vertIndex]);\r\n } else {\r\n this.advance(4);\r\n }\r\n }\r\n }\r\n\r\n /** Supplies vertex data from a MeshArgs. */\r\n export class MeshBuilder extends SimpleBuilder<Quantized<MeshArgs>> {\r\n public readonly type: SurfaceType;\r\n\r\n protected constructor(args: Quantized<MeshArgs>, type: SurfaceType) {\r\n super(args);\r\n this.type = type;\r\n }\r\n\r\n public static create(args: Quantized<MeshArgs>): MeshBuilder {\r\n if (args.isVolumeClassifier)\r\n return new MeshBuilder(args, SurfaceType.VolumeClassifier);\r\n\r\n const isLit = undefined !== args.normals && 0 < args.normals.length;\r\n const isTextured = undefined !== args.textureMapping;\r\n\r\n let uvParams: QParams2d | undefined;\r\n\r\n if (args.textureMapping) {\r\n const uvRange = Range2d.createNull();\r\n const fpts = args.textureMapping.uvParams;\r\n const pt2d = new Point2d();\r\n if (undefined !== fpts && fpts.length > 0)\r\n for (let i = 0; i < args.points.length; i++)\r\n uvRange.extendPoint(Point2d.create(fpts[i].x, fpts[i].y, pt2d));\r\n\r\n uvParams = QParams2d.fromRange(uvRange);\r\n }\r\n\r\n if (isLit)\r\n return isTextured ? new TexturedLitMeshBuilder(args, uvParams!) : new LitMeshBuilder(args);\r\n else\r\n return isTextured ? new TexturedMeshBuilder(args, uvParams!) : new MeshBuilder(args, SurfaceType.Unlit);\r\n }\r\n }\r\n\r\n /** Supplies vertex data from a MeshArgs where each vertex consists of 16 bytes.\r\n * In addition to the SimpleBuilder data, the final 4 bytes hold the quantized UV params\r\n * The color index is left uninitialized as it is unused.\r\n */\r\n class TexturedMeshBuilder extends MeshBuilder {\r\n private _qparams: QParams2d;\r\n private _qpoint = new QPoint2d();\r\n\r\n public constructor(args: Quantized<MeshArgs>, qparams: QParams2d, type: SurfaceType = SurfaceType.Textured) {\r\n super(args, type);\r\n this._qparams = qparams;\r\n assert(undefined !== args.textureMapping);\r\n }\r\n\r\n public override get numRgbaPerVertex() { return 4; }\r\n public override get uvParams() { return this._qparams; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n this.appendPosition(vertIndex);\r\n this.appendNormal(vertIndex);\r\n this.appendFeatureIndex(vertIndex);\r\n this.appendUVParams(vertIndex);\r\n }\r\n\r\n protected appendNormal(_vertIndex: number): void { this.advance(2); } // no normal for unlit meshes\r\n\r\n protected appendUVParams(vertIndex: number) {\r\n this._qpoint.init(this.args.textureMapping!.uvParams[vertIndex], this._qparams);\r\n this.append16(this._qpoint.x);\r\n this.append16(this._qpoint.y);\r\n }\r\n }\r\n\r\n /** As with TexturedMeshBuilder, but the color index is replaced with the oct-encoded normal value. */\r\n class TexturedLitMeshBuilder extends TexturedMeshBuilder {\r\n public constructor(args: Quantized<MeshArgs>, qparams: QParams2d) {\r\n super(args, qparams, SurfaceType.TexturedLit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n protected override appendNormal(vertIndex: number) { this.append16(this.args.normals![vertIndex].value); }\r\n }\r\n\r\n /** 16 bytes. The last 2 bytes are unused; the 2 immediately preceding it hold the oct-encoded normal value. */\r\n class LitMeshBuilder extends MeshBuilder {\r\n public constructor(args: Quantized<MeshArgs>) {\r\n super(args, SurfaceType.Lit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n public override get numRgbaPerVertex() { return 4; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n this.append16(this.args.normals![vertIndex].value);\r\n this.advance(2); // 2 unused bytes\r\n }\r\n }\r\n}\r\n\r\n/** Builders in this namespace store vertex positions as 32-bit floats instead of quantizing to 16-bit unsigned integers.\r\n * This is preferred for decoration graphics, which might contain ranges of positions that exceed the limits for quantization; if quantized,\r\n * they could produce visual artifacts.\r\n * Each builder produces a VertexTable that starts with the following layout:\r\n * pos.x: 00\r\n * pos.y: 04\r\n * pos.z: 08\r\n * featureIndex: 0C\r\n * materialIndex:0F (NOTE: frontend code currently doesn't produce material atlases, so this is always zero).\r\n * Followed (by default) by:\r\n * colorIndex: 10\r\n * unused: 12\r\n * Subclasses may add 4 more bytes and/or overwrite the final 4 bytes above.\r\n */\r\nnamespace Unquantized { // eslint-disable-line @typescript-eslint/no-redeclare\r\n const u32Array = new Uint32Array(1);\r\n const f32Array = new Float32Array(u32Array.buffer);\r\n\r\n // colorIndex: 10\r\n // unused: 12\r\n export class SimpleBuilder<T extends Unquantized<VertexData>> extends VertexTableBuilder {\r\n public args: T;\r\n protected _points: Point3d[];\r\n private _qparams3d: QParams3d;\r\n\r\n public constructor(args: T) {\r\n super();\r\n assert(!(args.points instanceof QPoint3dList));\r\n this._qparams3d = QParams3d.fromRange(args.points.range);\r\n this.args = args;\r\n this._points = args.points;\r\n }\r\n\r\n public get numVertices() { return this._points.length; }\r\n public get numRgbaPerVertex() { return 5; }\r\n public get usesUnquantizedPositions() { return true; }\r\n public get qparams() { return this._qparams3d; }\r\n\r\n public appendVertex(vertIndex: number): void {\r\n this.appendTransposePosAndFeatureNdx(vertIndex);\r\n this.appendColorIndex(vertIndex);\r\n }\r\n\r\n private appendFloat32(val: number) {\r\n f32Array[0] = val;\r\n this.append32(u32Array[0]);\r\n }\r\n\r\n private convertFloat32(val: number): number {\r\n f32Array[0] = val;\r\n return u32Array[0];\r\n }\r\n\r\n protected appendTransposePosAndFeatureNdx(vertIndex: number) {\r\n // transpose position xyz vals into [0].xyz - [3].xyz, and add feature index at .w\r\n // this is to order things to let shader code access much more efficiently\r\n const pt = this._points[vertIndex];\r\n const x = this.convertFloat32 (pt.x);\r\n const y = this.convertFloat32 (pt.y);\r\n const z = this.convertFloat32 (pt.z);\r\n const featID = (this.args.features.featureIDs) ? this.args.features.featureIDs[vertIndex] : 0;\r\n this.append8(x & 0x000000ff);\r\n this.append8(y & 0x000000ff);\r\n this.append8(z & 0x000000ff);\r\n this.append8(featID & 0x000000ff);\r\n this.append8((x >>> 8) & 0x000000ff);\r\n this.append8((y >>> 8) & 0x000000ff);\r\n this.append8((z >>> 8) & 0x000000ff);\r\n this.append8((featID >>> 8) & 0x000000ff);\r\n this.append8((x >>> 16) & 0x000000ff);\r\n this.append8((y >>> 16) & 0x000000ff);\r\n this.append8((z >>> 16) & 0x000000ff);\r\n this.append8((featID >>> 16) & 0x000000ff);\r\n this.append8(x >>> 24);\r\n this.append8(y >>> 24);\r\n this.append8(z >>> 24);\r\n this.append8(featID >>> 24);\r\n }\r\n\r\n protected appendPosition(vertIndex: number) {\r\n const pt = this._points[vertIndex];\r\n this.appendFloat32(pt.x);\r\n this.appendFloat32(pt.y);\r\n this.appendFloat32(pt.z);\r\n }\r\n\r\n protected appendFeatureIndex(vertIndex: number) {\r\n if (this.args.features.featureIDs)\r\n this.append32(this.args.features.featureIDs[vertIndex]);\r\n else\r\n this.advance(4);\r\n }\r\n\r\n protected _appendColorIndex(vertIndex: number) {\r\n if (undefined !== this.args.colors.nonUniform)\r\n this.append16(this.args.colors.nonUniform.indices[vertIndex]);\r\n else\r\n this.advance(2);\r\n }\r\n\r\n protected appendColorIndex(vertIndex: number) {\r\n this._appendColorIndex(vertIndex);\r\n this.advance(2);\r\n }\r\n }\r\n\r\n export class MeshBuilder extends SimpleBuilder<Unquantized<MeshArgs>> {\r\n public readonly type: SurfaceType;\r\n\r\n protected constructor(args: Unquantized<MeshArgs>, type: SurfaceType) {\r\n super(args);\r\n this.type = type;\r\n }\r\n\r\n public static create(args: Unquantized<MeshArgs>): MeshBuilder {\r\n if (args.isVolumeClassifier)\r\n return new MeshBuilder(args, SurfaceType.VolumeClassifier);\r\n\r\n const isLit = undefined !== args.normals && 0 < args.normals.length;\r\n const isTextured = undefined !== args.textureMapping;\r\n\r\n let uvParams: QParams2d | undefined;\r\n\r\n if (args.textureMapping) {\r\n const uvRange = Range2d.createNull();\r\n const fpts = args.textureMapping.uvParams;\r\n const pt2d = new Point2d();\r\n if (undefined !== fpts && fpts.length > 0)\r\n for (let i = 0; i < args.points.length; i++)\r\n uvRange.extendPoint(Point2d.create(fpts[i].x, fpts[i].y, pt2d));\r\n\r\n uvParams = QParams2d.fromRange(uvRange);\r\n }\r\n\r\n if (isLit)\r\n return isTextured ? new TexturedLitMeshBuilder(args, uvParams!) : new LitMeshBuilder(args);\r\n else\r\n return isTextured ? new TexturedMeshBuilder(args, uvParams!) : new MeshBuilder(args, SurfaceType.Unlit);\r\n }\r\n }\r\n\r\n // u: 10\r\n // v: 12\r\n class TexturedMeshBuilder extends MeshBuilder {\r\n private _qparams: QParams2d;\r\n private _qpoint = new QPoint2d();\r\n\r\n public constructor(args: Unquantized<MeshArgs>, qparams: QParams2d, type = SurfaceType.Textured) {\r\n super(args, type);\r\n this._qparams = qparams;\r\n assert(undefined !== args.textureMapping);\r\n }\r\n\r\n public override get uvParams() { return this._qparams; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n\r\n this._qpoint.init(this.args.textureMapping!.uvParams[vertIndex], this._qparams);\r\n this.append16(this._qpoint.x);\r\n this.append16(this._qpoint.y);\r\n }\r\n\r\n protected override appendColorIndex() { }\r\n }\r\n\r\n // u: 10\r\n // v: 12\r\n // normal: 14\r\n // unused: 16\r\n class TexturedLitMeshBuilder extends TexturedMeshBuilder {\r\n public constructor(args: Unquantized<MeshArgs>, qparams: QParams2d) {\r\n super(args, qparams, SurfaceType.TexturedLit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n public override get numRgbaPerVertex() { return 6; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n this.append16(this.args.normals![vertIndex].value);\r\n this.advance(2);\r\n }\r\n }\r\n\r\n // color: 10\r\n // normal: 12\r\n class LitMeshBuilder extends MeshBuilder {\r\n public constructor(args: Unquantized<MeshArgs>) {\r\n super(args, SurfaceType.Lit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n protected override appendColorIndex(vertIndex: number) {\r\n super._appendColorIndex(vertIndex);\r\n }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n this.append16(this.args.normals![vertIndex].value);\r\n }\r\n }\r\n}\r\n\r\nfunction createMeshBuilder(args: MeshArgs): VertexTableBuilder & { type: SurfaceType } {\r\n if (args.points instanceof QPoint3dList)\r\n return Quantized.MeshBuilder.create(args as Quantized<MeshArgs>);\r\n else\r\n return Unquantized.MeshBuilder.create(args as Unquantized<MeshArgs>);\r\n}\r\n\r\nfunction createPolylineBuilder(args: PolylineArgs): VertexTableBuilder {\r\n if (args.points instanceof QPoint3dList)\r\n return new Quantized.SimpleBuilder(args as Quantized<PolylineArgs>);\r\n else\r\n return new Unquantized.SimpleBuilder(args as Unquantized<PolylineArgs>);\r\n}\r\n"]}
1
+ {"version":3,"file":"VertexTableBuilder.js","sourceRoot":"","sources":["../../../../src/render/primitives/VertexTableBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { Point2d, Point3d, Range2d } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, ColorIndex, FeatureIndex, FeatureIndexType, FillFlags, QParams2d, QParams3d, QPoint2d, QPoint3dList,\r\n} from \"@itwin/core-common\";\r\nimport { AuxChannelTable } from \"../../common/render/primitives/AuxChannelTable\";\r\nimport { computeDimensions, VertexTable } from \"../../common/render/primitives/VertexTable\";\r\nimport { createSurfaceMaterial, SurfaceParams, SurfaceType } from \"../../common/render/primitives/SurfaceParams\";\r\nimport { MeshParams } from \"../../common/render/primitives/MeshParams\";\r\nimport { Point3dList } from \"../../common/render/primitives/MeshPrimitive\";\r\nimport { VertexIndices } from \"../../common/render/primitives/VertexIndices\";\r\nimport { MeshArgs, PolylineArgs } from \"./mesh/MeshPrimitives\";\r\nimport { createEdgeParams } from \"./EdgeParams\";\r\n\r\n/** @internal */\r\nexport function createMeshParams(args: MeshArgs, maxDimension: number): MeshParams {\r\n const builder = createMeshBuilder(args);\r\n const vertices = builder.build(args.colors, args.features, maxDimension);\r\n\r\n const surfaceIndices = VertexIndices.fromArray(args.vertIndices);\r\n\r\n const surface: SurfaceParams = {\r\n type: builder.type,\r\n indices: surfaceIndices,\r\n fillFlags: args.fillFlags ?? FillFlags.ByView,\r\n hasBakedLighting: true === args.hasBakedLighting,\r\n textureMapping: undefined !== args.textureMapping ? { texture: args.textureMapping.texture, alwaysDisplayed: false } : undefined,\r\n material: createSurfaceMaterial(args.material),\r\n };\r\n\r\n const channels = undefined !== args.auxChannels ? AuxChannelTable.fromChannels(args.auxChannels, vertices.numVertices, maxDimension) : undefined;\r\n const edges = createEdgeParams(args);\r\n return {\r\n vertices,\r\n surface,\r\n edges,\r\n isPlanar: !!args.isPlanar,\r\n auxChannels: channels,\r\n };\r\n}\r\n\r\n/** Builds a VertexTable from some data type supplying the vertex data.\r\n * @internal\r\n */\r\nexport abstract class VertexTableBuilder {\r\n public data?: Uint8Array;\r\n private _curIndex: number = 0;\r\n\r\n public abstract get numVertices(): number;\r\n public abstract get numRgbaPerVertex(): number;\r\n public abstract get qparams(): QParams3d;\r\n public abstract get usesUnquantizedPositions(): boolean;\r\n public get uvParams(): QParams2d | undefined { return undefined; }\r\n public abstract appendVertex(vertIndex: number): void;\r\n\r\n public appendColorTable(colorIndex: ColorIndex) {\r\n if (undefined !== colorIndex.nonUniform) {\r\n for (const color of colorIndex.nonUniform.colors) {\r\n this.appendColor(color);\r\n }\r\n }\r\n }\r\n\r\n protected advance(nBytes: number) {\r\n this._curIndex += nBytes;\r\n assert(this._curIndex <= this.data!.length);\r\n }\r\n\r\n protected append8(val: number) {\r\n assert(0 <= val);\r\n assert(val <= 0xff);\r\n assert(val === Math.floor(val));\r\n\r\n this.data![this._curIndex] = val;\r\n this.advance(1);\r\n }\r\n protected append16(val: number) {\r\n this.append8(val & 0x00ff);\r\n this.append8(val >>> 8);\r\n }\r\n protected append32(val: number) {\r\n this.append16(val & 0x0000ffff);\r\n this.append16(val >>> 16);\r\n }\r\n\r\n private appendColor(tbgr: number) {\r\n const colors = ColorDef.getColors(tbgr);\r\n\r\n // invert transparency => alpha\r\n colors.t = 255 - colors.t;\r\n\r\n // premultiply alpha...\r\n switch (colors.t) {\r\n case 0:\r\n colors.r = colors.g = colors.b = 0;\r\n break;\r\n case 255:\r\n break;\r\n default: {\r\n const f = colors.t / 255.0;\r\n colors.r = Math.floor(colors.r * f + 0.5);\r\n colors.g = Math.floor(colors.g * f + 0.5);\r\n colors.b = Math.floor(colors.b * f + 0.5);\r\n break;\r\n }\r\n }\r\n\r\n // Store 32-bit value in little-endian order (red first)\r\n this.append8(colors.r);\r\n this.append8(colors.g);\r\n this.append8(colors.b);\r\n this.append8(colors.t);\r\n }\r\n\r\n public build(colorIndex: ColorIndex, featureIndex: FeatureIndex, maxDimension: number): VertexTable {\r\n const { numVertices, numRgbaPerVertex } = this;\r\n const numColors = colorIndex.isUniform ? 0 : colorIndex.numColors;\r\n const dimensions = computeDimensions(numVertices, numRgbaPerVertex, numColors, maxDimension);\r\n assert(0 === dimensions.width % numRgbaPerVertex || (0 < numColors && 1 === dimensions.height));\r\n\r\n const data = new Uint8Array(dimensions.width * dimensions.height * 4);\r\n\r\n this.data = data;\r\n for (let i = 0; i < numVertices; i++)\r\n this.appendVertex(i);\r\n\r\n this.appendColorTable(colorIndex);\r\n\r\n this.data = undefined;\r\n\r\n return {\r\n data,\r\n qparams: this.qparams,\r\n usesUnquantizedPositions: this.usesUnquantizedPositions,\r\n width: dimensions.width,\r\n height: dimensions.height,\r\n hasTranslucency: colorIndex.hasAlpha,\r\n uniformColor: colorIndex.uniform,\r\n numVertices,\r\n numRgbaPerVertex,\r\n uvParams: this.uvParams,\r\n featureIndexType: featureIndex.type,\r\n uniformFeatureID: featureIndex.type === FeatureIndexType.Uniform ? featureIndex.featureID : undefined,\r\n };\r\n }\r\n\r\n public static buildFromPolylines(args: PolylineArgs, maxDimension: number): VertexTable | undefined {\r\n const polylines = args.polylines;\r\n if (polylines.length === 0)\r\n return undefined;\r\n\r\n const builder = createPolylineBuilder(args);\r\n return builder.build(args.colors, args.features, maxDimension);\r\n }\r\n}\r\n\r\ntype VertexData = PolylineArgs | MeshArgs;\r\ntype Quantized<T extends VertexData> = Omit<T, \"points\"> & { points: QPoint3dList };\r\ntype Unquantized<T extends VertexData> = Omit<T, \"points\"> & { points: Omit<Point3dList, \"add\"> };\r\n\r\nnamespace Quantized { // eslint-disable-line @typescript-eslint/no-redeclare\r\n /**\r\n * Supplies vertex data from a PolylineArgs or MeshArgs. Each vertex consists of 12 bytes:\r\n * pos.x 00\r\n * pos.y 02\r\n * pos.z 04\r\n * colorIndex 06\r\n * featureIndex 08 (24 bits)\r\n * materialIndex 0B (for meshes that use a material atlas; otherwise unused). NOTE: Currently front-end code does not produce material atlases.\r\n */\r\n export class SimpleBuilder<T extends Quantized<VertexData>> extends VertexTableBuilder {\r\n public args: T;\r\n protected _qpoints: QPoint3dList;\r\n\r\n public constructor(args: T) {\r\n super();\r\n this._qpoints = args.points;\r\n this.args = args;\r\n assert(undefined !== this.args.points);\r\n }\r\n\r\n public get numVertices() { return this.args.points.length; }\r\n public get numRgbaPerVertex() { return 3; }\r\n public get usesUnquantizedPositions() { return false; }\r\n public get qparams() {\r\n return this._qpoints.params;\r\n }\r\n\r\n public appendVertex(vertIndex: number): void {\r\n this.appendPosition(vertIndex);\r\n this.appendColorIndex(vertIndex);\r\n this.appendFeatureIndex(vertIndex);\r\n }\r\n\r\n protected appendPosition(vertIndex: number) {\r\n this.append16(this._qpoints.list[vertIndex].x);\r\n this.append16(this._qpoints.list[vertIndex].y);\r\n this.append16(this._qpoints.list[vertIndex].z);\r\n }\r\n\r\n protected appendColorIndex(vertIndex: number) {\r\n if (undefined !== this.args.colors.nonUniform) {\r\n this.append16(this.args.colors.nonUniform.indices[vertIndex]);\r\n } else {\r\n this.advance(2);\r\n }\r\n }\r\n\r\n protected appendFeatureIndex(vertIndex: number) {\r\n if (undefined !== this.args.features.featureIDs) {\r\n this.append32(this.args.features.featureIDs[vertIndex]);\r\n } else {\r\n this.advance(4);\r\n }\r\n }\r\n }\r\n\r\n /** Supplies vertex data from a MeshArgs. */\r\n export class MeshBuilder extends SimpleBuilder<Quantized<MeshArgs>> {\r\n public readonly type: SurfaceType;\r\n\r\n protected constructor(args: Quantized<MeshArgs>, type: SurfaceType) {\r\n super(args);\r\n this.type = type;\r\n }\r\n\r\n public static create(args: Quantized<MeshArgs>): MeshBuilder {\r\n if (args.isVolumeClassifier)\r\n return new MeshBuilder(args, SurfaceType.VolumeClassifier);\r\n\r\n const isLit = undefined !== args.normals && 0 < args.normals.length;\r\n const isTextured = undefined !== args.textureMapping;\r\n\r\n let uvParams: QParams2d | undefined;\r\n\r\n if (args.textureMapping) {\r\n const uvRange = Range2d.createNull();\r\n const fpts = args.textureMapping.uvParams;\r\n const pt2d = new Point2d();\r\n if (undefined !== fpts && fpts.length > 0)\r\n for (let i = 0; i < args.points.length; i++)\r\n uvRange.extendPoint(Point2d.create(fpts[i].x, fpts[i].y, pt2d));\r\n\r\n uvParams = QParams2d.fromRange(uvRange);\r\n }\r\n\r\n if (isLit)\r\n return isTextured ? new TexturedLitMeshBuilder(args, uvParams!) : new LitMeshBuilder(args);\r\n else\r\n return isTextured ? new TexturedMeshBuilder(args, uvParams!) : new MeshBuilder(args, SurfaceType.Unlit);\r\n }\r\n }\r\n\r\n /** Supplies vertex data from a MeshArgs where each vertex consists of 16 bytes.\r\n * In addition to the SimpleBuilder data, the final 4 bytes hold the quantized UV params\r\n * The color index is left uninitialized as it is unused.\r\n */\r\n class TexturedMeshBuilder extends MeshBuilder {\r\n private _qparams: QParams2d;\r\n private _qpoint = new QPoint2d();\r\n\r\n public constructor(args: Quantized<MeshArgs>, qparams: QParams2d, type: SurfaceType = SurfaceType.Textured) {\r\n super(args, type);\r\n this._qparams = qparams;\r\n assert(undefined !== args.textureMapping);\r\n }\r\n\r\n public override get numRgbaPerVertex() { return 4; }\r\n public override get uvParams() { return this._qparams; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n this.appendPosition(vertIndex);\r\n this.appendNormal(vertIndex);\r\n this.appendFeatureIndex(vertIndex);\r\n this.appendUVParams(vertIndex);\r\n }\r\n\r\n protected appendNormal(_vertIndex: number): void { this.advance(2); } // no normal for unlit meshes\r\n\r\n protected appendUVParams(vertIndex: number) {\r\n this._qpoint.init(this.args.textureMapping!.uvParams[vertIndex], this._qparams);\r\n this.append16(this._qpoint.x);\r\n this.append16(this._qpoint.y);\r\n }\r\n }\r\n\r\n /** As with TexturedMeshBuilder, but the color index is replaced with the oct-encoded normal value. */\r\n class TexturedLitMeshBuilder extends TexturedMeshBuilder {\r\n public constructor(args: Quantized<MeshArgs>, qparams: QParams2d) {\r\n super(args, qparams, SurfaceType.TexturedLit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n protected override appendNormal(vertIndex: number) { this.append16(this.args.normals![vertIndex].value); }\r\n }\r\n\r\n /** 16 bytes. The last 2 bytes are unused; the 2 immediately preceding it hold the oct-encoded normal value. */\r\n class LitMeshBuilder extends MeshBuilder {\r\n public constructor(args: Quantized<MeshArgs>) {\r\n super(args, SurfaceType.Lit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n public override get numRgbaPerVertex() { return 4; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n this.append16(this.args.normals![vertIndex].value);\r\n this.advance(2); // 2 unused bytes\r\n }\r\n }\r\n}\r\n\r\n/** Builders in this namespace store vertex positions as 32-bit floats instead of quantizing to 16-bit unsigned integers.\r\n * This is preferred for decoration graphics, which might contain ranges of positions that exceed the limits for quantization; if quantized,\r\n * they could produce visual artifacts.\r\n * Each builder produces a VertexTable that starts with the following layout:\r\n * pos.x: 00\r\n * pos.y: 04\r\n * pos.z: 08\r\n * featureIndex: 0C\r\n * materialIndex:0F (NOTE: frontend code currently doesn't produce material atlases, so this is always zero).\r\n * Followed (by default) by:\r\n * colorIndex: 10\r\n * unused: 12\r\n * Subclasses may add 4 more bytes and/or overwrite the final 4 bytes above.\r\n */\r\nnamespace Unquantized { // eslint-disable-line @typescript-eslint/no-redeclare\r\n const u32Array = new Uint32Array(1);\r\n const f32Array = new Float32Array(u32Array.buffer);\r\n\r\n // colorIndex: 10\r\n // unused: 12\r\n export class SimpleBuilder<T extends Unquantized<VertexData>> extends VertexTableBuilder {\r\n public args: T;\r\n protected _points: Point3d[];\r\n private _qparams3d: QParams3d;\r\n\r\n public constructor(args: T) {\r\n super();\r\n assert(!(args.points instanceof QPoint3dList));\r\n this._qparams3d = QParams3d.fromRange(args.points.range);\r\n this.args = args;\r\n this._points = args.points;\r\n }\r\n\r\n public get numVertices() { return this._points.length; }\r\n public get numRgbaPerVertex() { return 5; }\r\n public get usesUnquantizedPositions() { return true; }\r\n public get qparams() { return this._qparams3d; }\r\n\r\n public appendVertex(vertIndex: number): void {\r\n this.appendTransposePosAndFeatureNdx(vertIndex);\r\n this.appendColorIndex(vertIndex);\r\n }\r\n\r\n private appendFloat32(val: number) {\r\n f32Array[0] = val;\r\n this.append32(u32Array[0]);\r\n }\r\n\r\n private convertFloat32(val: number): number {\r\n f32Array[0] = val;\r\n return u32Array[0];\r\n }\r\n\r\n protected appendTransposePosAndFeatureNdx(vertIndex: number) {\r\n // transpose position xyz vals into [0].xyz - [3].xyz, and add feature index at .w\r\n // this is to order things to let shader code access much more efficiently\r\n const pt = this._points[vertIndex];\r\n const x = this.convertFloat32 (pt.x);\r\n const y = this.convertFloat32 (pt.y);\r\n const z = this.convertFloat32 (pt.z);\r\n const featID = (this.args.features.featureIDs) ? this.args.features.featureIDs[vertIndex] : 0;\r\n this.append8(x & 0x000000ff);\r\n this.append8(y & 0x000000ff);\r\n this.append8(z & 0x000000ff);\r\n this.append8(featID & 0x000000ff);\r\n this.append8((x >>> 8) & 0x000000ff);\r\n this.append8((y >>> 8) & 0x000000ff);\r\n this.append8((z >>> 8) & 0x000000ff);\r\n this.append8((featID >>> 8) & 0x000000ff);\r\n this.append8((x >>> 16) & 0x000000ff);\r\n this.append8((y >>> 16) & 0x000000ff);\r\n this.append8((z >>> 16) & 0x000000ff);\r\n this.append8((featID >>> 16) & 0x000000ff);\r\n this.append8(x >>> 24);\r\n this.append8(y >>> 24);\r\n this.append8(z >>> 24);\r\n this.append8(featID >>> 24);\r\n }\r\n\r\n protected appendPosition(vertIndex: number) {\r\n const pt = this._points[vertIndex];\r\n this.appendFloat32(pt.x);\r\n this.appendFloat32(pt.y);\r\n this.appendFloat32(pt.z);\r\n }\r\n\r\n protected appendFeatureIndex(vertIndex: number) {\r\n if (this.args.features.featureIDs)\r\n this.append32(this.args.features.featureIDs[vertIndex]);\r\n else\r\n this.advance(4);\r\n }\r\n\r\n protected _appendColorIndex(vertIndex: number) {\r\n if (undefined !== this.args.colors.nonUniform)\r\n this.append16(this.args.colors.nonUniform.indices[vertIndex]);\r\n else\r\n this.advance(2);\r\n }\r\n\r\n protected appendColorIndex(vertIndex: number) {\r\n this._appendColorIndex(vertIndex);\r\n this.advance(2);\r\n }\r\n }\r\n\r\n export class MeshBuilder extends SimpleBuilder<Unquantized<MeshArgs>> {\r\n public readonly type: SurfaceType;\r\n\r\n protected constructor(args: Unquantized<MeshArgs>, type: SurfaceType) {\r\n super(args);\r\n this.type = type;\r\n }\r\n\r\n public static create(args: Unquantized<MeshArgs>): MeshBuilder {\r\n if (args.isVolumeClassifier)\r\n return new MeshBuilder(args, SurfaceType.VolumeClassifier);\r\n\r\n const isLit = undefined !== args.normals && 0 < args.normals.length;\r\n const isTextured = undefined !== args.textureMapping;\r\n\r\n let uvParams: QParams2d | undefined;\r\n\r\n if (args.textureMapping) {\r\n const uvRange = Range2d.createNull();\r\n const fpts = args.textureMapping.uvParams;\r\n const pt2d = new Point2d();\r\n if (undefined !== fpts && fpts.length > 0)\r\n for (let i = 0; i < args.points.length; i++)\r\n uvRange.extendPoint(Point2d.create(fpts[i].x, fpts[i].y, pt2d));\r\n\r\n uvParams = QParams2d.fromRange(uvRange);\r\n }\r\n\r\n if (isLit)\r\n return isTextured ? new TexturedLitMeshBuilder(args, uvParams!) : new LitMeshBuilder(args);\r\n else\r\n return isTextured ? new TexturedMeshBuilder(args, uvParams!) : new MeshBuilder(args, SurfaceType.Unlit);\r\n }\r\n }\r\n\r\n // u: 10\r\n // v: 12\r\n class TexturedMeshBuilder extends MeshBuilder {\r\n private _qparams: QParams2d;\r\n private _qpoint = new QPoint2d();\r\n\r\n public constructor(args: Unquantized<MeshArgs>, qparams: QParams2d, type = SurfaceType.Textured) {\r\n super(args, type);\r\n this._qparams = qparams;\r\n assert(undefined !== args.textureMapping);\r\n }\r\n\r\n public override get uvParams() { return this._qparams; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n\r\n this._qpoint.init(this.args.textureMapping!.uvParams[vertIndex], this._qparams);\r\n this.append16(this._qpoint.x);\r\n this.append16(this._qpoint.y);\r\n }\r\n\r\n protected override appendColorIndex() { }\r\n }\r\n\r\n // u: 10\r\n // v: 12\r\n // normal: 14\r\n // unused: 16\r\n class TexturedLitMeshBuilder extends TexturedMeshBuilder {\r\n public constructor(args: Unquantized<MeshArgs>, qparams: QParams2d) {\r\n super(args, qparams, SurfaceType.TexturedLit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n public override get numRgbaPerVertex() { return 6; }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n this.append16(this.args.normals![vertIndex].value);\r\n this.advance(2);\r\n }\r\n }\r\n\r\n // color: 10\r\n // normal: 12\r\n class LitMeshBuilder extends MeshBuilder {\r\n public constructor(args: Unquantized<MeshArgs>) {\r\n super(args, SurfaceType.Lit);\r\n assert(undefined !== args.normals);\r\n }\r\n\r\n protected override appendColorIndex(vertIndex: number) {\r\n super._appendColorIndex(vertIndex);\r\n }\r\n\r\n public override appendVertex(vertIndex: number) {\r\n super.appendVertex(vertIndex);\r\n this.append16(this.args.normals![vertIndex].value);\r\n }\r\n }\r\n}\r\n\r\nfunction createMeshBuilder(args: MeshArgs): VertexTableBuilder & { type: SurfaceType } {\r\n if (args.points instanceof QPoint3dList)\r\n return Quantized.MeshBuilder.create(args as Quantized<MeshArgs>);\r\n else\r\n return Unquantized.MeshBuilder.create(args as Unquantized<MeshArgs>);\r\n}\r\n\r\nfunction createPolylineBuilder(args: PolylineArgs): VertexTableBuilder {\r\n if (args.points instanceof QPoint3dList)\r\n return new Quantized.SimpleBuilder(args as Quantized<PolylineArgs>);\r\n else\r\n return new Unquantized.SimpleBuilder(args as Unquantized<PolylineArgs>);\r\n}\r\n"]}
@@ -21,6 +21,7 @@ export declare class MeshBuilder {
21
21
  readonly areaTolerance: number;
22
22
  readonly tileRange: Range3d;
23
23
  get currentPolyface(): MeshBuilderPolyface | undefined;
24
+ get displayParams(): DisplayParams;
24
25
  set displayParams(params: DisplayParams);
25
26
  /** create reference for triangleSet on demand */
26
27
  get triangleSet(): TriangleSet;
@@ -1 +1 @@
1
- {"version":3,"file":"MeshBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MeshBuilder.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilder.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,7 @@ const MeshPrimitives_1 = require("./MeshPrimitives");
17
17
  /** @internal */
18
18
  class MeshBuilder {
19
19
  get currentPolyface() { return this._currentPolyface; }
20
+ get displayParams() { return this.mesh.displayParams; }
20
21
  set displayParams(params) { this.mesh.displayParams = params; }
21
22
  /** create reference for triangleSet on demand */
22
23
  get triangleSet() {
@@ -1 +1 @@
1
- {"version":3,"file":"MeshBuilder.js","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilder.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAAyD;AACzD,wDAA8H;AAC9H,oDAAsJ;AAEtJ,8CAAmE;AAEnE,4CAAoE;AACpE,qDAAwC;AAKxC,gBAAgB;AAChB,MAAa,WAAW;IAQtB,IAAW,eAAe,KAAsC,OAAO,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC/F,IAAW,aAAa,CAAC,MAAqB,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC;IAErF,iDAAiD;IACjD,IAAW,WAAW;QACpB,IAAI,SAAS,KAAK,IAAI,CAAC,YAAY;YACjC,IAAI,CAAC,YAAY,GAAG,IAAI,wBAAW,EAAE,CAAC;QAExC,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,YAAoB,IAAU,EAAE,SAAiB,EAAE,aAAqB,EAAE,SAAkB;QAC1F,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,IAAI,eAAe,CAAC;QACpB,IAAI,IAAI,CAAC,MAAM,YAAY,0BAAY,EAAE;YACvC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAClD,eAAe,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;SACpC;aAAM;YACL,eAAe,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;SAChE;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,qBAAS,CAAC,eAAe,CAAC,CAAC;IAClD,CAAC;IAED,+BAA+B;IACxB,MAAM,CAAC,MAAM,CAAC,KAAwB;QAC3C,MAAM,IAAI,GAAG,qBAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;QAClD,OAAO,IAAI,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;IAED;;;;;OAKG;IACI,mBAAmB,CAAC,OAAmC,EAAE,UAAmB,EAAE,SAAiB,EAAE,OAA4B;QAClI,KAAK,MAAM,YAAY,IAAI,OAAO,EAAE;YAClC,IAAI,UAAU;gBACZ,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;;gBAE7D,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;SAC7D;IACH,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,QAAyB,EAAE,KAAkC,EAAE,OAA4B;QAChH,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC;QAEzC,OAAO,OAAO,CAAC,eAAe,EAAE,EAAE;YAChC,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;SACtD;QAED,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED;;;OAGG;IACI,sBAAsB,CAAC,OAAwB,EAAE,OAAoC,EAAE,OAA4B;QACxH,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;QACxE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;QAEjD,MAAM,YAAY,GAAG,cAAc,IAAI,WAAW,GAAG,UAAU,CAAC,CAAC,gDAAgD;QAEjH,yCAAyC;QACzC,IAAI,UAAU,GAAG,CAAC,IAAI,YAAY;YAChC,OAAO;QAET,MAAM,SAAS,GAAG,aAAa,IAAI,UAAU,GAAG,CAAC,CAAC;QAClD,MAAM,aAAa,GAAG,UAAU,GAAG,CAAC,CAAC;QAErC,IAAA,qBAAM,EAAC,CAAC,aAAa,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC;QACzC,IAAA,qBAAM,EAAC,CAAC,SAAS,IAAI,SAAS,KAAK,aAAa,CAAC,CAAC;QAElD,kIAAkI;QAClI,MAAM,sBAAsB,GAAG,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;QACxE,KAAK,IAAI,aAAa,GAAG,CAAC,EAAE,aAAa,GAAG,aAAa,EAAE,aAAa,EAAE,EAAE;YAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,OAAO,EAAE,sBAAsB,EAAE,OAAO,CAAC,CAAC;YAC9F,IAAI,SAAS,KAAK,QAAQ;gBACxB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;SAC9B;IACH,CAAC;IAEM,sBAAsB,CAAC,aAAqB,EAAE,OAAwB,EAAE,OAA2C,EAAE,OAA4B;QACtJ,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;QAC1C,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAEzC,6EAA6E;QAC7E,IAAI,MAA6B,CAAC;QAClC,IAAI,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE;YACtC,IAAA,qBAAM,EAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;YACzE,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;YAC5C,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC;YACvE,IAAI,iBAAiB;gBACnB,MAAM,GAAG,aAAa,CAAC,eAAe,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;YACrE,IAAA,qBAAM,EAAC,MAAM,KAAK,SAAS,CAAC,CAAC;SAC9B;QAED,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;YAC1B,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,+BAA+B,CAAC,WAAW,CAAC,CAAC;YACpE,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,8BAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,WAAW,CAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACzG,MAAM,OAAO,GAAwB,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9E,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;SAC3F;QAED,wGAAwG;QACxG,wIAAwI;QACxI,6BAA6B;QAC7B,IAAI,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;eAC/D,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;eAChE,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;YACnE,OAAO,SAAS,CAAC;QAEnB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,cAAc,CAAC,aAAqB,EAAE,OAAwB,EAAE,OAA2C,EAAE,OAA4B;QAC9I,6EAA6E;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAEvF,sCAAsC;QACtC,IAAI,SAAS,KAAK,QAAQ;YACxB,OAAO,SAAS,CAAC;QAEnB,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAEhC,MAAM,QAAQ,GAAG,IAAI,qBAAQ,EAAE,CAAC;QAEhC,QAAQ,CAAC,iBAAiB,CACxB,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAC5C,WAAW,CAAC,aAAa,GAAG,CAAC,CAAC,EAC9B,aAAa,KAAK,OAAO,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CACrF,CAAC;QAEF,iGAAiG;QACjG,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAS,EAAE,EAAE;YAC1C,IAAI,cAAc,CAAC;YACnB,IAAI,OAAO,CAAC,OAAO,EAAE;gBACnB,6CAA6C;gBAC7C,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBAClD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;aAC7E;iBAAM;gBACL,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;aAC9C;YAED,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;YAErC,+FAA+F;YAC/F,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS;gBACpC,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAC/G,CAAC,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,8BAA8B;IACvB,WAAW,CAAC,MAAiB,EAAE,SAAiB,EAAE,OAA4B;QACnF,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QAEtB,MAAM,IAAI,GAAG,IAAI,0BAAY,EAAE,CAAC;QAChC,KAAK,MAAM,QAAQ,IAAI,MAAM;YAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAElE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,8BAA8B;IACvB,cAAc,CAAC,MAAiB,EAAE,SAAiB,EAAE,OAA4B;QACtF,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,0BAAY,EAAE,CAAC;QAEhC,KAAK,MAAM,QAAQ,IAAI,MAAM;YAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAElE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAEM,aAAa,CAAC,QAAkB,EAAE,OAAgC;QACvE,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE;YAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YACtC,IAAI,CAAC,gBAAgB,GAAG,IAAI,mBAAmB,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACpH;IACH,CAAC;IAEM,WAAW;QAChB,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;QACvC,IAAI,SAAS,KAAK,eAAe;YAC/B,OAAO;QAET,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,cAAc,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IACxC,CAAC;IAEM,SAAS,CAAC,MAAsB,EAAE,iBAAiB,GAAG,IAAI;QAC/D,uEAAuE;QACvE,MAAM,QAAQ,GAAG,CAAC,EAAa,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACpF,CAAC;IAEM,WAAW,CAAC,QAAkB;QACnC,6FAA6F;QAC7F,6HAA6H;QAC7H,IAAI,QAAQ,CAAC,YAAY;YACvB,OAAO;QAET,MAAM,QAAQ,GAAG,CAAC,GAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACvE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;CACF;AAvOD,kCAuOC;AAqBD,gBAAgB;AAChB,MAAa,uBAAuB;IAGlC,IAAW,gBAAgB,KAAc,OAAO,IAAI,CAAC,IAAI,KAAK,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtG,IAAW,eAAe,KAAc,OAAO,IAAI,CAAC,IAAI,KAAK,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACpG,IAAW,mBAAmB,KAAc,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAClH,sEAAsE;IACtE,IAAW,gBAAgB,KAAc,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAChH,YAAY,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,OAAO;QANvC,mBAAc,GAAG,IAAI,GAAG,qBAAK,CAAC,gBAAgB,CAAC;QAMJ,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAAC,CAAC;CAC/E;AATD,0DASC;AAED,gBAAgB;AAChB,WAAiB,uBAAuB;IACtC,IAAY,IAOX;IAPD,WAAY,IAAI;QACd,qCAAgB,CAAA;QAChB,6CAAyB,CAAA;QACzB,6CAAyB,CAAA;QACzB,+CAA0B,CAAA;QAC1B,+CAA0B,CAAA;QAC1B,uCAAoC,CAAA;IACtC,CAAC,EAPW,IAAI,GAAJ,4BAAI,KAAJ,4BAAI,QAOf;AACH,CAAC,EATgB,uBAAuB,GAAvB,+BAAuB,KAAvB,+BAAuB,QASvC;AAED,gBAAgB;AAChB,MAAa,mBAAmB;IAK9B,YAAY,QAAkB,EAAE,WAAoC,EAAE,iBAAyB;QAF/E,mBAAc,GAAwB,IAAI,GAAG,EAAkB,CAAC;QAG9E,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC7C,CAAC;CACF;AAVD,kDAUC;AAED,MAAM,QAAQ;IAGZ,YACS,OAAgB,EAChB,UAAkB,EAClB,IAAc,EACd,MAAe,EACf,MAAe;QAJf,YAAO,GAAP,OAAO,CAAS;QAChB,eAAU,GAAV,UAAU,CAAQ;QAClB,SAAI,GAAJ,IAAI,CAAU;QACd,WAAM,GAAN,MAAM,CAAS;QACf,WAAM,GAAN,MAAM,CAAS;IACxB,CAAC;IAEM,OAAO,CAAC,OAAgB,EAAE,SAAiB;QAChD,IAAI,SAAS,KAAK,IAAI,CAAC,UAAU,EAAE;YACjC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;SAC7B;IACH,CAAC;CACF;AAED,SAAS,cAAc,CAAC,IAAU,EAAE,QAA6B;IAC/D,IAAI,CAAC,IAAI,CAAC,SAAS;QACjB,OAAO;IAET,MAAM,OAAO,GAAG,IAAI,yBAAU,CAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;IACrF,MAAM,eAAe,GAAe,EAAE,CAAC;IAEvC,6GAA6G;IAC7G,8GAA8G;IAC9G,iBAAiB;IACjB,MAAM,QAAQ,GAAG,IAAI,qBAAQ,EAAE,CAAC;IAChC,MAAM,cAAc,GAAG,CAAC,IAAI,uBAAO,EAAE,EAAE,IAAI,uBAAO,EAAE,EAAE,IAAI,uBAAO,EAAE,CAAC,CAAC;IACrE,MAAM,eAAe,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAElC,KAAK,IAAI,aAAa,GAAG,QAAQ,CAAC,iBAAiB,EAAE,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE;QAC3G,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,kBAAkB,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5E,IAAA,qBAAM,EAAC,SAAS,KAAK,kBAAkB,CAAC,CAAC;YACzC,IAAI,SAAS,KAAK,kBAAkB,EAAE;gBACpC,aAAa,GAAG,IAAI,CAAC;gBACrB,SAAS;aACV;YAED,eAAe,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC;YACxC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;SACxE;QAED,IAAI,aAAa;YACf,SAAS;QAEX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,mBAAmB,GAAG,eAAe,CAAC,MAAM,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI,sBAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAC5E,MAAM,YAAY,GAAG,IAAI,sBAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;YAC9E,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;YAElI,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YAClE,IAAI,CAAC,YAAY,CAAC,QAAQ;gBACxB,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;SACrE;QAED,MAAM,MAAM,GAAG,wBAAQ,CAAC,0BAA0B,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5G,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC1B,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC9B;IAED,kFAAkF;IAClF,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,gBAAgB,EAAE;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QACjE,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE;YACvC,IAAI,SAAS,KAAK,QAAQ,CAAC,UAAU,EAAE;gBACrC,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACrD,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBACrD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,UAAU;oBACpD,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;aAC5B;SACF;KACF;IAED,8BAA8B;IAC9B,uBAAuB;IACvB,IAAI,SAAS,KAAK,IAAI,CAAC,KAAK;QAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,uBAAS,EAAE,CAAC;IAE/B,MAAM,YAAY,GAAG,QAAQ,CAAC;IAC9B,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE;QACvC,IAAI,QAAQ,CAAC,OAAO,EAAE;YACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SACxC;aAAM,IAAI,SAAS,KAAK,QAAQ,CAAC,UAAU,EAAE;YAC5C,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACrD,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,YAAY,EAAE;gBACxD,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,kCAAoB,CAAC,8BAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,8BAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACzI;SACF;KACF;AACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert, Dictionary } from \"@itwin/core-bentley\";\r\nimport { Angle, IndexedPolyface, Point2d, Point3d, Polyface, PolyfaceVisitor, Range3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Feature, MeshEdge, MeshEdges, MeshPolyline, OctEncodedNormal, OctEncodedNormalPair, QPoint3dList, TextureMapping } from \"@itwin/core-common\";\r\nimport { DisplayParams } from \"../../../common/render/primitives/DisplayParams\";\r\nimport { Triangle, TriangleKey, TriangleSet } from \"../Primitives\";\r\nimport { StrokesPrimitivePointLists } from \"../Strokes\";\r\nimport { VertexKey, VertexKeyProps, VertexMap } from \"../VertexKey\";\r\nimport { Mesh } from \"./MeshPrimitives\";\r\n\r\n// Describes a vertex along with the index of the source vertex in the source PolyfaceVisitor.\r\ntype VertexKeyPropsWithIndex = VertexKeyProps & { sourceIndex: number };\r\n\r\n/** @internal */\r\nexport class MeshBuilder {\r\n public readonly vertexMap: VertexMap;\r\n private _triangleSet?: TriangleSet;\r\n private _currentPolyface?: MeshBuilderPolyface;\r\n public readonly mesh: Mesh;\r\n public readonly tolerance: number;\r\n public readonly areaTolerance: number;\r\n public readonly tileRange: Range3d;\r\n public get currentPolyface(): MeshBuilderPolyface | undefined { return this._currentPolyface; }\r\n public set displayParams(params: DisplayParams) { this.mesh.displayParams = params; }\r\n\r\n /** create reference for triangleSet on demand */\r\n public get triangleSet(): TriangleSet {\r\n if (undefined === this._triangleSet)\r\n this._triangleSet = new TriangleSet();\r\n\r\n return this._triangleSet;\r\n }\r\n\r\n private constructor(mesh: Mesh, tolerance: number, areaTolerance: number, tileRange: Range3d) {\r\n this.mesh = mesh;\r\n this.tolerance = tolerance;\r\n this.areaTolerance = areaTolerance;\r\n this.tileRange = tileRange;\r\n\r\n let vertexTolerance;\r\n if (mesh.points instanceof QPoint3dList) {\r\n const p0 = mesh.points.params.unquantize(0, 0, 0);\r\n const p1 = mesh.points.params.unquantize(1, 1, 1);\r\n vertexTolerance = p1.minus(p0, p0);\r\n } else {\r\n vertexTolerance = { x: tolerance, y: tolerance, z: tolerance };\r\n }\r\n\r\n this.vertexMap = new VertexMap(vertexTolerance);\r\n }\r\n\r\n /** create a new MeshBuilder */\r\n public static create(props: MeshBuilder.Props): MeshBuilder {\r\n const mesh = Mesh.create(props);\r\n const { tolerance, areaTolerance, range } = props;\r\n return new MeshBuilder(mesh, tolerance, areaTolerance, range);\r\n }\r\n\r\n /**\r\n * iterate through each point list of the strokes primitive and either load the point string or polyline into builder\r\n * @param strokes lists of stroke primitive point lists to iterate\r\n * @param isDisjoint if true add point string, else add polyline\r\n * @param fillColor\r\n */\r\n public addStrokePointLists(strokes: StrokesPrimitivePointLists, isDisjoint: boolean, fillColor: number, feature: Feature | undefined): void {\r\n for (const strokePoints of strokes) {\r\n if (isDisjoint)\r\n this.addPointString(strokePoints.points, fillColor, feature);\r\n else\r\n this.addPolyline(strokePoints.points, fillColor, feature);\r\n }\r\n }\r\n\r\n /**\r\n * add data from polyface into mesh builder\r\n * @param polyface the indexed polyface to iterate the facets of to load each facet's triangles' vertices\r\n * @param props the properties required for this operation\r\n */\r\n public addFromPolyface(polyface: IndexedPolyface, props: MeshBuilder.PolyfaceOptions, feature: Feature | undefined): void {\r\n this.beginPolyface(polyface, props.edgeOptions);\r\n const visitor = polyface.createVisitor();\r\n\r\n while (visitor.moveToNextFacet()) {\r\n this.addFromPolyfaceVisitor(visitor, props, feature);\r\n }\r\n\r\n this.endPolyface();\r\n }\r\n\r\n /**\r\n * @param visitor the PolyfaceVisitor containing the face data to be added\r\n * @param props the properties required for this operation:\r\n */\r\n public addFromPolyfaceVisitor(visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceOptions, feature: Feature | undefined): void {\r\n const { pointCount, normalCount, paramCount, requireNormals } = visitor;\r\n const { includeParams, mappedTexture } = options;\r\n\r\n const isDegenerate = requireNormals && normalCount < pointCount; // TFS#790263: Degenerate triangle - no normals.\r\n\r\n // a triangle must have at least 3 points\r\n if (pointCount < 3 || isDegenerate)\r\n return;\r\n\r\n const haveParam = includeParams && paramCount > 0;\r\n const triangleCount = pointCount - 2;\r\n\r\n assert(!includeParams || paramCount > 0);\r\n assert(!haveParam || undefined !== mappedTexture);\r\n\r\n // The face represented by this visitor should be convex (we request that in facet options) - so we do a simple fan triangulation.\r\n const polyfaceVisitorOptions = { ...options, triangleCount, haveParam };\r\n for (let triangleIndex = 0; triangleIndex < triangleCount; triangleIndex++) {\r\n const triangle = this.createTriangle(triangleIndex, visitor, polyfaceVisitorOptions, feature);\r\n if (undefined !== triangle)\r\n this.addTriangle(triangle);\r\n }\r\n }\r\n\r\n public createTriangleVertices(triangleIndex: number, visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceVisitorOptions, feature: Feature | undefined): VertexKeyPropsWithIndex[] | undefined {\r\n const { point, requireNormals } = visitor;\r\n const { fillColor, haveParam } = options;\r\n\r\n // If we do not have UVParams stored on the IndexedPolyface, compute them now\r\n let params: Point2d[] | undefined;\r\n if (haveParam && options.mappedTexture) {\r\n assert(this.mesh.points.length === 0 || this.mesh.uvParams.length !== 0);\r\n const mappedTexture = options.mappedTexture;\r\n const transformToImodel = mappedTexture.params.textureMatrix.transform;\r\n if (transformToImodel)\r\n params = mappedTexture.computeUVParams(visitor, transformToImodel);\r\n assert(params !== undefined);\r\n }\r\n\r\n const vertices = [];\r\n for (let i = 0; i < 3; ++i) {\r\n const vertexIndex = 0 === i ? 0 : triangleIndex + i;\r\n const position = point.getPoint3dAtUncheckedPointIndex(vertexIndex);\r\n const normal = requireNormals ? OctEncodedNormal.fromVector(visitor.getNormal(vertexIndex)!) : undefined;\r\n const uvParam: Point2d | undefined = params ? params[vertexIndex] : undefined;\r\n vertices[i] = { position, fillColor, normal, uvParam, sourceIndex: vertexIndex, feature };\r\n }\r\n\r\n // Previously we would add all 3 vertices to our map, then detect degenerate triangles in AddTriangle().\r\n // This led to unused vertex data, and caused mismatch in # of vertices when recreating the MeshBuilder from the data in the tile cache.\r\n // Detect beforehand instead.\r\n if (this.vertexMap.arePositionsAlmostEqual(vertices[0], vertices[1])\r\n || this.vertexMap.arePositionsAlmostEqual(vertices[0], vertices[2])\r\n || this.vertexMap.arePositionsAlmostEqual(vertices[1], vertices[2]))\r\n return undefined;\r\n\r\n return vertices;\r\n }\r\n\r\n public createTriangle(triangleIndex: number, visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceVisitorOptions, feature: Feature | undefined): Triangle | undefined {\r\n // generate vertex key properties for each of the three sides of the triangle\r\n const vertices = this.createTriangleVertices(triangleIndex, visitor, options, feature);\r\n\r\n // avoid creating degenerate triangles\r\n if (undefined === vertices)\r\n return undefined;\r\n\r\n const { edgeVisible } = visitor;\r\n\r\n const triangle = new Triangle();\r\n\r\n triangle.setEdgeVisibility(\r\n 0 === triangleIndex ? edgeVisible[0] : false,\r\n edgeVisible[triangleIndex + 1],\r\n triangleIndex === options.triangleCount - 1 ? edgeVisible[triangleIndex + 2] : false,\r\n );\r\n\r\n // set each triangle index to the index associated with the vertex key location in the vertex map\r\n vertices.forEach((vertexProps, i: number) => {\r\n let vertexKeyIndex;\r\n if (visitor.auxData) {\r\n // No deduplication with auxData (for now...)\r\n vertexKeyIndex = this.mesh.addVertex(vertexProps);\r\n this.mesh.addAuxChannels(visitor.auxData.channels, vertexProps.sourceIndex);\r\n } else {\r\n vertexKeyIndex = this.addVertex(vertexProps);\r\n }\r\n\r\n triangle.indices[i] = vertexKeyIndex;\r\n\r\n // if the current polyface exists, map the vertex key index to the visitor's client point index\r\n if (this.currentPolyface !== undefined)\r\n this.currentPolyface.vertexIndexMap.set(vertexKeyIndex, visitor.clientPointIndex(vertexProps.sourceIndex));\r\n });\r\n\r\n return triangle;\r\n }\r\n\r\n /** removed Feature for now */\r\n public addPolyline(points: Point3d[], fillColor: number, feature: Feature | undefined): void {\r\n const { mesh } = this;\r\n\r\n const poly = new MeshPolyline();\r\n for (const position of points)\r\n poly.addIndex(this.addVertex({ position, fillColor, feature }));\r\n\r\n mesh.addPolyline(poly);\r\n }\r\n\r\n /** removed Feature for now */\r\n public addPointString(points: Point3d[], fillColor: number, feature: Feature | undefined): void {\r\n const { mesh } = this;\r\n const poly = new MeshPolyline();\r\n\r\n for (const position of points)\r\n poly.addIndex(this.addVertex({ position, fillColor, feature }));\r\n\r\n mesh.addPolyline(poly);\r\n }\r\n\r\n public beginPolyface(polyface: Polyface, options: MeshEdgeCreationOptions): void {\r\n if (!options.generateNoEdges) {\r\n const triangles = this.mesh.triangles;\r\n this._currentPolyface = new MeshBuilderPolyface(polyface, options, triangles === undefined ? 0 : triangles.length);\r\n }\r\n }\r\n\r\n public endPolyface(): void {\r\n const { currentPolyface, mesh } = this;\r\n if (undefined === currentPolyface)\r\n return;\r\n\r\n this._currentPolyface = undefined;\r\n buildMeshEdges(mesh, currentPolyface);\r\n }\r\n\r\n public addVertex(vertex: VertexKeyProps, addToMeshOnInsert = true): number {\r\n // if vertex key isn't duplicate, then also insert properties into mesh\r\n const onInsert = (vk: VertexKey) => this.mesh.addVertex(vk);\r\n return this.vertexMap.insertKey(vertex, addToMeshOnInsert ? onInsert : undefined);\r\n }\r\n\r\n public addTriangle(triangle: Triangle): void {\r\n // Attempt to avoid adding vertices originating from degenerate triangles before we get here.\r\n // Removed assert and just return if degenerate at this point because uncommon cases (not worth testing for) can still occur.\r\n if (triangle.isDegenerate)\r\n return;\r\n\r\n const onInsert = (_vk: TriangleKey) => this.mesh.addTriangle(triangle);\r\n this.triangleSet.insertKey(triangle, onInsert);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport namespace MeshBuilder { // eslint-disable-line no-redeclare\r\n export interface Props extends Mesh.Props {\r\n tolerance: number;\r\n areaTolerance: number;\r\n }\r\n export interface PolyfaceOptions {\r\n includeParams: boolean;\r\n fillColor: number;\r\n mappedTexture?: TextureMapping;\r\n edgeOptions: MeshEdgeCreationOptions;\r\n }\r\n\r\n export interface PolyfaceVisitorOptions extends PolyfaceOptions {\r\n triangleCount: number;\r\n haveParam: boolean;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshEdgeCreationOptions {\r\n public readonly type: MeshEdgeCreationOptions.Type;\r\n public readonly minCreaseAngle = 20.0 * Angle.radiansPerDegree;\r\n public get generateAllEdges(): boolean { return this.type === MeshEdgeCreationOptions.Type.AllEdges; }\r\n public get generateNoEdges(): boolean { return this.type === MeshEdgeCreationOptions.Type.NoEdges; }\r\n public get generateCreaseEdges(): boolean { return 0 !== (this.type & MeshEdgeCreationOptions.Type.CreaseEdges); }\r\n /** Create edge chains for polyfaces that do not already have them. */\r\n public get createEdgeChains(): boolean { return 0 !== (this.type & MeshEdgeCreationOptions.Type.CreateChains); }\r\n constructor(type = MeshEdgeCreationOptions.Type.NoEdges) { this.type = type; }\r\n}\r\n\r\n/** @internal */\r\nexport namespace MeshEdgeCreationOptions { // eslint-disable-line no-redeclare\r\n export enum Type {\r\n NoEdges = 0x0000,\r\n CreaseEdges = 0x0001 << 1,\r\n SmoothEdges = 0x0001 << 2,\r\n CreateChains = 0x0001 << 3,\r\n DefaultEdges = CreaseEdges,\r\n AllEdges = CreaseEdges | SmoothEdges,\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshBuilderPolyface {\r\n public readonly polyface: Polyface;\r\n public readonly edgeOptions: MeshEdgeCreationOptions;\r\n public readonly vertexIndexMap: Map<number, number> = new Map<number, number>();\r\n public readonly baseTriangleIndex: number;\r\n constructor(polyface: Polyface, edgeOptions: MeshEdgeCreationOptions, baseTriangleIndex: number) {\r\n this.polyface = polyface;\r\n this.edgeOptions = edgeOptions;\r\n this.baseTriangleIndex = baseTriangleIndex;\r\n }\r\n}\r\n\r\nclass EdgeInfo {\r\n public faceIndex1?: number;\r\n\r\n public constructor(\r\n public visible: boolean,\r\n public faceIndex0: number,\r\n public edge: MeshEdge,\r\n public point0: Point3d,\r\n public point1: Point3d) {\r\n }\r\n\r\n public addFace(visible: boolean, faceIndex: number) {\r\n if (undefined === this.faceIndex1) {\r\n this.visible ||= visible;\r\n this.faceIndex1 = faceIndex;\r\n }\r\n }\r\n}\r\n\r\nfunction buildMeshEdges(mesh: Mesh, polyface: MeshBuilderPolyface): void {\r\n if (!mesh.triangles)\r\n return;\r\n\r\n const edgeMap = new Dictionary<MeshEdge, EdgeInfo>((lhs, rhs) => lhs.compareTo(rhs));\r\n const triangleNormals: Vector3d[] = [];\r\n\r\n // We need to detect the edge pairs -- Can't do that from the Mesh indices as these are not shared - so we'll\r\n // assume that the polyface indices are properly shared, this should be true as a seperate index array is used\r\n // for Polyfaces.\r\n const triangle = new Triangle();\r\n const polyfacePoints = [new Point3d(), new Point3d(), new Point3d()];\r\n const polyfaceIndices = [0, 0, 0];\r\n\r\n for (let triangleIndex = polyface.baseTriangleIndex; triangleIndex < mesh.triangles.length; triangleIndex++) {\r\n let indexNotFound = false;\r\n mesh.triangles.getTriangle(triangleIndex, triangle);\r\n for (let j = 0; j < 3; j++) {\r\n const foundPolyfaceIndex = polyface.vertexIndexMap.get(triangle.indices[j]);\r\n assert(undefined !== foundPolyfaceIndex);\r\n if (undefined === foundPolyfaceIndex) {\r\n indexNotFound = true;\r\n continue;\r\n }\r\n\r\n polyfaceIndices[j] = foundPolyfaceIndex;\r\n polyface.polyface.data.getPoint(foundPolyfaceIndex, polyfacePoints[j]);\r\n }\r\n\r\n if (indexNotFound)\r\n continue;\r\n\r\n for (let j = 0; j < 3; j++) {\r\n const jNext = (j + 1) % 3;\r\n const triangleNormalIndex = triangleNormals.length;\r\n const meshEdge = new MeshEdge(triangle.indices[j], triangle.indices[jNext]);\r\n const polyfaceEdge = new MeshEdge(polyfaceIndices[j], polyfaceIndices[jNext]);\r\n const edgeInfo = new EdgeInfo(triangle.isEdgeVisible(j), triangleNormalIndex, meshEdge, polyfacePoints[j], polyfacePoints[jNext]);\r\n\r\n const findOrInsert = edgeMap.findOrInsert(polyfaceEdge, edgeInfo);\r\n if (!findOrInsert.inserted)\r\n findOrInsert.value.addFace(edgeInfo.visible, triangleNormalIndex);\r\n }\r\n\r\n const normal = Vector3d.createCrossProductToPoints(polyfacePoints[0], polyfacePoints[1], polyfacePoints[2]);\r\n normal.normalizeInPlace();\r\n triangleNormals.push(normal);\r\n }\r\n\r\n // If there is no visibility indication in the mesh, infer from the mesh geometry.\r\n if (!polyface.edgeOptions.generateAllEdges) {\r\n const minEdgeDot = Math.cos(polyface.edgeOptions.minCreaseAngle);\r\n for (const edgeInfo of edgeMap.values()) {\r\n if (undefined !== edgeInfo.faceIndex1) {\r\n const normal0 = triangleNormals[edgeInfo.faceIndex0];\r\n const normal1 = triangleNormals[edgeInfo.faceIndex1];\r\n if (Math.abs(normal0.dotProduct(normal1)) > minEdgeDot)\r\n edgeInfo.visible = false;\r\n }\r\n }\r\n }\r\n\r\n // Now populate the MeshEdges.\r\n // ###TODO edge chains?\r\n if (undefined === mesh.edges)\r\n mesh.edges = new MeshEdges();\r\n\r\n const maxPlanarDot = 0.999999;\r\n for (const edgeInfo of edgeMap.values()) {\r\n if (edgeInfo.visible) {\r\n mesh.edges.visible.push(edgeInfo.edge);\r\n } else if (undefined !== edgeInfo.faceIndex1) {\r\n const normal0 = triangleNormals[edgeInfo.faceIndex0];\r\n const normal1 = triangleNormals[edgeInfo.faceIndex1];\r\n if (Math.abs(normal0.dotProduct(normal1)) < maxPlanarDot) {\r\n mesh.edges.silhouette.push(edgeInfo.edge);\r\n mesh.edges.silhouetteNormals.push(new OctEncodedNormalPair(OctEncodedNormal.fromVector(normal0), OctEncodedNormal.fromVector(normal1)));\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"MeshBuilder.js","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert, Dictionary } from \"@itwin/core-bentley\";\r\nimport { Angle, IndexedPolyface, Point2d, Point3d, Polyface, PolyfaceVisitor, Range3d, Vector3d } from \"@itwin/core-geometry\";\r\nimport { Feature, MeshEdge, MeshEdges, MeshPolyline, OctEncodedNormal, OctEncodedNormalPair, QPoint3dList, TextureMapping } from \"@itwin/core-common\";\r\nimport { DisplayParams } from \"../../../common/render/primitives/DisplayParams\";\r\nimport { Triangle, TriangleKey, TriangleSet } from \"../Primitives\";\r\nimport { StrokesPrimitivePointLists } from \"../Strokes\";\r\nimport { VertexKey, VertexKeyProps, VertexMap } from \"../VertexKey\";\r\nimport { Mesh } from \"./MeshPrimitives\";\r\n\r\n// Describes a vertex along with the index of the source vertex in the source PolyfaceVisitor.\r\ntype VertexKeyPropsWithIndex = VertexKeyProps & { sourceIndex: number };\r\n\r\n/** @internal */\r\nexport class MeshBuilder {\r\n public readonly vertexMap: VertexMap;\r\n private _triangleSet?: TriangleSet;\r\n private _currentPolyface?: MeshBuilderPolyface;\r\n public readonly mesh: Mesh;\r\n public readonly tolerance: number;\r\n public readonly areaTolerance: number;\r\n public readonly tileRange: Range3d;\r\n public get currentPolyface(): MeshBuilderPolyface | undefined { return this._currentPolyface; }\r\n public get displayParams(): DisplayParams { return this.mesh.displayParams; }\r\n public set displayParams(params: DisplayParams) { this.mesh.displayParams = params; }\r\n\r\n /** create reference for triangleSet on demand */\r\n public get triangleSet(): TriangleSet {\r\n if (undefined === this._triangleSet)\r\n this._triangleSet = new TriangleSet();\r\n\r\n return this._triangleSet;\r\n }\r\n\r\n private constructor(mesh: Mesh, tolerance: number, areaTolerance: number, tileRange: Range3d) {\r\n this.mesh = mesh;\r\n this.tolerance = tolerance;\r\n this.areaTolerance = areaTolerance;\r\n this.tileRange = tileRange;\r\n\r\n let vertexTolerance;\r\n if (mesh.points instanceof QPoint3dList) {\r\n const p0 = mesh.points.params.unquantize(0, 0, 0);\r\n const p1 = mesh.points.params.unquantize(1, 1, 1);\r\n vertexTolerance = p1.minus(p0, p0);\r\n } else {\r\n vertexTolerance = { x: tolerance, y: tolerance, z: tolerance };\r\n }\r\n\r\n this.vertexMap = new VertexMap(vertexTolerance);\r\n }\r\n\r\n /** create a new MeshBuilder */\r\n public static create(props: MeshBuilder.Props): MeshBuilder {\r\n const mesh = Mesh.create(props);\r\n const { tolerance, areaTolerance, range } = props;\r\n return new MeshBuilder(mesh, tolerance, areaTolerance, range);\r\n }\r\n\r\n /**\r\n * iterate through each point list of the strokes primitive and either load the point string or polyline into builder\r\n * @param strokes lists of stroke primitive point lists to iterate\r\n * @param isDisjoint if true add point string, else add polyline\r\n * @param fillColor\r\n */\r\n public addStrokePointLists(strokes: StrokesPrimitivePointLists, isDisjoint: boolean, fillColor: number, feature: Feature | undefined): void {\r\n for (const strokePoints of strokes) {\r\n if (isDisjoint)\r\n this.addPointString(strokePoints.points, fillColor, feature);\r\n else\r\n this.addPolyline(strokePoints.points, fillColor, feature);\r\n }\r\n }\r\n\r\n /**\r\n * add data from polyface into mesh builder\r\n * @param polyface the indexed polyface to iterate the facets of to load each facet's triangles' vertices\r\n * @param props the properties required for this operation\r\n */\r\n public addFromPolyface(polyface: IndexedPolyface, props: MeshBuilder.PolyfaceOptions, feature: Feature | undefined): void {\r\n this.beginPolyface(polyface, props.edgeOptions);\r\n const visitor = polyface.createVisitor();\r\n\r\n while (visitor.moveToNextFacet()) {\r\n this.addFromPolyfaceVisitor(visitor, props, feature);\r\n }\r\n\r\n this.endPolyface();\r\n }\r\n\r\n /**\r\n * @param visitor the PolyfaceVisitor containing the face data to be added\r\n * @param props the properties required for this operation:\r\n */\r\n public addFromPolyfaceVisitor(visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceOptions, feature: Feature | undefined): void {\r\n const { pointCount, normalCount, paramCount, requireNormals } = visitor;\r\n const { includeParams, mappedTexture } = options;\r\n\r\n const isDegenerate = requireNormals && normalCount < pointCount; // TFS#790263: Degenerate triangle - no normals.\r\n\r\n // a triangle must have at least 3 points\r\n if (pointCount < 3 || isDegenerate)\r\n return;\r\n\r\n const haveParam = includeParams && paramCount > 0;\r\n const triangleCount = pointCount - 2;\r\n\r\n assert(!includeParams || paramCount > 0);\r\n assert(!haveParam || undefined !== mappedTexture);\r\n\r\n // The face represented by this visitor should be convex (we request that in facet options) - so we do a simple fan triangulation.\r\n const polyfaceVisitorOptions = { ...options, triangleCount, haveParam };\r\n for (let triangleIndex = 0; triangleIndex < triangleCount; triangleIndex++) {\r\n const triangle = this.createTriangle(triangleIndex, visitor, polyfaceVisitorOptions, feature);\r\n if (undefined !== triangle)\r\n this.addTriangle(triangle);\r\n }\r\n }\r\n\r\n public createTriangleVertices(triangleIndex: number, visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceVisitorOptions, feature: Feature | undefined): VertexKeyPropsWithIndex[] | undefined {\r\n const { point, requireNormals } = visitor;\r\n const { fillColor, haveParam } = options;\r\n\r\n // If we do not have UVParams stored on the IndexedPolyface, compute them now\r\n let params: Point2d[] | undefined;\r\n if (haveParam && options.mappedTexture) {\r\n assert(this.mesh.points.length === 0 || this.mesh.uvParams.length !== 0);\r\n const mappedTexture = options.mappedTexture;\r\n const transformToImodel = mappedTexture.params.textureMatrix.transform;\r\n if (transformToImodel)\r\n params = mappedTexture.computeUVParams(visitor, transformToImodel);\r\n assert(params !== undefined);\r\n }\r\n\r\n const vertices = [];\r\n for (let i = 0; i < 3; ++i) {\r\n const vertexIndex = 0 === i ? 0 : triangleIndex + i;\r\n const position = point.getPoint3dAtUncheckedPointIndex(vertexIndex);\r\n const normal = requireNormals ? OctEncodedNormal.fromVector(visitor.getNormal(vertexIndex)!) : undefined;\r\n const uvParam: Point2d | undefined = params ? params[vertexIndex] : undefined;\r\n vertices[i] = { position, fillColor, normal, uvParam, sourceIndex: vertexIndex, feature };\r\n }\r\n\r\n // Previously we would add all 3 vertices to our map, then detect degenerate triangles in AddTriangle().\r\n // This led to unused vertex data, and caused mismatch in # of vertices when recreating the MeshBuilder from the data in the tile cache.\r\n // Detect beforehand instead.\r\n if (this.vertexMap.arePositionsAlmostEqual(vertices[0], vertices[1])\r\n || this.vertexMap.arePositionsAlmostEqual(vertices[0], vertices[2])\r\n || this.vertexMap.arePositionsAlmostEqual(vertices[1], vertices[2]))\r\n return undefined;\r\n\r\n return vertices;\r\n }\r\n\r\n public createTriangle(triangleIndex: number, visitor: PolyfaceVisitor, options: MeshBuilder.PolyfaceVisitorOptions, feature: Feature | undefined): Triangle | undefined {\r\n // generate vertex key properties for each of the three sides of the triangle\r\n const vertices = this.createTriangleVertices(triangleIndex, visitor, options, feature);\r\n\r\n // avoid creating degenerate triangles\r\n if (undefined === vertices)\r\n return undefined;\r\n\r\n const { edgeVisible } = visitor;\r\n\r\n const triangle = new Triangle();\r\n\r\n triangle.setEdgeVisibility(\r\n 0 === triangleIndex ? edgeVisible[0] : false,\r\n edgeVisible[triangleIndex + 1],\r\n triangleIndex === options.triangleCount - 1 ? edgeVisible[triangleIndex + 2] : false,\r\n );\r\n\r\n // set each triangle index to the index associated with the vertex key location in the vertex map\r\n vertices.forEach((vertexProps, i: number) => {\r\n let vertexKeyIndex;\r\n if (visitor.auxData) {\r\n // No deduplication with auxData (for now...)\r\n vertexKeyIndex = this.mesh.addVertex(vertexProps);\r\n this.mesh.addAuxChannels(visitor.auxData.channels, vertexProps.sourceIndex);\r\n } else {\r\n vertexKeyIndex = this.addVertex(vertexProps);\r\n }\r\n\r\n triangle.indices[i] = vertexKeyIndex;\r\n\r\n // if the current polyface exists, map the vertex key index to the visitor's client point index\r\n if (this.currentPolyface !== undefined)\r\n this.currentPolyface.vertexIndexMap.set(vertexKeyIndex, visitor.clientPointIndex(vertexProps.sourceIndex));\r\n });\r\n\r\n return triangle;\r\n }\r\n\r\n /** removed Feature for now */\r\n public addPolyline(points: Point3d[], fillColor: number, feature: Feature | undefined): void {\r\n const { mesh } = this;\r\n\r\n const poly = new MeshPolyline();\r\n for (const position of points)\r\n poly.addIndex(this.addVertex({ position, fillColor, feature }));\r\n\r\n mesh.addPolyline(poly);\r\n }\r\n\r\n /** removed Feature for now */\r\n public addPointString(points: Point3d[], fillColor: number, feature: Feature | undefined): void {\r\n const { mesh } = this;\r\n const poly = new MeshPolyline();\r\n\r\n for (const position of points)\r\n poly.addIndex(this.addVertex({ position, fillColor, feature }));\r\n\r\n mesh.addPolyline(poly);\r\n }\r\n\r\n public beginPolyface(polyface: Polyface, options: MeshEdgeCreationOptions): void {\r\n if (!options.generateNoEdges) {\r\n const triangles = this.mesh.triangles;\r\n this._currentPolyface = new MeshBuilderPolyface(polyface, options, triangles === undefined ? 0 : triangles.length);\r\n }\r\n }\r\n\r\n public endPolyface(): void {\r\n const { currentPolyface, mesh } = this;\r\n if (undefined === currentPolyface)\r\n return;\r\n\r\n this._currentPolyface = undefined;\r\n buildMeshEdges(mesh, currentPolyface);\r\n }\r\n\r\n public addVertex(vertex: VertexKeyProps, addToMeshOnInsert = true): number {\r\n // if vertex key isn't duplicate, then also insert properties into mesh\r\n const onInsert = (vk: VertexKey) => this.mesh.addVertex(vk);\r\n return this.vertexMap.insertKey(vertex, addToMeshOnInsert ? onInsert : undefined);\r\n }\r\n\r\n public addTriangle(triangle: Triangle): void {\r\n // Attempt to avoid adding vertices originating from degenerate triangles before we get here.\r\n // Removed assert and just return if degenerate at this point because uncommon cases (not worth testing for) can still occur.\r\n if (triangle.isDegenerate)\r\n return;\r\n\r\n const onInsert = (_vk: TriangleKey) => this.mesh.addTriangle(triangle);\r\n this.triangleSet.insertKey(triangle, onInsert);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport namespace MeshBuilder { // eslint-disable-line no-redeclare\r\n export interface Props extends Mesh.Props {\r\n tolerance: number;\r\n areaTolerance: number;\r\n }\r\n export interface PolyfaceOptions {\r\n includeParams: boolean;\r\n fillColor: number;\r\n mappedTexture?: TextureMapping;\r\n edgeOptions: MeshEdgeCreationOptions;\r\n }\r\n\r\n export interface PolyfaceVisitorOptions extends PolyfaceOptions {\r\n triangleCount: number;\r\n haveParam: boolean;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshEdgeCreationOptions {\r\n public readonly type: MeshEdgeCreationOptions.Type;\r\n public readonly minCreaseAngle = 20.0 * Angle.radiansPerDegree;\r\n public get generateAllEdges(): boolean { return this.type === MeshEdgeCreationOptions.Type.AllEdges; }\r\n public get generateNoEdges(): boolean { return this.type === MeshEdgeCreationOptions.Type.NoEdges; }\r\n public get generateCreaseEdges(): boolean { return 0 !== (this.type & MeshEdgeCreationOptions.Type.CreaseEdges); }\r\n /** Create edge chains for polyfaces that do not already have them. */\r\n public get createEdgeChains(): boolean { return 0 !== (this.type & MeshEdgeCreationOptions.Type.CreateChains); }\r\n constructor(type = MeshEdgeCreationOptions.Type.NoEdges) { this.type = type; }\r\n}\r\n\r\n/** @internal */\r\nexport namespace MeshEdgeCreationOptions { // eslint-disable-line no-redeclare\r\n export enum Type {\r\n NoEdges = 0x0000,\r\n CreaseEdges = 0x0001 << 1,\r\n SmoothEdges = 0x0001 << 2,\r\n CreateChains = 0x0001 << 3,\r\n DefaultEdges = CreaseEdges,\r\n AllEdges = CreaseEdges | SmoothEdges,\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class MeshBuilderPolyface {\r\n public readonly polyface: Polyface;\r\n public readonly edgeOptions: MeshEdgeCreationOptions;\r\n public readonly vertexIndexMap: Map<number, number> = new Map<number, number>();\r\n public readonly baseTriangleIndex: number;\r\n constructor(polyface: Polyface, edgeOptions: MeshEdgeCreationOptions, baseTriangleIndex: number) {\r\n this.polyface = polyface;\r\n this.edgeOptions = edgeOptions;\r\n this.baseTriangleIndex = baseTriangleIndex;\r\n }\r\n}\r\n\r\nclass EdgeInfo {\r\n public faceIndex1?: number;\r\n\r\n public constructor(\r\n public visible: boolean,\r\n public faceIndex0: number,\r\n public edge: MeshEdge,\r\n public point0: Point3d,\r\n public point1: Point3d) {\r\n }\r\n\r\n public addFace(visible: boolean, faceIndex: number) {\r\n if (undefined === this.faceIndex1) {\r\n this.visible ||= visible;\r\n this.faceIndex1 = faceIndex;\r\n }\r\n }\r\n}\r\n\r\nfunction buildMeshEdges(mesh: Mesh, polyface: MeshBuilderPolyface): void {\r\n if (!mesh.triangles)\r\n return;\r\n\r\n const edgeMap = new Dictionary<MeshEdge, EdgeInfo>((lhs, rhs) => lhs.compareTo(rhs));\r\n const triangleNormals: Vector3d[] = [];\r\n\r\n // We need to detect the edge pairs -- Can't do that from the Mesh indices as these are not shared - so we'll\r\n // assume that the polyface indices are properly shared, this should be true as a seperate index array is used\r\n // for Polyfaces.\r\n const triangle = new Triangle();\r\n const polyfacePoints = [new Point3d(), new Point3d(), new Point3d()];\r\n const polyfaceIndices = [0, 0, 0];\r\n\r\n for (let triangleIndex = polyface.baseTriangleIndex; triangleIndex < mesh.triangles.length; triangleIndex++) {\r\n let indexNotFound = false;\r\n mesh.triangles.getTriangle(triangleIndex, triangle);\r\n for (let j = 0; j < 3; j++) {\r\n const foundPolyfaceIndex = polyface.vertexIndexMap.get(triangle.indices[j]);\r\n assert(undefined !== foundPolyfaceIndex);\r\n if (undefined === foundPolyfaceIndex) {\r\n indexNotFound = true;\r\n continue;\r\n }\r\n\r\n polyfaceIndices[j] = foundPolyfaceIndex;\r\n polyface.polyface.data.getPoint(foundPolyfaceIndex, polyfacePoints[j]);\r\n }\r\n\r\n if (indexNotFound)\r\n continue;\r\n\r\n for (let j = 0; j < 3; j++) {\r\n const jNext = (j + 1) % 3;\r\n const triangleNormalIndex = triangleNormals.length;\r\n const meshEdge = new MeshEdge(triangle.indices[j], triangle.indices[jNext]);\r\n const polyfaceEdge = new MeshEdge(polyfaceIndices[j], polyfaceIndices[jNext]);\r\n const edgeInfo = new EdgeInfo(triangle.isEdgeVisible(j), triangleNormalIndex, meshEdge, polyfacePoints[j], polyfacePoints[jNext]);\r\n\r\n const findOrInsert = edgeMap.findOrInsert(polyfaceEdge, edgeInfo);\r\n if (!findOrInsert.inserted)\r\n findOrInsert.value.addFace(edgeInfo.visible, triangleNormalIndex);\r\n }\r\n\r\n const normal = Vector3d.createCrossProductToPoints(polyfacePoints[0], polyfacePoints[1], polyfacePoints[2]);\r\n normal.normalizeInPlace();\r\n triangleNormals.push(normal);\r\n }\r\n\r\n // If there is no visibility indication in the mesh, infer from the mesh geometry.\r\n if (!polyface.edgeOptions.generateAllEdges) {\r\n const minEdgeDot = Math.cos(polyface.edgeOptions.minCreaseAngle);\r\n for (const edgeInfo of edgeMap.values()) {\r\n if (undefined !== edgeInfo.faceIndex1) {\r\n const normal0 = triangleNormals[edgeInfo.faceIndex0];\r\n const normal1 = triangleNormals[edgeInfo.faceIndex1];\r\n if (Math.abs(normal0.dotProduct(normal1)) > minEdgeDot)\r\n edgeInfo.visible = false;\r\n }\r\n }\r\n }\r\n\r\n // Now populate the MeshEdges.\r\n // ###TODO edge chains?\r\n if (undefined === mesh.edges)\r\n mesh.edges = new MeshEdges();\r\n\r\n const maxPlanarDot = 0.999999;\r\n for (const edgeInfo of edgeMap.values()) {\r\n if (edgeInfo.visible) {\r\n mesh.edges.visible.push(edgeInfo.edge);\r\n } else if (undefined !== edgeInfo.faceIndex1) {\r\n const normal0 = triangleNormals[edgeInfo.faceIndex0];\r\n const normal1 = triangleNormals[edgeInfo.faceIndex1];\r\n if (Math.abs(normal0.dotProduct(normal1)) < maxPlanarDot) {\r\n mesh.edges.silhouette.push(edgeInfo.edge);\r\n mesh.edges.silhouetteNormals.push(new OctEncodedNormalPair(OctEncodedNormal.fromVector(normal0), OctEncodedNormal.fromVector(normal1)));\r\n }\r\n }\r\n }\r\n}\r\n"]}