@itwin/core-frontend 4.5.0-dev.8 → 4.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/CHANGELOG.md +111 -1
  2. package/LICENSE.md +1 -1
  3. package/lib/cjs/AccuDraw.d.ts +6 -0
  4. package/lib/cjs/AccuDraw.d.ts.map +1 -1
  5. package/lib/cjs/AccuDraw.js +11 -0
  6. package/lib/cjs/AccuDraw.js.map +1 -1
  7. package/lib/cjs/CheckpointConnection.d.ts +7 -7
  8. package/lib/cjs/CheckpointConnection.d.ts.map +1 -1
  9. package/lib/cjs/CheckpointConnection.js +31 -23
  10. package/lib/cjs/CheckpointConnection.js.map +1 -1
  11. package/lib/cjs/ContextRealityModelState.d.ts +3 -0
  12. package/lib/cjs/ContextRealityModelState.d.ts.map +1 -1
  13. package/lib/cjs/ContextRealityModelState.js +8 -1
  14. package/lib/cjs/ContextRealityModelState.js.map +1 -1
  15. package/lib/cjs/IModelApp.js +1 -1
  16. package/lib/cjs/IModelApp.js.map +1 -1
  17. package/lib/cjs/ModelState.d.ts +3 -2
  18. package/lib/cjs/ModelState.d.ts.map +1 -1
  19. package/lib/cjs/ModelState.js +2 -1
  20. package/lib/cjs/ModelState.js.map +1 -1
  21. package/lib/cjs/SpatialClassifiersState.d.ts +55 -0
  22. package/lib/cjs/SpatialClassifiersState.d.ts.map +1 -0
  23. package/lib/cjs/SpatialClassifiersState.js +47 -0
  24. package/lib/cjs/SpatialClassifiersState.js.map +1 -0
  25. package/lib/cjs/ViewContext.d.ts +3 -2
  26. package/lib/cjs/ViewContext.d.ts.map +1 -1
  27. package/lib/cjs/ViewContext.js.map +1 -1
  28. package/lib/cjs/ViewManager.d.ts.map +1 -1
  29. package/lib/cjs/ViewManager.js +4 -0
  30. package/lib/cjs/ViewManager.js.map +1 -1
  31. package/lib/cjs/Viewport.d.ts.map +1 -1
  32. package/lib/cjs/Viewport.js +16 -8
  33. package/lib/cjs/Viewport.js.map +1 -1
  34. package/lib/cjs/core-frontend.d.ts +2 -0
  35. package/lib/cjs/core-frontend.d.ts.map +1 -1
  36. package/lib/cjs/core-frontend.js +2 -0
  37. package/lib/cjs/core-frontend.js.map +1 -1
  38. package/lib/cjs/render/GraphicBuilder.d.ts +2 -0
  39. package/lib/cjs/render/GraphicBuilder.d.ts.map +1 -1
  40. package/lib/cjs/render/GraphicBuilder.js.map +1 -1
  41. package/lib/cjs/render/MockRender.d.ts +1 -0
  42. package/lib/cjs/render/MockRender.d.ts.map +1 -1
  43. package/lib/cjs/render/MockRender.js +1 -0
  44. package/lib/cjs/render/MockRender.js.map +1 -1
  45. package/lib/cjs/render/RenderGraphic.d.ts +7 -0
  46. package/lib/cjs/render/RenderGraphic.d.ts.map +1 -1
  47. package/lib/cjs/render/RenderGraphic.js +2 -0
  48. package/lib/cjs/render/RenderGraphic.js.map +1 -1
  49. package/lib/cjs/render/RenderTarget.d.ts +3 -2
  50. package/lib/cjs/render/RenderTarget.d.ts.map +1 -1
  51. package/lib/cjs/render/RenderTarget.js.map +1 -1
  52. package/lib/cjs/render/Scene.d.ts +2 -2
  53. package/lib/cjs/render/Scene.d.ts.map +1 -1
  54. package/lib/cjs/render/Scene.js.map +1 -1
  55. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts +3 -0
  56. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  57. package/lib/cjs/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  58. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.d.ts +3 -0
  59. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.d.ts.map +1 -1
  60. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js +2 -0
  61. package/lib/cjs/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  62. package/lib/cjs/render/webgl/GLTimer.d.ts.map +1 -1
  63. package/lib/cjs/render/webgl/GLTimer.js +24 -4
  64. package/lib/cjs/render/webgl/GLTimer.js.map +1 -1
  65. package/lib/cjs/render/webgl/Graphic.d.ts +6 -1
  66. package/lib/cjs/render/webgl/Graphic.d.ts.map +1 -1
  67. package/lib/cjs/render/webgl/Graphic.js +20 -0
  68. package/lib/cjs/render/webgl/Graphic.js.map +1 -1
  69. package/lib/cjs/render/webgl/Layer.d.ts +2 -0
  70. package/lib/cjs/render/webgl/Layer.d.ts.map +1 -1
  71. package/lib/cjs/render/webgl/Layer.js +3 -0
  72. package/lib/cjs/render/webgl/Layer.js.map +1 -1
  73. package/lib/cjs/render/webgl/Mesh.d.ts +2 -0
  74. package/lib/cjs/render/webgl/Mesh.d.ts.map +1 -1
  75. package/lib/cjs/render/webgl/Mesh.js +7 -0
  76. package/lib/cjs/render/webgl/Mesh.js.map +1 -1
  77. package/lib/cjs/render/webgl/PlanarClassifier.d.ts +3 -2
  78. package/lib/cjs/render/webgl/PlanarClassifier.d.ts.map +1 -1
  79. package/lib/cjs/render/webgl/PlanarClassifier.js.map +1 -1
  80. package/lib/cjs/render/webgl/Primitive.d.ts +2 -0
  81. package/lib/cjs/render/webgl/Primitive.d.ts.map +1 -1
  82. package/lib/cjs/render/webgl/Primitive.js +3 -0
  83. package/lib/cjs/render/webgl/Primitive.js.map +1 -1
  84. package/lib/cjs/render/webgl/Target.d.ts +4 -3
  85. package/lib/cjs/render/webgl/Target.d.ts.map +1 -1
  86. package/lib/cjs/render/webgl/Target.js.map +1 -1
  87. package/lib/cjs/request/utils.d.ts +5 -0
  88. package/lib/cjs/request/utils.d.ts.map +1 -1
  89. package/lib/cjs/request/utils.js +11 -1
  90. package/lib/cjs/request/utils.js.map +1 -1
  91. package/lib/cjs/tile/BatchedTileIdMap.d.ts +6 -1
  92. package/lib/cjs/tile/BatchedTileIdMap.d.ts.map +1 -1
  93. package/lib/cjs/tile/BatchedTileIdMap.js +9 -0
  94. package/lib/cjs/tile/BatchedTileIdMap.js.map +1 -1
  95. package/lib/cjs/tile/ClassifierTileTree.d.ts +4 -4
  96. package/lib/cjs/tile/ClassifierTileTree.d.ts.map +1 -1
  97. package/lib/cjs/tile/ClassifierTileTree.js +11 -6
  98. package/lib/cjs/tile/ClassifierTileTree.js.map +1 -1
  99. package/lib/cjs/tile/GltfReader.js +1 -1
  100. package/lib/cjs/tile/GltfReader.js.map +1 -1
  101. package/lib/cjs/tile/OrbitGtTileTree.d.ts +1 -0
  102. package/lib/cjs/tile/OrbitGtTileTree.d.ts.map +1 -1
  103. package/lib/cjs/tile/OrbitGtTileTree.js +4 -0
  104. package/lib/cjs/tile/OrbitGtTileTree.js.map +1 -1
  105. package/lib/cjs/tile/PrimaryTileTree.d.ts +1 -0
  106. package/lib/cjs/tile/PrimaryTileTree.d.ts.map +1 -1
  107. package/lib/cjs/tile/PrimaryTileTree.js +34 -8
  108. package/lib/cjs/tile/PrimaryTileTree.js.map +1 -1
  109. package/lib/cjs/tile/RealityModelTileTree.d.ts +5 -2
  110. package/lib/cjs/tile/RealityModelTileTree.d.ts.map +1 -1
  111. package/lib/cjs/tile/RealityModelTileTree.js +19 -0
  112. package/lib/cjs/tile/RealityModelTileTree.js.map +1 -1
  113. package/lib/cjs/tile/RealityTileTree.d.ts +5 -0
  114. package/lib/cjs/tile/RealityTileTree.d.ts.map +1 -1
  115. package/lib/cjs/tile/RealityTileTree.js +1 -1
  116. package/lib/cjs/tile/RealityTileTree.js.map +1 -1
  117. package/lib/cjs/tile/RenderGraphicTileTree.d.ts +34 -0
  118. package/lib/cjs/tile/RenderGraphicTileTree.d.ts.map +1 -0
  119. package/lib/cjs/tile/RenderGraphicTileTree.js +100 -0
  120. package/lib/cjs/tile/RenderGraphicTileTree.js.map +1 -0
  121. package/lib/cjs/tile/TileAdmin.d.ts +24 -1
  122. package/lib/cjs/tile/TileAdmin.d.ts.map +1 -1
  123. package/lib/cjs/tile/TileAdmin.js +15 -4
  124. package/lib/cjs/tile/TileAdmin.js.map +1 -1
  125. package/lib/cjs/tile/TileTreeReference.d.ts +21 -2
  126. package/lib/cjs/tile/TileTreeReference.d.ts.map +1 -1
  127. package/lib/cjs/tile/TileTreeReference.js +26 -1
  128. package/lib/cjs/tile/TileTreeReference.js.map +1 -1
  129. package/lib/cjs/tile/internal.d.ts +1 -0
  130. package/lib/cjs/tile/internal.d.ts.map +1 -1
  131. package/lib/cjs/tile/internal.js +1 -0
  132. package/lib/cjs/tile/internal.js.map +1 -1
  133. package/lib/cjs/tile/map/MapLayerTileTreeReference.d.ts +1 -0
  134. package/lib/cjs/tile/map/MapLayerTileTreeReference.d.ts.map +1 -1
  135. package/lib/cjs/tile/map/MapLayerTileTreeReference.js +4 -0
  136. package/lib/cjs/tile/map/MapLayerTileTreeReference.js.map +1 -1
  137. package/lib/cjs/tile/map/MapTileTree.d.ts +1 -0
  138. package/lib/cjs/tile/map/MapTileTree.d.ts.map +1 -1
  139. package/lib/cjs/tile/map/MapTileTree.js +20 -7
  140. package/lib/cjs/tile/map/MapTileTree.js.map +1 -1
  141. package/lib/cjs/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  142. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js +16 -0
  143. package/lib/cjs/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  144. package/lib/cjs/tools/ToolAdmin.d.ts +2 -0
  145. package/lib/cjs/tools/ToolAdmin.d.ts.map +1 -1
  146. package/lib/cjs/tools/ToolAdmin.js +4 -0
  147. package/lib/cjs/tools/ToolAdmin.js.map +1 -1
  148. package/lib/esm/AccuDraw.d.ts +6 -0
  149. package/lib/esm/AccuDraw.d.ts.map +1 -1
  150. package/lib/esm/AccuDraw.js +11 -0
  151. package/lib/esm/AccuDraw.js.map +1 -1
  152. package/lib/esm/CheckpointConnection.d.ts +7 -7
  153. package/lib/esm/CheckpointConnection.d.ts.map +1 -1
  154. package/lib/esm/CheckpointConnection.js +31 -23
  155. package/lib/esm/CheckpointConnection.js.map +1 -1
  156. package/lib/esm/ContextRealityModelState.d.ts +3 -0
  157. package/lib/esm/ContextRealityModelState.d.ts.map +1 -1
  158. package/lib/esm/ContextRealityModelState.js +8 -1
  159. package/lib/esm/ContextRealityModelState.js.map +1 -1
  160. package/lib/esm/IModelApp.js +1 -1
  161. package/lib/esm/IModelApp.js.map +1 -1
  162. package/lib/esm/ModelState.d.ts +3 -2
  163. package/lib/esm/ModelState.d.ts.map +1 -1
  164. package/lib/esm/ModelState.js +3 -2
  165. package/lib/esm/ModelState.js.map +1 -1
  166. package/lib/esm/SpatialClassifiersState.d.ts +55 -0
  167. package/lib/esm/SpatialClassifiersState.d.ts.map +1 -0
  168. package/lib/esm/SpatialClassifiersState.js +43 -0
  169. package/lib/esm/SpatialClassifiersState.js.map +1 -0
  170. package/lib/esm/ViewContext.d.ts +3 -2
  171. package/lib/esm/ViewContext.d.ts.map +1 -1
  172. package/lib/esm/ViewContext.js.map +1 -1
  173. package/lib/esm/ViewManager.d.ts.map +1 -1
  174. package/lib/esm/ViewManager.js +4 -0
  175. package/lib/esm/ViewManager.js.map +1 -1
  176. package/lib/esm/Viewport.d.ts.map +1 -1
  177. package/lib/esm/Viewport.js +16 -8
  178. package/lib/esm/Viewport.js.map +1 -1
  179. package/lib/esm/core-frontend.d.ts +2 -0
  180. package/lib/esm/core-frontend.d.ts.map +1 -1
  181. package/lib/esm/core-frontend.js +2 -0
  182. package/lib/esm/core-frontend.js.map +1 -1
  183. package/lib/esm/render/GraphicBuilder.d.ts +2 -0
  184. package/lib/esm/render/GraphicBuilder.d.ts.map +1 -1
  185. package/lib/esm/render/GraphicBuilder.js.map +1 -1
  186. package/lib/esm/render/MockRender.d.ts +1 -0
  187. package/lib/esm/render/MockRender.d.ts.map +1 -1
  188. package/lib/esm/render/MockRender.js +1 -0
  189. package/lib/esm/render/MockRender.js.map +1 -1
  190. package/lib/esm/render/RenderGraphic.d.ts +7 -0
  191. package/lib/esm/render/RenderGraphic.d.ts.map +1 -1
  192. package/lib/esm/render/RenderGraphic.js +2 -0
  193. package/lib/esm/render/RenderGraphic.js.map +1 -1
  194. package/lib/esm/render/RenderTarget.d.ts +3 -2
  195. package/lib/esm/render/RenderTarget.d.ts.map +1 -1
  196. package/lib/esm/render/RenderTarget.js.map +1 -1
  197. package/lib/esm/render/Scene.d.ts +2 -2
  198. package/lib/esm/render/Scene.d.ts.map +1 -1
  199. package/lib/esm/render/Scene.js.map +1 -1
  200. package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts +3 -0
  201. package/lib/esm/render/primitives/geometry/GeometryAccumulator.d.ts.map +1 -1
  202. package/lib/esm/render/primitives/geometry/GeometryAccumulator.js.map +1 -1
  203. package/lib/esm/render/primitives/mesh/MeshBuilderMap.d.ts +3 -0
  204. package/lib/esm/render/primitives/mesh/MeshBuilderMap.d.ts.map +1 -1
  205. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js +2 -0
  206. package/lib/esm/render/primitives/mesh/MeshBuilderMap.js.map +1 -1
  207. package/lib/esm/render/webgl/GLTimer.d.ts.map +1 -1
  208. package/lib/esm/render/webgl/GLTimer.js +24 -4
  209. package/lib/esm/render/webgl/GLTimer.js.map +1 -1
  210. package/lib/esm/render/webgl/Graphic.d.ts +6 -1
  211. package/lib/esm/render/webgl/Graphic.d.ts.map +1 -1
  212. package/lib/esm/render/webgl/Graphic.js +21 -1
  213. package/lib/esm/render/webgl/Graphic.js.map +1 -1
  214. package/lib/esm/render/webgl/Layer.d.ts +2 -0
  215. package/lib/esm/render/webgl/Layer.d.ts.map +1 -1
  216. package/lib/esm/render/webgl/Layer.js +3 -0
  217. package/lib/esm/render/webgl/Layer.js.map +1 -1
  218. package/lib/esm/render/webgl/Mesh.d.ts +2 -0
  219. package/lib/esm/render/webgl/Mesh.d.ts.map +1 -1
  220. package/lib/esm/render/webgl/Mesh.js +7 -0
  221. package/lib/esm/render/webgl/Mesh.js.map +1 -1
  222. package/lib/esm/render/webgl/PlanarClassifier.d.ts +3 -2
  223. package/lib/esm/render/webgl/PlanarClassifier.d.ts.map +1 -1
  224. package/lib/esm/render/webgl/PlanarClassifier.js.map +1 -1
  225. package/lib/esm/render/webgl/Primitive.d.ts +2 -0
  226. package/lib/esm/render/webgl/Primitive.d.ts.map +1 -1
  227. package/lib/esm/render/webgl/Primitive.js +3 -0
  228. package/lib/esm/render/webgl/Primitive.js.map +1 -1
  229. package/lib/esm/render/webgl/Target.d.ts +4 -3
  230. package/lib/esm/render/webgl/Target.d.ts.map +1 -1
  231. package/lib/esm/render/webgl/Target.js.map +1 -1
  232. package/lib/esm/request/utils.d.ts +5 -0
  233. package/lib/esm/request/utils.d.ts.map +1 -1
  234. package/lib/esm/request/utils.js +9 -0
  235. package/lib/esm/request/utils.js.map +1 -1
  236. package/lib/esm/tile/BatchedTileIdMap.d.ts +6 -1
  237. package/lib/esm/tile/BatchedTileIdMap.d.ts.map +1 -1
  238. package/lib/esm/tile/BatchedTileIdMap.js +9 -0
  239. package/lib/esm/tile/BatchedTileIdMap.js.map +1 -1
  240. package/lib/esm/tile/ClassifierTileTree.d.ts +4 -4
  241. package/lib/esm/tile/ClassifierTileTree.d.ts.map +1 -1
  242. package/lib/esm/tile/ClassifierTileTree.js +12 -7
  243. package/lib/esm/tile/ClassifierTileTree.js.map +1 -1
  244. package/lib/esm/tile/GltfReader.js +1 -1
  245. package/lib/esm/tile/GltfReader.js.map +1 -1
  246. package/lib/esm/tile/OrbitGtTileTree.d.ts +1 -0
  247. package/lib/esm/tile/OrbitGtTileTree.d.ts.map +1 -1
  248. package/lib/esm/tile/OrbitGtTileTree.js +4 -0
  249. package/lib/esm/tile/OrbitGtTileTree.js.map +1 -1
  250. package/lib/esm/tile/PrimaryTileTree.d.ts +1 -0
  251. package/lib/esm/tile/PrimaryTileTree.d.ts.map +1 -1
  252. package/lib/esm/tile/PrimaryTileTree.js +34 -8
  253. package/lib/esm/tile/PrimaryTileTree.js.map +1 -1
  254. package/lib/esm/tile/RealityModelTileTree.d.ts +5 -2
  255. package/lib/esm/tile/RealityModelTileTree.d.ts.map +1 -1
  256. package/lib/esm/tile/RealityModelTileTree.js +19 -0
  257. package/lib/esm/tile/RealityModelTileTree.js.map +1 -1
  258. package/lib/esm/tile/RealityTileTree.d.ts +5 -0
  259. package/lib/esm/tile/RealityTileTree.d.ts.map +1 -1
  260. package/lib/esm/tile/RealityTileTree.js +1 -1
  261. package/lib/esm/tile/RealityTileTree.js.map +1 -1
  262. package/lib/esm/tile/RenderGraphicTileTree.d.ts +34 -0
  263. package/lib/esm/tile/RenderGraphicTileTree.d.ts.map +1 -0
  264. package/lib/esm/tile/RenderGraphicTileTree.js +96 -0
  265. package/lib/esm/tile/RenderGraphicTileTree.js.map +1 -0
  266. package/lib/esm/tile/TileAdmin.d.ts +24 -1
  267. package/lib/esm/tile/TileAdmin.d.ts.map +1 -1
  268. package/lib/esm/tile/TileAdmin.js +15 -4
  269. package/lib/esm/tile/TileAdmin.js.map +1 -1
  270. package/lib/esm/tile/TileTreeReference.d.ts +21 -2
  271. package/lib/esm/tile/TileTreeReference.d.ts.map +1 -1
  272. package/lib/esm/tile/TileTreeReference.js +27 -2
  273. package/lib/esm/tile/TileTreeReference.js.map +1 -1
  274. package/lib/esm/tile/internal.d.ts +1 -0
  275. package/lib/esm/tile/internal.d.ts.map +1 -1
  276. package/lib/esm/tile/internal.js +1 -0
  277. package/lib/esm/tile/internal.js.map +1 -1
  278. package/lib/esm/tile/map/MapLayerTileTreeReference.d.ts +1 -0
  279. package/lib/esm/tile/map/MapLayerTileTreeReference.d.ts.map +1 -1
  280. package/lib/esm/tile/map/MapLayerTileTreeReference.js +4 -0
  281. package/lib/esm/tile/map/MapLayerTileTreeReference.js.map +1 -1
  282. package/lib/esm/tile/map/MapTileTree.d.ts +1 -0
  283. package/lib/esm/tile/map/MapTileTree.d.ts.map +1 -1
  284. package/lib/esm/tile/map/MapTileTree.js +20 -7
  285. package/lib/esm/tile/map/MapTileTree.js.map +1 -1
  286. package/lib/esm/tile/map/MapTiledGraphicsProvider.d.ts.map +1 -1
  287. package/lib/esm/tile/map/MapTiledGraphicsProvider.js +17 -1
  288. package/lib/esm/tile/map/MapTiledGraphicsProvider.js.map +1 -1
  289. package/lib/esm/tools/ToolAdmin.d.ts +2 -0
  290. package/lib/esm/tools/ToolAdmin.d.ts.map +1 -1
  291. package/lib/esm/tools/ToolAdmin.js +4 -0
  292. package/lib/esm/tools/ToolAdmin.js.map +1 -1
  293. package/lib/public/scripts/parse-imdl-worker.js +1 -1
  294. package/lib/workers/webpack/parse-imdl-worker.js +1 -1
  295. package/package.json +18 -18
@@ -1 +1 @@
1
- {"version":3,"file":"RenderTarget.js","sourceRoot":"","sources":["../../../src/render/RenderTarget.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAyBH;;;GAGG;AACH,IAAY,mBAOX;AAPD,WAAY,mBAAmB;IAC7B,2BAA2B;IAC3B,2DAAG,CAAA;IACH,sCAAsC;IACtC,uEAAS,CAAA;IACT,yCAAyC;IACzC,2EAAW,CAAA;AACb,CAAC,EAPW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAO9B;AA2BD;;;;GAIG;AACH,MAAsB,YAAY;IACzB,qBAAqB,CAAC,GAAU,IAAkC,OAAO,SAAS,CAAC,CAAC,CAAC;IAO5F,IAAW,gBAAgB,KAAa,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5C,uBAAuB,CAAC,SAAiB,EAAE,KAAK,GAAG,IAAI;QAC5D,MAAM,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC9C,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,qBAAqB,CAAC,YAAoB;QAC/C,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAC1G,CAAC;IAOD,IAAW,iBAAiB,KAAwC,OAAO,SAAS,CAAC,CAAC,CAAC;IACvF,IAAW,iBAAiB,CAAC,WAA8C,IAAI,CAAC;IAEhF,IAAW,gBAAgB,KAAa,OAAO,CAAC,CAAC,CAAC,CAAC;IACnD,IAAW,gBAAgB,CAAC,WAAmB,IAAI,CAAC;IAE7C,yBAAyB,CAAC,UAA+B,IAAI,CAAC;IAErE,wHAAwH;IACjH,kBAAkB,CAAC,QAAkC,IAAU,CAAC;IAChE,mBAAmB,CAAC,GAAW,IAAwC,OAAO,SAAS,CAAC,CAAC,CAAC;IAC1F,sBAAsB,CAAC,WAA+B,IAAwC,OAAO,SAAS,CAAC,CAAC,CAAC;IACjH,eAAe,CAAC,GAAe,IAAoC,OAAO,SAAS,CAAC,CAAC,CAAC;IAEtF,oBAAoB,CAAC,OAAoE;QAC9F,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAEM,OAAO,KAAW,CAAC;IACnB,KAAK,KAAW,CAAC;IAMjB,wBAAwB,CAAC,IAAgC,IAAU,CAAC;IACpE,YAAY,CAAC,QAAmB,IAAU,CAAC;IAC3C,UAAU,CAAC,UAAsB,EAAE,UAAkB,IAAU,CAAC;IAChE,cAAc,CAAC,SAAmB,EAAE,mBAA8C,IAAU,CAAC;IAE7F,SAAS,KAAW,CAAC;IAI5B,8CAA8C;IACvC,SAAS,CAAC,KAAe,EAAE,WAAoB,EAAE,eAAwB,IAA6B,OAAO,SAAS,CAAC,CAAC,CAAC;IACzH,eAAe,CAAC,KAA2B,IAA6B,OAAO,SAAS,CAAC,CAAC,CAAC;IAC3F,iBAAiB,KAAwB,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnF,iBAAiB,CAAC,MAA+B,IAAU,CAAC;IAEnE;;;OAGG;IACI,iBAAiB,CAAC,SAAkB,IAAmC,OAAO,SAAS,CAAC,CAAC,CAAC;IAEjG,IAAW,YAAY,KAA2C,OAAO,SAAS,CAAC,CAAC,CAAC;IAUrF;;OAEG;IACI,wBAAwB,CAAC,QAAkC,EAAE,OAAyB,EAAE,QAAsC;QACnI,QAAQ,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;CACF;AAxFD,oCAwFC","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, IDisposable } from \"@itwin/core-bentley\";\r\nimport { Frustum, ImageBuffer, SpatialClassifier } from \"@itwin/core-common\";\r\nimport { Point2d, XAndY } from \"@itwin/core-geometry\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { HiliteSet } from \"../SelectionSet\";\r\nimport { SceneContext } from \"../ViewContext\";\r\nimport { ReadImageBufferArgs, Viewport } from \"../Viewport\";\r\nimport { ViewRect } from \"../common/ViewRect\";\r\nimport { CanvasDecoration } from \"./CanvasDecoration\";\r\nimport { Decorations } from \"./Decorations\";\r\nimport { FeatureSymbology } from \"./FeatureSymbology\";\r\nimport { FrameStatsCollector } from \"./FrameStats\";\r\nimport { AnimationBranchStates } from \"./GraphicBranch\";\r\nimport { CustomGraphicBuilderOptions, ViewportGraphicBuilderOptions } from \"./GraphicBuilder\";\r\nimport { Pixel } from \"./Pixel\";\r\nimport { GraphicList } from \"./RenderGraphic\";\r\nimport { RenderMemory } from \"./RenderMemory\";\r\nimport { RenderPlan } from \"./RenderPlan\";\r\nimport { RenderPlanarClassifier } from \"./RenderPlanarClassifier\";\r\nimport { RenderSystem, RenderTextureDrape } from \"./RenderSystem\";\r\nimport { Scene } from \"./Scene\";\r\nimport { QueryTileFeaturesOptions, QueryVisibleFeaturesCallback } from \"./VisibleFeature\";\r\n\r\n/** Used for debugging purposes, to toggle display of instanced or batched primitives.\r\n * @see [[RenderTargetDebugControl]].\r\n * @internal\r\n */\r\nexport enum PrimitiveVisibility {\r\n /** Draw all primitives. */\r\n All,\r\n /** Only draw instanced primitives. */\r\n Instanced,\r\n /** Only draw un-instanced primitives. */\r\n Uninstanced,\r\n}\r\n\r\n/** An interface optionally exposed by a RenderTarget that allows control of various debugging features.\r\n * @internal\r\n */\r\nexport interface RenderTargetDebugControl {\r\n /** If true, render to the screen as if rendering off-screen for readPixels(). */\r\n drawForReadPixels: boolean;\r\n primitiveVisibility: PrimitiveVisibility;\r\n vcSupportIntersectingVolumes: boolean;\r\n readonly shadowFrustum: Frustum | undefined;\r\n displayDrapeFrustum: boolean;\r\n /** Override device pixel ratio for on-screen targets only. This supersedes window.devicePixelRatio.\r\n * Undefined clears the override. Chiefly useful for tests.\r\n */\r\n devicePixelRatioOverride?: number;\r\n displayRealityTilePreload: boolean;\r\n displayRealityTileRanges: boolean;\r\n logRealityTiles: boolean;\r\n displayNormalMaps: boolean;\r\n freezeRealityTiles: boolean;\r\n /** Obtain a summary of the render commands required to draw the scene currently displayed.\r\n * Each entry specifies the type of command and the number of such commands required by the current scene.\r\n */\r\n getRenderCommands(): Array<{ name: string, count: number }>;\r\n}\r\n\r\n/** A RenderTarget connects a [[Viewport]] to a WebGLRenderingContext to enable the viewport's contents to be displayed on the screen.\r\n * Application code rarely interacts directly with a RenderTarget - instead, it interacts with a Viewport which forwards requests to the implementation\r\n * of the RenderTarget.\r\n * @internal\r\n */\r\nexport abstract class RenderTarget implements IDisposable, RenderMemory.Consumer {\r\n public pickOverlayDecoration(_pt: XAndY): CanvasDecoration | undefined { return undefined; }\r\n\r\n public abstract get renderSystem(): RenderSystem;\r\n\r\n /** NB: *Device pixels*, not CSS pixels! */\r\n public abstract get viewRect(): ViewRect;\r\n\r\n public get devicePixelRatio(): number { return 1; }\r\n public cssPixelsToDevicePixels(cssPixels: number, floor = true): number {\r\n const pix = cssPixels * this.devicePixelRatio;\r\n return floor ? Math.floor(pix) : pix;\r\n }\r\n\r\n /** Given the size of a logical pixel in meters, convert it to the size of a physical pixel in meters, if [[RenderSystem.dpiAwareLOD]] is `true`.\r\n * Used when computing LOD for graphics.\r\n */\r\n public adjustPixelSizeForLOD(cssPixelSize: number): number {\r\n return this.renderSystem.dpiAwareLOD ? this.cssPixelsToDevicePixels(cssPixelSize, false) : cssPixelSize;\r\n }\r\n\r\n public abstract get wantInvertBlackBackground(): boolean;\r\n\r\n public abstract get analysisFraction(): number;\r\n public abstract set analysisFraction(fraction: number);\r\n\r\n public get animationBranches(): AnimationBranchStates | undefined { return undefined; }\r\n public set animationBranches(_transforms: AnimationBranchStates | undefined) { }\r\n\r\n public get antialiasSamples(): number { return 1; }\r\n public set antialiasSamples(_numSamples: number) { }\r\n\r\n public assignFrameStatsCollector(_collector: FrameStatsCollector) { }\r\n\r\n /** Update the solar shadow map. If a SceneContext is supplied, shadows are enabled; otherwise, shadows are disabled. */\r\n public updateSolarShadows(_context: SceneContext | undefined): void { }\r\n public getPlanarClassifier(_id: string): RenderPlanarClassifier | undefined { return undefined; }\r\n public createPlanarClassifier(_properties?: SpatialClassifier): RenderPlanarClassifier | undefined { return undefined; }\r\n public getTextureDrape(_id: Id64String): RenderTextureDrape | undefined { return undefined; }\r\n\r\n public createGraphicBuilder(options: CustomGraphicBuilderOptions | ViewportGraphicBuilderOptions) {\r\n return this.renderSystem.createGraphic(options);\r\n }\r\n\r\n public dispose(): void { }\r\n public reset(): void { }\r\n public abstract changeScene(scene: Scene): void;\r\n public abstract changeDynamics(dynamics?: GraphicList): void;\r\n public abstract changeDecorations(decorations: Decorations): void;\r\n public abstract changeRenderPlan(plan: RenderPlan): void;\r\n public abstract drawFrame(sceneMilSecElapsed?: number): void;\r\n public overrideFeatureSymbology(_ovr: FeatureSymbology.Overrides): void { }\r\n public setHiliteSet(_hilited: HiliteSet): void { }\r\n public setFlashed(_elementId: Id64String, _intensity: number): void { }\r\n public onBeforeRender(_viewport: Viewport, _setSceneNeedRedraw: (redraw: boolean) => void): void { }\r\n public abstract setViewRect(_rect: ViewRect, _temporary: boolean): void;\r\n public onResized(): void { }\r\n public abstract updateViewRect(): boolean; // force a RenderTarget viewRect to resize if necessary since last draw\r\n /** `rect` is specified in *CSS* pixels. */\r\n public abstract readPixels(rect: ViewRect, selector: Pixel.Selector, receiver: Pixel.Receiver, excludeNonLocatable: boolean): void;\r\n /** @deprecated in 3.x. use readImageBuffer */\r\n public readImage(_rect: ViewRect, _targetSize: Point2d, _flipVertically: boolean): ImageBuffer | undefined { return undefined; }\r\n public readImageBuffer(_args?: ReadImageBufferArgs): ImageBuffer | undefined { return undefined; }\r\n public readImageToCanvas(): HTMLCanvasElement { return document.createElement(\"canvas\"); }\r\n public collectStatistics(_stats: RenderMemory.Statistics): void { }\r\n\r\n /** Specify whether webgl content should be rendered directly to the screen.\r\n * If rendering to screen becomes enabled, returns the canvas to which to render the webgl content.\r\n * Returns undefined if rendering to screen becomes disabled, or is not supported by this RenderTarget.\r\n */\r\n public setRenderToScreen(_toScreen: boolean): HTMLCanvasElement | undefined { return undefined; }\r\n\r\n public get debugControl(): RenderTargetDebugControl | undefined { return undefined; }\r\n\r\n /** An ordered list of names of screen-space post-processing effects to be applied to the image produced by this target.\r\n * The effects are applied in the order in which they appear in the list. Any names not corresponding to a registered effect are ignored.\r\n * This may have no effect if this target does not support screen-space effects.\r\n * @see [[RenderSystem.createScreenSpaceEffectBuilder]] to create and register new effects.\r\n */\r\n public abstract get screenSpaceEffects(): Iterable<string>;\r\n public abstract set screenSpaceEffects(_effectNames: Iterable<string>);\r\n\r\n /** Implementation for [[Viewport.queryVisibleFeatures]]. Not intended for direct usage. The returned iterable remains valid only for the duration of the\r\n * Viewport.queryVisibleFeatures call.\r\n */\r\n public queryVisibleTileFeatures(_options: QueryTileFeaturesOptions, _iModel: IModelConnection, callback: QueryVisibleFeaturesCallback): void {\r\n callback([]);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"RenderTarget.js","sourceRoot":"","sources":["../../../src/render/RenderTarget.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AA0BH;;;GAGG;AACH,IAAY,mBAOX;AAPD,WAAY,mBAAmB;IAC7B,2BAA2B;IAC3B,2DAAG,CAAA;IACH,sCAAsC;IACtC,uEAAS,CAAA;IACT,yCAAyC;IACzC,2EAAW,CAAA;AACb,CAAC,EAPW,mBAAmB,GAAnB,2BAAmB,KAAnB,2BAAmB,QAO9B;AA2BD;;;;GAIG;AACH,MAAsB,YAAY;IACzB,qBAAqB,CAAC,GAAU,IAAkC,OAAO,SAAS,CAAC,CAAC,CAAC;IAO5F,IAAW,gBAAgB,KAAa,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5C,uBAAuB,CAAC,SAAiB,EAAE,KAAK,GAAG,IAAI;QAC5D,MAAM,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC9C,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACvC,CAAC;IAED;;OAEG;IACI,qBAAqB,CAAC,YAAoB;QAC/C,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAC1G,CAAC;IAOD,IAAW,iBAAiB,KAAwC,OAAO,SAAS,CAAC,CAAC,CAAC;IACvF,IAAW,iBAAiB,CAAC,WAA8C,IAAI,CAAC;IAEhF,IAAW,gBAAgB,KAAa,OAAO,CAAC,CAAC,CAAC,CAAC;IACnD,IAAW,gBAAgB,CAAC,WAAmB,IAAI,CAAC;IAE7C,yBAAyB,CAAC,UAA+B,IAAI,CAAC;IAErE,wHAAwH;IACjH,kBAAkB,CAAC,QAAkC,IAAU,CAAC;IAChE,mBAAmB,CAAC,GAAW,IAAwC,OAAO,SAAS,CAAC,CAAC,CAAC;IAC1F,sBAAsB,CAAC,WAAqC,IAAwC,OAAO,SAAS,CAAC,CAAC,CAAC;IACvH,eAAe,CAAC,GAAe,IAAoC,OAAO,SAAS,CAAC,CAAC,CAAC;IAEtF,oBAAoB,CAAC,OAAoE;QAC9F,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAEM,OAAO,KAAW,CAAC;IACnB,KAAK,KAAW,CAAC;IAMjB,wBAAwB,CAAC,IAAgC,IAAU,CAAC;IACpE,YAAY,CAAC,QAAmB,IAAU,CAAC;IAC3C,UAAU,CAAC,UAAsB,EAAE,UAAkB,IAAU,CAAC;IAChE,cAAc,CAAC,SAAmB,EAAE,mBAA8C,IAAU,CAAC;IAE7F,SAAS,KAAW,CAAC;IAI5B,8CAA8C;IACvC,SAAS,CAAC,KAAe,EAAE,WAAoB,EAAE,eAAwB,IAA6B,OAAO,SAAS,CAAC,CAAC,CAAC;IACzH,eAAe,CAAC,KAA2B,IAA6B,OAAO,SAAS,CAAC,CAAC,CAAC;IAC3F,iBAAiB,KAAwB,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IACnF,iBAAiB,CAAC,MAA+B,IAAU,CAAC;IAEnE;;;OAGG;IACI,iBAAiB,CAAC,SAAkB,IAAmC,OAAO,SAAS,CAAC,CAAC,CAAC;IAEjG,IAAW,YAAY,KAA2C,OAAO,SAAS,CAAC,CAAC,CAAC;IAUrF;;OAEG;IACI,wBAAwB,CAAC,QAAkC,EAAE,OAAyB,EAAE,QAAsC;QACnI,QAAQ,CAAC,EAAE,CAAC,CAAC;IACf,CAAC;CACF;AAxFD,oCAwFC","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, IDisposable } from \"@itwin/core-bentley\";\r\nimport { Frustum, ImageBuffer } from \"@itwin/core-common\";\r\nimport { Point2d, XAndY } from \"@itwin/core-geometry\";\r\nimport { IModelConnection } from \"../IModelConnection\";\r\nimport { HiliteSet } from \"../SelectionSet\";\r\nimport { SceneContext } from \"../ViewContext\";\r\nimport { ReadImageBufferArgs, Viewport } from \"../Viewport\";\r\nimport { ViewRect } from \"../common/ViewRect\";\r\nimport { CanvasDecoration } from \"./CanvasDecoration\";\r\nimport { Decorations } from \"./Decorations\";\r\nimport { FeatureSymbology } from \"./FeatureSymbology\";\r\nimport { FrameStatsCollector } from \"./FrameStats\";\r\nimport { AnimationBranchStates } from \"./GraphicBranch\";\r\nimport { CustomGraphicBuilderOptions, ViewportGraphicBuilderOptions } from \"./GraphicBuilder\";\r\nimport { Pixel } from \"./Pixel\";\r\nimport { GraphicList } from \"./RenderGraphic\";\r\nimport { RenderMemory } from \"./RenderMemory\";\r\nimport { RenderPlan } from \"./RenderPlan\";\r\nimport { RenderPlanarClassifier } from \"./RenderPlanarClassifier\";\r\nimport { RenderSystem, RenderTextureDrape } from \"./RenderSystem\";\r\nimport { Scene } from \"./Scene\";\r\nimport { QueryTileFeaturesOptions, QueryVisibleFeaturesCallback } from \"./VisibleFeature\";\r\nimport { ActiveSpatialClassifier } from \"../SpatialClassifiersState\";\r\n\r\n/** Used for debugging purposes, to toggle display of instanced or batched primitives.\r\n * @see [[RenderTargetDebugControl]].\r\n * @internal\r\n */\r\nexport enum PrimitiveVisibility {\r\n /** Draw all primitives. */\r\n All,\r\n /** Only draw instanced primitives. */\r\n Instanced,\r\n /** Only draw un-instanced primitives. */\r\n Uninstanced,\r\n}\r\n\r\n/** An interface optionally exposed by a RenderTarget that allows control of various debugging features.\r\n * @internal\r\n */\r\nexport interface RenderTargetDebugControl {\r\n /** If true, render to the screen as if rendering off-screen for readPixels(). */\r\n drawForReadPixels: boolean;\r\n primitiveVisibility: PrimitiveVisibility;\r\n vcSupportIntersectingVolumes: boolean;\r\n readonly shadowFrustum: Frustum | undefined;\r\n displayDrapeFrustum: boolean;\r\n /** Override device pixel ratio for on-screen targets only. This supersedes window.devicePixelRatio.\r\n * Undefined clears the override. Chiefly useful for tests.\r\n */\r\n devicePixelRatioOverride?: number;\r\n displayRealityTilePreload: boolean;\r\n displayRealityTileRanges: boolean;\r\n logRealityTiles: boolean;\r\n displayNormalMaps: boolean;\r\n freezeRealityTiles: boolean;\r\n /** Obtain a summary of the render commands required to draw the scene currently displayed.\r\n * Each entry specifies the type of command and the number of such commands required by the current scene.\r\n */\r\n getRenderCommands(): Array<{ name: string, count: number }>;\r\n}\r\n\r\n/** A RenderTarget connects a [[Viewport]] to a WebGLRenderingContext to enable the viewport's contents to be displayed on the screen.\r\n * Application code rarely interacts directly with a RenderTarget - instead, it interacts with a Viewport which forwards requests to the implementation\r\n * of the RenderTarget.\r\n * @internal\r\n */\r\nexport abstract class RenderTarget implements IDisposable, RenderMemory.Consumer {\r\n public pickOverlayDecoration(_pt: XAndY): CanvasDecoration | undefined { return undefined; }\r\n\r\n public abstract get renderSystem(): RenderSystem;\r\n\r\n /** NB: *Device pixels*, not CSS pixels! */\r\n public abstract get viewRect(): ViewRect;\r\n\r\n public get devicePixelRatio(): number { return 1; }\r\n public cssPixelsToDevicePixels(cssPixels: number, floor = true): number {\r\n const pix = cssPixels * this.devicePixelRatio;\r\n return floor ? Math.floor(pix) : pix;\r\n }\r\n\r\n /** Given the size of a logical pixel in meters, convert it to the size of a physical pixel in meters, if [[RenderSystem.dpiAwareLOD]] is `true`.\r\n * Used when computing LOD for graphics.\r\n */\r\n public adjustPixelSizeForLOD(cssPixelSize: number): number {\r\n return this.renderSystem.dpiAwareLOD ? this.cssPixelsToDevicePixels(cssPixelSize, false) : cssPixelSize;\r\n }\r\n\r\n public abstract get wantInvertBlackBackground(): boolean;\r\n\r\n public abstract get analysisFraction(): number;\r\n public abstract set analysisFraction(fraction: number);\r\n\r\n public get animationBranches(): AnimationBranchStates | undefined { return undefined; }\r\n public set animationBranches(_transforms: AnimationBranchStates | undefined) { }\r\n\r\n public get antialiasSamples(): number { return 1; }\r\n public set antialiasSamples(_numSamples: number) { }\r\n\r\n public assignFrameStatsCollector(_collector: FrameStatsCollector) { }\r\n\r\n /** Update the solar shadow map. If a SceneContext is supplied, shadows are enabled; otherwise, shadows are disabled. */\r\n public updateSolarShadows(_context: SceneContext | undefined): void { }\r\n public getPlanarClassifier(_id: string): RenderPlanarClassifier | undefined { return undefined; }\r\n public createPlanarClassifier(_properties?: ActiveSpatialClassifier): RenderPlanarClassifier | undefined { return undefined; }\r\n public getTextureDrape(_id: Id64String): RenderTextureDrape | undefined { return undefined; }\r\n\r\n public createGraphicBuilder(options: CustomGraphicBuilderOptions | ViewportGraphicBuilderOptions) {\r\n return this.renderSystem.createGraphic(options);\r\n }\r\n\r\n public dispose(): void { }\r\n public reset(): void { }\r\n public abstract changeScene(scene: Scene): void;\r\n public abstract changeDynamics(dynamics?: GraphicList): void;\r\n public abstract changeDecorations(decorations: Decorations): void;\r\n public abstract changeRenderPlan(plan: RenderPlan): void;\r\n public abstract drawFrame(sceneMilSecElapsed?: number): void;\r\n public overrideFeatureSymbology(_ovr: FeatureSymbology.Overrides): void { }\r\n public setHiliteSet(_hilited: HiliteSet): void { }\r\n public setFlashed(_elementId: Id64String, _intensity: number): void { }\r\n public onBeforeRender(_viewport: Viewport, _setSceneNeedRedraw: (redraw: boolean) => void): void { }\r\n public abstract setViewRect(_rect: ViewRect, _temporary: boolean): void;\r\n public onResized(): void { }\r\n public abstract updateViewRect(): boolean; // force a RenderTarget viewRect to resize if necessary since last draw\r\n /** `rect` is specified in *CSS* pixels. */\r\n public abstract readPixels(rect: ViewRect, selector: Pixel.Selector, receiver: Pixel.Receiver, excludeNonLocatable: boolean): void;\r\n /** @deprecated in 3.x. use readImageBuffer */\r\n public readImage(_rect: ViewRect, _targetSize: Point2d, _flipVertically: boolean): ImageBuffer | undefined { return undefined; }\r\n public readImageBuffer(_args?: ReadImageBufferArgs): ImageBuffer | undefined { return undefined; }\r\n public readImageToCanvas(): HTMLCanvasElement { return document.createElement(\"canvas\"); }\r\n public collectStatistics(_stats: RenderMemory.Statistics): void { }\r\n\r\n /** Specify whether webgl content should be rendered directly to the screen.\r\n * If rendering to screen becomes enabled, returns the canvas to which to render the webgl content.\r\n * Returns undefined if rendering to screen becomes disabled, or is not supported by this RenderTarget.\r\n */\r\n public setRenderToScreen(_toScreen: boolean): HTMLCanvasElement | undefined { return undefined; }\r\n\r\n public get debugControl(): RenderTargetDebugControl | undefined { return undefined; }\r\n\r\n /** An ordered list of names of screen-space post-processing effects to be applied to the image produced by this target.\r\n * The effects are applied in the order in which they appear in the list. Any names not corresponding to a registered effect are ignored.\r\n * This may have no effect if this target does not support screen-space effects.\r\n * @see [[RenderSystem.createScreenSpaceEffectBuilder]] to create and register new effects.\r\n */\r\n public abstract get screenSpaceEffects(): Iterable<string>;\r\n public abstract set screenSpaceEffects(_effectNames: Iterable<string>);\r\n\r\n /** Implementation for [[Viewport.queryVisibleFeatures]]. Not intended for direct usage. The returned iterable remains valid only for the duration of the\r\n * Viewport.queryVisibleFeatures call.\r\n */\r\n public queryVisibleTileFeatures(_options: QueryTileFeaturesOptions, _iModel: IModelConnection, callback: QueryVisibleFeaturesCallback): void {\r\n callback([]);\r\n }\r\n}\r\n"]}
@@ -2,15 +2,15 @@
2
2
  * @module Rendering
3
3
  */
4
4
  import { Id64String } from "@itwin/core-bentley";
5
- import { SpatialClassifier } from "@itwin/core-common";
6
5
  import { RenderGraphic } from "./RenderGraphic";
7
6
  import { RenderPlanarClassifier } from "./RenderPlanarClassifier";
8
7
  import { RenderTextureDrape } from "./RenderSystem";
8
+ import { ActiveSpatialClassifier } from "../SpatialClassifiersState";
9
9
  /** Describes the spatial classification applied to a [[Scene]].
10
10
  * @internal
11
11
  */
12
12
  export interface SceneVolumeClassifier {
13
- classifier: SpatialClassifier;
13
+ classifier: ActiveSpatialClassifier;
14
14
  modelId: Id64String;
15
15
  }
16
16
  /** Holds a collection of objects comprising the scene to be drawn by a [[Viewport]]'s.
@@ -1 +1 @@
1
- {"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../../../src/render/Scene.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,iBAAiB,CAAC;IAC9B,OAAO,EAAE,UAAU,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,KAAK;IAChB,kFAAkF;IAClF,SAAgB,UAAU,EAAE,aAAa,EAAE,CAAM;IACjD,wEAAwE;IACxE,SAAgB,UAAU,EAAE,aAAa,EAAE,CAAM;IACjD,uDAAuD;IACvD,SAAgB,OAAO,EAAE,aAAa,EAAE,CAAM;IAC9C,gBAAgB;IAChB,SAAgB,iBAAiB,sCAA6C;IAC9E,gBAAgB;IAChB,SAAgB,aAAa,kCAA6C;IAC1E,gBAAgB;IACT,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CACjD"}
1
+ {"version":3,"file":"Scene.d.ts","sourceRoot":"","sources":["../../../src/render/Scene.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,uBAAuB,CAAC;IACpC,OAAO,EAAE,UAAU,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,KAAK;IAChB,kFAAkF;IAClF,SAAgB,UAAU,EAAE,aAAa,EAAE,CAAM;IACjD,wEAAwE;IACxE,SAAgB,UAAU,EAAE,aAAa,EAAE,CAAM;IACjD,uDAAuD;IACvD,SAAgB,OAAO,EAAE,aAAa,EAAE,CAAM;IAC9C,gBAAgB;IAChB,SAAgB,iBAAiB,sCAA6C;IAC9E,gBAAgB;IAChB,SAAgB,aAAa,kCAA6C;IAC1E,gBAAgB;IACT,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CACjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"Scene.js","sourceRoot":"","sources":["../../../src/render/Scene.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAgBH;;;;GAIG;AACH,MAAa,KAAK;IAAlB;QACE,kFAAkF;QAClE,eAAU,GAAoB,EAAE,CAAC;QACjD,wEAAwE;QACxD,eAAU,GAAoB,EAAE,CAAC;QACjD,uDAAuD;QACvC,YAAO,GAAoB,EAAE,CAAC;QAC9C,gBAAgB;QACA,sBAAiB,GAAG,IAAI,GAAG,EAAkC,CAAC,CAAC,4CAA4C;QAC3H,gBAAgB;QACA,kBAAa,GAAG,IAAI,GAAG,EAAkC,CAAC;IAG5E,CAAC;CAAA;AAbD,sBAaC","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 { SpatialClassifier } from \"@itwin/core-common\";\r\nimport { RenderGraphic } from \"./RenderGraphic\";\r\nimport { RenderPlanarClassifier } from \"./RenderPlanarClassifier\";\r\nimport { RenderTextureDrape } from \"./RenderSystem\";\r\n\r\n/** Describes the spatial classification applied to a [[Scene]].\r\n * @internal\r\n */\r\nexport interface SceneVolumeClassifier {\r\n classifier: SpatialClassifier;\r\n modelId: Id64String;\r\n}\r\n\r\n/** Holds a collection of objects comprising the scene to be drawn by a [[Viewport]]'s.\r\n * @see [[SceneContext]] for the context in which the scene is created.\r\n * @public\r\n * @extensions\r\n */\r\nexport class Scene {\r\n /** Graphics to be drawn as a \"normal\" part of the scene - that is, with depth. */\r\n public readonly foreground: RenderGraphic[] = [];\r\n /** Graphics to be drawn in the background behind all other graphics. */\r\n public readonly background: RenderGraphic[] = [];\r\n /** Graphics to be overlaid atop all other graphics. */\r\n public readonly overlay: RenderGraphic[] = [];\r\n /** @internal */\r\n public readonly planarClassifiers = new Map<string, RenderPlanarClassifier>(); // Classifier model id to planar classifier.\r\n /** @internal */\r\n public readonly textureDrapes = new Map<Id64String, RenderTextureDrape>();\r\n /** @internal */\r\n public volumeClassifier?: SceneVolumeClassifier;\r\n}\r\n"]}
1
+ {"version":3,"file":"Scene.js","sourceRoot":"","sources":["../../../src/render/Scene.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAgBH;;;;GAIG;AACH,MAAa,KAAK;IAAlB;QACE,kFAAkF;QAClE,eAAU,GAAoB,EAAE,CAAC;QACjD,wEAAwE;QACxD,eAAU,GAAoB,EAAE,CAAC;QACjD,uDAAuD;QACvC,YAAO,GAAoB,EAAE,CAAC;QAC9C,gBAAgB;QACA,sBAAiB,GAAG,IAAI,GAAG,EAAkC,CAAC,CAAC,4CAA4C;QAC3H,gBAAgB;QACA,kBAAa,GAAG,IAAI,GAAG,EAAkC,CAAC;IAG5E,CAAC;CAAA;AAbD,sBAaC","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 { RenderGraphic } from \"./RenderGraphic\";\r\nimport { RenderPlanarClassifier } from \"./RenderPlanarClassifier\";\r\nimport { RenderTextureDrape } from \"./RenderSystem\";\r\nimport { ActiveSpatialClassifier } from \"../SpatialClassifiersState\";\r\n\r\n/** Describes the spatial classification applied to a [[Scene]].\r\n * @internal\r\n */\r\nexport interface SceneVolumeClassifier {\r\n classifier: ActiveSpatialClassifier;\r\n modelId: Id64String;\r\n}\r\n\r\n/** Holds a collection of objects comprising the scene to be drawn by a [[Viewport]]'s.\r\n * @see [[SceneContext]] for the context in which the scene is created.\r\n * @public\r\n * @extensions\r\n */\r\nexport class Scene {\r\n /** Graphics to be drawn as a \"normal\" part of the scene - that is, with depth. */\r\n public readonly foreground: RenderGraphic[] = [];\r\n /** Graphics to be drawn in the background behind all other graphics. */\r\n public readonly background: RenderGraphic[] = [];\r\n /** Graphics to be overlaid atop all other graphics. */\r\n public readonly overlay: RenderGraphic[] = [];\r\n /** @internal */\r\n public readonly planarClassifiers = new Map<string, RenderPlanarClassifier>(); // Classifier model id to planar classifier.\r\n /** @internal */\r\n public readonly textureDrapes = new Map<Id64String, RenderTextureDrape>();\r\n /** @internal */\r\n public volumeClassifier?: SceneVolumeClassifier;\r\n}\r\n"]}
@@ -51,9 +51,11 @@ export declare class GeometryAccumulator {
51
51
  * @param tolerance should derive from Viewport.getPixelSizeAtPoint
52
52
  */
53
53
  toMeshBuilderMap(options: GeometryOptions, tolerance: number, pickable: {
54
+ isVolumeClassifier?: boolean;
54
55
  modelId?: string;
55
56
  } | undefined): MeshBuilderMap;
56
57
  toMeshes(options: GeometryOptions, tolerance: number, pickable: {
58
+ isVolumeClassifier?: boolean;
57
59
  modelId?: string;
58
60
  } | undefined): MeshList;
59
61
  /**
@@ -61,6 +63,7 @@ export declare class GeometryAccumulator {
61
63
  * removed ViewContext
62
64
  */
63
65
  saveToGraphicList(graphics: RenderGraphic[], options: GeometryOptions, tolerance: number, pickable: {
66
+ isVolumeClassifier?: boolean;
64
67
  modelId?: string;
65
68
  } | undefined): MeshList | undefined;
66
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GeometryAccumulator.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryAccumulator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GeometryAccumulator.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryAccumulator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"GeometryAccumulator.js","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryAccumulator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { IndexedPolyface, Loop, Path, Point3d, Range3d, SolidPrimitive, Transform } from \"@itwin/core-geometry\";\r\nimport { AnalysisStyleDisplacement, Feature, QPoint3dList } from \"@itwin/core-common\";\r\nimport { GraphicBranch } from \"../../GraphicBranch\";\r\nimport { RenderGraphic } from \"../../RenderGraphic\";\r\nimport { RenderSystem } from \"../../RenderSystem\";\r\nimport { DisplayParams } from \"../../../common/render/primitives/DisplayParams\";\r\nimport { MeshBuilderMap } from \"../mesh/MeshBuilderMap\";\r\nimport { MeshList } from \"../mesh/MeshPrimitives\";\r\nimport { GeometryOptions } from \"../Primitives\";\r\nimport { GeometryList } from \"./GeometryList\";\r\nimport { Geometry, PrimitiveGeometryType } from \"./GeometryPrimitives\";\r\nimport { IModelApp } from \"../../../IModelApp\";\r\n\r\n/** @internal */\r\nexport class GeometryAccumulator {\r\n private _transform: Transform;\r\n private _surfacesOnly: boolean;\r\n private readonly _analysisDisplacement?: AnalysisStyleDisplacement;\r\n private readonly _viewIndependentOrigin?: Point3d;\r\n\r\n public readonly tileRange: Range3d;\r\n public readonly geometries: GeometryList = new GeometryList();\r\n public readonly system: RenderSystem;\r\n public currentFeature?: Feature;\r\n\r\n public get surfacesOnly(): boolean { return this._surfacesOnly; }\r\n public get transform(): Transform { return this._transform; }\r\n public get isEmpty(): boolean { return this.geometries.isEmpty; }\r\n public get haveTransform(): boolean { return !this._transform.isIdentity; }\r\n\r\n public constructor(options?: {\r\n system?: RenderSystem;\r\n surfacesOnly?: boolean;\r\n transform?: Transform;\r\n tileRange?: Range3d;\r\n analysisStyleDisplacement?: AnalysisStyleDisplacement;\r\n viewIndependentOrigin?: Point3d;\r\n feature?: Feature;\r\n }) {\r\n this.system = options?.system ?? IModelApp.renderSystem;\r\n this.tileRange = options?.tileRange ?? Range3d.createNull();\r\n this._surfacesOnly = true === options?.surfacesOnly;\r\n this._transform = options?.transform ?? Transform.createIdentity();\r\n this._analysisDisplacement = options?.analysisStyleDisplacement;\r\n this._viewIndependentOrigin = options?.viewIndependentOrigin;\r\n this.currentFeature = options?.feature;\r\n }\r\n\r\n private getPrimitiveRange(geom: PrimitiveGeometryType): Range3d | undefined {\r\n const range = new Range3d();\r\n geom.range(undefined, range);\r\n return range.isNull ? undefined : range;\r\n }\r\n\r\n private calculateTransform(transform: Transform, range: Range3d): Transform {\r\n if (this.haveTransform)\r\n transform = this._transform.multiplyTransformTransform(transform);\r\n\r\n transform.multiplyRange(range, range);\r\n return transform;\r\n }\r\n\r\n public addLoop(loop: Loop, displayParams: DisplayParams, transform: Transform, disjoint: boolean): boolean {\r\n const range = this.getPrimitiveRange(loop);\r\n if (!range)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromLoop(loop, xform, range, displayParams, disjoint, this.currentFeature));\r\n }\r\n\r\n public addLineString(pts: Point3d[], displayParams: DisplayParams, transform: Transform): boolean {\r\n // Do this.getPrimitiveRange() manually, so there is no need to create a PointString3d object just to find the range\r\n const range = Range3d.createNull();\r\n range.extendArray(pts, undefined);\r\n if (range.isNull)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromLineString(pts, xform, range, displayParams, this.currentFeature));\r\n }\r\n\r\n public addPointString(pts: Point3d[], displayParams: DisplayParams, transform: Transform): boolean {\r\n // Do this.getPrimitiveRange() manually, so there is no need to create a PointString3d object just to find the range\r\n const range = Range3d.createNull();\r\n range.extendArray(pts, undefined);\r\n if (range.isNull)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromPointString(pts, xform, range, displayParams, this.currentFeature));\r\n }\r\n\r\n public addPath(path: Path, displayParams: DisplayParams, transform: Transform, disjoint: boolean): boolean {\r\n const range = this.getPrimitiveRange(path);\r\n if (!range)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromPath(path, xform, range, displayParams, disjoint, this.currentFeature));\r\n }\r\n\r\n public addPolyface(pf: IndexedPolyface, displayParams: DisplayParams, transform: Transform): boolean {\r\n // Adjust the mesh range based on displacements applied to vertices by analysis style, if applicable.\r\n let range;\r\n if (this._analysisDisplacement) {\r\n const channel = pf.data.auxData?.channels.find((x) => x.name === this._analysisDisplacement!.channelName);\r\n const displacementRange = channel?.computeDisplacementRange(this._analysisDisplacement.scale);\r\n if (displacementRange && !displacementRange.isNull) {\r\n range = Range3d.createNull();\r\n const pt = new Point3d();\r\n for (let i = 0; i < pf.data.point.length; i++) {\r\n pf.data.point.getPoint3dAtUncheckedPointIndex(i, pt);\r\n range.extendXYZ(pt.x + displacementRange.low.x, pt.y + displacementRange.low.y, pt.z + displacementRange.low.z);\r\n range.extendXYZ(pt.x + displacementRange.high.x, pt.y + displacementRange.high.y, pt.z + displacementRange.high.z);\r\n }\r\n }\r\n }\r\n\r\n if (!range && !(range = this.getPrimitiveRange(pf)))\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromPolyface(pf, xform, range, displayParams, this.currentFeature));\r\n }\r\n\r\n public addSolidPrimitive(primitive: SolidPrimitive, displayParams: DisplayParams, transform: Transform): boolean {\r\n const range = this.getPrimitiveRange(primitive);\r\n if (!range)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromSolidPrimitive(primitive, xform, range, displayParams, this.currentFeature));\r\n }\r\n\r\n public addGeometry(geom: Geometry): boolean {\r\n this.geometries.push(geom);\r\n return true;\r\n }\r\n\r\n public clear(): void { this.geometries.clear(); }\r\n\r\n /**\r\n * Generates a MeshBuilderMap\r\n * native: GeometryAccumulator::ToMeshBuilderMap(GeometryOptionsCR options, double tolerance, FeatureTableP featureTable, ViewContextR context) const\r\n * note : removed featureTable, ViewContext\r\n * @param tolerance should derive from Viewport.getPixelSizeAtPoint\r\n */\r\n public toMeshBuilderMap(options: GeometryOptions, tolerance: number, pickable: { modelId?: string } | undefined): MeshBuilderMap {\r\n const { geometries } = this; // declare internal dependencies\r\n\r\n const range = geometries.computeRange();\r\n const is2d = !range.isNull && range.isAlmostZeroZ;\r\n\r\n return MeshBuilderMap.createFromGeometries(geometries, tolerance, range, is2d, options, pickable);\r\n }\r\n\r\n public toMeshes(options: GeometryOptions, tolerance: number, pickable: { modelId?: string } | undefined): MeshList {\r\n if (this.geometries.isEmpty)\r\n return new MeshList();\r\n\r\n const builderMap = this.toMeshBuilderMap(options, tolerance, pickable);\r\n return builderMap.toMeshes();\r\n }\r\n\r\n /**\r\n * Populate a list of Graphic objects from the accumulated Geometry objects.\r\n * removed ViewContext\r\n */\r\n public saveToGraphicList(graphics: RenderGraphic[], options: GeometryOptions, tolerance: number, pickable: { modelId?: string } | undefined): MeshList | undefined {\r\n const meshes = this.toMeshes(options, tolerance, pickable);\r\n if (0 === meshes.length)\r\n return undefined;\r\n\r\n // If the meshes contain quantized positions, they are all quantized to the same range. If that range is small relative to the distance\r\n // from the origin, quantization errors can produce display artifacts. Remove the translation from the quantization parameters and apply\r\n // it in the transform instead.\r\n //\r\n // If the positions are not quantized, they have already been transformed to be relative to the center of the meshes' range.\r\n // Apply the inverse translation to put them back into model space.\r\n const branch = new GraphicBranch(true);\r\n let transformOrigin: Point3d | undefined;\r\n let meshesRangeOffset = false;\r\n\r\n for (const mesh of meshes) {\r\n const verts = mesh.points;\r\n if (branch.isEmpty) {\r\n if (verts instanceof QPoint3dList) {\r\n transformOrigin = verts.params.origin.clone();\r\n verts.params.origin.setZero();\r\n } else {\r\n transformOrigin = verts.range.center;\r\n // In this case we need to modify the qOrigin of the graphic that will get created later since we have translated the origin.\r\n // We can't modify it directly, but if we temporarily modify the range of the mesh used to create it the qOrigin will get created properly.\r\n // Range is shared (not cloned) by all meshes and the mesh list itself, so modifying the range of the meshlist will modify it for all meshes.\r\n // We will then later add this offset back to the range once all of the graphics have been created because it is needed unmodified for locate.\r\n if (!meshesRangeOffset) {\r\n meshes.range?.low.subtractInPlace(transformOrigin);\r\n meshes.range?.high.subtractInPlace(transformOrigin);\r\n meshesRangeOffset = true;\r\n }\r\n }\r\n } else {\r\n assert(undefined !== transformOrigin);\r\n if (verts instanceof QPoint3dList) {\r\n assert(transformOrigin.isAlmostEqual(verts.params.origin));\r\n verts.params.origin.setZero();\r\n } else {\r\n assert(verts.range.center.isAlmostZero);\r\n }\r\n }\r\n\r\n const graphic = mesh.getGraphics(this.system, this._viewIndependentOrigin);\r\n if (undefined !== graphic)\r\n branch.add(graphic);\r\n }\r\n\r\n if (!branch.isEmpty) {\r\n assert(undefined !== transformOrigin);\r\n const transform = Transform.createTranslation(transformOrigin);\r\n graphics.push(this.system.createBranch(branch, transform));\r\n if (meshesRangeOffset) { // restore the meshes range that we modified earlier.\r\n meshes.range?.low.addInPlace(transformOrigin);\r\n meshes.range?.high.addInPlace(transformOrigin);\r\n }\r\n }\r\n\r\n return meshes;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"GeometryAccumulator.js","sourceRoot":"","sources":["../../../../../src/render/primitives/geometry/GeometryAccumulator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Rendering\r\n */\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { IndexedPolyface, Loop, Path, Point3d, Range3d, SolidPrimitive, Transform } from \"@itwin/core-geometry\";\r\nimport { AnalysisStyleDisplacement, Feature, QPoint3dList } from \"@itwin/core-common\";\r\nimport { GraphicBranch } from \"../../GraphicBranch\";\r\nimport { RenderGraphic } from \"../../RenderGraphic\";\r\nimport { RenderSystem } from \"../../RenderSystem\";\r\nimport { DisplayParams } from \"../../../common/render/primitives/DisplayParams\";\r\nimport { MeshBuilderMap } from \"../mesh/MeshBuilderMap\";\r\nimport { MeshList } from \"../mesh/MeshPrimitives\";\r\nimport { GeometryOptions } from \"../Primitives\";\r\nimport { GeometryList } from \"./GeometryList\";\r\nimport { Geometry, PrimitiveGeometryType } from \"./GeometryPrimitives\";\r\nimport { IModelApp } from \"../../../IModelApp\";\r\n\r\n/** @internal */\r\nexport class GeometryAccumulator {\r\n private _transform: Transform;\r\n private _surfacesOnly: boolean;\r\n private readonly _analysisDisplacement?: AnalysisStyleDisplacement;\r\n private readonly _viewIndependentOrigin?: Point3d;\r\n\r\n public readonly tileRange: Range3d;\r\n public readonly geometries: GeometryList = new GeometryList();\r\n public readonly system: RenderSystem;\r\n public currentFeature?: Feature;\r\n\r\n public get surfacesOnly(): boolean { return this._surfacesOnly; }\r\n public get transform(): Transform { return this._transform; }\r\n public get isEmpty(): boolean { return this.geometries.isEmpty; }\r\n public get haveTransform(): boolean { return !this._transform.isIdentity; }\r\n\r\n public constructor(options?: {\r\n system?: RenderSystem;\r\n surfacesOnly?: boolean;\r\n transform?: Transform;\r\n tileRange?: Range3d;\r\n analysisStyleDisplacement?: AnalysisStyleDisplacement;\r\n viewIndependentOrigin?: Point3d;\r\n feature?: Feature;\r\n }) {\r\n this.system = options?.system ?? IModelApp.renderSystem;\r\n this.tileRange = options?.tileRange ?? Range3d.createNull();\r\n this._surfacesOnly = true === options?.surfacesOnly;\r\n this._transform = options?.transform ?? Transform.createIdentity();\r\n this._analysisDisplacement = options?.analysisStyleDisplacement;\r\n this._viewIndependentOrigin = options?.viewIndependentOrigin;\r\n this.currentFeature = options?.feature;\r\n }\r\n\r\n private getPrimitiveRange(geom: PrimitiveGeometryType): Range3d | undefined {\r\n const range = new Range3d();\r\n geom.range(undefined, range);\r\n return range.isNull ? undefined : range;\r\n }\r\n\r\n private calculateTransform(transform: Transform, range: Range3d): Transform {\r\n if (this.haveTransform)\r\n transform = this._transform.multiplyTransformTransform(transform);\r\n\r\n transform.multiplyRange(range, range);\r\n return transform;\r\n }\r\n\r\n public addLoop(loop: Loop, displayParams: DisplayParams, transform: Transform, disjoint: boolean): boolean {\r\n const range = this.getPrimitiveRange(loop);\r\n if (!range)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromLoop(loop, xform, range, displayParams, disjoint, this.currentFeature));\r\n }\r\n\r\n public addLineString(pts: Point3d[], displayParams: DisplayParams, transform: Transform): boolean {\r\n // Do this.getPrimitiveRange() manually, so there is no need to create a PointString3d object just to find the range\r\n const range = Range3d.createNull();\r\n range.extendArray(pts, undefined);\r\n if (range.isNull)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromLineString(pts, xform, range, displayParams, this.currentFeature));\r\n }\r\n\r\n public addPointString(pts: Point3d[], displayParams: DisplayParams, transform: Transform): boolean {\r\n // Do this.getPrimitiveRange() manually, so there is no need to create a PointString3d object just to find the range\r\n const range = Range3d.createNull();\r\n range.extendArray(pts, undefined);\r\n if (range.isNull)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromPointString(pts, xform, range, displayParams, this.currentFeature));\r\n }\r\n\r\n public addPath(path: Path, displayParams: DisplayParams, transform: Transform, disjoint: boolean): boolean {\r\n const range = this.getPrimitiveRange(path);\r\n if (!range)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromPath(path, xform, range, displayParams, disjoint, this.currentFeature));\r\n }\r\n\r\n public addPolyface(pf: IndexedPolyface, displayParams: DisplayParams, transform: Transform): boolean {\r\n // Adjust the mesh range based on displacements applied to vertices by analysis style, if applicable.\r\n let range;\r\n if (this._analysisDisplacement) {\r\n const channel = pf.data.auxData?.channels.find((x) => x.name === this._analysisDisplacement!.channelName);\r\n const displacementRange = channel?.computeDisplacementRange(this._analysisDisplacement.scale);\r\n if (displacementRange && !displacementRange.isNull) {\r\n range = Range3d.createNull();\r\n const pt = new Point3d();\r\n for (let i = 0; i < pf.data.point.length; i++) {\r\n pf.data.point.getPoint3dAtUncheckedPointIndex(i, pt);\r\n range.extendXYZ(pt.x + displacementRange.low.x, pt.y + displacementRange.low.y, pt.z + displacementRange.low.z);\r\n range.extendXYZ(pt.x + displacementRange.high.x, pt.y + displacementRange.high.y, pt.z + displacementRange.high.z);\r\n }\r\n }\r\n }\r\n\r\n if (!range && !(range = this.getPrimitiveRange(pf)))\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromPolyface(pf, xform, range, displayParams, this.currentFeature));\r\n }\r\n\r\n public addSolidPrimitive(primitive: SolidPrimitive, displayParams: DisplayParams, transform: Transform): boolean {\r\n const range = this.getPrimitiveRange(primitive);\r\n if (!range)\r\n return false;\r\n\r\n const xform = this.calculateTransform(transform, range);\r\n return this.addGeometry(Geometry.createFromSolidPrimitive(primitive, xform, range, displayParams, this.currentFeature));\r\n }\r\n\r\n public addGeometry(geom: Geometry): boolean {\r\n this.geometries.push(geom);\r\n return true;\r\n }\r\n\r\n public clear(): void { this.geometries.clear(); }\r\n\r\n /**\r\n * Generates a MeshBuilderMap\r\n * native: GeometryAccumulator::ToMeshBuilderMap(GeometryOptionsCR options, double tolerance, FeatureTableP featureTable, ViewContextR context) const\r\n * note : removed featureTable, ViewContext\r\n * @param tolerance should derive from Viewport.getPixelSizeAtPoint\r\n */\r\n public toMeshBuilderMap(options: GeometryOptions, tolerance: number, pickable: { isVolumeClassifier?: boolean, modelId?: string } | undefined): MeshBuilderMap {\r\n const { geometries } = this; // declare internal dependencies\r\n\r\n const range = geometries.computeRange();\r\n const is2d = !range.isNull && range.isAlmostZeroZ;\r\n\r\n return MeshBuilderMap.createFromGeometries(geometries, tolerance, range, is2d, options, pickable);\r\n }\r\n\r\n public toMeshes(options: GeometryOptions, tolerance: number, pickable: { isVolumeClassifier?: boolean, modelId?: string } | undefined): MeshList {\r\n if (this.geometries.isEmpty)\r\n return new MeshList();\r\n\r\n const builderMap = this.toMeshBuilderMap(options, tolerance, pickable);\r\n return builderMap.toMeshes();\r\n }\r\n\r\n /**\r\n * Populate a list of Graphic objects from the accumulated Geometry objects.\r\n * removed ViewContext\r\n */\r\n public saveToGraphicList(graphics: RenderGraphic[], options: GeometryOptions, tolerance: number, pickable: { isVolumeClassifier?: boolean, modelId?: string } | undefined): MeshList | undefined {\r\n const meshes = this.toMeshes(options, tolerance, pickable);\r\n if (0 === meshes.length)\r\n return undefined;\r\n\r\n // If the meshes contain quantized positions, they are all quantized to the same range. If that range is small relative to the distance\r\n // from the origin, quantization errors can produce display artifacts. Remove the translation from the quantization parameters and apply\r\n // it in the transform instead.\r\n //\r\n // If the positions are not quantized, they have already been transformed to be relative to the center of the meshes' range.\r\n // Apply the inverse translation to put them back into model space.\r\n const branch = new GraphicBranch(true);\r\n let transformOrigin: Point3d | undefined;\r\n let meshesRangeOffset = false;\r\n\r\n for (const mesh of meshes) {\r\n const verts = mesh.points;\r\n if (branch.isEmpty) {\r\n if (verts instanceof QPoint3dList) {\r\n transformOrigin = verts.params.origin.clone();\r\n verts.params.origin.setZero();\r\n } else {\r\n transformOrigin = verts.range.center;\r\n // In this case we need to modify the qOrigin of the graphic that will get created later since we have translated the origin.\r\n // We can't modify it directly, but if we temporarily modify the range of the mesh used to create it the qOrigin will get created properly.\r\n // Range is shared (not cloned) by all meshes and the mesh list itself, so modifying the range of the meshlist will modify it for all meshes.\r\n // We will then later add this offset back to the range once all of the graphics have been created because it is needed unmodified for locate.\r\n if (!meshesRangeOffset) {\r\n meshes.range?.low.subtractInPlace(transformOrigin);\r\n meshes.range?.high.subtractInPlace(transformOrigin);\r\n meshesRangeOffset = true;\r\n }\r\n }\r\n } else {\r\n assert(undefined !== transformOrigin);\r\n if (verts instanceof QPoint3dList) {\r\n assert(transformOrigin.isAlmostEqual(verts.params.origin));\r\n verts.params.origin.setZero();\r\n } else {\r\n assert(verts.range.center.isAlmostZero);\r\n }\r\n }\r\n\r\n const graphic = mesh.getGraphics(this.system, this._viewIndependentOrigin);\r\n if (undefined !== graphic)\r\n branch.add(graphic);\r\n }\r\n\r\n if (!branch.isEmpty) {\r\n assert(undefined !== transformOrigin);\r\n const transform = Transform.createTranslation(transformOrigin);\r\n graphics.push(this.system.createBranch(branch, transform));\r\n if (meshesRangeOffset) { // restore the meshes range that we modified earlier.\r\n meshes.range?.low.addInPlace(transformOrigin);\r\n meshes.range?.high.addInPlace(transformOrigin);\r\n }\r\n }\r\n\r\n return meshes;\r\n }\r\n}\r\n"]}
@@ -22,11 +22,14 @@ export declare class MeshBuilderMap extends Dictionary<MeshBuilderMap.Key, MeshB
22
22
  readonly is2d: boolean;
23
23
  readonly features?: FeatureTable;
24
24
  readonly options: GeometryOptions;
25
+ private readonly _isVolumeClassifier;
25
26
  private _keyOrder;
26
27
  constructor(tolerance: number, range: Range3d, is2d: boolean, options: GeometryOptions, pickable: {
28
+ isVolumeClassifier?: boolean;
27
29
  modelId?: Id64String;
28
30
  } | undefined);
29
31
  static createFromGeometries(geometries: GeometryList, tolerance: number, range: Range3d, is2d: boolean, options: GeometryOptions, pickable: {
32
+ isVolumeClassifier?: boolean;
30
33
  modelId?: Id64String;
31
34
  } | undefined): MeshBuilderMap;
32
35
  toMeshes(): MeshList;
@@ -1 +1 @@
1
- {"version":3,"file":"MeshBuilderMap.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilderMap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MeshBuilderMap.d.ts","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilderMap.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@ class MeshBuilderMap extends core_bentley_1.Dictionary {
25
25
  this.range = range;
26
26
  this.is2d = is2d;
27
27
  this.options = options;
28
+ this._isVolumeClassifier = pickable?.isVolumeClassifier ?? false;
28
29
  if (pickable)
29
30
  this.features = new core_common_1.FeatureTable(2048 * 1024, pickable.modelId);
30
31
  }
@@ -111,6 +112,7 @@ class MeshBuilderMap extends core_bentley_1.Dictionary {
111
112
  tolerance,
112
113
  areaTolerance: facetAreaTolerance,
113
114
  features: this.features,
115
+ isVolumeClassifier: this._isVolumeClassifier,
114
116
  });
115
117
  }
116
118
  getKey(displayParams, type, hasNormals, isPlanar) {
@@ -1 +1 @@
1
- {"version":3,"file":"MeshBuilderMap.js","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilderMap.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,sDAA8F;AAE9F,oDAA2D;AAE3D,mFAAoF;AAIpF,8CAAgE;AAEhE,+CAAqE;AACrE,qDAAkD;AAElD,gBAAgB;AAChB,MAAa,cAAe,SAAQ,yBAA2C;IAU7E,YAAY,SAAiB,EAAE,KAAc,EAAE,IAAa,EAAE,OAAwB,EAAE,QAA8C;QACpI,KAAK,CAAC,CAAC,GAAuB,EAAE,GAAuB,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QAHxE,cAAS,GAAG,CAAC,CAAC;QAIpB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,SAAS,GAAG,2BAAc,CAAC,MAAM,CAAC;QACzD,IAAI,CAAC,kBAAkB,GAAG,SAAS,GAAG,2BAAc,CAAC,SAAS,CAAC;QAC/D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,QAAQ;YACV,IAAI,CAAC,QAAQ,GAAG,IAAI,0BAAY,CAAC,IAAI,GAAG,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC;IAEM,MAAM,CAAC,oBAAoB,CAAC,UAAwB,EAAE,SAAiB,EAAE,KAAc,EAAE,IAAa,EAAE,OAAwB,EAAE,QAA8C;QACrL,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE1E,KAAK,MAAM,IAAI,IAAI,UAAU;YAC3B,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAEzB,OAAO,GAAG,CAAC;IACb,CAAC;IAEM,QAAQ;QACb,MAAM,MAAM,GAAG,IAAI,yBAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE;YAClC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SAC7B;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,IAAc;QAChC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB;YAChC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACI,yBAAyB,CAAC,IAAc;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEpD,IAAI,SAAS,KAAK,SAAS;YACzB,KAAK,MAAM,QAAQ,IAAI,SAAS;gBAC9B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACI,mBAAmB,CAAC,QAA2B,EAAE,OAA4B;QAClF,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAC9D,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC;QACpD,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC;QAChD,MAAM,cAAc,GAAG,aAAa,CAAC,cAAc,CAAC;QAEpD,IAAI,UAAU,KAAK,CAAC;YAClB,OAAO;QAET,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,iCAAiB,CAAC,IAAI,EAAE,WAAW,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;QAClG,MAAM,WAAW,GAAG,IAAI,qCAAuB,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,qCAAuB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,qCAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChL,OAAO,CAAC,eAAe,CAAC,eAAe,EAAE,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,EAAE,OAAO,CAAC,CAAC;IAC1J,CAAC;IAED;;;OAGG;IACI,uBAAuB,CAAC,IAAc;QAC3C,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAEhD,IAAI,SAAS,KAAK,OAAO;YACvB,KAAK,MAAM,MAAM,IAAI,OAAO;gBAC1B,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACtD,CAAC;IAED;;;OAGG;IACI,oBAAoB,CAAC,eAAiC,EAAE,OAA4B;QACzF,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,eAAe,CAAC;QAEzE,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,iCAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,iCAAiB,CAAC,QAAQ,CAAC;QAC/E,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACtE,OAAO,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1F,CAAC;IAEM,UAAU,CAAC,aAA4B,EAAE,IAAuB,EAAE,UAAmB,EAAE,QAAiB;QAC7G,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEnE,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,uCAAuC;QACxE,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE;YACjC,aAAa;YACb,IAAI;YACJ,KAAK;YACL,iBAAiB;YACjB,IAAI;YACJ,QAAQ;YACR,SAAS;YACT,aAAa,EAAE,kBAAkB;YACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;IACL,CAAC;IAEM,MAAM,CAAC,aAA4B,EAAE,IAAuB,EAAE,UAAmB,EAAE,QAAiB;QACzG,MAAM,GAAG,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAE9E,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa;YAC5B,GAAG,CAAC,KAAK,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC;QAE/B,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACI,iBAAiB,CAAC,GAAuB,EAAE,KAAwB;QACxE,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,SAAS,KAAK,OAAO,EAAE;YACzB,OAAO,GAAG,yBAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;SACxB;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AApJD,wCAoJC;AAED,gBAAgB;AAChB,WAAiB,cAAc;IAC7B,MAAa,GAAG;QAOd,YAAY,MAAqB,EAAE,IAAuB,EAAE,UAAmB,EAAE,QAAiB;YAN3F,UAAK,GAAW,CAAC,CAAC;YAOvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;YAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3B,CAAC;QAEM,MAAM,CAAC,cAAc,CAAC,IAAU;YACrC,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1F,CAAC;QAEM,OAAO,CAAC,GAAQ;YACrB,IAAI,IAAI,GAAG,IAAA,6BAAc,EAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,IAAI,EAAE;gBACd,IAAI,GAAG,IAAA,6BAAc,EAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,CAAC,KAAK,IAAI,EAAE;oBACd,IAAI,GAAG,IAAA,8BAAe,EAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACpD,IAAI,CAAC,KAAK,IAAI,EAAE;wBACd,IAAI,GAAG,IAAA,8BAAe,EAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;wBACxD,IAAI,CAAC,KAAK,IAAI,EAAE;4BACd,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;yBAChD;qBACF;iBACF;aACF;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAEM,MAAM,CAAC,GAAQ,IAAa,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACrE;IArCY,kBAAG,MAqCf,CAAA;AACH,CAAC,EAvCgB,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAuC9B","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 { compareBooleans, compareNumbers, Dictionary, Id64String } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { Feature, FeatureTable } from \"@itwin/core-common\";\r\nimport { DisplayParams } from \"../../../common/render/primitives/DisplayParams\";\r\nimport { MeshPrimitiveType } from \"../../../common/render/primitives/MeshPrimitive\";\r\nimport { GeometryList } from \"../geometry/GeometryList\";\r\nimport { Geometry } from \"../geometry/GeometryPrimitives\";\r\nimport { PolyfacePrimitive } from \"../Polyface\";\r\nimport { GeometryOptions, ToleranceRatio } from \"../Primitives\";\r\nimport { StrokesPrimitive } from \"../Strokes\";\r\nimport { MeshBuilder, MeshEdgeCreationOptions } from \"./MeshBuilder\";\r\nimport { Mesh, MeshList } from \"./MeshPrimitives\";\r\n\r\n/** @internal */\r\nexport class MeshBuilderMap extends Dictionary<MeshBuilderMap.Key, MeshBuilder> {\r\n public readonly range: Range3d;\r\n public readonly vertexTolerance: number;\r\n public readonly facetAreaTolerance: number;\r\n public readonly tolerance: number;\r\n public readonly is2d: boolean;\r\n public readonly features?: FeatureTable;\r\n public readonly options: GeometryOptions;\r\n private _keyOrder = 0;\r\n\r\n constructor(tolerance: number, range: Range3d, is2d: boolean, options: GeometryOptions, pickable: { modelId?: Id64String } | undefined) {\r\n super((lhs: MeshBuilderMap.Key, rhs: MeshBuilderMap.Key) => lhs.compare(rhs));\r\n this.tolerance = tolerance;\r\n this.vertexTolerance = tolerance * ToleranceRatio.vertex;\r\n this.facetAreaTolerance = tolerance * ToleranceRatio.facetArea;\r\n this.range = range;\r\n this.is2d = is2d;\r\n this.options = options;\r\n\r\n if (pickable)\r\n this.features = new FeatureTable(2048 * 1024, pickable.modelId);\r\n }\r\n\r\n public static createFromGeometries(geometries: GeometryList, tolerance: number, range: Range3d, is2d: boolean, options: GeometryOptions, pickable: { modelId?: Id64String } | undefined): MeshBuilderMap {\r\n const map = new MeshBuilderMap(tolerance, range, is2d, options, pickable);\r\n\r\n for (const geom of geometries)\r\n map.loadGeometry(geom);\r\n\r\n return map;\r\n }\r\n\r\n public toMeshes(): MeshList {\r\n const meshes = new MeshList(this.features, this.range);\r\n for (const builder of this._values) {\r\n if (builder.mesh.points.length > 0)\r\n meshes.push(builder.mesh);\r\n }\r\n return meshes;\r\n }\r\n\r\n /**\r\n * extract polyfaces and strokes from geometry into MeshBuilder stored in builderMap\r\n * @param geom Geometry instance to extract polyfaces and strokes from\r\n * @param wantSurfacesOnly if true prevent strokes from being loaded into builders\r\n */\r\n public loadGeometry(geom: Geometry): void {\r\n this.loadPolyfacePrimitiveList(geom);\r\n\r\n if (!this.options.wantSurfacesOnly)\r\n this.loadStrokePrimitiveList(geom);\r\n }\r\n\r\n /**\r\n * extract polyface primitives from geometry in meshBuilder stored in builderMap\r\n * @param geom Geometry instance to extract polyfaces from\r\n */\r\n public loadPolyfacePrimitiveList(geom: Geometry): void {\r\n const polyfaces = geom.getPolyfaces(this.tolerance);\r\n\r\n if (polyfaces !== undefined)\r\n for (const polyface of polyfaces)\r\n this.loadIndexedPolyface(polyface, geom.feature);\r\n }\r\n\r\n /**\r\n * extract indexed polyfaces into meshBuilder stored in builderMap\r\n * @param polyface PolyfacePrimitive to extract indexed polyfaces from\r\n */\r\n public loadIndexedPolyface(polyface: PolyfacePrimitive, feature: Feature | undefined): void {\r\n const { indexedPolyface, displayParams, isPlanar } = polyface;\r\n const { pointCount, normalCount } = indexedPolyface;\r\n const { fillColor, isTextured } = displayParams;\r\n const textureMapping = displayParams.textureMapping;\r\n\r\n if (pointCount === 0)\r\n return;\r\n\r\n const builder = this.getBuilder(displayParams, MeshPrimitiveType.Mesh, normalCount > 0, isPlanar);\r\n const edgeOptions = new MeshEdgeCreationOptions(polyface.displayEdges && this.options.edges ? MeshEdgeCreationOptions.Type.DefaultEdges : MeshEdgeCreationOptions.Type.NoEdges);\r\n builder.addFromPolyface(indexedPolyface, { edgeOptions, includeParams: isTextured, fillColor: fillColor.tbgr, mappedTexture: textureMapping }, feature);\r\n }\r\n\r\n /**\r\n * extract stroke primitives from geometry in meshBuilder stored in builderMap\r\n * @param geom Geometry instance to extract strokes from\r\n */\r\n public loadStrokePrimitiveList(geom: Geometry): void {\r\n const strokes = geom.getStrokes(this.tolerance);\r\n\r\n if (undefined !== strokes)\r\n for (const stroke of strokes)\r\n this.loadStrokesPrimitive(stroke, geom.feature);\r\n }\r\n\r\n /**\r\n * extract strokes primitive into meshBuilder stored in builderMap\r\n * @param strokePrimitive StrokesPrimitive instance to extractfrom\r\n */\r\n public loadStrokesPrimitive(strokePrimitive: StrokesPrimitive, feature: Feature | undefined): void {\r\n const { displayParams, isDisjoint, isPlanar, strokes } = strokePrimitive;\r\n\r\n const type = isDisjoint ? MeshPrimitiveType.Point : MeshPrimitiveType.Polyline;\r\n const builder = this.getBuilder(displayParams, type, false, isPlanar);\r\n builder.addStrokePointLists(strokes, isDisjoint, displayParams.fillColor.tbgr, feature);\r\n }\r\n\r\n public getBuilder(displayParams: DisplayParams, type: MeshPrimitiveType, hasNormals: boolean, isPlanar: boolean): MeshBuilder {\r\n const { facetAreaTolerance, tolerance, is2d, range } = this;\r\n const key = this.getKey(displayParams, type, hasNormals, isPlanar);\r\n\r\n const quantizePositions = false; // ###TODO should this be configurable?\r\n return this.getBuilderFromKey(key, {\r\n displayParams,\r\n type,\r\n range,\r\n quantizePositions,\r\n is2d,\r\n isPlanar,\r\n tolerance,\r\n areaTolerance: facetAreaTolerance,\r\n features: this.features,\r\n });\r\n }\r\n\r\n public getKey(displayParams: DisplayParams, type: MeshPrimitiveType, hasNormals: boolean, isPlanar: boolean): MeshBuilderMap.Key {\r\n const key = new MeshBuilderMap.Key(displayParams, type, hasNormals, isPlanar);\r\n\r\n if (this.options.preserveOrder)\r\n key.order = ++this._keyOrder;\r\n\r\n return key;\r\n }\r\n\r\n /**\r\n * gets builder associated with key if defined, otherwise creates a new builder and sets that with key\r\n * @param key MeshBuilderMap.Key to associate with builder\r\n * @param props MeshBuilder.Props required to create builder if it does not already exist\r\n * @returns builder reference, changes will update instance stored in builderMap\r\n */\r\n public getBuilderFromKey(key: MeshBuilderMap.Key, props: MeshBuilder.Props): MeshBuilder {\r\n let builder = this.get(key);\r\n if (undefined === builder) {\r\n builder = MeshBuilder.create(props);\r\n this.set(key, builder);\r\n }\r\n return builder;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport namespace MeshBuilderMap { // eslint-disable-line no-redeclare\r\n export class Key {\r\n public order: number = 0;\r\n public readonly params: DisplayParams;\r\n public readonly type: MeshPrimitiveType;\r\n public readonly hasNormals: boolean;\r\n public readonly isPlanar: boolean;\r\n\r\n constructor(params: DisplayParams, type: MeshPrimitiveType, hasNormals: boolean, isPlanar: boolean) {\r\n this.params = params;\r\n this.type = type;\r\n this.hasNormals = hasNormals;\r\n this.isPlanar = isPlanar;\r\n }\r\n\r\n public static createFromMesh(mesh: Mesh): Key {\r\n return new Key(mesh.displayParams, mesh.type, mesh.normals.length !== 0, mesh.isPlanar);\r\n }\r\n\r\n public compare(rhs: Key): number {\r\n let diff = compareNumbers(this.order, rhs.order);\r\n if (0 === diff) {\r\n diff = compareNumbers(this.type, rhs.type);\r\n if (0 === diff) {\r\n diff = compareBooleans(this.isPlanar, rhs.isPlanar);\r\n if (0 === diff) {\r\n diff = compareBooleans(this.hasNormals, rhs.hasNormals);\r\n if (0 === diff) {\r\n diff = this.params.compareForMerge(rhs.params);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n public equals(rhs: Key): boolean { return 0 === this.compare(rhs); }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"MeshBuilderMap.js","sourceRoot":"","sources":["../../../../../src/render/primitives/mesh/MeshBuilderMap.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 { compareBooleans, compareNumbers, Dictionary, Id64String } from \"@itwin/core-bentley\";\r\nimport { Range3d } from \"@itwin/core-geometry\";\r\nimport { Feature, FeatureTable } from \"@itwin/core-common\";\r\nimport { DisplayParams } from \"../../../common/render/primitives/DisplayParams\";\r\nimport { MeshPrimitiveType } from \"../../../common/render/primitives/MeshPrimitive\";\r\nimport { GeometryList } from \"../geometry/GeometryList\";\r\nimport { Geometry } from \"../geometry/GeometryPrimitives\";\r\nimport { PolyfacePrimitive } from \"../Polyface\";\r\nimport { GeometryOptions, ToleranceRatio } from \"../Primitives\";\r\nimport { StrokesPrimitive } from \"../Strokes\";\r\nimport { MeshBuilder, MeshEdgeCreationOptions } from \"./MeshBuilder\";\r\nimport { Mesh, MeshList } from \"./MeshPrimitives\";\r\n\r\n/** @internal */\r\nexport class MeshBuilderMap extends Dictionary<MeshBuilderMap.Key, MeshBuilder> {\r\n public readonly range: Range3d;\r\n public readonly vertexTolerance: number;\r\n public readonly facetAreaTolerance: number;\r\n public readonly tolerance: number;\r\n public readonly is2d: boolean;\r\n public readonly features?: FeatureTable;\r\n public readonly options: GeometryOptions;\r\n private readonly _isVolumeClassifier: boolean;\r\n private _keyOrder = 0;\r\n\r\n constructor(tolerance: number, range: Range3d, is2d: boolean, options: GeometryOptions, pickable: { isVolumeClassifier?: boolean, modelId?: Id64String } | undefined) {\r\n super((lhs: MeshBuilderMap.Key, rhs: MeshBuilderMap.Key) => lhs.compare(rhs));\r\n this.tolerance = tolerance;\r\n this.vertexTolerance = tolerance * ToleranceRatio.vertex;\r\n this.facetAreaTolerance = tolerance * ToleranceRatio.facetArea;\r\n this.range = range;\r\n this.is2d = is2d;\r\n this.options = options;\r\n this._isVolumeClassifier = pickable?.isVolumeClassifier ?? false;\r\n\r\n if (pickable)\r\n this.features = new FeatureTable(2048 * 1024, pickable.modelId);\r\n }\r\n\r\n public static createFromGeometries(geometries: GeometryList, tolerance: number, range: Range3d, is2d: boolean, options: GeometryOptions, pickable: { isVolumeClassifier?: boolean, modelId?: Id64String } | undefined): MeshBuilderMap {\r\n const map = new MeshBuilderMap(tolerance, range, is2d, options, pickable);\r\n\r\n for (const geom of geometries)\r\n map.loadGeometry(geom);\r\n\r\n return map;\r\n }\r\n\r\n public toMeshes(): MeshList {\r\n const meshes = new MeshList(this.features, this.range);\r\n for (const builder of this._values) {\r\n if (builder.mesh.points.length > 0)\r\n meshes.push(builder.mesh);\r\n }\r\n return meshes;\r\n }\r\n\r\n /**\r\n * extract polyfaces and strokes from geometry into MeshBuilder stored in builderMap\r\n * @param geom Geometry instance to extract polyfaces and strokes from\r\n * @param wantSurfacesOnly if true prevent strokes from being loaded into builders\r\n */\r\n public loadGeometry(geom: Geometry): void {\r\n this.loadPolyfacePrimitiveList(geom);\r\n\r\n if (!this.options.wantSurfacesOnly)\r\n this.loadStrokePrimitiveList(geom);\r\n }\r\n\r\n /**\r\n * extract polyface primitives from geometry in meshBuilder stored in builderMap\r\n * @param geom Geometry instance to extract polyfaces from\r\n */\r\n public loadPolyfacePrimitiveList(geom: Geometry): void {\r\n const polyfaces = geom.getPolyfaces(this.tolerance);\r\n\r\n if (polyfaces !== undefined)\r\n for (const polyface of polyfaces)\r\n this.loadIndexedPolyface(polyface, geom.feature);\r\n }\r\n\r\n /**\r\n * extract indexed polyfaces into meshBuilder stored in builderMap\r\n * @param polyface PolyfacePrimitive to extract indexed polyfaces from\r\n */\r\n public loadIndexedPolyface(polyface: PolyfacePrimitive, feature: Feature | undefined): void {\r\n const { indexedPolyface, displayParams, isPlanar } = polyface;\r\n const { pointCount, normalCount } = indexedPolyface;\r\n const { fillColor, isTextured } = displayParams;\r\n const textureMapping = displayParams.textureMapping;\r\n\r\n if (pointCount === 0)\r\n return;\r\n\r\n const builder = this.getBuilder(displayParams, MeshPrimitiveType.Mesh, normalCount > 0, isPlanar);\r\n const edgeOptions = new MeshEdgeCreationOptions(polyface.displayEdges && this.options.edges ? MeshEdgeCreationOptions.Type.DefaultEdges : MeshEdgeCreationOptions.Type.NoEdges);\r\n builder.addFromPolyface(indexedPolyface, { edgeOptions, includeParams: isTextured, fillColor: fillColor.tbgr, mappedTexture: textureMapping }, feature);\r\n }\r\n\r\n /**\r\n * extract stroke primitives from geometry in meshBuilder stored in builderMap\r\n * @param geom Geometry instance to extract strokes from\r\n */\r\n public loadStrokePrimitiveList(geom: Geometry): void {\r\n const strokes = geom.getStrokes(this.tolerance);\r\n\r\n if (undefined !== strokes)\r\n for (const stroke of strokes)\r\n this.loadStrokesPrimitive(stroke, geom.feature);\r\n }\r\n\r\n /**\r\n * extract strokes primitive into meshBuilder stored in builderMap\r\n * @param strokePrimitive StrokesPrimitive instance to extractfrom\r\n */\r\n public loadStrokesPrimitive(strokePrimitive: StrokesPrimitive, feature: Feature | undefined): void {\r\n const { displayParams, isDisjoint, isPlanar, strokes } = strokePrimitive;\r\n\r\n const type = isDisjoint ? MeshPrimitiveType.Point : MeshPrimitiveType.Polyline;\r\n const builder = this.getBuilder(displayParams, type, false, isPlanar);\r\n builder.addStrokePointLists(strokes, isDisjoint, displayParams.fillColor.tbgr, feature);\r\n }\r\n\r\n public getBuilder(displayParams: DisplayParams, type: MeshPrimitiveType, hasNormals: boolean, isPlanar: boolean): MeshBuilder {\r\n const { facetAreaTolerance, tolerance, is2d, range } = this;\r\n const key = this.getKey(displayParams, type, hasNormals, isPlanar);\r\n\r\n const quantizePositions = false; // ###TODO should this be configurable?\r\n return this.getBuilderFromKey(key, {\r\n displayParams,\r\n type,\r\n range,\r\n quantizePositions,\r\n is2d,\r\n isPlanar,\r\n tolerance,\r\n areaTolerance: facetAreaTolerance,\r\n features: this.features,\r\n isVolumeClassifier: this._isVolumeClassifier,\r\n });\r\n }\r\n\r\n public getKey(displayParams: DisplayParams, type: MeshPrimitiveType, hasNormals: boolean, isPlanar: boolean): MeshBuilderMap.Key {\r\n const key = new MeshBuilderMap.Key(displayParams, type, hasNormals, isPlanar);\r\n\r\n if (this.options.preserveOrder)\r\n key.order = ++this._keyOrder;\r\n\r\n return key;\r\n }\r\n\r\n /**\r\n * gets builder associated with key if defined, otherwise creates a new builder and sets that with key\r\n * @param key MeshBuilderMap.Key to associate with builder\r\n * @param props MeshBuilder.Props required to create builder if it does not already exist\r\n * @returns builder reference, changes will update instance stored in builderMap\r\n */\r\n public getBuilderFromKey(key: MeshBuilderMap.Key, props: MeshBuilder.Props): MeshBuilder {\r\n let builder = this.get(key);\r\n if (undefined === builder) {\r\n builder = MeshBuilder.create(props);\r\n this.set(key, builder);\r\n }\r\n return builder;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport namespace MeshBuilderMap { // eslint-disable-line no-redeclare\r\n export class Key {\r\n public order: number = 0;\r\n public readonly params: DisplayParams;\r\n public readonly type: MeshPrimitiveType;\r\n public readonly hasNormals: boolean;\r\n public readonly isPlanar: boolean;\r\n\r\n constructor(params: DisplayParams, type: MeshPrimitiveType, hasNormals: boolean, isPlanar: boolean) {\r\n this.params = params;\r\n this.type = type;\r\n this.hasNormals = hasNormals;\r\n this.isPlanar = isPlanar;\r\n }\r\n\r\n public static createFromMesh(mesh: Mesh): Key {\r\n return new Key(mesh.displayParams, mesh.type, mesh.normals.length !== 0, mesh.isPlanar);\r\n }\r\n\r\n public compare(rhs: Key): number {\r\n let diff = compareNumbers(this.order, rhs.order);\r\n if (0 === diff) {\r\n diff = compareNumbers(this.type, rhs.type);\r\n if (0 === diff) {\r\n diff = compareBooleans(this.isPlanar, rhs.isPlanar);\r\n if (0 === diff) {\r\n diff = compareBooleans(this.hasNormals, rhs.hasNormals);\r\n if (0 === diff) {\r\n diff = this.params.compareForMerge(rhs.params);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return diff;\r\n }\r\n\r\n public equals(rhs: Key): boolean { return 0 === this.compare(rhs); }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"GLTimer.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/GLTimer.ts"],"names":[],"mappings":"AAOA,OAAO,EAAiB,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAqClC;;;;;;;;;;;;;GAaG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,gBAAgB,CAAC,CAAwB;IAEjD,OAAO;WAQO,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI7C,IAAW,WAAW,IAAI,OAAO,CAAwC;IAEzE,IAAW,eAAe,CAAC,QAAQ,EAAE,qBAAqB,GAAG,SAAS,EAKrE;IAEM,cAAc,CAAC,KAAK,EAAE,MAAM;IAO5B,YAAY;IASZ,UAAU;IAWV,QAAQ;IA8Cf,OAAO,CAAC,yBAAyB;IAQjC,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,QAAQ;CAOjB"}
1
+ {"version":3,"file":"GLTimer.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/GLTimer.ts"],"names":[],"mappings":"AAOA,OAAO,EAAiB,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAsClC;;;;;;;;;;;;;GAaG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,gBAAgB,CAAC,CAAwB;IAEjD,OAAO;WAQO,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAI7C,IAAW,WAAW,IAAI,OAAO,CAAwC;IAEzE,IAAW,eAAe,CAAC,QAAQ,EAAE,qBAAqB,GAAG,SAAS,EAKrE;IAEM,cAAc,CAAC,KAAK,EAAE,MAAM;IAO5B,YAAY;IASZ,UAAU;IAWV,QAAQ;IA0Df,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,QAAQ;CAYjB"}
@@ -93,9 +93,11 @@ class GLTimer {
93
93
  this.cleanupAfterDisjointEvent(root);
94
94
  return;
95
95
  }
96
- // It takes more one or more frames for results to become available.
96
+ // It takes one or more frames for results to become available.
97
97
  // Only checking time for root since it will always be the last query completed.
98
- if (!this._extension.isResultAvailable(root.query)) {
98
+ // If there are any sibling queries then we will just check the last one.
99
+ const finalQuery = (undefined === root.siblingQueries ? root.query : root.siblingQueries[root.siblingQueries.length - 1]);
100
+ if (!this._extension.isResultAvailable(finalQuery)) {
99
101
  setTimeout(queryCallback, 0);
100
102
  return;
101
103
  }
@@ -103,6 +105,14 @@ class GLTimer {
103
105
  const time = this._extension.getResult(queryEntry.query);
104
106
  this._extension.deleteQuery(queryEntry.query);
105
107
  const result = { label: queryEntry.label, nanoseconds: time };
108
+ if (undefined !== queryEntry.siblingQueries) {
109
+ for (const sib of queryEntry.siblingQueries) {
110
+ const sibTime = this._extension.getResult(sib);
111
+ this._extension.deleteQuery(sib);
112
+ result.nanoseconds += sibTime;
113
+ }
114
+ queryEntry.siblingQueries = undefined;
115
+ }
106
116
  if (queryEntry.children === undefined)
107
117
  return result;
108
118
  result.children = [];
@@ -119,6 +129,11 @@ class GLTimer {
119
129
  }
120
130
  cleanupAfterDisjointEvent(queryEntry) {
121
131
  this._extension.deleteQuery(queryEntry.query);
132
+ if (undefined !== queryEntry.siblingQueries) {
133
+ for (const sib of queryEntry.siblingQueries)
134
+ this._extension.deleteQuery(sib);
135
+ queryEntry.siblingQueries = undefined;
136
+ }
122
137
  if (!queryEntry.children)
123
138
  return;
124
139
  for (const child of queryEntry.children)
@@ -139,8 +154,13 @@ class GLTimer {
139
154
  popQuery() {
140
155
  this._extension.endQuery();
141
156
  this._queryStack.pop();
142
- const activeQuery = this._queryStack[this._queryStack.length - 1];
143
- this._extension.beginQuery(activeQuery.query);
157
+ const lastStackIndex = this._queryStack.length - 1;
158
+ const activeQuery = this._queryStack[lastStackIndex];
159
+ if (undefined === activeQuery.siblingQueries)
160
+ activeQuery.siblingQueries = [];
161
+ const newQuery = this._extension.createQuery();
162
+ activeQuery.siblingQueries.push(newQuery);
163
+ this._extension.beginQuery(newQuery);
144
164
  }
145
165
  }
146
166
  exports.GLTimer = GLTimer;
@@ -1 +1 @@
1
- {"version":3,"file":"GLTimer.js","sourceRoot":"","sources":["../../../../src/render/webgl/GLTimer.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\nimport { BentleyStatus } from \"@itwin/core-bentley\";\r\nimport { IModelError } from \"@itwin/core-common\";\r\nimport { GLTimerResult, GLTimerResultCallback } from \"../RenderSystem\";\r\nimport { System } from \"./System\";\r\n\r\nclass DisjointTimerExtension {\r\n private _e: any; // EXT_disjoint_timer_query, not available in lib.dom.d.ts\r\n private _context: WebGL2RenderingContext;\r\n\r\n public constructor(system: System) {\r\n this._e = system.disjointTimerQuery;\r\n this._context = system.context;\r\n }\r\n\r\n public get isSupported(): boolean { return this._e !== undefined; }\r\n\r\n public didDisjointEventHappen(): boolean {\r\n return this._context.getParameter(this._e.GPU_DISJOINT_EXT);\r\n }\r\n\r\n public createQuery(): WebGLQuery { return this._context.createQuery() as WebGLQuery; }\r\n public deleteQuery(q: WebGLQuery) { this._context.deleteQuery(q); }\r\n\r\n public beginQuery(q: WebGLQuery) { this._context.beginQuery(this._e.TIME_ELAPSED_EXT, q); }\r\n public endQuery() { this._context.endQuery(this._e.TIME_ELAPSED_EXT); }\r\n\r\n public isResultAvailable(q: WebGLQuery): boolean {\r\n return this._context.getQueryParameter(q, this._context.QUERY_RESULT_AVAILABLE);\r\n }\r\n public getResult(q: WebGLQuery): number {\r\n return this._context.getQueryParameter(q, this._context.QUERY_RESULT);\r\n }\r\n}\r\n\r\ninterface QueryEntry {\r\n label: string;\r\n query: WebGLQuery;\r\n children?: QueryEntry[];\r\n}\r\n\r\n/** Record GPU hardware queries to profile independent of CPU.\r\n *\r\n * This is a wrapper around EXT_disjoint_timer_query. The extension should be available in the following browsers:\r\n * * Chrome 67 and later\r\n * * Chromium-based Edge\r\n * * Firefox (with webgl.enable-privileged-extensions set to true in about:config)\r\n *\r\n * EXT_disjoint_timer_query only supports one active query per context without nesting. This wrapper keeps an internal stack to make\r\n * nesting work.\r\n *\r\n * The extension API makes timestamps look like a better solution than disjoint timers, but they are not actually supported.\r\n * See https://bugs.chromium.org/p/chromium/issues/detail?id=595172\r\n * @internal\r\n */\r\nexport class GLTimer {\r\n private _extension: DisjointTimerExtension;\r\n private _queryStack: QueryEntry[];\r\n private _resultsCallback?: GLTimerResultCallback;\r\n\r\n private constructor(system: System) {\r\n this._extension = new DisjointTimerExtension(system);\r\n this._queryStack = [];\r\n this._resultsCallback = undefined;\r\n }\r\n\r\n // This class is necessarily a singleton per context because of the underlying extension it wraps.\r\n // System is expected to call create in its constructor.\r\n public static create(system: System): GLTimer {\r\n return new GLTimer(system);\r\n }\r\n\r\n public get isSupported(): boolean { return this._extension.isSupported; }\r\n\r\n public set resultsCallback(callback: GLTimerResultCallback | undefined) {\r\n if (this._queryStack.length !== 0)\r\n throw new IModelError(BentleyStatus.ERROR, \"Do not set resultsCallback when a frame is already being drawn\");\r\n\r\n this._resultsCallback = callback;\r\n }\r\n\r\n public beginOperation(label: string) {\r\n if (!this._resultsCallback)\r\n return;\r\n\r\n this.pushQuery(label);\r\n }\r\n\r\n public endOperation() {\r\n if (!this._resultsCallback)\r\n return;\r\n if (this._queryStack.length === 0)\r\n throw new IModelError(BentleyStatus.ERROR, \"Mismatched calls to beginOperation/endOperation\");\r\n\r\n this.popQuery();\r\n }\r\n\r\n public beginFrame() {\r\n if (!this._resultsCallback)\r\n return;\r\n if (this._queryStack.length !== 0)\r\n throw new IModelError(BentleyStatus.ERROR, \"Already recording timing for a frame\");\r\n\r\n const query = this._extension.createQuery();\r\n this._extension.beginQuery(query);\r\n this._queryStack.push({ label: \"Total\", query, children: [] });\r\n }\r\n\r\n public endFrame() {\r\n if (!this._resultsCallback)\r\n return;\r\n if (this._queryStack.length !== 1)\r\n throw new IModelError(BentleyStatus.ERROR, \"Missing at least one endOperation call\");\r\n\r\n this._extension.endQuery();\r\n const root = this._queryStack.pop()!;\r\n const userCallback = this._resultsCallback;\r\n\r\n const queryCallback = () => {\r\n if (this._extension.didDisjointEventHappen()) {\r\n // Have to throw away results for this frame after disjoint event occurs.\r\n this.cleanupAfterDisjointEvent(root);\r\n return;\r\n }\r\n\r\n // It takes more one or more frames for results to become available.\r\n // Only checking time for root since it will always be the last query completed.\r\n if (!this._extension.isResultAvailable(root.query)) {\r\n setTimeout(queryCallback, 0);\r\n return;\r\n }\r\n\r\n const processQueryEntry = (queryEntry: QueryEntry): GLTimerResult => {\r\n const time = this._extension.getResult(queryEntry.query);\r\n this._extension.deleteQuery(queryEntry.query);\r\n\r\n const result: GLTimerResult = { label: queryEntry.label, nanoseconds: time };\r\n if (queryEntry.children === undefined)\r\n return result;\r\n\r\n result.children = [];\r\n for (const child of queryEntry.children) {\r\n const childResult = processQueryEntry(child);\r\n result.children.push(childResult);\r\n result.nanoseconds += childResult.nanoseconds;\r\n }\r\n return result;\r\n };\r\n\r\n userCallback(processQueryEntry(root));\r\n };\r\n setTimeout(queryCallback, 0);\r\n }\r\n\r\n private cleanupAfterDisjointEvent(queryEntry: QueryEntry) {\r\n this._extension.deleteQuery(queryEntry.query);\r\n if (!queryEntry.children)\r\n return;\r\n for (const child of queryEntry.children)\r\n this.cleanupAfterDisjointEvent(child);\r\n }\r\n\r\n private pushQuery(label: string) {\r\n this._extension.endQuery();\r\n\r\n const query = this._extension.createQuery();\r\n this._extension.beginQuery(query);\r\n\r\n const activeQuery = this._queryStack[this._queryStack.length - 1];\r\n const queryEntry: QueryEntry = { label, query };\r\n this._queryStack.push(queryEntry);\r\n\r\n if (activeQuery.children === undefined)\r\n activeQuery.children = [queryEntry];\r\n else\r\n activeQuery.children.push(queryEntry);\r\n }\r\n\r\n private popQuery() {\r\n this._extension.endQuery();\r\n this._queryStack.pop();\r\n\r\n const activeQuery = this._queryStack[this._queryStack.length - 1];\r\n this._extension.beginQuery(activeQuery.query);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"GLTimer.js","sourceRoot":"","sources":["../../../../src/render/webgl/GLTimer.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\nimport { BentleyStatus } from \"@itwin/core-bentley\";\r\nimport { IModelError } from \"@itwin/core-common\";\r\nimport { GLTimerResult, GLTimerResultCallback } from \"../RenderSystem\";\r\nimport { System } from \"./System\";\r\n\r\nclass DisjointTimerExtension {\r\n private _e: any; // EXT_disjoint_timer_query, not available in lib.dom.d.ts\r\n private _context: WebGL2RenderingContext;\r\n\r\n public constructor(system: System) {\r\n this._e = system.disjointTimerQuery;\r\n this._context = system.context;\r\n }\r\n\r\n public get isSupported(): boolean { return this._e !== undefined; }\r\n\r\n public didDisjointEventHappen(): boolean {\r\n return this._context.getParameter(this._e.GPU_DISJOINT_EXT);\r\n }\r\n\r\n public createQuery(): WebGLQuery { return this._context.createQuery() as WebGLQuery; }\r\n public deleteQuery(q: WebGLQuery) { this._context.deleteQuery(q); }\r\n\r\n public beginQuery(q: WebGLQuery) { this._context.beginQuery(this._e.TIME_ELAPSED_EXT, q); }\r\n public endQuery() { this._context.endQuery(this._e.TIME_ELAPSED_EXT); }\r\n\r\n public isResultAvailable(q: WebGLQuery): boolean {\r\n return this._context.getQueryParameter(q, this._context.QUERY_RESULT_AVAILABLE);\r\n }\r\n public getResult(q: WebGLQuery): number {\r\n return this._context.getQueryParameter(q, this._context.QUERY_RESULT);\r\n }\r\n}\r\n\r\ninterface QueryEntry {\r\n label: string;\r\n query: WebGLQuery;\r\n siblingQueries?: WebGLQuery[]; // For when the main query is broken up into pieces by intermittent child queries.\r\n children?: QueryEntry[];\r\n}\r\n\r\n/** Record GPU hardware queries to profile independent of CPU.\r\n *\r\n * This is a wrapper around EXT_disjoint_timer_query. The extension should be available in the following browsers:\r\n * * Chrome 67 and later\r\n * * Chromium-based Edge\r\n * * Firefox (with webgl.enable-privileged-extensions set to true in about:config)\r\n *\r\n * EXT_disjoint_timer_query only supports one active query per context without nesting. This wrapper keeps an internal stack to make\r\n * nesting work.\r\n *\r\n * The extension API makes timestamps look like a better solution than disjoint timers, but they are not actually supported.\r\n * See https://bugs.chromium.org/p/chromium/issues/detail?id=595172\r\n * @internal\r\n */\r\nexport class GLTimer {\r\n private _extension: DisjointTimerExtension;\r\n private _queryStack: QueryEntry[];\r\n private _resultsCallback?: GLTimerResultCallback;\r\n\r\n private constructor(system: System) {\r\n this._extension = new DisjointTimerExtension(system);\r\n this._queryStack = [];\r\n this._resultsCallback = undefined;\r\n }\r\n\r\n // This class is necessarily a singleton per context because of the underlying extension it wraps.\r\n // System is expected to call create in its constructor.\r\n public static create(system: System): GLTimer {\r\n return new GLTimer(system);\r\n }\r\n\r\n public get isSupported(): boolean { return this._extension.isSupported; }\r\n\r\n public set resultsCallback(callback: GLTimerResultCallback | undefined) {\r\n if (this._queryStack.length !== 0)\r\n throw new IModelError(BentleyStatus.ERROR, \"Do not set resultsCallback when a frame is already being drawn\");\r\n\r\n this._resultsCallback = callback;\r\n }\r\n\r\n public beginOperation(label: string) {\r\n if (!this._resultsCallback)\r\n return;\r\n\r\n this.pushQuery(label);\r\n }\r\n\r\n public endOperation() {\r\n if (!this._resultsCallback)\r\n return;\r\n if (this._queryStack.length === 0)\r\n throw new IModelError(BentleyStatus.ERROR, \"Mismatched calls to beginOperation/endOperation\");\r\n\r\n this.popQuery();\r\n }\r\n\r\n public beginFrame() {\r\n if (!this._resultsCallback)\r\n return;\r\n if (this._queryStack.length !== 0)\r\n throw new IModelError(BentleyStatus.ERROR, \"Already recording timing for a frame\");\r\n\r\n const query = this._extension.createQuery();\r\n this._extension.beginQuery(query);\r\n this._queryStack.push({ label: \"Total\", query, children: [] });\r\n }\r\n\r\n public endFrame() {\r\n if (!this._resultsCallback)\r\n return;\r\n if (this._queryStack.length !== 1)\r\n throw new IModelError(BentleyStatus.ERROR, \"Missing at least one endOperation call\");\r\n\r\n this._extension.endQuery();\r\n const root = this._queryStack.pop()!;\r\n const userCallback = this._resultsCallback;\r\n\r\n const queryCallback = () => {\r\n if (this._extension.didDisjointEventHappen()) {\r\n // Have to throw away results for this frame after disjoint event occurs.\r\n this.cleanupAfterDisjointEvent(root);\r\n return;\r\n }\r\n\r\n // It takes one or more frames for results to become available.\r\n // Only checking time for root since it will always be the last query completed.\r\n // If there are any sibling queries then we will just check the last one.\r\n const finalQuery = (undefined === root.siblingQueries ? root.query : root.siblingQueries[root.siblingQueries.length-1]);\r\n if (!this._extension.isResultAvailable(finalQuery)) {\r\n setTimeout(queryCallback, 0);\r\n return;\r\n }\r\n\r\n const processQueryEntry = (queryEntry: QueryEntry): GLTimerResult => {\r\n const time = this._extension.getResult(queryEntry.query);\r\n this._extension.deleteQuery(queryEntry.query);\r\n\r\n const result: GLTimerResult = { label: queryEntry.label, nanoseconds: time };\r\n\r\n if (undefined !== queryEntry.siblingQueries) {\r\n for (const sib of queryEntry.siblingQueries) {\r\n const sibTime = this._extension.getResult(sib);\r\n this._extension.deleteQuery(sib);\r\n result.nanoseconds += sibTime;\r\n }\r\n queryEntry.siblingQueries = undefined;\r\n }\r\n\r\n if (queryEntry.children === undefined)\r\n return result;\r\n\r\n result.children = [];\r\n for (const child of queryEntry.children) {\r\n const childResult = processQueryEntry(child);\r\n result.children.push(childResult);\r\n result.nanoseconds += childResult.nanoseconds;\r\n }\r\n return result;\r\n };\r\n\r\n userCallback(processQueryEntry(root));\r\n };\r\n setTimeout(queryCallback, 0);\r\n }\r\n\r\n private cleanupAfterDisjointEvent(queryEntry: QueryEntry) {\r\n this._extension.deleteQuery(queryEntry.query);\r\n if (undefined !== queryEntry.siblingQueries) {\r\n for (const sib of queryEntry.siblingQueries)\r\n this._extension.deleteQuery(sib);\r\n queryEntry.siblingQueries = undefined;\r\n }\r\n if (!queryEntry.children)\r\n return;\r\n for (const child of queryEntry.children)\r\n this.cleanupAfterDisjointEvent(child);\r\n }\r\n\r\n private pushQuery(label: string) {\r\n this._extension.endQuery();\r\n\r\n const query = this._extension.createQuery();\r\n this._extension.beginQuery(query);\r\n\r\n const activeQuery = this._queryStack[this._queryStack.length - 1];\r\n const queryEntry: QueryEntry = { label, query };\r\n this._queryStack.push(queryEntry);\r\n\r\n if (activeQuery.children === undefined)\r\n activeQuery.children = [queryEntry];\r\n else\r\n activeQuery.children.push(queryEntry);\r\n }\r\n\r\n private popQuery() {\r\n this._extension.endQuery();\r\n this._queryStack.pop();\r\n\r\n const lastStackIndex = this._queryStack.length - 1;\r\n const activeQuery = this._queryStack[lastStackIndex];\r\n if (undefined === activeQuery.siblingQueries)\r\n activeQuery.siblingQueries = [];\r\n const newQuery = this._extension.createQuery();\r\n activeQuery.siblingQueries.push(newQuery);\r\n this._extension.beginQuery(newQuery);\r\n }\r\n}\r\n"]}
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { Id64String } from "@itwin/core-bentley";
5
5
  import { ElementAlignedBox3d, FeatureAppearanceProvider, RenderFeatureTable, ViewFlags } from "@itwin/core-common";
6
- import { Transform } from "@itwin/core-geometry";
6
+ import { Range3d, Transform } from "@itwin/core-geometry";
7
7
  import { IModelConnection } from "../../IModelConnection";
8
8
  import { FeatureSymbology } from "../FeatureSymbology";
9
9
  import { GraphicBranch, GraphicBranchFrustum, GraphicBranchOptions } from "../GraphicBranch";
@@ -39,6 +39,7 @@ export declare class GraphicOwner extends Graphic {
39
39
  dispose(): void;
40
40
  disposeGraphic(): void;
41
41
  collectStatistics(stats: RenderMemory.Statistics): void;
42
+ unionRange(range: Range3d): void;
42
43
  addCommands(commands: RenderCommands): void;
43
44
  get isPickable(): boolean;
44
45
  addHiliteCommands(commands: RenderCommands, pass: RenderPass): void;
@@ -103,6 +104,7 @@ export declare class Batch extends Graphic {
103
104
  get isDisposed(): boolean;
104
105
  dispose(): void;
105
106
  collectStatistics(stats: RenderMemory.Statistics): void;
107
+ unionRange(range: Range3d): void;
106
108
  addCommands(commands: RenderCommands): void;
107
109
  get isPickable(): boolean;
108
110
  getThematicSensors(target: Target): ThematicSensors;
@@ -128,6 +130,7 @@ export declare class Branch extends Graphic {
128
130
  dispose(): void;
129
131
  get isPickable(): boolean;
130
132
  collectStatistics(stats: RenderMemory.Statistics): void;
133
+ unionRange(range: Range3d): void;
131
134
  private shouldAddCommands;
132
135
  addCommands(commands: RenderCommands): void;
133
136
  addHiliteCommands(commands: RenderCommands, pass: RenderPass): void;
@@ -141,6 +144,7 @@ export declare class AnimationTransformBranch extends Graphic {
141
144
  get isDisposed(): boolean;
142
145
  get isPickable(): boolean;
143
146
  collectStatistics(stats: RenderMemory.Statistics): void;
147
+ unionRange(range: Range3d): void;
144
148
  addCommands(commands: RenderCommands): void;
145
149
  addHiliteCommands(commands: RenderCommands, pass: RenderPass): void;
146
150
  }
@@ -159,5 +163,6 @@ export declare class GraphicsArray extends Graphic {
159
163
  addCommands(commands: RenderCommands): void;
160
164
  addHiliteCommands(commands: RenderCommands, pass: RenderPass): void;
161
165
  collectStatistics(stats: RenderMemory.Statistics): void;
166
+ unionRange(range: Range3d): void;
162
167
  }
163
168
  //# sourceMappingURL=Graphic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Graphic.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/Graphic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Graphic.d.ts","sourceRoot":"","sources":["../../../../src/render/webgl/Graphic.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,9 @@ class GraphicOwner extends Graphic {
40
40
  collectStatistics(stats) {
41
41
  this.graphic.collectStatistics(stats);
42
42
  }
43
+ unionRange(range) {
44
+ this.graphic.unionRange(range);
45
+ }
43
46
  addCommands(commands) {
44
47
  this._graphic.addCommands(commands);
45
48
  }
@@ -196,6 +199,9 @@ class Batch extends Graphic {
196
199
  stats.addFeatureTable(this.featureTable.byteLength);
197
200
  this.perTargetData.collectStatistics(stats);
198
201
  }
202
+ unionRange(range) {
203
+ range.extendRange(this.range);
204
+ }
199
205
  addCommands(commands) {
200
206
  commands.addBatch(this);
201
207
  }
@@ -257,6 +263,13 @@ class Branch extends Graphic {
257
263
  collectStatistics(stats) {
258
264
  this.branch.collectStatistics(stats);
259
265
  }
266
+ unionRange(range) {
267
+ const thisRange = new core_geometry_1.Range3d();
268
+ for (const graphic of this.branch.entries)
269
+ graphic.unionRange(thisRange);
270
+ this.localToWorldTransform.multiplyRange(thisRange, thisRange);
271
+ range.extendRange(thisRange);
272
+ }
260
273
  shouldAddCommands(commands) {
261
274
  const group = commands.target.currentBranch.groupNodeId;
262
275
  if (undefined !== group && undefined !== this.branch.groupNodeId && this.branch.groupNodeId !== group)
@@ -294,6 +307,9 @@ class AnimationTransformBranch extends Graphic {
294
307
  collectStatistics(stats) {
295
308
  this.graphic.collectStatistics(stats);
296
309
  }
310
+ unionRange(range) {
311
+ this.graphic.unionRange(range);
312
+ }
297
313
  addCommands(commands) {
298
314
  commands.target.currentAnimationTransformNodeId = this.nodeId;
299
315
  this.graphic.addCommands(commands);
@@ -353,6 +369,10 @@ class GraphicsArray extends Graphic {
353
369
  for (const graphic of this.graphics)
354
370
  graphic.collectStatistics(stats);
355
371
  }
372
+ unionRange(range) {
373
+ for (const graphic of this.graphics)
374
+ graphic.unionRange(range);
375
+ }
356
376
  }
357
377
  exports.GraphicsArray = GraphicsArray;
358
378
  //# sourceMappingURL=Graphic.js.map