@itwin/core-frontend 4.8.0-dev.32 → 4.8.0-dev.34

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 (814) hide show
  1. package/README.md +9 -1
  2. package/lib/cjs/AccuDraw.d.ts.map +1 -1
  3. package/lib/cjs/AccuDraw.js +4 -4
  4. package/lib/cjs/AccuDraw.js.map +1 -1
  5. package/lib/cjs/AccuSnap.js +1 -1
  6. package/lib/cjs/AccuSnap.js.map +1 -1
  7. package/lib/cjs/AuxCoordSys.d.ts.map +1 -1
  8. package/lib/cjs/AuxCoordSys.js +2 -2
  9. package/lib/cjs/AuxCoordSys.js.map +1 -1
  10. package/lib/cjs/DecorationsCache.d.ts +1 -1
  11. package/lib/cjs/DecorationsCache.d.ts.map +1 -1
  12. package/lib/cjs/DecorationsCache.js.map +1 -1
  13. package/lib/cjs/EnvironmentDecorations.d.ts.map +1 -1
  14. package/lib/cjs/EnvironmentDecorations.js +2 -2
  15. package/lib/cjs/EnvironmentDecorations.js.map +1 -1
  16. package/lib/cjs/HitDetail.d.ts.map +1 -1
  17. package/lib/cjs/HitDetail.js +3 -3
  18. package/lib/cjs/HitDetail.js.map +1 -1
  19. package/lib/cjs/IModelConnection.d.ts +1 -1
  20. package/lib/cjs/IModelConnection.d.ts.map +1 -1
  21. package/lib/cjs/IModelConnection.js +1 -1
  22. package/lib/cjs/IModelConnection.js.map +1 -1
  23. package/lib/cjs/IpcApp.d.ts +1 -1
  24. package/lib/cjs/IpcApp.d.ts.map +1 -1
  25. package/lib/cjs/IpcApp.js +1 -1
  26. package/lib/cjs/IpcApp.js.map +1 -1
  27. package/lib/cjs/LocalhostIpcApp.js +1 -1
  28. package/lib/cjs/LocalhostIpcApp.js.map +1 -1
  29. package/lib/cjs/NativeApp.js +1 -1
  30. package/lib/cjs/NativeApp.js.map +1 -1
  31. package/lib/cjs/SheetViewState.d.ts.map +1 -1
  32. package/lib/cjs/SheetViewState.js +3 -3
  33. package/lib/cjs/SheetViewState.js.map +1 -1
  34. package/lib/cjs/ViewContext.d.ts +2 -1
  35. package/lib/cjs/ViewContext.d.ts.map +1 -1
  36. package/lib/cjs/ViewContext.js +8 -8
  37. package/lib/cjs/ViewContext.js.map +1 -1
  38. package/lib/cjs/Viewport.d.ts.map +1 -1
  39. package/lib/cjs/Viewport.js +2 -2
  40. package/lib/cjs/Viewport.js.map +1 -1
  41. package/lib/cjs/common/WorkerProxy.d.ts +7 -25
  42. package/lib/cjs/common/WorkerProxy.d.ts.map +1 -1
  43. package/lib/cjs/common/WorkerProxy.js +2 -1
  44. package/lib/cjs/common/WorkerProxy.js.map +1 -1
  45. package/lib/cjs/common/imdl/CompactEdges.d.ts +1 -1
  46. package/lib/cjs/common/imdl/CompactEdges.d.ts.map +1 -1
  47. package/lib/cjs/common/imdl/CompactEdges.js +2 -2
  48. package/lib/cjs/common/imdl/CompactEdges.js.map +1 -1
  49. package/lib/cjs/common/imdl/ImdlModel.d.ts +5 -3
  50. package/lib/cjs/common/imdl/ImdlModel.d.ts.map +1 -1
  51. package/lib/cjs/common/imdl/ImdlModel.js +49 -42
  52. package/lib/cjs/common/imdl/ImdlModel.js.map +1 -1
  53. package/lib/cjs/common/imdl/ImdlSchema.d.ts +4 -4
  54. package/lib/cjs/common/imdl/ImdlSchema.d.ts.map +1 -1
  55. package/lib/cjs/common/imdl/ImdlSchema.js.map +1 -1
  56. package/lib/cjs/common/imdl/ParseImdlDocument.d.ts +4 -2
  57. package/lib/cjs/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  58. package/lib/cjs/common/imdl/ParseImdlDocument.js +10 -8
  59. package/lib/cjs/common/imdl/ParseImdlDocument.js.map +1 -1
  60. package/lib/{esm → cjs/common}/internal/Symbols.d.ts +2 -0
  61. package/lib/cjs/common/internal/Symbols.d.ts.map +1 -0
  62. package/lib/cjs/{internal → common/internal}/Symbols.js +3 -1
  63. package/lib/cjs/common/internal/Symbols.js.map +1 -0
  64. package/lib/cjs/common/internal/render/AnimationNodeId.d.ts.map +1 -0
  65. package/lib/cjs/common/internal/render/AnimationNodeId.js.map +1 -0
  66. package/lib/cjs/common/internal/render/AuxChannelTable.d.ts.map +1 -0
  67. package/lib/cjs/common/internal/render/AuxChannelTable.js.map +1 -0
  68. package/lib/cjs/common/internal/render/ColorMap.d.ts.map +1 -0
  69. package/lib/cjs/common/internal/render/ColorMap.js.map +1 -0
  70. package/lib/cjs/common/internal/render/DisplayParams.d.ts.map +1 -0
  71. package/lib/cjs/common/internal/render/DisplayParams.js.map +1 -0
  72. package/lib/cjs/common/{render/primitives → internal/render}/EdgeParams.d.ts +7 -0
  73. package/lib/cjs/common/internal/render/EdgeParams.d.ts.map +1 -0
  74. package/lib/cjs/{render/primitives → common/internal/render}/EdgeParams.js +50 -16
  75. package/lib/cjs/common/internal/render/EdgeParams.js.map +1 -0
  76. package/lib/cjs/{render/primitives/geometry → common/internal/render}/GeometryAccumulator.d.ts +4 -18
  77. package/lib/cjs/common/internal/render/GeometryAccumulator.d.ts.map +1 -0
  78. package/lib/cjs/{render/primitives/geometry → common/internal/render}/GeometryAccumulator.js +2 -70
  79. package/lib/cjs/common/internal/render/GeometryAccumulator.js.map +1 -0
  80. package/lib/cjs/common/internal/render/GeometryList.d.ts.map +1 -0
  81. package/lib/cjs/common/internal/render/GeometryList.js.map +1 -0
  82. package/lib/{esm/render/primitives/geometry → cjs/common/internal/render}/GeometryPrimitives.d.ts +3 -3
  83. package/lib/cjs/common/internal/render/GeometryPrimitives.d.ts.map +1 -0
  84. package/lib/cjs/{render/primitives/geometry → common/internal/render}/GeometryPrimitives.js +3 -3
  85. package/lib/cjs/common/internal/render/GeometryPrimitives.js.map +1 -0
  86. package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.d.ts +64 -0
  87. package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.d.ts.map +1 -0
  88. package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js +270 -0
  89. package/lib/cjs/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -0
  90. package/lib/cjs/{render/primitives/mesh → common/internal/render}/MeshBuilder.d.ts +4 -4
  91. package/lib/{esm/render/primitives/mesh → cjs/common/internal/render}/MeshBuilder.d.ts.map +1 -1
  92. package/lib/cjs/{render/primitives/mesh → common/internal/render}/MeshBuilder.js +2 -2
  93. package/lib/cjs/common/internal/render/MeshBuilder.js.map +1 -0
  94. package/lib/{esm/render/primitives/mesh → cjs/common/internal/render}/MeshBuilderMap.d.ts +7 -8
  95. package/lib/cjs/common/internal/render/MeshBuilderMap.d.ts.map +1 -0
  96. package/lib/cjs/{render/primitives/mesh → common/internal/render}/MeshBuilderMap.js +4 -6
  97. package/lib/cjs/common/internal/render/MeshBuilderMap.js.map +1 -0
  98. package/lib/cjs/common/internal/render/MeshParams.d.ts.map +1 -0
  99. package/lib/cjs/common/internal/render/MeshParams.js.map +1 -0
  100. package/lib/cjs/common/internal/render/MeshPrimitive.d.ts.map +1 -0
  101. package/lib/cjs/common/internal/render/MeshPrimitive.js.map +1 -0
  102. package/lib/cjs/{render/primitives/mesh → common/internal/render}/MeshPrimitives.d.ts +5 -9
  103. package/lib/cjs/common/internal/render/MeshPrimitives.d.ts.map +1 -0
  104. package/lib/cjs/{render/primitives/mesh → common/internal/render}/MeshPrimitives.js +4 -11
  105. package/lib/cjs/common/internal/render/MeshPrimitives.js.map +1 -0
  106. package/lib/cjs/common/internal/render/PointCloudPrimitive.d.ts.map +1 -0
  107. package/lib/cjs/common/internal/render/PointCloudPrimitive.js.map +1 -0
  108. package/lib/{esm/common/render/primitives → cjs/common/internal/render}/PointStringParams.d.ts +3 -0
  109. package/lib/cjs/common/internal/render/PointStringParams.d.ts.map +1 -0
  110. package/lib/cjs/{render/primitives → common/internal/render}/PointStringParams.js +3 -4
  111. package/lib/cjs/common/internal/render/PointStringParams.js.map +1 -0
  112. package/lib/{esm/render/primitives → cjs/common/internal/render}/Polyface.d.ts +1 -1
  113. package/lib/cjs/common/internal/render/Polyface.d.ts.map +1 -0
  114. package/lib/cjs/common/internal/render/Polyface.js.map +1 -0
  115. package/lib/cjs/common/{render/primitives → internal/render}/PolylineParams.d.ts +10 -1
  116. package/lib/cjs/common/internal/render/PolylineParams.d.ts.map +1 -0
  117. package/lib/cjs/{render/primitives → common/internal/render}/PolylineParams.js +5 -6
  118. package/lib/cjs/common/internal/render/PolylineParams.js.map +1 -0
  119. package/lib/{esm/render/primitives → cjs/common/internal/render}/Primitives.d.ts +3 -34
  120. package/lib/cjs/common/internal/render/Primitives.d.ts.map +1 -0
  121. package/lib/cjs/{render/primitives → common/internal/render}/Primitives.js +1 -44
  122. package/lib/cjs/common/internal/render/Primitives.js.map +1 -0
  123. package/lib/{esm/render/primitives → cjs/common/internal/render}/Strokes.d.ts +1 -1
  124. package/lib/cjs/common/internal/render/Strokes.d.ts.map +1 -0
  125. package/lib/cjs/common/internal/render/Strokes.js.map +1 -0
  126. package/lib/cjs/common/internal/render/SurfaceParams.d.ts.map +1 -0
  127. package/lib/cjs/common/internal/render/SurfaceParams.js.map +1 -0
  128. package/lib/cjs/common/internal/render/VertexIndices.d.ts.map +1 -0
  129. package/lib/cjs/common/internal/render/VertexIndices.js.map +1 -0
  130. package/lib/cjs/common/internal/render/VertexKey.d.ts.map +1 -0
  131. package/lib/cjs/common/internal/render/VertexKey.js.map +1 -0
  132. package/lib/cjs/common/internal/render/VertexTable.d.ts.map +1 -0
  133. package/lib/cjs/common/internal/render/VertexTable.js.map +1 -0
  134. package/lib/{esm/render/primitives → cjs/common/internal/render}/VertexTableBuilder.d.ts +4 -4
  135. package/lib/cjs/common/internal/render/VertexTableBuilder.d.ts.map +1 -0
  136. package/lib/cjs/{render/primitives → common/internal/render}/VertexTableBuilder.js +6 -6
  137. package/lib/cjs/common/internal/render/VertexTableBuilder.js.map +1 -0
  138. package/lib/cjs/common/{render/primitives → internal/render}/VertexTableSplitter.d.ts +1 -1
  139. package/lib/cjs/common/internal/render/VertexTableSplitter.d.ts.map +1 -0
  140. package/lib/cjs/common/internal/render/VertexTableSplitter.js.map +1 -0
  141. package/lib/cjs/common/render/BatchOptions.d.ts +46 -0
  142. package/lib/cjs/common/render/BatchOptions.d.ts.map +1 -0
  143. package/lib/cjs/common/render/{primitives/PolylineParams.js → BatchOptions.js} +1 -1
  144. package/lib/cjs/common/render/BatchOptions.js.map +1 -0
  145. package/lib/cjs/common/render/GraphicAssembler.d.ts +197 -0
  146. package/lib/cjs/common/render/GraphicAssembler.d.ts.map +1 -0
  147. package/lib/cjs/common/render/GraphicAssembler.js +386 -0
  148. package/lib/cjs/common/render/GraphicAssembler.js.map +1 -0
  149. package/lib/cjs/common/render/GraphicDescriptionBuilder.d.ts +154 -0
  150. package/lib/cjs/common/render/GraphicDescriptionBuilder.d.ts.map +1 -0
  151. package/lib/cjs/common/render/GraphicDescriptionBuilder.js +43 -0
  152. package/lib/cjs/common/render/GraphicDescriptionBuilder.js.map +1 -0
  153. package/lib/cjs/common/render/GraphicPrimitive.d.ts.map +1 -0
  154. package/lib/cjs/common/render/GraphicPrimitive.js.map +1 -0
  155. package/lib/cjs/common/render/GraphicType.d.ts +62 -0
  156. package/lib/cjs/common/render/GraphicType.d.ts.map +1 -0
  157. package/lib/cjs/common/render/GraphicType.js +70 -0
  158. package/lib/cjs/common/render/GraphicType.js.map +1 -0
  159. package/lib/cjs/common/render/InstancedGraphicParams.d.ts.map +1 -0
  160. package/lib/cjs/common/render/InstancedGraphicParams.js.map +1 -0
  161. package/lib/cjs/common.d.ts +13 -0
  162. package/lib/cjs/common.d.ts.map +1 -0
  163. package/lib/cjs/common.js +34 -0
  164. package/lib/cjs/common.js.map +1 -0
  165. package/lib/cjs/core-frontend.d.ts +2 -43
  166. package/lib/cjs/core-frontend.d.ts.map +1 -1
  167. package/lib/cjs/core-frontend.js +2 -43
  168. package/lib/cjs/core-frontend.js.map +1 -1
  169. package/lib/cjs/extension/ExtensionRuntime.js +1 -0
  170. package/lib/cjs/extension/ExtensionRuntime.js.map +1 -1
  171. package/lib/cjs/internal/cross-package.d.ts +3 -1
  172. package/lib/cjs/internal/cross-package.d.ts.map +1 -1
  173. package/lib/cjs/internal/cross-package.js +6 -2
  174. package/lib/cjs/internal/cross-package.js.map +1 -1
  175. package/lib/cjs/internal/render/PrimitiveBuilder.d.ts +33 -0
  176. package/lib/cjs/internal/render/PrimitiveBuilder.d.ts.map +1 -0
  177. package/lib/cjs/internal/render/PrimitiveBuilder.js +140 -0
  178. package/lib/cjs/internal/render/PrimitiveBuilder.js.map +1 -0
  179. package/lib/cjs/render/GraphicBranch.d.ts +1 -1
  180. package/lib/cjs/render/GraphicBranch.d.ts.map +1 -1
  181. package/lib/cjs/render/GraphicBranch.js.map +1 -1
  182. package/lib/cjs/render/GraphicBuilder.d.ts +7 -258
  183. package/lib/cjs/render/GraphicBuilder.d.ts.map +1 -1
  184. package/lib/cjs/render/GraphicBuilder.js +18 -284
  185. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  186. package/lib/cjs/render/MockRender.d.ts +5 -5
  187. package/lib/cjs/render/MockRender.d.ts.map +1 -1
  188. package/lib/cjs/render/MockRender.js +2 -2
  189. package/lib/cjs/render/MockRender.js.map +1 -1
  190. package/lib/cjs/render/ParticleCollectionBuilder.d.ts.map +1 -1
  191. package/lib/cjs/render/ParticleCollectionBuilder.js +4 -3
  192. package/lib/cjs/render/ParticleCollectionBuilder.js.map +1 -1
  193. package/lib/cjs/render/RealityMeshParams.js +1 -1
  194. package/lib/cjs/render/RealityMeshParams.js.map +1 -1
  195. package/lib/cjs/render/RenderSystem.d.ts +33 -7
  196. package/lib/cjs/render/RenderSystem.d.ts.map +1 -1
  197. package/lib/cjs/render/RenderSystem.js +55 -6
  198. package/lib/cjs/render/RenderSystem.js.map +1 -1
  199. package/lib/cjs/render/webgl/CachedGeometry.d.ts +1 -1
  200. package/lib/cjs/render/webgl/CachedGeometry.d.ts.map +1 -1
  201. package/lib/cjs/render/webgl/CachedGeometry.js.map +1 -1
  202. package/lib/cjs/render/webgl/ColorInfo.d.ts +1 -1
  203. package/lib/cjs/render/webgl/ColorInfo.d.ts.map +1 -1
  204. package/lib/cjs/render/webgl/ColorInfo.js.map +1 -1
  205. package/lib/cjs/render/webgl/EdgeGeometry.d.ts +2 -2
  206. package/lib/cjs/render/webgl/EdgeGeometry.d.ts.map +1 -1
  207. package/lib/cjs/render/webgl/EdgeGeometry.js.map +1 -1
  208. package/lib/cjs/render/webgl/FeatureOverrides.d.ts +1 -1
  209. package/lib/cjs/render/webgl/FeatureOverrides.d.ts.map +1 -1
  210. package/lib/cjs/render/webgl/FeatureOverrides.js +1 -1
  211. package/lib/cjs/render/webgl/FeatureOverrides.js.map +1 -1
  212. package/lib/cjs/render/webgl/Graphic.d.ts +1 -1
  213. package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
  214. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  215. package/lib/cjs/render/webgl/IndexedEdgeGeometry.d.ts +1 -1
  216. package/lib/cjs/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -1
  217. package/lib/cjs/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  218. package/lib/cjs/render/webgl/InstancedGeometry.d.ts +1 -1
  219. package/lib/cjs/render/webgl/InstancedGeometry.d.ts.map +1 -1
  220. package/lib/cjs/render/webgl/InstancedGeometry.js.map +1 -1
  221. package/lib/cjs/render/webgl/Material.d.ts +1 -1
  222. package/lib/cjs/render/webgl/Material.d.ts.map +1 -1
  223. package/lib/cjs/render/webgl/Material.js.map +1 -1
  224. package/lib/cjs/render/webgl/Mesh.d.ts +6 -3
  225. package/lib/cjs/render/webgl/Mesh.d.ts.map +1 -1
  226. package/lib/cjs/render/webgl/Mesh.js +3 -1
  227. package/lib/cjs/render/webgl/Mesh.js.map +1 -1
  228. package/lib/cjs/render/webgl/MeshData.d.ts +2 -2
  229. package/lib/cjs/render/webgl/MeshData.d.ts.map +1 -1
  230. package/lib/cjs/render/webgl/MeshData.js.map +1 -1
  231. package/lib/cjs/render/webgl/MeshGeometry.d.ts +1 -1
  232. package/lib/cjs/render/webgl/MeshGeometry.d.ts.map +1 -1
  233. package/lib/cjs/render/webgl/PointCloud.d.ts +1 -1
  234. package/lib/cjs/render/webgl/PointCloud.d.ts.map +1 -1
  235. package/lib/cjs/render/webgl/PointCloud.js.map +1 -1
  236. package/lib/cjs/render/webgl/PointString.d.ts +1 -1
  237. package/lib/cjs/render/webgl/PointString.d.ts.map +1 -1
  238. package/lib/cjs/render/webgl/PointString.js.map +1 -1
  239. package/lib/cjs/render/webgl/Polyline.d.ts +1 -1
  240. package/lib/cjs/render/webgl/Polyline.d.ts.map +1 -1
  241. package/lib/cjs/render/webgl/Polyline.js.map +1 -1
  242. package/lib/cjs/render/webgl/Primitive.d.ts +1 -1
  243. package/lib/cjs/render/webgl/Primitive.d.ts.map +1 -1
  244. package/lib/cjs/render/webgl/Primitive.js.map +1 -1
  245. package/lib/cjs/render/webgl/RenderCommands.js +1 -1
  246. package/lib/cjs/render/webgl/RenderCommands.js.map +1 -1
  247. package/lib/cjs/render/webgl/SurfaceGeometry.d.ts +1 -1
  248. package/lib/cjs/render/webgl/SurfaceGeometry.d.ts.map +1 -1
  249. package/lib/cjs/render/webgl/SurfaceGeometry.js +1 -1
  250. package/lib/cjs/render/webgl/SurfaceGeometry.js.map +1 -1
  251. package/lib/cjs/render/webgl/System.d.ts +7 -6
  252. package/lib/cjs/render/webgl/System.d.ts.map +1 -1
  253. package/lib/cjs/render/webgl/System.js +2 -2
  254. package/lib/cjs/render/webgl/System.js.map +1 -1
  255. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  256. package/lib/cjs/render/webgl/Target.js +1 -1
  257. package/lib/cjs/render/webgl/Target.js.map +1 -1
  258. package/lib/cjs/render/webgl/VertexLUT.d.ts +2 -2
  259. package/lib/cjs/render/webgl/VertexLUT.d.ts.map +1 -1
  260. package/lib/cjs/render/webgl/VertexLUT.js.map +1 -1
  261. package/lib/cjs/render/webgl/glsl/Animation.d.ts.map +1 -1
  262. package/lib/cjs/render/webgl/glsl/Animation.js.map +1 -1
  263. package/lib/cjs/tile/B3dmReader.d.ts +1 -1
  264. package/lib/cjs/tile/B3dmReader.js.map +1 -1
  265. package/lib/cjs/tile/GltfReader.d.ts +5 -5
  266. package/lib/cjs/tile/GltfReader.d.ts.map +1 -1
  267. package/lib/cjs/tile/GltfReader.js +6 -6
  268. package/lib/cjs/tile/GltfReader.js.map +1 -1
  269. package/lib/cjs/tile/I3dmReader.d.ts +1 -1
  270. package/lib/cjs/tile/I3dmReader.js.map +1 -1
  271. package/lib/cjs/tile/ImdlDecoder.d.ts +1 -1
  272. package/lib/cjs/tile/ImdlDecoder.d.ts.map +1 -1
  273. package/lib/cjs/tile/ImdlDecoder.js.map +1 -1
  274. package/lib/cjs/tile/ImdlGraphicsCreator.d.ts +3 -0
  275. package/lib/cjs/tile/ImdlGraphicsCreator.d.ts.map +1 -1
  276. package/lib/cjs/tile/ImdlGraphicsCreator.js +87 -5
  277. package/lib/cjs/tile/ImdlGraphicsCreator.js.map +1 -1
  278. package/lib/cjs/tile/ImdlReader.d.ts +1 -1
  279. package/lib/cjs/tile/ImdlReader.d.ts.map +1 -1
  280. package/lib/cjs/tile/ImdlReader.js.map +1 -1
  281. package/lib/cjs/tile/OrbitGtTileTree.js +1 -1
  282. package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
  283. package/lib/cjs/tile/PntsReader.js +1 -1
  284. package/lib/cjs/tile/PntsReader.js.map +1 -1
  285. package/lib/cjs/tile/PrimaryTileTree.js +1 -1
  286. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  287. package/lib/cjs/tile/map/ImageryProviders/FeatureGraphicsRenderer.d.ts +1 -1
  288. package/lib/cjs/tile/map/ImageryProviders/FeatureGraphicsRenderer.d.ts.map +1 -1
  289. package/lib/cjs/tile/map/ImageryProviders/FeatureGraphicsRenderer.js.map +1 -1
  290. package/lib/cjs/tile/map/MapFeatureInfo.d.ts +1 -1
  291. package/lib/cjs/tile/map/MapFeatureInfo.d.ts.map +1 -1
  292. package/lib/cjs/tile/map/MapFeatureInfo.js.map +1 -1
  293. package/lib/cjs/tools/ClipViewTool.d.ts.map +1 -1
  294. package/lib/cjs/tools/ClipViewTool.js +16 -16
  295. package/lib/cjs/tools/ClipViewTool.js.map +1 -1
  296. package/lib/cjs/tools/MeasureTool.d.ts.map +1 -1
  297. package/lib/cjs/tools/MeasureTool.js +9 -9
  298. package/lib/cjs/tools/MeasureTool.js.map +1 -1
  299. package/lib/cjs/tools/ViewTool.d.ts.map +1 -1
  300. package/lib/cjs/tools/ViewTool.js +8 -8
  301. package/lib/cjs/tools/ViewTool.js.map +1 -1
  302. package/lib/cjs/workers/RegisterWorker.d.ts +2 -1
  303. package/lib/cjs/workers/RegisterWorker.d.ts.map +1 -1
  304. package/lib/cjs/workers/RegisterWorker.js +2 -1
  305. package/lib/cjs/workers/RegisterWorker.js.map +1 -1
  306. package/lib/esm/AccuDraw.d.ts.map +1 -1
  307. package/lib/esm/AccuDraw.js +1 -1
  308. package/lib/esm/AccuDraw.js.map +1 -1
  309. package/lib/esm/AccuSnap.js +1 -1
  310. package/lib/esm/AccuSnap.js.map +1 -1
  311. package/lib/esm/AuxCoordSys.d.ts.map +1 -1
  312. package/lib/esm/AuxCoordSys.js +1 -1
  313. package/lib/esm/AuxCoordSys.js.map +1 -1
  314. package/lib/esm/DecorationsCache.d.ts +1 -1
  315. package/lib/esm/DecorationsCache.d.ts.map +1 -1
  316. package/lib/esm/DecorationsCache.js.map +1 -1
  317. package/lib/esm/EnvironmentDecorations.d.ts.map +1 -1
  318. package/lib/esm/EnvironmentDecorations.js +1 -1
  319. package/lib/esm/EnvironmentDecorations.js.map +1 -1
  320. package/lib/esm/HitDetail.d.ts.map +1 -1
  321. package/lib/esm/HitDetail.js +1 -1
  322. package/lib/esm/HitDetail.js.map +1 -1
  323. package/lib/esm/IModelConnection.d.ts +1 -1
  324. package/lib/esm/IModelConnection.d.ts.map +1 -1
  325. package/lib/esm/IModelConnection.js +1 -1
  326. package/lib/esm/IModelConnection.js.map +1 -1
  327. package/lib/esm/IpcApp.d.ts +1 -1
  328. package/lib/esm/IpcApp.d.ts.map +1 -1
  329. package/lib/esm/IpcApp.js +1 -1
  330. package/lib/esm/IpcApp.js.map +1 -1
  331. package/lib/esm/LocalhostIpcApp.js +1 -1
  332. package/lib/esm/LocalhostIpcApp.js.map +1 -1
  333. package/lib/esm/NativeApp.js +1 -1
  334. package/lib/esm/NativeApp.js.map +1 -1
  335. package/lib/esm/SheetViewState.d.ts.map +1 -1
  336. package/lib/esm/SheetViewState.js +1 -1
  337. package/lib/esm/SheetViewState.js.map +1 -1
  338. package/lib/esm/ViewContext.d.ts +2 -1
  339. package/lib/esm/ViewContext.d.ts.map +1 -1
  340. package/lib/esm/ViewContext.js +1 -1
  341. package/lib/esm/ViewContext.js.map +1 -1
  342. package/lib/esm/Viewport.d.ts.map +1 -1
  343. package/lib/esm/Viewport.js +1 -1
  344. package/lib/esm/Viewport.js.map +1 -1
  345. package/lib/esm/common/WorkerProxy.d.ts +7 -25
  346. package/lib/esm/common/WorkerProxy.d.ts.map +1 -1
  347. package/lib/esm/common/WorkerProxy.js +2 -1
  348. package/lib/esm/common/WorkerProxy.js.map +1 -1
  349. package/lib/esm/common/imdl/CompactEdges.d.ts +1 -1
  350. package/lib/esm/common/imdl/CompactEdges.d.ts.map +1 -1
  351. package/lib/esm/common/imdl/CompactEdges.js +2 -2
  352. package/lib/esm/common/imdl/CompactEdges.js.map +1 -1
  353. package/lib/esm/common/imdl/ImdlModel.d.ts +5 -3
  354. package/lib/esm/common/imdl/ImdlModel.d.ts.map +1 -1
  355. package/lib/esm/common/imdl/ImdlModel.js +47 -41
  356. package/lib/esm/common/imdl/ImdlModel.js.map +1 -1
  357. package/lib/esm/common/imdl/ImdlSchema.d.ts +4 -4
  358. package/lib/esm/common/imdl/ImdlSchema.d.ts.map +1 -1
  359. package/lib/esm/common/imdl/ImdlSchema.js.map +1 -1
  360. package/lib/esm/common/imdl/ParseImdlDocument.d.ts +4 -2
  361. package/lib/esm/common/imdl/ParseImdlDocument.d.ts.map +1 -1
  362. package/lib/esm/common/imdl/ParseImdlDocument.js +9 -8
  363. package/lib/esm/common/imdl/ParseImdlDocument.js.map +1 -1
  364. package/lib/{cjs → esm/common}/internal/Symbols.d.ts +2 -0
  365. package/lib/esm/common/internal/Symbols.d.ts.map +1 -0
  366. package/lib/esm/{internal → common/internal}/Symbols.js +2 -0
  367. package/lib/esm/common/internal/Symbols.js.map +1 -0
  368. package/lib/esm/common/internal/render/AnimationNodeId.d.ts.map +1 -0
  369. package/lib/esm/common/internal/render/AnimationNodeId.js.map +1 -0
  370. package/lib/esm/common/internal/render/AuxChannelTable.d.ts.map +1 -0
  371. package/lib/esm/common/internal/render/AuxChannelTable.js.map +1 -0
  372. package/lib/esm/common/internal/render/ColorMap.d.ts.map +1 -0
  373. package/lib/esm/common/internal/render/ColorMap.js.map +1 -0
  374. package/lib/esm/common/internal/render/DisplayParams.d.ts.map +1 -0
  375. package/lib/esm/common/internal/render/DisplayParams.js.map +1 -0
  376. package/lib/esm/common/{render/primitives → internal/render}/EdgeParams.d.ts +7 -0
  377. package/lib/esm/common/internal/render/EdgeParams.d.ts.map +1 -0
  378. package/lib/esm/{render/primitives → common/internal/render}/EdgeParams.js +47 -14
  379. package/lib/esm/common/internal/render/EdgeParams.js.map +1 -0
  380. package/lib/esm/{render/primitives/geometry → common/internal/render}/GeometryAccumulator.d.ts +4 -18
  381. package/lib/esm/common/internal/render/GeometryAccumulator.d.ts.map +1 -0
  382. package/lib/esm/{render/primitives/geometry → common/internal/render}/GeometryAccumulator.js +2 -70
  383. package/lib/esm/common/internal/render/GeometryAccumulator.js.map +1 -0
  384. package/lib/esm/common/internal/render/GeometryList.d.ts.map +1 -0
  385. package/lib/esm/common/internal/render/GeometryList.js.map +1 -0
  386. package/lib/{cjs/render/primitives/geometry → esm/common/internal/render}/GeometryPrimitives.d.ts +3 -3
  387. package/lib/esm/common/internal/render/GeometryPrimitives.d.ts.map +1 -0
  388. package/lib/esm/{render/primitives/geometry → common/internal/render}/GeometryPrimitives.js +3 -3
  389. package/lib/esm/common/internal/render/GeometryPrimitives.js.map +1 -0
  390. package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.d.ts +64 -0
  391. package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.d.ts.map +1 -0
  392. package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.js +263 -0
  393. package/lib/esm/common/internal/render/GraphicDescriptionBuilderImpl.js.map +1 -0
  394. package/lib/esm/{render/primitives/mesh → common/internal/render}/MeshBuilder.d.ts +4 -4
  395. package/lib/{cjs/render/primitives/mesh → esm/common/internal/render}/MeshBuilder.d.ts.map +1 -1
  396. package/lib/esm/{render/primitives/mesh → common/internal/render}/MeshBuilder.js +2 -2
  397. package/lib/esm/common/internal/render/MeshBuilder.js.map +1 -0
  398. package/lib/{cjs/render/primitives/mesh → esm/common/internal/render}/MeshBuilderMap.d.ts +7 -8
  399. package/lib/esm/common/internal/render/MeshBuilderMap.d.ts.map +1 -0
  400. package/lib/esm/{render/primitives/mesh → common/internal/render}/MeshBuilderMap.js +4 -6
  401. package/lib/esm/common/internal/render/MeshBuilderMap.js.map +1 -0
  402. package/lib/esm/common/internal/render/MeshParams.d.ts.map +1 -0
  403. package/lib/esm/common/internal/render/MeshParams.js.map +1 -0
  404. package/lib/esm/common/internal/render/MeshPrimitive.d.ts.map +1 -0
  405. package/lib/esm/common/internal/render/MeshPrimitive.js.map +1 -0
  406. package/lib/esm/{render/primitives/mesh → common/internal/render}/MeshPrimitives.d.ts +5 -9
  407. package/lib/esm/common/internal/render/MeshPrimitives.d.ts.map +1 -0
  408. package/lib/esm/{render/primitives/mesh → common/internal/render}/MeshPrimitives.js +4 -11
  409. package/lib/esm/common/internal/render/MeshPrimitives.js.map +1 -0
  410. package/lib/esm/common/internal/render/PointCloudPrimitive.d.ts.map +1 -0
  411. package/lib/esm/common/internal/render/PointCloudPrimitive.js.map +1 -0
  412. package/lib/{cjs/common/render/primitives → esm/common/internal/render}/PointStringParams.d.ts +3 -0
  413. package/lib/esm/common/internal/render/PointStringParams.d.ts.map +1 -0
  414. package/lib/esm/{render/primitives → common/internal/render}/PointStringParams.js +3 -4
  415. package/lib/esm/common/internal/render/PointStringParams.js.map +1 -0
  416. package/lib/{cjs/render/primitives → esm/common/internal/render}/Polyface.d.ts +1 -1
  417. package/lib/esm/common/internal/render/Polyface.d.ts.map +1 -0
  418. package/lib/esm/common/internal/render/Polyface.js.map +1 -0
  419. package/lib/esm/common/{render/primitives → internal/render}/PolylineParams.d.ts +10 -1
  420. package/lib/esm/common/internal/render/PolylineParams.d.ts.map +1 -0
  421. package/lib/esm/{render/primitives → common/internal/render}/PolylineParams.js +5 -6
  422. package/lib/esm/common/internal/render/PolylineParams.js.map +1 -0
  423. package/lib/{cjs/render/primitives → esm/common/internal/render}/Primitives.d.ts +3 -34
  424. package/lib/esm/common/internal/render/Primitives.d.ts.map +1 -0
  425. package/lib/esm/{render/primitives → common/internal/render}/Primitives.js +0 -42
  426. package/lib/esm/common/internal/render/Primitives.js.map +1 -0
  427. package/lib/{cjs/render/primitives → esm/common/internal/render}/Strokes.d.ts +1 -1
  428. package/lib/esm/common/internal/render/Strokes.d.ts.map +1 -0
  429. package/lib/esm/common/internal/render/Strokes.js.map +1 -0
  430. package/lib/esm/common/internal/render/SurfaceParams.d.ts.map +1 -0
  431. package/lib/esm/common/internal/render/SurfaceParams.js.map +1 -0
  432. package/lib/esm/common/internal/render/VertexIndices.d.ts.map +1 -0
  433. package/lib/esm/common/internal/render/VertexIndices.js.map +1 -0
  434. package/lib/esm/common/internal/render/VertexKey.d.ts.map +1 -0
  435. package/lib/esm/common/internal/render/VertexKey.js.map +1 -0
  436. package/lib/esm/common/internal/render/VertexTable.d.ts.map +1 -0
  437. package/lib/esm/common/internal/render/VertexTable.js.map +1 -0
  438. package/lib/{cjs/render/primitives → esm/common/internal/render}/VertexTableBuilder.d.ts +4 -4
  439. package/lib/esm/common/internal/render/VertexTableBuilder.d.ts.map +1 -0
  440. package/lib/esm/{render/primitives → common/internal/render}/VertexTableBuilder.js +6 -6
  441. package/lib/esm/common/internal/render/VertexTableBuilder.js.map +1 -0
  442. package/lib/esm/common/{render/primitives → internal/render}/VertexTableSplitter.d.ts +1 -1
  443. package/lib/esm/common/internal/render/VertexTableSplitter.d.ts.map +1 -0
  444. package/lib/esm/common/internal/render/VertexTableSplitter.js.map +1 -0
  445. package/lib/esm/common/render/BatchOptions.d.ts +46 -0
  446. package/lib/esm/common/render/BatchOptions.d.ts.map +1 -0
  447. package/lib/esm/common/render/{primitives/PolylineParams.js → BatchOptions.js} +1 -1
  448. package/lib/esm/common/render/BatchOptions.js.map +1 -0
  449. package/lib/esm/common/render/GraphicAssembler.d.ts +197 -0
  450. package/lib/esm/common/render/GraphicAssembler.d.ts.map +1 -0
  451. package/lib/esm/common/render/GraphicAssembler.js +382 -0
  452. package/lib/esm/common/render/GraphicAssembler.js.map +1 -0
  453. package/lib/esm/common/render/GraphicDescriptionBuilder.d.ts +154 -0
  454. package/lib/esm/common/render/GraphicDescriptionBuilder.d.ts.map +1 -0
  455. package/lib/esm/common/render/GraphicDescriptionBuilder.js +40 -0
  456. package/lib/esm/common/render/GraphicDescriptionBuilder.js.map +1 -0
  457. package/lib/esm/common/render/GraphicPrimitive.d.ts.map +1 -0
  458. package/lib/esm/common/render/GraphicPrimitive.js.map +1 -0
  459. package/lib/esm/common/render/GraphicType.d.ts +62 -0
  460. package/lib/esm/common/render/GraphicType.d.ts.map +1 -0
  461. package/lib/esm/common/render/GraphicType.js +67 -0
  462. package/lib/esm/common/render/GraphicType.js.map +1 -0
  463. package/lib/esm/common/render/InstancedGraphicParams.d.ts.map +1 -0
  464. package/lib/esm/common/render/InstancedGraphicParams.js.map +1 -0
  465. package/lib/esm/common.d.ts +13 -0
  466. package/lib/esm/common.d.ts.map +1 -0
  467. package/lib/esm/common.js +18 -0
  468. package/lib/esm/common.js.map +1 -0
  469. package/lib/esm/core-frontend.d.ts +2 -43
  470. package/lib/esm/core-frontend.d.ts.map +1 -1
  471. package/lib/esm/core-frontend.js +2 -43
  472. package/lib/esm/core-frontend.js.map +1 -1
  473. package/lib/esm/extension/ExtensionRuntime.js +2 -1
  474. package/lib/esm/extension/ExtensionRuntime.js.map +1 -1
  475. package/lib/esm/internal/cross-package.d.ts +3 -1
  476. package/lib/esm/internal/cross-package.d.ts.map +1 -1
  477. package/lib/esm/internal/cross-package.js +3 -1
  478. package/lib/esm/internal/cross-package.js.map +1 -1
  479. package/lib/esm/internal/render/PrimitiveBuilder.d.ts +33 -0
  480. package/lib/esm/internal/render/PrimitiveBuilder.d.ts.map +1 -0
  481. package/lib/esm/internal/render/PrimitiveBuilder.js +136 -0
  482. package/lib/esm/internal/render/PrimitiveBuilder.js.map +1 -0
  483. package/lib/esm/render/GraphicBranch.d.ts +1 -1
  484. package/lib/esm/render/GraphicBranch.d.ts.map +1 -1
  485. package/lib/esm/render/GraphicBranch.js.map +1 -1
  486. package/lib/esm/render/GraphicBuilder.d.ts +7 -258
  487. package/lib/esm/render/GraphicBuilder.d.ts.map +1 -1
  488. package/lib/esm/render/GraphicBuilder.js +18 -284
  489. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  490. package/lib/esm/render/MockRender.d.ts +5 -5
  491. package/lib/esm/render/MockRender.d.ts.map +1 -1
  492. package/lib/esm/render/MockRender.js +1 -1
  493. package/lib/esm/render/MockRender.js.map +1 -1
  494. package/lib/esm/render/ParticleCollectionBuilder.d.ts.map +1 -1
  495. package/lib/esm/render/ParticleCollectionBuilder.js +4 -3
  496. package/lib/esm/render/ParticleCollectionBuilder.js.map +1 -1
  497. package/lib/esm/render/RealityMeshParams.js +1 -1
  498. package/lib/esm/render/RealityMeshParams.js.map +1 -1
  499. package/lib/esm/render/RenderSystem.d.ts +33 -7
  500. package/lib/esm/render/RenderSystem.d.ts.map +1 -1
  501. package/lib/esm/render/RenderSystem.js +55 -6
  502. package/lib/esm/render/RenderSystem.js.map +1 -1
  503. package/lib/esm/render/webgl/CachedGeometry.d.ts +1 -1
  504. package/lib/esm/render/webgl/CachedGeometry.d.ts.map +1 -1
  505. package/lib/esm/render/webgl/CachedGeometry.js.map +1 -1
  506. package/lib/esm/render/webgl/ColorInfo.d.ts +1 -1
  507. package/lib/esm/render/webgl/ColorInfo.d.ts.map +1 -1
  508. package/lib/esm/render/webgl/ColorInfo.js.map +1 -1
  509. package/lib/esm/render/webgl/EdgeGeometry.d.ts +2 -2
  510. package/lib/esm/render/webgl/EdgeGeometry.d.ts.map +1 -1
  511. package/lib/esm/render/webgl/EdgeGeometry.js.map +1 -1
  512. package/lib/esm/render/webgl/FeatureOverrides.d.ts +1 -1
  513. package/lib/esm/render/webgl/FeatureOverrides.d.ts.map +1 -1
  514. package/lib/esm/render/webgl/FeatureOverrides.js +1 -1
  515. package/lib/esm/render/webgl/FeatureOverrides.js.map +1 -1
  516. package/lib/esm/render/webgl/Graphic.d.ts +1 -1
  517. package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
  518. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  519. package/lib/esm/render/webgl/IndexedEdgeGeometry.d.ts +1 -1
  520. package/lib/esm/render/webgl/IndexedEdgeGeometry.d.ts.map +1 -1
  521. package/lib/esm/render/webgl/IndexedEdgeGeometry.js.map +1 -1
  522. package/lib/esm/render/webgl/InstancedGeometry.d.ts +1 -1
  523. package/lib/esm/render/webgl/InstancedGeometry.d.ts.map +1 -1
  524. package/lib/esm/render/webgl/InstancedGeometry.js.map +1 -1
  525. package/lib/esm/render/webgl/Material.d.ts +1 -1
  526. package/lib/esm/render/webgl/Material.d.ts.map +1 -1
  527. package/lib/esm/render/webgl/Material.js.map +1 -1
  528. package/lib/esm/render/webgl/Mesh.d.ts +6 -3
  529. package/lib/esm/render/webgl/Mesh.d.ts.map +1 -1
  530. package/lib/esm/render/webgl/Mesh.js +3 -1
  531. package/lib/esm/render/webgl/Mesh.js.map +1 -1
  532. package/lib/esm/render/webgl/MeshData.d.ts +2 -2
  533. package/lib/esm/render/webgl/MeshData.d.ts.map +1 -1
  534. package/lib/esm/render/webgl/MeshData.js.map +1 -1
  535. package/lib/esm/render/webgl/MeshGeometry.d.ts +1 -1
  536. package/lib/esm/render/webgl/MeshGeometry.d.ts.map +1 -1
  537. package/lib/esm/render/webgl/PointCloud.d.ts +1 -1
  538. package/lib/esm/render/webgl/PointCloud.d.ts.map +1 -1
  539. package/lib/esm/render/webgl/PointCloud.js.map +1 -1
  540. package/lib/esm/render/webgl/PointString.d.ts +1 -1
  541. package/lib/esm/render/webgl/PointString.d.ts.map +1 -1
  542. package/lib/esm/render/webgl/PointString.js.map +1 -1
  543. package/lib/esm/render/webgl/Polyline.d.ts +1 -1
  544. package/lib/esm/render/webgl/Polyline.d.ts.map +1 -1
  545. package/lib/esm/render/webgl/Polyline.js.map +1 -1
  546. package/lib/esm/render/webgl/Primitive.d.ts +1 -1
  547. package/lib/esm/render/webgl/Primitive.d.ts.map +1 -1
  548. package/lib/esm/render/webgl/Primitive.js.map +1 -1
  549. package/lib/esm/render/webgl/RenderCommands.js +1 -1
  550. package/lib/esm/render/webgl/RenderCommands.js.map +1 -1
  551. package/lib/esm/render/webgl/SurfaceGeometry.d.ts +1 -1
  552. package/lib/esm/render/webgl/SurfaceGeometry.d.ts.map +1 -1
  553. package/lib/esm/render/webgl/SurfaceGeometry.js +1 -1
  554. package/lib/esm/render/webgl/SurfaceGeometry.js.map +1 -1
  555. package/lib/esm/render/webgl/System.d.ts +7 -6
  556. package/lib/esm/render/webgl/System.d.ts.map +1 -1
  557. package/lib/esm/render/webgl/System.js +1 -1
  558. package/lib/esm/render/webgl/System.js.map +1 -1
  559. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  560. package/lib/esm/render/webgl/Target.js +1 -1
  561. package/lib/esm/render/webgl/Target.js.map +1 -1
  562. package/lib/esm/render/webgl/VertexLUT.d.ts +2 -2
  563. package/lib/esm/render/webgl/VertexLUT.d.ts.map +1 -1
  564. package/lib/esm/render/webgl/VertexLUT.js.map +1 -1
  565. package/lib/esm/render/webgl/glsl/Animation.d.ts.map +1 -1
  566. package/lib/esm/render/webgl/glsl/Animation.js.map +1 -1
  567. package/lib/esm/tile/B3dmReader.d.ts +1 -1
  568. package/lib/esm/tile/B3dmReader.js.map +1 -1
  569. package/lib/esm/tile/GltfReader.d.ts +5 -5
  570. package/lib/esm/tile/GltfReader.d.ts.map +1 -1
  571. package/lib/esm/tile/GltfReader.js +6 -6
  572. package/lib/esm/tile/GltfReader.js.map +1 -1
  573. package/lib/esm/tile/I3dmReader.d.ts +1 -1
  574. package/lib/esm/tile/I3dmReader.js.map +1 -1
  575. package/lib/esm/tile/ImdlDecoder.d.ts +1 -1
  576. package/lib/esm/tile/ImdlDecoder.d.ts.map +1 -1
  577. package/lib/esm/tile/ImdlDecoder.js.map +1 -1
  578. package/lib/esm/tile/ImdlGraphicsCreator.d.ts +3 -0
  579. package/lib/esm/tile/ImdlGraphicsCreator.d.ts.map +1 -1
  580. package/lib/esm/tile/ImdlGraphicsCreator.js +87 -6
  581. package/lib/esm/tile/ImdlGraphicsCreator.js.map +1 -1
  582. package/lib/esm/tile/ImdlReader.d.ts +1 -1
  583. package/lib/esm/tile/ImdlReader.d.ts.map +1 -1
  584. package/lib/esm/tile/ImdlReader.js.map +1 -1
  585. package/lib/esm/tile/OrbitGtTileTree.js +1 -1
  586. package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
  587. package/lib/esm/tile/PntsReader.js +1 -1
  588. package/lib/esm/tile/PntsReader.js.map +1 -1
  589. package/lib/esm/tile/PrimaryTileTree.js +1 -1
  590. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  591. package/lib/esm/tile/map/ImageryProviders/FeatureGraphicsRenderer.d.ts +1 -1
  592. package/lib/esm/tile/map/ImageryProviders/FeatureGraphicsRenderer.d.ts.map +1 -1
  593. package/lib/esm/tile/map/ImageryProviders/FeatureGraphicsRenderer.js.map +1 -1
  594. package/lib/esm/tile/map/MapFeatureInfo.d.ts +1 -1
  595. package/lib/esm/tile/map/MapFeatureInfo.d.ts.map +1 -1
  596. package/lib/esm/tile/map/MapFeatureInfo.js.map +1 -1
  597. package/lib/esm/tools/ClipViewTool.d.ts.map +1 -1
  598. package/lib/esm/tools/ClipViewTool.js +1 -1
  599. package/lib/esm/tools/ClipViewTool.js.map +1 -1
  600. package/lib/esm/tools/MeasureTool.d.ts.map +1 -1
  601. package/lib/esm/tools/MeasureTool.js +1 -1
  602. package/lib/esm/tools/MeasureTool.js.map +1 -1
  603. package/lib/esm/tools/ViewTool.d.ts.map +1 -1
  604. package/lib/esm/tools/ViewTool.js +1 -1
  605. package/lib/esm/tools/ViewTool.js.map +1 -1
  606. package/lib/esm/workers/RegisterWorker.d.ts +2 -1
  607. package/lib/esm/workers/RegisterWorker.d.ts.map +1 -1
  608. package/lib/esm/workers/RegisterWorker.js +2 -1
  609. package/lib/esm/workers/RegisterWorker.js.map +1 -1
  610. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  611. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  612. package/package.json +18 -18
  613. package/lib/cjs/common/render/AnimationNodeId.d.ts.map +0 -1
  614. package/lib/cjs/common/render/AnimationNodeId.js.map +0 -1
  615. package/lib/cjs/common/render/primitives/AuxChannelTable.d.ts.map +0 -1
  616. package/lib/cjs/common/render/primitives/AuxChannelTable.js.map +0 -1
  617. package/lib/cjs/common/render/primitives/DisplayParams.d.ts.map +0 -1
  618. package/lib/cjs/common/render/primitives/DisplayParams.js.map +0 -1
  619. package/lib/cjs/common/render/primitives/EdgeParams.d.ts.map +0 -1
  620. package/lib/cjs/common/render/primitives/EdgeParams.js +0 -46
  621. package/lib/cjs/common/render/primitives/EdgeParams.js.map +0 -1
  622. package/lib/cjs/common/render/primitives/MeshParams.d.ts.map +0 -1
  623. package/lib/cjs/common/render/primitives/MeshParams.js.map +0 -1
  624. package/lib/cjs/common/render/primitives/MeshPrimitive.d.ts.map +0 -1
  625. package/lib/cjs/common/render/primitives/MeshPrimitive.js.map +0 -1
  626. package/lib/cjs/common/render/primitives/PointStringParams.d.ts.map +0 -1
  627. package/lib/cjs/common/render/primitives/PointStringParams.js +0 -10
  628. package/lib/cjs/common/render/primitives/PointStringParams.js.map +0 -1
  629. package/lib/cjs/common/render/primitives/PolylineParams.d.ts.map +0 -1
  630. package/lib/cjs/common/render/primitives/PolylineParams.js.map +0 -1
  631. package/lib/cjs/common/render/primitives/SurfaceParams.d.ts.map +0 -1
  632. package/lib/cjs/common/render/primitives/SurfaceParams.js.map +0 -1
  633. package/lib/cjs/common/render/primitives/VertexIndices.d.ts.map +0 -1
  634. package/lib/cjs/common/render/primitives/VertexIndices.js.map +0 -1
  635. package/lib/cjs/common/render/primitives/VertexTable.d.ts.map +0 -1
  636. package/lib/cjs/common/render/primitives/VertexTable.js.map +0 -1
  637. package/lib/cjs/common/render/primitives/VertexTableSplitter.d.ts.map +0 -1
  638. package/lib/cjs/common/render/primitives/VertexTableSplitter.js.map +0 -1
  639. package/lib/cjs/internal/Symbols.d.ts.map +0 -1
  640. package/lib/cjs/internal/Symbols.js.map +0 -1
  641. package/lib/cjs/render/GraphicPrimitive.d.ts.map +0 -1
  642. package/lib/cjs/render/GraphicPrimitive.js.map +0 -1
  643. package/lib/cjs/render/InstancedGraphicParams.d.ts.map +0 -1
  644. package/lib/cjs/render/InstancedGraphicParams.js.map +0 -1
  645. package/lib/cjs/render/primitives/ColorMap.d.ts.map +0 -1
  646. package/lib/cjs/render/primitives/ColorMap.js.map +0 -1
  647. package/lib/cjs/render/primitives/EdgeParams.d.ts +0 -8
  648. package/lib/cjs/render/primitives/EdgeParams.d.ts.map +0 -1
  649. package/lib/cjs/render/primitives/EdgeParams.js.map +0 -1
  650. package/lib/cjs/render/primitives/PointCloudPrimitive.d.ts.map +0 -1
  651. package/lib/cjs/render/primitives/PointCloudPrimitive.js.map +0 -1
  652. package/lib/cjs/render/primitives/PointStringParams.d.ts +0 -8
  653. package/lib/cjs/render/primitives/PointStringParams.d.ts.map +0 -1
  654. package/lib/cjs/render/primitives/PointStringParams.js.map +0 -1
  655. package/lib/cjs/render/primitives/Polyface.d.ts.map +0 -1
  656. package/lib/cjs/render/primitives/Polyface.js.map +0 -1
  657. package/lib/cjs/render/primitives/PolylineParams.d.ts +0 -15
  658. package/lib/cjs/render/primitives/PolylineParams.d.ts.map +0 -1
  659. package/lib/cjs/render/primitives/PolylineParams.js.map +0 -1
  660. package/lib/cjs/render/primitives/Primitives.d.ts.map +0 -1
  661. package/lib/cjs/render/primitives/Primitives.js.map +0 -1
  662. package/lib/cjs/render/primitives/Strokes.d.ts.map +0 -1
  663. package/lib/cjs/render/primitives/Strokes.js.map +0 -1
  664. package/lib/cjs/render/primitives/VertexKey.d.ts.map +0 -1
  665. package/lib/cjs/render/primitives/VertexKey.js.map +0 -1
  666. package/lib/cjs/render/primitives/VertexTableBuilder.d.ts.map +0 -1
  667. package/lib/cjs/render/primitives/VertexTableBuilder.js.map +0 -1
  668. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts.map +0 -1
  669. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +0 -1
  670. package/lib/cjs/render/primitives/geometry/GeometryList.d.ts.map +0 -1
  671. package/lib/cjs/render/primitives/geometry/GeometryList.js.map +0 -1
  672. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.d.ts +0 -50
  673. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.d.ts.map +0 -1
  674. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js +0 -176
  675. package/lib/cjs/render/primitives/geometry/GeometryListBuilder.js.map +0 -1
  676. package/lib/cjs/render/primitives/geometry/GeometryPrimitives.d.ts.map +0 -1
  677. package/lib/cjs/render/primitives/geometry/GeometryPrimitives.js.map +0 -1
  678. package/lib/cjs/render/primitives/mesh/MeshBuilder.js.map +0 -1
  679. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.d.ts.map +0 -1
  680. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +0 -1
  681. package/lib/cjs/render/primitives/mesh/MeshPrimitives.d.ts.map +0 -1
  682. package/lib/cjs/render/primitives/mesh/MeshPrimitives.js.map +0 -1
  683. package/lib/esm/common/render/AnimationNodeId.d.ts.map +0 -1
  684. package/lib/esm/common/render/AnimationNodeId.js.map +0 -1
  685. package/lib/esm/common/render/primitives/AuxChannelTable.d.ts.map +0 -1
  686. package/lib/esm/common/render/primitives/AuxChannelTable.js.map +0 -1
  687. package/lib/esm/common/render/primitives/DisplayParams.d.ts.map +0 -1
  688. package/lib/esm/common/render/primitives/DisplayParams.js.map +0 -1
  689. package/lib/esm/common/render/primitives/EdgeParams.d.ts.map +0 -1
  690. package/lib/esm/common/render/primitives/EdgeParams.js +0 -42
  691. package/lib/esm/common/render/primitives/EdgeParams.js.map +0 -1
  692. package/lib/esm/common/render/primitives/MeshParams.d.ts.map +0 -1
  693. package/lib/esm/common/render/primitives/MeshParams.js.map +0 -1
  694. package/lib/esm/common/render/primitives/MeshPrimitive.d.ts.map +0 -1
  695. package/lib/esm/common/render/primitives/MeshPrimitive.js.map +0 -1
  696. package/lib/esm/common/render/primitives/PointStringParams.d.ts.map +0 -1
  697. package/lib/esm/common/render/primitives/PointStringParams.js +0 -9
  698. package/lib/esm/common/render/primitives/PointStringParams.js.map +0 -1
  699. package/lib/esm/common/render/primitives/PolylineParams.d.ts.map +0 -1
  700. package/lib/esm/common/render/primitives/PolylineParams.js.map +0 -1
  701. package/lib/esm/common/render/primitives/SurfaceParams.d.ts.map +0 -1
  702. package/lib/esm/common/render/primitives/SurfaceParams.js.map +0 -1
  703. package/lib/esm/common/render/primitives/VertexIndices.d.ts.map +0 -1
  704. package/lib/esm/common/render/primitives/VertexIndices.js.map +0 -1
  705. package/lib/esm/common/render/primitives/VertexTable.d.ts.map +0 -1
  706. package/lib/esm/common/render/primitives/VertexTable.js.map +0 -1
  707. package/lib/esm/common/render/primitives/VertexTableSplitter.d.ts.map +0 -1
  708. package/lib/esm/common/render/primitives/VertexTableSplitter.js.map +0 -1
  709. package/lib/esm/internal/Symbols.d.ts.map +0 -1
  710. package/lib/esm/internal/Symbols.js.map +0 -1
  711. package/lib/esm/render/GraphicPrimitive.d.ts.map +0 -1
  712. package/lib/esm/render/GraphicPrimitive.js.map +0 -1
  713. package/lib/esm/render/InstancedGraphicParams.d.ts.map +0 -1
  714. package/lib/esm/render/InstancedGraphicParams.js.map +0 -1
  715. package/lib/esm/render/primitives/ColorMap.d.ts.map +0 -1
  716. package/lib/esm/render/primitives/ColorMap.js.map +0 -1
  717. package/lib/esm/render/primitives/EdgeParams.d.ts +0 -8
  718. package/lib/esm/render/primitives/EdgeParams.d.ts.map +0 -1
  719. package/lib/esm/render/primitives/EdgeParams.js.map +0 -1
  720. package/lib/esm/render/primitives/PointCloudPrimitive.d.ts.map +0 -1
  721. package/lib/esm/render/primitives/PointCloudPrimitive.js.map +0 -1
  722. package/lib/esm/render/primitives/PointStringParams.d.ts +0 -8
  723. package/lib/esm/render/primitives/PointStringParams.d.ts.map +0 -1
  724. package/lib/esm/render/primitives/PointStringParams.js.map +0 -1
  725. package/lib/esm/render/primitives/Polyface.d.ts.map +0 -1
  726. package/lib/esm/render/primitives/Polyface.js.map +0 -1
  727. package/lib/esm/render/primitives/PolylineParams.d.ts +0 -15
  728. package/lib/esm/render/primitives/PolylineParams.d.ts.map +0 -1
  729. package/lib/esm/render/primitives/PolylineParams.js.map +0 -1
  730. package/lib/esm/render/primitives/Primitives.d.ts.map +0 -1
  731. package/lib/esm/render/primitives/Primitives.js.map +0 -1
  732. package/lib/esm/render/primitives/Strokes.d.ts.map +0 -1
  733. package/lib/esm/render/primitives/Strokes.js.map +0 -1
  734. package/lib/esm/render/primitives/VertexKey.d.ts.map +0 -1
  735. package/lib/esm/render/primitives/VertexKey.js.map +0 -1
  736. package/lib/esm/render/primitives/VertexTableBuilder.d.ts.map +0 -1
  737. package/lib/esm/render/primitives/VertexTableBuilder.js.map +0 -1
  738. package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts.map +0 -1
  739. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +0 -1
  740. package/lib/esm/render/primitives/geometry/GeometryList.d.ts.map +0 -1
  741. package/lib/esm/render/primitives/geometry/GeometryList.js.map +0 -1
  742. package/lib/esm/render/primitives/geometry/GeometryListBuilder.d.ts +0 -50
  743. package/lib/esm/render/primitives/geometry/GeometryListBuilder.d.ts.map +0 -1
  744. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js +0 -171
  745. package/lib/esm/render/primitives/geometry/GeometryListBuilder.js.map +0 -1
  746. package/lib/esm/render/primitives/geometry/GeometryPrimitives.d.ts.map +0 -1
  747. package/lib/esm/render/primitives/geometry/GeometryPrimitives.js.map +0 -1
  748. package/lib/esm/render/primitives/mesh/MeshBuilder.js.map +0 -1
  749. package/lib/esm/render/primitives/mesh/MeshBuilderMap.d.ts.map +0 -1
  750. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +0 -1
  751. package/lib/esm/render/primitives/mesh/MeshPrimitives.d.ts.map +0 -1
  752. package/lib/esm/render/primitives/mesh/MeshPrimitives.js.map +0 -1
  753. /package/lib/cjs/common/{render → internal/render}/AnimationNodeId.d.ts +0 -0
  754. /package/lib/cjs/common/{render → internal/render}/AnimationNodeId.js +0 -0
  755. /package/lib/cjs/common/{render/primitives → internal/render}/AuxChannelTable.d.ts +0 -0
  756. /package/lib/cjs/common/{render/primitives → internal/render}/AuxChannelTable.js +0 -0
  757. /package/lib/cjs/{render/primitives → common/internal/render}/ColorMap.d.ts +0 -0
  758. /package/lib/cjs/{render/primitives → common/internal/render}/ColorMap.js +0 -0
  759. /package/lib/cjs/common/{render/primitives → internal/render}/DisplayParams.d.ts +0 -0
  760. /package/lib/cjs/common/{render/primitives → internal/render}/DisplayParams.js +0 -0
  761. /package/lib/cjs/{render/primitives/geometry → common/internal/render}/GeometryList.d.ts +0 -0
  762. /package/lib/cjs/{render/primitives/geometry → common/internal/render}/GeometryList.js +0 -0
  763. /package/lib/cjs/common/{render/primitives → internal/render}/MeshParams.d.ts +0 -0
  764. /package/lib/cjs/common/{render/primitives → internal/render}/MeshParams.js +0 -0
  765. /package/lib/cjs/common/{render/primitives → internal/render}/MeshPrimitive.d.ts +0 -0
  766. /package/lib/cjs/common/{render/primitives → internal/render}/MeshPrimitive.js +0 -0
  767. /package/lib/cjs/{render/primitives → common/internal/render}/PointCloudPrimitive.d.ts +0 -0
  768. /package/lib/cjs/{render/primitives → common/internal/render}/PointCloudPrimitive.js +0 -0
  769. /package/lib/cjs/{render/primitives → common/internal/render}/Polyface.js +0 -0
  770. /package/lib/cjs/{render/primitives → common/internal/render}/Strokes.js +0 -0
  771. /package/lib/cjs/common/{render/primitives → internal/render}/SurfaceParams.d.ts +0 -0
  772. /package/lib/cjs/common/{render/primitives → internal/render}/SurfaceParams.js +0 -0
  773. /package/lib/cjs/common/{render/primitives → internal/render}/VertexIndices.d.ts +0 -0
  774. /package/lib/cjs/common/{render/primitives → internal/render}/VertexIndices.js +0 -0
  775. /package/lib/cjs/{render/primitives → common/internal/render}/VertexKey.d.ts +0 -0
  776. /package/lib/cjs/{render/primitives → common/internal/render}/VertexKey.js +0 -0
  777. /package/lib/cjs/common/{render/primitives → internal/render}/VertexTable.d.ts +0 -0
  778. /package/lib/cjs/common/{render/primitives → internal/render}/VertexTable.js +0 -0
  779. /package/lib/cjs/common/{render/primitives → internal/render}/VertexTableSplitter.js +0 -0
  780. /package/lib/cjs/{render → common/render}/GraphicPrimitive.d.ts +0 -0
  781. /package/lib/cjs/{render → common/render}/GraphicPrimitive.js +0 -0
  782. /package/lib/cjs/{render → common/render}/InstancedGraphicParams.d.ts +0 -0
  783. /package/lib/cjs/{render → common/render}/InstancedGraphicParams.js +0 -0
  784. /package/lib/esm/common/{render → internal/render}/AnimationNodeId.d.ts +0 -0
  785. /package/lib/esm/common/{render → internal/render}/AnimationNodeId.js +0 -0
  786. /package/lib/esm/common/{render/primitives → internal/render}/AuxChannelTable.d.ts +0 -0
  787. /package/lib/esm/common/{render/primitives → internal/render}/AuxChannelTable.js +0 -0
  788. /package/lib/esm/{render/primitives → common/internal/render}/ColorMap.d.ts +0 -0
  789. /package/lib/esm/{render/primitives → common/internal/render}/ColorMap.js +0 -0
  790. /package/lib/esm/common/{render/primitives → internal/render}/DisplayParams.d.ts +0 -0
  791. /package/lib/esm/common/{render/primitives → internal/render}/DisplayParams.js +0 -0
  792. /package/lib/esm/{render/primitives/geometry → common/internal/render}/GeometryList.d.ts +0 -0
  793. /package/lib/esm/{render/primitives/geometry → common/internal/render}/GeometryList.js +0 -0
  794. /package/lib/esm/common/{render/primitives → internal/render}/MeshParams.d.ts +0 -0
  795. /package/lib/esm/common/{render/primitives → internal/render}/MeshParams.js +0 -0
  796. /package/lib/esm/common/{render/primitives → internal/render}/MeshPrimitive.d.ts +0 -0
  797. /package/lib/esm/common/{render/primitives → internal/render}/MeshPrimitive.js +0 -0
  798. /package/lib/esm/{render/primitives → common/internal/render}/PointCloudPrimitive.d.ts +0 -0
  799. /package/lib/esm/{render/primitives → common/internal/render}/PointCloudPrimitive.js +0 -0
  800. /package/lib/esm/{render/primitives → common/internal/render}/Polyface.js +0 -0
  801. /package/lib/esm/{render/primitives → common/internal/render}/Strokes.js +0 -0
  802. /package/lib/esm/common/{render/primitives → internal/render}/SurfaceParams.d.ts +0 -0
  803. /package/lib/esm/common/{render/primitives → internal/render}/SurfaceParams.js +0 -0
  804. /package/lib/esm/common/{render/primitives → internal/render}/VertexIndices.d.ts +0 -0
  805. /package/lib/esm/common/{render/primitives → internal/render}/VertexIndices.js +0 -0
  806. /package/lib/esm/{render/primitives → common/internal/render}/VertexKey.d.ts +0 -0
  807. /package/lib/esm/{render/primitives → common/internal/render}/VertexKey.js +0 -0
  808. /package/lib/esm/common/{render/primitives → internal/render}/VertexTable.d.ts +0 -0
  809. /package/lib/esm/common/{render/primitives → internal/render}/VertexTable.js +0 -0
  810. /package/lib/esm/common/{render/primitives → internal/render}/VertexTableSplitter.js +0 -0
  811. /package/lib/esm/{render → common/render}/GraphicPrimitive.d.ts +0 -0
  812. /package/lib/esm/{render → common/render}/GraphicPrimitive.js +0 -0
  813. /package/lib/esm/{render → common/render}/InstancedGraphicParams.d.ts +0 -0
  814. /package/lib/esm/{render → common/render}/InstancedGraphicParams.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"GraphicBuilder.js","sourceRoot":"","sources":["../../../src/render/GraphicBuilder.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, Id64String } from \"@itwin/core-bentley\";\r\nimport {\r\n AnyCurvePrimitive, Arc3d, Box, Loop, Path, Point2d, Point3d, Polyface, Range3d, SolidPrimitive, Transform,\r\n} from \"@itwin/core-geometry\";\r\nimport { AnalysisStyle, ColorDef, Feature, Frustum, GeometryClass, GraphicParams, LinePixels, Npc } from \"@itwin/core-common\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { Viewport } from \"../Viewport\";\r\nimport { RenderGraphic } from \"./RenderGraphic\";\r\nimport { GraphicPrimitive } from \"./GraphicPrimitive\";\r\n\r\n/**\r\n * Describes the type of a [[GraphicBuilder]], which defines the coordinate system in which the builder's geometry is defined and\r\n * controls the behavior of the [[RenderGraphic]] produced by the builder.\r\n * @note For those types for which depth-testing is disabled, the order in which the individual geometric primitives are drawn determines which geometry draws on top of other geometry.\r\n * - Within a [[GraphicList]], each [[RenderGraphic]] is rendered in the order in which it appears in the list; and\r\n * - Within a single [[RenderGraphic]], each geometric primitive is rendered in the ordered in which it was added to the GraphicBuilder.\r\n * @public\r\n * @extensions\r\n */\r\nexport enum GraphicType {\r\n /**\r\n * Renders behind all other graphics. For example, the border of a [[SheetViewState]] is of this type.\r\n * Coordinates: [[CoordSystem.View]].\r\n * [[RenderMode]]: [[RenderMode.SmoothShade]].\r\n * Lighting: none.\r\n * Depth-testing: disabled.\r\n * @see [[Decorations.viewBackground]]\r\n */\r\n ViewBackground,\r\n /** Used for the scene itself, dynamics, and 'normal' decorations. */\r\n /**\r\n * Renders as if it were part of the scene. All of the [[ViewFlags]] applied to the view's normal geometry also applies to these types of decorations.\r\n * Coordinates: [[CoordSystem.World]].\r\n * Lighting and [[RenderMode]]: from view.\r\n * Depth-testing: enabled.\r\n * @see [[Decorations.normal]].\r\n */\r\n Scene,\r\n /** Renders within the scene. Coordinates: world. RenderMode: smooth. Lighting: default. Z-testing: enabled */\r\n /** Renders within the scene, but ignores the view's [[ViewFlags]].\r\n * Coordinates: [[CoordSystem.World]].\r\n * Lighting: default.\r\n * [[RenderMode]]: [[RenderMode.SmoothShade]].\r\n * Depth-testing: enabled.\r\n * @see [[Decorations.world]].\r\n */\r\n WorldDecoration,\r\n /**\r\n * Renders as an overlay on top of the scene. These decorations differ from [[GraphicType.WorldDecoration]] only in that depth-testing is disabled.\r\n * For example, the ACS triad and [[WindowAreaTool]] decorations are of this type.\r\n * Coordinates: [[CoordSystem.World]].\r\n * [[RenderMode]]: [[RenderMode.SmoothShade]]\r\n * Lighting: default.\r\n * Depth-testing: disabled.\r\n * Renders atop the scene. Coordinates: world. RenderMode: smooth. Lighting: none. Z-testing: disabled\r\n * @note Overlay decorations typically employ some degree of transparency to ensure that they do not fully obscure the scene.\r\n * @see [[Decorations.worldOverlay]]\r\n */\r\n WorldOverlay,\r\n /**\r\n * Renders as an overlay on top of the scene. These decorations differ from [[GraphicType.WorldOverlay]] only in that their geometry is defined in view coordinates rather than world.\r\n * Coordinates: [[CoordSystem.View]].\r\n * [[RenderMode]]: [[RenderMode.SmoothShade]]\r\n * Lighting: default.\r\n * Depth-testing: disabled.\r\n * @note For more flexibility in defining view overlay decorations, consider using a [[CanvasDecorationList]].\r\n * @see [[Decorations.viewOverlay]]\r\n */\r\n ViewOverlay,\r\n}\r\n\r\n/** Options used when constructing a `Batch` - that is, a [[RenderGraphic]] with an associated [FeatureTable]($common) describing individual [Feature]($common)s within the\r\n * graphic. Individual features can be resymbolized in a variety of ways including flashing and hiliting.\r\n * For example, to prevent graphics produced by [[readElementGraphics]] from being hilited when their corresponding element is in the [[SelectionSet]],\r\n * pass `{ noHilite: true }` to [[readElementGraphics]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface BatchOptions {\r\n /** Identifies the [[Tile]] associated with the batch, chiefly for debugging purposes.\r\n * @beta\r\n */\r\n tileId?: string;\r\n /** If true, features within the batch will not be flashed on mouseover. */\r\n noFlash?: boolean;\r\n /** If true, features within the batch will not be hilited when their corresponding element is in the [[SelectionSet]]. */\r\n noHilite?: boolean;\r\n /** If true, features within the batch will not be emphasized when the corresponding [[Feature]] is emphasized using [FeatureOverrides]($common). */\r\n noEmphasis?: boolean;\r\n /** If true, the contents of the batch will only be drawn by [[Viewport.readPixels]], not [[Viewport.renderFrame]], causing them to be locatable but invisible. */\r\n locateOnly?: boolean;\r\n}\r\n\r\n/** Options used as part of [[GraphicBuilderOptions]] to describe a [pickable]($docs/learning/frontend/ViewDecorations#pickable-view-graphic-decorations) [[RenderGraphic]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface PickableGraphicOptions extends BatchOptions {\r\n /** A unique identifier for the graphic.\r\n * @see [[IModelConnection.transientIds]] to obtain a unique Id in the context of an iModel.\r\n * @see [[GraphicBuilder.activatePickableId]] or [[GraphicBuilder.activateFeature]] to change the pickable object while adding geometry.\r\n */\r\n id: Id64String;\r\n /** Optional Id of the subcategory with which the graphic should be associated. */\r\n subCategoryId?: Id64String;\r\n /** Optional geometry class for the graphic - defaults to [GeometryClass.Primary]($common). */\r\n geometryClass?: GeometryClass;\r\n /** The optional Id of the model with which the graphic should be associated. */\r\n modelId?: Id64String;\r\n /** True if the graphic is to be used as a [[DynamicSpatialClassifier]] to classify volumes of a reality model. */\r\n isVolumeClassifier?: boolean;\r\n}\r\n\r\n/** Options for creating a [[GraphicBuilder]] used by functions like [[DecorateContext.createGraphic]] and [[RenderSystem.createGraphic]].\r\n * @see [[ViewportGraphicBuilderOptions]] to create a graphic builder for a [[Viewport]].\r\n * @see [[CustomGraphicBuilderOptions]] to create a graphic builder unassociated with any [[Viewport]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GraphicBuilderOptions {\r\n /** The type of graphic to produce. */\r\n type: GraphicType;\r\n\r\n /** The local-to-world transform in which the builder's geometry is to be defined - by default, an identity transform. */\r\n placement?: Transform;\r\n\r\n /** If the graphic is to be pickable, specifies the pickable Id and other options. */\r\n pickable?: PickableGraphicOptions;\r\n\r\n /** If true, the order in which geometry is added to the builder is preserved.\r\n * This is useful for overlay and background graphics because they draw without using the depth buffer. For example, to draw an overlay containing a red shape with a white outline,\r\n * you would add the shape to the GraphicBuilder first, followed by the outline, to ensure the outline draws \"in front of\" the shape.\r\n * It defaults to true for overlays and background graphics, and false for other graphic types.\r\n * It is not useful for other types of graphics and imposes a performance penalty due to increased number of draw calls.\r\n * For overlay and background graphics that do not need to draw in any particular order, the performance penalty can be eliminated by setting this to `false`.\r\n */\r\n preserveOrder?: boolean;\r\n\r\n /** Controls whether normals are generated for surfaces. Normals allow 3d geometry to receive lighting; without them the geometry will be unaffected by lighting.\r\n * By default, normals are generated only for graphics of type [[GraphicType.Scene]]; or for any type of graphic if [[GraphicBuilder.wantEdges]] is true, because\r\n * normals are required to prevent z-fighting between surfaces and their edges. This default can be overridden by explicitly specifying `true` or `false`.\r\n * @see [[GraphicType]] for a description of whether and how different types of graphics are affected by lighting.\r\n */\r\n wantNormals?: boolean;\r\n\r\n /** Controls whether edges are generated for surfaces.\r\n * Edges are only displayed if [ViewFlags.renderMode]($common) is not [RenderMode.SmoothShade]($common) or [ViewFlags.visibleEdges]($common) is `true`.\r\n * Since all decoration graphics except [[GraphicType.Scene]] are drawn in smooth shaded mode with no visible edges, by default edges are only produced for scene graphics, and\r\n * - if a [[Viewport]] is supplied with the options - only if [ViewFlags.edgesRequired]($common) is true for the viewport.\r\n * That default can be overridden by explicitly specifying `true` or `false`. This can be useful for non-scene decorations contained in a [[GraphicBranch]] that applies [ViewFlagOverrides]($common)\r\n * that change the edge display settings; or for scene decorations that might be cached for reuse after the viewport's edge settings are changed.\r\n * @note Edges will tend to z-fight with their surfaces unless the graphic is [[pickable]].\r\n */\r\n generateEdges?: boolean;\r\n\r\n /** If defined, specifies a point about which the graphic will rotate such that it always faces the viewer.\r\n * This can be particular useful for planar regions to create a billboarding effect - e.g., to implement [[Marker]]-like WebGL decorations.\r\n * The graphic's [[placement]] transform is not applied to the point.\r\n * @note This has no effect for graphics displayed in a 2d view.\r\n */\r\n viewIndependentOrigin?: Point3d;\r\n}\r\n\r\n/** Options for creating a [[GraphicBuilder]] to produce a [[RenderGraphic]] to be displayed in a specific [[Viewport]].\r\n * The level of detail of the graphic will be computed from the position of its geometry within the viewport's [Frustum]($common).\r\n * Default values for [[GraphicBuilderOptions.wantNormals]] and [[GraphicBuilderOptions.generateEdges]] will be determined by the viewport's [ViewFlags]($common).\r\n * The [[GraphicBuilder.iModel]] will be set to the viewport's [[IModelConnection]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ViewportGraphicBuilderOptions extends GraphicBuilderOptions {\r\n /** The viewport in which the resultant [[RenderGraphic]] is to be drawn. */\r\n viewport: Viewport;\r\n\r\n /** If true, [[ViewState.getAspectRatioSkew]] will be taken into account when computing the level of detail for the produced graphics. */\r\n applyAspectRatioSkew?: boolean;\r\n\r\n iModel?: never;\r\n computeChordTolerance?: never;\r\n}\r\n\r\n/** Arguments used to compute the chord tolerance (level of detail) of the [[RenderGraphic]]s produced by a [[GraphicBuilder]].\r\n * Generally, the chord tolerance should be roughly equivalent to the size in meters of one pixel on screen where the graphic is to be displayed.\r\n * For [[GraphicType.ViewOverlay]] and [[GraphicType.ViewBackground]], which already define their geometry in pixels, the chord tolerance should typically be 1.\r\n * @see [[CustomGraphicBuilderOptions.computeChordTolerance]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ComputeChordToleranceArgs {\r\n /** The graphic builder being used to produce the graphics. */\r\n readonly graphic: GraphicBuilder;\r\n /** A function that computes a range enclosing all of the geometry that was added to the builder. */\r\n readonly computeRange: () => Range3d;\r\n}\r\n\r\n/** Options for creating a [[GraphicBuilder]] to produce a [[RenderGraphic]] that is not associated with any particular [[Viewport]] and may not be associated with\r\n * any particular [[IModelConnection]].\r\n * This is primarily useful when the same graphic is to be saved and reused for display in multiple viewports and for which a chord tolerance can be computed\r\n * independently of each viewport's [Frustum]($common).\r\n * @public\r\n * @extensions\r\n */\r\nexport interface CustomGraphicBuilderOptions extends GraphicBuilderOptions {\r\n /** Optionally, the IModelConnection with which the graphic is associated. */\r\n iModel?: IModelConnection;\r\n /** A function that can compute the level of detail for the graphics produced by the builder. */\r\n computeChordTolerance: (args: ComputeChordToleranceArgs) => number;\r\n\r\n applyAspectRatioSkew?: never;\r\n viewport?: never;\r\n}\r\n\r\n/** Provides methods for constructing a [[RenderGraphic]] from geometric primitives.\r\n * GraphicBuilder is primarily used for creating [[Decorations]] to be displayed inside a [[Viewport]].\r\n *\r\n * The typical process for constructing a [[RenderGraphic]] proceeds as follows:\r\n * 1. Use [[DecorateContext.createGraphic]] or [[RenderSystem.createGraphic]] to obtain a builder.\r\n * 2. Set up the symbology using [[GraphicBuilder.activateGraphicParams]] or [[GraphicBuilder.setSymbology]].\r\n * 3. Add one or more geometric primitives using methods like [[GraphicBuilder.addShape]] and [[GraphicBuilder.addLineString]], possibly setting new symbology in between.\r\n * 4. Use [[GraphicBuilder.finish]] to produce the finished [[RenderGraphic]].\r\n *\r\n * @note Most of the methods which add geometry to the builder take ownership of their inputs rather than cloning them.\r\n * So, for example, if you pass an array of points to addLineString(), you should not subsequently modify that array.\r\n *\r\n * @public\r\n * @extensions\r\n */\r\nexport abstract class GraphicBuilder {\r\n /** The local coordinate system transform applied to this builder's geometry.\r\n * @see [[GraphicBuilderOptions.placement]].\r\n */\r\n public readonly placement: Transform;\r\n\r\n /** The iModel associated with this builder, if any. */\r\n public readonly iModel?: IModelConnection;\r\n\r\n /** The type of graphic to be produced by this builder.\r\n * @see [[GraphicBuilderOptions.type]].\r\n */\r\n public readonly type: GraphicType;\r\n\r\n /** If the graphic is to be pickable, specifies the pickable Id and other options. */\r\n public readonly pickable?: Readonly<PickableGraphicOptions>;\r\n\r\n /** If true, the order in which geometry is added to the builder is preserved.\r\n * @see [[GraphicBuilderOptions.preserveOrder]] for more details.\r\n */\r\n public readonly preserveOrder: boolean;\r\n\r\n /** Controls whether normals are generated for surfaces.\r\n * @note Normals are required for proper edge display, so by default they are always produced if [[wantEdges]] is `true`.\r\n * @see [[GraphicBuilderOptions.wantNormals]] for more details.\r\n */\r\n public readonly wantNormals: boolean;\r\n\r\n /** Controls whether edges are generated for surfaces.\r\n * @see [[GraphicBuilderOptions.generateEdges]] for more details.\r\n */\r\n public readonly wantEdges: boolean;\r\n\r\n /** @alpha */\r\n public readonly analysisStyle?: AnalysisStyle;\r\n\r\n protected readonly _computeChordTolerance: (args: ComputeChordToleranceArgs) => number;\r\n protected readonly _options: CustomGraphicBuilderOptions | ViewportGraphicBuilderOptions;\r\n\r\n /** @internal */\r\n protected constructor(options: ViewportGraphicBuilderOptions | CustomGraphicBuilderOptions) {\r\n // Stored for potential use later in creating a new GraphicBuilder from this one (see PrimitiveBuilder.finishGraphic).\r\n this._options = options;\r\n\r\n const vp = options.viewport;\r\n this.placement = options.placement ?? Transform.createIdentity();\r\n this.iModel = vp?.iModel ?? options.iModel;\r\n this.type = options.type;\r\n this.pickable = options.pickable;\r\n this.wantEdges = options.generateEdges ?? (this.type === GraphicType.Scene && (!vp || vp.viewFlags.edgesRequired()));\r\n this.wantNormals = options.wantNormals ?? (this.wantEdges || this.type === GraphicType.Scene);\r\n this.preserveOrder = options.preserveOrder ?? (this.isOverlay || this.isViewBackground);\r\n\r\n if (!options.viewport) {\r\n this._computeChordTolerance = options.computeChordTolerance;\r\n return;\r\n }\r\n\r\n this.analysisStyle = options.viewport.displayStyle.settings.analysisStyle;\r\n\r\n this._computeChordTolerance = (args: ComputeChordToleranceArgs) => {\r\n let pixelSize = 1;\r\n if (!this.isViewCoordinates) {\r\n // Compute the horizontal distance in meters between two adjacent pixels at the center of the geometry.\r\n pixelSize = options.viewport.getPixelSizeAtPoint(args.computeRange().center);\r\n pixelSize = options.viewport.target.adjustPixelSizeForLOD(pixelSize);\r\n\r\n // Aspect ratio skew > 1.0 stretches the view in Y. In that case use the smaller vertical pixel distance for our stroke tolerance.\r\n const skew = options.applyAspectRatioSkew ? options.viewport.view.getAspectRatioSkew() : 0;\r\n if (skew > 1)\r\n pixelSize /= skew;\r\n }\r\n\r\n return pixelSize * 0.25;\r\n };\r\n }\r\n\r\n /** The Id to be associated with the graphic for picking.\r\n * @see [[GraphicBuilderOptions.pickable]] for more options.\r\n * @deprecated in 3.x. This provides only the **first** pickable Id for this graphic - you should keep track of the **current** pickable Id yourself.\r\n */\r\n public get pickId(): Id64String | undefined {\r\n return this.pickable?.id;\r\n }\r\n\r\n /** Whether the builder's geometry is defined in [[CoordSystem.View]] coordinates.\r\n * @see [[isWorldCoordinates]].\r\n */\r\n public get isViewCoordinates(): boolean {\r\n return this.type === GraphicType.ViewBackground || this.type === GraphicType.ViewOverlay;\r\n }\r\n\r\n /** Whether the builder's geometry is defined in [[CoordSystem.World]] coordinates.\r\n * @see [[isViewCoordinates]].\r\n */\r\n public get isWorldCoordinates(): boolean {\r\n return !this.isViewCoordinates;\r\n }\r\n\r\n /** True if the builder produces a graphic of [[GraphicType.Scene]]. */\r\n public get isSceneGraphic(): boolean {\r\n return this.type === GraphicType.Scene;\r\n }\r\n\r\n /** True if the builder produces a graphic of [[GraphicType.ViewBackground]]. */\r\n public get isViewBackground(): boolean {\r\n return this.type === GraphicType.ViewBackground;\r\n }\r\n\r\n /** True if the builder produces a graphic of [[GraphicType.WorldOverlay]] or [[GraphicType.ViewOerlay]]. */\r\n public get isOverlay(): boolean {\r\n return this.type === GraphicType.ViewOverlay || this.type === GraphicType.WorldOverlay;\r\n }\r\n\r\n /**\r\n * Processes the accumulated symbology and geometry to produce a renderable graphic.\r\n * This function can only be called once; after the [[RenderGraphic]] has been extracted the [[GraphicBuilder]] should no longer be used.\r\n */\r\n public abstract finish(): RenderGraphic;\r\n\r\n /** Sets the current active symbology for this builder. Any new geometry subsequently added to the builder will be drawn using the specified symbology.\r\n * @param graphicParams The symbology to apply to subsequent geometry.\r\n * @see [[GraphicBuilder.setSymbology]] for a convenient way to set common symbology options.\r\n */\r\n public abstract activateGraphicParams(graphicParams: GraphicParams): void;\r\n\r\n /** Called by [[activateFeature]] after validation to change the [Feature]($common) to be associated with subsequently-added geometry.\r\n * This default implementation does nothing.\r\n */\r\n protected _activateFeature(_feature: Feature): void { }\r\n\r\n /** Change the [Feature]($common) to be associated with subsequently-added geometry. This permits multiple features to be batched together into a single graphic\r\n * for more efficient rendering.\r\n * @note This method has no effect if [[GraphicBuilderOptions.pickable]] was not supplied to the GraphicBuilder's constructor.\r\n */\r\n public activateFeature(feature: Feature): void {\r\n assert(undefined !== this._options.pickable, \"GraphicBuilder.activateFeature has no effect if PickableGraphicOptions were not supplied\");\r\n if (this._options.pickable)\r\n this._activateFeature(feature);\r\n }\r\n\r\n /** Change the pickable Id to be associated with subsequently-added geometry. This permits multiple pickable objects to be batched together into a single graphic\r\n * for more efficient rendering. This method calls [[activateFeature]], using the subcategory Id and [GeometryClass]($common) specified in [[GraphicBuilder.pickable]]\r\n * at construction, if any.\r\n * @note This method has no effect if [[GraphicBuilderOptions.pickable]] was not supplied to the GraphicBuilder's constructor.\r\n */\r\n public activatePickableId(id: Id64String): void {\r\n const pick = this._options.pickable;\r\n this.activateFeature(new Feature(id, pick?.subCategoryId, pick?.geometryClass));\r\n }\r\n\r\n /**\r\n * Appends a 3d line string to the builder.\r\n * @param points Array of vertices in the line string.\r\n */\r\n public abstract addLineString(points: Point3d[]): void;\r\n\r\n /**\r\n * Appends a 2d line string to the builder.\r\n * @param points Array of vertices in the line string.\r\n * @param zDepth Z value in local coordinates to use for each point.\r\n */\r\n public abstract addLineString2d(points: Point2d[], zDepth: number): void;\r\n\r\n /**\r\n * Appends a 3d point string to the builder. The points are drawn disconnected, with a diameter in pixels defined by the builder's active [[GraphicParams.rasterWidth]].\r\n * @param points Array of vertices in the point string.\r\n */\r\n public abstract addPointString(points: Point3d[]): void;\r\n\r\n /**\r\n * Appends a 2d point string to the builder. The points are drawn disconnected, with a diameter in pixels defined by the builder's active [[GraphicParams.rasterWidth]].\r\n * @param points Array of vertices in the point string.\r\n * @param zDepth Z value in local coordinates to use for each point.\r\n */\r\n public abstract addPointString2d(points: Point2d[], zDepth: number): void;\r\n\r\n /**\r\n * Appends a closed 3d planar region to the builder.\r\n * @param points Array of vertices of the shape.\r\n */\r\n public abstract addShape(points: Point3d[]): void;\r\n\r\n /**\r\n * Appends a closed 2d region to the builder.\r\n * @param points Array of vertices of the shape.\r\n * @param zDepth Z value in local coordinates to use for each point.\r\n */\r\n public abstract addShape2d(points: Point2d[], zDepth: number): void;\r\n\r\n /**\r\n * Appends a 3d open arc or closed ellipse to the builder.\r\n * @param arc Description of the arc or ellipse.\r\n * @param isEllipse If true, and if the arc defines a full sweep, then draw as a closed ellipse instead of an arc.\r\n * @param filled If true, and isEllipse is also true, then draw ellipse filled.\r\n */\r\n public abstract addArc(arc: Arc3d, isEllipse: boolean, filled: boolean): void;\r\n\r\n /**\r\n * Appends a 2d open arc or closed ellipse to the builder.\r\n * @param arc Description of the arc or ellipse.\r\n * @param isEllipse If true, and if the arc defines a full sweep, then draw as a closed ellipse instead of an arc.\r\n * @param filled If true, and isEllipse is also true, then draw ellipse filled.\r\n * @param zDepth Z value in local coordinates to use for each point in the arc or ellipse.\r\n */\r\n public abstract addArc2d(ellipse: Arc3d, isEllipse: boolean, filled: boolean, zDepth: number): void;\r\n\r\n /** Append a 3d open path to the builder. */\r\n public abstract addPath(path: Path): void;\r\n\r\n /** Append a 3d planar region to the builder. */\r\n public abstract addLoop(loop: Loop): void;\r\n\r\n /** Append a [CurvePrimitive]($core-geometry) to the builder. */\r\n public addCurvePrimitive(curve: AnyCurvePrimitive): void {\r\n switch (curve.curvePrimitiveType) {\r\n case \"lineString\":\r\n this.addLineString(curve.points);\r\n break;\r\n case \"lineSegment\":\r\n this.addLineString([curve.startPoint(), curve.endPoint()]);\r\n break;\r\n case \"arc\":\r\n this.addArc(curve, false, false);\r\n break;\r\n default:\r\n const path = new Path();\r\n if (path.tryAddChild(curve))\r\n this.addPath(path);\r\n\r\n break;\r\n }\r\n }\r\n\r\n /** Append a mesh to the builder.\r\n * @param meshData Describes the mesh\r\n * @param filled If the mesh describes a planar region, indicates whether its interior area should be drawn with fill in [[RenderMode.Wireframe]].\r\n */\r\n public abstract addPolyface(meshData: Polyface, filled: boolean): void;\r\n\r\n /** Append a solid primitive to the builder. */\r\n public abstract addSolidPrimitive(solidPrimitive: SolidPrimitive): void;\r\n\r\n /** Append any primitive to the builder.\r\n * @param primitive The graphic primitive to append.\r\n */\r\n public addPrimitive(primitive: GraphicPrimitive): void {\r\n switch (primitive.type) {\r\n case \"linestring\":\r\n this.addLineString(primitive.points);\r\n break;\r\n case \"linestring2d\":\r\n this.addLineString2d(primitive.points, primitive.zDepth);\r\n break;\r\n case \"pointstring\":\r\n this.addPointString(primitive.points);\r\n break;\r\n case \"pointstring2d\":\r\n this.addPointString2d(primitive.points, primitive.zDepth);\r\n break;\r\n case \"shape\":\r\n this.addShape(primitive.points);\r\n break;\r\n case \"shape2d\":\r\n this.addShape2d(primitive.points, primitive.zDepth);\r\n break;\r\n case \"arc\":\r\n this.addArc(primitive.arc, true === primitive.isEllipse, true === primitive.filled);\r\n break;\r\n case \"arc2d\":\r\n this.addArc2d(primitive.arc, true === primitive.isEllipse, true === primitive.filled, primitive.zDepth);\r\n break;\r\n case \"path\":\r\n this.addPath(primitive.path);\r\n break;\r\n case \"loop\":\r\n this.addLoop(primitive.loop);\r\n break;\r\n case \"polyface\":\r\n this.addPolyface(primitive.polyface, true === primitive.filled);\r\n break;\r\n case \"solidPrimitive\":\r\n this.addSolidPrimitive(primitive.solidPrimitive);\r\n break;\r\n }\r\n }\r\n\r\n /** Add a box representing a volume of space. Typically used for debugging purposes.\r\n * @param range The volume of space.\r\n * @param solid If true, a [[Box]] solid primitive will be added; otherwise, a wireframe outline of the box will be added.\r\n */\r\n public addRangeBox(range: Range3d, solid = false): void {\r\n if (!solid) {\r\n this.addFrustum(Frustum.fromRange(range));\r\n return;\r\n }\r\n\r\n const box = Box.createRange(range, true);\r\n if (box)\r\n this.addSolidPrimitive(box);\r\n }\r\n\r\n /** Add Frustum edges. Useful for debugging. */\r\n public addFrustum(frustum: Frustum) {\r\n this.addRangeBoxFromCorners(frustum.points);\r\n }\r\n\r\n /** Add Frustum sides. Useful for debugging. */\r\n public addFrustumSides(frustum: Frustum) {\r\n this.addRangeBoxSidesFromCorners(frustum.points);\r\n }\r\n\r\n /** Add range edges from corner points */\r\n public addRangeBoxFromCorners(p: Point3d[]) {\r\n this.addLineString([\r\n p[Npc.LeftBottomFront],\r\n p[Npc.LeftTopFront],\r\n p[Npc.RightTopFront],\r\n p[Npc.RightBottomFront],\r\n p[Npc.RightBottomRear],\r\n p[Npc.RightTopRear],\r\n p[Npc.LeftTopRear],\r\n p[Npc.LeftBottomRear],\r\n p[Npc.LeftBottomFront].clone(),\r\n p[Npc.RightBottomFront].clone(),\r\n ]);\r\n\r\n this.addLineString([p[Npc.LeftTopFront].clone(), p[Npc.LeftTopRear].clone()]);\r\n this.addLineString([p[Npc.RightTopFront].clone(), p[Npc.RightTopRear].clone()]);\r\n this.addLineString([p[Npc.LeftBottomRear].clone(), p[Npc.RightBottomRear].clone()]);\r\n }\r\n\r\n /** Add range sides from corner points */\r\n public addRangeBoxSidesFromCorners(p: Point3d[]) {\r\n this.addShape([\r\n p[Npc.LeftBottomFront].clone(),\r\n p[Npc.LeftTopFront].clone(),\r\n p[Npc.RightTopFront].clone(),\r\n p[Npc.RightBottomFront].clone(),\r\n p[Npc.LeftBottomFront].clone()]);\r\n this.addShape([\r\n p[Npc.RightTopRear].clone(),\r\n p[Npc.LeftTopRear].clone(),\r\n p[Npc.LeftBottomRear].clone(),\r\n p[Npc.RightBottomRear].clone(),\r\n p[Npc.RightTopRear].clone()]);\r\n this.addShape([\r\n p[Npc.RightTopRear].clone(),\r\n p[Npc.LeftTopRear].clone(),\r\n p[Npc.LeftTopFront].clone(),\r\n p[Npc.RightTopFront].clone(),\r\n p[Npc.RightTopRear].clone()]);\r\n this.addShape([\r\n p[Npc.RightTopRear].clone(),\r\n p[Npc.RightBottomRear].clone(),\r\n p[Npc.RightBottomFront].clone(),\r\n p[Npc.RightTopFront].clone(),\r\n p[Npc.RightTopRear].clone()]);\r\n this.addShape([\r\n p[Npc.LeftBottomRear].clone(),\r\n p[Npc.RightBottomRear].clone(),\r\n p[Npc.RightBottomFront].clone(),\r\n p[Npc.LeftBottomFront].clone(),\r\n p[Npc.LeftBottomRear].clone()]);\r\n this.addShape([\r\n p[Npc.LeftBottomRear].clone(),\r\n p[Npc.LeftTopRear].clone(),\r\n p[Npc.LeftTopFront].clone(),\r\n p[Npc.LeftBottomFront].clone(),\r\n p[Npc.LeftBottomRear].clone()]);\r\n }\r\n\r\n /** Sets the current active symbology for this builder. Any new geometry subsequently added will be drawn using the specified symbology.\r\n * @param lineColor The color in which to draw lines.\r\n * @param fillColor The color in which to draw filled regions.\r\n * @param lineWidth The width in pixels to draw lines. The renderer will clamp this value to an integer in the range [1, 32].\r\n * @param linePixels The pixel pattern in which to draw lines.\r\n * @see [[GraphicBuilder.activateGraphicParams]] for additional symbology options.\r\n */\r\n public setSymbology(lineColor: ColorDef, fillColor: ColorDef, lineWidth: number, linePixels = LinePixels.Solid) {\r\n this.activateGraphicParams(GraphicParams.fromSymbology(lineColor, fillColor, lineWidth, linePixels));\r\n }\r\n\r\n /** Set the current active symbology for this builder to be a blanking fill before adding a planar region.\r\n * A planar region drawn with blanking fill renders behind other geometry in the same graphic.\r\n * Blanking fill is not affected by the fill [[ViewFlags]] being disabled.\r\n * An example would be to add a line to a graphic containing a shape with blanking fill so that the line is always shown in front of the fill.\r\n * @param fillColor The color in which to draw filled regions.\r\n */\r\n public setBlankingFill(fillColor: ColorDef) { this.activateGraphicParams(GraphicParams.fromBlankingFill(fillColor)); }\r\n}\r\n"]}
1
+ {"version":3,"file":"GraphicBuilder.js","sourceRoot":"","sources":["../../../src/render/GraphicBuilder.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAoB,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAInE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAqGvE;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAgB,cAAe,SAAQ,gBAAgB;IAO3D,gBAAgB;IAChB,YAAsB,OAAoE;QACxF,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC5B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;QAClE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;QACzH,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7F,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,YAAY,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,cAAc,CAAC,CAAC;QAEtL,KAAK,CAAC;YACJ,GAAG,OAAO;YACV,CAAC,yBAAyB,CAAC,EAAE,SAAS;YACtC,SAAS;YACT,SAAS;YACT,WAAW;YACX,aAAa;SACd,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,IAAI,CAAC,sBAAsB,GAAG,CAAC,IAA+B,EAAE,EAAE;YAChE,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,uGAAuG;gBACvG,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,CAAC,CAAC;gBAC7E,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;gBAErE,kIAAkI;gBAClI,MAAM,IAAI,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3F,IAAI,IAAI,GAAG,CAAC;oBACV,SAAS,IAAI,IAAI,CAAC;YACtB,CAAC;YAED,OAAO,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC3B,CAAC;CAOF","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 { Id64String } from \"@itwin/core-bentley\";\r\nimport { Point3d, Range3d, Transform } from \"@itwin/core-geometry\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { Viewport } from \"../Viewport\";\r\nimport { RenderGraphic } from \"./RenderGraphic\";\r\nimport { GraphicType } from \"../common/render/GraphicType\";\r\nimport type { PickableGraphicOptions} from \"../common/render/BatchOptions\";\r\nimport { GraphicAssembler } from \"../common/render/GraphicAssembler\";\r\nimport { _implementationProhibited } from \"../common/internal/Symbols\";\r\n\r\n/** Options for creating a [[GraphicBuilder]] used by functions like [[DecorateContext.createGraphic]] and [[RenderSystem.createGraphic]].\r\n * @see [[ViewportGraphicBuilderOptions]] to create a graphic builder for a [[Viewport]].\r\n * @see [[CustomGraphicBuilderOptions]] to create a graphic builder unassociated with any [[Viewport]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface GraphicBuilderOptions {\r\n /** The type of graphic to produce. */\r\n type: GraphicType;\r\n\r\n /** The local-to-world transform in which the builder's geometry is to be defined - by default, an identity transform. */\r\n placement?: Transform;\r\n\r\n /** If the graphic is to be pickable, specifies the pickable Id and other options. */\r\n pickable?: PickableGraphicOptions;\r\n\r\n /** If true, the order in which geometry is added to the builder is preserved.\r\n * This is useful for overlay and background graphics because they draw without using the depth buffer. For example, to draw an overlay containing a red shape with a white outline,\r\n * you would add the shape to the GraphicBuilder first, followed by the outline, to ensure the outline draws \"in front of\" the shape.\r\n * It defaults to true for overlays and background graphics, and false for other graphic types.\r\n * It is not useful for other types of graphics and imposes a performance penalty due to increased number of draw calls.\r\n * For overlay and background graphics that do not need to draw in any particular order, the performance penalty can be eliminated by setting this to `false`.\r\n */\r\n preserveOrder?: boolean;\r\n\r\n /** Controls whether normals are generated for surfaces. Normals allow 3d geometry to receive lighting; without them the geometry will be unaffected by lighting.\r\n * By default, normals are generated only for graphics of type [[GraphicType.Scene]]; or for any type of graphic if [[GraphicBuilder.wantEdges]] is true, because\r\n * normals are required to prevent z-fighting between surfaces and their edges. This default can be overridden by explicitly specifying `true` or `false`.\r\n * @see [[GraphicType]] for a description of whether and how different types of graphics are affected by lighting.\r\n */\r\n wantNormals?: boolean;\r\n\r\n /** Controls whether edges are generated for surfaces.\r\n * Edges are only displayed if [ViewFlags.renderMode]($common) is not [RenderMode.SmoothShade]($common) or [ViewFlags.visibleEdges]($common) is `true`.\r\n * Since all decoration graphics except [[GraphicType.Scene]] are drawn in smooth shaded mode with no visible edges, by default edges are only produced for scene graphics, and\r\n * - if a [[Viewport]] is supplied with the options - only if [ViewFlags.edgesRequired]($common) is true for the viewport.\r\n * That default can be overridden by explicitly specifying `true` or `false`. This can be useful for non-scene decorations contained in a [[GraphicBranch]] that applies [ViewFlagOverrides]($common)\r\n * that change the edge display settings; or for scene decorations that might be cached for reuse after the viewport's edge settings are changed.\r\n * @note Edges will tend to z-fight with their surfaces unless the graphic is [[pickable]].\r\n */\r\n generateEdges?: boolean;\r\n\r\n /** If defined, specifies a point about which the graphic will rotate such that it always faces the viewer.\r\n * This can be particular useful for planar regions to create a billboarding effect - e.g., to implement [[Marker]]-like WebGL decorations.\r\n * The graphic's [[placement]] transform is not applied to the point.\r\n * @note This has no effect for graphics displayed in a 2d view.\r\n */\r\n viewIndependentOrigin?: Point3d;\r\n}\r\n\r\n/** Options for creating a [[GraphicBuilder]] to produce a [[RenderGraphic]] to be displayed in a specific [[Viewport]].\r\n * The level of detail of the graphic will be computed from the position of its geometry within the viewport's [Frustum]($common).\r\n * Default values for [[GraphicBuilderOptions.wantNormals]] and [[GraphicBuilderOptions.generateEdges]] will be determined by the viewport's [ViewFlags]($common).\r\n * The [[GraphicBuilder.iModel]] will be set to the viewport's [[IModelConnection]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ViewportGraphicBuilderOptions extends GraphicBuilderOptions {\r\n /** The viewport in which the resultant [[RenderGraphic]] is to be drawn. */\r\n viewport: Viewport;\r\n\r\n /** If true, [[ViewState.getAspectRatioSkew]] will be taken into account when computing the level of detail for the produced graphics. */\r\n applyAspectRatioSkew?: boolean;\r\n\r\n iModel?: never;\r\n computeChordTolerance?: never;\r\n}\r\n\r\n/** Arguments used to compute the chord tolerance (level of detail) of the [[RenderGraphic]]s produced by a [[GraphicBuilder]].\r\n * Generally, the chord tolerance should be roughly equivalent to the size in meters of one pixel on screen where the graphic is to be displayed.\r\n * For [[GraphicType.ViewOverlay]] and [[GraphicType.ViewBackground]], which already define their geometry in pixels, the chord tolerance should typically be 1.\r\n * @see [[CustomGraphicBuilderOptions.computeChordTolerance]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ComputeChordToleranceArgs {\r\n /** The graphic builder being used to produce the graphics. */\r\n readonly graphic: GraphicBuilder;\r\n /** A function that computes a range enclosing all of the geometry that was added to the builder. */\r\n readonly computeRange: () => Range3d;\r\n}\r\n\r\n/** Options for creating a [[GraphicBuilder]] to produce a [[RenderGraphic]] that is not associated with any particular [[Viewport]] and may not be associated with\r\n * any particular [[IModelConnection]].\r\n * This is primarily useful when the same graphic is to be saved and reused for display in multiple viewports and for which a chord tolerance can be computed\r\n * independently of each viewport's [Frustum]($common).\r\n * @public\r\n * @extensions\r\n */\r\nexport interface CustomGraphicBuilderOptions extends GraphicBuilderOptions {\r\n /** Optionally, the IModelConnection with which the graphic is associated. */\r\n iModel?: IModelConnection;\r\n /** A function that can compute the level of detail for the graphics produced by the builder. */\r\n computeChordTolerance: (args: ComputeChordToleranceArgs) => number;\r\n\r\n applyAspectRatioSkew?: never;\r\n viewport?: never;\r\n}\r\n\r\n/** Provides methods for constructing a [[RenderGraphic]] from geometric primitives and symbology.\r\n * GraphicBuilder is primarily used for creating [[Decorations]] to be displayed inside a [[Viewport]].\r\n *\r\n * The typical process for constructing a [[RenderGraphic]] proceeds as follows:\r\n * 1. Use [[DecorateContext.createGraphic]] or [[RenderSystem.createGraphic]] to obtain a builder.\r\n * 2. Set up the symbology using [[GraphicBuilder.activateGraphicParams]] or [[GraphicBuilder.setSymbology]].\r\n * 3. Add one or more geometric primitives using methods like [[GraphicBuilder.addShape]] and [[GraphicBuilder.addLineString]], possibly setting new symbology in between.\r\n * 4. Use [[GraphicBuilder.finish]] to produce the finished [[RenderGraphic]].\r\n *\r\n * @note Most of the methods which add geometry to the builder take ownership of their inputs rather than cloning them.\r\n * So, for example, if you pass an array of points to addLineString(), you should not subsequently modify that array.\r\n *\r\n * @public\r\n * @extensions\r\n */\r\nexport abstract class GraphicBuilder extends GraphicAssembler {\r\n /** The iModel associated with this builder, if any. */\r\n public readonly iModel?: IModelConnection;\r\n\r\n /** @internal */\r\n protected readonly _computeChordTolerance: (args: ComputeChordToleranceArgs) => number;\r\n\r\n /** @internal */\r\n protected constructor(options: ViewportGraphicBuilderOptions | CustomGraphicBuilderOptions) {\r\n const vp = options.viewport;\r\n const placement = options.placement ?? Transform.createIdentity();\r\n const wantEdges = options.generateEdges ?? (options.type === GraphicType.Scene && (!vp || vp.viewFlags.edgesRequired()));\r\n const wantNormals = options.wantNormals ?? (wantEdges || options.type === GraphicType.Scene);\r\n const preserveOrder = options.preserveOrder ?? (options.type === GraphicType.ViewOverlay || options.type === GraphicType.WorldOverlay || options.type === GraphicType.ViewBackground);\r\n\r\n super({\r\n ...options,\r\n [_implementationProhibited]: undefined,\r\n placement,\r\n wantEdges,\r\n wantNormals,\r\n preserveOrder,\r\n });\r\n\r\n this.iModel = vp?.iModel ?? options.iModel;\r\n if (!options.viewport) {\r\n this._computeChordTolerance = options.computeChordTolerance;\r\n return;\r\n }\r\n\r\n this._computeChordTolerance = (args: ComputeChordToleranceArgs) => {\r\n let pixelSize = 1;\r\n if (!this.isViewCoordinates) {\r\n // Compute the horizontal distance in meters between two adjacent pixels at the center of the geometry.\r\n pixelSize = options.viewport.getPixelSizeAtPoint(args.computeRange().center);\r\n pixelSize = options.viewport.target.adjustPixelSizeForLOD(pixelSize);\r\n\r\n // Aspect ratio skew > 1.0 stretches the view in Y. In that case use the smaller vertical pixel distance for our stroke tolerance.\r\n const skew = options.applyAspectRatioSkew ? options.viewport.view.getAspectRatioSkew() : 0;\r\n if (skew > 1)\r\n pixelSize /= skew;\r\n }\r\n\r\n return pixelSize * 0.25;\r\n };\r\n }\r\n\r\n /** The Id to be associated with the graphic for picking.\r\n * @see [[GraphicBuilderOptions.pickable]] for more options.\r\n * @deprecated in 3.x. This provides only the **first** pickable Id for this graphic - you should keep track of the **current** pickable Id yourself.\r\n */\r\n public get pickId(): Id64String | undefined {\r\n return this.pickable?.id;\r\n }\r\n\r\n /**\r\n * Processes the accumulated symbology and geometry to produce a renderable graphic.\r\n * This function can only be called once; after the [[RenderGraphic]] has been extracted the [[GraphicBuilder]] should no longer be used.\r\n */\r\n public abstract finish(): RenderGraphic;\r\n}\r\n"]}
@@ -2,16 +2,16 @@ import { Transform } from "@itwin/core-geometry";
2
2
  import { ElementAlignedBox3d, RenderFeatureTable } from "@itwin/core-common";
3
3
  import { IModelAppOptions } from "../IModelApp";
4
4
  import { IModelConnection } from "../IModelConnection";
5
- import { MeshParams } from "../common/render/primitives/MeshParams";
6
- import { PointStringParams } from "../common/render/primitives/PointStringParams";
7
- import { PolylineParams } from "../common/render/primitives/PolylineParams";
5
+ import { MeshParams } from "../common/internal/render/MeshParams";
6
+ import { PointStringParams } from "../common/internal/render/PointStringParams";
7
+ import { PolylineParams } from "../common/internal/render/PolylineParams";
8
8
  import { ViewRect } from "../common/ViewRect";
9
9
  import { Decorations } from "./Decorations";
10
10
  import { GraphicBranch, GraphicBranchOptions } from "./GraphicBranch";
11
11
  import { CustomGraphicBuilderOptions, GraphicBuilder, ViewportGraphicBuilderOptions } from "./GraphicBuilder";
12
12
  import { Pixel } from "./Pixel";
13
- import { PrimitiveBuilder } from "./primitives/geometry/GeometryListBuilder";
14
- import { PointCloudArgs } from "./primitives/PointCloudPrimitive";
13
+ import { PrimitiveBuilder } from "../internal/render/PrimitiveBuilder";
14
+ import { PointCloudArgs } from "../common/internal/render/PointCloudPrimitive";
15
15
  import { GraphicList, RenderGraphic } from "./RenderGraphic";
16
16
  import { RenderMemory } from "./RenderMemory";
17
17
  import { RenderPlan } from "./RenderPlan";
@@ -1 +1 @@
1
- {"version":3,"file":"MockRender.d.ts","sourceRoot":"","sources":["../../../src/render/MockRender.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MockRender.d.ts","sourceRoot":"","sources":["../../../src/render/MockRender.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ import { dispose } from "@itwin/core-bentley";
9
9
  import { EmptyLocalization } from "@itwin/core-common";
10
10
  import { IModelApp } from "../IModelApp";
11
11
  import { ViewRect } from "../common/ViewRect";
12
- import { PrimitiveBuilder } from "./primitives/geometry/GeometryListBuilder";
12
+ import { PrimitiveBuilder } from "../internal/render/PrimitiveBuilder";
13
13
  import { RenderGraphic } from "./RenderGraphic";
14
14
  import { RenderSystem } from "./RenderSystem";
15
15
  import { RenderTarget } from "./RenderTarget";
@@ -1 +1 @@
1
- {"version":3,"file":"MockRender.js","sourceRoot":"","sources":["../../../src/render/MockRender.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\r\n/** @packageDocumentation\r\n * @module Utils\r\n */\r\n\r\nimport { dispose } from \"@itwin/core-bentley\";\r\nimport { Transform } from \"@itwin/core-geometry\";\r\nimport { ElementAlignedBox3d, EmptyLocalization, RenderFeatureTable } from \"@itwin/core-common\";\r\nimport { IModelApp, IModelAppOptions } from \"../IModelApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { MeshParams } from \"../common/render/primitives/MeshParams\";\r\nimport { PointStringParams } from \"../common/render/primitives/PointStringParams\";\r\nimport { PolylineParams } from \"../common/render/primitives/PolylineParams\";\r\nimport { ViewRect } from \"../common/ViewRect\";\r\nimport { Decorations } from \"./Decorations\";\r\nimport { GraphicBranch, GraphicBranchOptions } from \"./GraphicBranch\";\r\nimport { CustomGraphicBuilderOptions, GraphicBuilder, ViewportGraphicBuilderOptions } from \"./GraphicBuilder\";\r\nimport { Pixel } from \"./Pixel\";\r\nimport { PrimitiveBuilder } from \"./primitives/geometry/GeometryListBuilder\";\r\nimport { PointCloudArgs } from \"./primitives/PointCloudPrimitive\";\r\nimport { GraphicList, RenderGraphic } from \"./RenderGraphic\";\r\nimport { RenderMemory } from \"./RenderMemory\";\r\nimport { RenderPlan } from \"./RenderPlan\";\r\nimport { RenderAreaPattern, RenderGeometry, RenderSystem } from \"./RenderSystem\";\r\nimport { RenderTarget } from \"./RenderTarget\";\r\nimport { Scene } from \"./Scene\";\r\n\r\n/** Contains extensible mock implementations of the various components of a RenderSystem, intended for use in tests.\r\n * Use these for tests instead of the default RenderSystem wherever possible because:\r\n * (1) Electron has a bug on Windows in which it fails to obtain a WebGLRenderingContext when running inside a VM (e.g., during CI job); and\r\n * (2) To decouple the logic which uses aspects of the RenderSystem from the full implementation.\r\n * Any and all of these types can be extended for the purposes of specific tests.\r\n * To use this:\r\n * (1) If overriding anything in the implementation supplied herein, pass a SystemFactory function to MockRender.App.systemFactory.\r\n * (2) Call MockRender.App.startup() instead of IModelApp.startup() before tests begin.\r\n * (3) Likewise call MockRender.App.shutdown() when finished. This resets the SystemFactory to its default.\r\n * @note The APIs within this namespace are intended *strictly* for use with unit tests.\r\n * @internal\r\n */\r\nexport namespace MockRender {\r\n /** @internal */\r\n export abstract class Target extends RenderTarget {\r\n protected constructor(private readonly _system: RenderSystem) { super(); }\r\n\r\n public get renderSystem(): RenderSystem { return this._system; }\r\n public get wantInvertBlackBackground() { return false; }\r\n public get analysisFraction() { return 0; }\r\n public set analysisFraction(_fraction: number) { }\r\n public changeScene(_scene: Scene) { }\r\n public changeDynamics(_dynamics?: GraphicList) { }\r\n public changeDecorations(_decs: Decorations) { }\r\n public changeRenderPlan(_plan: RenderPlan) { }\r\n public drawFrame(_sceneTime?: number) { }\r\n public updateViewRect() { return false; }\r\n public readPixels(_rect: ViewRect, _selector: Pixel.Selector, receiver: Pixel.Receiver, _excludeNonLocatable: boolean) { receiver(undefined); }\r\n public get screenSpaceEffects(): Iterable<string> { return []; }\r\n public set screenSpaceEffects(_effects: Iterable<string>) { }\r\n }\r\n\r\n /** @internal */\r\n export class OnScreenTarget extends Target {\r\n public constructor(system: RenderSystem, private readonly _canvas: HTMLCanvasElement) { super(system); }\r\n\r\n public get viewRect() { return new ViewRect(0, 0, this._canvas.clientWidth, this._canvas.clientHeight); }\r\n public setViewRect(_rect: ViewRect, _temp: boolean) { }\r\n }\r\n\r\n /** @internal */\r\n export class OffScreenTarget extends Target {\r\n public constructor(system: RenderSystem, private readonly _viewRect: ViewRect) { super(system); }\r\n\r\n public get viewRect() { return this._viewRect; }\r\n public setViewRect(rect: ViewRect, _temp: boolean) { this._viewRect.setFrom(rect); }\r\n }\r\n\r\n /** @internal */\r\n export class Builder extends PrimitiveBuilder {\r\n public constructor(system: System, options: CustomGraphicBuilderOptions | ViewportGraphicBuilderOptions) {\r\n super(system, options);\r\n }\r\n }\r\n\r\n export class Graphic extends RenderGraphic {\r\n public constructor() { super(); }\r\n\r\n public dispose() { }\r\n public collectStatistics(_stats: RenderMemory.Statistics): void { }\r\n public unionRange() { }\r\n }\r\n\r\n export class List extends Graphic {\r\n public constructor(public readonly graphics: RenderGraphic[]) { super(); }\r\n\r\n public override dispose() {\r\n for (const graphic of this.graphics)\r\n dispose(graphic);\r\n\r\n this.graphics.length = 0;\r\n }\r\n }\r\n\r\n export class Branch extends Graphic {\r\n public constructor(public readonly branch: GraphicBranch, public readonly transform: Transform, public readonly options?: GraphicBranchOptions) { super(); }\r\n\r\n public override dispose() { this.branch.dispose(); }\r\n }\r\n\r\n export class Batch extends Graphic {\r\n public constructor(public readonly graphic: RenderGraphic, public readonly featureTable: RenderFeatureTable, public readonly range: ElementAlignedBox3d) { super(); }\r\n\r\n public override dispose() {\r\n dispose(this.graphic);\r\n }\r\n }\r\n\r\n /** @internal */\r\n export class Geometry implements RenderGeometry {\r\n public dispose(): void { }\r\n public collectStatistics(): void { }\r\n }\r\n\r\n /** @internal */\r\n export class AreaPattern implements RenderAreaPattern {\r\n public dispose(): void { }\r\n public collectStatistics(): void { }\r\n }\r\n\r\n export class System extends RenderSystem {\r\n public get isValid() { return true; }\r\n public dispose(): void { }\r\n public override get maxTextureSize() { return 4096; }\r\n\r\n public constructor() { super(); }\r\n\r\n /** @internal */\r\n public override doIdleWork(): boolean { return false; }\r\n\r\n /** @internal */\r\n public override createTarget(canvas: HTMLCanvasElement): OnScreenTarget { return new OnScreenTarget(this, canvas); }\r\n /** @internal */\r\n public override createOffscreenTarget(rect: ViewRect): RenderTarget { return new OffScreenTarget(this, rect); }\r\n\r\n public override createGraphic(options: CustomGraphicBuilderOptions | ViewportGraphicBuilderOptions): GraphicBuilder {\r\n return new Builder(this, options);\r\n }\r\n\r\n public override createGraphicList(primitives: RenderGraphic[]) { return new List(primitives); }\r\n public override createGraphicBranch(branch: GraphicBranch, transform: Transform, options?: GraphicBranchOptions) { return new Branch(branch, transform, options); }\r\n public override createBatch(graphic: RenderGraphic, features: RenderFeatureTable, range: ElementAlignedBox3d) { return new Batch(graphic, features, range); }\r\n\r\n /** @internal */\r\n public override createMesh(_params: MeshParams) { return new Graphic(); }\r\n /** @internal */\r\n public override createPolyline(_params: PolylineParams) { return new Graphic(); }\r\n /** @internal */\r\n public override createPointString(_params: PointStringParams) { return new Graphic(); }\r\n /** @internal */\r\n public override createPointCloud(_args: PointCloudArgs, _imodel: IModelConnection) { return new Graphic(); }\r\n public override createRenderGraphic() { return new Graphic(); }\r\n\r\n /** @internal */\r\n public override createMeshGeometry() { return new Geometry(); }\r\n /** @internal */\r\n public override createPolylineGeometry() { return new Geometry(); }\r\n /** @internal */\r\n public override createPointStringGeometry() { return new Geometry(); }\r\n /** @internal */\r\n public override createAreaPattern() { return new AreaPattern(); }\r\n }\r\n\r\n export type SystemFactory = () => RenderSystem;\r\n\r\n /** An implementation of IModelApp which uses a MockRender.System by default. */\r\n export class App {\r\n public static systemFactory: SystemFactory = () => App.createDefaultRenderSystem();\r\n\r\n public static async startup(opts?: IModelAppOptions): Promise<void> {\r\n opts = opts ? opts : {};\r\n opts.renderSys = this.systemFactory();\r\n opts.localization = opts.localization ?? new EmptyLocalization();\r\n await IModelApp.startup(opts);\r\n }\r\n\r\n public static async shutdown(): Promise<void> {\r\n this.systemFactory = () => App.createDefaultRenderSystem();\r\n await IModelApp.shutdown();\r\n }\r\n\r\n protected static createDefaultRenderSystem() { return new System(); }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"MockRender.js","sourceRoot":"","sources":["../../../src/render/MockRender.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\r\n/** @packageDocumentation\r\n * @module Utils\r\n */\r\n\r\nimport { dispose } from \"@itwin/core-bentley\";\r\nimport { Transform } from \"@itwin/core-geometry\";\r\nimport { ElementAlignedBox3d, EmptyLocalization, RenderFeatureTable } from \"@itwin/core-common\";\r\nimport { IModelApp, IModelAppOptions } from \"../IModelApp\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { MeshParams } from \"../common/internal/render/MeshParams\";\r\nimport { PointStringParams } from \"../common/internal/render/PointStringParams\";\r\nimport { PolylineParams } from \"../common/internal/render/PolylineParams\";\r\nimport { ViewRect } from \"../common/ViewRect\";\r\nimport { Decorations } from \"./Decorations\";\r\nimport { GraphicBranch, GraphicBranchOptions } from \"./GraphicBranch\";\r\nimport { CustomGraphicBuilderOptions, GraphicBuilder, ViewportGraphicBuilderOptions } from \"./GraphicBuilder\";\r\nimport { Pixel } from \"./Pixel\";\r\nimport { PrimitiveBuilder } from \"../internal/render/PrimitiveBuilder\";\r\nimport { PointCloudArgs } from \"../common/internal/render/PointCloudPrimitive\";\r\nimport { GraphicList, RenderGraphic } from \"./RenderGraphic\";\r\nimport { RenderMemory } from \"./RenderMemory\";\r\nimport { RenderPlan } from \"./RenderPlan\";\r\nimport { RenderAreaPattern, RenderGeometry, RenderSystem } from \"./RenderSystem\";\r\nimport { RenderTarget } from \"./RenderTarget\";\r\nimport { Scene } from \"./Scene\";\r\n\r\n/** Contains extensible mock implementations of the various components of a RenderSystem, intended for use in tests.\r\n * Use these for tests instead of the default RenderSystem wherever possible because:\r\n * (1) Electron has a bug on Windows in which it fails to obtain a WebGLRenderingContext when running inside a VM (e.g., during CI job); and\r\n * (2) To decouple the logic which uses aspects of the RenderSystem from the full implementation.\r\n * Any and all of these types can be extended for the purposes of specific tests.\r\n * To use this:\r\n * (1) If overriding anything in the implementation supplied herein, pass a SystemFactory function to MockRender.App.systemFactory.\r\n * (2) Call MockRender.App.startup() instead of IModelApp.startup() before tests begin.\r\n * (3) Likewise call MockRender.App.shutdown() when finished. This resets the SystemFactory to its default.\r\n * @note The APIs within this namespace are intended *strictly* for use with unit tests.\r\n * @internal\r\n */\r\nexport namespace MockRender {\r\n /** @internal */\r\n export abstract class Target extends RenderTarget {\r\n protected constructor(private readonly _system: RenderSystem) { super(); }\r\n\r\n public get renderSystem(): RenderSystem { return this._system; }\r\n public get wantInvertBlackBackground() { return false; }\r\n public get analysisFraction() { return 0; }\r\n public set analysisFraction(_fraction: number) { }\r\n public changeScene(_scene: Scene) { }\r\n public changeDynamics(_dynamics?: GraphicList) { }\r\n public changeDecorations(_decs: Decorations) { }\r\n public changeRenderPlan(_plan: RenderPlan) { }\r\n public drawFrame(_sceneTime?: number) { }\r\n public updateViewRect() { return false; }\r\n public readPixels(_rect: ViewRect, _selector: Pixel.Selector, receiver: Pixel.Receiver, _excludeNonLocatable: boolean) { receiver(undefined); }\r\n public get screenSpaceEffects(): Iterable<string> { return []; }\r\n public set screenSpaceEffects(_effects: Iterable<string>) { }\r\n }\r\n\r\n /** @internal */\r\n export class OnScreenTarget extends Target {\r\n public constructor(system: RenderSystem, private readonly _canvas: HTMLCanvasElement) { super(system); }\r\n\r\n public get viewRect() { return new ViewRect(0, 0, this._canvas.clientWidth, this._canvas.clientHeight); }\r\n public setViewRect(_rect: ViewRect, _temp: boolean) { }\r\n }\r\n\r\n /** @internal */\r\n export class OffScreenTarget extends Target {\r\n public constructor(system: RenderSystem, private readonly _viewRect: ViewRect) { super(system); }\r\n\r\n public get viewRect() { return this._viewRect; }\r\n public setViewRect(rect: ViewRect, _temp: boolean) { this._viewRect.setFrom(rect); }\r\n }\r\n\r\n /** @internal */\r\n export class Builder extends PrimitiveBuilder {\r\n public constructor(system: System, options: CustomGraphicBuilderOptions | ViewportGraphicBuilderOptions) {\r\n super(system, options);\r\n }\r\n }\r\n\r\n export class Graphic extends RenderGraphic {\r\n public constructor() { super(); }\r\n\r\n public dispose() { }\r\n public collectStatistics(_stats: RenderMemory.Statistics): void { }\r\n public unionRange() { }\r\n }\r\n\r\n export class List extends Graphic {\r\n public constructor(public readonly graphics: RenderGraphic[]) { super(); }\r\n\r\n public override dispose() {\r\n for (const graphic of this.graphics)\r\n dispose(graphic);\r\n\r\n this.graphics.length = 0;\r\n }\r\n }\r\n\r\n export class Branch extends Graphic {\r\n public constructor(public readonly branch: GraphicBranch, public readonly transform: Transform, public readonly options?: GraphicBranchOptions) { super(); }\r\n\r\n public override dispose() { this.branch.dispose(); }\r\n }\r\n\r\n export class Batch extends Graphic {\r\n public constructor(public readonly graphic: RenderGraphic, public readonly featureTable: RenderFeatureTable, public readonly range: ElementAlignedBox3d) { super(); }\r\n\r\n public override dispose() {\r\n dispose(this.graphic);\r\n }\r\n }\r\n\r\n /** @internal */\r\n export class Geometry implements RenderGeometry {\r\n public dispose(): void { }\r\n public collectStatistics(): void { }\r\n }\r\n\r\n /** @internal */\r\n export class AreaPattern implements RenderAreaPattern {\r\n public dispose(): void { }\r\n public collectStatistics(): void { }\r\n }\r\n\r\n export class System extends RenderSystem {\r\n public get isValid() { return true; }\r\n public dispose(): void { }\r\n public override get maxTextureSize() { return 4096; }\r\n\r\n public constructor() { super(); }\r\n\r\n /** @internal */\r\n public override doIdleWork(): boolean { return false; }\r\n\r\n /** @internal */\r\n public override createTarget(canvas: HTMLCanvasElement): OnScreenTarget { return new OnScreenTarget(this, canvas); }\r\n /** @internal */\r\n public override createOffscreenTarget(rect: ViewRect): RenderTarget { return new OffScreenTarget(this, rect); }\r\n\r\n public override createGraphic(options: CustomGraphicBuilderOptions | ViewportGraphicBuilderOptions): GraphicBuilder {\r\n return new Builder(this, options);\r\n }\r\n\r\n public override createGraphicList(primitives: RenderGraphic[]) { return new List(primitives); }\r\n public override createGraphicBranch(branch: GraphicBranch, transform: Transform, options?: GraphicBranchOptions) { return new Branch(branch, transform, options); }\r\n public override createBatch(graphic: RenderGraphic, features: RenderFeatureTable, range: ElementAlignedBox3d) { return new Batch(graphic, features, range); }\r\n\r\n /** @internal */\r\n public override createMesh(_params: MeshParams) { return new Graphic(); }\r\n /** @internal */\r\n public override createPolyline(_params: PolylineParams) { return new Graphic(); }\r\n /** @internal */\r\n public override createPointString(_params: PointStringParams) { return new Graphic(); }\r\n /** @internal */\r\n public override createPointCloud(_args: PointCloudArgs, _imodel: IModelConnection) { return new Graphic(); }\r\n public override createRenderGraphic() { return new Graphic(); }\r\n\r\n /** @internal */\r\n public override createMeshGeometry() { return new Geometry(); }\r\n /** @internal */\r\n public override createPolylineGeometry() { return new Geometry(); }\r\n /** @internal */\r\n public override createPointStringGeometry() { return new Geometry(); }\r\n /** @internal */\r\n public override createAreaPattern() { return new AreaPattern(); }\r\n }\r\n\r\n export type SystemFactory = () => RenderSystem;\r\n\r\n /** An implementation of IModelApp which uses a MockRender.System by default. */\r\n export class App {\r\n public static systemFactory: SystemFactory = () => App.createDefaultRenderSystem();\r\n\r\n public static async startup(opts?: IModelAppOptions): Promise<void> {\r\n opts = opts ? opts : {};\r\n opts.renderSys = this.systemFactory();\r\n opts.localization = opts.localization ?? new EmptyLocalization();\r\n await IModelApp.startup(opts);\r\n }\r\n\r\n public static async shutdown(): Promise<void> {\r\n this.systemFactory = () => App.createDefaultRenderSystem();\r\n await IModelApp.shutdown();\r\n }\r\n\r\n protected static createDefaultRenderSystem() { return new System(); }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ParticleCollectionBuilder.d.ts","sourceRoot":"","sources":["../../../src/render/ParticleCollectionBuilder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAkD,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAC8G,aAAa,EACjI,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOhD;;;GAGG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;;OAGG;IACH,OAAO,EAAE,aAAa,CAAC;IAEvB;;OAEG;IACH,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAErB,uGAAuG;IACvG,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,yFAAyF;IACzF,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB,yDAAyD;IACzD,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAc,SAAQ,MAAM;IAC3C;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAEtB,6KAA6K;IAC7K,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,sIAAsI;IACtI,cAAc,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB,iIAAiI;IACjI,IAAI,EAAE,KAAK,CAAC;IAEZ;;;;OAIG;IACH,WAAW,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;IAE/C;;;OAGG;IACH,MAAM,EAAE,MAAM,aAAa,GAAG,SAAS,CAAC;CACzC;AAED;;;GAGG;AACH,yBAAiB,yBAAyB,CAAC;IACzC;;OAEG;IACH,SAAgB,MAAM,CAAC,MAAM,EAAE,+BAA+B,GAAG,yBAAyB,CAEzF;CACF"}
1
+ {"version":3,"file":"ParticleCollectionBuilder.d.ts","sourceRoot":"","sources":["../../../src/render/ParticleCollectionBuilder.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAkD,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAC8G,aAAa,EACjI,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQhD;;;GAGG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;;OAGG;IACH,OAAO,EAAE,aAAa,CAAC;IAEvB;;OAEG;IACH,IAAI,EAAE,KAAK,GAAG,MAAM,CAAC;IAErB,uGAAuG;IACvG,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,yFAAyF;IACzF,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IAExB,yDAAyD;IACzD,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAc,SAAQ,MAAM;IAC3C;;OAEG;IACH,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAEtB,6KAA6K;IAC7K,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,sIAAsI;IACtI,cAAc,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,yBAAyB;IACxC;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB,iIAAiI;IACjI,IAAI,EAAE,KAAK,CAAC;IAEZ;;;;OAIG;IACH,WAAW,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;IAE/C;;;OAGG;IACH,MAAM,EAAE,MAAM,aAAa,GAAG,SAAS,CAAC;CACzC;AAED;;;GAGG;AACH,yBAAiB,yBAAyB,CAAC;IACzC;;OAEG;IACH,SAAgB,MAAM,CAAC,MAAM,EAAE,+BAA+B,GAAG,yBAAyB,CAEzF;CACF"}
@@ -8,8 +8,9 @@
8
8
  import { Point2d, Point3d, Range3d, Transform, Vector2d } from "@itwin/core-geometry";
9
9
  import { ColorDef, ColorIndex, Feature, FeatureIndex, FeatureTable, FillFlags, PackedFeatureTable, QParams3d, QPoint3dList, } from "@itwin/core-common";
10
10
  import { GraphicBranch } from "./GraphicBranch";
11
- import { DisplayParams } from "../common/render/primitives/DisplayParams";
12
- import { createMeshParams } from "./primitives/VertexTableBuilder";
11
+ import { DisplayParams } from "../common/internal/render/DisplayParams";
12
+ import { createMeshParams } from "../common/internal/render/VertexTableBuilder";
13
+ import { IModelApp } from "../IModelApp";
13
14
  /**
14
15
  * @public
15
16
  * @extensions
@@ -230,7 +231,7 @@ function createQuad(size, texture, transparency, viewport) {
230
231
  uvParams: [new Point2d(0, 1), new Point2d(1, 1), new Point2d(0, 0), new Point2d(1, 0)],
231
232
  },
232
233
  };
233
- return createMeshParams(quadArgs, viewport.target.renderSystem.maxTextureSize);
234
+ return createMeshParams(quadArgs, viewport.target.renderSystem.maxTextureSize, "non-indexed" !== IModelApp.tileAdmin.edgeOptions.type);
234
235
  }
235
236
  function clampTransparency(transparency) {
236
237
  transparency = Math.min(255, transparency, Math.max(0, transparency));
@@ -1 +1 @@
1
- {"version":3,"file":"ParticleCollectionBuilder.js","sourceRoot":"","sources":["../../../src/render/ParticleCollectionBuilder.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 { Id64String } from \"@itwin/core-bentley\";\r\nimport { Matrix3d, Point2d, Point3d, Range3d, Transform, Vector2d, XAndY, XYAndZ } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, ColorIndex, Feature, FeatureIndex, FeatureTable, FillFlags, PackedFeatureTable, QParams3d, QPoint3dList, RenderTexture,\r\n} from \"@itwin/core-common\";\r\nimport { Viewport } from \"../Viewport\";\r\nimport { RenderGraphic } from \"./RenderGraphic\";\r\nimport { GraphicBranch } from \"./GraphicBranch\";\r\nimport { MeshArgs } from \"./primitives/mesh/MeshPrimitives\";\r\nimport { DisplayParams } from \"../common/render/primitives/DisplayParams\";\r\nimport { MeshParams } from \"../common/render/primitives/MeshParams\";\r\nimport { createMeshParams } from \"./primitives/VertexTableBuilder\";\r\n\r\n/** Parameters used to construct a [[ParticleCollectionBuilder]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ParticleCollectionBuilderParams {\r\n /** The image mapped to each particle quad.\r\n * @note The texture should be disposed of when no longer needed to free up WebGL resources. For example, if a [[Decorator]] creates the texture, the\r\n * texture should probably be disposed of when the decorator is removed from the [[ViewManager]].\r\n */\r\n texture: RenderTexture;\r\n\r\n /** The default extents of the particle quad. Individual particles may apply a scale to these extents to produce particles of varying dimensions.\r\n * Must be positive.\r\n */\r\n size: XAndY | number;\r\n\r\n /** The initial transparency of the particles as an integer in [0,255]. Defaults to zero if omitted. */\r\n transparency?: number;\r\n\r\n /** The origin of the particle collection in world coordinates. Defaults to (0, 0, 0). */\r\n origin?: XYAndZ;\r\n\r\n /** If the particles are to be pickable, a unique identifier to associate with the resultant [[RenderGraphic]].\r\n * @see [[IModelConnection.transientIdSequence]] to obtain an Id that is unique within an iModel.\r\n */\r\n pickableId?: Id64String;\r\n\r\n /** The viewport in which the particles will be drawn. */\r\n viewport: Viewport;\r\n\r\n /** If true, the finished graphic will be defined in view coordinates, for use as a decoration of type [[GraphicType.ViewBackground]] or [[GraphicType.ViewOverlay]].\r\n * Defaults to false, indicating the graphic will be defined in world coordinates.\r\n * @see [[CoordSystem.View]] and [[CoordSystem.World]].\r\n */\r\n isViewCoords?: boolean;\r\n}\r\n\r\n/** Describes a particle to to add to a particle collection via [[ParticleCollectionBuilder.addParticle]].\r\n * The x, y, and z coordinates represent the centroid of the particle quad in the collection's coordinate space.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ParticleProps extends XYAndZ {\r\n /** The size of the particle, in the collection's coordinate space. If omitted, it defaults to the size supplied to the collection by [[ParticleCollectionBuilderParams.size]].\r\n * Supplying a `number` produces a square; supplying a non-uniform `XAndY` produces a rectangle. Must be positive.\r\n */\r\n size?: XAndY | number;\r\n\r\n /** The transparency with which to draw the particle as an integer in [0,255]. If omitted, it defaults to the current value of [[ParticleCollectionBuilder.transparency]]. */\r\n transparency?: number;\r\n\r\n /** A rotation matrix to orient the particle. If supplied then the particle will not be automatically oriented towards the camera. */\r\n rotationMatrix?: Matrix3d;\r\n}\r\n\r\n/** Interface for producing a collection of particles suitable for use in particle effects.\r\n * Particle effects involve animating hundreds or thousands of small particles to simulate phenomena like smoke, fire, snow, etc.\r\n * A particle collection represents each particle as a quad (rectangle) displaying an image. The position of each particle corresponds to the\r\n * centroid of its quad. The transparency and size of each particle can be specified individually. By default, the quads will always rotate to face the camera\r\n * such that the image is fully visible.\r\n *\r\n * Creating a particle collection using a ParticleCollectionBuilder is far more efficient (in both CPU and GPU usage) than doing so using a [[GraphicBuilder]].\r\n * @see interactive demonstrations of [Snow and Rain](https://www.itwinjs.org/sample-showcase/?group=Viewer+Features&sample=snow-rain-sample&imodel=Villa) and\r\n * [Fire and Smoke](https://www.itwinjs.org/sample-showcase/?group=Viewer+Features&sample=fire-sample&imodel=Villa) particle effects.\r\n * @see [SnowEffect]($frontend-devtools) for an example of a particle effect.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ParticleCollectionBuilder {\r\n /** The default transparency for newly-added particles as an integer in [0,255], used by [[ParticleCollectionBuilder.addParticle]] if [[ParticleProps.transparency]] is omitted.\r\n * Changing this value has no effect on the transparency of previously-added particles.\r\n */\r\n transparency: number;\r\n\r\n /** The default size of each particle, used by [[ParticleCollectionBuilder.addParticle]] if [[ParticleProps.size]] is omitted. */\r\n size: XAndY;\r\n\r\n /** Add a particle to the collection.\r\n * If `size` is omitted, `this.size` is used.\r\n * If `transparency` is omitted, `this.transparency` is used.\r\n * @throws Error if particle size is defined and not greater than zero.\r\n */\r\n addParticle: (particle: ParticleProps) => void;\r\n\r\n /** Produces a finished graphic from the accumulated particles.\r\n * It returns the finished graphic, or `undefined` if the collection contains no particles or the [[RenderSystem]] failed to produce the graphic.\r\n * @note After this method returns, the particle collection is empty.\r\n */\r\n finish: () => RenderGraphic | undefined;\r\n}\r\n\r\n/**\r\n * @public\r\n * @extensions\r\n */\r\nexport namespace ParticleCollectionBuilder {\r\n /** Creates a new ParticleCollectionBuilder.\r\n * @throws Error if size is not greater than zero.\r\n */\r\n export function create(params: ParticleCollectionBuilderParams): ParticleCollectionBuilder {\r\n return new Builder(params);\r\n }\r\n}\r\n\r\nclass Particle {\r\n public readonly centroid: Point3d;\r\n public readonly transparency: number;\r\n public readonly width: number;\r\n public readonly height: number;\r\n public readonly rotationMatrix?: Matrix3d;\r\n\r\n public constructor(centroid: XYAndZ, width: number, height: number, transparency: number, rotationMatrix?: Matrix3d) {\r\n this.centroid = Point3d.fromJSON(centroid);\r\n this.transparency = transparency;\r\n this.width = width;\r\n this.height = height;\r\n this.rotationMatrix = rotationMatrix;\r\n }\r\n}\r\n\r\nclass Builder implements ParticleCollectionBuilder {\r\n private readonly _viewport: Viewport;\r\n private readonly _isViewCoords: boolean;\r\n private readonly _pickableId?: Id64String;\r\n private readonly _texture: RenderTexture;\r\n private readonly _size: Vector2d;\r\n private _transparency: number;\r\n private _hasVaryingTransparency = false;\r\n private readonly _localToWorldTransform: Transform;\r\n private readonly _range = Range3d.createNull();\r\n private _particlesOpaque: Particle[] = [];\r\n private _particlesTranslucent: Particle[] = [];\r\n\r\n public constructor(params: ParticleCollectionBuilderParams) {\r\n this._viewport = params.viewport;\r\n this._isViewCoords = true === params.isViewCoords;\r\n this._pickableId = params.pickableId;\r\n this._texture = params.texture;\r\n this._transparency = undefined !== params.transparency ? clampTransparency(params.transparency) : 0;\r\n this._localToWorldTransform = params.origin ? Transform.createTranslationXYZ(params.origin.x, params.origin.y, params.origin.z) : Transform.createIdentity();\r\n\r\n if (\"number\" === typeof params.size)\r\n this._size = new Vector2d(params.size, params.size);\r\n else\r\n this._size = Vector2d.fromJSON(params.size);\r\n\r\n if (this._size.x <= 0 || this._size.y <= 0)\r\n throw new Error(\"Particle size must be greater than zero\");\r\n }\r\n\r\n public get size(): XAndY {\r\n return this._size;\r\n }\r\n\r\n public get transparency() {\r\n return this._transparency;\r\n }\r\n\r\n public set transparency(transparency: number) {\r\n transparency = clampTransparency(transparency);\r\n if (transparency !== this._transparency) {\r\n this._transparency = transparency;\r\n this._hasVaryingTransparency = this._particlesTranslucent.length > 0;\r\n }\r\n }\r\n\r\n public addParticle(props: ParticleProps): void {\r\n const size = props.size ?? this._size;\r\n let width, height;\r\n if (\"number\" === typeof size) {\r\n width = height = size;\r\n } else {\r\n width = size.x;\r\n height = size.y;\r\n }\r\n\r\n if (width <= 0 || height <= 0)\r\n throw new Error(\"A particle must have a size greater than zero\");\r\n\r\n const transparency = undefined !== props.transparency ? clampTransparency(props.transparency) : this.transparency;\r\n if (transparency !== this.transparency && this._particlesTranslucent.length > 0)\r\n this._hasVaryingTransparency = true;\r\n\r\n const particle = new Particle(props, width, height, transparency, props.rotationMatrix);\r\n if (transparency > 0)\r\n this._particlesTranslucent.push(particle);\r\n else\r\n this._particlesOpaque.push(particle);\r\n this._range.extendPoint(particle.centroid);\r\n }\r\n\r\n public finish(): RenderGraphic | undefined {\r\n if (0 === this._particlesTranslucent.length + this._particlesOpaque.length)\r\n return undefined;\r\n\r\n // Order-independent transparency doesn't work well with opaque geometry - it will look semi-transparent.\r\n // If we have a mix of opaque and transparent particles, put them in separate graphics to be rendered in separate passes.\r\n const opaque = this.createGraphic(this._particlesOpaque, 0);\r\n const transparent = this.createGraphic(this._particlesTranslucent, this._hasVaryingTransparency ? undefined : this._transparency);\r\n\r\n // Empty the collection before any return statements.\r\n const range = this._range.clone();\r\n this._range.setNull();\r\n this._particlesOpaque.length = 0;\r\n this._particlesTranslucent.length = 0;\r\n this._hasVaryingTransparency = false;\r\n\r\n if (!transparent && !opaque)\r\n return undefined;\r\n\r\n // Transform from origin to collection, then to world.\r\n const toCollection = Transform.createTranslation(range.center);\r\n const toWorld = toCollection.multiplyTransformTransform(this._localToWorldTransform);\r\n const branch = new GraphicBranch(true);\r\n if (opaque)\r\n branch.add(opaque);\r\n\r\n if (transparent)\r\n branch.add(transparent);\r\n\r\n let graphic = this._viewport.target.renderSystem.createGraphicBranch(branch, toWorld);\r\n\r\n // If we have a pickable Id, produce a batch.\r\n // NB: We pass this._pickableId as the FeatureTable's modelId so that it will be treated like a reality model or a map -\r\n // specifically, it can be located and display a tooltip, but can't be selected.\r\n const featureTable = this._pickableId ? new FeatureTable(1, this._pickableId) : undefined;\r\n if (featureTable) {\r\n this._localToWorldTransform.multiplyRange(range, range);\r\n featureTable.insert(new Feature(this._pickableId));\r\n graphic = this._viewport.target.renderSystem.createBatch(graphic, PackedFeatureTable.pack(featureTable), range);\r\n }\r\n\r\n return graphic;\r\n }\r\n\r\n private createGraphic(particles: Particle[], uniformTransparency: number | undefined): RenderGraphic | undefined {\r\n const numParticles = particles.length;\r\n if (numParticles <= 0)\r\n return undefined;\r\n\r\n // To keep scale values close to 1, compute mean size to use as size of quad.\r\n const meanSize = new Vector2d();\r\n let maxSize = 0;\r\n for (const particle of particles) {\r\n meanSize.x += particle.width;\r\n meanSize.y += particle.height;\r\n if (particle.width > maxSize)\r\n maxSize = particle.width;\r\n if (particle.height > maxSize)\r\n maxSize = particle.height;\r\n }\r\n meanSize.x /= numParticles;\r\n meanSize.y /= numParticles;\r\n\r\n // Define InstancedGraphicParams for particles.\r\n const rangeCenter = this._range.center;\r\n const floatsPerTransform = 12;\r\n const transforms = new Float32Array(floatsPerTransform * numParticles);\r\n const bytesPerOverride = 8;\r\n const symbologyOverrides = undefined === uniformTransparency ? new Uint8Array(bytesPerOverride * numParticles) : undefined;\r\n\r\n const viewToWorld = this._viewport.view.getRotation().transpose();\r\n let tfIndex = 0;\r\n let ovrIndex = 0;\r\n for (const particle of particles) {\r\n const scaleX = particle.width / meanSize.x;\r\n const scaleY = particle.height / meanSize.y;\r\n if (this._isViewCoords) {\r\n // Particles already face the camera in view coords - just apply the scale.\r\n transforms[tfIndex + 0] = scaleX;\r\n transforms[tfIndex + 5] = scaleY;\r\n transforms[tfIndex + 10] = 1;\r\n } else if (undefined !== particle.rotationMatrix) {\r\n // Scale rotation matrix relative to size of quad.\r\n transforms[tfIndex + 0] = particle.rotationMatrix.coffs[0] * scaleX;\r\n transforms[tfIndex + 1] = particle.rotationMatrix.coffs[1] * scaleY;\r\n transforms[tfIndex + 2] = particle.rotationMatrix.coffs[2];\r\n transforms[tfIndex + 4] = particle.rotationMatrix.coffs[3] * scaleX;\r\n transforms[tfIndex + 5] = particle.rotationMatrix.coffs[4] * scaleY;\r\n transforms[tfIndex + 6] = particle.rotationMatrix.coffs[5];\r\n transforms[tfIndex + 8] = particle.rotationMatrix.coffs[6] * scaleX;\r\n transforms[tfIndex + 9] = particle.rotationMatrix.coffs[7] * scaleY;\r\n transforms[tfIndex + 10] = particle.rotationMatrix.coffs[8];\r\n } else {\r\n // Rotate about origin by inverse view matrix so quads always face the camera and scale relative to size of quad.\r\n transforms[tfIndex + 0] = viewToWorld.coffs[0] * scaleX;\r\n transforms[tfIndex + 1] = viewToWorld.coffs[1] * scaleY;\r\n transforms[tfIndex + 2] = viewToWorld.coffs[2];\r\n transforms[tfIndex + 4] = viewToWorld.coffs[3] * scaleX;\r\n transforms[tfIndex + 5] = viewToWorld.coffs[4] * scaleY;\r\n transforms[tfIndex + 6] = viewToWorld.coffs[5];\r\n transforms[tfIndex + 8] = viewToWorld.coffs[6] * scaleX;\r\n transforms[tfIndex + 9] = viewToWorld.coffs[7] * scaleY;\r\n transforms[tfIndex + 10] = viewToWorld.coffs[8];\r\n }\r\n\r\n // Translate relative to center of particles range.\r\n transforms[tfIndex + 3] = particle.centroid.x - rangeCenter.x;\r\n transforms[tfIndex + 7] = particle.centroid.y - rangeCenter.y;\r\n transforms[tfIndex + 11] = particle.centroid.z - rangeCenter.z;\r\n\r\n tfIndex += floatsPerTransform;\r\n\r\n if (symbologyOverrides) {\r\n // See FeatureOverrides.buildLookupTable() for layout.\r\n symbologyOverrides[ovrIndex + 0] = 1 << 2; // OvrFlags.Alpha\r\n symbologyOverrides[ovrIndex + 7] = 0xff - particle.transparency;\r\n\r\n ovrIndex += bytesPerOverride;\r\n }\r\n }\r\n\r\n // Produce instanced quads.\r\n // Note: We do not need to allocate an array of featureIds. If we have a pickableId, all particles refer to the same Feature, with index 0.\r\n // So we leave the vertex attribute disabled causing the shader to receive the default (0, 0, 0) which happens to correspond to our feature index.\r\n const quad = createQuad(meanSize, this._texture, uniformTransparency ?? 0x7f, this._viewport);\r\n const transformCenter = new Point3d(0, 0, 0);\r\n const range = computeRange(this._range, rangeCenter, maxSize);\r\n const instances = { count: numParticles, transforms, transformCenter, symbologyOverrides, range };\r\n return this._viewport.target.renderSystem.createMesh(quad, instances);\r\n }\r\n}\r\n\r\nfunction createQuad(size: XAndY, texture: RenderTexture, transparency: number, viewport: Viewport): MeshParams {\r\n const halfWidth = size.x / 2;\r\n const halfHeight = size.y / 2;\r\n const corners = [\r\n new Point3d(-halfWidth, -halfHeight, 0), new Point3d(halfWidth, -halfHeight, 0),\r\n new Point3d(-halfWidth, halfHeight, 0), new Point3d(halfWidth, halfHeight, 0),\r\n ];\r\n\r\n const range = new Range3d();\r\n range.low = corners[0];\r\n range.high = corners[3];\r\n\r\n const points = new QPoint3dList(QParams3d.fromRange(range));\r\n for (const corner of corners)\r\n points.add(corner);\r\n\r\n const colors = new ColorIndex();\r\n colors.initUniform(ColorDef.white.withTransparency(transparency));\r\n\r\n const quadArgs: MeshArgs = {\r\n points,\r\n vertIndices: [0, 1, 2, 2, 1, 3],\r\n fillFlags: FillFlags.None,\r\n isPlanar: true,\r\n colors,\r\n features: new FeatureIndex(),\r\n textureMapping: {\r\n texture,\r\n uvParams: [new Point2d(0, 1), new Point2d(1, 1), new Point2d(0, 0), new Point2d(1, 0)],\r\n },\r\n };\r\n\r\n return createMeshParams(quadArgs, viewport.target.renderSystem.maxTextureSize);\r\n}\r\n\r\nfunction clampTransparency(transparency: number): number {\r\n transparency = Math.min(255, transparency, Math.max(0, transparency));\r\n transparency = Math.floor(transparency);\r\n if (transparency < DisplayParams.minTransparency)\r\n transparency = 0;\r\n\r\n return transparency;\r\n}\r\n\r\nfunction computeRange(centroidRange: Range3d, center: Point3d, maxSize: number): Range3d {\r\n const range2 = centroidRange.clone();\r\n range2.low.subtractInPlace(center);\r\n range2.high.subtractInPlace(center);\r\n const halfSize = maxSize * 0.5;\r\n range2.low.x -= halfSize;\r\n range2.low.y -= halfSize;\r\n range2.low.z -= halfSize;\r\n range2.high.x += halfSize;\r\n range2.high.y += halfSize;\r\n range2.high.z += halfSize;\r\n return range2;\r\n}\r\n"]}
1
+ {"version":3,"file":"ParticleCollectionBuilder.js","sourceRoot":"","sources":["../../../src/render/ParticleCollectionBuilder.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 { Id64String } from \"@itwin/core-bentley\";\r\nimport { Matrix3d, Point2d, Point3d, Range3d, Transform, Vector2d, XAndY, XYAndZ } from \"@itwin/core-geometry\";\r\nimport {\r\n ColorDef, ColorIndex, Feature, FeatureIndex, FeatureTable, FillFlags, PackedFeatureTable, QParams3d, QPoint3dList, RenderTexture,\r\n} from \"@itwin/core-common\";\r\nimport { Viewport } from \"../Viewport\";\r\nimport { RenderGraphic } from \"./RenderGraphic\";\r\nimport { GraphicBranch } from \"./GraphicBranch\";\r\nimport { MeshArgs } from \"../common/internal/render/MeshPrimitives\";\r\nimport { DisplayParams } from \"../common/internal/render/DisplayParams\";\r\nimport { MeshParams } from \"../common/internal/render/MeshParams\";\r\nimport { createMeshParams } from \"../common/internal/render/VertexTableBuilder\";\r\nimport { IModelApp } from \"../IModelApp\";\r\n\r\n/** Parameters used to construct a [[ParticleCollectionBuilder]].\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ParticleCollectionBuilderParams {\r\n /** The image mapped to each particle quad.\r\n * @note The texture should be disposed of when no longer needed to free up WebGL resources. For example, if a [[Decorator]] creates the texture, the\r\n * texture should probably be disposed of when the decorator is removed from the [[ViewManager]].\r\n */\r\n texture: RenderTexture;\r\n\r\n /** The default extents of the particle quad. Individual particles may apply a scale to these extents to produce particles of varying dimensions.\r\n * Must be positive.\r\n */\r\n size: XAndY | number;\r\n\r\n /** The initial transparency of the particles as an integer in [0,255]. Defaults to zero if omitted. */\r\n transparency?: number;\r\n\r\n /** The origin of the particle collection in world coordinates. Defaults to (0, 0, 0). */\r\n origin?: XYAndZ;\r\n\r\n /** If the particles are to be pickable, a unique identifier to associate with the resultant [[RenderGraphic]].\r\n * @see [[IModelConnection.transientIdSequence]] to obtain an Id that is unique within an iModel.\r\n */\r\n pickableId?: Id64String;\r\n\r\n /** The viewport in which the particles will be drawn. */\r\n viewport: Viewport;\r\n\r\n /** If true, the finished graphic will be defined in view coordinates, for use as a decoration of type [[GraphicType.ViewBackground]] or [[GraphicType.ViewOverlay]].\r\n * Defaults to false, indicating the graphic will be defined in world coordinates.\r\n * @see [[CoordSystem.View]] and [[CoordSystem.World]].\r\n */\r\n isViewCoords?: boolean;\r\n}\r\n\r\n/** Describes a particle to to add to a particle collection via [[ParticleCollectionBuilder.addParticle]].\r\n * The x, y, and z coordinates represent the centroid of the particle quad in the collection's coordinate space.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ParticleProps extends XYAndZ {\r\n /** The size of the particle, in the collection's coordinate space. If omitted, it defaults to the size supplied to the collection by [[ParticleCollectionBuilderParams.size]].\r\n * Supplying a `number` produces a square; supplying a non-uniform `XAndY` produces a rectangle. Must be positive.\r\n */\r\n size?: XAndY | number;\r\n\r\n /** The transparency with which to draw the particle as an integer in [0,255]. If omitted, it defaults to the current value of [[ParticleCollectionBuilder.transparency]]. */\r\n transparency?: number;\r\n\r\n /** A rotation matrix to orient the particle. If supplied then the particle will not be automatically oriented towards the camera. */\r\n rotationMatrix?: Matrix3d;\r\n}\r\n\r\n/** Interface for producing a collection of particles suitable for use in particle effects.\r\n * Particle effects involve animating hundreds or thousands of small particles to simulate phenomena like smoke, fire, snow, etc.\r\n * A particle collection represents each particle as a quad (rectangle) displaying an image. The position of each particle corresponds to the\r\n * centroid of its quad. The transparency and size of each particle can be specified individually. By default, the quads will always rotate to face the camera\r\n * such that the image is fully visible.\r\n *\r\n * Creating a particle collection using a ParticleCollectionBuilder is far more efficient (in both CPU and GPU usage) than doing so using a [[GraphicBuilder]].\r\n * @see interactive demonstrations of [Snow and Rain](https://www.itwinjs.org/sample-showcase/?group=Viewer+Features&sample=snow-rain-sample&imodel=Villa) and\r\n * [Fire and Smoke](https://www.itwinjs.org/sample-showcase/?group=Viewer+Features&sample=fire-sample&imodel=Villa) particle effects.\r\n * @see [SnowEffect]($frontend-devtools) for an example of a particle effect.\r\n * @public\r\n * @extensions\r\n */\r\nexport interface ParticleCollectionBuilder {\r\n /** The default transparency for newly-added particles as an integer in [0,255], used by [[ParticleCollectionBuilder.addParticle]] if [[ParticleProps.transparency]] is omitted.\r\n * Changing this value has no effect on the transparency of previously-added particles.\r\n */\r\n transparency: number;\r\n\r\n /** The default size of each particle, used by [[ParticleCollectionBuilder.addParticle]] if [[ParticleProps.size]] is omitted. */\r\n size: XAndY;\r\n\r\n /** Add a particle to the collection.\r\n * If `size` is omitted, `this.size` is used.\r\n * If `transparency` is omitted, `this.transparency` is used.\r\n * @throws Error if particle size is defined and not greater than zero.\r\n */\r\n addParticle: (particle: ParticleProps) => void;\r\n\r\n /** Produces a finished graphic from the accumulated particles.\r\n * It returns the finished graphic, or `undefined` if the collection contains no particles or the [[RenderSystem]] failed to produce the graphic.\r\n * @note After this method returns, the particle collection is empty.\r\n */\r\n finish: () => RenderGraphic | undefined;\r\n}\r\n\r\n/**\r\n * @public\r\n * @extensions\r\n */\r\nexport namespace ParticleCollectionBuilder {\r\n /** Creates a new ParticleCollectionBuilder.\r\n * @throws Error if size is not greater than zero.\r\n */\r\n export function create(params: ParticleCollectionBuilderParams): ParticleCollectionBuilder {\r\n return new Builder(params);\r\n }\r\n}\r\n\r\nclass Particle {\r\n public readonly centroid: Point3d;\r\n public readonly transparency: number;\r\n public readonly width: number;\r\n public readonly height: number;\r\n public readonly rotationMatrix?: Matrix3d;\r\n\r\n public constructor(centroid: XYAndZ, width: number, height: number, transparency: number, rotationMatrix?: Matrix3d) {\r\n this.centroid = Point3d.fromJSON(centroid);\r\n this.transparency = transparency;\r\n this.width = width;\r\n this.height = height;\r\n this.rotationMatrix = rotationMatrix;\r\n }\r\n}\r\n\r\nclass Builder implements ParticleCollectionBuilder {\r\n private readonly _viewport: Viewport;\r\n private readonly _isViewCoords: boolean;\r\n private readonly _pickableId?: Id64String;\r\n private readonly _texture: RenderTexture;\r\n private readonly _size: Vector2d;\r\n private _transparency: number;\r\n private _hasVaryingTransparency = false;\r\n private readonly _localToWorldTransform: Transform;\r\n private readonly _range = Range3d.createNull();\r\n private _particlesOpaque: Particle[] = [];\r\n private _particlesTranslucent: Particle[] = [];\r\n\r\n public constructor(params: ParticleCollectionBuilderParams) {\r\n this._viewport = params.viewport;\r\n this._isViewCoords = true === params.isViewCoords;\r\n this._pickableId = params.pickableId;\r\n this._texture = params.texture;\r\n this._transparency = undefined !== params.transparency ? clampTransparency(params.transparency) : 0;\r\n this._localToWorldTransform = params.origin ? Transform.createTranslationXYZ(params.origin.x, params.origin.y, params.origin.z) : Transform.createIdentity();\r\n\r\n if (\"number\" === typeof params.size)\r\n this._size = new Vector2d(params.size, params.size);\r\n else\r\n this._size = Vector2d.fromJSON(params.size);\r\n\r\n if (this._size.x <= 0 || this._size.y <= 0)\r\n throw new Error(\"Particle size must be greater than zero\");\r\n }\r\n\r\n public get size(): XAndY {\r\n return this._size;\r\n }\r\n\r\n public get transparency() {\r\n return this._transparency;\r\n }\r\n\r\n public set transparency(transparency: number) {\r\n transparency = clampTransparency(transparency);\r\n if (transparency !== this._transparency) {\r\n this._transparency = transparency;\r\n this._hasVaryingTransparency = this._particlesTranslucent.length > 0;\r\n }\r\n }\r\n\r\n public addParticle(props: ParticleProps): void {\r\n const size = props.size ?? this._size;\r\n let width, height;\r\n if (\"number\" === typeof size) {\r\n width = height = size;\r\n } else {\r\n width = size.x;\r\n height = size.y;\r\n }\r\n\r\n if (width <= 0 || height <= 0)\r\n throw new Error(\"A particle must have a size greater than zero\");\r\n\r\n const transparency = undefined !== props.transparency ? clampTransparency(props.transparency) : this.transparency;\r\n if (transparency !== this.transparency && this._particlesTranslucent.length > 0)\r\n this._hasVaryingTransparency = true;\r\n\r\n const particle = new Particle(props, width, height, transparency, props.rotationMatrix);\r\n if (transparency > 0)\r\n this._particlesTranslucent.push(particle);\r\n else\r\n this._particlesOpaque.push(particle);\r\n this._range.extendPoint(particle.centroid);\r\n }\r\n\r\n public finish(): RenderGraphic | undefined {\r\n if (0 === this._particlesTranslucent.length + this._particlesOpaque.length)\r\n return undefined;\r\n\r\n // Order-independent transparency doesn't work well with opaque geometry - it will look semi-transparent.\r\n // If we have a mix of opaque and transparent particles, put them in separate graphics to be rendered in separate passes.\r\n const opaque = this.createGraphic(this._particlesOpaque, 0);\r\n const transparent = this.createGraphic(this._particlesTranslucent, this._hasVaryingTransparency ? undefined : this._transparency);\r\n\r\n // Empty the collection before any return statements.\r\n const range = this._range.clone();\r\n this._range.setNull();\r\n this._particlesOpaque.length = 0;\r\n this._particlesTranslucent.length = 0;\r\n this._hasVaryingTransparency = false;\r\n\r\n if (!transparent && !opaque)\r\n return undefined;\r\n\r\n // Transform from origin to collection, then to world.\r\n const toCollection = Transform.createTranslation(range.center);\r\n const toWorld = toCollection.multiplyTransformTransform(this._localToWorldTransform);\r\n const branch = new GraphicBranch(true);\r\n if (opaque)\r\n branch.add(opaque);\r\n\r\n if (transparent)\r\n branch.add(transparent);\r\n\r\n let graphic = this._viewport.target.renderSystem.createGraphicBranch(branch, toWorld);\r\n\r\n // If we have a pickable Id, produce a batch.\r\n // NB: We pass this._pickableId as the FeatureTable's modelId so that it will be treated like a reality model or a map -\r\n // specifically, it can be located and display a tooltip, but can't be selected.\r\n const featureTable = this._pickableId ? new FeatureTable(1, this._pickableId) : undefined;\r\n if (featureTable) {\r\n this._localToWorldTransform.multiplyRange(range, range);\r\n featureTable.insert(new Feature(this._pickableId));\r\n graphic = this._viewport.target.renderSystem.createBatch(graphic, PackedFeatureTable.pack(featureTable), range);\r\n }\r\n\r\n return graphic;\r\n }\r\n\r\n private createGraphic(particles: Particle[], uniformTransparency: number | undefined): RenderGraphic | undefined {\r\n const numParticles = particles.length;\r\n if (numParticles <= 0)\r\n return undefined;\r\n\r\n // To keep scale values close to 1, compute mean size to use as size of quad.\r\n const meanSize = new Vector2d();\r\n let maxSize = 0;\r\n for (const particle of particles) {\r\n meanSize.x += particle.width;\r\n meanSize.y += particle.height;\r\n if (particle.width > maxSize)\r\n maxSize = particle.width;\r\n if (particle.height > maxSize)\r\n maxSize = particle.height;\r\n }\r\n meanSize.x /= numParticles;\r\n meanSize.y /= numParticles;\r\n\r\n // Define InstancedGraphicParams for particles.\r\n const rangeCenter = this._range.center;\r\n const floatsPerTransform = 12;\r\n const transforms = new Float32Array(floatsPerTransform * numParticles);\r\n const bytesPerOverride = 8;\r\n const symbologyOverrides = undefined === uniformTransparency ? new Uint8Array(bytesPerOverride * numParticles) : undefined;\r\n\r\n const viewToWorld = this._viewport.view.getRotation().transpose();\r\n let tfIndex = 0;\r\n let ovrIndex = 0;\r\n for (const particle of particles) {\r\n const scaleX = particle.width / meanSize.x;\r\n const scaleY = particle.height / meanSize.y;\r\n if (this._isViewCoords) {\r\n // Particles already face the camera in view coords - just apply the scale.\r\n transforms[tfIndex + 0] = scaleX;\r\n transforms[tfIndex + 5] = scaleY;\r\n transforms[tfIndex + 10] = 1;\r\n } else if (undefined !== particle.rotationMatrix) {\r\n // Scale rotation matrix relative to size of quad.\r\n transforms[tfIndex + 0] = particle.rotationMatrix.coffs[0] * scaleX;\r\n transforms[tfIndex + 1] = particle.rotationMatrix.coffs[1] * scaleY;\r\n transforms[tfIndex + 2] = particle.rotationMatrix.coffs[2];\r\n transforms[tfIndex + 4] = particle.rotationMatrix.coffs[3] * scaleX;\r\n transforms[tfIndex + 5] = particle.rotationMatrix.coffs[4] * scaleY;\r\n transforms[tfIndex + 6] = particle.rotationMatrix.coffs[5];\r\n transforms[tfIndex + 8] = particle.rotationMatrix.coffs[6] * scaleX;\r\n transforms[tfIndex + 9] = particle.rotationMatrix.coffs[7] * scaleY;\r\n transforms[tfIndex + 10] = particle.rotationMatrix.coffs[8];\r\n } else {\r\n // Rotate about origin by inverse view matrix so quads always face the camera and scale relative to size of quad.\r\n transforms[tfIndex + 0] = viewToWorld.coffs[0] * scaleX;\r\n transforms[tfIndex + 1] = viewToWorld.coffs[1] * scaleY;\r\n transforms[tfIndex + 2] = viewToWorld.coffs[2];\r\n transforms[tfIndex + 4] = viewToWorld.coffs[3] * scaleX;\r\n transforms[tfIndex + 5] = viewToWorld.coffs[4] * scaleY;\r\n transforms[tfIndex + 6] = viewToWorld.coffs[5];\r\n transforms[tfIndex + 8] = viewToWorld.coffs[6] * scaleX;\r\n transforms[tfIndex + 9] = viewToWorld.coffs[7] * scaleY;\r\n transforms[tfIndex + 10] = viewToWorld.coffs[8];\r\n }\r\n\r\n // Translate relative to center of particles range.\r\n transforms[tfIndex + 3] = particle.centroid.x - rangeCenter.x;\r\n transforms[tfIndex + 7] = particle.centroid.y - rangeCenter.y;\r\n transforms[tfIndex + 11] = particle.centroid.z - rangeCenter.z;\r\n\r\n tfIndex += floatsPerTransform;\r\n\r\n if (symbologyOverrides) {\r\n // See FeatureOverrides.buildLookupTable() for layout.\r\n symbologyOverrides[ovrIndex + 0] = 1 << 2; // OvrFlags.Alpha\r\n symbologyOverrides[ovrIndex + 7] = 0xff - particle.transparency;\r\n\r\n ovrIndex += bytesPerOverride;\r\n }\r\n }\r\n\r\n // Produce instanced quads.\r\n // Note: We do not need to allocate an array of featureIds. If we have a pickableId, all particles refer to the same Feature, with index 0.\r\n // So we leave the vertex attribute disabled causing the shader to receive the default (0, 0, 0) which happens to correspond to our feature index.\r\n const quad = createQuad(meanSize, this._texture, uniformTransparency ?? 0x7f, this._viewport);\r\n const transformCenter = new Point3d(0, 0, 0);\r\n const range = computeRange(this._range, rangeCenter, maxSize);\r\n const instances = { count: numParticles, transforms, transformCenter, symbologyOverrides, range };\r\n return this._viewport.target.renderSystem.createMesh(quad, instances);\r\n }\r\n}\r\n\r\nfunction createQuad(size: XAndY, texture: RenderTexture, transparency: number, viewport: Viewport): MeshParams {\r\n const halfWidth = size.x / 2;\r\n const halfHeight = size.y / 2;\r\n const corners = [\r\n new Point3d(-halfWidth, -halfHeight, 0), new Point3d(halfWidth, -halfHeight, 0),\r\n new Point3d(-halfWidth, halfHeight, 0), new Point3d(halfWidth, halfHeight, 0),\r\n ];\r\n\r\n const range = new Range3d();\r\n range.low = corners[0];\r\n range.high = corners[3];\r\n\r\n const points = new QPoint3dList(QParams3d.fromRange(range));\r\n for (const corner of corners)\r\n points.add(corner);\r\n\r\n const colors = new ColorIndex();\r\n colors.initUniform(ColorDef.white.withTransparency(transparency));\r\n\r\n const quadArgs: MeshArgs = {\r\n points,\r\n vertIndices: [0, 1, 2, 2, 1, 3],\r\n fillFlags: FillFlags.None,\r\n isPlanar: true,\r\n colors,\r\n features: new FeatureIndex(),\r\n textureMapping: {\r\n texture,\r\n uvParams: [new Point2d(0, 1), new Point2d(1, 1), new Point2d(0, 0), new Point2d(1, 0)],\r\n },\r\n };\r\n\r\n return createMeshParams(quadArgs, viewport.target.renderSystem.maxTextureSize, \"non-indexed\" !== IModelApp.tileAdmin.edgeOptions.type);\r\n}\r\n\r\nfunction clampTransparency(transparency: number): number {\r\n transparency = Math.min(255, transparency, Math.max(0, transparency));\r\n transparency = Math.floor(transparency);\r\n if (transparency < DisplayParams.minTransparency)\r\n transparency = 0;\r\n\r\n return transparency;\r\n}\r\n\r\nfunction computeRange(centroidRange: Range3d, center: Point3d, maxSize: number): Range3d {\r\n const range2 = centroidRange.clone();\r\n range2.low.subtractInPlace(center);\r\n range2.high.subtractInPlace(center);\r\n const halfSize = maxSize * 0.5;\r\n range2.low.x -= halfSize;\r\n range2.low.y -= halfSize;\r\n range2.low.z -= halfSize;\r\n range2.high.x += halfSize;\r\n range2.high.y += halfSize;\r\n range2.high.z += halfSize;\r\n return range2;\r\n}\r\n"]}
@@ -8,7 +8,7 @@
8
8
  import { assert, Uint16ArrayBuilder, UintArrayBuilder } from "@itwin/core-bentley";
9
9
  import { IndexedPolyface, Point2d, Point3d, Range2d, Vector3d, } from "@itwin/core-geometry";
10
10
  import { OctEncodedNormal, QPoint2d, QPoint2dBufferBuilder, QPoint3d, QPoint3dBufferBuilder, } from "@itwin/core-common";
11
- import { MeshPrimitiveType } from "../common/render/primitives/MeshPrimitive";
11
+ import { MeshPrimitiveType } from "../common/internal/render/MeshPrimitive";
12
12
  function precondition(condition, message) {
13
13
  if (condition)
14
14
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"RealityMeshParams.js","sourceRoot":"","sources":["../../../src/render/RealityMeshParams.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, Uint16ArrayBuilder, UintArray, UintArrayBuilder } from \"@itwin/core-bentley\";\r\nimport {\r\n IndexedPolyface, Point2d, Point3d, Range2d, Range3d, Transform, Vector3d, XAndY, XYAndZ,\r\n} from \"@itwin/core-geometry\";\r\nimport {\r\n OctEncodedNormal, QPoint2d, QPoint2dBuffer, QPoint2dBufferBuilder, QPoint3d, QPoint3dBuffer, QPoint3dBufferBuilder, RenderTexture,\r\n} from \"@itwin/core-common\";\r\nimport { GltfMeshData } from \"../tile/internal\";\r\nimport { MeshPrimitiveType } from \"../common/render/primitives/MeshPrimitive\";\r\n\r\nfunction precondition(condition: boolean, message: string | (() => string)): asserts condition {\r\n if (condition)\r\n return;\r\n\r\n if (\"string\" !== typeof message)\r\n message = message();\r\n\r\n throw new Error(`Logic Error: ${message}`);\r\n}\r\n\r\n/** Geometry for a reality mesh to be submitted to the [[RenderSystem]] for conversion to a [[RenderGraphic]].\r\n * A reality mesh is a simple triangle mesh to which a [RenderTexture]($common) image can be mapped. Sources of reality meshes\r\n * include [[TerrainMeshProvider]]s to which background map imagery is applied, and [ContextRealityModel]($common)s captured using\r\n * [photogrammetry](https://en.wikipedia.org/wiki/Photogrammetry).\r\n * @see [[RealityMeshParamsBuilder]] to incrementally construct a `RealityMeshParams`.\r\n * @public\r\n */\r\nexport interface RealityMeshParams {\r\n /** The 3d position of each vertex in the mesh, indexed by [[indices]]. */\r\n positions: QPoint3dBuffer;\r\n /** The 2d texture coordinates of each vertex in the mesh, indexed by [[indices]]. */\r\n uvs: QPoint2dBuffer;\r\n /** The optional normal vector for each vertex in the mesh, indexed by [[indices]], stored as [OctEncodedNormal]($common)s. */\r\n normals?: Uint16Array;\r\n /** The integer indices of each triangle in the mesh. The array's length must be a multiple of 3. */\r\n indices: UintArray;\r\n /** @alpha unused by terrain meshes */\r\n featureID?: number; // default 0\r\n /** @alpha unused by terrain meshes */\r\n texture?: RenderTexture;\r\n}\r\n\r\n/** @public */\r\nexport namespace RealityMeshParams {\r\n /** @internal */\r\n export function fromGltfMesh(mesh: GltfMeshData): RealityMeshParams | undefined {\r\n // The specialized reality mesh shaders expect a mesh with uvs and no edges.\r\n if (mesh.primitive.type !== MeshPrimitiveType.Mesh || mesh.primitive.edges || !mesh.pointQParams || !mesh.uvQParams || !mesh.points || !mesh.uvs || !mesh.indices)\r\n return undefined;\r\n\r\n return {\r\n indices: mesh.indices,\r\n positions: {\r\n params: mesh.pointQParams,\r\n points: mesh.points,\r\n },\r\n uvs: {\r\n params: mesh.uvQParams,\r\n points: mesh.uvs,\r\n },\r\n normals: mesh.normals,\r\n // featureID: 0,\r\n texture: mesh.primitive.displayParams.textureMapping?.texture,\r\n };\r\n }\r\n\r\n /** @alpha */\r\n export function toPolyface(params: RealityMeshParams, options?: { transform?: Transform, wantNormals?: boolean, wantParams?: boolean }): IndexedPolyface | undefined {\r\n const { positions, normals, uvs, indices } = params;\r\n const includeNormals = options?.wantNormals && undefined !== normals;\r\n const includeParams = options?.wantParams;\r\n\r\n const polyface = IndexedPolyface.create(includeNormals, includeParams);\r\n const points = positions.points;\r\n const point = new Point3d();\r\n const transform = options?.transform;\r\n for (let i = 0; i < positions.points.length; i += 3) {\r\n positions.params.unquantize(points[i], points[i + 1], points[i + 2], point);\r\n transform?.multiplyPoint3d(point, point);\r\n polyface.addPoint(point);\r\n }\r\n\r\n if (includeNormals) {\r\n const normal = new Vector3d();\r\n for (const oen of normals)\r\n polyface.addNormal(OctEncodedNormal.decodeValue(oen, normal));\r\n }\r\n\r\n if (includeParams) {\r\n const uv = new Point2d();\r\n for (let i = 0; i < uvs.points.length; i += 2)\r\n polyface.addParam(uvs.params.unquantize(uvs.points[i], uvs.points[i + 1], uv));\r\n }\r\n\r\n let j = 0;\r\n indices.forEach((index: number) => {\r\n polyface.addPointIndex(index);\r\n if (includeNormals)\r\n polyface.addNormalIndex(index);\r\n\r\n if (includeParams)\r\n polyface.addParamIndex(index);\r\n\r\n if (0 === (++j % 3))\r\n polyface.terminateFacet();\r\n });\r\n\r\n return polyface;\r\n }\r\n}\r\n\r\n/** Options used to construct a [[RealityMeshParamsBuilder]].\r\n * @beta\r\n */\r\nexport interface RealityMeshParamsBuilderOptions {\r\n /** A bounding box fully containing the positions of all vertices to be included in the mesh.\r\n * This range is used to quantize [[RealityMeshParams.positions]].\r\n */\r\n positionRange: Range3d;\r\n /** A range fully containing the texture coordinates of all vertices to be included in the mesh.\r\n * This range is used to quantize [[RealityMeshParams.uvs]].\r\n * Default: [0.0, 1.0].\r\n */\r\n uvRange?: Range2d;\r\n /** If true, [[RealityMeshParams.normals]] will be populated.\r\n * If you set this to true, you must supply a normal for every vertex when calling [[RealityMeshParamsBuilder.addQuantizedVertex]] or [[RealityMeshParamsBuilder.addUnquantizedVertex]].\r\n */\r\n wantNormals?: boolean;\r\n /** If defined, memory for this number of vertices will be allocated up-front. Set this if you know the minimum number of vertices in the mesh, to\r\n * avoid unnecessary reallocations when adding vertices.\r\n */\r\n initialVertexCapacity?: number;\r\n /** If defined, memory for this number of indices will be allocated up-front. Set this if you know the minimum number of triangles in the mesh, to avoid\r\n * unnecessary reallocations when adding triangles. The number of indices is equal to three times the number of triangles.\r\n */\r\n initialIndexCapacity?: number;\r\n}\r\n\r\n/** Incrementally constructs a [[RealityMeshParams]].\r\n * The following simple example produces a rectangular mesh containing two triangles.\r\n * ```ts\r\n * [[include:Build_Reality_Mesh_Params]]\r\n * ```\r\n * @beta\r\n */\r\nexport class RealityMeshParamsBuilder {\r\n /** The indices of the vertices in each triangle of the mesh.\r\n * @see [[addTriangle]] to add 3 indices describing a single triangle.\r\n * @see [[addQuad]] to add 4 indices describing two triangles sharing an edge.\r\n * @see [[addIndices]] to add any number of indices.\r\n */\r\n public readonly indices: UintArrayBuilder;\r\n /** The 3d position of each vertex in the mesh.\r\n * @see [[addQuantizedVertex]] and [[addUnquantizedVertex]] to add a vertex.\r\n */\r\n public readonly positions: QPoint3dBufferBuilder;\r\n /** The 2d texture coordinates of each vertex in the mesh.\r\n * @see [[addQuantizedVertex]] and [[addUnquantizedVertex]] to add a vertex.\r\n */\r\n public readonly uvs: QPoint2dBufferBuilder;\r\n /** The normal vector of each vertex in the mesh, or `undefined` if [[RealityMeshParamsBuilderOptions.wantNormals]] was not `true` when constructing the builder.\r\n * A normal vector must be supplied to [[addQuantizedVertex]] and [[addUnquantizedVertex]] if and only if [[RealityMeshParamsBuilderOptions.wantNormals]] was\r\n * specified as `true`.\r\n * The vectors are stored as [OctEncodedNormal]($common)s.\r\n */\r\n public normals?: Uint16ArrayBuilder;\r\n\r\n // Scratch variables\r\n private readonly _q3d = new QPoint3d();\r\n private readonly _q2d = new QPoint2d();\r\n\r\n /** Construct a builder from the specified options. */\r\n public constructor(options: RealityMeshParamsBuilderOptions) {\r\n let initialType;\r\n if (undefined !== options.initialVertexCapacity && options.initialVertexCapacity > 0xff)\r\n initialType = options.initialVertexCapacity > 0xffff ? Uint32Array : Uint16Array;\r\n\r\n this.indices = new UintArrayBuilder({\r\n initialCapacity: options.initialIndexCapacity,\r\n initialType,\r\n });\r\n\r\n if (options.wantNormals)\r\n this.normals = new Uint16ArrayBuilder({ initialCapacity: options.initialVertexCapacity });\r\n\r\n this.positions = new QPoint3dBufferBuilder({\r\n range: options.positionRange,\r\n initialCapacity: options.initialVertexCapacity,\r\n });\r\n\r\n this.uvs = new QPoint2dBufferBuilder({\r\n range: options.uvRange ?? new Range2d(0, 0, 1, 1),\r\n initialCapacity: options.initialVertexCapacity,\r\n });\r\n }\r\n\r\n /** Add a vertex to the mesh and return its index in [[positions]].\r\n * @param position The 3d position, which will be quantized to the [[RealityMeshParamsBuilderOptions.positionRange]] supplied to the builder's constructor.\r\n * @param uv The texture coordinates, which will be quantized to the [[RealityMeshParamsBuilderOptions.uvRange]] supplied to the builder's constructor.\r\n * @param the normal vector, to be supplied if and only if [[RealityMeshParamsBuilderOptions.wantNormals]] was `true` when the builder was constructed.\r\n * @see [[addQuantizedVertex]] if your vertex data is already quantized.\r\n * @returns the index of the new vertex in [[positions]].\r\n */\r\n public addUnquantizedVertex(position: XYAndZ, uv: XAndY, normal?: XYAndZ): number {\r\n this._q3d.init(position, this.positions.params);\r\n this._q2d.init(uv, this.uvs.params);\r\n const oen = normal ? OctEncodedNormal.encode(normal) : undefined;\r\n return this.addQuantizedVertex(this._q3d, this._q2d, oen);\r\n }\r\n\r\n /** Original API had weird mix of quantized and unquantized, used by CesiumTerrainProvider.\r\n * @internal\r\n */\r\n public addVertex(position: XYAndZ, uv: XAndY, normal?: number): void {\r\n this._q3d.init(position, this.positions.params);\r\n this.addQuantizedVertex(this._q3d, uv, normal);\r\n }\r\n\r\n /** Add a vertex to the mesh and return its index in [[positions]].\r\n * @param position The 3d position, quantized to the [[RealityMeshParamsBuilderOptions.positionRange]] supplied to the builder's constructor.\r\n * @param uv The texture coordinates, quantized to the [[RealityMeshParamsBuilderOptions.uvRange]] supplied to the builder's constructor.\r\n * @param normal The unsigned 16-bit [OctEncodedNormal]($common) integer representation of the normal vector, to be supplied if and only if\r\n * [[RealityMeshParamsBuilderOptions.wantNormals]] was `true` when the builder was constructed.\r\n * @see [[addUnquantizedVertex]] if your vertex data is not already quantized.\r\n * @returns the index of the new vertex in [[positions]].\r\n * @throws Error if `normal` is `undefined` but `wantNormals` was specified at construction of the builder, or vice-versa.\r\n */\r\n public addQuantizedVertex(position: XYAndZ, uv: XAndY, normal?: number): number {\r\n precondition((undefined === normal) === (undefined === this.normals), \"RealityMeshParams requires all vertices to have normals, or none.\");\r\n\r\n this.positions.push(position);\r\n this.uvs.push(uv);\r\n if (undefined !== normal) {\r\n assert(undefined !== this.normals);\r\n this.normals.push(normal);\r\n }\r\n\r\n return this.positions.length - 1;\r\n }\r\n\r\n /** Add a triangle corresponding to the three specified vertices. */\r\n public addTriangle(i0: number, i1: number, i2: number): void {\r\n this.addIndex(i0);\r\n this.addIndex(i1);\r\n this.addIndex(i2);\r\n }\r\n\r\n /** Add two triangles sharing an edge. This is equivalent to calling `addTriangle(i0, i1, i2); addTriangle(i1, i3, i2);`. */\r\n public addQuad(i0: number, i1: number, i2: number, i3: number): void {\r\n this.addTriangle(i0, i1, i2);\r\n this.addTriangle(i1, i3, i2);\r\n }\r\n\r\n /** Add all of the indices in `indices` to the index buffer. */\r\n public addIndices(indices: Iterable<number>): void {\r\n for (const index of indices)\r\n this.addIndex(index);\r\n }\r\n\r\n private addIndex(index: number): void {\r\n this.indices.push(index);\r\n }\r\n\r\n /** Extract the finished [[RealityMeshParams]].\r\n * @throws Error if the mesh contains no triangles.\r\n */\r\n public finish(): RealityMeshParams {\r\n precondition(this.positions.length >= 3 && this.indices.length >= 3, \"RealityMeshParams requires at least one triangle\");\r\n return {\r\n positions: this.positions.finish(),\r\n uvs: this.uvs.finish(),\r\n normals: this.normals?.toTypedArray(),\r\n indices: this.indices.toTypedArray(),\r\n };\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"RealityMeshParams.js","sourceRoot":"","sources":["../../../src/render/RealityMeshParams.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, Uint16ArrayBuilder, UintArray, UintArrayBuilder } from \"@itwin/core-bentley\";\r\nimport {\r\n IndexedPolyface, Point2d, Point3d, Range2d, Range3d, Transform, Vector3d, XAndY, XYAndZ,\r\n} from \"@itwin/core-geometry\";\r\nimport {\r\n OctEncodedNormal, QPoint2d, QPoint2dBuffer, QPoint2dBufferBuilder, QPoint3d, QPoint3dBuffer, QPoint3dBufferBuilder, RenderTexture,\r\n} from \"@itwin/core-common\";\r\nimport { GltfMeshData } from \"../tile/internal\";\r\nimport { MeshPrimitiveType } from \"../common/internal/render/MeshPrimitive\";\r\n\r\nfunction precondition(condition: boolean, message: string | (() => string)): asserts condition {\r\n if (condition)\r\n return;\r\n\r\n if (\"string\" !== typeof message)\r\n message = message();\r\n\r\n throw new Error(`Logic Error: ${message}`);\r\n}\r\n\r\n/** Geometry for a reality mesh to be submitted to the [[RenderSystem]] for conversion to a [[RenderGraphic]].\r\n * A reality mesh is a simple triangle mesh to which a [RenderTexture]($common) image can be mapped. Sources of reality meshes\r\n * include [[TerrainMeshProvider]]s to which background map imagery is applied, and [ContextRealityModel]($common)s captured using\r\n * [photogrammetry](https://en.wikipedia.org/wiki/Photogrammetry).\r\n * @see [[RealityMeshParamsBuilder]] to incrementally construct a `RealityMeshParams`.\r\n * @public\r\n */\r\nexport interface RealityMeshParams {\r\n /** The 3d position of each vertex in the mesh, indexed by [[indices]]. */\r\n positions: QPoint3dBuffer;\r\n /** The 2d texture coordinates of each vertex in the mesh, indexed by [[indices]]. */\r\n uvs: QPoint2dBuffer;\r\n /** The optional normal vector for each vertex in the mesh, indexed by [[indices]], stored as [OctEncodedNormal]($common)s. */\r\n normals?: Uint16Array;\r\n /** The integer indices of each triangle in the mesh. The array's length must be a multiple of 3. */\r\n indices: UintArray;\r\n /** @alpha unused by terrain meshes */\r\n featureID?: number; // default 0\r\n /** @alpha unused by terrain meshes */\r\n texture?: RenderTexture;\r\n}\r\n\r\n/** @public */\r\nexport namespace RealityMeshParams {\r\n /** @internal */\r\n export function fromGltfMesh(mesh: GltfMeshData): RealityMeshParams | undefined {\r\n // The specialized reality mesh shaders expect a mesh with uvs and no edges.\r\n if (mesh.primitive.type !== MeshPrimitiveType.Mesh || mesh.primitive.edges || !mesh.pointQParams || !mesh.uvQParams || !mesh.points || !mesh.uvs || !mesh.indices)\r\n return undefined;\r\n\r\n return {\r\n indices: mesh.indices,\r\n positions: {\r\n params: mesh.pointQParams,\r\n points: mesh.points,\r\n },\r\n uvs: {\r\n params: mesh.uvQParams,\r\n points: mesh.uvs,\r\n },\r\n normals: mesh.normals,\r\n // featureID: 0,\r\n texture: mesh.primitive.displayParams.textureMapping?.texture,\r\n };\r\n }\r\n\r\n /** @alpha */\r\n export function toPolyface(params: RealityMeshParams, options?: { transform?: Transform, wantNormals?: boolean, wantParams?: boolean }): IndexedPolyface | undefined {\r\n const { positions, normals, uvs, indices } = params;\r\n const includeNormals = options?.wantNormals && undefined !== normals;\r\n const includeParams = options?.wantParams;\r\n\r\n const polyface = IndexedPolyface.create(includeNormals, includeParams);\r\n const points = positions.points;\r\n const point = new Point3d();\r\n const transform = options?.transform;\r\n for (let i = 0; i < positions.points.length; i += 3) {\r\n positions.params.unquantize(points[i], points[i + 1], points[i + 2], point);\r\n transform?.multiplyPoint3d(point, point);\r\n polyface.addPoint(point);\r\n }\r\n\r\n if (includeNormals) {\r\n const normal = new Vector3d();\r\n for (const oen of normals)\r\n polyface.addNormal(OctEncodedNormal.decodeValue(oen, normal));\r\n }\r\n\r\n if (includeParams) {\r\n const uv = new Point2d();\r\n for (let i = 0; i < uvs.points.length; i += 2)\r\n polyface.addParam(uvs.params.unquantize(uvs.points[i], uvs.points[i + 1], uv));\r\n }\r\n\r\n let j = 0;\r\n indices.forEach((index: number) => {\r\n polyface.addPointIndex(index);\r\n if (includeNormals)\r\n polyface.addNormalIndex(index);\r\n\r\n if (includeParams)\r\n polyface.addParamIndex(index);\r\n\r\n if (0 === (++j % 3))\r\n polyface.terminateFacet();\r\n });\r\n\r\n return polyface;\r\n }\r\n}\r\n\r\n/** Options used to construct a [[RealityMeshParamsBuilder]].\r\n * @beta\r\n */\r\nexport interface RealityMeshParamsBuilderOptions {\r\n /** A bounding box fully containing the positions of all vertices to be included in the mesh.\r\n * This range is used to quantize [[RealityMeshParams.positions]].\r\n */\r\n positionRange: Range3d;\r\n /** A range fully containing the texture coordinates of all vertices to be included in the mesh.\r\n * This range is used to quantize [[RealityMeshParams.uvs]].\r\n * Default: [0.0, 1.0].\r\n */\r\n uvRange?: Range2d;\r\n /** If true, [[RealityMeshParams.normals]] will be populated.\r\n * If you set this to true, you must supply a normal for every vertex when calling [[RealityMeshParamsBuilder.addQuantizedVertex]] or [[RealityMeshParamsBuilder.addUnquantizedVertex]].\r\n */\r\n wantNormals?: boolean;\r\n /** If defined, memory for this number of vertices will be allocated up-front. Set this if you know the minimum number of vertices in the mesh, to\r\n * avoid unnecessary reallocations when adding vertices.\r\n */\r\n initialVertexCapacity?: number;\r\n /** If defined, memory for this number of indices will be allocated up-front. Set this if you know the minimum number of triangles in the mesh, to avoid\r\n * unnecessary reallocations when adding triangles. The number of indices is equal to three times the number of triangles.\r\n */\r\n initialIndexCapacity?: number;\r\n}\r\n\r\n/** Incrementally constructs a [[RealityMeshParams]].\r\n * The following simple example produces a rectangular mesh containing two triangles.\r\n * ```ts\r\n * [[include:Build_Reality_Mesh_Params]]\r\n * ```\r\n * @beta\r\n */\r\nexport class RealityMeshParamsBuilder {\r\n /** The indices of the vertices in each triangle of the mesh.\r\n * @see [[addTriangle]] to add 3 indices describing a single triangle.\r\n * @see [[addQuad]] to add 4 indices describing two triangles sharing an edge.\r\n * @see [[addIndices]] to add any number of indices.\r\n */\r\n public readonly indices: UintArrayBuilder;\r\n /** The 3d position of each vertex in the mesh.\r\n * @see [[addQuantizedVertex]] and [[addUnquantizedVertex]] to add a vertex.\r\n */\r\n public readonly positions: QPoint3dBufferBuilder;\r\n /** The 2d texture coordinates of each vertex in the mesh.\r\n * @see [[addQuantizedVertex]] and [[addUnquantizedVertex]] to add a vertex.\r\n */\r\n public readonly uvs: QPoint2dBufferBuilder;\r\n /** The normal vector of each vertex in the mesh, or `undefined` if [[RealityMeshParamsBuilderOptions.wantNormals]] was not `true` when constructing the builder.\r\n * A normal vector must be supplied to [[addQuantizedVertex]] and [[addUnquantizedVertex]] if and only if [[RealityMeshParamsBuilderOptions.wantNormals]] was\r\n * specified as `true`.\r\n * The vectors are stored as [OctEncodedNormal]($common)s.\r\n */\r\n public normals?: Uint16ArrayBuilder;\r\n\r\n // Scratch variables\r\n private readonly _q3d = new QPoint3d();\r\n private readonly _q2d = new QPoint2d();\r\n\r\n /** Construct a builder from the specified options. */\r\n public constructor(options: RealityMeshParamsBuilderOptions) {\r\n let initialType;\r\n if (undefined !== options.initialVertexCapacity && options.initialVertexCapacity > 0xff)\r\n initialType = options.initialVertexCapacity > 0xffff ? Uint32Array : Uint16Array;\r\n\r\n this.indices = new UintArrayBuilder({\r\n initialCapacity: options.initialIndexCapacity,\r\n initialType,\r\n });\r\n\r\n if (options.wantNormals)\r\n this.normals = new Uint16ArrayBuilder({ initialCapacity: options.initialVertexCapacity });\r\n\r\n this.positions = new QPoint3dBufferBuilder({\r\n range: options.positionRange,\r\n initialCapacity: options.initialVertexCapacity,\r\n });\r\n\r\n this.uvs = new QPoint2dBufferBuilder({\r\n range: options.uvRange ?? new Range2d(0, 0, 1, 1),\r\n initialCapacity: options.initialVertexCapacity,\r\n });\r\n }\r\n\r\n /** Add a vertex to the mesh and return its index in [[positions]].\r\n * @param position The 3d position, which will be quantized to the [[RealityMeshParamsBuilderOptions.positionRange]] supplied to the builder's constructor.\r\n * @param uv The texture coordinates, which will be quantized to the [[RealityMeshParamsBuilderOptions.uvRange]] supplied to the builder's constructor.\r\n * @param the normal vector, to be supplied if and only if [[RealityMeshParamsBuilderOptions.wantNormals]] was `true` when the builder was constructed.\r\n * @see [[addQuantizedVertex]] if your vertex data is already quantized.\r\n * @returns the index of the new vertex in [[positions]].\r\n */\r\n public addUnquantizedVertex(position: XYAndZ, uv: XAndY, normal?: XYAndZ): number {\r\n this._q3d.init(position, this.positions.params);\r\n this._q2d.init(uv, this.uvs.params);\r\n const oen = normal ? OctEncodedNormal.encode(normal) : undefined;\r\n return this.addQuantizedVertex(this._q3d, this._q2d, oen);\r\n }\r\n\r\n /** Original API had weird mix of quantized and unquantized, used by CesiumTerrainProvider.\r\n * @internal\r\n */\r\n public addVertex(position: XYAndZ, uv: XAndY, normal?: number): void {\r\n this._q3d.init(position, this.positions.params);\r\n this.addQuantizedVertex(this._q3d, uv, normal);\r\n }\r\n\r\n /** Add a vertex to the mesh and return its index in [[positions]].\r\n * @param position The 3d position, quantized to the [[RealityMeshParamsBuilderOptions.positionRange]] supplied to the builder's constructor.\r\n * @param uv The texture coordinates, quantized to the [[RealityMeshParamsBuilderOptions.uvRange]] supplied to the builder's constructor.\r\n * @param normal The unsigned 16-bit [OctEncodedNormal]($common) integer representation of the normal vector, to be supplied if and only if\r\n * [[RealityMeshParamsBuilderOptions.wantNormals]] was `true` when the builder was constructed.\r\n * @see [[addUnquantizedVertex]] if your vertex data is not already quantized.\r\n * @returns the index of the new vertex in [[positions]].\r\n * @throws Error if `normal` is `undefined` but `wantNormals` was specified at construction of the builder, or vice-versa.\r\n */\r\n public addQuantizedVertex(position: XYAndZ, uv: XAndY, normal?: number): number {\r\n precondition((undefined === normal) === (undefined === this.normals), \"RealityMeshParams requires all vertices to have normals, or none.\");\r\n\r\n this.positions.push(position);\r\n this.uvs.push(uv);\r\n if (undefined !== normal) {\r\n assert(undefined !== this.normals);\r\n this.normals.push(normal);\r\n }\r\n\r\n return this.positions.length - 1;\r\n }\r\n\r\n /** Add a triangle corresponding to the three specified vertices. */\r\n public addTriangle(i0: number, i1: number, i2: number): void {\r\n this.addIndex(i0);\r\n this.addIndex(i1);\r\n this.addIndex(i2);\r\n }\r\n\r\n /** Add two triangles sharing an edge. This is equivalent to calling `addTriangle(i0, i1, i2); addTriangle(i1, i3, i2);`. */\r\n public addQuad(i0: number, i1: number, i2: number, i3: number): void {\r\n this.addTriangle(i0, i1, i2);\r\n this.addTriangle(i1, i3, i2);\r\n }\r\n\r\n /** Add all of the indices in `indices` to the index buffer. */\r\n public addIndices(indices: Iterable<number>): void {\r\n for (const index of indices)\r\n this.addIndex(index);\r\n }\r\n\r\n private addIndex(index: number): void {\r\n this.indices.push(index);\r\n }\r\n\r\n /** Extract the finished [[RealityMeshParams]].\r\n * @throws Error if the mesh contains no triangles.\r\n */\r\n public finish(): RealityMeshParams {\r\n precondition(this.positions.length >= 3 && this.indices.length >= 3, \"RealityMeshParams requires at least one triangle\");\r\n return {\r\n positions: this.positions.finish(),\r\n uvs: this.uvs.finish(),\r\n normals: this.normals?.toTypedArray(),\r\n indices: this.indices.toTypedArray(),\r\n };\r\n }\r\n}\r\n"]}