@arcgis/core 5.2.0-next.86 → 5.2.0-next.88

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 (691) hide show
  1. package/arcade/Dictionary.js +1 -1
  2. package/arcade/Feature.js +1 -1
  3. package/arcade/ImmutablePointArray.js +1 -1
  4. package/arcade/arcadeAsyncRuntime.js +1 -1
  5. package/arcade/arcadeCompiler.js +1 -1
  6. package/arcade/arcadeRuntime.js +1 -1
  7. package/arcade/containerUtils.js +1 -1
  8. package/arcade/debug.js +1 -1
  9. package/arcade/deepClone.js +1 -1
  10. package/arcade/featureset/actions/SpatialFilter.js +1 -1
  11. package/arcade/featureset/support/FeatureSet.js +1 -1
  12. package/arcade/functions/centroid.js +1 -1
  13. package/arcade/functions/date.js +1 -1
  14. package/arcade/functions/feature.js +1 -1
  15. package/arcade/functions/featuresetbase.js +1 -1
  16. package/arcade/functions/featuresetgeom.js +1 -1
  17. package/arcade/functions/featuresetstats.js +1 -1
  18. package/arcade/functions/featuresetstring.js +1 -1
  19. package/arcade/functions/fieldStats.js +1 -1
  20. package/arcade/functions/geomasync.js +1 -1
  21. package/arcade/functions/geometry.js +1 -1
  22. package/arcade/functions/geomsync.js +1 -1
  23. package/arcade/functions/knowledgegraph.js +1 -1
  24. package/arcade/functions/maths.js +1 -1
  25. package/arcade/functions/stats.js +1 -1
  26. package/arcade/functions/string.js +1 -1
  27. package/arcade/functions/track.js +1 -1
  28. package/arcade/geometry/adapters/accessor.js +2 -0
  29. package/arcade/geometry/adapters/dehydrated.js +2 -0
  30. package/arcade/geometry/adapters/gx.js +2 -0
  31. package/arcade/geometry/adapters/json.js +2 -0
  32. package/arcade/geometry/adapters/optimized.js +2 -0
  33. package/arcade/geometry/adapters/tuple.js +2 -0
  34. package/arcade/geometry/adapters/utils.js +2 -0
  35. package/arcade/geometry/arrayOfPointsConversions.js +2 -0
  36. package/arcade/geometry/constructors.js +1 -1
  37. package/arcade/geometry/functions.js +1 -1
  38. package/arcade/geometry/isSelfIntersecting.js +2 -0
  39. package/arcade/geometry/nearestCoordinate.js +2 -0
  40. package/arcade/geometry/nearestVertex.js +1 -1
  41. package/arcade/geometry/operators.js +1 -1
  42. package/arcade/geometry/operatorsWorker.js +1 -1
  43. package/arcade/geometry/rotate.js +1 -1
  44. package/arcade/geometry.js +2 -0
  45. package/arcade/languageUtils.js +1 -1
  46. package/arcade.js +1 -1
  47. package/arcgisGlobal.d.ts +1 -0
  48. package/assets/esri/core/workers/RemoteClient.js +1 -1
  49. package/assets/esri/core/workers/chunks/{0b8c9657975388f1e4c8.js → 00181785a180e934bf7c.js} +1 -1
  50. package/assets/esri/core/workers/chunks/{01e648b258efa6408070.js → 0336f4f8498a22347720.js} +1 -1
  51. package/assets/esri/core/workers/chunks/0439d4f4dfd6e78be97e.js +1 -0
  52. package/assets/esri/core/workers/chunks/05393b23ab24126d4236.js +1 -0
  53. package/assets/esri/core/workers/chunks/08263c07d92c48806834.js +1 -0
  54. package/assets/esri/core/workers/chunks/09e01fd1c199be0c8e03.js +1 -0
  55. package/assets/esri/core/workers/chunks/{12d6d73ca1fa55640a4f.js → 0b4a7209b99227a842ad.js} +1 -1
  56. package/assets/esri/core/workers/chunks/{073224c6ac77dc9e97af.js → 0b7860a3f18d252b774a.js} +1 -1
  57. package/assets/esri/core/workers/chunks/0d95f72e1c07ab867d21.js +1 -0
  58. package/assets/esri/core/workers/chunks/0dbbac7a2378728571a7.js +1 -0
  59. package/assets/esri/core/workers/chunks/0f15468ffefd3e9a17b8.js +29 -0
  60. package/assets/esri/core/workers/chunks/{3aeb934ebdab1d8c4608.js → 12a3b55195ce3244259d.js} +1 -1
  61. package/assets/esri/core/workers/chunks/13e92f6a9573a2818fb7.js +1 -0
  62. package/assets/esri/core/workers/chunks/19aa4072764937743bd8.js +1 -0
  63. package/assets/esri/core/workers/chunks/19e93d4d37018e3ee849.js +1 -0
  64. package/assets/esri/core/workers/chunks/{911f3a1b8dd4bc5c9782.js → 1bf5c0a4bc5a960a3fa2.js} +1 -1
  65. package/assets/esri/core/workers/chunks/1c378d489c5402888f76.js +1 -0
  66. package/assets/esri/core/workers/chunks/1d1e8d8b1fcf2d9f3dfc.js +1 -0
  67. package/assets/esri/core/workers/chunks/{e5c8f9fef88ca33624e9.js → 1e087fb13b7b0a5d6fec.js} +1 -1
  68. package/assets/esri/core/workers/chunks/1e192ac0533a5c0b5a7a.js +1 -0
  69. package/assets/esri/core/workers/chunks/1f9d6180a96d557838e9.js +1 -0
  70. package/assets/esri/core/workers/chunks/1fe077f57a087c0e9119.js +1 -0
  71. package/assets/esri/core/workers/chunks/212222b64039d436b9a6.js +1 -0
  72. package/assets/esri/core/workers/chunks/22c94f9a69b2157f8dbd.js +1 -0
  73. package/assets/esri/core/workers/chunks/25a2e02677a74834c8b5.js +1 -0
  74. package/assets/esri/core/workers/chunks/26ecc841396e5e719b6a.js +1 -0
  75. package/assets/esri/core/workers/chunks/{fcf7299e2ee904ab9882.js → 2724900f7992a79fc442.js} +1 -1
  76. package/assets/esri/core/workers/chunks/27c0bed59626c7f64125.js +1 -0
  77. package/assets/esri/core/workers/chunks/2bc3e7f394386fa75447.js +1 -0
  78. package/assets/esri/core/workers/chunks/2c9783e3b44986e86797.js +1 -0
  79. package/assets/esri/core/workers/chunks/2ceb07b125c84b51f02a.js +1 -0
  80. package/assets/esri/core/workers/chunks/2cf2f2842c19be84ab4d.js +1 -0
  81. package/assets/esri/core/workers/chunks/2d07d5a9ec67c39ef10c.js +1 -0
  82. package/assets/esri/core/workers/chunks/{a7c715648a07ed70b122.js → 2ec44ebc48beeba11201.js} +1 -1
  83. package/assets/esri/core/workers/chunks/2f2d699b072472fa710e.js +1 -0
  84. package/assets/esri/core/workers/chunks/2f3bbc1f7d4abbbeec2f.js +1 -0
  85. package/assets/esri/core/workers/chunks/304a36e862947fdb05c0.js +1 -0
  86. package/assets/esri/core/workers/chunks/30af0f7c4cfa541c9efd.js +1 -0
  87. package/assets/esri/core/workers/chunks/32f11b4aeae1ef00e466.js +1 -0
  88. package/assets/esri/core/workers/chunks/35d3e60d15294f268992.js +1 -0
  89. package/assets/esri/core/workers/chunks/37a2be4380796f14fe4e.js +1 -0
  90. package/assets/esri/core/workers/chunks/37adb55d9f83faad1712.js +1 -0
  91. package/assets/esri/core/workers/chunks/3869dca884d7ca6488f5.js +1 -0
  92. package/assets/esri/core/workers/chunks/3a9c6f58a1a065c14017.js +1 -0
  93. package/assets/esri/core/workers/chunks/3b552afffaa78bf4fe18.js +1 -0
  94. package/assets/esri/core/workers/chunks/{fe06cc2f90b2d551e4c1.js → 3bbd2d4a19c3b7ad82e4.js} +1 -1
  95. package/assets/esri/core/workers/chunks/3de07326da4c47cd2aab.js +1 -0
  96. package/assets/esri/core/workers/chunks/3f5234120d3a14186c1c.js +1 -0
  97. package/assets/esri/core/workers/chunks/414093fa4957d17bf551.js +1 -0
  98. package/assets/esri/core/workers/chunks/{dbd6bbd3e834ff9d220e.js → 41cf6163758d28fb1968.js} +1 -1
  99. package/assets/esri/core/workers/chunks/466bb1b69aabaeabad6a.js +1 -0
  100. package/assets/esri/core/workers/chunks/47e60b2acec18ef37b6c.js +1 -0
  101. package/assets/esri/core/workers/chunks/4849849fc8330d05a8e6.js +1 -0
  102. package/assets/esri/core/workers/chunks/497c5a9c95e9a89ac217.js +1 -0
  103. package/assets/esri/core/workers/chunks/49d36e54644dc2966128.js +1 -0
  104. package/assets/esri/core/workers/chunks/4aefe6fd4d725a107758.js +1 -0
  105. package/assets/esri/core/workers/chunks/4b6f433022a6822706cb.js +1 -0
  106. package/assets/esri/core/workers/chunks/4d4ebb4e4d83c1123b63.js +1 -0
  107. package/assets/esri/core/workers/chunks/4ee99e654dad6f09abee.js +1 -0
  108. package/assets/esri/core/workers/chunks/4f0804429d8989aa4c51.js +1 -0
  109. package/assets/esri/core/workers/chunks/50525b617ef78086d3c7.js +1 -0
  110. package/assets/esri/core/workers/chunks/5235b9c21ac4156c2375.js +1 -0
  111. package/assets/esri/core/workers/chunks/52422500ca3d6cf2e596.js +1 -0
  112. package/assets/esri/core/workers/chunks/527b87fddf33bb5d519e.js +1 -0
  113. package/assets/esri/core/workers/chunks/55572cefc752b755cf0a.js +1 -0
  114. package/assets/esri/core/workers/chunks/{a4bae2396fae48b57047.js → 595edbc1e9bba47d5676.js} +1 -1
  115. package/assets/esri/core/workers/chunks/59cf23cc8f91b5bea31a.js +1 -0
  116. package/assets/esri/core/workers/chunks/5af16937904c06fb06f6.js +1 -0
  117. package/assets/esri/core/workers/chunks/5d7a5aa608ed6192b016.js +1 -0
  118. package/assets/esri/core/workers/chunks/5d9c92c4e60a4696fdad.js +1 -0
  119. package/assets/esri/core/workers/chunks/5ed7bc9e6cb7cdee92e2.js +1 -0
  120. package/assets/esri/core/workers/chunks/{272c8ccdbd3dcc14e99b.js → 5ed89c862eee1345e3af.js} +1 -1
  121. package/assets/esri/core/workers/chunks/5fbd7d8d8896a224fff3.js +1 -0
  122. package/assets/esri/core/workers/chunks/64ce2d060ae7cdd412cf.js +1 -0
  123. package/assets/esri/core/workers/chunks/65f4ca7201e7267bfc81.js +1 -0
  124. package/assets/esri/core/workers/chunks/67efdd296007a809586c.js +1 -0
  125. package/assets/esri/core/workers/chunks/691434d4c6a38e63d819.js +1 -0
  126. package/assets/esri/core/workers/chunks/{ba67aaa08e4f11e1140a.js → 696cb3bf167327d5b0b9.js} +1 -1
  127. package/assets/esri/core/workers/chunks/69700ed16727ed0c4e3a.js +1 -0
  128. package/assets/esri/core/workers/chunks/6a2d890640b2cd6c5ccb.js +1 -0
  129. package/assets/esri/core/workers/chunks/6a4f007f87d9f2a6fbc4.js +1 -0
  130. package/assets/esri/core/workers/chunks/{7343a44a2382a1d68497.js → 6b9dbf43c0659e55c539.js} +1 -1
  131. package/assets/esri/core/workers/chunks/6de5c6af62776e1b9776.js +1 -0
  132. package/assets/esri/core/workers/chunks/70dc25f721c0ac5f3660.js +1 -0
  133. package/assets/esri/core/workers/chunks/71308dca3fd05687e7bd.js +1 -0
  134. package/assets/esri/core/workers/chunks/75bddfe2be64379db8fd.js +1 -0
  135. package/assets/esri/core/workers/chunks/78085f804969c9282700.js +1 -0
  136. package/assets/esri/core/workers/chunks/7aa9b61ca9b66f30449f.js +1 -0
  137. package/assets/esri/core/workers/chunks/7c1f989ee3d13dfe7ebd.js +1 -0
  138. package/assets/esri/core/workers/chunks/7c56446184abcd14678b.js +1 -0
  139. package/assets/esri/core/workers/chunks/7ce9c84f90e9dd1deb38.js +1 -0
  140. package/assets/esri/core/workers/chunks/7f55a150e4da02786311.js +1 -0
  141. package/assets/esri/core/workers/chunks/7fc3231768ce79e375ae.js +1 -0
  142. package/assets/esri/core/workers/chunks/7febb434f2de2436435f.js +1 -0
  143. package/assets/esri/core/workers/chunks/847b02d188ece9b563ad.js +1 -0
  144. package/assets/esri/core/workers/chunks/903c7bd079888f65fef1.js +1 -0
  145. package/assets/esri/core/workers/chunks/{bdafd4f03585351cecc3.js → 909a85cb6e0e9a3c8567.js} +1 -1
  146. package/assets/esri/core/workers/chunks/9226205850e35b7fc610.js +1 -0
  147. package/assets/esri/core/workers/chunks/922c24b9bb68f4201b03.js +1 -0
  148. package/assets/esri/core/workers/chunks/9407db0584c730591161.js +1 -0
  149. package/assets/esri/core/workers/chunks/9474c913e53f69679197.js +1 -0
  150. package/assets/esri/core/workers/chunks/94ddfe165ac25aef8229.js +1 -0
  151. package/assets/esri/core/workers/chunks/{75a2c43311f5f9058f62.js → 94f62ff81cc6fb83e73f.js} +1 -1
  152. package/assets/esri/core/workers/chunks/95ccac3734ac70387b03.js +1 -0
  153. package/assets/esri/core/workers/chunks/97c7dfd29ad4c2966cb4.js +1 -0
  154. package/assets/esri/core/workers/chunks/{1354b8442c2c501238f1.js → 986c5024f22bbfc49aba.js} +1 -1
  155. package/assets/esri/core/workers/chunks/9b81bd62a2c72f592db1.js +1 -0
  156. package/assets/esri/core/workers/chunks/{62596065747abce1964d.js → 9b8e33985310f281f084.js} +1 -1
  157. package/assets/esri/core/workers/chunks/9c7fc1c97125ea2a7b7e.js +1 -0
  158. package/assets/esri/core/workers/chunks/9e2b3754a76e0dd4a94a.js +1 -0
  159. package/assets/esri/core/workers/chunks/9eb3e6800f5034f1593f.js +1 -0
  160. package/assets/esri/core/workers/chunks/a0300fac6a06e7d89a52.js +1 -0
  161. package/assets/esri/core/workers/chunks/a03e7333e3328036f478.js +1 -0
  162. package/assets/esri/core/workers/chunks/a0565137027c83108953.js +1 -0
  163. package/assets/esri/core/workers/chunks/a3b403f8acb90af19adb.js +1 -0
  164. package/assets/esri/core/workers/chunks/a4596f028758649da099.js +1 -0
  165. package/assets/esri/core/workers/chunks/a46ac0be9aabc4cfedc7.js +1 -0
  166. package/assets/esri/core/workers/chunks/a4a22149077c7780481c.js +1 -0
  167. package/assets/esri/core/workers/chunks/a6ab627e965fe7e5bd52.js +1 -0
  168. package/assets/esri/core/workers/chunks/a7954ad55a241af9064f.js +1 -0
  169. package/assets/esri/core/workers/chunks/a8b878c12cb1a6ea012b.js +1 -0
  170. package/assets/esri/core/workers/chunks/{ec0803cfa5051c4d300d.js → aa0ef4493a7e9bed159f.js} +1 -1
  171. package/assets/esri/core/workers/chunks/aa8ab28e0c1ae3b55ac0.js +1 -0
  172. package/assets/esri/core/workers/chunks/ab9927a32350063cb5f0.js +1 -0
  173. package/assets/esri/core/workers/chunks/adc2620cbe735532004d.js +1 -0
  174. package/assets/esri/core/workers/chunks/add834f867900a7091d2.js +1 -0
  175. package/assets/esri/core/workers/chunks/{bbf4c2ee4d56bb0f1a81.js → afa6b74d9ca9ed0154af.js} +1 -1
  176. package/assets/esri/core/workers/chunks/b0e25ccb5a1e57a82628.js +1 -0
  177. package/assets/esri/core/workers/chunks/b17a9853250ab626d58d.js +1 -0
  178. package/assets/esri/core/workers/chunks/b19cff0e43fab2632660.js +1 -0
  179. package/assets/esri/core/workers/chunks/b2e2234fdf8e05bc3312.js +1 -0
  180. package/assets/esri/core/workers/chunks/b6063d1755def00d4889.js +1 -0
  181. package/assets/esri/core/workers/chunks/{7c3d46201b11a45f79d0.js → b6f67302d0d5d57add66.js} +74 -107
  182. package/assets/esri/core/workers/chunks/bb56ab53c5a10c9518a6.js +1 -0
  183. package/assets/esri/core/workers/chunks/bd2602195e265f8fdb15.js +1 -0
  184. package/assets/esri/core/workers/chunks/{f762f0f6c83748d8e328.js → bee411f08e2a9499f8f5.js} +1 -1
  185. package/assets/esri/core/workers/chunks/bf357afbabaa8dec4d75.js +1 -0
  186. package/assets/esri/core/workers/chunks/bf7875fda48b15271a10.js +1 -0
  187. package/assets/esri/core/workers/chunks/bfa59005a9b191d18546.js +1 -0
  188. package/assets/esri/core/workers/chunks/bfb8fc6b940bd5510e29.js +1 -0
  189. package/assets/esri/core/workers/chunks/{b311658b8a223efe35d6.js → c0e073a77484b0dfd383.js} +1 -1
  190. package/assets/esri/core/workers/chunks/c13aa45ccd5efb662f88.js +1 -0
  191. package/assets/esri/core/workers/chunks/c176df477bbbbc9c6922.js +1 -0
  192. package/assets/esri/core/workers/chunks/c35553d07ad169910742.js +1 -0
  193. package/assets/esri/core/workers/chunks/c4f582dec07895d3bb93.js +1 -0
  194. package/assets/esri/core/workers/chunks/c4fef90cf08bbe4f0bb5.js +1 -0
  195. package/assets/esri/core/workers/chunks/c5c2fed38e0ccf84f1fa.js +1 -0
  196. package/assets/esri/core/workers/chunks/c80277a313205853a857.js +1 -0
  197. package/assets/esri/core/workers/chunks/c91042f8bf886056a29c.js +1 -0
  198. package/assets/esri/core/workers/chunks/ca204c110438f7315790.js +1 -0
  199. package/assets/esri/core/workers/chunks/ca36d85a47179d95f2fc.js +1 -0
  200. package/assets/esri/core/workers/chunks/cb6fb04fe5c8d90d4196.js +1 -0
  201. package/assets/esri/core/workers/chunks/ccaeabc3be07f3c96f50.js +1 -0
  202. package/assets/esri/core/workers/chunks/{85f459297b0214141d43.js → cd02a6078443b8f63927.js} +1 -1
  203. package/assets/esri/core/workers/chunks/{e64ccdb8328eb6514e59.js → cd8b3c2fc27c239f9954.js} +1 -1
  204. package/assets/esri/core/workers/chunks/{3a36c132ceddef3d15c8.js → cdbcc4cd9145dd93db49.js} +1 -1
  205. package/assets/esri/core/workers/chunks/{e90feee1756a2209f93f.js → ce9fe1a89b474f9e7ee7.js} +1 -1
  206. package/assets/esri/core/workers/chunks/d04a01dc1b4947478264.js +1 -0
  207. package/assets/esri/core/workers/chunks/d0cf9ff48f051adbd455.js +1 -0
  208. package/assets/esri/core/workers/chunks/d119671a32a050517cca.js +1 -0
  209. package/assets/esri/core/workers/chunks/d26be8313526ecea9c68.js +1 -0
  210. package/assets/esri/core/workers/chunks/d270b49c037085503016.js +1 -0
  211. package/assets/esri/core/workers/chunks/{f5eee6e548bb24b5a003.js → d30a7fc8dab4ebb8893b.js} +1 -1
  212. package/assets/esri/core/workers/chunks/d344c3fd9f6b113bbcd7.js +1 -0
  213. package/assets/esri/core/workers/chunks/d36bbda9b7261534568f.js +1 -0
  214. package/assets/esri/core/workers/chunks/d4b0012ae1d3b8a9ba01.js +1 -0
  215. package/assets/esri/core/workers/chunks/d6b87134e0d120c68d2f.js +1 -0
  216. package/assets/esri/core/workers/chunks/d6f7aa280f1bd201d4ef.js +1 -0
  217. package/assets/esri/core/workers/chunks/da9aacdb0b4a04f42fb8.js +1 -0
  218. package/assets/esri/core/workers/chunks/daf7b647bd960d8bad56.js +1 -0
  219. package/assets/esri/core/workers/chunks/{10ac92dcd3738ec23dfb.js → db04c1bad40d068306ba.js} +1 -1
  220. package/assets/esri/core/workers/chunks/{3427f0c026301bcf7272.js → db180f8d25471cfa48af.js} +1 -1
  221. package/assets/esri/core/workers/chunks/db4c9a9103e979292948.js +1 -0
  222. package/assets/esri/core/workers/chunks/dceaa6b68eee090073b1.js +1 -0
  223. package/assets/esri/core/workers/chunks/ddf284648a73b6993737.js +1 -0
  224. package/assets/esri/core/workers/chunks/dfbe0efe453587ec5eb2.js +1 -0
  225. package/assets/esri/core/workers/chunks/e1682e94cc714197ebb4.js +1 -0
  226. package/assets/esri/core/workers/chunks/e2576c37cf13dc421f69.js +1 -0
  227. package/assets/esri/core/workers/chunks/e32a14770e036fce79d9.js +1 -0
  228. package/assets/esri/core/workers/chunks/e370a3337b3c90240e73.js +1 -0
  229. package/assets/esri/core/workers/chunks/e39bccc000c768120a32.js +1 -0
  230. package/assets/esri/core/workers/chunks/e40e08029325f43452d0.js +1 -0
  231. package/assets/esri/core/workers/chunks/{0d7d54e74b5639a0be6e.js → e707534a700a2de687ca.js} +1 -1
  232. package/assets/esri/core/workers/chunks/e823c9ccb7bc348d8824.js +1 -0
  233. package/assets/esri/core/workers/chunks/e88eee4c2fc4229c2a8b.js +1 -0
  234. package/assets/esri/core/workers/chunks/e9f29019aa78f07ace66.js +1 -0
  235. package/assets/esri/core/workers/chunks/ea75c23c44452f45a949.js +1 -0
  236. package/assets/esri/core/workers/chunks/ea91c57a0b31f3f65ee5.js +1 -0
  237. package/assets/esri/core/workers/chunks/eacf216dcd6397c7bd7f.js +1 -0
  238. package/assets/esri/core/workers/chunks/ee77999df3785468b2b6.js +1 -0
  239. package/assets/esri/core/workers/chunks/ef851a2cff76fd211c07.js +1 -0
  240. package/assets/esri/core/workers/chunks/eff359210893239ecec3.js +1 -0
  241. package/assets/esri/core/workers/chunks/f106cc7f559856f69b9f.js +1 -0
  242. package/assets/esri/core/workers/chunks/f210cd8afb86b6eaf7a2.js +1 -0
  243. package/assets/esri/core/workers/chunks/f247f3c5148fa0237a7c.js +1 -0
  244. package/assets/esri/core/workers/chunks/f250a7aa571889c5ad4b.js +1 -0
  245. package/assets/esri/core/workers/chunks/{a26dc2647a15b830390e.js → f253875feb11883deb84.js} +1 -1
  246. package/assets/esri/core/workers/chunks/f31330d628d7e741bf5b.js +1 -0
  247. package/assets/esri/core/workers/chunks/f3d57c5b9dffd12e45b4.js +1 -0
  248. package/assets/esri/core/workers/chunks/f43ae1c2f89e1c4396cc.js +1 -0
  249. package/assets/esri/core/workers/chunks/f60ed579981913d44675.js +1 -0
  250. package/assets/esri/core/workers/chunks/{147d1e7e2852a4197e5f.js → f665fb4c5633e0a459d8.js} +1 -1
  251. package/assets/esri/core/workers/chunks/f66e597e524b26e61cd3.js +1 -0
  252. package/assets/esri/core/workers/chunks/{bec140a69cfdb0519680.js → f74c7cbe4bd12f73ae90.js} +1 -1
  253. package/assets/esri/core/workers/chunks/{e6f6b38eda34708d61c5.js → f7f2102b16d201e5f531.js} +1 -1
  254. package/assets/esri/core/workers/chunks/f82ae237452b97cfc024.js +1 -0
  255. package/assets/esri/core/workers/chunks/f8f7b86bbd62106bc3d4.js +1 -0
  256. package/assets/esri/core/workers/chunks/f9a4387f850d85c44ca5.js +1 -0
  257. package/assets/esri/core/workers/chunks/fbc7576ed12964059da6.js +1 -0
  258. package/assets/esri/core/workers/chunks/fc4a5996fc03f6c32030.js +1 -0
  259. package/assets/esri/core/workers/chunks/fdd0e6d9927d3c43b0d3.js +1 -0
  260. package/assets/esri/core/workers/chunks/fddcb8be714ad18ad0c8.js +1 -0
  261. package/assets/esri/core/workers/chunks/{baa46edd87e97f922128.js → ffe749d790320dddfa74.js} +1 -1
  262. package/assets/esri/themes/base/widgets/_BuildingDisciplinesTree.scss +1 -1
  263. package/assets/esri/themes/base/widgets/_Daylight.scss +2 -2
  264. package/assets/esri/themes/base/widgets/_Editor.scss +1 -1
  265. package/assets/esri/themes/base/widgets/_Sketch.scss +1 -1
  266. package/assets/esri/themes/base/widgets/_SketchTooltipControls.scss +1 -1
  267. package/assets/esri/themes/base/widgets/_Slider.scss +1 -1
  268. package/assets/esri/themes/base/widgets/_SnappingControls.scss +1 -1
  269. package/assets/esri/themes/base/widgets/_TimezonePicker.scss +1 -1
  270. package/chunks/Bufferer-CclWhXVb.js +1 -1
  271. package/chunks/Distance2DCalculator-DjIp2uQi.js +1 -1
  272. package/chunks/EmissionComposite.glsl.js +2 -2
  273. package/chunks/Envelope.js +1 -1
  274. package/chunks/GeodeticDistanceCalculator-zRp89-dW.js +1 -1
  275. package/chunks/GeodeticUtils.js +1 -1
  276. package/chunks/GeographicTransformation.js +1 -1
  277. package/chunks/Geometry.js +1 -1
  278. package/chunks/GlobalIllumination.glsl.js +69 -102
  279. package/chunks/GlowComposite.glsl.js +9 -7
  280. package/chunks/MultiPathImpl.js +1 -1
  281. package/chunks/OperatorCentroid2D.js +1 -1
  282. package/chunks/OperatorContains.js +2 -0
  283. package/chunks/OperatorCrosses.js +1 -1
  284. package/chunks/OperatorCut.js +1 -1
  285. package/chunks/OperatorDisjoint.js +2 -0
  286. package/chunks/OperatorDistance.js +2 -0
  287. package/chunks/OperatorEquals.js +2 -0
  288. package/chunks/OperatorGeodesicBuffer.js +1 -1
  289. package/chunks/OperatorGeodeticArea.js +1 -1
  290. package/chunks/OperatorGeodeticDensifyByLength.js +1 -1
  291. package/chunks/OperatorGeodeticLength.js +1 -1
  292. package/chunks/OperatorGraphicBuffer.js +1 -1
  293. package/chunks/OperatorIntegrate.js +1 -1
  294. package/chunks/OperatorIntersects.js +1 -1
  295. package/chunks/OperatorMultiPartToSinglePart.js +1 -1
  296. package/chunks/OperatorOverlaps.js +1 -1
  297. package/chunks/OperatorProximity.js +1 -1
  298. package/chunks/OperatorProximityGeodesic.js +1 -1
  299. package/chunks/OperatorRelate.js +2 -0
  300. package/chunks/OperatorShapePreservingLength.js +1 -1
  301. package/chunks/OperatorShapePreservingProject.js +1 -1
  302. package/chunks/OperatorSimplifyOGC.js +1 -1
  303. package/chunks/OperatorTouches.js +1 -1
  304. package/chunks/OperatorWithin.js +1 -1
  305. package/chunks/Point2D.js +1 -1
  306. package/chunks/ProjectionTransformation.js +1 -1
  307. package/chunks/RibbonLine.glsl.js +202 -141
  308. package/chunks/SideCalculator2D-DX0718xq.js +1 -1
  309. package/chunks/UnitFactory.js +1 -1
  310. package/chunks/aiServices.js +1 -1
  311. package/chunks/array.js +1 -1
  312. package/chunks/languageUtils.js +1 -1
  313. package/config.js +1 -1
  314. package/core/libs/gl-matrix-2/math/vec3.js +1 -1
  315. package/core/sql/TimeOnly.js +1 -1
  316. package/core/units.js +1 -1
  317. package/editing/sharedTemplates/executor/builders/bufferLineToPolygon.js +1 -1
  318. package/editing/sharedTemplates/executor/builders/bufferPointToPolygon.js +1 -1
  319. package/editing/sharedTemplates/executor/builders/bufferPolygonToPolygon.js +1 -1
  320. package/editing/sharedTemplates/executor/builders/pointAtIntersectionVerticesOfLine.js +1 -1
  321. package/editing/sharedTemplates/executor/builders/support/offsetUtils.js +1 -1
  322. package/form/elements/inputs/inputUtils.js +1 -1
  323. package/geometry/operators/areaOperator.js +1 -1
  324. package/geometry/operators/bufferOperator.js +1 -1
  325. package/geometry/operators/centroidOperator.js +1 -1
  326. package/geometry/operators/clipOperator.js +1 -1
  327. package/geometry/operators/containsOperator.js +1 -1
  328. package/geometry/operators/convexHullOperator.js +1 -1
  329. package/geometry/operators/crossesOperator.js +1 -1
  330. package/geometry/operators/cutOperator.js +1 -1
  331. package/geometry/operators/densifyOperator.js +1 -1
  332. package/geometry/operators/differenceOperator.js +1 -1
  333. package/geometry/operators/disjointOperator.js +1 -1
  334. package/geometry/operators/distanceOperator.js +1 -1
  335. package/geometry/operators/equalsOperator.js +1 -1
  336. package/geometry/operators/generalizeOperator.js +1 -1
  337. package/geometry/operators/geodesicBufferOperator.js +1 -1
  338. package/geometry/operators/geodeticAreaOperator.js +1 -1
  339. package/geometry/operators/geodeticDensifyOperator.js +1 -1
  340. package/geometry/operators/geodeticDistanceOperator.js +1 -1
  341. package/geometry/operators/geodeticLengthOperator.js +1 -1
  342. package/geometry/operators/gx/operatorAutoComplete.js +1 -1
  343. package/geometry/operators/gx/operatorBuffer.js +1 -1
  344. package/geometry/operators/gx/operatorDifference.js +1 -1
  345. package/geometry/operators/gx/operatorIntersection.js +1 -1
  346. package/geometry/operators/gx/operatorLabelPoint.js +1 -1
  347. package/geometry/operators/gx/operatorLinesToPolygons.js +1 -1
  348. package/geometry/operators/gx/operatorPolygonOverlay.js +1 -1
  349. package/geometry/operators/gx/operatorSimplify.js +1 -1
  350. package/geometry/operators/gx/operatorSymmetricDifference.js +1 -1
  351. package/geometry/operators/gx/operatorUnion.js +1 -1
  352. package/geometry/operators/intersectionOperator.js +1 -1
  353. package/geometry/operators/intersectsOperator.js +1 -1
  354. package/geometry/operators/json/containsOperator.js +1 -1
  355. package/geometry/operators/json/crossesOperator.js +1 -1
  356. package/geometry/operators/json/disjointOperator.js +1 -1
  357. package/geometry/operators/json/intersectsOperator.js +1 -1
  358. package/geometry/operators/json/overlapsOperator.js +1 -1
  359. package/geometry/operators/json/touchesOperator.js +1 -1
  360. package/geometry/operators/json/unionOperator.js +1 -1
  361. package/geometry/operators/json/withinOperator.js +1 -1
  362. package/geometry/operators/labelPointOperator.js +1 -1
  363. package/geometry/operators/lengthOperator.js +1 -1
  364. package/geometry/operators/multiPartToSinglePartOperator.js +1 -1
  365. package/geometry/operators/offsetOperator.js +1 -1
  366. package/geometry/operators/overlapsOperator.js +1 -1
  367. package/geometry/operators/projectOperator.d.ts +1 -1
  368. package/geometry/operators/proximityOperator.js +1 -1
  369. package/geometry/operators/relateOperator.js +1 -1
  370. package/geometry/operators/reshapeOperator.js +1 -1
  371. package/geometry/operators/shapePreservingProjectOperator.d.ts +15 -1
  372. package/geometry/operators/simplifyOGCOperator.js +1 -1
  373. package/geometry/operators/simplifyOperator.js +1 -1
  374. package/geometry/operators/support/GeographicTransformation.d.ts +4 -3
  375. package/geometry/operators/support/GeographicTransformationStep.d.ts +2 -1
  376. package/geometry/operators/support/apiConverter.js +1 -1
  377. package/geometry/operators/support/geographicTransformationUtils.d.ts +22 -15
  378. package/geometry/operators/support/jsonConverter.js +1 -1
  379. package/geometry/operators/support/projectionTransformation.js +1 -1
  380. package/geometry/operators/symmetricDifferenceOperator.js +1 -1
  381. package/geometry/operators/touchesOperator.js +1 -1
  382. package/geometry/operators/types.d.ts +2 -1
  383. package/geometry/operators/unionOperator.js +1 -1
  384. package/geometry/operators/withinOperator.js +1 -1
  385. package/geometry/support/convexPolyhedron.js +2 -0
  386. package/geometry/support/curves/circleUtils.js +1 -1
  387. package/geometry/support/curves/ellipticArc7Utils.js +1 -1
  388. package/geometry/support/frustum.js +1 -1
  389. package/geometry/support/webMercatorUtils.js +1 -1
  390. package/kernel.js +1 -1
  391. package/layers/LinkChartLayer.js +1 -1
  392. package/layers/VectorTileLayer.js +1 -1
  393. package/layers/graphics/hydratedFeatures.js +1 -1
  394. package/layers/mixins/DataSeriesLayer.js +1 -1
  395. package/layers/support/csvUtils.js +1 -1
  396. package/layers/support/fieldUtils.js +1 -1
  397. package/layers/support/mediaUtils.js +1 -1
  398. package/layers/video/VideoController.js +1 -1
  399. package/package.json +4 -4
  400. package/popup/FeatureContentCollection.js +1 -1
  401. package/support/ArcadeExpression.js +1 -1
  402. package/support/actions/ActionBase.d.ts +1 -1
  403. package/support/arcadeUtils.js +1 -1
  404. package/support/loadArcade.js +1 -1
  405. package/support/revision.js +1 -1
  406. package/support/tests/serviceMockDependencies.js +1 -1
  407. package/views/2d/analysis/AreaMeasurement/AreaMeasurementController.js +1 -1
  408. package/views/2d/analysis/DistanceMeasurement/DistanceMeasurementController.js +1 -1
  409. package/views/2d/engine/webgl/shaderGraph/techniques/labels/LabelMeshWriter.js +1 -1
  410. package/views/2d/layers/features/support/FeatureSetReader.js +1 -1
  411. package/views/2d/layers/support/RouteLayerWaypointVisualization.js +1 -1
  412. package/views/3d/analysis/LineOfSight/LineOfSightConfiguration.js +1 -1
  413. package/views/3d/analysis/LineOfSight/LineOfSightManipulators.js +1 -1
  414. package/views/3d/analysis/LineOfSight/LineOfSightVisualization.js +1 -1
  415. package/views/3d/analysis/ShadowCastAnalysisView3D.js +1 -1
  416. package/views/3d/analysis/VolumeMeasurement/VolumeMeasurementController.js +1 -1
  417. package/views/3d/input/SceneInputManager.js +1 -1
  418. package/views/3d/input/handlers/RopePullNavigation.js +2 -0
  419. package/views/3d/layers/TiledLayerView3D.js +1 -1
  420. package/views/3d/layers/graphics/Graphics3DExtrudeSymbolLayer.js +1 -1
  421. package/views/3d/layers/graphics/Graphics3DLineCalloutSymbolLayer.js +1 -1
  422. package/views/3d/layers/graphics/Graphics3DMeshFillSymbolLayer.js +1 -1
  423. package/views/3d/layers/graphics/featureExpressionInfoUtils.js +1 -1
  424. package/views/3d/layers/graphics/polygonUtils.js +1 -1
  425. package/views/3d/layers/i3s/I3SNode.js +1 -1
  426. package/views/3d/layers/i3s/I3SViewportQueries.js +1 -1
  427. package/views/3d/layers/support/FeatureTileVisibility3D.js +1 -1
  428. package/views/3d/layers/support/HeatmapFeatureProcessor.js +1 -1
  429. package/views/3d/state/controllers/RopePullController.js +2 -0
  430. package/views/3d/state/utils/navigationUtils.js +1 -1
  431. package/views/3d/state/utils/ropePullUtils.js +2 -0
  432. package/views/3d/support/ElevationAgnosticVisibility.js +2 -0
  433. package/views/3d/support/engineContent/line.js +1 -1
  434. package/views/3d/support/sphericalTileUtils.js +2 -0
  435. package/views/3d/terrain/PlanarPatch.js +1 -1
  436. package/views/3d/terrain/SphericalPatch.js +1 -1
  437. package/views/3d/terrain/Tile.js +1 -1
  438. package/views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatCovariance.glsl.js +9 -3
  439. package/views/3d/webgl-engine/core/shaderLibrary/util/GaussianSplatEvaluation.glsl.js +5 -8
  440. package/views/3d/webgl-engine/effects/RenderPluginManager.js +1 -1
  441. package/views/3d/webgl-engine/lib/Geometry.js +1 -1
  442. package/views/3d/webgl-engine/lib/GeometryUtil.js +1 -1
  443. package/views/3d/webgl-engine/lib/GridLocalOriginFactory.js +1 -1
  444. package/views/3d/webgl-engine/lib/Material.js +1 -1
  445. package/views/3d/webgl-engine/lib/PathGeometry.js +1 -1
  446. package/views/3d/webgl-engine/lib/RayIntersections.js +1 -1
  447. package/views/3d/webgl-engine/lib/RenderGeometry.js +1 -1
  448. package/views/3d/webgl-engine/lib/screenPolygonTriangleIntersections.js +1 -1
  449. package/views/3d/webgl-engine/materials/HUDMaterial.js +1 -1
  450. package/views/3d/webgl-engine/materials/HeatmapDensityMaterial.js +1 -1
  451. package/views/3d/webgl-engine/materials/LineCalloutMaterial.js +1 -1
  452. package/views/3d/webgl-engine/materials/LineMarkerMaterial.js +1 -1
  453. package/views/3d/webgl-engine/materials/MeasurementArrowMaterial.js +1 -1
  454. package/views/3d/webgl-engine/materials/NativeLineMaterial.js +1 -1
  455. package/views/3d/webgl-engine/materials/RibbonLineMaterial.js +1 -1
  456. package/views/3d/webgl-engine/shaders/GaussianSplatPass.glsl.js +39 -51
  457. package/views/3d/webgl-engine/shaders/RibbonLine.glsl.js +1 -1
  458. package/views/SelectionManager.js +1 -1
  459. package/views/draw/DrawTool.js +1 -1
  460. package/views/draw/support/createUtils.js +1 -1
  461. package/views/popupAdapter.js +1 -1
  462. package/views/support/GeometryWorker.js +1 -1
  463. package/views/support/selectionUtils.js +1 -1
  464. package/widgets/AreaMeasurement2D/AreaMeasurement2DTool.js +1 -1
  465. package/widgets/BatchAttributeForm/expressions/ArcadeExecutorProvider.js +1 -1
  466. package/widgets/BatchAttributeForm/templates/FieldElementTemplate.js +1 -1
  467. package/widgets/BatchAttributeForm/templates/support/createBatchFormTemplate.js +1 -1
  468. package/widgets/BatchAttributeForm/templates/support/hashElementTemplate.js +1 -1
  469. package/widgets/DistanceMeasurement2D/DistanceMeasurement2DTool.js +1 -1
  470. package/widgets/OrientedImageryViewer/adapters/view/MapViewAdapter.js +1 -1
  471. package/widgets/OrientedImageryViewer/components/ImageViewerViewModel.js +1 -1
  472. package/widgets/OrientedImageryViewer/components/OrientedImageryVideoViewModel.js +1 -1
  473. package/widgets/OrientedImageryViewer/imageMeasurementUtils.js +1 -1
  474. package/widgets/OrientedImageryViewer/support/panConstraint.js +1 -1
  475. package/widgets/OrientedImageryViewer/support/superimposeUtils.js +1 -1
  476. package/widgets/OrientedImageryViewer/videoViewerUtils.js +1 -1
  477. package/widgets/UtilityNetworkTrace/support/GeometryHandler.js +1 -1
  478. package/widgets/support/SelectionList/selectionListUtils.d.ts +58 -0
  479. package/widgets/support/SelectionToolbar/SelectionToolbarViewModel.js +1 -1
  480. package/widgets/support/Selector2D/selectorUtils.js +1 -1
  481. package/arcade/kernel.js +0 -2
  482. package/assets/esri/core/workers/chunks/01b7babaefe6500fd6eb.js +0 -1
  483. package/assets/esri/core/workers/chunks/05acc17cb66fa6c08845.js +0 -1
  484. package/assets/esri/core/workers/chunks/06e109e92de7fa0956e3.js +0 -1
  485. package/assets/esri/core/workers/chunks/0775d1e3034d5e7ef7bc.js +0 -1
  486. package/assets/esri/core/workers/chunks/09a0a1e794ddff65aa08.js +0 -1
  487. package/assets/esri/core/workers/chunks/0e57d33bd202d0972207.js +0 -1
  488. package/assets/esri/core/workers/chunks/11224af8b037ccbf252c.js +0 -1
  489. package/assets/esri/core/workers/chunks/151bac9e519a3b821baf.js +0 -1
  490. package/assets/esri/core/workers/chunks/156f85ac1885464f0072.js +0 -1
  491. package/assets/esri/core/workers/chunks/17a10916114754f1f216.js +0 -1
  492. package/assets/esri/core/workers/chunks/180eebd8b7badc2840c9.js +0 -1
  493. package/assets/esri/core/workers/chunks/19cb8963d5ec2246357b.js +0 -1
  494. package/assets/esri/core/workers/chunks/19d4ecee1c161ac0f33c.js +0 -1
  495. package/assets/esri/core/workers/chunks/19ece9f5313f53384cac.js +0 -1
  496. package/assets/esri/core/workers/chunks/1b4e050a3884fc6fa6cf.js +0 -1
  497. package/assets/esri/core/workers/chunks/1d770e8f0fe57d937daa.js +0 -1
  498. package/assets/esri/core/workers/chunks/1dd22b8df6a52277c64b.js +0 -1
  499. package/assets/esri/core/workers/chunks/1ede298ab815e9ad625c.js +0 -1
  500. package/assets/esri/core/workers/chunks/208bc524bd1e0d3aab79.js +0 -1
  501. package/assets/esri/core/workers/chunks/20a4ae83542c7d39cf0f.js +0 -1
  502. package/assets/esri/core/workers/chunks/21071ab3d7b2771406ae.js +0 -1
  503. package/assets/esri/core/workers/chunks/21bfa89363104f041101.js +0 -1
  504. package/assets/esri/core/workers/chunks/21d0a4d6639d32278f11.js +0 -1
  505. package/assets/esri/core/workers/chunks/22a75fdc6ba60213a870.js +0 -1
  506. package/assets/esri/core/workers/chunks/22e004ed97e06536ecef.js +0 -1
  507. package/assets/esri/core/workers/chunks/23942712a3f6290e0fdb.js +0 -1
  508. package/assets/esri/core/workers/chunks/242287de82586d42f0a4.js +0 -1
  509. package/assets/esri/core/workers/chunks/25cb5086eaa412f6820b.js +0 -1
  510. package/assets/esri/core/workers/chunks/26c8ed0aef59ed6d5267.js +0 -1
  511. package/assets/esri/core/workers/chunks/2742d62fceaf0736aef0.js +0 -1
  512. package/assets/esri/core/workers/chunks/276eba546dc8774076ee.js +0 -1
  513. package/assets/esri/core/workers/chunks/28e02b213da9e682d3dc.js +0 -29
  514. package/assets/esri/core/workers/chunks/2d8195231cb16247f198.js +0 -1
  515. package/assets/esri/core/workers/chunks/2db1227ecd421728630d.js +0 -1
  516. package/assets/esri/core/workers/chunks/2ddc9c9ff6ec243d85e2.js +0 -1
  517. package/assets/esri/core/workers/chunks/2e712154ebb895d96ba1.js +0 -1
  518. package/assets/esri/core/workers/chunks/2f2df51d4976ae65edae.js +0 -1
  519. package/assets/esri/core/workers/chunks/2f652b330a9978a68e83.js +0 -1
  520. package/assets/esri/core/workers/chunks/32d31fd4cffdf5a80acb.js +0 -1
  521. package/assets/esri/core/workers/chunks/33aaa5a49e396a0aca47.js +0 -1
  522. package/assets/esri/core/workers/chunks/33d6ca59eeb88e739c81.js +0 -1
  523. package/assets/esri/core/workers/chunks/35622088727e120c93b9.js +0 -1
  524. package/assets/esri/core/workers/chunks/3714cc26f446c4d9cc2c.js +0 -1
  525. package/assets/esri/core/workers/chunks/3722d40d161d60370936.js +0 -1
  526. package/assets/esri/core/workers/chunks/3ac4cfeb1af12a9dc27d.js +0 -1
  527. package/assets/esri/core/workers/chunks/3bf37fd3280f4891c76b.js +0 -1
  528. package/assets/esri/core/workers/chunks/3cecf627827f5d9213a9.js +0 -1
  529. package/assets/esri/core/workers/chunks/3d18a10a1ecfabe92db3.js +0 -1
  530. package/assets/esri/core/workers/chunks/3da39efc5f68f15c105f.js +0 -1
  531. package/assets/esri/core/workers/chunks/3fbd4c7e25440c4713f2.js +0 -1
  532. package/assets/esri/core/workers/chunks/407dba2be21255eb47fc.js +0 -1
  533. package/assets/esri/core/workers/chunks/40ec85b7813a396ee490.js +0 -1
  534. package/assets/esri/core/workers/chunks/44b1a4e8a65221ad3808.js +0 -1
  535. package/assets/esri/core/workers/chunks/49e37f653b81f9e4f7cc.js +0 -1
  536. package/assets/esri/core/workers/chunks/4b4221a869b3f0d517fa.js +0 -1
  537. package/assets/esri/core/workers/chunks/4b86bcde5992eb752ab0.js +0 -1
  538. package/assets/esri/core/workers/chunks/4b9095e2bd060efd47c4.js +0 -1
  539. package/assets/esri/core/workers/chunks/4ec306e5c11808b96e07.js +0 -1
  540. package/assets/esri/core/workers/chunks/5084de4d0d4961b63ab7.js +0 -1
  541. package/assets/esri/core/workers/chunks/51a8a47aac1d8d22ba9d.js +0 -1
  542. package/assets/esri/core/workers/chunks/5324e4feb78203204c0c.js +0 -1
  543. package/assets/esri/core/workers/chunks/58d10928959ae1e2e8d9.js +0 -1
  544. package/assets/esri/core/workers/chunks/5903dceb172897e5675b.js +0 -1
  545. package/assets/esri/core/workers/chunks/597a8e3d9e458298fdd3.js +0 -1
  546. package/assets/esri/core/workers/chunks/5a006ff759fad9fc25cb.js +0 -1
  547. package/assets/esri/core/workers/chunks/5e5a05abcb41915802f6.js +0 -1
  548. package/assets/esri/core/workers/chunks/60be6de19c5659091d8f.js +0 -1
  549. package/assets/esri/core/workers/chunks/61a38237e163b39520e5.js +0 -1
  550. package/assets/esri/core/workers/chunks/61fcdba6f2097378dce5.js +0 -1
  551. package/assets/esri/core/workers/chunks/62f37d1075390a177ae9.js +0 -1
  552. package/assets/esri/core/workers/chunks/65eff0ae773505495f21.js +0 -1
  553. package/assets/esri/core/workers/chunks/67452ba9e87962b9e01e.js +0 -1
  554. package/assets/esri/core/workers/chunks/68195277046861ed39a7.js +0 -1
  555. package/assets/esri/core/workers/chunks/6a2a4da3a1cd64ff576f.js +0 -1
  556. package/assets/esri/core/workers/chunks/6af1680771fd8ae8c7dc.js +0 -1
  557. package/assets/esri/core/workers/chunks/6c367de583e0e657ca3a.js +0 -1
  558. package/assets/esri/core/workers/chunks/6d2021a0f0c9a3c6a0e6.js +0 -1
  559. package/assets/esri/core/workers/chunks/6db4a4f9a9ce7cc738d0.js +0 -1
  560. package/assets/esri/core/workers/chunks/724260e36efea90585f4.js +0 -1
  561. package/assets/esri/core/workers/chunks/73cb944b87ffce33bb49.js +0 -1
  562. package/assets/esri/core/workers/chunks/74ae1222787389d5fcaa.js +0 -1
  563. package/assets/esri/core/workers/chunks/74bfaa98da6c5d375f05.js +0 -1
  564. package/assets/esri/core/workers/chunks/7a68a16f7fea712b9fd6.js +0 -1
  565. package/assets/esri/core/workers/chunks/7d8e59ad438fb34b476d.js +0 -1
  566. package/assets/esri/core/workers/chunks/7eb94fc75926bc739233.js +0 -1
  567. package/assets/esri/core/workers/chunks/80795118467fb31ea4ed.js +0 -1
  568. package/assets/esri/core/workers/chunks/852649460d664b0a1a1d.js +0 -1
  569. package/assets/esri/core/workers/chunks/85c538bf1209f0da1f8e.js +0 -1
  570. package/assets/esri/core/workers/chunks/86de2d1f13915ab7a51d.js +0 -1
  571. package/assets/esri/core/workers/chunks/8db3fd97e8eccd3ba1db.js +0 -1
  572. package/assets/esri/core/workers/chunks/8e225dd0319672103561.js +0 -1
  573. package/assets/esri/core/workers/chunks/8e79a84e224d05204e7d.js +0 -1
  574. package/assets/esri/core/workers/chunks/8e9aff66a2d4e2cc102b.js +0 -1
  575. package/assets/esri/core/workers/chunks/917318f8e186f466dc52.js +0 -1
  576. package/assets/esri/core/workers/chunks/9267f6a65c2245696eac.js +0 -1
  577. package/assets/esri/core/workers/chunks/958e161634b5bfd50625.js +0 -1
  578. package/assets/esri/core/workers/chunks/99881d0a6c2490a16268.js +0 -1
  579. package/assets/esri/core/workers/chunks/99980c944acb8ff88d6a.js +0 -1
  580. package/assets/esri/core/workers/chunks/9b5e890fb0ab29f3a3f1.js +0 -1
  581. package/assets/esri/core/workers/chunks/9c227785f4454d3966ea.js +0 -1
  582. package/assets/esri/core/workers/chunks/9d61d9136f3d00aab530.js +0 -1
  583. package/assets/esri/core/workers/chunks/9df2685583393a87df2d.js +0 -1
  584. package/assets/esri/core/workers/chunks/9e840a71906c4deef776.js +0 -1
  585. package/assets/esri/core/workers/chunks/a03f4605bde69bfb6d41.js +0 -1
  586. package/assets/esri/core/workers/chunks/a0da026a06de379b8f39.js +0 -1
  587. package/assets/esri/core/workers/chunks/a327843cee2057ee76c0.js +0 -1
  588. package/assets/esri/core/workers/chunks/a557347fb313df6fcc79.js +0 -1
  589. package/assets/esri/core/workers/chunks/a8da0728a12fc46dca23.js +0 -1
  590. package/assets/esri/core/workers/chunks/a9ea28e0f22cfe3ccf92.js +0 -1
  591. package/assets/esri/core/workers/chunks/aae92f23b38ae22dd8bf.js +0 -1
  592. package/assets/esri/core/workers/chunks/ad29b77843a7d93d9f8a.js +0 -1
  593. package/assets/esri/core/workers/chunks/ad3714da9c90d7471385.js +0 -1
  594. package/assets/esri/core/workers/chunks/b015b8c7a073dbc4a3ad.js +0 -1
  595. package/assets/esri/core/workers/chunks/b047f9e9ba26037657ed.js +0 -1
  596. package/assets/esri/core/workers/chunks/b1323800119bd5c1759b.js +0 -1
  597. package/assets/esri/core/workers/chunks/b18c35f25da18a3219d7.js +0 -1
  598. package/assets/esri/core/workers/chunks/b1f68ee65cce457d7b5b.js +0 -1
  599. package/assets/esri/core/workers/chunks/b2d6fd436981c890152f.js +0 -1
  600. package/assets/esri/core/workers/chunks/b4b4fe06364bea9b0750.js +0 -1
  601. package/assets/esri/core/workers/chunks/b661aae7e3ce955a783e.js +0 -1
  602. package/assets/esri/core/workers/chunks/b66ebe53bd879aa9de57.js +0 -1
  603. package/assets/esri/core/workers/chunks/b812f817c465c64e8c63.js +0 -1
  604. package/assets/esri/core/workers/chunks/b8ca80134abfcc692244.js +0 -1
  605. package/assets/esri/core/workers/chunks/b94b36581842749863f0.js +0 -1
  606. package/assets/esri/core/workers/chunks/bbdf10d76d852072c878.js +0 -1
  607. package/assets/esri/core/workers/chunks/bbeb61d9302323bae9fb.js +0 -1
  608. package/assets/esri/core/workers/chunks/bbfd2b4af8e498b61af9.js +0 -1
  609. package/assets/esri/core/workers/chunks/bc6e488f5fbd50f9f3d0.js +0 -1
  610. package/assets/esri/core/workers/chunks/bddd5aa7a14cd45ff91c.js +0 -1
  611. package/assets/esri/core/workers/chunks/be31c2cb97f664a54306.js +0 -1
  612. package/assets/esri/core/workers/chunks/be4319827db91aa71bf5.js +0 -1
  613. package/assets/esri/core/workers/chunks/bef32acf368b4d5aba37.js +0 -1
  614. package/assets/esri/core/workers/chunks/c1568bcd3f04014152e1.js +0 -1
  615. package/assets/esri/core/workers/chunks/c229325f41f10fe7f732.js +0 -1
  616. package/assets/esri/core/workers/chunks/c229a4eedda468c914a9.js +0 -1
  617. package/assets/esri/core/workers/chunks/c308d8f419ba63c583e6.js +0 -1
  618. package/assets/esri/core/workers/chunks/c6ef0636073e28350c91.js +0 -1
  619. package/assets/esri/core/workers/chunks/c71368cd64f240da1743.js +0 -1
  620. package/assets/esri/core/workers/chunks/ca6652c6304ad0e37e8f.js +0 -1
  621. package/assets/esri/core/workers/chunks/cb2f27e5d465124b9868.js +0 -1
  622. package/assets/esri/core/workers/chunks/cee2f7f3b3f84688e49d.js +0 -1
  623. package/assets/esri/core/workers/chunks/d0942860a53b02371e94.js +0 -1
  624. package/assets/esri/core/workers/chunks/d09491b340af3b779505.js +0 -1
  625. package/assets/esri/core/workers/chunks/d13eeff678972a245d5d.js +0 -1
  626. package/assets/esri/core/workers/chunks/d3d7b4cd28a0dc2720d4.js +0 -1
  627. package/assets/esri/core/workers/chunks/d3ea7ac6fe71c95faa75.js +0 -1
  628. package/assets/esri/core/workers/chunks/d41e4498aaf4970f48b0.js +0 -1
  629. package/assets/esri/core/workers/chunks/d4d2a0d882fef463e7bc.js +0 -1
  630. package/assets/esri/core/workers/chunks/d7c8725ffb175cec5f8a.js +0 -1
  631. package/assets/esri/core/workers/chunks/d96fa373dcb621c2a869.js +0 -1
  632. package/assets/esri/core/workers/chunks/da233362b06b6db375f1.js +0 -1
  633. package/assets/esri/core/workers/chunks/da45d9576b8d66131623.js +0 -1
  634. package/assets/esri/core/workers/chunks/dbc8f15a6be835f4897d.js +0 -1
  635. package/assets/esri/core/workers/chunks/e00d0036974aaec7d876.js +0 -1
  636. package/assets/esri/core/workers/chunks/e0c75ae3a211a8da10f7.js +0 -1
  637. package/assets/esri/core/workers/chunks/e557043f90c051e93925.js +0 -1
  638. package/assets/esri/core/workers/chunks/e5cbed6f19c743915c8e.js +0 -1
  639. package/assets/esri/core/workers/chunks/e5ecd93bd32e99bc99d1.js +0 -1
  640. package/assets/esri/core/workers/chunks/e76662562e03eef52ba4.js +0 -1
  641. package/assets/esri/core/workers/chunks/eb8c4f194bb66a27d418.js +0 -1
  642. package/assets/esri/core/workers/chunks/ebd8c77df5df63bd3efe.js +0 -1
  643. package/assets/esri/core/workers/chunks/ed5e9718c4dcad1156f7.js +0 -1
  644. package/assets/esri/core/workers/chunks/f14347f5d63f5d102617.js +0 -1
  645. package/assets/esri/core/workers/chunks/f1d0208c6b09c1c4b248.js +0 -1
  646. package/assets/esri/core/workers/chunks/f3680b71d496839de72c.js +0 -1
  647. package/assets/esri/core/workers/chunks/f3c0280b6c87f2383a60.js +0 -1
  648. package/assets/esri/core/workers/chunks/f42c4dcb8f413ca1c6fd.js +0 -1
  649. package/assets/esri/core/workers/chunks/f5773321487ec248fa3b.js +0 -1
  650. package/assets/esri/core/workers/chunks/f76911f71540b058a881.js +0 -1
  651. package/assets/esri/core/workers/chunks/fa29b5064d6626cfc019.js +0 -1
  652. package/assets/esri/core/workers/chunks/fa882d0f4a9826533421.js +0 -1
  653. package/assets/esri/core/workers/chunks/fb2d43608006f588e3cb.js +0 -1
  654. package/assets/esri/core/workers/chunks/fc1aeea22f8c9d63864a.js +0 -1
  655. package/assets/esri/core/workers/chunks/fc3c03cfa3d6bf3b37dc.js +0 -1
  656. package/assets/esri/core/workers/chunks/ff07d351553deb70b889.js +0 -1
  657. package/assets/esri/core/workers/chunks/ffee66699f5d26569baf.js +0 -1
  658. package/chunks/OperatorDefinitions.js +0 -2
  659. package/chunks/areaOperator.js +0 -2
  660. package/chunks/bufferOperator.js +0 -2
  661. package/chunks/centroidOperator.js +0 -2
  662. package/chunks/clipOperator.js +0 -2
  663. package/chunks/containsOperator.js +0 -2
  664. package/chunks/convexHullOperator.js +0 -2
  665. package/chunks/crossesOperator.js +0 -2
  666. package/chunks/cutOperator.js +0 -2
  667. package/chunks/densifyOperator.js +0 -2
  668. package/chunks/differenceOperator.js +0 -2
  669. package/chunks/disjointOperator.js +0 -2
  670. package/chunks/distanceOperator.js +0 -2
  671. package/chunks/equalsOperator.js +0 -2
  672. package/chunks/generalizeOperator.js +0 -2
  673. package/chunks/geodesicBufferOperator.js +0 -2
  674. package/chunks/geodeticAreaOperator.js +0 -2
  675. package/chunks/geodeticDensifyOperator.js +0 -2
  676. package/chunks/geodeticDistanceOperator.js +0 -2
  677. package/chunks/geodeticLengthOperator.js +0 -2
  678. package/chunks/intersectionOperator.js +0 -2
  679. package/chunks/intersectsOperator.js +0 -2
  680. package/chunks/labelPointOperator.js +0 -2
  681. package/chunks/lengthOperator.js +0 -2
  682. package/chunks/multiPartToSinglePartOperator.js +0 -2
  683. package/chunks/offsetOperator.js +0 -2
  684. package/chunks/overlapsOperator.js +0 -2
  685. package/chunks/proximityOperator.js +0 -2
  686. package/chunks/relateOperator.js +0 -2
  687. package/chunks/simplifyOperator.js +0 -2
  688. package/chunks/symmetricDifferenceOperator.js +0 -2
  689. package/chunks/touchesOperator.js +0 -2
  690. package/chunks/unionOperator.js +0 -2
  691. package/chunks/withinOperator.js +0 -2
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import{volumeMeasurementConfiguration as t}from"../../../../analysis/VolumeMeasurement/volumeMeasurementConfiguration.js";import r from"../../../../core/Accessor.js";import o from"../../../../core/Logger.js";import{debounce as i,isPromiseLike as n}from"../../../../core/promiseUtils.js";import{createVolume as s}from"../../../../core/quantity.js";import a from"../../../../core/ReactiveMap.js";import{whenOnce as l}from"../../../../core/reactiveUtils.js";import{property as u,subclass as p}from"../../../../core/accessorSupport/decorators.js";import{runUntracked as m}from"../../../../core/accessorSupport/tracking.js";import{create as c}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{setAxes as h}from"../../../../core/libs/gl-matrix-2/math/quat.js";import{create as d}from"../../../../core/libs/gl-matrix-2/factories/quatf64.js";import{sqrDist as f}from"../../../../core/libs/gl-matrix-2/math/vec2.js";import{create as g}from"../../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{scaleAndAdd as y,scale as _,set as v,negate as w}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as b,fromValues as j,clone as E}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{UpdatingHandles as x}from"../../../../core/support/UpdatingHandles.js";import R from"../../../../geometry/Multipoint.js";import{projectOrLoad as C}from"../../../../geometry/projectionUtils.js";import{e as L}from"../../../../chunks/containsOperator.js";import{e as O}from"../../../../chunks/convexHullOperator.js";import{e as T}from"../../../../chunks/simplifyOperator.js";import{e as V}from"../../../../chunks/unionOperator.js";import{computeTranslationToOriginAndRotation as G}from"../../../../geometry/projection/computeTranslationToOriginAndRotation.js";import{projectBoundingRect as H}from"../../../../geometry/projection/projectBoundingRect.js";import{empty as M,create as D,fromExtent as I,intersects as P}from"../../../../geometry/support/aaBoundingRect.js";import{vectorCoordinates as U}from"../../../../geometry/support/coordinateSystem.js";import{isClockwise as k}from"../../../../geometry/support/coordsUtils.js";import{newDoubleArray as S}from"../../../../geometry/support/DoubleArray.js";import{t as A}from"../../../../chunks/vec3.js";import B from"../../../../symbols/support/ElevationInfo.js";import{logFailedGeometryProjectionError as F}from"../support/projectionUtils.js";import{VolumeMeasurementCutFillComputation as W}from"./VolumeMeasurementCutFillComputation.js";import{VolumeMeasurementInsufficientDataError as z,VolumeMeasurementPerimeterTooLargeError as q,VolumeMeasurementUnsupportedCoordinateSystemError as N,VolumeMeasurementUnsupportedLayerTransparencyError as Z}from"./volumeMeasurementErrors.js";import{VolumeMeasurementRawResult as J}from"./VolumeMeasurementRawResult.js";import K from"./VolumeMeasurementResult.js";import{ElevationContext as Q}from"../../layers/graphics/ElevationContext.js";import{getElevationAtPoint as X}from"../../support/ElevationProvider.js";import{Obb as Y}from"../../support/orientedBoundingBox.js";import{polygonToRenderInfoElevationAligned as $}from"../../support/renderInfoUtils/polygon.js";import{IteratorPreorder as ee}from"../../terrain/tileUtils.js";import{CutFillComputation as te,TargetGeometryRenderInfo as re}from"../../webgl-engine/lib/CutFillComputation.js";import{GeometryWorkerHandle as oe}from"../../../support/GeometryWorkerHandle.js";import{isIntegratedMeshLayerView as ie}from"../../../support/layerViewUtils.js";let ne=class extends r{constructor(e){super(e),this._measurementWorkerHandle=new oe,this.depthExtremaPositions=null,this.analysisObb=null,this._updatingHandles=new x,this._rawResult=null,this._sufficientDataCoverage=!0,this._tileIterator=new ee,this._intersectingObbsByLayerView=new a,this._intersectingTiles=[],this._debouncedUpdate=i(async(e,t,r,o)=>{if(!this._computation.done)return;const{renderCoordsHelper:i}=this.view,n=new W({extent:t,localOrigin:r,renderCoordsHelper:i});this._computation.update(n,o),this._determineDataCoverage(n,e);const[s]=await Promise.allSettled([this._measurementWorkerHandle.areaHorizontal(e,{returnLength:!0}),l(()=>this._computation.done).then(()=>{this._updateDepthExtremaPositions(n,this._computation.result)})]);if(this.error)return void(this._rawResult=null);const a=this._computation.result;this._updateResult(n,a,"fulfilled"===s.status?s.value:null)}),this._determineDataCoverage=(e,t)=>{const{frustum:r}=this._computation,{cameraDimensions:o}=e;t.extent&&r&&(this._intersectingObbsByLayerView.clear(),this._imLayerViewsAffectingMeasurement.forEach(e=>{this._findIntersectingObbs(e,r)}),this._intersectingObbsByLayerView.size>0?this._sufficientDataCoverage=this._sufficientIntegratedMeshCoverage(t,o):(this._findIntersectingTerrainTiles(t.extent),this._sufficientDataCoverage=this._sufficientTerrainCoverage(o)))}}initialize(){const e=this.view;this._computation=new te({view:e}),this.addHandles([this._createElevationUpdateHandle(),this._updatingHandles.add(()=>({localOrigin:this._localOrigin,targetGeometryRenderInfo:this._targetGeometryRenderInfo}),({localOrigin:e,targetGeometryRenderInfo:t})=>{const r=this._projectedGeometry,o=r?.extent;if(!(r&&o&&e&&t))return this._rawResult=null,this.depthExtremaPositions=null,this.analysisObb=null,void(this._sufficientDataCoverage=!0);this._updatingHandles.consumePromise(this._debouncedUpdate(r,o,e,t))})])}destroy(){this._updatingHandles.destroy(),this._computation.destroy(),this._measurementWorkerHandle.destroy()}get _projectedGeometry(){const e=this.analysis.geometry;if(!e||!this.analysis.valid)return null;const t=T(e),r=C(t,this.view.spatialReference);return r.pending?(this._updatingHandles.consumePromise(r.pending),null):(t&&!r.geometry&&F(this.analysis,e.spatialReference,o.getLogger(this)),r.geometry)}get _localOrigin(){const e=this._projectedGeometry?.extent;return e?j(e.center.x,e.center.y,0):null}get elevationAlignedGeometry(){const e=this._projectedGeometry;return e?m(()=>{const t=e.clone();return se(this.view.elevationProvider,t),t}):null}get targetGeometry(){const{elevationAlignedGeometry:e}=this;if(!e)return null;const t=this.analysis.measureType,{effectiveTargetElevation:r}=this.viewData;if("stockpile"===t||null==r)return e;const o=e.clone();return o.rings.forEach(e=>e.forEach(e=>e[2]=r)),o}get _targetGeometryRenderInfo(){const e=this.targetGeometry,t=this._localOrigin;if(!e||!t)return null;const{elevationProvider:r,renderCoordsHelper:o}=this.view,i=$(e,r,o,Q.fromElevationInfo(new B({mode:"absolute-height"})));if(n(i))return this._updatingHandles.consumePromise(i),null;if(null==i)return null;const{positions:s,polygonIndices:a,vertexCount:l}=i,u=S(3*l),p=c(),m=c();return G(e.spatialReference,t,p,o.spatialReference),m[12]=-p[12],m[13]=-p[13],m[14]=-p[14],A(u,s,m),new re(u,a)}get updating(){return this._computation.updating||this._updatingHandles.updating}get result(){const e=this._rawResult,{volume:t,area:r,length:o}=this.viewData.effectiveDisplayUnits;return e&&!this.error?new K({measureType:this.analysis.measureType,rawResult:e,volumeUnit:t,areaUnit:r,lengthUnit:o}):null}get error(){return this._unsupportedCoordinateSystemError??this._unsupportedLayerTransparencyError??this._perimeterTooLargeError??this._insufficientDataError}get _imLayerViewsAffectingMeasurement(){return this.view.allLayerViews.filter(e=>ie(e)).filter(e=>e.visible&&!e.suspended)}get _insufficientDataError(){return this._sufficientDataCoverage?null:new z}get _perimeterTooLargeError(){return this._perimeterTooLargeLocalError??this._perimeterTooLargeGlobalError}get _perimeterTooLargeLocalError(){const{spatialReference:e,state:{isLocal:r}}=this.view;if(!r||!e.isWebMercator)return null;const o=this._perimeterForError,{maxPerimeterLocalWebMercator:i}=t;return null!=o&&o>i?new q:null}get _perimeterTooLargeGlobalError(){if(!this.view.state.isGlobal)return null;const e=this._perimeterForError,{maxPerimeterGlobal:r}=t;return null!=e&&e>r?new q:null}get _unsupportedCoordinateSystemError(){return this.view.state.isLocal&&this.view.spatialReference.isGeographic?new N:null}get _unsupportedLayerTransparencyError(){const e=this.view.map.ground&&this.view.map.ground.opacity<1,t=this._intersectingObbsByLayerView.size>0;return this._intersectingObbsByLayerView.keys().some(e=>e.fullOpacity<1)||e&&!t?new Z:null}get _perimeterForError(){const e=this._projectedGeometry;if(null==e)return null;let t=null;for(const r of e.rings){if(!k(r))continue;const e=ue(pe(r));t=e?Math.max(t??0,e):t}return null!=t?t*e.spatialReference.metersPerUnit:null}_createElevationUpdateHandle(){const e=e=>{const t=this._projectedGeometry?.extent;"ground"===e.context&&t&&(H(e.extent,e.spatialReference,ce,this.view.spatialReference),I(t,he),P(ce,he)&&this.notifyChange("elevationAlignedGeometry"))};return this.view.elevationProvider.on("elevation-change",t=>e(t))}_updateResult(e,t,r){if(!t)return;const{unitInMeters:o}=this.view.renderCoordsHelper,{dimensions:{width:i,height:n},cameraNearFar:{near:a,far:l}}=e,u=i/t.width*(n/t.height),p=ae(t.cut.totalDepth,a,l)*u,m=ae(t.fill.totalDepth,a,l)*u,c=o**3;this._rawResult=new J({cutVolume:s(Math.abs(p*c),"cubic-meters"),fillVolume:s(m*c,"cubic-meters"),area:r?.area,perimeter:r?.length})}_updateDepthExtremaPositions(e,t){if(!t)return;const{dimensions:{width:r,height:o},cameraNearFar:{near:i,far:n},cameraPositionRenderSpace:s,northVector:a,eastVector:l,upVector:u}=e,p=e=>{const{depthExtremum:p,depthExtremumCoords:[m,c],totalDepth:h}=e,d=E(s);return 0!==h&&(y(d,d,l,r*(m/t.width-.5)),y(d,d,a,o*(c/t.height-.5))),y(d,d,u,-ae(p,i,n)),d},m={cut:p(t.cut),fill:p(t.fill)};this.depthExtremaPositions=m,this.analysisObb=le(e,m)}_findIntersectingObbs(e,t){const r=[];"integrated-mesh-3d"===e.type&&e.getVisibleNodes().forEach(o=>{e.isNodeLoaded(o.index)&&o.geometryObbInRenderSR?.intersectsFrustum(t)&&r.push(o.geometryObbInRenderSR)}),"integrated-mesh-3dtiles"===e.type&&e.forEachVisibleComponentObject(({obb:e})=>{e.intersectsFrustum(t)&&r.push(e)}),r.length>0&&this._intersectingObbsByLayerView.set(e,r)}_sufficientIntegratedMeshCoverage(e,t){const{renderCoordsHelper:r,spatialReference:o}=this.view,i=[],n=new R({spatialReference:o});if(this._intersectingObbsByLayerView.forEach(e=>{e.forEach(e=>{if(me(e.radius,t)&&(e.getCorners(be),n.points.length=0,be.forEach(e=>{const t=r.fromRenderCoords(e,je,o);t&&n.addPoint([t[0],t[1]])}),n.points.length)){const e=O(n);"polygon"===e?.type&&i.push(e)}})}),!i.length)return!1;const s=V(i);return!!s&&L(s,e)}_findIntersectingTerrainTiles(e){const{basemapTerrain:t}=this.view;this._intersectingTiles.length=0,I(e,de);const r=this._tileIterator;r.reset(t.rootTiles);for(let o=r.next();o;o=r.next())o.intersectsExtent(de)?o.rendered&&this._intersectingTiles.push(o):r.skipSubtree()}_sufficientTerrainCoverage(e){const{basemapTerrain:{tilingScheme:t}}=this.view;if(!this._intersectingTiles.length)return!1;const r=256/t.pixelSize;return this._intersectingTiles.every(t=>me(t.radius*r,e))}};function se(e,t){t.hasZ=!0,t.rings.forEach(t=>t.forEach(t=>t[2]=X(e,t,"ground")??0))}function ae(e,t,r){return e*(r-t)+t}function le(e,t){const{boundingRect:r,eastVector:o,northVector:i,upVector:n}=e;U(t.cut,o,i,n,fe),U(t.fill,o,i,n,ge);const s=.5*(r[0]+r[2]),a=.5*(r[1]+r[3]),l=Math.min(fe[2],ge[2]),u=Math.max(fe[2],ge[2]),p=.5*(l+u);return _(ye,o,s),y(ye,ye,i,a),y(ye,ye,n,p),v(_e,.5*(r[2]-r[0]),.5*(r[3]-r[1]),.5*(u-l)),w(ve,n),new Y(ye,_e,h(we,ve,o,i))}function ue(e){if(!e)return null;let t=null,r=null,o=0;for(const i of e)t||(t=[i[0],i[1]]),r?o+=f(r,i):r=[0,0],r[0]=i[0],r[1]=i[1];return t&&r&&(o+=f(r,t)),Math.sqrt(o)}function*pe(e){const t=g();for(let r=0;r<e.length;r++)t[0]=e[r][0],t[1]=e[r][1],yield t}e([u()],ne.prototype,"_projectedGeometry",null),e([u()],ne.prototype,"_localOrigin",null),e([u()],ne.prototype,"elevationAlignedGeometry",null),e([u()],ne.prototype,"targetGeometry",null),e([u()],ne.prototype,"_targetGeometryRenderInfo",null),e([u({constructOnly:!0})],ne.prototype,"analysis",void 0),e([u({constructOnly:!0})],ne.prototype,"viewData",void 0),e([u({constructOnly:!0})],ne.prototype,"view",void 0),e([u()],ne.prototype,"updating",null),e([u()],ne.prototype,"result",null),e([u()],ne.prototype,"depthExtremaPositions",void 0),e([u()],ne.prototype,"analysisObb",void 0),e([u()],ne.prototype,"error",null),e([u()],ne.prototype,"_imLayerViewsAffectingMeasurement",null),e([u()],ne.prototype,"_insufficientDataError",null),e([u()],ne.prototype,"_perimeterTooLargeError",null),e([u()],ne.prototype,"_perimeterTooLargeLocalError",null),e([u()],ne.prototype,"_perimeterTooLargeGlobalError",null),e([u()],ne.prototype,"_unsupportedCoordinateSystemError",null),e([u()],ne.prototype,"_unsupportedLayerTransparencyError",null),e([u()],ne.prototype,"_perimeterForError",null),e([u()],ne.prototype,"_computation",void 0),e([u({readOnly:!0})],ne.prototype,"_updatingHandles",void 0),e([u()],ne.prototype,"_rawResult",void 0),e([u()],ne.prototype,"_sufficientDataCoverage",void 0),ne=e([p("esri.views.3d.analysis.VolumeMeasurement.VolumeMeasurementController")],ne);const me=(e,t)=>e<(t.width+t.height)/2,ce=M(),he=M(),de=D(),fe=b(),ge=b(),ye=b(),_e=b(),ve=b(),we=d(),be=new Array(8).fill(0).map(()=>b()),je=b();export{ne as VolumeMeasurementController};
2
+ import{__decorate as e}from"tslib";import{volumeMeasurementConfiguration as t}from"../../../../analysis/VolumeMeasurement/volumeMeasurementConfiguration.js";import r from"../../../../core/Accessor.js";import o from"../../../../core/Logger.js";import{debounce as i,isPromiseLike as n}from"../../../../core/promiseUtils.js";import{createVolume as s}from"../../../../core/quantity.js";import a from"../../../../core/ReactiveMap.js";import{whenOnce as l}from"../../../../core/reactiveUtils.js";import{property as p,subclass as u}from"../../../../core/accessorSupport/decorators.js";import{runUntracked as m}from"../../../../core/accessorSupport/tracking.js";import{create as c}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{setAxes as h}from"../../../../core/libs/gl-matrix-2/math/quat.js";import{create as d}from"../../../../core/libs/gl-matrix-2/factories/quatf64.js";import{sqrDist as f}from"../../../../core/libs/gl-matrix-2/math/vec2.js";import{create as g}from"../../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{scaleAndAdd as y,scale as _,set as v,negate as w}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as b,fromValues as j,clone as E}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{UpdatingHandles as x}from"../../../../core/support/UpdatingHandles.js";import R from"../../../../geometry/Multipoint.js";import{projectOrLoad as C}from"../../../../geometry/projectionUtils.js";import{execute as L}from"../../../../geometry/operators/containsOperator.js";import{execute as O}from"../../../../geometry/operators/convexHullOperator.js";import{execute as T}from"../../../../geometry/operators/simplifyOperator.js";import{executeMany as V}from"../../../../geometry/operators/unionOperator.js";import{computeTranslationToOriginAndRotation as G}from"../../../../geometry/projection/computeTranslationToOriginAndRotation.js";import{projectBoundingRect as H}from"../../../../geometry/projection/projectBoundingRect.js";import{empty as M,create as D,fromExtent as I,intersects as P}from"../../../../geometry/support/aaBoundingRect.js";import{vectorCoordinates as U}from"../../../../geometry/support/coordinateSystem.js";import{isClockwise as S}from"../../../../geometry/support/coordsUtils.js";import{newDoubleArray as A}from"../../../../geometry/support/DoubleArray.js";import{t as B}from"../../../../chunks/vec3.js";import F from"../../../../symbols/support/ElevationInfo.js";import{logFailedGeometryProjectionError as k}from"../support/projectionUtils.js";import{VolumeMeasurementCutFillComputation as W}from"./VolumeMeasurementCutFillComputation.js";import{VolumeMeasurementInsufficientDataError as z,VolumeMeasurementPerimeterTooLargeError as q,VolumeMeasurementUnsupportedCoordinateSystemError as N,VolumeMeasurementUnsupportedLayerTransparencyError as Z}from"./volumeMeasurementErrors.js";import{VolumeMeasurementRawResult as J}from"./VolumeMeasurementRawResult.js";import K from"./VolumeMeasurementResult.js";import{ElevationContext as Q}from"../../layers/graphics/ElevationContext.js";import{getElevationAtPoint as X}from"../../support/ElevationProvider.js";import{Obb as Y}from"../../support/orientedBoundingBox.js";import{polygonToRenderInfoElevationAligned as $}from"../../support/renderInfoUtils/polygon.js";import{IteratorPreorder as ee}from"../../terrain/tileUtils.js";import{CutFillComputation as te,TargetGeometryRenderInfo as re}from"../../webgl-engine/lib/CutFillComputation.js";import{GeometryWorkerHandle as oe}from"../../../support/GeometryWorkerHandle.js";import{isIntegratedMeshLayerView as ie}from"../../../support/layerViewUtils.js";let ne=class extends r{constructor(e){super(e),this._measurementWorkerHandle=new oe,this.depthExtremaPositions=null,this.analysisObb=null,this._updatingHandles=new x,this._rawResult=null,this._sufficientDataCoverage=!0,this._tileIterator=new ee,this._intersectingObbsByLayerView=new a,this._intersectingTiles=[],this._debouncedUpdate=i(async(e,t,r,o)=>{if(!this._computation.done)return;const{renderCoordsHelper:i}=this.view,n=new W({extent:t,localOrigin:r,renderCoordsHelper:i});this._computation.update(n,o),this._determineDataCoverage(n,e);const[s]=await Promise.allSettled([this._measurementWorkerHandle.areaHorizontal(e,{returnLength:!0}),l(()=>this._computation.done).then(()=>{this._updateDepthExtremaPositions(n,this._computation.result)})]);if(this.error)return void(this._rawResult=null);const a=this._computation.result;this._updateResult(n,a,"fulfilled"===s.status?s.value:null)}),this._determineDataCoverage=(e,t)=>{const{frustum:r}=this._computation,{cameraDimensions:o}=e;t.extent&&r&&(this._intersectingObbsByLayerView.clear(),this._imLayerViewsAffectingMeasurement.forEach(e=>{this._findIntersectingObbs(e,r)}),this._intersectingObbsByLayerView.size>0?this._sufficientDataCoverage=this._sufficientIntegratedMeshCoverage(t,o):(this._findIntersectingTerrainTiles(t.extent),this._sufficientDataCoverage=this._sufficientTerrainCoverage(o)))}}initialize(){const e=this.view;this._computation=new te({view:e}),this.addHandles([this._createElevationUpdateHandle(),this._updatingHandles.add(()=>({localOrigin:this._localOrigin,targetGeometryRenderInfo:this._targetGeometryRenderInfo}),({localOrigin:e,targetGeometryRenderInfo:t})=>{const r=this._projectedGeometry,o=r?.extent;if(!(r&&o&&e&&t))return this._rawResult=null,this.depthExtremaPositions=null,this.analysisObb=null,void(this._sufficientDataCoverage=!0);this._updatingHandles.consumePromise(this._debouncedUpdate(r,o,e,t))})])}destroy(){this._updatingHandles.destroy(),this._computation.destroy(),this._measurementWorkerHandle.destroy()}get _projectedGeometry(){const e=this.analysis.geometry;if(!e||!this.analysis.valid)return null;const t=T(e),r=C(t,this.view.spatialReference);return r.pending?(this._updatingHandles.consumePromise(r.pending),null):(t&&!r.geometry&&k(this.analysis,e.spatialReference,o.getLogger(this)),r.geometry)}get _localOrigin(){const e=this._projectedGeometry?.extent;return e?j(e.center.x,e.center.y,0):null}get elevationAlignedGeometry(){const e=this._projectedGeometry;return e?m(()=>{const t=e.clone();return se(this.view.elevationProvider,t),t}):null}get targetGeometry(){const{elevationAlignedGeometry:e}=this;if(!e)return null;const t=this.analysis.measureType,{effectiveTargetElevation:r}=this.viewData;if("stockpile"===t||null==r)return e;const o=e.clone();return o.rings.forEach(e=>e.forEach(e=>e[2]=r)),o}get _targetGeometryRenderInfo(){const e=this.targetGeometry,t=this._localOrigin;if(!e||!t)return null;const{elevationProvider:r,renderCoordsHelper:o}=this.view,i=$(e,r,o,Q.fromElevationInfo(new F({mode:"absolute-height"})));if(n(i))return this._updatingHandles.consumePromise(i),null;if(null==i)return null;const{positions:s,polygonIndices:a,vertexCount:l}=i,p=A(3*l),u=c(),m=c();return G(e.spatialReference,t,u,o.spatialReference),m[12]=-u[12],m[13]=-u[13],m[14]=-u[14],B(p,s,m),new re(p,a)}get updating(){return this._computation.updating||this._updatingHandles.updating}get result(){const e=this._rawResult,{volume:t,area:r,length:o}=this.viewData.effectiveDisplayUnits;return e&&!this.error?new K({measureType:this.analysis.measureType,rawResult:e,volumeUnit:t,areaUnit:r,lengthUnit:o}):null}get error(){return this._unsupportedCoordinateSystemError??this._unsupportedLayerTransparencyError??this._perimeterTooLargeError??this._insufficientDataError}get _imLayerViewsAffectingMeasurement(){return this.view.allLayerViews.filter(e=>ie(e)).filter(e=>e.visible&&!e.suspended)}get _insufficientDataError(){return this._sufficientDataCoverage?null:new z}get _perimeterTooLargeError(){return this._perimeterTooLargeLocalError??this._perimeterTooLargeGlobalError}get _perimeterTooLargeLocalError(){const{spatialReference:e,state:{isLocal:r}}=this.view;if(!r||!e.isWebMercator)return null;const o=this._perimeterForError,{maxPerimeterLocalWebMercator:i}=t;return null!=o&&o>i?new q:null}get _perimeterTooLargeGlobalError(){if(!this.view.state.isGlobal)return null;const e=this._perimeterForError,{maxPerimeterGlobal:r}=t;return null!=e&&e>r?new q:null}get _unsupportedCoordinateSystemError(){return this.view.state.isLocal&&this.view.spatialReference.isGeographic?new N:null}get _unsupportedLayerTransparencyError(){const e=this.view.map.ground&&this.view.map.ground.opacity<1,t=this._intersectingObbsByLayerView.size>0;return this._intersectingObbsByLayerView.keys().some(e=>e.fullOpacity<1)||e&&!t?new Z:null}get _perimeterForError(){const e=this._projectedGeometry;if(null==e)return null;let t=null;for(const r of e.rings){if(!S(r))continue;const e=pe(ue(r));t=e?Math.max(t??0,e):t}return null!=t?t*e.spatialReference.metersPerUnit:null}_createElevationUpdateHandle(){const e=e=>{const t=this._projectedGeometry?.extent;"ground"===e.context&&t&&(H(e.extent,e.spatialReference,ce,this.view.spatialReference),I(t,he),P(ce,he)&&this.notifyChange("elevationAlignedGeometry"))};return this.view.elevationProvider.on("elevation-change",t=>e(t))}_updateResult(e,t,r){if(!t)return;const{unitInMeters:o}=this.view.renderCoordsHelper,{dimensions:{width:i,height:n},cameraNearFar:{near:a,far:l}}=e,p=i/t.width*(n/t.height),u=ae(t.cut.totalDepth,a,l)*p,m=ae(t.fill.totalDepth,a,l)*p,c=o**3;this._rawResult=new J({cutVolume:s(Math.abs(u*c),"cubic-meters"),fillVolume:s(m*c,"cubic-meters"),area:r?.area,perimeter:r?.length})}_updateDepthExtremaPositions(e,t){if(!t)return;const{dimensions:{width:r,height:o},cameraNearFar:{near:i,far:n},cameraPositionRenderSpace:s,northVector:a,eastVector:l,upVector:p}=e,u=e=>{const{depthExtremum:u,depthExtremumCoords:[m,c],totalDepth:h}=e,d=E(s);return 0!==h&&(y(d,d,l,r*(m/t.width-.5)),y(d,d,a,o*(c/t.height-.5))),y(d,d,p,-ae(u,i,n)),d},m={cut:u(t.cut),fill:u(t.fill)};this.depthExtremaPositions=m,this.analysisObb=le(e,m)}_findIntersectingObbs(e,t){const r=[];"integrated-mesh-3d"===e.type&&e.getVisibleNodes().forEach(o=>{e.isNodeLoaded(o.index)&&o.geometryObbInRenderSR?.intersectsFrustum(t)&&r.push(o.geometryObbInRenderSR)}),"integrated-mesh-3dtiles"===e.type&&e.forEachVisibleComponentObject(({obb:e})=>{e.intersectsFrustum(t)&&r.push(e)}),r.length>0&&this._intersectingObbsByLayerView.set(e,r)}_sufficientIntegratedMeshCoverage(e,t){const{renderCoordsHelper:r,spatialReference:o}=this.view,i=[],n=new R({spatialReference:o});if(this._intersectingObbsByLayerView.forEach(e=>{e.forEach(e=>{if(me(e.radius,t)&&(e.getCorners(be),n.points.length=0,be.forEach(e=>{const t=r.fromRenderCoords(e,je,o);t&&n.addPoint([t[0],t[1]])}),n.points.length)){const e=O(n);"polygon"===e?.type&&i.push(e)}})}),!i.length)return!1;const s=V(i);return!!s&&L(s,e)}_findIntersectingTerrainTiles(e){const{basemapTerrain:t}=this.view;this._intersectingTiles.length=0,I(e,de);const r=this._tileIterator;r.reset(t.rootTiles);for(let o=r.next();o;o=r.next())o.intersectsExtent(de)?o.rendered&&this._intersectingTiles.push(o):r.skipSubtree()}_sufficientTerrainCoverage(e){const{basemapTerrain:{tilingScheme:t}}=this.view;if(!this._intersectingTiles.length)return!1;const r=256/t.pixelSize;return this._intersectingTiles.every(t=>me(t.radius*r,e))}};function se(e,t){t.hasZ=!0,t.rings.forEach(t=>t.forEach(t=>t[2]=X(e,t,"ground")??0))}function ae(e,t,r){return e*(r-t)+t}function le(e,t){const{boundingRect:r,eastVector:o,northVector:i,upVector:n}=e;U(t.cut,o,i,n,fe),U(t.fill,o,i,n,ge);const s=.5*(r[0]+r[2]),a=.5*(r[1]+r[3]),l=Math.min(fe[2],ge[2]),p=Math.max(fe[2],ge[2]),u=.5*(l+p);return _(ye,o,s),y(ye,ye,i,a),y(ye,ye,n,u),v(_e,.5*(r[2]-r[0]),.5*(r[3]-r[1]),.5*(p-l)),w(ve,n),new Y(ye,_e,h(we,ve,o,i))}function pe(e){if(!e)return null;let t=null,r=null,o=0;for(const i of e)t||(t=[i[0],i[1]]),r?o+=f(r,i):r=[0,0],r[0]=i[0],r[1]=i[1];return t&&r&&(o+=f(r,t)),Math.sqrt(o)}function*ue(e){const t=g();for(let r=0;r<e.length;r++)t[0]=e[r][0],t[1]=e[r][1],yield t}e([p()],ne.prototype,"_projectedGeometry",null),e([p()],ne.prototype,"_localOrigin",null),e([p()],ne.prototype,"elevationAlignedGeometry",null),e([p()],ne.prototype,"targetGeometry",null),e([p()],ne.prototype,"_targetGeometryRenderInfo",null),e([p({constructOnly:!0})],ne.prototype,"analysis",void 0),e([p({constructOnly:!0})],ne.prototype,"viewData",void 0),e([p({constructOnly:!0})],ne.prototype,"view",void 0),e([p()],ne.prototype,"updating",null),e([p()],ne.prototype,"result",null),e([p()],ne.prototype,"depthExtremaPositions",void 0),e([p()],ne.prototype,"analysisObb",void 0),e([p()],ne.prototype,"error",null),e([p()],ne.prototype,"_imLayerViewsAffectingMeasurement",null),e([p()],ne.prototype,"_insufficientDataError",null),e([p()],ne.prototype,"_perimeterTooLargeError",null),e([p()],ne.prototype,"_perimeterTooLargeLocalError",null),e([p()],ne.prototype,"_perimeterTooLargeGlobalError",null),e([p()],ne.prototype,"_unsupportedCoordinateSystemError",null),e([p()],ne.prototype,"_unsupportedLayerTransparencyError",null),e([p()],ne.prototype,"_perimeterForError",null),e([p()],ne.prototype,"_computation",void 0),e([p({readOnly:!0})],ne.prototype,"_updatingHandles",void 0),e([p()],ne.prototype,"_rawResult",void 0),e([p()],ne.prototype,"_sufficientDataCoverage",void 0),ne=e([u("esri.views.3d.analysis.VolumeMeasurement.VolumeMeasurementController")],ne);const me=(e,t)=>e<(t.width+t.height)/2,ce=M(),he=M(),de=D(),fe=b(),ge=b(),ye=b(),_e=b(),ve=b(),we=d(),be=new Array(8).fill(0).map(()=>b()),je=b();export{ne as VolumeMeasurementController};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as t}from"tslib";import e from"../../../core/Accessor.js";import"../../../core/has.js";import{destroyMaybe as r}from"../../../core/maybe.js";import{watch as o,initial as i,syncAndInitial as n}from"../../../core/reactiveUtils.js";import{property as a,subclass as s}from"../../../core/accessorSupport/decorators.js";import{DoubleClickZoom as m}from"./handlers/DoubleClickZoom.js";import{DragRotate as d}from"./handlers/DragRotate.js";import{DragZoom as p}from"./handlers/DragZoom.js";import{DragZoomBox as g}from"./handlers/DragZoomBox.js";import{GamepadNavigation as h}from"./handlers/GamepadNavigation.js";import{KeyboardNavigation as l}from"./handlers/KeyboardNavigation.js";import{MouseWheelZoom as c}from"./handlers/MouseWheelZoom.js";import{PinchAndPanNavigation as u}from"./handlers/PinchAndPanNavigation.js";import{PointerDownCancelAnimation as w}from"./handlers/PointerDownCancelAnimation.js";import{TwoFingerTilt as f}from"./handlers/TwoFingerTilt.js";import{BrowserEventSource as v}from"../../input/BrowserEventSource.js";import{InputManager as y,ViewEventPriorities as _}from"../../input/InputManager.js";import{PreventContextMenu as D}from"../../input/handlers/PreventContextMenu.js";import{PreventTouchSelection as j}from"../../input/handlers/PreventTouchSelection.js";import{getPointerActions as P}from"../../input/handlers/support.js";import{Drag as A}from"../../input/recognizers/Drag.js";import{ImmediateDoubleClick as M}from"../../input/recognizers/ImmediateDoubleClick.js";import{PointerClickHoldAndDrag as T}from"../../input/recognizers/PointerClickHoldAndDrag.js";import{SingleAndDoubleClick as b}from"../../input/recognizers/SingleAndDoubleClick.js";import{VerticalTwoFingerDrag as I}from"../../input/recognizers/VerticalTwoFingerDrag.js";let N=class extends e{constructor(){super(...arguments),this.mode="default",this._keys={fov:"Shift",pan:{left:"ArrowLeft",right:"ArrowRight",forward:"ArrowUp",backward:"ArrowDown",up:["u","U"],down:["j","J"]},lookAround:{headingLeft:["a","A"],headingRight:["d","D"],tiltUp:["w","W"],tiltDown:["s","S"]},modifier:["b","B"],zoom:{zoomIn:["+","="],zoomOut:["-","_"]},reset:{heading:["n","N"],tilt:["p","P"]}},this._updateMode=({mode:t,dragPrimary:e,dragSecondary:r,dragTertiary:o})=>{"pro"===t&&(r="zoom",o="pan"===e?"rotate":"pan");const i={dragPrimary:e,dragSecondary:r,dragTertiary:o};this._modeDragPan&&(this._modeDragPan.pointerActions=P("pan",i)),this._modeDragRotate&&(this._modeDragRotate.pointerActions=P("rotate",i)),this._modeDragZoom&&(this._modeDragZoom.pointerActions=P("zoom",i))}}destroy(){this.disconnect()}get primaryDragAction(){return this.view.navigation.actionMap.dragPrimary}set primaryDragAction(t){const{actionMap:e}=this.view.navigation;e.dragPrimary=t,e.dragSecondary="pan"===t?"rotate":"pan"}get updating(){return!!this._inputManager?.updating}get latestPointerInfo(){return this._inputManager?.latestPointerInfo}get latestPenInfo(){return this._inputManager?.latestPenInfo}get multiTouchActive(){return this._inputManager?.multiTouchActive??!1}disconnect(){this.removeAllHandles(),this.view.viewEvents.disconnect(),this._modeDragPan=null,this._modeDragRotate=null,this._modeDragZoom=null,this._modeKeyboardNavigation=null,this._inputManager=r(this._inputManager),this._source=r(this._source)}connect(){const t=this.view;this._source=new v(this.view.surface,t.input);const e=[new M,new T,new b,new A(this.view.navigation),new I],r=new y({eventSource:this._source,recognizers:e});this._inputManager=r,r.installHandlers("prevent-context-menu",[new D],_.INTERNAL),r.installHandlers("prevent-touch-text-selection-gesture",[new j(this.view)],_.INTERNAL),this._modeDragPan=new u(t,["primary"]),this._modeDragRotate=new d(t,["secondary"],0),this._modeDragZoom=new p(t,["tertiary"],this._keys.fov),this._modeKeyboardNavigation=new l(t,this._keys),r.installHandlers("navigation",[new w(t),new m(t),new h(t),new c(t,this._keys.fov),new g(t),new d(t,["primary"],1,this._keys.modifier),this._modeDragRotate,this._modeDragZoom,this._modeDragPan,this._modeKeyboardNavigation,new f(t)],_.INTERNAL),this.view.viewEvents.connect(r),this.addHandles([o(()=>this.view.navigation?.browserTouchPanEnabled,t=>{this._source.browserTouchPanningEnabled=!t},i),o(()=>{const{actionMap:t}=this.view.navigation,{dragPrimary:e,dragSecondary:r,dragTertiary:o}=t;return{mode:this.mode,dragPrimary:e,dragSecondary:r,dragTertiary:o}},this._updateMode,n)])}isModifierKeyDown(t){return this._inputManager?.isModifierKeyDown(t)??!1}get test(){}};t([a()],N.prototype,"view",void 0),t([a({type:["default","pro"]})],N.prototype,"mode",void 0),t([a({readOnly:!0})],N.prototype,"updating",null),t([a()],N.prototype,"latestPointerInfo",null),t([a()],N.prototype,"latestPenInfo",null),t([a()],N.prototype,"multiTouchActive",null),t([a()],N.prototype,"_inputManager",void 0),N=t([s("esri.views.3d.input.SceneInputManager")],N);const S=N;export{S as default};
2
+ import{__decorate as t}from"tslib";import e from"../../../core/Accessor.js";import"../../../core/has.js";import{destroyMaybe as r}from"../../../core/maybe.js";import{watch as o,initial as i,syncAndInitial as n}from"../../../core/reactiveUtils.js";import{property as a,subclass as s}from"../../../core/accessorSupport/decorators.js";import{DoubleClickZoom as m}from"./handlers/DoubleClickZoom.js";import{DragRotate as d}from"./handlers/DragRotate.js";import{DragZoom as p}from"./handlers/DragZoom.js";import{DragZoomBox as g}from"./handlers/DragZoomBox.js";import{GamepadNavigation as h}from"./handlers/GamepadNavigation.js";import{KeyboardNavigation as l}from"./handlers/KeyboardNavigation.js";import{MouseWheelZoom as c}from"./handlers/MouseWheelZoom.js";import{PinchAndPanNavigation as u}from"./handlers/PinchAndPanNavigation.js";import{PointerDownCancelAnimation as w}from"./handlers/PointerDownCancelAnimation.js";import{RopePullNavigation as f}from"./handlers/RopePullNavigation.js";import{TwoFingerTilt as v}from"./handlers/TwoFingerTilt.js";import{BrowserEventSource as y}from"../../input/BrowserEventSource.js";import{InputManager as _,ViewEventPriorities as D}from"../../input/InputManager.js";import{PreventContextMenu as j}from"../../input/handlers/PreventContextMenu.js";import{PreventTouchSelection as P}from"../../input/handlers/PreventTouchSelection.js";import{getPointerActions as A}from"../../input/handlers/support.js";import{Drag as M}from"../../input/recognizers/Drag.js";import{ImmediateDoubleClick as T}from"../../input/recognizers/ImmediateDoubleClick.js";import{PointerClickHoldAndDrag as b}from"../../input/recognizers/PointerClickHoldAndDrag.js";import{SingleAndDoubleClick as N}from"../../input/recognizers/SingleAndDoubleClick.js";import{VerticalTwoFingerDrag as I}from"../../input/recognizers/VerticalTwoFingerDrag.js";let S=class extends e{constructor(){super(...arguments),this.mode="default",this._keys={fov:"Shift",pan:{left:"ArrowLeft",right:"ArrowRight",forward:"ArrowUp",backward:"ArrowDown",up:["u","U"],down:["j","J"]},lookAround:{headingLeft:["a","A"],headingRight:["d","D"],tiltUp:["w","W"],tiltDown:["s","S"]},modifier:["b","B"],zoom:{zoomIn:["+","="],zoomOut:["-","_"]},reset:{heading:["n","N"],tilt:["p","P"]}},this._updateMode=({mode:t,dragPrimary:e,dragSecondary:r,dragTertiary:o})=>{"pro"===t&&(r="zoom",o="pan"===e?"rotate":"pan");const i={dragPrimary:e,dragSecondary:r,dragTertiary:o};this._modeDragPan&&(this._modeDragPan.pointerActions=A("pan",i)),this._modeDragRotate&&(this._modeDragRotate.pointerActions=A("rotate",i)),this._modeDragZoom&&(this._modeDragZoom.pointerActions=A("zoom",i))}}destroy(){this.disconnect()}get primaryDragAction(){return this.view.navigation.actionMap.dragPrimary}set primaryDragAction(t){const{actionMap:e}=this.view.navigation;e.dragPrimary=t,e.dragSecondary="pan"===t?"rotate":"pan"}get updating(){return!!this._inputManager?.updating}get latestPointerInfo(){return this._inputManager?.latestPointerInfo}get latestPenInfo(){return this._inputManager?.latestPenInfo}get multiTouchActive(){return this._inputManager?.multiTouchActive??!1}disconnect(){this.removeAllHandles(),this.view.viewEvents.disconnect(),this._modeDragPan=null,this._modeDragRotate=null,this._modeDragZoom=null,this._modeKeyboardNavigation=null,this._inputManager=r(this._inputManager),this._source=r(this._source)}connect(){const t=this.view;this._source=new y(this.view.surface,t.input);const e=[new T,new b,new N,new M(this.view.navigation),new I],r=new _({eventSource:this._source,recognizers:e});this._inputManager=r,r.installHandlers("prevent-context-menu",[new j],D.INTERNAL),r.installHandlers("prevent-touch-text-selection-gesture",[new P(this.view)],D.INTERNAL),this._modeDragPan=new u(t,["primary"]),this._modeDragRotate=new d(t,["secondary"],0),this._modeDragZoom=new p(t,["tertiary"],this._keys.fov),this._modeKeyboardNavigation=new l(t,this._keys),r.installHandlers("navigation",[new w(t),new m(t),new h(t),new c(t,this._keys.fov),new g(t),new d(t,["primary"],1,this._keys.modifier),new f(t,["secondary"],this._keys.modifier),this._modeDragRotate,this._modeDragZoom,this._modeDragPan,this._modeKeyboardNavigation,new v(t)],D.INTERNAL),this.view.viewEvents.connect(r),this.addHandles([o(()=>this.view.navigation?.browserTouchPanEnabled,t=>{this._source.browserTouchPanningEnabled=!t},i),o(()=>{const{actionMap:t}=this.view.navigation,{dragPrimary:e,dragSecondary:r,dragTertiary:o}=t;return{mode:this.mode,dragPrimary:e,dragSecondary:r,dragTertiary:o}},this._updateMode,n)])}isModifierKeyDown(t){return this._inputManager?.isModifierKeyDown(t)??!1}get test(){}};t([a()],S.prototype,"view",void 0),t([a({type:["default","pro"]})],S.prototype,"mode",void 0),t([a({readOnly:!0})],S.prototype,"updating",null),t([a()],S.prototype,"latestPointerInfo",null),t([a()],S.prototype,"latestPenInfo",null),t([a()],S.prototype,"multiTouchActive",null),t([a()],S.prototype,"_inputManager",void 0),S=t([s("esri.views.3d.input.SceneInputManager")],S);const k=S;export{k as default};
@@ -0,0 +1,2 @@
1
+ /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
+ import{RopePullController as t}from"../../state/controllers/RopePullController.js";import{InputHandler as e}from"../../../input/InputHandler.js";import{eventMatchesMousePointerActions as s}from"../../../input/handlers/support.js";class r extends e{constructor(t,e,s){super(!0),this._view=t,this.pointerActions=e,this._lastEndTimestamp=0,this._lastTimestamp=0,this.registerIncoming("drag",s,t=>this._handleDrag(t))}_handleDrag(t){if("mouse"===t.data.pointerType&&!s(t.data,this.pointerActions))return;const e=t.timestamp-this._lastEndTimestamp,r=40,i=this._momentum&&this._momentum.running&&e<r;switch(t.data.action){case"start":case"update":if(i)break;this._controller&&this._controller.running?t.data.timestamp-this._lastTimestamp>2&&(this._controller.update(t.data),this._lastTimestamp=t.timestamp):this._startController(t);break;case"end":case"removed":this._endController(t,!0);break;case"added":this._endController(t,!1),this._startController(t)}t.stopPropagation()}_endController(t,e){if(this._controller?.running){this._lastEndTimestamp=t.timestamp;const s=this._controller.end(t.data);e&&s&&(this._momentum=s,this._view.state.switchCameraController(this._momentum))}this._controller=null}_startController(t){this._controller=this._createController(),this._view.state.switchCameraController(this._controller),this._controller.begin(t.data),this._lastTimestamp=t.timestamp}_createController(){return new t({view:this._view})}}export{r as RopePullNavigation};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{__decorate as e}from"tslib";import t from"../../../core/Error.js";import{whenOnce as i}from"../../../core/reactiveUtils.js";import{property as r,subclass as a}from"../../../core/accessorSupport/decorators.js";import{LayerViewPerformanceInfo as l}from"./support/LayerViewPerformanceInfo.js";import{updatingProgress as s,updatingProgressValue as n}from"../support/updatingProperties.js";import{checkIfTileInfoSupportedForView as o}from"../terrain/terrainUtils.js";import{isScaleRangeActive as c,validateScaleRange as h}from"../../support/layerViewUtils.js";const m=m=>{const p=m;let u=class extends p{constructor(){super(...arguments),this.hasMixedImageFormats=!0}get imageFormatIsOpaque(){return!1}get fullExtent(){return this.layer.fullExtent}get isOpaque(){return this.fullOpacity>=1&&this.imageFormatIsOpaque}tilesVisibleAtCurrentScale(){const{minScale:e,maxScale:t}=this.layer;if(!c(e,t))return!0;const{basemapTerrain:i}=this.view,r=i.getLayerIndexByUID(1,this.uid);if(null==r)return!1;const{tilingScheme:a}=i,l=e&&a.levelAtScale(e),s=t&&a.levelAtScale(t);return i.renderer.visibleTiles.some(e=>!!e.layerInfo[1][r]&&(!l||e.level>=l)&&(!s||e.level<=s))}get visibleAtCurrentScale(){return this.tilesVisibleAtCurrentScale()}get dataScaleRange(){const e=this.tileInfo.lods;let t=e[0].scale,i=e[e.length-1].scale;if("tilemapCache"in this.layer&&this.layer.tilemapCache){const{effectiveMinLOD:e,effectiveMaxLOD:r}=this.layer.tilemapCache;t=this.tileInfo.lodAt(e).scale,i=this.tileInfo.lodAt(r).scale}return{minScale:t,maxScale:i}}canResume(){const e=this.layer&&"effectiveScaleRange"in this.layer?this.layer.effectiveScaleRange:null;return this.visible&&this.layer?.loaded&&!this.parent?.suspended&&this.view?.ready&&h(e)&&this.visibleAtCurrentTimeExtent||!1}get dataLevelRange(){const{minScale:e,maxScale:t}=this.dataScaleRange;return this.levelRangeFromScaleRange(e,t)}get displayLevelRange(){const e=this.layer.minScale||this.dataScaleRange.minScale,t=this.layer.maxScale||this.dataScaleRange.maxScale,i=this.levelRangeFromScaleRange(e,t);return this.layer.maxScale&&i.maxLevel++,i}get performanceInfo(){return new l(this.view.basemapTerrain.getUsedMemoryForLayerView(this))}getTileUrl(e){return"getTileUrl"in this.layer?this.layer.getTileUrl(e[0],e[1],e[2]):null}_addTilingSchemeMatchPromise(){if(null==this.fullExtent)return this.addResolvingPromise(Promise.reject(new t("tilingscheme:extent-not-defined","This layer doesn't define a fullExtent.")));const e=this._getTileInfoSupportError(this.tileInfo,this.fullExtent);if(e)return this.addResolvingPromise(Promise.reject(e));this.addResolvingPromise(i(()=>this.view?.basemapTerrain?.tilingSchemeLocked).then(()=>{const e=this.view.basemapTerrain.tilingScheme,t="tilemapCache"in this.layer?this.layer.tilemapCache?.effectiveMaxLOD:void 0,i=this._getTileInfoCompatibilityError(this.tileInfo,e,t);if(i)throw i}))}_getTileInfoSupportError(e,i){const r=o(e,i,this.view.spatialReference,this.view.state.viewingMode,"tilemapCache"in this.layer?this.layer.tilemapCache?.effectiveMaxLOD:void 0);if(!r)return;const a={layer:this.layer,error:r};switch(r.name){case"tilingscheme:spatial-reference-mismatch":case"tilingscheme:global-unsupported-spatial-reference":case"tilingscheme:local-unsupported-spatial-reference":return new t("layerview:spatial-reference-incompatible","The spatial reference of this layer does not meet the requirements of the view",a);default:return new t("layerview:tiling-scheme-unsupported","The tiling scheme of this layer is not supported by SceneView",a)}}_getTileInfoCompatibilityError(e,i,r){return null!=e&&i.compatibleWith(e,r)?null:new t("layerview:tiling-scheme-incompatible","The tiling scheme of this layer is incompatible with the tiling scheme of the surface")}levelRangeFromScaleRange(e,t){const i={minLevel:0,maxLevel:1/0},r=this.view&&this.view.basemapTerrain&&this.view.basemapTerrain.tilingScheme;if(!r)return i;const a=r.levels[0],l=e=>{const t=Math.log(a.scale/e)/Math.LN2;return.5-Math.abs(.5-t%1)<1e-9?Math.round(t):Math.ceil(t)};return null!=e&&e>0&&(i.minLevel=Math.max(0,l(e))),null!=t&&t>0&&(i.maxLevel=Math.max(0,l(t))),i}isUpdating(){return!!(this.view&&this.view.basemapTerrain&&this.view.basemapTerrain.updating)}};return e([r({readOnly:!0})],u.prototype,"imageFormatIsOpaque",null),e([r({readOnly:!0})],u.prototype,"updating",void 0),e([r(s)],u.prototype,"updatingProgress",void 0),e([r(n)],u.prototype,"updatingProgressValue",void 0),e([r()],u.prototype,"hasMixedImageFormats",void 0),e([r()],u.prototype,"fullExtent",null),e([r({readOnly:!0})],u.prototype,"isOpaque",null),e([r({readOnly:!0})],u.prototype,"visibleAtCurrentScale",null),e([r()],u.prototype,"dataScaleRange",null),e([r({readOnly:!0})],u.prototype,"dataLevelRange",null),e([r({readOnly:!0})],u.prototype,"displayLevelRange",null),e([r()],u.prototype,"layer",void 0),u=e([a("esri.views.3d.layers.TiledLayerView3D")],u),u};export{m as TiledLayerView3D};
2
+ import{__decorate as e}from"tslib";import t from"../../../core/Error.js";import{whenOnce as i}from"../../../core/reactiveUtils.js";import{property as a,subclass as r}from"../../../core/accessorSupport/decorators.js";import{LayerViewPerformanceInfo as l}from"./support/LayerViewPerformanceInfo.js";import{updatingProgress as s,updatingProgressValue as n}from"../support/updatingProperties.js";import{checkIfTileInfoSupportedForView as o}from"../terrain/terrainUtils.js";import{isScaleRangeActive as c,validateScaleRange as h}from"../../support/layerViewUtils.js";const m=m=>{const p=m;let u=class extends p{constructor(){super(...arguments),this.hasMixedImageFormats=!0}get imageFormatIsOpaque(){return!1}get fullExtent(){return this.layer.fullExtent}get isOpaque(){return this.fullOpacity>=1&&this.imageFormatIsOpaque}initialize(){this.addHandles(this.view.basemapTerrain.on("tile-data-changed",({layerClass:e,layerIndex:t})=>{1===e&&t===this.view.basemapTerrain.getLayerIndexByUID(1,this.uid)&&this.notifyChange("visibleAtCurrentScale")}))}tilesVisibleAtCurrentScale(){const{minScale:e,maxScale:t}=this.layer;if(!c(e,t))return!0;const{basemapTerrain:i}=this.view,a=i.getLayerIndexByUID(1,this.uid);if(null==a)return!1;const{tilingScheme:r}=i,l=e&&r.levelAtScale(e),s=t&&r.levelAtScale(t);return i.renderer.visibleTiles.some(e=>!!e.layerInfo[1][a]&&(!l||e.level>=l)&&(!s||e.level<=s))}get visibleAtCurrentScale(){return this.tilesVisibleAtCurrentScale()}get dataScaleRange(){const e=this.tileInfo.lods;let t=e[0].scale,i=e[e.length-1].scale;if("tilemapCache"in this.layer&&this.layer.tilemapCache){const{effectiveMinLOD:e,effectiveMaxLOD:a}=this.layer.tilemapCache;t=this.tileInfo.lodAt(e).scale,i=this.tileInfo.lodAt(a).scale}return{minScale:t,maxScale:i}}canResume(){const e=this.layer&&"effectiveScaleRange"in this.layer?this.layer.effectiveScaleRange:null;return this.visible&&this.layer?.loaded&&!this.parent?.suspended&&this.view?.ready&&h(e)&&this.visibleAtCurrentTimeExtent||!1}get dataLevelRange(){const{minScale:e,maxScale:t}=this.dataScaleRange;return this.levelRangeFromScaleRange(e,t)}get displayLevelRange(){const e=this.layer.minScale||this.dataScaleRange.minScale,t=this.layer.maxScale||this.dataScaleRange.maxScale,i=this.levelRangeFromScaleRange(e,t);return this.layer.maxScale&&i.maxLevel++,i}get performanceInfo(){return new l(this.view.basemapTerrain.getUsedMemoryForLayerView(this))}getTileUrl(e){return"getTileUrl"in this.layer?this.layer.getTileUrl(e[0],e[1],e[2]):null}_addTilingSchemeMatchPromise(){if(null==this.fullExtent)return this.addResolvingPromise(Promise.reject(new t("tilingscheme:extent-not-defined","This layer doesn't define a fullExtent.")));const e=this._getTileInfoSupportError(this.tileInfo,this.fullExtent);if(e)return this.addResolvingPromise(Promise.reject(e));this.addResolvingPromise(i(()=>this.view?.basemapTerrain?.tilingSchemeLocked).then(()=>{const e=this.view.basemapTerrain.tilingScheme,t="tilemapCache"in this.layer?this.layer.tilemapCache?.effectiveMaxLOD:void 0,i=this._getTileInfoCompatibilityError(this.tileInfo,e,t);if(i)throw i}))}_getTileInfoSupportError(e,i){const a=o(e,i,this.view.spatialReference,this.view.state.viewingMode,"tilemapCache"in this.layer?this.layer.tilemapCache?.effectiveMaxLOD:void 0);if(!a)return;const r={layer:this.layer,error:a};switch(a.name){case"tilingscheme:spatial-reference-mismatch":case"tilingscheme:global-unsupported-spatial-reference":case"tilingscheme:local-unsupported-spatial-reference":return new t("layerview:spatial-reference-incompatible","The spatial reference of this layer does not meet the requirements of the view",r);default:return new t("layerview:tiling-scheme-unsupported","The tiling scheme of this layer is not supported by SceneView",r)}}_getTileInfoCompatibilityError(e,i,a){return null!=e&&i.compatibleWith(e,a)?null:new t("layerview:tiling-scheme-incompatible","The tiling scheme of this layer is incompatible with the tiling scheme of the surface")}levelRangeFromScaleRange(e,t){const i={minLevel:0,maxLevel:1/0},a=this.view&&this.view.basemapTerrain&&this.view.basemapTerrain.tilingScheme;if(!a)return i;const r=a.levels[0],l=e=>{const t=Math.log(r.scale/e)/Math.LN2;return.5-Math.abs(.5-t%1)<1e-9?Math.round(t):Math.ceil(t)};return null!=e&&e>0&&(i.minLevel=Math.max(0,l(e))),null!=t&&t>0&&(i.maxLevel=Math.max(0,l(t))),i}isUpdating(){return!!(this.view&&this.view.basemapTerrain&&this.view.basemapTerrain.updating)}};return e([a({readOnly:!0})],u.prototype,"imageFormatIsOpaque",null),e([a({readOnly:!0})],u.prototype,"updating",void 0),e([a(s)],u.prototype,"updatingProgress",void 0),e([a(n)],u.prototype,"updatingProgressValue",void 0),e([a()],u.prototype,"hasMixedImageFormats",void 0),e([a()],u.prototype,"fullExtent",null),e([a({readOnly:!0})],u.prototype,"isOpaque",null),e([a({readOnly:!0})],u.prototype,"visibleAtCurrentScale",null),e([a()],u.prototype,"dataScaleRange",null),e([a({readOnly:!0})],u.prototype,"dataLevelRange",null),e([a({readOnly:!0})],u.prototype,"displayLevelRange",null),e([a()],u.prototype,"layer",void 0),u=e([r("esri.views.3d.layers.TiledLayerView3D")],u),u};export{m as TiledLayerView3D};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{clone as e}from"../../../../core/lang.js";import{getMetersPerVerticalUnitForSR as t}from"../../../../core/units.js";import{normalFromMat4 as r}from"../../../../core/libs/gl-matrix-2/math/mat3.js";import{create as s}from"../../../../core/libs/gl-matrix-2/factories/mat3f64.js";import{invert as i,invertOrIdentity as o}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as n}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{set as a,sub as l,cross as c,add as m,normalize as p,transformMat4 as h}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{ONES as u,create as d}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{ONES as g,ZEROS as y}from"../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{computeTranslationToOriginAndRotation as f}from"../../../../geometry/projection/computeTranslationToOriginAndRotation.js";import{create as b,fromBuffer as x,intersectsClippingArea as _}from"../../../../geometry/support/aaBoundingBox.js";import{getZeroIndexArray as C}from"../../../../geometry/support/Indices.js";import{t as v}from"../../../../chunks/vec3.js";import{SnappingCandidateVertex as w,SnappingCandidateEdge as j}from"../../../../layers/graphics/data/SnappingCandidate.js";import{getDriverAxisSizeValue as S}from"../../../../renderers/support/renderingInfoUtils.js";import{isDrivenOpacityFallbackAlwaysOpaque as P}from"../../../../renderers/visualVariables/support/visualVariableUtils.js";import{needsElevationUpdates3D as I,SampleElevationInfo as E}from"./elevationAlignmentUtils.js";import{extrudePolygon as U}from"./extrudeUtils.js";import{Object3DEdgeState as A,Graphics3DObject3DGraphicLayer as z}from"./Graphics3DObject3DGraphicLayer.js";import{Graphics3DSymbolLayer as O}from"./Graphics3DSymbolLayer.js";import{computeCentroid as D}from"./graphicUtils.js";import{addOlidAttribute as M}from"./olidUtils.js";import{geometryAsPolygon as G}from"./polygonUtils.js";import{createMaterial as L}from"../support/edgeUtils.js";import{encodeNaNUInt8 as V}from"../support/symbolColorUtils.js";import{debugFlags as R}from"../../support/debugFlags.js";import{SamplePosition as B}from"../../support/ElevationProvider.js";import{loadTessellationUtils as F,preloadedPolygonToRenderInfoElevationAligned as T}from"../../support/renderInfoUtils/polygon.js";import{Attribute as N}from"../../webgl-engine/lib/Attribute.js";import{Geometry as H}from"../../webgl-engine/lib/Geometry.js";import{isGeometryWithMapPositions as q}from"../../webgl-engine/lib/GeometryWithMapPositions.js";import{compressNormals as W,compressNormal as k}from"../../webgl-engine/lib/Normals.js";import{Object3D as Z}from"../../webgl-engine/lib/Object3D.js";import{DefaultMaterial as J}from"../../webgl-engine/materials/DefaultMaterial.js";const K=["polygon","extent"];class Q extends O{constructor(e,t,r,s){super(e,t,r,s,P(t)),this.ensureDrapedStatus(!1)}async doLoad(){const e=this.symbolLayer,t=e?.material,r=this.symbolLayer.material?.color?.a,s=this._hasDrivenColorOrOpacity,i=this.needsDrivenTransparentPass||s&&null!=r&&r<1,o=t?.emissive,n=("color"===o?.source?o?.strength:void 0)??0,a=!s&&(null==r||0===r),l=s?g:this._materialColor?.toUnitRGBA()??y,c={usePBR:this._context.physicalBasedRenderingEnabled,isSchematic:!0,useIndexing:!0,ambient:u,diffuse:u,externalColor:l,opacity:a?0:1,layerOpacity:this._getLayerOpacity(),drivenOpacity:i,hasSymbolColors:s,hasSlicePlane:this._context.slicePlaneEnabled,castShadows:e.castShadows,emissiveStrengthFromSymbol:n,emissiveSource:1,offsetTransparentBackfaces:!0,normalType:1},m=new J(c,this._context),p=new J({...c,cullFace:2},this._context);this._materials[0]=m,this._materials[1]=p,this._updateTransparentDepedentMaterialParameters(),await F()}destroy(){super.destroy(),this._materials.length=0}createGraphics3DGraphic(e){const t=e.graphic;if(!this._validateGeometry(t.geometry,K,this.symbolLayer.type))return null;const r=this._getDrivenUInt8ColorWithNaNSupport(e.renderingInfo,this._materialColor,!1);V(r,r);const s=this.createElevationContextForGraphic(t);return this._createAs3DShape(t,e.renderingInfo,r,s,t.uid)}layerOpacityChanged(e,t){const r=this._getLayerOpacity();this._materials[0]?.setParameters({layerOpacity:r}),this._materials[1]?.setParameters({layerOpacity:r}),this._updateTransparentDepedentMaterialParameters(),e?.forEach(e=>t(e)?.layerOpacityChanged(r,this._context.isAsync))}layerScreenSizePerspectiveChanged(){}layerElevationInfoChanged(e,t){return this.updateGraphics3DGraphicElevationInfo(e,t,I)}slicePlaneEnabledChanged(e,t){return this._materials[0]?.setParameters({hasSlicePlane:this._context.slicePlaneEnabled}),this._materials[1]?.setParameters({hasSlicePlane:this._context.slicePlaneEnabled}),e?.forEach(e=>{const r=t(e);null!=r&&r.slicePlaneEnabledChanged(this._context.slicePlaneEnabled,this._context.isAsync)}),!0}physicalBasedRenderingChanged(){const e={usePBR:this._context.physicalBasedRenderingEnabled,isSchematic:!0};return this._materials[0]?.setParameters(e),this._materials[1]?.setParameters(e),!0}_getExtrusionSize(e){let t;return t=e.size&&this._drivenProperties.size?S(e.size.output,2)??0:this._getSymbolSize(),t/=this._context.renderCoordsHelper.unitInMeters,t}_containsRenderableGeometry(e){return"polygonIndexCount"in e&&"outlineIndexCount"in e?e.polygonIndexCount>0||e.outlineIndexCount>0:super._containsRenderableGeometry(e)}applyRendererDiff(e,t){return this._drivenPropertiesChanged(t)?0:1}async queryForSnapping(r,s,i,o){const n=this._getExtrusionSize(i)*this._context.renderCoordsHelper.unitInMeters/t(s),{objectId:a,target:l}=r,c=e(l);switch(c.z=(c.z??0)+n,r.type){case"edge":{const{start:t,end:s}=r,i=e(t),o=e(s);return i.z=(i.z??0)+n,o.z=(o.z??0)+n,[new j(a,c,1/0,i,o)]}case"vertex":return[new w(a,c,1/0),new j(a,l,1/0,l,c)];default:return[]}}_getSymbolSize(){return this.symbolLayer.size??1}_createAs3DShape(e,t,o,a,l){const c=G(e.geometry);if(null==c)return null;if(0===c.rings.length||!c.rings.some(e=>e.length>0))return this._logGeometryValidationWarnings(c.rings,"rings","ExtrudeSymbol3DLayer"),null;const m=T(c,this._context.elevationProvider,this._context.renderCoordsHelper,a,{outlineOutput:"tessellated-indices",owner:this._context.layer});if(null==m)return;this._logGeometryCreationWarnings(m,c.rings,"rings","ExtrudeSymbol3DLayer");const p=D(c);if(null==p)return null;const h=new Array,u=new Array,g=b(),y=n(),C=d(),w=1===this._context.renderCoordsHelper.viewingMode;w||this._context.renderCoordsHelper.worldUpAtPosition(null,C),f(c.spatialReference,[p.x,p.y,0],y,this._context.renderCoordsHelper.spatialReference);const j=n();i(j,y);const S=s();r(S,j);const P=new Map,E=this._materials[0];if(this._context.clippingExtent&&(x(m.mapPositions,g),!_(g,this._context.clippingExtent)))return;if(0===m.polygonIndexCount&&0===m.outlineIndexCount)return;const O=this._getExtrusionSize(t),M=U(m,{height:O,worldUp:C,spherical:w,requireElevation:!0,requireNormals:!0,requireSizes:!0});if(null==M)return;v(M.vertices,M.vertices,j);const V=this._context.stage.renderView.getObjectAndLayerIdColor({graphicUid:l,layerViewUid:this._context.layerViewUid}),R=new ce(M.vertices,M.elevation,W(M.normals),M.sizes),B=X(E,M.indices,M.indices.length-M.bottomIndices.length,R,o,V),F=m.vertexCount,N=M.polygonVertexCount,H=2*m.outlineSegmentCount,q=m.polygonIndexCount/3,k=new me(F,N,H,q);if(te(B,k,y),P.set(B,k),h.push(B),M.bottomIndices.length>0&&h.push(X(this._materials[1],M.bottomIndices,0,R,o,V)),u.push(R.heights),0===h.length)return null;const J=new Z({geometries:h,layerViewUid:this._context.layerViewUid,graphicUid:l,isElevationSource:!0});J.transformation=y;const K=L(this.symbolLayer,{opacity:this._getLayerOpacity()}),Q=K?new A(this._materials[0],K,this._context.slicePlaneEnabled):null,Y=new z(this,J,null,(e,t,r,s,i)=>ee(e,t,r,s,i,u,P),a,Q);return Y.alignedSampledElevation=m.sampledElevation,Y.needsElevationUpdates=I(a.mode),Y}get _materialColor(){return this.symbolLayer.material?.color}_updateTransparentDepedentMaterialParameters(){const e=this._materials[0];e&&e.setParameters({cullFace:e.transparent?0:2})}}function X(e,t,r,s,i,o){const{attributeIndices:n,drawIndices:a}=Y(t),l=[["position",new N(s.positions,n,3,!0)],["normalCompressed",new N(s.normals,n,2,!0)]];let c=null;return e.parameters.hasSymbolColors&&(c=C(n.length),l.push(["symbolColor",new N(i,c,4,!0)])),null!=o&&(c??=C(n.length),M(l,o,c)),new H(e,l,s.elevation,0,r,null,a)}function Y(e){const t=new Array,r=new Map,s=new Array;for(let i=0;i<e.length;++i){const o=e[i];let n=r.get(o);null==n&&(n=t.length,t.push(o),r.set(o,n)),s.push(n)}return{attributeIndices:t,drawIndices:s}}const $=d();function ee(e,t,r,s,i,l,c){const m=e.stageObject,p=m.geometries,u=p.length,d="absolute-height"!==t.mode;let g=0;const y=m.transformation,f=o(n(),y);for(let o=0,n=0;o<u;++o){const e=p[o],t=c.get(e);if(!t||!q(e))continue;const u=e.getMutableAttribute("position").data,b=l[n++],x=new B(e.mapPositions),_=u.length/3;let C=!1,v=0;{let e=0;for(let t=0;t<_;t++){$[0]=u[e],$[1]=u[e+1],$[2]=u[e+2],s(x,ie),d&&(v+=ie.sampledElevation),R.ENABLE_OPTIMIZATIONS?(a(re,u[e],u[e+1],u[e+2]),h(re,re,y),i.setAltitude(re,ie.z+b[e/3]),h(re,re,f)):(a(re,x.array[x.offset],x.array[x.offset+1],ie.z+b[e/3]),null!=r&&i.toRenderCoords(re,r,re),h(re,re,f)),u[e]=re[0],u[e+1]=re[1],u[e+2]=re[2];const t=oe/i.unitInMeters;(Math.abs($[0]-u[e])>=t||Math.abs($[1]-u[e+1])>=t||Math.abs($[2]-u[e+2])>=t)&&(C=!0),x.offset+=3,e+=3}}if(C){te(e,t,y),m.geometryVertexAttributeUpdated(p[o],"normalCompressed"),e.invalidateBoundingInfo(),m.geometryVertexAttributeUpdated(p[o],"position");const r=p[o+1],s=!c.has(r);r&&s&&(r.invalidateBoundingInfo(),m.geometryVertexAttributeUpdated(r,"position"))}g+=v/_}return g/u}function te(e,t,r){const s=e.getMutableAttribute("normalCompressed").data,i=e.readPrimitivePosition,{topVertexStart:o,topVertexCount:n,topFaceStart:u,topFaceCount:d}=t,g=u+d,y=o+n,f=ne,b=ae,x=le,_=se,C=re;a(C,0,0,0);const v=(e,t)=>{h(t,i(t,e),r)};for(let a=u;a<g;++a){const e=3*a;v(e,f[0]),v(e+1,f[1]),v(e+2,f[2]),l(b,f[1],f[0]),l(x,f[2],f[0]),c(_,b,x),m(C,C,_)}p(C,C);for(let a=o;a<y;++a){const e=C[0],t=C[1],r=C[2];k(s,a,e,t,r)}}const re=d(),se=d(),ie=new E,oe=.01,ne=[d(),d(),d()],ae=d(),le=d();class ce{constructor(e,t,r,s){this.positions=e,this.elevation=t,this.normals=r,this.heights=s}}class me{constructor(e,t,r,s){this.topVertexStart=e,this.topVertexCount=t,this.topFaceStart=r,this.topFaceCount=s}}export{Q as Graphics3DExtrudeSymbolLayer};
2
+ import{clone as e}from"../../../../core/lang.js";import{getMetersPerVerticalUnitForSR as t}from"../../../../core/units.js";import{normalFromMat4 as r}from"../../../../core/libs/gl-matrix-2/math/mat3.js";import{create as s}from"../../../../core/libs/gl-matrix-2/factories/mat3f64.js";import{invert as i,invertOrIdentity as o}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as n}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{set as a,sub as l,cross as c,add as m,normalize as p,transformMat4 as h}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{ONES as u,create as d}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{ONES as g,ZEROS as y}from"../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{computeTranslationToOriginAndRotation as f}from"../../../../geometry/projection/computeTranslationToOriginAndRotation.js";import{create as b,fromBuffer as x,intersectsClippingArea as _}from"../../../../geometry/support/aaBoundingBox.js";import{getZeroIndexArray as C}from"../../../../geometry/support/Indices.js";import{t as v}from"../../../../chunks/vec3.js";import{SnappingCandidateVertex as w,SnappingCandidateEdge as j}from"../../../../layers/graphics/data/SnappingCandidate.js";import{getDriverAxisSizeValue as S}from"../../../../renderers/support/renderingInfoUtils.js";import{isDrivenOpacityFallbackAlwaysOpaque as P}from"../../../../renderers/visualVariables/support/visualVariableUtils.js";import{needsElevationUpdates3D as I,SampleElevationInfo as E}from"./elevationAlignmentUtils.js";import{extrudePolygon as U}from"./extrudeUtils.js";import{Object3DEdgeState as A,Graphics3DObject3DGraphicLayer as z}from"./Graphics3DObject3DGraphicLayer.js";import{Graphics3DSymbolLayer as O}from"./Graphics3DSymbolLayer.js";import{computeCentroid as D}from"./graphicUtils.js";import{addOlidAttribute as M}from"./olidUtils.js";import{geometryAsPolygon as G}from"./polygonUtils.js";import{createMaterial as L}from"../support/edgeUtils.js";import{encodeNaNUInt8 as V}from"../support/symbolColorUtils.js";import{debugFlags as R}from"../../support/debugFlags.js";import{SamplePosition as B}from"../../support/ElevationProvider.js";import{loadTessellationUtils as F,preloadedPolygonToRenderInfoElevationAligned as T}from"../../support/renderInfoUtils/polygon.js";import{Attribute as N}from"../../webgl-engine/lib/Attribute.js";import{Geometry as H}from"../../webgl-engine/lib/Geometry.js";import{isGeometryWithMapPositions as q}from"../../webgl-engine/lib/GeometryWithMapPositions.js";import{compressNormals as W,compressNormal as k}from"../../webgl-engine/lib/Normals.js";import{Object3D as Z}from"../../webgl-engine/lib/Object3D.js";import{DefaultMaterial as J}from"../../webgl-engine/materials/DefaultMaterial.js";const K=["polygon","extent"];class Q extends O{constructor(e,t,r,s){super(e,t,r,s,P(t)),this.ensureDrapedStatus(!1)}async doLoad(){const e=this.symbolLayer,t=e?.material,r=this.symbolLayer.material?.color?.a,s=this._hasDrivenColorOrOpacity,i=this.needsDrivenTransparentPass||s&&null!=r&&r<1,o=t?.emissive,n=("color"===o?.source?o?.strength:void 0)??0,a=!s&&(null==r||0===r),l=s?g:this._materialColor?.toUnitRGBA()??y,c={usePBR:this._context.physicalBasedRenderingEnabled,isSchematic:!0,useIndexing:!0,ambient:u,diffuse:u,externalColor:l,opacity:a?0:1,layerOpacity:this._getLayerOpacity(),drivenOpacity:i,hasSymbolColors:s,hasSlicePlane:this._context.slicePlaneEnabled,castShadows:e.castShadows,emissiveStrengthFromSymbol:n,emissiveSource:1,offsetTransparentBackfaces:!0,normalType:1},m=new J(c,this._context),p=new J({...c,cullFace:2},this._context);this._materials[0]=m,this._materials[1]=p,this._updateTransparentDepedentMaterialParameters(),await F()}destroy(){super.destroy(),this._materials.length=0}createGraphics3DGraphic(e){const t=e.graphic;if(!this._validateGeometry(t.geometry,K,this.symbolLayer.type))return null;const r=this._getDrivenUInt8ColorWithNaNSupport(e.renderingInfo,this._materialColor,!1);V(r,r);const s=this.createElevationContextForGraphic(t);return this._createAs3DShape(t,e.renderingInfo,r,s,t.uid)}layerOpacityChanged(e,t){const r=this._getLayerOpacity();this._materials[0]?.setParameters({layerOpacity:r}),this._materials[1]?.setParameters({layerOpacity:r}),this._updateTransparentDepedentMaterialParameters(),e?.forEach(e=>t(e)?.layerOpacityChanged(r,this._context.isAsync))}layerScreenSizePerspectiveChanged(){}layerElevationInfoChanged(e,t){return this.updateGraphics3DGraphicElevationInfo(e,t,I)}slicePlaneEnabledChanged(e,t){return this._materials[0]?.setParameters({hasSlicePlane:this._context.slicePlaneEnabled}),this._materials[1]?.setParameters({hasSlicePlane:this._context.slicePlaneEnabled}),e?.forEach(e=>{const r=t(e);null!=r&&r.slicePlaneEnabledChanged(this._context.slicePlaneEnabled,this._context.isAsync)}),!0}physicalBasedRenderingChanged(){const e={usePBR:this._context.physicalBasedRenderingEnabled,isSchematic:!0};return this._materials[0]?.setParameters(e),this._materials[1]?.setParameters(e),!0}_getExtrusionSize(e){let t;return t=e.size&&this._drivenProperties.size?S(e.size.output,2)??0:this._getSymbolSize(),t/=this._context.renderCoordsHelper.unitInMeters,t}_containsRenderableGeometry(e){return"polygonIndexCount"in e&&"outlineIndexCount"in e?e.polygonIndexCount>0||e.outlineIndexCount>0:super._containsRenderableGeometry(e)}applyRendererDiff(e,t){return this._drivenPropertiesChanged(t)?0:1}async queryForSnapping(r,s,i,o){const n=this._getExtrusionSize(i)*this._context.renderCoordsHelper.unitInMeters/t(s),{objectId:a,target:l}=r,c=e(l);switch(c.z=(c.z??0)+n,r.type){case"edge":{const{start:t,end:s}=r,i=e(t),o=e(s);return i.z=(i.z??0)+n,o.z=(o.z??0)+n,[new j(a,c,1/0,i,o)]}case"vertex":return[new w(a,c,1/0),new j(a,l,1/0,l,c)];default:return[]}}_getSymbolSize(){return this.symbolLayer.size??1}_createAs3DShape(e,t,o,a,l){const c=G(e.geometry);if(null==c)return null;if(0===c.rings.length||!c.rings.some(e=>e.length>0))return this._logGeometryValidationWarnings(c.rings,"rings","ExtrudeSymbol3DLayer"),null;const m=T(c,this._context.elevationProvider,this._context.renderCoordsHelper,a,{outlineOutput:"tessellated-indices",owner:this._context.layer});if(null==m)return;this._logGeometryCreationWarnings(m,c.rings,"rings","ExtrudeSymbol3DLayer");const p=D(c);if(null==p)return null;const h=new Array,u=new Array,g=b(),y=n(),C=d(),w=1===this._context.renderCoordsHelper.viewingMode;w||this._context.renderCoordsHelper.worldUpAtPosition(null,C),f(c.spatialReference,[p.x,p.y,0],y,this._context.renderCoordsHelper.spatialReference);const j=n();i(j,y);const S=s();r(S,j);const P=new Map,E=this._materials[0];if(this._context.clippingExtent&&(x(m.mapPositions,g),!_(g,this._context.clippingExtent)))return;if(0===m.polygonIndexCount&&0===m.outlineIndexCount)return;const O=this._getExtrusionSize(t),M=U(m,{height:O,worldUp:C,spherical:w,requireElevation:!0,requireNormals:!0,requireSizes:!0});if(null==M)return;v(M.vertices,M.vertices,j);const V=this._context.stage.renderView.getObjectAndLayerIdColor({graphicUid:l,layerViewUid:this._context.layerViewUid}),R=new ce(M.vertices,M.elevation,W(M.normals),M.sizes),B=X(E,M.indices,M.indices.length-M.bottomIndices.length,R,o,V),F=m.vertexCount,N=M.polygonVertexCount,H=2*m.outlineSegmentCount,q=m.polygonIndexCount/3,k=new me(F,N,H,q);if(te(B,k,y),P.set(B,k),h.push(B),M.bottomIndices.length>0&&h.push(X(this._materials[1],M.bottomIndices,0,R,o,V)),u.push(R.heights),0===h.length)return null;const J=new Z({geometries:h,layerViewUid:this._context.layerViewUid,graphicUid:l,isElevationSource:!0});J.transformation=y;const K=L(this.symbolLayer,{opacity:this._getLayerOpacity()}),Q=K?new A(this._materials[0],K,this._context.slicePlaneEnabled):null,Y=new z(this,J,null,(e,t,r,s,i)=>ee(e,t,r,s,i,u,P),a,Q);return Y.alignedSampledElevation=m.sampledElevation,Y.needsElevationUpdates=I(a.mode),Y}get _materialColor(){return this.symbolLayer.material?.color}_updateTransparentDepedentMaterialParameters(){const e=this._materials[0];e&&e.setParameters({cullFace:e.transparent?0:2})}}function X(e,t,r,s,i,o){const{attributeIndices:n,drawIndices:a}=Y(t),l=[["position",new N(s.positions,n,3,!0)],["normalCompressed",new N(s.normals,n,2,!0)]];let c=null;return e.parameters.hasSymbolColors&&(c=C(n.length),l.push(["symbolColor",new N(i,c,4,!0)])),null!=o&&(c??=C(n.length),M(l,o,c)),new H(e,l,s.elevation,r,null,a)}function Y(e){const t=new Array,r=new Map,s=new Array;for(let i=0;i<e.length;++i){const o=e[i];let n=r.get(o);null==n&&(n=t.length,t.push(o),r.set(o,n)),s.push(n)}return{attributeIndices:t,drawIndices:s}}const $=d();function ee(e,t,r,s,i,l,c){const m=e.stageObject,p=m.geometries,u=p.length,d="absolute-height"!==t.mode;let g=0;const y=m.transformation,f=o(n(),y);for(let o=0,n=0;o<u;++o){const e=p[o],t=c.get(e);if(!t||!q(e))continue;const u=e.getMutableAttribute("position").data,b=l[n++],x=new B(e.mapPositions),_=u.length/3;let C=!1,v=0;{let e=0;for(let t=0;t<_;t++){$[0]=u[e],$[1]=u[e+1],$[2]=u[e+2],s(x,ie),d&&(v+=ie.sampledElevation),R.ENABLE_OPTIMIZATIONS?(a(re,u[e],u[e+1],u[e+2]),h(re,re,y),i.setAltitude(re,ie.z+b[e/3]),h(re,re,f)):(a(re,x.array[x.offset],x.array[x.offset+1],ie.z+b[e/3]),null!=r&&i.toRenderCoords(re,r,re),h(re,re,f)),u[e]=re[0],u[e+1]=re[1],u[e+2]=re[2];const t=oe/i.unitInMeters;(Math.abs($[0]-u[e])>=t||Math.abs($[1]-u[e+1])>=t||Math.abs($[2]-u[e+2])>=t)&&(C=!0),x.offset+=3,e+=3}}if(C){te(e,t,y),m.geometryVertexAttributeUpdated(p[o],"normalCompressed"),e.invalidateBoundingInfo(),m.geometryVertexAttributeUpdated(p[o],"position");const r=p[o+1],s=!c.has(r);r&&s&&(r.invalidateBoundingInfo(),m.geometryVertexAttributeUpdated(r,"position"))}g+=v/_}return g/u}function te(e,t,r){const s=e.getMutableAttribute("normalCompressed").data,i=e.readPrimitivePosition,{topVertexStart:o,topVertexCount:n,topFaceStart:u,topFaceCount:d}=t,g=u+d,y=o+n,f=ne,b=ae,x=le,_=se,C=re;a(C,0,0,0);const v=(e,t)=>{h(t,i(t,e),r)};for(let a=u;a<g;++a){const e=3*a;v(e,f[0]),v(e+1,f[1]),v(e+2,f[2]),l(b,f[1],f[0]),l(x,f[2],f[0]),c(_,b,x),m(C,C,_)}p(C,C);for(let a=o;a<y;++a){const e=C[0],t=C[1],r=C[2];k(s,a,e,t,r)}}const re=d(),se=d(),ie=new E,oe=.01,ne=[d(),d(),d()],ae=d(),le=d();class ce{constructor(e,t,r,s){this.positions=e,this.elevation=t,this.normals=r,this.heights=s}}class me{constructor(e,t,r,s){this.topVertexStart=e,this.topVertexCount=t,this.topFaceStart=r,this.topFaceCount=s}}export{Q as Graphics3DExtrudeSymbolLayer};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{pt2px as e}from"../../../../core/screenUtils.js";import{create as t}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{ZEROS as r}from"../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{RenderingInfo as n}from"../../../../renderers/support/RenderingInfo.js";import{textSymbolLayerSupportsVerticalOffset as i}from"../../../../symbols/callouts/calloutUtils.js";import{perObjectElevationAligner as s}from"./ElevationAligners.js";import{elevationModeChangeUpdateType as a,needsElevationUpdates2D as o}from"./elevationAlignmentUtils.js";import{Graphics3DGraphicCreationContext as l}from"./Graphics3DGraphicCreationContext.js";import{Graphics3DObject3DGraphicLayer as c}from"./Graphics3DObject3DGraphicLayer.js";import{Graphics3DObjectMetadata as h}from"./Graphics3DObjectMetadata.js";import{Graphics3DSymbolLayer as p}from"./Graphics3DSymbolLayer.js";import{computeCentroid as m}from"./graphicUtils.js";import{addOlidAttribute as d}from"./olidUtils.js";import{createStageObject as f,extendPointGraphicElevationContext as u}from"./pointUtils.js";import{SymbolComplexity as g}from"./SymbolComplexity.js";import{isObjectSymbol3DLayer as v,isTextSymbol3DLayer as y}from"../support/layerUtils.js";import{Attribute as x}from"../../webgl-engine/lib/Attribute.js";import{Geometry as _}from"../../webgl-engine/lib/Geometry.js";import{LineCalloutMaterial as b,Parameters as C,uniqueMaterialIdentifier as O}from"../../webgl-engine/materials/LineCalloutMaterial.js";import{getLineCalloutMaterialBaseInstance as P}from"../../webgl-engine/materials/LineCalloutMaterialBaseInstance.js";class j extends p{static{this.elevationModeChangeTypes={definedChanged:1,staysOnTheGround:1,onTheGroundChanged:2}}constructor(e,t){super(e,null,t,S),this._elevationOptions={supportsOffsetAdjustment:!0,supportsOnTheGround:!1},this.ensureDrapedStatus(!1)}async doLoad(){this._materials[0]=new b(this._materialParameters,this._context.spherical)}_perInstanceMaterialParameters(e){const t=this._materialParameters;return t.horizontalScreenOffset=e.horizontalScreenOffset??0,t.centerOffsetUnits=e.centerOffsetUnits||"world",t}get _materialParameters(){const t=new C,n=this.symbol,i=n.callout;if(i.color){const e=i.color.toUnitRGBA();e[3]*=this._getLayerOpacity(),t.color=e}else t.color=r;if(t.size=e(i.size||0),n.verticalOffset){const{screenLength:r,minWorldLength:i,maxWorldLength:s}=n.verticalOffset;t.verticalOffset={screenLength:e(r),minWorldLength:i||0,maxWorldLength:null!=s?s:1/0}}t.borderColor=null!=i.border?.color?i.border.color.toUnitRGBA():null;const s=n.symbolLayers.at(0),a=v(s),o="label-3d"===n.type;return a&&(t.shaderPolygonOffset=0),t.hudDepthAlignStart=o,t.hasSlicePlane=this._context.slicePlaneEnabled,t.screenSizePerspective=this._context.screenSizePerspectiveEnabled?this.view.screenSizePerspective.parameters:null,t}_defaultElevationInfoNoZ(){return E}createGraphics3DGraphic(e,t){const r=e.renderingInfo,n=e.graphic,s=this.createElevationContextForGraphic(n,r.elevationOffset||0),a=r.symbol,o="on-the-ground"===this._elevationContext.mode&&("cim"===a.type||!a.symbolLayers.some(e=>v(e)||y(e)));if("label-3d"!==a.type&&o)return null;if("point-3d"===a.type&&a.symbolLayers.every(e=>"text"===e.type&&!i(e)))return null;const l=m(n.geometry);return null==l?null:this._createAs3DShape(l,s,r,n.uid,t)}layerOpacityChanged(){this._materials[0]?.setParameters(this._materialParameters)}layerScreenSizePerspectiveChanged(){const e=this._context.screenSizePerspectiveEnabled?this.view.screenSizePerspective.parameters:null;this._materials[0]?.setParameters({screenSizePerspective:e})}layerElevationInfoChanged(e,t,r){const n=this._elevationContext.mode,i=a(j.elevationModeChangeTypes,r,n);return 1!==i||e?.forEach(e=>{const r=t(e);null!=r&&this.graphics3DGraphicLayerElevationInfoChanged(e.graphic,r)}),i}slicePlaneEnabledChanged(){return this._materials[0]?.setParameters({hasSlicePlane:this._context.slicePlaneEnabled}),!0}physicalBasedRenderingChanged(){return!0}createElevationContextForGraphic(e,t=0){const r=super.createElevationContextForGraphic(e);return r.addOffsetRenderUnits(t),r}updateElevationContextForGraphic(e,t,r=0){super.updateElevationContextForGraphic(e,t),e.addOffsetRenderUnits(r)}graphics3DGraphicLayerElevationInfoChanged(e,t){const{elevationContext:r,metadata:n}=t;this.updateElevationContextForGraphic(r,e,n?.elevationOffset??0),t.needsElevationUpdates=o(r.mode)}computeComplexity(){return new g({verticesPerFeature:6})}_getOrCreateMaterial(e,t){const r=this._perInstanceMaterialParameters(e),n=O(r);if(n===this._materials[0]?.uniqueMaterialIdentifier)return this._materials[0];if(t){let e=t.get(n);return null==e&&(e=new b(r,this._context.spherical),t.set(n,e)),e}return new b(r,this._context.spherical)}_createAs3DShape(e,t,r,n,i){const a=this._context.layerViewUid,l=this._context.stage.renderView.getObjectAndLayerIdColor({graphicUid:n,layerViewUid:a}),p=this._getOrCreateMaterial(r,i),m=new _(p,w(r,l),null,1,void 0,P()),d=f(this._context,e,m,t,n);if(null==d)return null;const g=new c(this,d.object,null,s,t);return g.hiddenIfDeconflicted=!0,g.metadata=new h(r.elevationOffset),g.alignedSampledElevation=d.sampledElevation,g.needsElevationUpdates=o(t.mode),u(g,e,this._context.elevationProvider),g}}function w(e,t){const{translation:r,centerOffset:n,groundDistance:i}=e,s=new x(r?[r[0],r[1],r[2]]:[0,0,0],G,3,!0),a=new x(n?[n[0],n[1],n[2]]:[0,0,0],G,3,!0),o=new x(null!=i?[i]:[1],G,1,!0),l=[["position",s],["normal",new x([0,0,1],G,3,!0)],["centerOffset",a],["groundDistance",o]];return null!=t&&d(l,t,G),l}const G=[0],E={mode:"relative-to-ground",offset:0},S={ignoreDrivers:!0,renderPriority:0,renderPriorityStep:1};class U extends n{constructor(e,r,n=t(),i=t(),s=0,a=0,o="world",l=0){super(e,r),this.translation=n,this.centerOffset=i,this.groundDistance=s,this.horizontalScreenOffset=a,this.centerOffsetUnits=o,this.elevationOffset=l}}class L extends l{}export{j as Graphics3DLineCalloutSymbolLayer,L as LineCalloutCreationContext,U as LineCalloutSymbolLayerRenderingInfo};
2
+ import{pt2px as e}from"../../../../core/screenUtils.js";import{create as t}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{ZEROS as r}from"../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{RenderingInfo as n}from"../../../../renderers/support/RenderingInfo.js";import{textSymbolLayerSupportsVerticalOffset as i}from"../../../../symbols/callouts/calloutUtils.js";import{perObjectElevationAligner as s}from"./ElevationAligners.js";import{elevationModeChangeUpdateType as a,needsElevationUpdates2D as o}from"./elevationAlignmentUtils.js";import{Graphics3DGraphicCreationContext as l}from"./Graphics3DGraphicCreationContext.js";import{Graphics3DObject3DGraphicLayer as c}from"./Graphics3DObject3DGraphicLayer.js";import{Graphics3DObjectMetadata as h}from"./Graphics3DObjectMetadata.js";import{Graphics3DSymbolLayer as p}from"./Graphics3DSymbolLayer.js";import{computeCentroid as m}from"./graphicUtils.js";import{addOlidAttribute as d}from"./olidUtils.js";import{createStageObject as f,extendPointGraphicElevationContext as u}from"./pointUtils.js";import{SymbolComplexity as g}from"./SymbolComplexity.js";import{isObjectSymbol3DLayer as v,isTextSymbol3DLayer as y}from"../support/layerUtils.js";import{Attribute as x}from"../../webgl-engine/lib/Attribute.js";import{Geometry as _}from"../../webgl-engine/lib/Geometry.js";import{LineCalloutMaterial as b,Parameters as C,uniqueMaterialIdentifier as O}from"../../webgl-engine/materials/LineCalloutMaterial.js";import{getLineCalloutMaterialBaseInstance as P}from"../../webgl-engine/materials/LineCalloutMaterialBaseInstance.js";class j extends p{static{this.elevationModeChangeTypes={definedChanged:1,staysOnTheGround:1,onTheGroundChanged:2}}constructor(e,t){super(e,null,t,S),this._elevationOptions={supportsOffsetAdjustment:!0,supportsOnTheGround:!1},this.ensureDrapedStatus(!1)}async doLoad(){this._materials[0]=new b(this._materialParameters,this._context.spherical)}_perInstanceMaterialParameters(e){const t=this._materialParameters;return t.horizontalScreenOffset=e.horizontalScreenOffset??0,t.centerOffsetUnits=e.centerOffsetUnits||"world",t}get _materialParameters(){const t=new C,n=this.symbol,i=n.callout;if(i.color){const e=i.color.toUnitRGBA();e[3]*=this._getLayerOpacity(),t.color=e}else t.color=r;if(t.size=e(i.size||0),n.verticalOffset){const{screenLength:r,minWorldLength:i,maxWorldLength:s}=n.verticalOffset;t.verticalOffset={screenLength:e(r),minWorldLength:i||0,maxWorldLength:null!=s?s:1/0}}t.borderColor=null!=i.border?.color?i.border.color.toUnitRGBA():null;const s=n.symbolLayers.at(0),a=v(s),o="label-3d"===n.type;return a&&(t.shaderPolygonOffset=0),t.hudDepthAlignStart=o,t.hasSlicePlane=this._context.slicePlaneEnabled,t.screenSizePerspective=this._context.screenSizePerspectiveEnabled?this.view.screenSizePerspective.parameters:null,t}_defaultElevationInfoNoZ(){return E}createGraphics3DGraphic(e,t){const r=e.renderingInfo,n=e.graphic,s=this.createElevationContextForGraphic(n,r.elevationOffset||0),a=r.symbol,o="on-the-ground"===this._elevationContext.mode&&("cim"===a.type||!a.symbolLayers.some(e=>v(e)||y(e)));if("label-3d"!==a.type&&o)return null;if("point-3d"===a.type&&a.symbolLayers.every(e=>"text"===e.type&&!i(e)))return null;const l=m(n.geometry);return null==l?null:this._createAs3DShape(l,s,r,n.uid,t)}layerOpacityChanged(){this._materials[0]?.setParameters(this._materialParameters)}layerScreenSizePerspectiveChanged(){const e=this._context.screenSizePerspectiveEnabled?this.view.screenSizePerspective.parameters:null;this._materials[0]?.setParameters({screenSizePerspective:e})}layerElevationInfoChanged(e,t,r){const n=this._elevationContext.mode,i=a(j.elevationModeChangeTypes,r,n);return 1!==i||e?.forEach(e=>{const r=t(e);null!=r&&this.graphics3DGraphicLayerElevationInfoChanged(e.graphic,r)}),i}slicePlaneEnabledChanged(){return this._materials[0]?.setParameters({hasSlicePlane:this._context.slicePlaneEnabled}),!0}physicalBasedRenderingChanged(){return!0}createElevationContextForGraphic(e,t=0){const r=super.createElevationContextForGraphic(e);return r.addOffsetRenderUnits(t),r}updateElevationContextForGraphic(e,t,r=0){super.updateElevationContextForGraphic(e,t),e.addOffsetRenderUnits(r)}graphics3DGraphicLayerElevationInfoChanged(e,t){const{elevationContext:r,metadata:n}=t;this.updateElevationContextForGraphic(r,e,n?.elevationOffset??0),t.needsElevationUpdates=o(r.mode)}computeComplexity(){return new g({verticesPerFeature:6})}_getOrCreateMaterial(e,t){const r=this._perInstanceMaterialParameters(e),n=O(r);if(n===this._materials[0]?.uniqueMaterialIdentifier)return this._materials[0];if(t){let e=t.get(n);return null==e&&(e=new b(r,this._context.spherical),t.set(n,e)),e}return new b(r,this._context.spherical)}_createAs3DShape(e,t,r,n,i){const a=this._context.layerViewUid,l=this._context.stage.renderView.getObjectAndLayerIdColor({graphicUid:n,layerViewUid:a}),p=this._getOrCreateMaterial(r,i),m=new _(p,w(r,l),null,void 0,P()),d=f(this._context,e,m,t,n);if(null==d)return null;const g=new c(this,d.object,null,s,t);return g.hiddenIfDeconflicted=!0,g.metadata=new h(r.elevationOffset),g.alignedSampledElevation=d.sampledElevation,g.needsElevationUpdates=o(t.mode),u(g,e,this._context.elevationProvider),g}}function w(e,t){const{translation:r,centerOffset:n,groundDistance:i}=e,s=new x(r?[r[0],r[1],r[2]]:[0,0,0],G,3,!0),a=new x(n?[n[0],n[1],n[2]]:[0,0,0],G,3,!0),o=new x(null!=i?[i]:[1],G,1,!0),l=[["position",s],["normal",new x([0,0,1],G,3,!0)],["centerOffset",a],["groundDistance",o]];return null!=t&&d(l,t,G),l}const G=[0],E={mode:"relative-to-ground",offset:0},S={ignoreDrivers:!0,renderPriority:0,renderPriorityStep:1};class U extends n{constructor(e,r,n=t(),i=t(),s=0,a=0,o="world",l=0){super(e,r),this.translation=n,this.centerOffset=i,this.groundDistance=s,this.horizontalScreenOffset=a,this.centerOffsetUnits=o,this.elevationOffset=l}}class L extends l{}export{j as Graphics3DLineCalloutSymbolLayer,L as LineCalloutCreationContext,U as LineCalloutSymbolLayerRenderingInfo};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import e from"../../../../Color.js";import{linearize as t}from"../../../../colorUtils.js";import{deg2rad as r}from"../../../../core/mathUtils.js";import{releaseMaybe as o}from"../../../../core/maybe.js";import{isPromiseLike as n}from"../../../../core/promiseUtils.js";import{normalFromMat4 as s,fromMat4 as a}from"../../../../core/libs/gl-matrix-2/math/mat3.js";import{create as i}from"../../../../core/libs/gl-matrix-2/factories/mat3f64.js";import{fromTranslation as l,multiply as c,invert as u,getTranslation as m}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as f,IDENTITY as p,clone as h}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{ONES as d}from"../../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{set as g,add as x,scale as _,transformMat4 as y,transformMat3 as v,normalize as T,scaleAndAdd as b,subtract as w,cross as C,dot as j}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{fromValues as M,ZEROS as R,ONES as A,create as P}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{ONES as S}from"../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{canProjectWithoutEngine as I}from"../../../../geometry/projectionUtils.js";import{computeTranslationToOriginAndRotation as U}from"../../../../geometry/projection/computeTranslationToOriginAndRotation.js";import{projectBuffer as B}from"../../../../geometry/projection/projectBuffer.js";import{projectVectorToVector as E}from"../../../../geometry/projection/projectVectorToVector.js";import{fromBuffer as F,intersectsClippingArea as O,create as V}from"../../../../geometry/support/aaBoundingBox.js";import{newFloatArray as $}from"../../../../geometry/support/FloatArray.js";import{getZeroIndexArray as G,getContinuousIndexArray as D}from"../../../../geometry/support/Indices.js";import L from"../../../../geometry/support/MeshComponent.js";import N from"../../../../geometry/support/MeshMaterialMetallicRoughness.js";import H from"../../../../geometry/support/MeshTextureTransform.js";import{isRelativeVertexSpace as k,isAbsoluteVertexSpace as z}from"../../../../geometry/support/meshVertexSpaceUtils.js";import{equals as q,isPlateCarree as W}from"../../../../geometry/support/spatialReferenceUtils.js";import{t as Y}from"../../../../chunks/vec3.js";import{transformNormal as K,transformVectorENUPlateCarree as J,transformVectorWMPlateCarree as Q,projectNormalToPCPF as X,transformTangent as Z,projectTangentToPCPF as ee}from"../../../../geometry/support/meshUtils/projection.js";import{projectMeshVertexPositions as te}from"../../../../geometry/support/meshUtils/projectMeshVertexPositions.js";import{isDrivenOpacityFallbackAlwaysOpaque as re}from"../../../../renderers/visualVariables/support/visualVariableUtils.js";import{getEmissiveMode as oe}from"../../../../symbols/support/materialUtils.js";import{isEncodedMeshTexture as ne}from"../../glTF/internal/resourceUtils.js";import{getTransformMatrix as se}from"../../glTF/internal/TextureTransformUtils.js";import{defaultSymbolLayerMemoryComplexity as ae}from"./defaultSymbolComplexity.js";import{perObjectElevationAligner as ie}from"./ElevationAligners.js";import{needsElevationUpdates3D as le,evaluateElevationInfoAtPoint as ce}from"./elevationAlignmentUtils.js";import{preparePatchEmissiveStrength as ue}from"./emissiveUtils.js";import{Graphics3DMeshObject3DGraphicLayer as me}from"./Graphics3DMeshObject3DGraphicLayer.js";import{Object3DEdgeState as fe}from"./Graphics3DObject3DGraphicLayer.js";import{Graphics3DSymbolLayer as pe,nanFallbackColor as he}from"./Graphics3DSymbolLayer.js";import{MaterialInfoCache as de,MeshFastUpdateProcessor as ge}from"./MeshFastUpdateProcessor.js";import{addOlidAttribute as xe}from"./olidUtils.js";import{SymbolComplexity as _e}from"./SymbolComplexity.js";import{hasEdges as ye,createMaterial as ve}from"../support/edgeUtils.js";import{debugFlags as Te}from"../../support/debugFlags.js";import{Attribute as be}from"../../webgl-engine/lib/Attribute.js";import{Geometry as we}from"../../webgl-engine/lib/Geometry.js";import{ManagedTexture as Ce}from"../../webgl-engine/lib/ManagedTexture.js";import{Object3D as je}from"../../webgl-engine/lib/Object3D.js";import{DefaultMaterial as Me}from"../../webgl-engine/materials/DefaultMaterial.js";import{NativeLineMaterial as Re}from"../../webgl-engine/materials/NativeLineMaterial.js";import{useSchematicPBR as Ae,advancedMRRFactors as Pe,schematicMRRFactors as Se}from"../../webgl-engine/materials/pbrUtils.js";const Ie=["mesh"];class Ue extends pe{constructor(e,t,r,o){super(e,t,r,o,re(t)),this._materialInfoCache=new de,this._fastUpdateProcessor=new ge,this._textures=new Map,this.ensureDrapedStatus(!1)}async doLoad(){Te.DRAW_MESH_GEOMETRY_NORMALS&&(this._debugVertexNormalMaterial=new Re({color:[1,0,1,1]}),this._debugTangentNormalMaterial=new Re({color:[1,.5,0,1]}),this._debugFaceNormalMaterial=new Re({color:[0,1,1,1]})),this.updateComplexity()}destroy(){super.destroy(),this._textures.forEach(e=>e.unload()),this._context.stage.removeTextures(Array.from(this._textures.values())),this._materialInfoCache.clear(),this._textures.clear(),this._fastUpdateProcessor.destroy()}get materials(){return this._materialInfoCache.materials}createGraphics3DGraphic(e){const t=e.graphic;if(!this._validateGeometry(t.geometry,Ie,"fill on mesh-3d"))return null;const r=this.createElevationContextForGraphic(t),o=e.renderingInfo;return this._createAs3DShape(t,o,r,t.uid)}onRemoveGraphic(e){this._fastUpdateProcessor.onRemoveGraphic(e,this._materialInfoCache)}layerOpacityChanged(e,t){const r=this._getLayerOpacity();this._updateMaterialParameters(e=>{e.material.setParameters({layerOpacity:r});const t=e.material.parameters;this._setMaterialTextureAlphaMode(t,e)}),e?.forEach(e=>t(e)?.layerOpacityChanged(r,this._context.isAsync))}layerScreenSizePerspectiveChanged(){}layerElevationInfoChanged(e,t){return this.updateGraphics3DGraphicElevationInfo(e,t,le)}slicePlaneEnabledChanged(e,t){return this._updateMaterialParameters(({material:e})=>{e.setParameters({hasSlicePlane:this._context.slicePlaneEnabled})}),e?.forEach(e=>t(e)?.slicePlaneEnabledChanged(this._context.slicePlaneEnabled,this._context.isAsync)),!0}physicalBasedRenderingChanged(){const e=this._usePBR();return this._updateMaterialParameters(({material:t})=>t.setParameters({usePBR:e})),!0}updateTransform(e,t,r,o){if(!e.fastTransformUpdatesAllowed)return!1;const n=e.fastTransformUpdatesEnabled;switch(o){case 0:if(n)return!0;break;case 1:if(!n)return!0;break;default:if(!n)return!!this.updateTransform(e,t,r,0)&&(e.autoDisableFastTransformUpdates(()=>this.updateTransform(e,t,r,1)),!0)}const s=this._context.renderCoordsHelper.spatialReference,a=ot,{origin:i,transform:l}=r;if(!U(t,g(Xe,i.x,i.y,i.z??0),a,s))return!1;switch(o){case 0:this._fastUpdateProcessor.enable(e,this._materialInfoCache,this._context);break;case 1:this._fastUpdateProcessor.disable(e,this._materialInfoCache)}e.updateFastLocalOrigin(a,l,this._context.localOriginFactory,!1);const{elevationContext:c}=e;c.centerInElevationSR=this._getCenterInElevationSR(a);const{elevationProvider:u,renderCoordsHelper:m}=this._context,f=(e,t)=>ce(e,u,c,m,t);return e.alignedSampledElevation=ie(e,c,u.spatialReference,f,m,a),e.updateTransform(a,l,this._context.isAsync),e.updateAutoDisableFastTransformUpdates(()=>this.updateTransform(e,t,r,1)),!0}computeComplexity(){if(!this._textures||0===this._textures.size)return super.computeComplexity();let e=0;for(const o of this._textures.values())e+=o.usedMemory;const t={...ae(this.symbol,this.symbolLayer),resourceBytes:e},r=ye(this.symbolLayer)?2:0;return new _e({drawCallsPerFeature:r,memory:t})}_requiresSymbolVertexColors(){return this._hasDrivenColorOrOpacity}_materialPropertiesDefault(e,t){const r=this._requiresSymbolVertexColors(),o=!!e.vertexAttributes.color,n=!!e.vertexAttributes.tangent;return{hasSymbolVertexColors:r,hasVertexColors:o,hasVertexTangents:n,unlit:!1,uid:`vc:${o},vt:${n},vct${t},svc:${r}`}}_materialProperties(e,t,r){const o=this._materialPropertiesDefault(e,r);if(!t.material)return o;const{color:n,colorTexture:s,colorTextureTransform:a,normalTexture:i,normalTextureTransform:l,doubleSided:c,alphaCutoff:u,alphaMode:m}=t.material,f=We(n),p=We(s),h=Ye(a),d=We(i),g=Ye(l);if(o.color=n,o.colorTexture=s,o.normalTexture=i,o.uid=`${o.uid},cmuid:${f},ctmuid:${p},cttuid:${h},ntmuid:${d},nttuid:${g},ds:${c},ac:${u},am:${m}`,t.material instanceof N){const{metallic:e,roughness:r,metallicRoughnessTexture:n,metallicRoughnessTextureTransform:s,emissiveColor:i,emissiveStrength:c,emissiveTexture:u,emissiveTextureTransform:m,occlusionTexture:f,occlusionTextureTransform:p,unlit:h}=t.material,d=We(n),g=Ye(s),x=We(i),_=We(u),y=Ye(m),v=We(f),T=Ye(p);o.uid=[o.uid,`mrm:${e}`,`mrr:${r}`,`mrt:${d}`,`mrtt:${g}`,`emuid:${x}`,`ems:${c}`,`etmuid:${_}`,`ett:${y}`,`otmuid:${v}`,`ott:${T}`,`unlit:${h}`].join(","),o.metallic=e,o.roughness=r,o.metallicRoughnessTexture=n,o.emissiveColor=h?void 0:i,o.emissiveStrength=c,o.emissiveTexture=h?void 0:u,o.occlusionTexture=f,o.unlit=h,o.colorTextureTransform=Le(a),o.normalTextureTransform=Le(l),o.emissiveTextureTransform=Le(m),o.occlusionTextureTransform=Le(p),o.metallicRoughnessTextureTransform=Le(s)}return o}_getInternalTexture(e,t=!1,r=1){const s=qe(e);if(!s)return null;const a=`${e.contentHash}/${r}`;let i=this._textures.get(a);if(i){const e=this._context.stage.renderView.textures;let t=null;const r=e.acquire(i.id);return null==r||n(r)||(i.events.on("unloaded",()=>t=o(t)),t=r),i}let l=null;const c=this._context.stage.renderView.renderingContext.parameters.maxMaxAnisotropy,u={wrap:Ne(e.wrap),noUnpackFlip:!0,maxAnisotropy:c,mipmap:c>1};return ne(s)?(l=s.data,u.preMultiplyAlpha=!1,u.encoding=s.encoding):(l=s,u.preMultiplyAlpha=1!==r,u.compressionOptions=t?{compressionTracker:this._context.compressionTracker,compressionCallback:()=>this.updateComplexity()}:void 0),i=new Ce(l,u),this._textures.set(a,i),i.events.on("loaded",()=>this.updateComplexity()),i.load(this._context.stage.renderView.renderingContext),this._context.stage.addTexture(i),i.events.on("unloaded",()=>{this._textures.delete(a)}),i}_setInternalMaterialTextureParameters(e,r){if(null!=e.colorTexture){const t=1!==r.textureAlphaMode,o=this._getInternalTexture(e.colorTexture,t,r.textureAlphaMode);o?(r.textureId=o.id,r.textureAlphaPremultiplied=!!o.parameters.preMultiplyAlpha):r.textureId=void 0}if(e.normalTexture&&(r.normalTextureId=this._getInternalTexture(e.normalTexture)?.id),e.emissiveColor){const o=e.emissiveColor?.toUnitRGB();r.emissiveBaseColor=M(t(o[0]),t(o[1]),t(o[2]))}e.emissiveStrength&&(r.emissiveStrengthKHR=e.emissiveStrength),e.emissiveTexture&&(r.emissiveTextureId=this._getInternalTexture(e.emissiveTexture)?.id),e.occlusionTexture&&(r.occlusionTextureId=this._getInternalTexture(e.occlusionTexture,!0)?.id),e.metallicRoughnessTexture&&(r.metallicRoughnessTextureId=this._getInternalTexture(e.metallicRoughnessTexture,!0)?.id)}_setInternalMaterialParameters(e,t,r){null!=e.color&&ze(e.color,t,r),this._setInternalMaterialTextureParameters(e,t),t.colorTextureTransformMatrix=se(e.colorTextureTransform),t.normalTextureTransformMatrix=se(e.normalTextureTransform);const o=null!=e.normalTextureTransform?.scale?e.normalTextureTransform?.scale:d;t.scale=[o[0],o[1]],t.occlusionTextureTransformMatrix=se(e.occlusionTextureTransform),t.emissiveTextureTransformMatrix=se(e.emissiveTextureTransform),t.metallicRoughnessTextureTransformMatrix=se(e.metallicRoughnessTextureTransform)}_setExternalMaterialParameters(e,t=this._materialColor){const r=this._drivenProperties.color,o=this._drivenProperties.opacity;if(r)e.externalColor=S;else{const r=t??null;if(r){const t=r.toUnitRGBA();o&&(t[3]=1),e.externalColor=t}else e.externalColor=he}e.colorMixMode=this.symbolLayer.material?.colorMixMode??"multiply",e.castShadows=!!this.symbolLayer.castShadows,e.emissiveStrengthFromSymbol=this.symbolLayer?.material?.emissive?.strength??1,e.emissiveSource=oe(this.symbolLayer?.material?.emissive?.source??"emissive")}_getOrCreateMaterial(e,t){const r=t.material?.color,o=t.material?.colorTexture,n=t.material?.alphaMode,s="blend"===n,a=!("opaque"===n)&&(ke(e)||null!=r&&r.a<1||o?.transparent||s),i=this._materialProperties(e,t,a),l=this._materialInfoCache.byUid(i.uid);if(l)return this._setInternalMaterialTextureParameters(i,l.material.parameters),l.material;const c={uid:i.uid,material:null,isComponentTransparent:a,alphaMode:t.material?t.material.alphaMode:"opaque"},u=Ae({normalTexture:i.normalTexture,metallicRoughnessTexture:i.metallicRoughnessTexture,metallicFactor:i.metallic,roughnessFactor:i.roughness,emissiveTexture:i.unlit?void 0:i.emissiveTexture,emissiveFactor:i.unlit?R:i.emissiveColor?.toUnitRGB(),occlusionTexture:i.occlusionTexture}),m={usePBR:this._usePBR(),isSchematic:u,hasVertexColors:i.hasVertexColors,hasSymbolColors:i.hasSymbolVertexColors,hasVertexTangents:i.hasVertexTangents,ambient:R,diffuse:A,opacity:1,doubleSided:!0,doubleSidedType:"winding-order",cullFace:0,unlit:i.unlit,layerOpacity:this._getLayerOpacity(),hasSlicePlane:this._context.slicePlaneEnabled,drivenOpacity:this.needsDrivenTransparentPass||c.isComponentTransparent};m.mrrFactors=u?Se:[i.metallic,i.roughness,Pe[2]],t.material&&(m.doubleSided=t.material.doubleSided,m.cullFace=t.material.doubleSided?0:2,m.textureAlphaCutoff=t.material.alphaCutoff),this._setExternalMaterialParameters(m),this._setMaterialTextureAlphaMode(m,c),this._setInternalMaterialParameters(i,m,c);const f=new Me(m,this._context);return c.material=f,this._materialInfoCache.set(i.uid,c),f}prepareSymbolLayerPatch(e){if("partial"!==e.diff.type)return;const t=e.diff.diff;this._preparePatchColor(e,t),this._preparePatchEmissive(e,t)}_preparePatchColor(e,t){if(!t.material||"partial"!==t.material.type)return;const r=t.material.diff;if(!r.color||"complete"!==r.color.type||null==r.color.newValue||null==r.color.oldValue)return;const o=r.color.newValue;delete r.color,e.symbolLayerStatePatches.push(()=>{this._updateMaterialParameters(e=>{const t=e.material.parameters;this._setExternalMaterialParameters(t,o),this._setMaterialTextureAlphaMode(t,e),e.material.setParameters({externalColor:t.externalColor})})})}_preparePatchEmissive(e,t){return ue(e,t,e=>{this._updateMaterialParameters(t=>{t.material.setParameters({emissiveStrengthFromSymbol:e??1})})},this.view.stage.renderView.renderingContext.driverTest.floatBufferBlend.result)}_usePBR(){return this._context.physicalBasedRenderingEnabled}_setMaterialTextureAlphaMode(e,t){if("auto"===t.alphaMode){const r=this.needsDrivenTransparentPass||t.isComponentTransparent||(e.layerOpacity??1)<1||(e.opacity??1)<1||(e.externalColor?.[3]??1)<1;e.textureAlphaMode=r?3:1}else e.textureAlphaMode="opaque"===t.alphaMode?1:"mask"===t.alphaMode?2:0}_createFaceDebugNormals(e,t){const r=t.length,o=e.spatialReference.isGeographic?20015077/180:1,n=.1*Math.max(e.extent.width*o,e.extent.height*o,e.extent.zmax-e.extent.zmin),a=[],l=[],c=t[0].transformation,u=s(i(),c);for(let s=0;s<r;s++){const e=t[s].attributes.get("position");if(!e)continue;const r=e.data,o=e.indices;for(let t=0;t<o.length;t+=3)De(r,o,t,tt),Ge(r,o,t,Xe,Ze,et),x(Xe,Xe,Ze),x(Xe,Xe,et),_(Xe,Xe,1/3),y(Xe,Xe,c),a.push(...Xe),v(tt,tt,u),T(tt,tt),b(Xe,Xe,tt,n),a.push(...Xe),l.push(l.length),l.push(l.length)}return a.length?new we(this._debugFaceNormalMaterial,[["position",new be(a,l,3,!0)]],null,2):null}_createPerVertexDebugVectors(e,t,r,o,n){const l=t.length,c=e.spatialReference.isGeographic?20015077/180:1,u=.1*n*Math.max(e.extent.width*c,e.extent.height*c,e.extent.zmax-e.extent.zmin),m=[],f=[],p=t[0].transformation,h=s(i(),p);"tangent"===r&&a(h,p);for(let s=0;s<l;s++){const e=t[s],o=e.attributes.get("position"),n=e.attributes.get(r);if(!o||!n)continue;const a=o.data,i=o.indices,l=n.data,c=n.indices;for(let t=0;t<i.length;t++){const e=3*i[t],r=c[t]*n.stride;g(Xe,a[e+0],a[e+1],a[e+2]),y(Xe,Xe,p),m.push(...Xe),g(Ze,l[r+0],l[r+1],l[r+2]),v(Ze,Ze,h),T(Ze,Ze),b(Xe,Xe,Ze,u),m.push(...Xe),f.push(f.length),f.push(f.length)}}return m.length?new we(o,[["position",new be(m,f,3,!0)]],null,2):null}_createAs3DShape(e,t,r,o){const n=e.geometry;if("mesh"!==n.type)return null;const s=this._createGeometryInfo(n,t,o);if(null==s)return null;const{geometries:a,objectTransformation:i}=s;if(Te.DRAW_MESH_GEOMETRY_NORMALS){const e=this._createPerVertexDebugVectors(n,a,"normal",this._debugVertexNormalMaterial,1),t=this._createPerVertexDebugVectors(n,a,"tangent",this._debugTangentNormalMaterial,.5),r=this._createFaceDebugNormals(n,a);e&&a.push(e),t&&a.push(t),r&&a.push(r)}const l=this._context.layerViewUid,c=new je({geometries:a,layerViewUid:l,graphicUid:o,isElevationSource:!0});c.transformation=i;const u=ve(this.symbolLayer,{opacity:this._getLayerOpacity()}),m=u?new fe(a[0].material,u,this._context.slicePlaneEnabled):null,f=new me(this,c,null,ie,r,m);this._fastUpdateProcessor.onAddGraphic(),f.needsElevationUpdates=le(r.mode),f.useObjectOriginAsAttachmentOrigin=!0,f.fastTransformUpdatesAllowed=this._fastTransformUpdatesAllowed(n),r.centerInElevationSR=this._getCenterInElevationSR(c.transformation);const{elevationProvider:p,renderCoordsHelper:h}=this._context,d=(e,t)=>ce(e,p,r,h,t);return f.alignedSampledElevation=ie(f,r,p.spatialReference,d,h),f}_fastTransformUpdatesAllowed(e){const{vertexSpace:t,spatialReference:r}=e;if(!k(t))return!1;const{type:o}=t,{view:n}=this._context.graphicsCoreOwner,{viewingMode:s}=n.state,a=n.spatialReference;return 1===s&&"local"===o||2===s&&q(a,r)&&"georeferenced"===o&&!r.isGeographic}_getElevationSR(){return this._context.elevationProvider.spatialReference??null}_getCenterInElevationSR(e){const t=P(),r=g(at,e[12],e[13],e[14]);return E(r,this._context.renderCoordsHelper.spatialReference,t,this._getElevationSR()),t}_passthroughReprojectionInfo(e){return 0===e.reprojection&&!!e.objectTransformation}_createPositionBuffer(e,t){const r=e.vertexAttributes.position;let o,n=r;if(0===t.reprojection)return{position:n,georeferencedPositionBuffer:o};const s=1===t.reprojection?t.transformBeforeProject:null;s&&(n=Y(new Float64Array(n.length),n,s));const{normal:a,tangent:i}=e.vertexAttributes;this._passthroughReprojectionInfo(t)||!a&&!i||(o=n);const l=n===r||n===o?new Float64Array(n.length):n;return B(n,e.spatialReference,0,l,this._context.renderCoordsHelper.spatialReference,0),{position:l,georeferencedPositionBuffer:o}}_createNormalBuffer(e,t,r,o){const n=e.vertexAttributes.normal;if(null==n)return null;let s=n;const a=1===o.reprojection?o.transformBeforeProject:null;a&&(s=K(s,new Float32Array(s.length),a));const i=this._context.graphicsCoreOwner.view.viewingMode;if(0===o.reprojection)return s;if("local"===i){if(!W(this._context.renderCoordsHelper.spatialReference))return s;if(null==r)return null;if(e.spatialReference.isGeographic){const e=s===n?new Float32Array(s.length):s;return J(s,0,r,e)}if(e.spatialReference.isWebMercator){const e=s===n?new Float32Array(s.length):s;return Q(s,0,r,e)}return s}if(null==r)return null;const l=s===n?new Float32Array(s.length):s,c=this._context.renderCoordsHelper.spatialReference;return X(s,r,e.spatialReference,t,c,l)}_createTangentBuffer(e,t,r,o){const n=e.vertexAttributes.tangent;if(null==n)return null;let s=n;const a=1===o.reprojection?o.transformBeforeProject:null;a&&(s=Z(s,new Float32Array(s.length),a));const i=this._context.graphicsCoreOwner.view.viewingMode;if(0===o.reprojection)return s;if("local"===i){if(!W(this._context.renderCoordsHelper.spatialReference))return s;if(null==r)return null;if(e.spatialReference.isGeographic){const e=s===n?new Float32Array(s.length):s;return J(s,1,r,e)}if(e.spatialReference.isWebMercator){const e=s===n?new Float32Array(s.length):s;return Q(s,1,r,e)}return s}if(null==r)return null;const l=s===n?new Float32Array(s.length):s,c=this._context.renderCoordsHelper.spatialReference;return ee(s,r,e.spatialReference,t,c,l)}_createSymbolColorBuffer(e){return this._requiresSymbolVertexColors()?new Uint8Array(this._getDrivenUInt8ColorWithNaNSupport(e,this._materialColor,!0)):null}_createBuffers(e,t){const r=e.vertexAttributes&&e.vertexAttributes.position;if(!r)return this.logger.warn("Mesh geometry must contain position vertex attributes"),null;const o=e.vertexAttributes.normal,n=e.vertexAttributes.uv,s=e.vertexAttributes.tangent;if(o&&o.length!==r.length)return this.logger.warn("Mesh normal vertex buffer must contain the same number of elements as the position buffer"),null;if(s&&s.length/4!=r.length/3)return this.logger.warn("Mesh tangent vertex buffer must contain the same number of elements as the position buffer"),null;if(n&&n.length/2!=r.length/3)return this.logger.warn("Mesh uv vertex buffer must contain the same number of elements as the position buffer"),null;const a=this._computeReprojectionInfo(e),{position:i,georeferencedPositionBuffer:l}=this._createPositionBuffer(e,a),c=Ke(e),u=this._createSymbolColorBuffer(t),m=this._createNormalBuffer(e,i,l,a),p=this._createTangentBuffer(e,i,l,a),h=n,{transformation:d,position:g,normal:x,tangent:_}=this._passthroughReprojectionInfo(a)?{transformation:a.objectTransformation,position:i,normal:m,tangent:p}:this._transformOriginLocal(e,i,m,p);return{positionBuffer:g,normalBuffer:x,tangentBuffer:_,uvBuffer:h,colorBuffer:c,symbolColorBuffer:u,objectTransformation:d,geometryTransformation:0===a.reprojection&&a.geometryTransformation?a.geometryTransformation:f()}}_computeReprojectionInfo(e){const{vertexSpace:t}=e,r="georeferenced"===t.type?q(this._context.renderCoordsHelper.spatialReference,e.spatialReference)?0:1:0;if(z(t))return{reprojection:r};const o=t.origin,n=f(),s=e.transform?.localMatrix??p;if(0===r){U(e.spatialReference,o,n,this._context.renderCoordsHelper.spatialReference);return{reprojection:r,objectTransformation:n,geometryTransformation:h(s)}}const a=l(f(),o);return c(a,a,s),{reprojection:r,transformBeforeProject:a}}_transformOriginLocal(e,t,r,o){const n=this._context.renderCoordsHelper.spatialReference,s=e.origin;Qe[0]=s.x,Qe[1]=s.y,Qe[2]=s.z??0;const a=f();U(e.spatialReference,Qe,a,n),u(rt,a);const{position:i,normal:l,tangent:c}=e.vertexAttributes,m=t===i?new Float64Array(t.length):t;Y(m,t,rt);const p=r?r===l?new Float32Array(r.length):r:null,h=o?o===c?new Float32Array(o.length):o:null;return r&&p&&K(r,p,rt),o&&h&&Z(o,h,rt),{transformation:a,position:m,normal:p,tangent:h}}_validateFaces(e,t){const r=e.vertexAttributes.position.length/3,o=t.faces;if(o&&o.length>0){let e=-1;for(let t=0;t<o.length;t++){const r=o[t];r>e&&(e=r)}if(r<=e)return this.logger.warn(`Vertex index ${e} is out of bounds of the mesh position buffer`),!1}else if(r%3!=0)return this.logger.warn("Mesh position buffer length must be a multiple of 9 if no component faces are defined (3 values per vertex * 3 vertices per triangle)"),!1;return!0}_isOutsideClippingArea(e){if(!this._context.clippingExtent)return!1;const t=e.vertexAttributes?.position;if(!t)return!1;const r=this._context.elevationProvider.spatialReference,o=te(e,r??e.spatialReference);return!!o&&(F(o,nt),!O(nt,this._context.clippingExtent))}_createGeometryInfo(e,t,r){if(!I(e.spatialReference,this._context.renderCoordsHelper.spatialReference))return this.logger.warn("Geometry spatial reference is not compatible with the view"),null;if(!this._validateVertexSpace(e))return null;if(this._isOutsideClippingArea(e))return null;const o=this._createBuffers(e,t);if(null==o)return null;const{positionBuffer:n,uvBuffer:s,colorBuffer:a,symbolColorBuffer:i,normalBuffer:l,tangentBuffer:c,objectTransformation:u,geometryTransformation:f}=o,p=e.components??st,h=new Array;let d=!1;const g=m(Xe,u),x=this._context.localOriginFactory.getOrigin(g);for(const m of p){if(!this._validateFaces(e,m))return null;const t=Ee(e,m);if(0===t.length)continue;const o=Fe(n,l,m,t);o.didFlipNormals&&(d=!0);const u=[["position",new be(n,t,3,!0)],["normal",new be(o.normals,o.indices,3,!0)]];a&&u.push(["color",new be(a,t,4,!0)]);let p=null;i&&(p=G(t.length),u.push(["symbolColor",new be(i,p,4,!0)])),s&&u.push(["uv0",new be(s,t,2,!0)]),c&&u.push(["tangent",new be(c,t,4,!0)]);const g=this._context.stage.renderView.getObjectAndLayerIdColor({graphicUid:r,layerViewUid:this._context.layerViewUid});g&&(p??=G(t.length),xe(u,g,p));const _=this._getOrCreateMaterial(e,m),y=new we(_,u,null,0);y.transformation=f,y.localOrigin=x,h.push(y)}return d&&this.logger.warn("Normals have been automatically flipped to be consistent with the counter clock wise face winding order. It is better to generate mesh geometries that have consistent normals."),0===h.length?null:{geometries:h,objectTransformation:u}}_updateMaterialParameters(e){this._materialInfoCache.forEachMaterialInfo(e),this._fastUpdateProcessor.forEachMaterialInfo(e),this._fastUpdateProcessor.forEachClonedMaterial((e,t)=>{t.setParameters(e.parameters)})}_validateVertexSpace(e){const{_context:{graphicsCoreOwner:{view:{state:{viewingMode:t}}}}}=this,{vertexSpace:r}=e;return 2!==t||"local"!==r.type||(this.logger.warn("Displaying a mesh with a local vertex space in a view in local viewing mode is not supported."),!1)}test(){return{...super.test(),materials:this._materialInfoCache.materials}}get _materialColor(){return this.symbolLayer.material?.color}}class Be{constructor(e,t,r){this.normals=e,this.indices=t,this.didFlipNormals=r}}function Ee(e,t){return t.faces??D(e.vertexAttributes.position.length/3)}function Fe(e,t,r,o){switch(r.shading||"flat"){default:case"source":return Ve(e,t,r,o);case"flat":return Oe(e,o);case"smooth":return $e(e,o)}}function Oe(e,t){const r=$(t.length),o=new Array(3*t.length);for(let n=0;n<t.length;n+=3){const s=De(e,t,n,tt);for(let e=0;e<3;e++)r[n+e]=s[e],o[n+e]=n/3}return new Be(r,o,!1)}function Ve(e,t,r,o){if(null==t)return Oe(e,o);let n=!1;if(!r.trustSourceNormals)for(let s=0;s<o.length;s+=3){De(e,o,s,tt);for(let e=0;e<3;e++){const r=3*o[s+e];Xe[0]=t[r],Xe[1]=t[r+1],Xe[2]=t[r+2],j(tt,Xe)<0&&(t[r]=-t[r],t[r+1]=-t[r+1],t[r+2]=-t[r+2],n=!0)}}return new Be(t,o,n)}function $e(e,t){const r={};for(let s=0;s<t.length;s+=3){const o=De(e,t,s,tt);for(let e=0;e<3;e++){const n=t[s+e];let a=r[n];a||(a={normal:P(),count:0},r[n]=a),x(a.normal,a.normal,o),a.count++}}const o=$(3*t.length),n=new Array(3*t.length);for(let s=0;s<t.length;s++){const e=r[t[s]];1!==e.count&&(T(e.normal,e.normal),e.count=1);for(let t=0;t<3;t++)o[3*s+t]=e.normal[t];n[s]=s}return new Be(o,n,!1)}function Ge(e,t,r,o,n,s){const a=3*t[r],i=3*t[r+1],l=3*t[r+2];o[0]=e[a],o[1]=e[a+1],o[2]=e[a+2],n[0]=e[i],n[1]=e[i+1],n[2]=e[i+2],s[0]=e[l],s[1]=e[l+1],s[2]=e[l+2]}function De(e,t,r,o){return Ge(e,t,r,Xe,Ze,et),w(Ze,Ze,Xe),w(et,et,Xe),C(Xe,Ze,et),T(o,Xe),o}function Le(e){if(!e)return null;const{scale:t,offset:o,rotation:n}=e;return{scale:t,offset:o,rotation:r(n)}}function Ne(e="repeat"){if("string"==typeof e){const t=He(e);return{s:t,t}}return{s:He(e.horizontal),t:He(e.vertical)}}function He(e){switch(e){case"clamp":return 33071;case"mirror":return 33648;default:return 10497}}function ke(e){const t=e.vertexAttributes.color;if(null==t)return!1;for(let r=3;r<t.length;r+=4)if(255!==t[r])return!0;return!1}function ze(e,t,r){t.diffuse=e.toUnitRGB(),t.opacity="opaque"===r.alphaMode?1:e.a}function qe(e){return e.data??e.url}function We(t){return null==t?"-":t instanceof e?t.toHex():t.contentHash}function Ye(e){const{offset:t,scale:r,rotation:o}=e??Je;return`${t[0]},${t[1]},${o},${r[0]},${r[1]}`}function Ke(e){return e.vertexAttributes.color}const Je=new H,Qe=P(),Xe=P(),Ze=P(),et=P(),tt=P(),rt=f(),ot=f(),nt=V(),st=[new L],at=P();export{Ue as Graphics3DMeshFillSymbolLayer};
2
+ import e from"../../../../Color.js";import{linearize as t}from"../../../../colorUtils.js";import{deg2rad as r}from"../../../../core/mathUtils.js";import{releaseMaybe as o}from"../../../../core/maybe.js";import{isPromiseLike as n}from"../../../../core/promiseUtils.js";import{normalFromMat4 as s,fromMat4 as a}from"../../../../core/libs/gl-matrix-2/math/mat3.js";import{create as i}from"../../../../core/libs/gl-matrix-2/factories/mat3f64.js";import{fromTranslation as l,multiply as c,invert as u,getTranslation as m}from"../../../../core/libs/gl-matrix-2/math/mat4.js";import{create as f,IDENTITY as p,clone as h}from"../../../../core/libs/gl-matrix-2/factories/mat4f64.js";import{ONES as d}from"../../../../core/libs/gl-matrix-2/factories/vec2f64.js";import{set as g,add as x,scale as _,transformMat4 as y,transformMat3 as v,normalize as T,scaleAndAdd as b,subtract as w,cross as C,dot as j}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{fromValues as M,ZEROS as R,ONES as A,create as P}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{ONES as S}from"../../../../core/libs/gl-matrix-2/factories/vec4f64.js";import{canProjectWithoutEngine as I}from"../../../../geometry/projectionUtils.js";import{computeTranslationToOriginAndRotation as U}from"../../../../geometry/projection/computeTranslationToOriginAndRotation.js";import{projectBuffer as B}from"../../../../geometry/projection/projectBuffer.js";import{projectVectorToVector as E}from"../../../../geometry/projection/projectVectorToVector.js";import{fromBuffer as F,intersectsClippingArea as O,create as V}from"../../../../geometry/support/aaBoundingBox.js";import{newFloatArray as $}from"../../../../geometry/support/FloatArray.js";import{getZeroIndexArray as G,getContinuousIndexArray as D}from"../../../../geometry/support/Indices.js";import L from"../../../../geometry/support/MeshComponent.js";import N from"../../../../geometry/support/MeshMaterialMetallicRoughness.js";import H from"../../../../geometry/support/MeshTextureTransform.js";import{isRelativeVertexSpace as k,isAbsoluteVertexSpace as z}from"../../../../geometry/support/meshVertexSpaceUtils.js";import{equals as q,isPlateCarree as W}from"../../../../geometry/support/spatialReferenceUtils.js";import{t as Y}from"../../../../chunks/vec3.js";import{transformNormal as K,transformVectorENUPlateCarree as J,transformVectorWMPlateCarree as Q,projectNormalToPCPF as X,transformTangent as Z,projectTangentToPCPF as ee}from"../../../../geometry/support/meshUtils/projection.js";import{projectMeshVertexPositions as te}from"../../../../geometry/support/meshUtils/projectMeshVertexPositions.js";import{isDrivenOpacityFallbackAlwaysOpaque as re}from"../../../../renderers/visualVariables/support/visualVariableUtils.js";import{getEmissiveMode as oe}from"../../../../symbols/support/materialUtils.js";import{isEncodedMeshTexture as ne}from"../../glTF/internal/resourceUtils.js";import{getTransformMatrix as se}from"../../glTF/internal/TextureTransformUtils.js";import{defaultSymbolLayerMemoryComplexity as ae}from"./defaultSymbolComplexity.js";import{perObjectElevationAligner as ie}from"./ElevationAligners.js";import{needsElevationUpdates3D as le,evaluateElevationInfoAtPoint as ce}from"./elevationAlignmentUtils.js";import{preparePatchEmissiveStrength as ue}from"./emissiveUtils.js";import{Graphics3DMeshObject3DGraphicLayer as me}from"./Graphics3DMeshObject3DGraphicLayer.js";import{Object3DEdgeState as fe}from"./Graphics3DObject3DGraphicLayer.js";import{Graphics3DSymbolLayer as pe,nanFallbackColor as he}from"./Graphics3DSymbolLayer.js";import{MaterialInfoCache as de,MeshFastUpdateProcessor as ge}from"./MeshFastUpdateProcessor.js";import{addOlidAttribute as xe}from"./olidUtils.js";import{SymbolComplexity as _e}from"./SymbolComplexity.js";import{hasEdges as ye,createMaterial as ve}from"../support/edgeUtils.js";import{debugFlags as Te}from"../../support/debugFlags.js";import{Attribute as be}from"../../webgl-engine/lib/Attribute.js";import{Geometry as we}from"../../webgl-engine/lib/Geometry.js";import{ManagedTexture as Ce}from"../../webgl-engine/lib/ManagedTexture.js";import{Object3D as je}from"../../webgl-engine/lib/Object3D.js";import{DefaultMaterial as Me}from"../../webgl-engine/materials/DefaultMaterial.js";import{NativeLineMaterial as Re}from"../../webgl-engine/materials/NativeLineMaterial.js";import{useSchematicPBR as Ae,advancedMRRFactors as Pe,schematicMRRFactors as Se}from"../../webgl-engine/materials/pbrUtils.js";const Ie=["mesh"];class Ue extends pe{constructor(e,t,r,o){super(e,t,r,o,re(t)),this._materialInfoCache=new de,this._fastUpdateProcessor=new ge,this._textures=new Map,this.ensureDrapedStatus(!1)}async doLoad(){Te.DRAW_MESH_GEOMETRY_NORMALS&&(this._debugVertexNormalMaterial=new Re({color:[1,0,1,1]}),this._debugTangentNormalMaterial=new Re({color:[1,.5,0,1]}),this._debugFaceNormalMaterial=new Re({color:[0,1,1,1]})),this.updateComplexity()}destroy(){super.destroy(),this._textures.forEach(e=>e.unload()),this._context.stage.removeTextures(Array.from(this._textures.values())),this._materialInfoCache.clear(),this._textures.clear(),this._fastUpdateProcessor.destroy()}get materials(){return this._materialInfoCache.materials}createGraphics3DGraphic(e){const t=e.graphic;if(!this._validateGeometry(t.geometry,Ie,"fill on mesh-3d"))return null;const r=this.createElevationContextForGraphic(t),o=e.renderingInfo;return this._createAs3DShape(t,o,r,t.uid)}onRemoveGraphic(e){this._fastUpdateProcessor.onRemoveGraphic(e,this._materialInfoCache)}layerOpacityChanged(e,t){const r=this._getLayerOpacity();this._updateMaterialParameters(e=>{e.material.setParameters({layerOpacity:r});const t=e.material.parameters;this._setMaterialTextureAlphaMode(t,e)}),e?.forEach(e=>t(e)?.layerOpacityChanged(r,this._context.isAsync))}layerScreenSizePerspectiveChanged(){}layerElevationInfoChanged(e,t){return this.updateGraphics3DGraphicElevationInfo(e,t,le)}slicePlaneEnabledChanged(e,t){return this._updateMaterialParameters(({material:e})=>{e.setParameters({hasSlicePlane:this._context.slicePlaneEnabled})}),e?.forEach(e=>t(e)?.slicePlaneEnabledChanged(this._context.slicePlaneEnabled,this._context.isAsync)),!0}physicalBasedRenderingChanged(){const e=this._usePBR();return this._updateMaterialParameters(({material:t})=>t.setParameters({usePBR:e})),!0}updateTransform(e,t,r,o){if(!e.fastTransformUpdatesAllowed)return!1;const n=e.fastTransformUpdatesEnabled;switch(o){case 0:if(n)return!0;break;case 1:if(!n)return!0;break;default:if(!n)return!!this.updateTransform(e,t,r,0)&&(e.autoDisableFastTransformUpdates(()=>this.updateTransform(e,t,r,1)),!0)}const s=this._context.renderCoordsHelper.spatialReference,a=ot,{origin:i,transform:l}=r;if(!U(t,g(Xe,i.x,i.y,i.z??0),a,s))return!1;switch(o){case 0:this._fastUpdateProcessor.enable(e,this._materialInfoCache,this._context);break;case 1:this._fastUpdateProcessor.disable(e,this._materialInfoCache)}e.updateFastLocalOrigin(a,l,this._context.localOriginFactory,!1);const{elevationContext:c}=e;c.centerInElevationSR=this._getCenterInElevationSR(a);const{elevationProvider:u,renderCoordsHelper:m}=this._context,f=(e,t)=>ce(e,u,c,m,t);return e.alignedSampledElevation=ie(e,c,u.spatialReference,f,m,a),e.updateTransform(a,l,this._context.isAsync),e.updateAutoDisableFastTransformUpdates(()=>this.updateTransform(e,t,r,1)),!0}computeComplexity(){if(!this._textures||0===this._textures.size)return super.computeComplexity();let e=0;for(const o of this._textures.values())e+=o.usedMemory;const t={...ae(this.symbol,this.symbolLayer),resourceBytes:e},r=ye(this.symbolLayer)?2:0;return new _e({drawCallsPerFeature:r,memory:t})}_requiresSymbolVertexColors(){return this._hasDrivenColorOrOpacity}_materialPropertiesDefault(e,t){const r=this._requiresSymbolVertexColors(),o=!!e.vertexAttributes.color,n=!!e.vertexAttributes.tangent;return{hasSymbolVertexColors:r,hasVertexColors:o,hasVertexTangents:n,unlit:!1,uid:`vc:${o},vt:${n},vct${t},svc:${r}`}}_materialProperties(e,t,r){const o=this._materialPropertiesDefault(e,r);if(!t.material)return o;const{color:n,colorTexture:s,colorTextureTransform:a,normalTexture:i,normalTextureTransform:l,doubleSided:c,alphaCutoff:u,alphaMode:m}=t.material,f=We(n),p=We(s),h=Ye(a),d=We(i),g=Ye(l);if(o.color=n,o.colorTexture=s,o.normalTexture=i,o.uid=`${o.uid},cmuid:${f},ctmuid:${p},cttuid:${h},ntmuid:${d},nttuid:${g},ds:${c},ac:${u},am:${m}`,t.material instanceof N){const{metallic:e,roughness:r,metallicRoughnessTexture:n,metallicRoughnessTextureTransform:s,emissiveColor:i,emissiveStrength:c,emissiveTexture:u,emissiveTextureTransform:m,occlusionTexture:f,occlusionTextureTransform:p,unlit:h}=t.material,d=We(n),g=Ye(s),x=We(i),_=We(u),y=Ye(m),v=We(f),T=Ye(p);o.uid=[o.uid,`mrm:${e}`,`mrr:${r}`,`mrt:${d}`,`mrtt:${g}`,`emuid:${x}`,`ems:${c}`,`etmuid:${_}`,`ett:${y}`,`otmuid:${v}`,`ott:${T}`,`unlit:${h}`].join(","),o.metallic=e,o.roughness=r,o.metallicRoughnessTexture=n,o.emissiveColor=h?void 0:i,o.emissiveStrength=c,o.emissiveTexture=h?void 0:u,o.occlusionTexture=f,o.unlit=h,o.colorTextureTransform=Le(a),o.normalTextureTransform=Le(l),o.emissiveTextureTransform=Le(m),o.occlusionTextureTransform=Le(p),o.metallicRoughnessTextureTransform=Le(s)}return o}_getInternalTexture(e,t=!1,r=1){const s=qe(e);if(!s)return null;const a=`${e.contentHash}/${r}`;let i=this._textures.get(a);if(i){const e=this._context.stage.renderView.textures;let t=null;const r=e.acquire(i.id);return null==r||n(r)||(i.events.on("unloaded",()=>t=o(t)),t=r),i}let l=null;const c=this._context.stage.renderView.renderingContext.parameters.maxMaxAnisotropy,u={wrap:Ne(e.wrap),noUnpackFlip:!0,maxAnisotropy:c,mipmap:c>1};return ne(s)?(l=s.data,u.preMultiplyAlpha=!1,u.encoding=s.encoding):(l=s,u.preMultiplyAlpha=1!==r,u.compressionOptions=t?{compressionTracker:this._context.compressionTracker,compressionCallback:()=>this.updateComplexity()}:void 0),i=new Ce(l,u),this._textures.set(a,i),i.events.on("loaded",()=>this.updateComplexity()),i.load(this._context.stage.renderView.renderingContext),this._context.stage.addTexture(i),i.events.on("unloaded",()=>{this._textures.delete(a)}),i}_setInternalMaterialTextureParameters(e,r){if(null!=e.colorTexture){const t=1!==r.textureAlphaMode,o=this._getInternalTexture(e.colorTexture,t,r.textureAlphaMode);o?(r.textureId=o.id,r.textureAlphaPremultiplied=!!o.parameters.preMultiplyAlpha):r.textureId=void 0}if(e.normalTexture&&(r.normalTextureId=this._getInternalTexture(e.normalTexture)?.id),e.emissiveColor){const o=e.emissiveColor?.toUnitRGB();r.emissiveBaseColor=M(t(o[0]),t(o[1]),t(o[2]))}e.emissiveStrength&&(r.emissiveStrengthKHR=e.emissiveStrength),e.emissiveTexture&&(r.emissiveTextureId=this._getInternalTexture(e.emissiveTexture)?.id),e.occlusionTexture&&(r.occlusionTextureId=this._getInternalTexture(e.occlusionTexture,!0)?.id),e.metallicRoughnessTexture&&(r.metallicRoughnessTextureId=this._getInternalTexture(e.metallicRoughnessTexture,!0)?.id)}_setInternalMaterialParameters(e,t,r){null!=e.color&&ze(e.color,t,r),this._setInternalMaterialTextureParameters(e,t),t.colorTextureTransformMatrix=se(e.colorTextureTransform),t.normalTextureTransformMatrix=se(e.normalTextureTransform);const o=null!=e.normalTextureTransform?.scale?e.normalTextureTransform?.scale:d;t.scale=[o[0],o[1]],t.occlusionTextureTransformMatrix=se(e.occlusionTextureTransform),t.emissiveTextureTransformMatrix=se(e.emissiveTextureTransform),t.metallicRoughnessTextureTransformMatrix=se(e.metallicRoughnessTextureTransform)}_setExternalMaterialParameters(e,t=this._materialColor){const r=this._drivenProperties.color,o=this._drivenProperties.opacity;if(r)e.externalColor=S;else{const r=t??null;if(r){const t=r.toUnitRGBA();o&&(t[3]=1),e.externalColor=t}else e.externalColor=he}e.colorMixMode=this.symbolLayer.material?.colorMixMode??"multiply",e.castShadows=!!this.symbolLayer.castShadows,e.emissiveStrengthFromSymbol=this.symbolLayer?.material?.emissive?.strength??1,e.emissiveSource=oe(this.symbolLayer?.material?.emissive?.source??"emissive")}_getOrCreateMaterial(e,t){const r=t.material?.color,o=t.material?.colorTexture,n=t.material?.alphaMode,s="blend"===n,a=!("opaque"===n)&&(ke(e)||null!=r&&r.a<1||o?.transparent||s),i=this._materialProperties(e,t,a),l=this._materialInfoCache.byUid(i.uid);if(l)return this._setInternalMaterialTextureParameters(i,l.material.parameters),l.material;const c={uid:i.uid,material:null,isComponentTransparent:a,alphaMode:t.material?t.material.alphaMode:"opaque"},u=Ae({normalTexture:i.normalTexture,metallicRoughnessTexture:i.metallicRoughnessTexture,metallicFactor:i.metallic,roughnessFactor:i.roughness,emissiveTexture:i.unlit?void 0:i.emissiveTexture,emissiveFactor:i.unlit?R:i.emissiveColor?.toUnitRGB(),occlusionTexture:i.occlusionTexture}),m={usePBR:this._usePBR(),isSchematic:u,hasVertexColors:i.hasVertexColors,hasSymbolColors:i.hasSymbolVertexColors,hasVertexTangents:i.hasVertexTangents,ambient:R,diffuse:A,opacity:1,doubleSided:!0,doubleSidedType:"winding-order",cullFace:0,unlit:i.unlit,layerOpacity:this._getLayerOpacity(),hasSlicePlane:this._context.slicePlaneEnabled,drivenOpacity:this.needsDrivenTransparentPass||c.isComponentTransparent};m.mrrFactors=u?Se:[i.metallic,i.roughness,Pe[2]],t.material&&(m.doubleSided=t.material.doubleSided,m.cullFace=t.material.doubleSided?0:2,m.textureAlphaCutoff=t.material.alphaCutoff),this._setExternalMaterialParameters(m),this._setMaterialTextureAlphaMode(m,c),this._setInternalMaterialParameters(i,m,c);const f=new Me(m,this._context);return c.material=f,this._materialInfoCache.set(i.uid,c),f}prepareSymbolLayerPatch(e){if("partial"!==e.diff.type)return;const t=e.diff.diff;this._preparePatchColor(e,t),this._preparePatchEmissive(e,t)}_preparePatchColor(e,t){if(!t.material||"partial"!==t.material.type)return;const r=t.material.diff;if(!r.color||"complete"!==r.color.type||null==r.color.newValue||null==r.color.oldValue)return;const o=r.color.newValue;delete r.color,e.symbolLayerStatePatches.push(()=>{this._updateMaterialParameters(e=>{const t=e.material.parameters;this._setExternalMaterialParameters(t,o),this._setMaterialTextureAlphaMode(t,e),e.material.setParameters({externalColor:t.externalColor})})})}_preparePatchEmissive(e,t){return ue(e,t,e=>{this._updateMaterialParameters(t=>{t.material.setParameters({emissiveStrengthFromSymbol:e??1})})},this.view.stage.renderView.renderingContext.driverTest.floatBufferBlend.result)}_usePBR(){return this._context.physicalBasedRenderingEnabled}_setMaterialTextureAlphaMode(e,t){if("auto"===t.alphaMode){const r=this.needsDrivenTransparentPass||t.isComponentTransparent||(e.layerOpacity??1)<1||(e.opacity??1)<1||(e.externalColor?.[3]??1)<1;e.textureAlphaMode=r?3:1}else e.textureAlphaMode="opaque"===t.alphaMode?1:"mask"===t.alphaMode?2:0}_createFaceDebugNormals(e,t){const r=t.length,o=e.spatialReference.isGeographic?20015077/180:1,n=.1*Math.max(e.extent.width*o,e.extent.height*o,e.extent.zmax-e.extent.zmin),a=[],l=[],c=t[0].transformation,u=s(i(),c);for(let s=0;s<r;s++){const e=t[s].attributes.get("position");if(!e)continue;const r=e.data,o=e.indices;for(let t=0;t<o.length;t+=3)De(r,o,t,tt),Ge(r,o,t,Xe,Ze,et),x(Xe,Xe,Ze),x(Xe,Xe,et),_(Xe,Xe,1/3),y(Xe,Xe,c),a.push(...Xe),v(tt,tt,u),T(tt,tt),b(Xe,Xe,tt,n),a.push(...Xe),l.push(l.length),l.push(l.length)}return a.length?new we(this._debugFaceNormalMaterial,[["position",new be(a,l,3,!0)]],null):null}_createPerVertexDebugVectors(e,t,r,o,n){const l=t.length,c=e.spatialReference.isGeographic?20015077/180:1,u=.1*n*Math.max(e.extent.width*c,e.extent.height*c,e.extent.zmax-e.extent.zmin),m=[],f=[],p=t[0].transformation,h=s(i(),p);"tangent"===r&&a(h,p);for(let s=0;s<l;s++){const e=t[s],o=e.attributes.get("position"),n=e.attributes.get(r);if(!o||!n)continue;const a=o.data,i=o.indices,l=n.data,c=n.indices;for(let t=0;t<i.length;t++){const e=3*i[t],r=c[t]*n.stride;g(Xe,a[e+0],a[e+1],a[e+2]),y(Xe,Xe,p),m.push(...Xe),g(Ze,l[r+0],l[r+1],l[r+2]),v(Ze,Ze,h),T(Ze,Ze),b(Xe,Xe,Ze,u),m.push(...Xe),f.push(f.length),f.push(f.length)}}return m.length?new we(o,[["position",new be(m,f,3,!0)]],null):null}_createAs3DShape(e,t,r,o){const n=e.geometry;if("mesh"!==n.type)return null;const s=this._createGeometryInfo(n,t,o);if(null==s)return null;const{geometries:a,objectTransformation:i}=s;if(Te.DRAW_MESH_GEOMETRY_NORMALS){const e=this._createPerVertexDebugVectors(n,a,"normal",this._debugVertexNormalMaterial,1),t=this._createPerVertexDebugVectors(n,a,"tangent",this._debugTangentNormalMaterial,.5),r=this._createFaceDebugNormals(n,a);e&&a.push(e),t&&a.push(t),r&&a.push(r)}const l=this._context.layerViewUid,c=new je({geometries:a,layerViewUid:l,graphicUid:o,isElevationSource:!0});c.transformation=i;const u=ve(this.symbolLayer,{opacity:this._getLayerOpacity()}),m=u?new fe(a[0].material,u,this._context.slicePlaneEnabled):null,f=new me(this,c,null,ie,r,m);this._fastUpdateProcessor.onAddGraphic(),f.needsElevationUpdates=le(r.mode),f.useObjectOriginAsAttachmentOrigin=!0,f.fastTransformUpdatesAllowed=this._fastTransformUpdatesAllowed(n),r.centerInElevationSR=this._getCenterInElevationSR(c.transformation);const{elevationProvider:p,renderCoordsHelper:h}=this._context,d=(e,t)=>ce(e,p,r,h,t);return f.alignedSampledElevation=ie(f,r,p.spatialReference,d,h),f}_fastTransformUpdatesAllowed(e){const{vertexSpace:t,spatialReference:r}=e;if(!k(t))return!1;const{type:o}=t,{view:n}=this._context.graphicsCoreOwner,{viewingMode:s}=n.state,a=n.spatialReference;return 1===s&&"local"===o||2===s&&q(a,r)&&"georeferenced"===o&&!r.isGeographic}_getElevationSR(){return this._context.elevationProvider.spatialReference??null}_getCenterInElevationSR(e){const t=P(),r=g(at,e[12],e[13],e[14]);return E(r,this._context.renderCoordsHelper.spatialReference,t,this._getElevationSR()),t}_passthroughReprojectionInfo(e){return 0===e.reprojection&&!!e.objectTransformation}_createPositionBuffer(e,t){const r=e.vertexAttributes.position;let o,n=r;if(0===t.reprojection)return{position:n,georeferencedPositionBuffer:o};const s=1===t.reprojection?t.transformBeforeProject:null;s&&(n=Y(new Float64Array(n.length),n,s));const{normal:a,tangent:i}=e.vertexAttributes;this._passthroughReprojectionInfo(t)||!a&&!i||(o=n);const l=n===r||n===o?new Float64Array(n.length):n;return B(n,e.spatialReference,0,l,this._context.renderCoordsHelper.spatialReference,0),{position:l,georeferencedPositionBuffer:o}}_createNormalBuffer(e,t,r,o){const n=e.vertexAttributes.normal;if(null==n)return null;let s=n;const a=1===o.reprojection?o.transformBeforeProject:null;a&&(s=K(s,new Float32Array(s.length),a));const i=this._context.graphicsCoreOwner.view.viewingMode;if(0===o.reprojection)return s;if("local"===i){if(!W(this._context.renderCoordsHelper.spatialReference))return s;if(null==r)return null;if(e.spatialReference.isGeographic){const e=s===n?new Float32Array(s.length):s;return J(s,0,r,e)}if(e.spatialReference.isWebMercator){const e=s===n?new Float32Array(s.length):s;return Q(s,0,r,e)}return s}if(null==r)return null;const l=s===n?new Float32Array(s.length):s,c=this._context.renderCoordsHelper.spatialReference;return X(s,r,e.spatialReference,t,c,l)}_createTangentBuffer(e,t,r,o){const n=e.vertexAttributes.tangent;if(null==n)return null;let s=n;const a=1===o.reprojection?o.transformBeforeProject:null;a&&(s=Z(s,new Float32Array(s.length),a));const i=this._context.graphicsCoreOwner.view.viewingMode;if(0===o.reprojection)return s;if("local"===i){if(!W(this._context.renderCoordsHelper.spatialReference))return s;if(null==r)return null;if(e.spatialReference.isGeographic){const e=s===n?new Float32Array(s.length):s;return J(s,1,r,e)}if(e.spatialReference.isWebMercator){const e=s===n?new Float32Array(s.length):s;return Q(s,1,r,e)}return s}if(null==r)return null;const l=s===n?new Float32Array(s.length):s,c=this._context.renderCoordsHelper.spatialReference;return ee(s,r,e.spatialReference,t,c,l)}_createSymbolColorBuffer(e){return this._requiresSymbolVertexColors()?new Uint8Array(this._getDrivenUInt8ColorWithNaNSupport(e,this._materialColor,!0)):null}_createBuffers(e,t){const r=e.vertexAttributes&&e.vertexAttributes.position;if(!r)return this.logger.warn("Mesh geometry must contain position vertex attributes"),null;const o=e.vertexAttributes.normal,n=e.vertexAttributes.uv,s=e.vertexAttributes.tangent;if(o&&o.length!==r.length)return this.logger.warn("Mesh normal vertex buffer must contain the same number of elements as the position buffer"),null;if(s&&s.length/4!=r.length/3)return this.logger.warn("Mesh tangent vertex buffer must contain the same number of elements as the position buffer"),null;if(n&&n.length/2!=r.length/3)return this.logger.warn("Mesh uv vertex buffer must contain the same number of elements as the position buffer"),null;const a=this._computeReprojectionInfo(e),{position:i,georeferencedPositionBuffer:l}=this._createPositionBuffer(e,a),c=Ke(e),u=this._createSymbolColorBuffer(t),m=this._createNormalBuffer(e,i,l,a),p=this._createTangentBuffer(e,i,l,a),h=n,{transformation:d,position:g,normal:x,tangent:_}=this._passthroughReprojectionInfo(a)?{transformation:a.objectTransformation,position:i,normal:m,tangent:p}:this._transformOriginLocal(e,i,m,p);return{positionBuffer:g,normalBuffer:x,tangentBuffer:_,uvBuffer:h,colorBuffer:c,symbolColorBuffer:u,objectTransformation:d,geometryTransformation:0===a.reprojection&&a.geometryTransformation?a.geometryTransformation:f()}}_computeReprojectionInfo(e){const{vertexSpace:t}=e,r="georeferenced"===t.type?q(this._context.renderCoordsHelper.spatialReference,e.spatialReference)?0:1:0;if(z(t))return{reprojection:r};const o=t.origin,n=f(),s=e.transform?.localMatrix??p;if(0===r){U(e.spatialReference,o,n,this._context.renderCoordsHelper.spatialReference);return{reprojection:r,objectTransformation:n,geometryTransformation:h(s)}}const a=l(f(),o);return c(a,a,s),{reprojection:r,transformBeforeProject:a}}_transformOriginLocal(e,t,r,o){const n=this._context.renderCoordsHelper.spatialReference,s=e.origin;Qe[0]=s.x,Qe[1]=s.y,Qe[2]=s.z??0;const a=f();U(e.spatialReference,Qe,a,n),u(rt,a);const{position:i,normal:l,tangent:c}=e.vertexAttributes,m=t===i?new Float64Array(t.length):t;Y(m,t,rt);const p=r?r===l?new Float32Array(r.length):r:null,h=o?o===c?new Float32Array(o.length):o:null;return r&&p&&K(r,p,rt),o&&h&&Z(o,h,rt),{transformation:a,position:m,normal:p,tangent:h}}_validateFaces(e,t){const r=e.vertexAttributes.position.length/3,o=t.faces;if(o&&o.length>0){let e=-1;for(let t=0;t<o.length;t++){const r=o[t];r>e&&(e=r)}if(r<=e)return this.logger.warn(`Vertex index ${e} is out of bounds of the mesh position buffer`),!1}else if(r%3!=0)return this.logger.warn("Mesh position buffer length must be a multiple of 9 if no component faces are defined (3 values per vertex * 3 vertices per triangle)"),!1;return!0}_isOutsideClippingArea(e){if(!this._context.clippingExtent)return!1;const t=e.vertexAttributes?.position;if(!t)return!1;const r=this._context.elevationProvider.spatialReference,o=te(e,r??e.spatialReference);return!!o&&(F(o,nt),!O(nt,this._context.clippingExtent))}_createGeometryInfo(e,t,r){if(!I(e.spatialReference,this._context.renderCoordsHelper.spatialReference))return this.logger.warn("Geometry spatial reference is not compatible with the view"),null;if(!this._validateVertexSpace(e))return null;if(this._isOutsideClippingArea(e))return null;const o=this._createBuffers(e,t);if(null==o)return null;const{positionBuffer:n,uvBuffer:s,colorBuffer:a,symbolColorBuffer:i,normalBuffer:l,tangentBuffer:c,objectTransformation:u,geometryTransformation:f}=o,p=e.components??st,h=new Array;let d=!1;const g=m(Xe,u),x=this._context.localOriginFactory.getOrigin(g);for(const m of p){if(!this._validateFaces(e,m))return null;const t=Ee(e,m);if(0===t.length)continue;const o=Fe(n,l,m,t);o.didFlipNormals&&(d=!0);const u=[["position",new be(n,t,3,!0)],["normal",new be(o.normals,o.indices,3,!0)]];a&&u.push(["color",new be(a,t,4,!0)]);let p=null;i&&(p=G(t.length),u.push(["symbolColor",new be(i,p,4,!0)])),s&&u.push(["uv0",new be(s,t,2,!0)]),c&&u.push(["tangent",new be(c,t,4,!0)]);const g=this._context.stage.renderView.getObjectAndLayerIdColor({graphicUid:r,layerViewUid:this._context.layerViewUid});g&&(p??=G(t.length),xe(u,g,p));const _=this._getOrCreateMaterial(e,m),y=new we(_,u,null);y.transformation=f,y.localOrigin=x,h.push(y)}return d&&this.logger.warn("Normals have been automatically flipped to be consistent with the counter clock wise face winding order. It is better to generate mesh geometries that have consistent normals."),0===h.length?null:{geometries:h,objectTransformation:u}}_updateMaterialParameters(e){this._materialInfoCache.forEachMaterialInfo(e),this._fastUpdateProcessor.forEachMaterialInfo(e),this._fastUpdateProcessor.forEachClonedMaterial((e,t)=>{t.setParameters(e.parameters)})}_validateVertexSpace(e){const{_context:{graphicsCoreOwner:{view:{state:{viewingMode:t}}}}}=this,{vertexSpace:r}=e;return 2!==t||"local"!==r.type||(this.logger.warn("Displaying a mesh with a local vertex space in a view in local viewing mode is not supported."),!1)}test(){return{...super.test(),materials:this._materialInfoCache.materials}}get _materialColor(){return this.symbolLayer.material?.color}}class Be{constructor(e,t,r){this.normals=e,this.indices=t,this.didFlipNormals=r}}function Ee(e,t){return t.faces??D(e.vertexAttributes.position.length/3)}function Fe(e,t,r,o){switch(r.shading||"flat"){default:case"source":return Ve(e,t,r,o);case"flat":return Oe(e,o);case"smooth":return $e(e,o)}}function Oe(e,t){const r=$(t.length),o=new Array(3*t.length);for(let n=0;n<t.length;n+=3){const s=De(e,t,n,tt);for(let e=0;e<3;e++)r[n+e]=s[e],o[n+e]=n/3}return new Be(r,o,!1)}function Ve(e,t,r,o){if(null==t)return Oe(e,o);let n=!1;if(!r.trustSourceNormals)for(let s=0;s<o.length;s+=3){De(e,o,s,tt);for(let e=0;e<3;e++){const r=3*o[s+e];Xe[0]=t[r],Xe[1]=t[r+1],Xe[2]=t[r+2],j(tt,Xe)<0&&(t[r]=-t[r],t[r+1]=-t[r+1],t[r+2]=-t[r+2],n=!0)}}return new Be(t,o,n)}function $e(e,t){const r={};for(let s=0;s<t.length;s+=3){const o=De(e,t,s,tt);for(let e=0;e<3;e++){const n=t[s+e];let a=r[n];a||(a={normal:P(),count:0},r[n]=a),x(a.normal,a.normal,o),a.count++}}const o=$(3*t.length),n=new Array(3*t.length);for(let s=0;s<t.length;s++){const e=r[t[s]];1!==e.count&&(T(e.normal,e.normal),e.count=1);for(let t=0;t<3;t++)o[3*s+t]=e.normal[t];n[s]=s}return new Be(o,n,!1)}function Ge(e,t,r,o,n,s){const a=3*t[r],i=3*t[r+1],l=3*t[r+2];o[0]=e[a],o[1]=e[a+1],o[2]=e[a+2],n[0]=e[i],n[1]=e[i+1],n[2]=e[i+2],s[0]=e[l],s[1]=e[l+1],s[2]=e[l+2]}function De(e,t,r,o){return Ge(e,t,r,Xe,Ze,et),w(Ze,Ze,Xe),w(et,et,Xe),C(Xe,Ze,et),T(o,Xe),o}function Le(e){if(!e)return null;const{scale:t,offset:o,rotation:n}=e;return{scale:t,offset:o,rotation:r(n)}}function Ne(e="repeat"){if("string"==typeof e){const t=He(e);return{s:t,t}}return{s:He(e.horizontal),t:He(e.vertical)}}function He(e){switch(e){case"clamp":return 33071;case"mirror":return 33648;default:return 10497}}function ke(e){const t=e.vertexAttributes.color;if(null==t)return!1;for(let r=3;r<t.length;r+=4)if(255!==t[r])return!0;return!1}function ze(e,t,r){t.diffuse=e.toUnitRGB(),t.opacity="opaque"===r.alphaMode?1:e.a}function qe(e){return e.data??e.url}function We(t){return null==t?"-":t instanceof e?t.toHex():t.contentHash}function Ye(e){const{offset:t,scale:r,rotation:o}=e??Je;return`${t[0]},${t[1]},${o},${r[0]},${r[1]}`}function Ke(e){return e.vertexAttributes.color}const Je=new H,Qe=P(),Xe=P(),Ze=P(),et=P(),tt=P(),rt=f(),ot=f(),nt=V(),st=[new L],at=P();export{Ue as Graphics3DMeshFillSymbolLayer};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import e from"../../../../core/Logger.js";import{throwIfAborted as t}from"../../../../core/promiseUtils.js";import{hydrateGeometry as r}from"../../../../layers/graphics/hydratedFeatures.js";import{loadArcade as n}from"../../../../support/loadArcade.js";const c=()=>e.getLogger("esri.views.3d.layers.graphics.featureExpressionInfoUtils");function o(e){return{cachedResult:e.cachedResult,arcade:e.arcade?{func:e.arcade.func,context:e.arcade.modules.arcadeUtils.createExecContext(null,{sr:e.arcade.context.spatialReference}),modules:e.arcade.modules}:null}}function u(e){const t=e?.expression;if("string"==typeof t){const e=m(t);if(null!=e)return{cachedResult:e}}return null}async function s(e,r,c,o){const u=e?.expression;if("string"!=typeof u)return null;const s=m(u);if(null!=s)return{cachedResult:s};const a=await n();t(c);const l=a.arcadeUtils,i=l.createSyntaxTree(u);if(!i)return null;if(l.dependsOnView(i))return null!=o&&o.error("Expressions containing '$view' are not supported on ElevationInfo"),{cachedResult:0};const d=l.createFunction(i);if(!d)return null;return{arcade:{modules:a,func:d,context:l.createExecContext(null,{sr:r})}}}function a(e,t,r){return e.arcadeUtils.createFeature(t.attributes,t.geometry,r)}function l(e,t){if(null!=e&&!p(e)){if(!t||!e.arcade)return void c().errorOncePerTick("Arcade support required but not provided");const n=t;n._geometry&&(n._geometry=r(n._geometry)),e.arcade.modules.arcadeUtils.updateExecContext(e.arcade.context,t)}}function i(e){if(null!=e){if(p(e))return e.cachedResult;const t=e.arcade;let r=t?.modules.arcadeUtils.executeFunction(t.func,t.context);return"number"!=typeof r&&(e.cachedResult=0,r=0),r}return 0}function d(e,t=!1){let r=e?.featureExpressionInfo;const n=r?.expression;return t||"0"===n||(r=null),r??null}const f={cachedResult:0};function p(e){return null!=e.cachedResult}function m(e){return"0"===e?0:null}export{o as clone,s as createContext,u as createContextWithoutExpressionSupport,a as createFeature,i as execute,d as extractExpressionInfo,l as setContextFeature,f as zeroContext};
2
+ import e from"../../../../core/Logger.js";import{throwIfAborted as r}from"../../../../core/promiseUtils.js";import{loadArcade as t}from"../../../../support/loadArcade.js";const n=()=>e.getLogger("esri.views.3d.layers.graphics.featureExpressionInfoUtils");function c(e){return{cachedResult:e.cachedResult,arcade:e.arcade?{func:e.arcade.func,context:e.arcade.modules.arcadeUtils.createExecContext(null,{sr:e.arcade.context.spatialReference}),modules:e.arcade.modules}:null}}function o(e){const r=e?.expression;if("string"==typeof r){const e=p(r);if(null!=e)return{cachedResult:e}}return null}async function u(e,n,c,o){const u=e?.expression;if("string"!=typeof u)return null;const a=p(u);if(null!=a)return{cachedResult:a};const s=await t();r(c);const l=s.arcadeUtils,i=l.createSyntaxTree(u);if(!i)return null;if(l.dependsOnView(i))return null!=o&&o.error("Expressions containing '$view' are not supported on ElevationInfo"),{cachedResult:0};const d=l.createFunction(i);if(!d)return null;return{arcade:{modules:s,func:d,context:l.createExecContext(null,{sr:n})}}}function a(e,r,t){return e.arcadeUtils.arcadeFeature.createFromGraphicLikeObject(e.arcadeUtils.createArcadeGeometryFromDehydratedGeometry(r.geometry),r.attributes,t,null)}function s(e,r){if(null!=e&&!f(e)){if(!r||!e.arcade)return void n().errorOncePerTick("Arcade support required but not provided");e.arcade.modules.arcadeUtils.updateExecContext(e.arcade.context,r)}}function l(e){if(null!=e){if(f(e))return e.cachedResult;const r=e.arcade;let t=r?.modules.arcadeUtils.executeFunction(r.func,r.context);return"number"!=typeof t&&(e.cachedResult=0,t=0),t}return 0}function i(e,r=!1){let t=e?.featureExpressionInfo;const n=t?.expression;return r||"0"===n||(t=null),t??null}const d={cachedResult:0};function f(e){return null!=e.cachedResult}function p(e){return"0"===e?0:null}export{c as clone,u as createContext,o as createContextWithoutExpressionSupport,a as createFeature,l as execute,i as extractExpressionInfo,s as setContextFeature,d as zeroContext};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import t from"../../../../geometry/Extent.js";import e from"../../../../geometry/Polygon.js";import{getContinuousIndexArray as i,getZeroIndexArray as o}from"../../../../geometry/support/Indices.js";import{addOlidAttribute as n}from"./olidUtils.js";import{Attribute as r}from"../../webgl-engine/lib/Attribute.js";import{Geometry as a}from"../../webgl-engine/lib/Geometry.js";function u(t){const e=t.attributeData.position.length/3,u=i(e),s=[["position",new r(t.attributeData.position,u,3,!0)]],{boundingRect:l,textureElementIndices:c,boundingRectIndices:p}=t.attributeData,m=null!=l,b=o(m?p?.length??1:e);null!=t.attributeData.colorFeature?s.push(["colorFeatureAttribute",new r([t.attributeData.colorFeature],b,1,!0)]):t.attributeData.color&&s.push(["color",new r(t.attributeData.color,b,4,!0)]),t.attributeData.uvMapSpace&&s.push(["uvMapSpace",new r(t.attributeData.uvMapSpace,u,4,!0)]),m&&(s.push(["boundingRect",new r(l,p??[0],9,!0)]),null!=c&&s.push(["textureElementIndex",new r(c,u,1,!0)]));const d=t.attributeData.olidColor;return null!=d&&n(s,d,o(e)),new a(t.material,s,t.mapPositions,0,void 0,void 0,t.indices)}function s(t,e=null){const u=t.attributeData.position.length/3,s=i(u),l=[["position",new r(t.attributeData.position,s,3,!0)],["uv0",new r(t.attributeData.uv0,s,2,!0)]];return null!=e&&n(l,e,o(u)),new a(t.material,l,t.mapPositions,0,void 0,void 0,t.indices)}function l(i){switch(i.type){case"extent":if(i instanceof t)return e.fromExtent(i);break;case"polygon":return i}return null}class c{constructor(t,e,i){this.renderData=t,this.layerViewUid=e,this.graphicUid=i,this.outGeometries=new Array}}export{c as PolygonCreationDataBase,u as createColorGeometry,s as createWaterGeometry,l as geometryAsPolygon};
2
+ import t from"../../../../geometry/Extent.js";import e from"../../../../geometry/Polygon.js";import{getContinuousIndexArray as i,getZeroIndexArray as o}from"../../../../geometry/support/Indices.js";import{addOlidAttribute as n}from"./olidUtils.js";import{Attribute as r}from"../../webgl-engine/lib/Attribute.js";import{Geometry as a}from"../../webgl-engine/lib/Geometry.js";function u(t){const e=t.attributeData.position.length/3,u=i(e),s=[["position",new r(t.attributeData.position,u,3,!0)]],{boundingRect:l,textureElementIndices:c,boundingRectIndices:p}=t.attributeData,m=null!=l,b=o(m?p?.length??1:e);null!=t.attributeData.colorFeature?s.push(["colorFeatureAttribute",new r([t.attributeData.colorFeature],b,1,!0)]):t.attributeData.color&&s.push(["color",new r(t.attributeData.color,b,4,!0)]),t.attributeData.uvMapSpace&&s.push(["uvMapSpace",new r(t.attributeData.uvMapSpace,u,4,!0)]),m&&(s.push(["boundingRect",new r(l,p??[0],9,!0)]),null!=c&&s.push(["textureElementIndex",new r(c,u,1,!0)]));const d=t.attributeData.olidColor;return null!=d&&n(s,d,o(e)),new a(t.material,s,t.mapPositions,void 0,void 0,t.indices)}function s(t,e=null){const u=t.attributeData.position.length/3,s=i(u),l=[["position",new r(t.attributeData.position,s,3,!0)],["uv0",new r(t.attributeData.uv0,s,2,!0)]];return null!=e&&n(l,e,o(u)),new a(t.material,l,t.mapPositions,void 0,void 0,t.indices)}function l(i){switch(i.type){case"extent":if(i instanceof t)return e.fromExtent(i);break;case"polygon":return i}return null}class c{constructor(t,e,i){this.renderData=t,this.layerViewUid=e,this.graphicUid=i,this.outGeometries=new Array}}export{c as PolygonCreationDataBase,u as createColorGeometry,s as createWaterGeometry,l as geometryAsPolygon};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{Sphere as e}from"../../../../geometry/support/sphere.js";import{ElevationRange as s}from"../../support/ElevationRange.js";class i extends s{constructor(s,i){super(NaN,NaN),this.id=s,this.serviceMbsInIndexSR=i,this._serviceMbsInRenderSRElevationAdjusted=new e(0,0,0,-1),this._serviceMbsInRenderSR=new e(0,0,0,-1),this._mbsConeInRenderSR=null}get serviceMbsInRenderSRElevationAdjusted(){return this._serviceMbsInRenderSRElevationAdjusted}updateServiceMbsInRenderSRElevationAdjusted(e){return this._serviceMbsInRenderSRElevationAdjusted.copyFrom(e),this._serviceMbsInRenderSRElevationAdjusted}get serviceMbsInRenderSR(){return this._serviceMbsInRenderSR}updateServiceMbsInRenderSR(e){return this._serviceMbsInRenderSR.copyFrom(e),this._serviceMbsInRenderSR}get mbsConeInRenderSR(){return this._mbsConeInRenderSR}updateMbsConeInRenderSR(e){return this._mbsConeInRenderSR=e.clone(),this._mbsConeInRenderSR}invalidateServiceBVsInRenderSR(){this._serviceMbsInRenderSRElevationAdjusted.invalidate(),this._serviceMbsInRenderSR.invalidate(),this._mbsConeInRenderSR=null,this.serviceObbInRenderSR?.invalidate()}shareServiceBVsInRenderSRWith(e){this.serviceObbInRenderSR=e.serviceObbInRenderSR,this._serviceMbsInRenderSRElevationAdjusted=e._serviceMbsInRenderSRElevationAdjusted,this._serviceMbsInRenderSR=e._serviceMbsInRenderSR,this._mbsConeInRenderSR=e._mbsConeInRenderSR}}class t extends i{constructor(e,s,i,t,n,d,a,R,o,h){super(e,i),this.index=s,this.childCount=t,this.level=n,this.resources=d,this.version=a,this.lodMetric=R,this.maxError=o,this.numFeatures=h,this.failed=!1,this.cacheState=0,this.vertexCount=0,this.memory=0,this.childrenLoaded=0,this.hasModifications=!1,this.imModificationImpact=4,this.elevationAgnosticBoundingVolume=new r}invalidateServiceBVsInRenderSR(){super.invalidateServiceBVsInRenderSR(),this.elevationAgnosticBoundingVolume.invalidate()}}class n{constructor(e,s,i,t){this.nodeHasLOD=e,this.isChosen=s,this.lodLevel=i,this.version=t}}class r{constructor(){this._data=[0,0,0,r.invalidRadius]}static{this.invalidRadius=-2}invalidate(){this._data[3]=r.invalidRadius}get valid(){return this._data[3]!==r.invalidRadius}get radius(){return this._data[3]}getAxis(e){return e[0]=this._data[0],e[1]=this._data[1],e[2]=this._data[2],e}set(e,s){this._data[0]=e[0],this._data[1]=e[1],this._data[2]=e[2],this._data[3]=s}}export{r as ElevationAgnosticBoundingVolume,t as Node,i as NodeBoundingData,n as NodeTraversalState};
2
+ import{create as e}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{Sphere as s}from"../../../../geometry/support/sphere.js";import{sphereIntersectsInfiniteRadialConeConservative as i,sphereIntersectsInfiniteVerticalCylinderConservative as t,finiteVerticalCylinderIntersectsFrustumConservative as n}from"../../support/ElevationAgnosticVisibility.js";import{ElevationRange as r}from"../../support/ElevationRange.js";class d extends r{constructor(e,i){super(NaN,NaN),this.id=e,this.serviceMbsInIndexSR=i,this._serviceMbsInRenderSRElevationAdjusted=new s(0,0,0,-1),this._serviceMbsInRenderSR=new s(0,0,0,-1),this._mbsConeInRenderSR=null}get serviceMbsInRenderSRElevationAdjusted(){return this._serviceMbsInRenderSRElevationAdjusted}updateServiceMbsInRenderSRElevationAdjusted(e){return this._serviceMbsInRenderSRElevationAdjusted.copyFrom(e),this._serviceMbsInRenderSRElevationAdjusted}get serviceMbsInRenderSR(){return this._serviceMbsInRenderSR}updateServiceMbsInRenderSR(e){return this._serviceMbsInRenderSR.copyFrom(e),this._serviceMbsInRenderSR}get mbsConeInRenderSR(){return this._mbsConeInRenderSR}updateMbsConeInRenderSR(e){return this._mbsConeInRenderSR=e.clone(),this._mbsConeInRenderSR}invalidateServiceBVsInRenderSR(){this._serviceMbsInRenderSRElevationAdjusted.invalidate(),this._serviceMbsInRenderSR.invalidate(),this._mbsConeInRenderSR=null,this.serviceObbInRenderSR?.invalidate()}shareServiceBVsInRenderSRWith(e){this.serviceObbInRenderSR=e.serviceObbInRenderSR,this._serviceMbsInRenderSRElevationAdjusted=e._serviceMbsInRenderSRElevationAdjusted,this._serviceMbsInRenderSR=e._serviceMbsInRenderSR,this._mbsConeInRenderSR=e._mbsConeInRenderSR}}class a extends d{constructor(e,s,i,t,n,r,d,a,o,h){super(e,i),this.index=s,this.childCount=t,this.level=n,this.resources=r,this.version=d,this.lodMetric=a,this.maxError=o,this.numFeatures=h,this.failed=!1,this.cacheState=0,this.vertexCount=0,this.memory=0,this.childrenLoaded=0,this.hasModifications=!1,this.imModificationImpact=4,this.elevationAgnosticBoundingVolume=new R}invalidateServiceBVsInRenderSR(){super.invalidateServiceBVsInRenderSR(),this.elevationAgnosticBoundingVolume.invalidate()}}class o{constructor(e,s,i,t){this.nodeHasLOD=e,this.isChosen=s,this.lodLevel=i,this.version=t}}class R{constructor(){this._data=[0,0,0,R.invalidRadius]}static{this.invalidRadius=-2}invalidate(){this._data[3]=R.invalidRadius}get valid(){return this._data[3]!==R.invalidRadius}get radius(){return this._data[3]}getAxis(e){return e[0]=this._data[0],e[1]=this._data[1],e[2]=this._data[2],e}set(e,s){this._data[0]=e[0],this._data[1]=e[1],this._data[2]=e[2],this._data[3]=s}intersectsFrustumConservative(e,s,r){if(!this.valid)return!0;const d=this.getAxis(h),{center:a,radius:o}=e.boundingSphere,R=o+r;return 1===s?this.radius>c||i(d,this.radius,a,R):t(d,this.radius,a,R)&&n(d,this.radius,a[2]-R,a[2]+R,e.planes)}}const h=e(),c=.9;export{R as ElevationAgnosticBoundingVolume,a as Node,d as NodeBoundingData,o as NodeTraversalState};
@@ -1,2 +1,2 @@
1
1
  /* COPYRIGHT Esri - https://js.arcgis.com/5.2/LICENSE.txt */
2
- import{normalize as e,sub as t,dot as i,scaleAndAdd as n,length as s,set as r,equals as o,subtract as a,len as c,sqrDist as l,copy as u,scale as d,dist as h,distance as m,squaredLength as p,squaredDistance as _,add as f}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as v}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{getReferenceEllipsoid as S}from"../../../../geometry/ellipsoidUtils.js";import{getSphericalPCPF as R}from"../../../../geometry/spatialReferenceEllipsoidUtils.js";import{projectBoundingSphere as g}from"../../../../geometry/projection/projectBoundingSphere.js";import{getProjector as C}from"../../../../geometry/projection/projectors.js";import{create as M,fromMatrix as b,intersectsSphere as x,createPoints as I}from"../../../../geometry/support/frustum.js";import{signedDistance as D,getNormal as P}from"../../../../geometry/support/plane.js";import{isPlateCarree as E}from"../../../../geometry/support/spatialReferenceUtils.js";import{Sphere as A}from"../../../../geometry/support/sphere.js";import{evaluateElevationAlignmentAtPoint as F}from"../graphics/elevationAlignmentUtils.js";import{ElevationContext as O}from"../graphics/ElevationContext.js";import{createContextWithoutExpressionSupport as V,extractExpressionInfo as w}from"../graphics/featureExpressionInfoUtils.js";import{intersectBoundingRectWithMbs as j}from"./I3SUtil.js";import{SweptSphereCylindricalVolume as L,SphereGlobal as B,SweptSphereConicalVolume as y}from"./SweptSphereVolume.js";import{Obb as T,computeOffsetObb as U}from"../../support/orientedBoundingBox.js";const H=1e5;class G{get _frustumMbsCenter(){return this._frustumMbs.center}get _frustumMbsRadius(){return this._frustumMbs.radius}get _frustumPlanes(){return this._frustum}constructor(e,t,i,n,s,r,o,a,c={}){this._indexSR=e,this._renderCoordsHelper=t,this._clippingArea=s,this._elevationProvider=r,this._viewingMode=o,this._options=c,this._frustum=M(),this._frustumMbs=new A,this._viewDirection=v(),this._useFrustumCulling=!1,this._poi=v(),this._cameraPOIDirection=v(),this._elevationContext=null,this.minCenterDistance=1/0,this.maxCenterDistance=0,this.maxLodLevel=2,this._screenspaceErrorBias=c.screenspaceErrorBias||1,this._progressiveLoadFactor=c.progressiveLoadFactor||1,this.updateCamera(i,n);const l=this._renderCoordsHelper.spatialReference;this._renderSR=l,this._renderSRSphericalPCPF=R(l),this._isGlobalMode=l===this._renderSRSphericalPCPF,this.updateElevationInfo(a),this._isECEFOBBInLocalMode=this._indexSR.isWGS84&&(l.isWebMercator||E(l)),this._indexSREllipsoidRadius=S(this._indexSR).radius,this._indexSRSphericalPCPF=R(e),this._projectorIndexSRToIndexSRSphericalPCPF=C(this._indexSR,this._indexSRSphericalPCPF)}updateElevationInfo(e){null!=e?(this._elevationContext=O.fromElevationInfo(e),this._elevationContext.setFeatureExpressionInfoContext(V(w(e,!1)))):this._elevationContext=null}updateCamera(s,r){if(this._useFrustumCulling=r,e(this._viewDirection,s.viewForward),r){b(s.viewMatrix,s.projectionMatrix,this._frustum,W);{const e=s.eye,r=q;t(r,W[4],e);const o=.5*i(r,r)/i(this._viewDirection,r),a=this._frustumMbs,c=a.center;n(c,e,this._viewDirection,o);const l=1+o;a.radius=l}}this._screenSizeFactor=1/(s.perScreenPixelRatio/2),this._camPos=s.eye,this._updateCameraPOIDirection(),this.minCenterDistance=1/0,this.maxCenterDistance=0}setPointOfInterest(e){this._poi=e,this._updateCameraPOIDirection()}updateScreenSpaceErrorBias(e){const t=this._screenspaceErrorBias;return this._screenspaceErrorBias=e,t}updateClippingArea(e){this._clippingArea=e}expandElevationRange(e,t,i){if(null==this._elevationContext)return;const n=e.serviceMbsInIndexSR;if(!n)return;const s="relative-to-scene"===this._elevationContext.mode?"scene":"ground",r=this._elevationProvider;if(r.getSphereElevationRange){const e=r.getSphereElevationRange(n,this._indexSR,s);if(e)return void i.expandElevationRange(e)}const[o,a,c]=n.center,l=r.getElevation(o,a,c,this._indexSR,s);l&&i.expandElevationRangeValues(l,l);const u=t?null:r.getRootElevationRange?.();u&&i.expandElevationRange(u)}calculateServiceMbsInRenderSR(e){const{serviceMbsInRenderSR:t}=e;if(t.isValid)return t;const{serviceMbsInIndexSR:i}=e;if(!i?.isValid)return t;const n=ne;return g(i,this._indexSR,n,this._renderSR),e.updateServiceMbsInRenderSR(n)}calculateServiceMbsInRenderSRElevationAdjusted(e){const{serviceMbsInRenderSRElevationAdjusted:t}=e;if(t.isValid)return t;const{serviceMbsInIndexSR:i}=e,n=this.calculateServiceMbsInRenderSR(e);if(!n.isValid||!i?.isValid)return t;const s=ne;s.copyFrom(n);const{_elevationContext:r}=this;if(r){const{minElevation:t}=e,{_renderCoordsHelper:n}=this,o=i.center;let a=0;if(Number.isFinite(t)){let i=0,c=0;const{maxElevation:l}=e,u=o[2];switch(r.mode){case"relative-to-ground":case"relative-to-scene":i=r.geometryZWithOffset(u,n)+t-u,c=l-t;break;case"on-the-ground":i=t-u,c=l-t}a=i+.5*c,s.radius+=.5*c}else s.radius<H&&(a=F(o,this._elevationProvider,r,n)-o[2]);a&&ce(s,a,this._viewingMode)}return e.updateServiceMbsInRenderSRElevationAdjusted(s)}_isGlobalMbsContainingPlanetCenter(e){return 1===this._viewingMode&&s(e.center)<=e.radius}calculateMbsConeInRenderSR(e){const{mbsConeInRenderSR:t}=e;if(t)return t;if(!e.elevationRangeValid)return null;let{minElevation:i,maxElevation:n}=e;if(!(Number.isFinite(i)&&i<n))return null;const s=this.calculateServiceMbsInRenderSR(e);if(!s.isValid)return null;const r=this._elevationContext;if("relative-to-ground"===r?.mode||"relative-to-scene"===r?.mode){const t=e.serviceMbsInIndexSR;if(!t?.isValid)return null;const s=t.center[2],o=r.geometryZWithOffset(s,this._renderCoordsHelper);if(2===this._viewingMode)i+=o,n+=o;else{const e=o-s;i+=e,n+=e}}const o=this._renderCoordsHelper.referenceEllipsoid.radius,a=2===this._viewingMode?new L(s,i,n):this._isGlobalMbsContainingPlanetCenter(s)?new B(s,o+i,o+n):new y(s,o+i,o+n);return e.updateMbsConeInRenderSR(a)}getAndUpdateVisibilityObbInRenderSR(e){{const t=e.visibilityObbInRenderSR;if(t)return t}const t=.01*this._indexSREllipsoidRadius,{serviceMbsInIndexSR:i,serviceObbInIndexSR:n}=e;if(null==n||!i||!n.isValid||this._isECEFOBBInLocalMode&&(n.halfSizeX>t||n.halfSizeY>t||n.halfSizeZ>t))return null;{let t=e.serviceObbInRenderSR;if(null==t)t=new T,e.serviceObbInRenderSR=t;else if(t.isValid)return t;const s=i.radius;let o=0,a=0;const c=n.centerZ,l=this._renderCoordsHelper,u=this._elevationContext;if(u&&e.elevationRangeValid){const{minElevation:t,maxElevation:i}=e;switch(u.mode){case"relative-to-ground":case"relative-to-scene":o=u.geometryZWithOffset(c,l)+t-c,a=i-t;break;case"on-the-ground":o=t-c,a=i-t}}else if(u&&s<H){const e=r(J,n.centerX,n.centerY,c);o=F(e,this._elevationProvider,u,l)-c}const d=a>0,h=d?Y:t;return n.transform(h,this._indexSR,this._renderSR,o,this._renderSRSphericalPCPF,this._indexSRSphericalPCPF,this._projectorIndexSRToIndexSRSphericalPCPF),d&&U(h,0,a,this._viewingMode,t),t}}getNodeObbInRenderSRIndependentOfElevationOffset(e){{const t=e.visibilityObbInRenderSR??e.serviceObbInRenderSR??null;if(t?.isValid)return t}const t=e.serviceObbInIndexSR;if(!t)return null;const i=.2;return 2===this._viewingMode&&Math.max(t.halfSizeX,t.halfSizeY,t.halfSizeZ)>i*this._indexSREllipsoidRadius?null:(t.transform(Y,this._indexSR,this._renderSR,void 0,this._renderSRSphericalPCPF,this._indexSRSphericalPCPF,this._projectorIndexSRToIndexSRSphericalPCPF),Y)}ensureElevationAgnosticBoundingVolume(e){return!e.elevationAgnosticBoundingVolume.valid&&e.level>0&&(1===this._viewingMode?this._updateElevationAgnosticBoundingVolumeGlobal(e):this._updateElevationAgnosticBoundingVolumeLocal(e)),e.elevationAgnosticBoundingVolume}_updateCameraPOIDirection(){o(this._poi,this._camPos)?this._cameraPOIDirection=this._viewDirection:(a(this._cameraPOIDirection,this._camPos,this._poi),e(this._cameraPOIDirection,this._cameraPOIDirection))}_updateElevationAgnosticBoundingVolumeGlobal(t){const n=this.getNodeObbInRenderSRIndependentOfElevationOffset(t),s=t.elevationAgnosticBoundingVolume;let r,o=-1;if(n){const t=J;n.getCenter(t),e(t,t),r=t,n.getCorners(K);for(const n of K){e(n,n);const r=i(n,t);if(r<=0)return void s.invalidate();const a=Math.sqrt(Math.max(0,1-r*r));o=Math.max(o,a)}}else{const i=t.serviceMbsInRenderSR;if(!i.isValid)return void s.invalidate();const{center:n,radius:a}=i,l=c(n);if(l<a)return void s.invalidate();o=a/l,r=e(ie,n)}s.set(r,o+fe)}_updateElevationAgnosticBoundingVolumeLocal(e){const t=e.elevationAgnosticBoundingVolume,i=this.getNodeObbInRenderSRIndependentOfElevationOffset(e);if(i){const e=i.getCenter(J);e[2]=0;let n=0;const s=Q;i.getCorners(K);for(const t of K){t[2]=0;const e=l(s,t);n=Math.max(n,e)}t.set(e,Math.sqrt(n))}else{const i=e.serviceMbsInRenderSR;if(i.isValid){const e=u(J,i.center);e[2]=0,t.set(e,i.radius)}}}isNodeVisible(e){if(!this._isMBSinClippingArea(this.calculateServiceMbsInRenderSR(e)))return!1;if(!this._useFrustumCulling)return!0;const t=this.getAndUpdateVisibilityObbInRenderSR(e);return t?t.intersectsFrustumConservativeApproximation(this._frustum):x(this._frustum,this.calculateServiceMbsInRenderSRElevationAdjusted(e))}isElevationAgnosticBoundingVolumeVisible(e){return!this._useFrustumCulling||(!e.valid||(1===this._viewingMode?this._isConeVisibleInFrustum(e):this._isCylinderVisibleInFrustum(e)))}_isConeVisibleInFrustum(s){if(!this._isConeVisibleInFrustumMbs(s)||!s.valid)return!1;const r=s.radius;if(r>pe)return!0;const o=this._frustumPlanes,a=this._frustumMbsCenter,c=s.getAxis(ie),l=i(c,a),u=this._frustumMbsRadius,h=l-u,m=l+u;if(h<=0)return!0;const p=d(Z,c,h),_=d(k,c,m),f=r/Math.sqrt(1-r*r);for(const v of o){const s=P(v),r=e(X,s),o=i(r,c);if(Math.abs(1-o)<_e)continue;const a=$;d(a,c,o),t(a,a,r),e(a,a);const l=ee;n(l,p,a,h*f);if(D(v,l)<=0)continue;n(l,_,a,m*f);if(D(v,l)<=0)continue;return!1}return!0}_isConeVisibleInFrustumMbs(e){const t=e.radius;if(t>pe)return!0;const n=this._frustumMbsRadius,s=this._frustumMbsCenter,r=c(s);if(r<=n)return!0;const o=e.getAxis(ie),a=i(o,s);{const e=d(N,o,a);if(h(e,s)<n)return!0}const l=a/r;if(a<=0){return-l<n}const u=Math.sqrt(1-l*l);if(u<t)return!0;const m=n/r;return u*Math.sqrt(1-m*m)-m*l<t}isObbVisibleIndependentOfElevation(e,t){if(!this._useFrustumCulling)return!0;if(!e.valid)return!0;const n=this._frustumMbsRadius,s=this._frustumMbsCenter,r=this._frustumPlanes,o=K;if(t.getCorners(o),1===this._viewingMode){const t=e.getAxis(ie),a=i(t,s),c=a-n,l=a+n;if(c<=0)return!0;for(const e of r){let n=!0;for(const s of o){const r=i(s,t),o=te;if(d(o,s,c/r),D(e,o)<=0){n=!1;break}const a=te;if(d(a,s,l/r),D(e,a)<=0){n=!1;break}}if(n)return!1}}else{const e=s[2]-n,t=s[2]+n;for(const i of r){let n=!0;const s=P(i),r=s[0],a=s[1],c=s[2],l=i[3];for(const i of o){const s=r*i[0]+a*i[1]+l;if(s+c*e<=0||s+c*t<=0){n=!1;break}}if(n)return!1}}return!0}_isCylinderVisibleInFrustum(e){const t=this._frustumMbsCenter,i=this._frustumMbsRadius,n=u(N,t);n[2]=0;const s=e.radius,r=e.getAxis(ie);return h(n,r)<=s+i}isGeometryVisible(e){if(!this._useFrustumCulling)return!0;const t=e.geometryObbInRenderSR;return t?.intersectsFrustumConservativeApproximation(this._frustum)??this.isNodeVisible(e)}_isMBSinClippingArea(e){return null==this._clippingArea||0!==j(this._clippingArea,e)}_screenSpaceDiameterMbs(e,t){const i=this.calcCameraDistanceToSurfaceAndUpdateMinmaxWithCenterDistance(e);return i<0?le:t/i*this._screenSizeFactor}calcCameraDistanceToSurfaceAndUpdateMinmaxWithCenterDistance(e){const t=this.calculateMbsConeInRenderSR(e);if(null==t)return this.calcCameraDistanceToSurfaceAndUpdateMinmaxWithSphere(e);const i=t.calculateSurfaceDistanceFromPoint(this._camPos),n=t.calculateCenterDistanceFromPoint(this._camPos);return this._updateMinMaxDistanceToCenter(n),i}calcCameraDistanceToSurfaceAndUpdateMinmaxWithSphere(e){return this.calcCameraDistanceToCenterAndUpdateMinmax(e)-this.calculateServiceMbsInRenderSRElevationAdjusted(e).radius}calcCameraDistanceToCenterAndUpdateMinmax(e){const t=this.calculateServiceMbsInRenderSRElevationAdjusted(e),i=m(t.center,this._camPos);return this._updateMinMaxDistanceToCenter(i),i}_calculateAngleDependentLoDForSphere(e,n){const r=t(Q,e,this._camPos),o=s(e),a=s(r);if(0===o||0===a)return 1;const c=(Math.abs(i(e,r))/o+n)/a;return Math.min(1,c)}calcAngleDependentLoD(e){const t=this.calculateMbsConeInRenderSR(e);if(null==t){const{center:t,radius:i}=this.calculateServiceMbsInRenderSRElevationAdjusted(e);return this._calculateAngleDependentLoDForSphere(t,i)}const{center:n,radius:r}=this.calculateServiceMbsInRenderSR(e);if(2===this._viewingMode)u(se,n),se[2]=t.lowerCenterHeight,u(re,n),re[2]=t.upperCenterHeight;else{const e=s(n);if(0===e)return 1;d(se,n,t.lowerCenterHeight/e),d(re,n,t.upperCenterHeight/e)}const o=this._calculateAngleDependentLoDForSphere(se,r),a=this._calculateAngleDependentLoDForSphere(re,r);if(2===this._viewingMode)u(oe,n),oe[2]=Math.max(t.lowerCenterHeight,Math.min(t.upperCenterHeight,this._camPos[2]));else{const e=s(n);if(0===e)return Math.max(o,a);const r=Math.max(t.lowerCenterHeight,Math.min(t.upperCenterHeight,i(this._camPos,n)/e));d(oe,n,r/e)}return Math.max(o,a,this._calculateAngleDependentLoDForSphere(oe,r))}hasLOD(e){return 0!==e.lodMetric}_getDistanceToSurfaceGlobeMode(e,t){const n=s(t.center),r=s(e)-n;d(se,e,i(e,t.center)/p(e));const o=_(t.center,se),c=t.radius;if(o<=c*c)return Math.abs(r);const l=d(se,t.center,1/n),u=d(re,l,n-c*c/(2*n)),h=a(oe,e,u),v=a(oe,h,d(ae,l,i(l,h))),S=f(oe,u,d(oe,v,c/s(v)));let R=m(e,S);if(r>=de){const t=a(re,e,S);let n=i(t,l)/s(t);n<he&&(n=me),R/=n}return R}_getDistanceToSurface(e,t){return this._isGlobalMode?this._getDistanceToSurfaceGlobeMode(e,t):z(e,t)}_applyGlobalFlatAngleCorrectionToConeDistance(e,t){t.calculateClosestCenterToPoint(this._camPos,ae);const n=s(ae);if(0===n)return e;if(s(this._camPos)-n<de)return e;const r=a(oe,this._camPos,ae),o=s(r);if(0===o)return e;const c=i(r,ae)/(o*n);return e/(c<he?me:c)}calculateScreenSpaceRelativeSphere(e){const t=this.calculateServiceMbsInRenderSRElevationAdjusted(e),i=this._getDistanceToSurface(this._camPos,t),n=i+t.radius;return this._updateMinMaxDistanceToCenter(n),2*i/this._screenSizeFactor}calculateScreenSpaceRelativeCone(e){const t=e.calculateCenterDistanceFromPoint(this._camPos);this._updateMinMaxDistanceToCenter(t);const i=e.calculateSurfaceDistanceFromPoint(this._camPos);return 2*(this._isGlobalMode?this._applyGlobalFlatAngleCorrectionToConeDistance(i,e):i)/this._screenSizeFactor}_updateMinMaxDistanceToCenter(e){e>0?(this.minCenterDistance=Math.min(this.minCenterDistance,e),this.maxCenterDistance=Math.max(this.maxCenterDistance,e)):(this.minCenterDistance=0,this.maxCenterDistance=Math.max(this.maxCenterDistance,-e))}getLodLevel(e){if(0===e.lodMetric)return 0;if(0===e.childCount)return this.maxLodLevel;if(this._useFrustumCulling&&this._progressiveLoadFactor<1){const t=this._progressiveLoadFactor*this._screenspaceErrorBias,i=this._screenspaceErrorBias;return this.evaluateLODmetric(e,t)?this.evaluateLODmetric(e,i)?2:1:0}return this.evaluateLODmetric(e,this._screenspaceErrorBias)?this.maxLodLevel:0}evaluateLODmetric(e,t){switch(e.lodMetric){case 1:{let i=this._screenSpaceDiameterMbs(e,(e.serviceMbsInIndexSR?.radius??0)*t);return this._options.angleDependentLoD&&(i*=this.calcAngleDependentLoD(e)),i<e.maxError}case 2:{const i=this.calculateMbsConeInRenderSR(e),n=i?this.calculateScreenSpaceRelativeCone(i):this.calculateScreenSpaceRelativeSphere(e);return e.maxError*t<=n}case 3:return this._screenSpaceDiameterMbs(e,e.maxError)*t<ue;case 4:return this.calcCameraDistanceToSurfaceAndUpdateMinmaxWithCenterDistance(e)>e.maxError*t}return!1}distToCameraPOIRay(e){if(null==e)return 0;const t=this.calculateServiceMbsInRenderSRElevationAdjusted(e),n=t.center,s=i(n,this._cameraPOIDirection),r=s*s,o=p(n)-r;return Math.sqrt(o)-t.radius}distCameraToPOI(){return m(this._camPos,this._poi)}}function z(e,t){const i=e[0]-t.center[0],n=e[1]-t.center[1],s=e[2]-t.center[2],r=i*i+n*n,o=t.radius;if(r<=o*o)return Math.abs(s);const a=Math.sqrt(r)-o;return Math.sqrt(s*s+a*a)}const W=I(),q=v(),N=v(),Z=v(),k=v(),X=v(),Y=new T,J=v(),K=[v(),v(),v(),v(),v(),v(),v(),v()],Q=v(),$=v(),ee=v(),te=v(),ie=v(),ne=new A,se=v(),re=v(),oe=v(),ae=v();function ce(e,t,i){if(2===i)e.center[2]+=t;else{const i=s(e.center);if(0===i)return void(e.radius+=Math.abs(t));d(e.center,e.center,1+t/i)}}const le=.5*Number.MAX_VALUE,ue=10,de=2e5,he=.08,me=1e-4,pe=.9,_e=.01,fe=.001;export{G as default};
2
+ import{normalize as e,length as t,set as i,equals as n,subtract as r,dot as s,len as o,sqrDist as a,copy as c,scale as l,sub as u,scaleAndAdd as d,distance as h,squaredLength as m,squaredDistance as p,add as _}from"../../../../core/libs/gl-matrix-2/math/vec3.js";import{create as f}from"../../../../core/libs/gl-matrix-2/factories/vec3f64.js";import{getReferenceEllipsoid as v}from"../../../../geometry/ellipsoidUtils.js";import{getSphericalPCPF as S}from"../../../../geometry/spatialReferenceEllipsoidUtils.js";import{projectBoundingSphere as g}from"../../../../geometry/projection/projectBoundingSphere.js";import{getProjector as R}from"../../../../geometry/projection/projectors.js";import{intersectsSphere as C}from"../../../../geometry/support/frustum.js";import{signedDistance as b,getNormal as M}from"../../../../geometry/support/plane.js";import{isPlateCarree as x}from"../../../../geometry/support/spatialReferenceUtils.js";import{Sphere as I}from"../../../../geometry/support/sphere.js";import{evaluateElevationAlignmentAtPoint as D}from"../graphics/elevationAlignmentUtils.js";import{ElevationContext as P}from"../graphics/ElevationContext.js";import{createContextWithoutExpressionSupport as E,extractExpressionInfo as A}from"../graphics/featureExpressionInfoUtils.js";import{intersectBoundingRectWithMbs as F}from"./I3SUtil.js";import{SweptSphereCylindricalVolume as O,SphereGlobal as V,SweptSphereConicalVolume as j}from"./SweptSphereVolume.js";import{Frustum as w}from"../../state/Frustum.js";import{Obb as L,computeOffsetObb as B}from"../../support/orientedBoundingBox.js";const T=1e5,y=1;class U{get _frustumPlanes(){return this._frustum.planes}constructor(e,t,i,n,r,s,o,a,c={}){this._indexSR=e,this._renderCoordsHelper=t,this._clippingArea=r,this._elevationProvider=s,this._viewingMode=o,this._options=c,this._viewDirection=f(),this._useFrustumCulling=!1,this._poi=f(),this._cameraPOIDirection=f(),this._elevationContext=null,this.minCenterDistance=1/0,this.maxCenterDistance=0,this.maxLodLevel=2,this._screenspaceErrorBias=c.screenspaceErrorBias||1,this._progressiveLoadFactor=c.progressiveLoadFactor||1,this._frustum=new w(t),this.updateCamera(i,n);const l=this._renderCoordsHelper.spatialReference;this._renderSR=l,this._renderSRSphericalPCPF=S(l),this._isGlobalMode=l===this._renderSRSphericalPCPF,this.updateElevationInfo(a),this._isECEFOBBInLocalMode=this._indexSR.isWGS84&&(l.isWebMercator||x(l)),this._indexSREllipsoidRadius=v(this._indexSR).radius,this._indexSRSphericalPCPF=S(e),this._projectorIndexSRToIndexSRSphericalPCPF=R(this._indexSR,this._indexSRSphericalPCPF)}updateElevationInfo(e){null!=e?(this._elevationContext=P.fromElevationInfo(e),this._elevationContext.setFeatureExpressionInfoContext(E(A(e,!1)))):this._elevationContext=null}updateCamera(t,i){this._useFrustumCulling=i,e(this._viewDirection,t.viewForward),i&&this._frustum.update(t),this._screenSizeFactor=1/(t.perScreenPixelRatio/2),this._camPos=t.eye,this._updateCameraPOIDirection(),this.minCenterDistance=1/0,this.maxCenterDistance=0}setPointOfInterest(e){this._poi=e,this._updateCameraPOIDirection()}updateScreenSpaceErrorBias(e){const t=this._screenspaceErrorBias;return this._screenspaceErrorBias=e,t}updateClippingArea(e){this._clippingArea=e}expandElevationRange(e,t,i){if(null==this._elevationContext)return;const n=e.serviceMbsInIndexSR;if(!n)return;const r="relative-to-scene"===this._elevationContext.mode?"scene":"ground",s=this._elevationProvider;if(s.getSphereElevationRange){const e=s.getSphereElevationRange(n,this._indexSR,r);if(e)return void i.expandElevationRange(e)}const[o,a,c]=n.center,l=s.getElevation(o,a,c,this._indexSR,r);l&&i.expandElevationRangeValues(l,l);const u=t?null:s.getRootElevationRange?.();u&&i.expandElevationRange(u)}calculateServiceMbsInRenderSR(e){const{serviceMbsInRenderSR:t}=e;if(t.isValid)return t;const{serviceMbsInIndexSR:i}=e;if(!i?.isValid)return t;const n=Q;return g(i,this._indexSR,n,this._renderSR),e.updateServiceMbsInRenderSR(n)}calculateServiceMbsInRenderSRElevationAdjusted(e){const{serviceMbsInRenderSRElevationAdjusted:t}=e;if(t.isValid)return t;const{serviceMbsInIndexSR:i}=e,n=this.calculateServiceMbsInRenderSR(e);if(!n.isValid||!i?.isValid)return t;const r=Q;r.copyFrom(n);const{_elevationContext:s}=this;if(s){const{minElevation:t}=e,{_renderCoordsHelper:n}=this,o=i.center;let a=0;if(Number.isFinite(t)){let i=0,c=0;const{maxElevation:l}=e,u=o[2];switch(s.mode){case"relative-to-ground":case"relative-to-scene":i=s.geometryZWithOffset(u,n)+t-u,c=l-t;break;case"on-the-ground":i=t-u,c=l-t}a=i+.5*c,r.radius+=.5*c}else r.radius<T&&(a=D(o,this._elevationProvider,s,n)-o[2]);a&&ne(r,a,this._viewingMode)}return e.updateServiceMbsInRenderSRElevationAdjusted(r)}_isGlobalMbsContainingPlanetCenter(e){return 1===this._viewingMode&&t(e.center)<=e.radius}calculateMbsConeInRenderSR(e){const{mbsConeInRenderSR:t}=e;if(t)return t;if(!e.elevationRangeValid)return null;let{minElevation:i,maxElevation:n}=e;if(!(Number.isFinite(i)&&i<n))return null;const r=this.calculateServiceMbsInRenderSR(e);if(!r.isValid)return null;const s=this._elevationContext;if("relative-to-ground"===s?.mode||"relative-to-scene"===s?.mode){const t=e.serviceMbsInIndexSR;if(!t?.isValid)return null;const r=t.center[2],o=s.geometryZWithOffset(r,this._renderCoordsHelper);if(2===this._viewingMode)i+=o,n+=o;else{const e=o-r;i+=e,n+=e}}const o=this._renderCoordsHelper.referenceEllipsoid.radius,a=2===this._viewingMode?new O(r,i,n):this._isGlobalMbsContainingPlanetCenter(r)?new V(r,o+i,o+n):new j(r,o+i,o+n);return e.updateMbsConeInRenderSR(a)}getAndUpdateVisibilityObbInRenderSR(e){{const t=e.visibilityObbInRenderSR;if(t)return t}const t=.01*this._indexSREllipsoidRadius,{serviceMbsInIndexSR:n,serviceObbInIndexSR:r}=e;if(null==r||!n||!r.isValid||this._isECEFOBBInLocalMode&&(r.halfSizeX>t||r.halfSizeY>t||r.halfSizeZ>t))return null;{let t=e.serviceObbInRenderSR;if(null==t)t=new L,e.serviceObbInRenderSR=t;else if(t.isValid)return t;const s=n.radius;let o=0,a=0;const c=r.centerZ,l=this._renderCoordsHelper,u=this._elevationContext;if(u&&e.elevationRangeValid){const{minElevation:t,maxElevation:i}=e;switch(u.mode){case"relative-to-ground":case"relative-to-scene":o=u.geometryZWithOffset(c,l)+t-c,a=i-t;break;case"on-the-ground":o=t-c,a=i-t}}else if(u&&s<T){const e=i(q,r.centerX,r.centerY,c);o=D(e,this._elevationProvider,u,l)-c}const d=a>0,h=d?N:t;return r.transform(h,this._indexSR,this._renderSR,o,this._renderSRSphericalPCPF,this._indexSRSphericalPCPF,this._projectorIndexSRToIndexSRSphericalPCPF),d&&B(h,0,a,this._viewingMode,t),t}}getNodeObbInRenderSRIndependentOfElevationOffset(e){{const t=e.visibilityObbInRenderSR??e.serviceObbInRenderSR??null;if(t?.isValid)return t}const t=e.serviceObbInIndexSR;if(!t)return null;const i=.2;return 2===this._viewingMode&&Math.max(t.halfSizeX,t.halfSizeY,t.halfSizeZ)>i*this._indexSREllipsoidRadius?null:(t.transform(N,this._indexSR,this._renderSR,void 0,this._renderSRSphericalPCPF,this._indexSRSphericalPCPF,this._projectorIndexSRToIndexSRSphericalPCPF),N)}ensureElevationAgnosticBoundingVolume(e){return!e.elevationAgnosticBoundingVolume.valid&&e.level>0&&(1===this._viewingMode?this._updateElevationAgnosticBoundingVolumeGlobal(e):this._updateElevationAgnosticBoundingVolumeLocal(e)),e.elevationAgnosticBoundingVolume}_updateCameraPOIDirection(){n(this._poi,this._camPos)?this._cameraPOIDirection=this._viewDirection:(r(this._cameraPOIDirection,this._camPos,this._poi),e(this._cameraPOIDirection,this._cameraPOIDirection))}_updateElevationAgnosticBoundingVolumeGlobal(t){const i=this.getNodeObbInRenderSRIndependentOfElevationOffset(t),n=t.elevationAgnosticBoundingVolume;let r,a=-1;if(i){const t=q;i.getCenter(t),e(t,t),r=t,i.getCorners(Z);for(const i of Z){e(i,i);const r=s(i,t);if(r<=0)return void n.invalidate();const o=Math.sqrt(Math.max(0,1-r*r));a=Math.max(a,o)}}else{const i=t.serviceMbsInRenderSR;if(!i.isValid)return void n.invalidate();const{center:s,radius:c}=i,l=o(s);if(l<c)return void n.invalidate();a=c/l,r=e(K,s)}n.set(r,a+de)}_updateElevationAgnosticBoundingVolumeLocal(e){const t=e.elevationAgnosticBoundingVolume,i=this.getNodeObbInRenderSRIndependentOfElevationOffset(e);if(i){const e=i.getCenter(q);e[2]=0;let n=0;const r=k;i.getCorners(Z);for(const t of Z){t[2]=0;const e=a(r,t);n=Math.max(n,e)}t.set(e,Math.sqrt(n))}else{const i=e.serviceMbsInRenderSR;if(i.isValid){const e=c(q,i.center);e[2]=0,t.set(e,i.radius)}}}isNodeVisible(e){if(!this._isMBSinClippingArea(this.calculateServiceMbsInRenderSR(e)))return!1;if(!this._useFrustumCulling)return!0;const t=this.getAndUpdateVisibilityObbInRenderSR(e);return t?t.intersectsFrustumConservativeApproximation(this._frustumPlanes):C(this._frustum.planes,this.calculateServiceMbsInRenderSRElevationAdjusted(e))}isElevationAgnosticBoundingVolumeVisible(e){return!this._useFrustumCulling||(!e.valid||!!e.intersectsFrustumConservative(this._frustum,this._viewingMode,y)&&(1!==this._viewingMode||this._isConeVisibleInFrustum(e)))}_isConeVisibleInFrustum(t){const i=t.radius;if(i>le)return!0;const n=this._frustumPlanes,{center:r,radius:o}=this._frustum.boundingSphere,a=t.getAxis(K),c=s(a,r),h=o+y,m=c-h,p=c+h;if(m<=0)return!0;const _=l(G,a,m),f=l(z,a,p),v=i/Math.sqrt(1-i*i);for(const S of n){const t=M(S),i=e(W,t),n=s(i,a);if(Math.abs(1-n)<ue)continue;const r=X;l(r,a,n),u(r,r,i),e(r,r);const o=Y;d(o,_,r,m*v);if(b(S,o)<=0)continue;d(o,f,r,p*v);if(b(S,o)<=0)continue;return!1}return!0}isObbVisibleIndependentOfElevation(e,t){if(!this._useFrustumCulling)return!0;if(!e.valid)return!0;const{center:i,radius:n}=this._frustum.boundingSphere,r=n+y,o=this._frustumPlanes,a=Z;if(t.getCorners(a),1===this._viewingMode){const t=e.getAxis(K),n=s(t,i),c=n-r,u=n+r;if(c<=0)return!0;for(const e of o){let i=!0;for(const n of a){const r=s(n,t),o=J;if(l(o,n,c/r),b(e,o)<=0){i=!1;break}const a=J;if(l(a,n,u/r),b(e,a)<=0){i=!1;break}}if(i)return!1}}else{const e=i[2]-r,t=i[2]+r;for(const i of o){let n=!0;const r=M(i),s=r[0],o=r[1],c=r[2],l=i[3];for(const i of a){const r=s*i[0]+o*i[1]+l;if(r+c*e<=0||r+c*t<=0){n=!1;break}}if(n)return!1}}return!0}isGeometryVisible(e){if(!this._useFrustumCulling)return!0;const t=e.geometryObbInRenderSR;return t?.intersectsFrustumConservativeApproximation(this._frustumPlanes)??this.isNodeVisible(e)}_isMBSinClippingArea(e){return null==this._clippingArea||0!==F(this._clippingArea,e)}_screenSpaceDiameterMbs(e,t){const i=this.calcCameraDistanceToSurfaceAndUpdateMinmaxWithCenterDistance(e);return i<0?re:t/i*this._screenSizeFactor}calcCameraDistanceToSurfaceAndUpdateMinmaxWithCenterDistance(e){const t=this.calculateMbsConeInRenderSR(e);if(null==t)return this.calcCameraDistanceToSurfaceAndUpdateMinmaxWithSphere(e);const i=t.calculateSurfaceDistanceFromPoint(this._camPos),n=t.calculateCenterDistanceFromPoint(this._camPos);return this._updateMinMaxDistanceToCenter(n),i}calcCameraDistanceToSurfaceAndUpdateMinmaxWithSphere(e){return this.calcCameraDistanceToCenterAndUpdateMinmax(e)-this.calculateServiceMbsInRenderSRElevationAdjusted(e).radius}calcCameraDistanceToCenterAndUpdateMinmax(e){const t=this.calculateServiceMbsInRenderSRElevationAdjusted(e),i=h(t.center,this._camPos);return this._updateMinMaxDistanceToCenter(i),i}_calculateAngleDependentLoDForSphere(e,i){const n=u(k,e,this._camPos),r=t(e),o=t(n);if(0===r||0===o)return 1;const a=(Math.abs(s(e,n))/r+i)/o;return Math.min(1,a)}calcAngleDependentLoD(e){const i=this.calculateMbsConeInRenderSR(e);if(null==i){const{center:t,radius:i}=this.calculateServiceMbsInRenderSRElevationAdjusted(e);return this._calculateAngleDependentLoDForSphere(t,i)}const{center:n,radius:r}=this.calculateServiceMbsInRenderSR(e);if(2===this._viewingMode)c($,n),$[2]=i.lowerCenterHeight,c(ee,n),ee[2]=i.upperCenterHeight;else{const e=t(n);if(0===e)return 1;l($,n,i.lowerCenterHeight/e),l(ee,n,i.upperCenterHeight/e)}const o=this._calculateAngleDependentLoDForSphere($,r),a=this._calculateAngleDependentLoDForSphere(ee,r);if(2===this._viewingMode)c(te,n),te[2]=Math.max(i.lowerCenterHeight,Math.min(i.upperCenterHeight,this._camPos[2]));else{const e=t(n);if(0===e)return Math.max(o,a);const r=Math.max(i.lowerCenterHeight,Math.min(i.upperCenterHeight,s(this._camPos,n)/e));l(te,n,r/e)}return Math.max(o,a,this._calculateAngleDependentLoDForSphere(te,r))}hasLOD(e){return 0!==e.lodMetric}_getDistanceToSurfaceGlobeMode(e,i){const n=t(i.center),o=t(e)-n;l($,e,s(e,i.center)/m(e));const a=p(i.center,$),c=i.radius;if(a<=c*c)return Math.abs(o);const u=l($,i.center,1/n),d=l(ee,u,n-c*c/(2*n)),f=r(te,e,d),v=r(te,f,l(ie,u,s(u,f))),S=_(te,d,l(te,v,c/t(v)));let g=h(e,S);if(o>=oe){const i=r(ee,e,S);let n=s(i,u)/t(i);n<ae&&(n=ce),g/=n}return g}_getDistanceToSurface(e,t){return this._isGlobalMode?this._getDistanceToSurfaceGlobeMode(e,t):H(e,t)}_applyGlobalFlatAngleCorrectionToConeDistance(e,i){i.calculateClosestCenterToPoint(this._camPos,ie);const n=t(ie);if(0===n)return e;if(t(this._camPos)-n<oe)return e;const o=r(te,this._camPos,ie),a=t(o);if(0===a)return e;const c=s(o,ie)/(a*n);return e/(c<ae?ce:c)}calculateScreenSpaceRelativeSphere(e){const t=this.calculateServiceMbsInRenderSRElevationAdjusted(e),i=this._getDistanceToSurface(this._camPos,t),n=i+t.radius;return this._updateMinMaxDistanceToCenter(n),2*i/this._screenSizeFactor}calculateScreenSpaceRelativeCone(e){const t=e.calculateCenterDistanceFromPoint(this._camPos);this._updateMinMaxDistanceToCenter(t);const i=e.calculateSurfaceDistanceFromPoint(this._camPos);return 2*(this._isGlobalMode?this._applyGlobalFlatAngleCorrectionToConeDistance(i,e):i)/this._screenSizeFactor}_updateMinMaxDistanceToCenter(e){e>0?(this.minCenterDistance=Math.min(this.minCenterDistance,e),this.maxCenterDistance=Math.max(this.maxCenterDistance,e)):(this.minCenterDistance=0,this.maxCenterDistance=Math.max(this.maxCenterDistance,-e))}getLodLevel(e){if(0===e.lodMetric)return 0;if(0===e.childCount)return this.maxLodLevel;if(this._useFrustumCulling&&this._progressiveLoadFactor<1){const t=this._progressiveLoadFactor*this._screenspaceErrorBias,i=this._screenspaceErrorBias;return this.evaluateLODmetric(e,t)?this.evaluateLODmetric(e,i)?2:1:0}return this.evaluateLODmetric(e,this._screenspaceErrorBias)?this.maxLodLevel:0}evaluateLODmetric(e,t){switch(e.lodMetric){case 1:{let i=this._screenSpaceDiameterMbs(e,(e.serviceMbsInIndexSR?.radius??0)*t);return this._options.angleDependentLoD&&(i*=this.calcAngleDependentLoD(e)),i<e.maxError}case 2:{const i=this.calculateMbsConeInRenderSR(e),n=i?this.calculateScreenSpaceRelativeCone(i):this.calculateScreenSpaceRelativeSphere(e);return e.maxError*t<=n}case 3:return this._screenSpaceDiameterMbs(e,e.maxError)*t<se;case 4:return this.calcCameraDistanceToSurfaceAndUpdateMinmaxWithCenterDistance(e)>e.maxError*t}return!1}distToCameraPOIRay(e){if(null==e)return 0;const t=this.calculateServiceMbsInRenderSRElevationAdjusted(e),i=t.center,n=s(i,this._cameraPOIDirection),r=n*n,o=m(i)-r;return Math.sqrt(o)-t.radius}distCameraToPOI(){return h(this._camPos,this._poi)}}function H(e,t){const i=e[0]-t.center[0],n=e[1]-t.center[1],r=e[2]-t.center[2],s=i*i+n*n,o=t.radius;if(s<=o*o)return Math.abs(r);const a=Math.sqrt(s)-o;return Math.sqrt(r*r+a*a)}const G=f(),z=f(),W=f(),N=new L,q=f(),Z=[f(),f(),f(),f(),f(),f(),f(),f()],k=f(),X=f(),Y=f(),J=f(),K=f(),Q=new I,$=f(),ee=f(),te=f(),ie=f();function ne(e,i,n){if(2===n)e.center[2]+=i;else{const n=t(e.center);if(0===n)return void(e.radius+=Math.abs(i));l(e.center,e.center,1+i/n)}}const re=.5*Number.MAX_VALUE,se=10,oe=2e5,ae=.08,ce=1e-4,le=.9,ue=.01,de=.001;export{U as default};