@itwin/map-layers-formats 4.1.0-dev.7 → 4.1.0-dev.71

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 (284) hide show
  1. package/CHANGELOG.md +74 -1
  2. package/lib/cjs/ArcGisFeature/ArcGisCanvasRenderer.d.ts +19 -0
  3. package/lib/cjs/ArcGisFeature/ArcGisCanvasRenderer.d.ts.map +1 -0
  4. package/lib/cjs/ArcGisFeature/ArcGisCanvasRenderer.js +46 -0
  5. package/lib/cjs/ArcGisFeature/ArcGisCanvasRenderer.js.map +1 -0
  6. package/lib/cjs/ArcGisFeature/ArcGisFeatureFormat.d.ts.map +1 -1
  7. package/lib/cjs/ArcGisFeature/ArcGisFeatureFormat.js +3 -0
  8. package/lib/cjs/ArcGisFeature/ArcGisFeatureFormat.js.map +1 -1
  9. package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.d.ts +16 -8
  10. package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.d.ts.map +1 -1
  11. package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.js +157 -45
  12. package/lib/cjs/ArcGisFeature/ArcGisFeatureProvider.js.map +1 -1
  13. package/lib/cjs/ArcGisFeature/ArcGisFeatureQuery.d.ts +5 -0
  14. package/lib/cjs/ArcGisFeature/ArcGisFeatureQuery.d.ts.map +1 -1
  15. package/lib/cjs/ArcGisFeature/ArcGisFeatureQuery.js +4 -0
  16. package/lib/cjs/ArcGisFeature/ArcGisFeatureQuery.js.map +1 -1
  17. package/lib/cjs/ArcGisFeature/ArcGisFeatureReader.d.ts +15 -6
  18. package/lib/cjs/ArcGisFeature/ArcGisFeatureReader.d.ts.map +1 -1
  19. package/lib/cjs/ArcGisFeature/ArcGisFeatureReader.js +6 -4
  20. package/lib/cjs/ArcGisFeature/ArcGisFeatureReader.js.map +1 -1
  21. package/lib/cjs/ArcGisFeature/ArcGisJsonFeatureReader.d.ts +14 -0
  22. package/lib/cjs/ArcGisFeature/ArcGisJsonFeatureReader.d.ts.map +1 -0
  23. package/lib/cjs/ArcGisFeature/{ArcGisFeatureJSON.js → ArcGisJsonFeatureReader.js} +51 -55
  24. package/lib/cjs/ArcGisFeature/ArcGisJsonFeatureReader.js.map +1 -0
  25. package/lib/cjs/ArcGisFeature/ArcGisPbfFeatureReader.d.ts +22 -0
  26. package/lib/cjs/ArcGisFeature/ArcGisPbfFeatureReader.d.ts.map +1 -0
  27. package/lib/cjs/ArcGisFeature/ArcGisPbfFeatureReader.js +249 -0
  28. package/lib/cjs/ArcGisFeature/ArcGisPbfFeatureReader.js.map +1 -0
  29. package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.d.ts +32 -77
  30. package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.d.ts.map +1 -1
  31. package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.js +88 -128
  32. package/lib/cjs/ArcGisFeature/ArcGisSymbologyRenderer.js.map +1 -1
  33. package/lib/cjs/ArcGisFeature/EsriSymbology.d.ts +152 -0
  34. package/lib/cjs/ArcGisFeature/EsriSymbology.d.ts.map +1 -0
  35. package/lib/cjs/ArcGisFeature/EsriSymbology.js +181 -0
  36. package/lib/cjs/ArcGisFeature/EsriSymbology.js.map +1 -0
  37. package/lib/cjs/Tools/MapFeatureInfoDecorator.d.ts +34 -0
  38. package/lib/cjs/Tools/MapFeatureInfoDecorator.d.ts.map +1 -0
  39. package/lib/cjs/Tools/MapFeatureInfoDecorator.js +281 -0
  40. package/lib/cjs/Tools/MapFeatureInfoDecorator.js.map +1 -0
  41. package/lib/cjs/Tools/MapFeatureInfoTool.d.ts +38 -0
  42. package/lib/cjs/Tools/MapFeatureInfoTool.d.ts.map +1 -0
  43. package/lib/cjs/Tools/MapFeatureInfoTool.js +113 -0
  44. package/lib/cjs/Tools/MapFeatureInfoTool.js.map +1 -0
  45. package/lib/cjs/map-layers-formats.d.ts +1 -0
  46. package/lib/cjs/map-layers-formats.d.ts.map +1 -1
  47. package/lib/cjs/map-layers-formats.js +1 -0
  48. package/lib/cjs/map-layers-formats.js.map +1 -1
  49. package/lib/cjs/mapLayersFormats.d.ts +12 -1
  50. package/lib/cjs/mapLayersFormats.d.ts.map +1 -1
  51. package/lib/cjs/mapLayersFormats.js +11 -1
  52. package/lib/cjs/mapLayersFormats.js.map +1 -1
  53. package/lib/esm/ArcGisFeature/ArcGisCanvasRenderer.d.ts +19 -0
  54. package/lib/esm/ArcGisFeature/ArcGisCanvasRenderer.d.ts.map +1 -0
  55. package/lib/esm/ArcGisFeature/ArcGisCanvasRenderer.js +42 -0
  56. package/lib/esm/ArcGisFeature/ArcGisCanvasRenderer.js.map +1 -0
  57. package/lib/esm/ArcGisFeature/ArcGisFeatureFormat.d.ts.map +1 -1
  58. package/lib/esm/ArcGisFeature/ArcGisFeatureFormat.js +4 -1
  59. package/lib/esm/ArcGisFeature/ArcGisFeatureFormat.js.map +1 -1
  60. package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.d.ts +16 -8
  61. package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.d.ts.map +1 -1
  62. package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.js +158 -46
  63. package/lib/esm/ArcGisFeature/ArcGisFeatureProvider.js.map +1 -1
  64. package/lib/esm/ArcGisFeature/ArcGisFeatureQuery.d.ts +5 -0
  65. package/lib/esm/ArcGisFeature/ArcGisFeatureQuery.d.ts.map +1 -1
  66. package/lib/esm/ArcGisFeature/ArcGisFeatureQuery.js +4 -0
  67. package/lib/esm/ArcGisFeature/ArcGisFeatureQuery.js.map +1 -1
  68. package/lib/esm/ArcGisFeature/ArcGisFeatureReader.d.ts +15 -6
  69. package/lib/esm/ArcGisFeature/ArcGisFeatureReader.d.ts.map +1 -1
  70. package/lib/esm/ArcGisFeature/ArcGisFeatureReader.js +4 -2
  71. package/lib/esm/ArcGisFeature/ArcGisFeatureReader.js.map +1 -1
  72. package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.d.ts +14 -0
  73. package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.d.ts.map +1 -0
  74. package/lib/esm/ArcGisFeature/{ArcGisFeatureJSON.js → ArcGisJsonFeatureReader.js} +51 -55
  75. package/lib/esm/ArcGisFeature/ArcGisJsonFeatureReader.js.map +1 -0
  76. package/lib/esm/ArcGisFeature/ArcGisPbfFeatureReader.d.ts +22 -0
  77. package/lib/esm/ArcGisFeature/ArcGisPbfFeatureReader.d.ts.map +1 -0
  78. package/lib/esm/ArcGisFeature/ArcGisPbfFeatureReader.js +245 -0
  79. package/lib/esm/ArcGisFeature/ArcGisPbfFeatureReader.js.map +1 -0
  80. package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.d.ts +32 -77
  81. package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.d.ts.map +1 -1
  82. package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.js +84 -124
  83. package/lib/esm/ArcGisFeature/ArcGisSymbologyRenderer.js.map +1 -1
  84. package/lib/esm/ArcGisFeature/EsriSymbology.d.ts +152 -0
  85. package/lib/esm/ArcGisFeature/EsriSymbology.d.ts.map +1 -0
  86. package/lib/esm/ArcGisFeature/EsriSymbology.js +170 -0
  87. package/lib/esm/ArcGisFeature/EsriSymbology.js.map +1 -0
  88. package/lib/esm/Tools/MapFeatureInfoDecorator.d.ts +34 -0
  89. package/lib/esm/Tools/MapFeatureInfoDecorator.d.ts.map +1 -0
  90. package/lib/esm/Tools/MapFeatureInfoDecorator.js +277 -0
  91. package/lib/esm/Tools/MapFeatureInfoDecorator.js.map +1 -0
  92. package/lib/esm/Tools/MapFeatureInfoTool.d.ts +38 -0
  93. package/lib/esm/Tools/MapFeatureInfoTool.d.ts.map +1 -0
  94. package/lib/esm/Tools/MapFeatureInfoTool.js +110 -0
  95. package/lib/esm/Tools/MapFeatureInfoTool.js.map +1 -0
  96. package/lib/esm/map-layers-formats.d.ts +1 -0
  97. package/lib/esm/map-layers-formats.d.ts.map +1 -1
  98. package/lib/esm/map-layers-formats.js +1 -0
  99. package/lib/esm/map-layers-formats.js.map +1 -1
  100. package/lib/esm/mapLayersFormats.d.ts +12 -1
  101. package/lib/esm/mapLayersFormats.d.ts.map +1 -1
  102. package/lib/esm/mapLayersFormats.js +13 -2
  103. package/lib/esm/mapLayersFormats.js.map +1 -1
  104. package/lib/public/locales/en/mapLayersFormats.json +12 -0
  105. package/package.json +19 -22
  106. package/.nycrc +0 -10
  107. package/.rush/temp/operation/build/all.log +0 -3
  108. package/.rush/temp/operation/build/state.json +0 -3
  109. package/.rush/temp/operation/cover/all.log +0 -98
  110. package/.rush/temp/operation/cover/state.json +0 -3
  111. package/.rush/temp/operation/docs/all.log +0 -30
  112. package/.rush/temp/operation/docs/state.json +0 -3
  113. package/.rush/temp/package-deps_build.json +0 -36
  114. package/.rush/temp/package-deps_cover.json +0 -36
  115. package/.rush/temp/package-deps_docs.json +0 -36
  116. package/.rush/temp/shrinkwrap-deps.json +0 -505
  117. package/CHANGELOG.json +0 -119
  118. package/config/rush-project.json +0 -6
  119. package/lib/cjs/ArcGisFeature/ArcGisFeatureJSON.d.ts +0 -15
  120. package/lib/cjs/ArcGisFeature/ArcGisFeatureJSON.d.ts.map +0 -1
  121. package/lib/cjs/ArcGisFeature/ArcGisFeatureJSON.js.map +0 -1
  122. package/lib/cjs/ArcGisFeature/ArcGisFeaturePBF.d.ts +0 -15
  123. package/lib/cjs/ArcGisFeature/ArcGisFeaturePBF.d.ts.map +0 -1
  124. package/lib/cjs/ArcGisFeature/ArcGisFeaturePBF.js +0 -201
  125. package/lib/cjs/ArcGisFeature/ArcGisFeaturePBF.js.map +0 -1
  126. package/lib/cjs/ArcGisFeature/ArcGisFeatureRenderer.d.ts +0 -33
  127. package/lib/cjs/ArcGisFeature/ArcGisFeatureRenderer.d.ts.map +0 -1
  128. package/lib/cjs/ArcGisFeature/ArcGisFeatureRenderer.js +0 -143
  129. package/lib/cjs/ArcGisFeature/ArcGisFeatureRenderer.js.map +0 -1
  130. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.d.ts +0 -2
  131. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.d.ts.map +0 -1
  132. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.js +0 -35
  133. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.js.map +0 -1
  134. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureJSON.test.d.ts +0 -2
  135. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureJSON.test.d.ts.map +0 -1
  136. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureJSON.test.js +0 -162
  137. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureJSON.test.js.map +0 -1
  138. package/lib/cjs/test/ArcGisFeature/ArcGisFeaturePBF.test.d.ts +0 -2
  139. package/lib/cjs/test/ArcGisFeature/ArcGisFeaturePBF.test.d.ts.map +0 -1
  140. package/lib/cjs/test/ArcGisFeature/ArcGisFeaturePBF.test.js +0 -168
  141. package/lib/cjs/test/ArcGisFeature/ArcGisFeaturePBF.test.js.map +0 -1
  142. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureProvider.test.d.ts +0 -2
  143. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureProvider.test.d.ts.map +0 -1
  144. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureProvider.test.js +0 -680
  145. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureProvider.test.js.map +0 -1
  146. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureQuery.test.d.ts +0 -2
  147. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureQuery.test.d.ts.map +0 -1
  148. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureQuery.test.js +0 -104
  149. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureQuery.test.js.map +0 -1
  150. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureRenderer.test.d.ts +0 -2
  151. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureRenderer.test.d.ts.map +0 -1
  152. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureRenderer.test.js +0 -215
  153. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureRenderer.test.js.map +0 -1
  154. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureResponse.test.d.ts +0 -2
  155. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureResponse.test.d.ts.map +0 -1
  156. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureResponse.test.js +0 -95
  157. package/lib/cjs/test/ArcGisFeature/ArcGisFeatureResponse.test.js.map +0 -1
  158. package/lib/cjs/test/ArcGisFeature/ArcGisSymbologyRenderer.test.d.ts +0 -2
  159. package/lib/cjs/test/ArcGisFeature/ArcGisSymbologyRenderer.test.d.ts.map +0 -1
  160. package/lib/cjs/test/ArcGisFeature/ArcGisSymbologyRenderer.test.js +0 -60
  161. package/lib/cjs/test/ArcGisFeature/ArcGisSymbologyRenderer.test.js.map +0 -1
  162. package/lib/cjs/test/ArcGisFeature/Mocks.d.ts +0 -7
  163. package/lib/cjs/test/ArcGisFeature/Mocks.d.ts.map +0 -1
  164. package/lib/cjs/test/ArcGisFeature/Mocks.js +0 -19
  165. package/lib/cjs/test/ArcGisFeature/Mocks.js.map +0 -1
  166. package/lib/cjs/test/ArcGisFeature/NewYorkDataset.d.ts +0 -56
  167. package/lib/cjs/test/ArcGisFeature/NewYorkDataset.d.ts.map +0 -1
  168. package/lib/cjs/test/ArcGisFeature/NewYorkDataset.js +0 -420
  169. package/lib/cjs/test/ArcGisFeature/NewYorkDataset.js.map +0 -1
  170. package/lib/cjs/test/ArcGisFeature/PhillyLandmarksDataset.d.ts +0 -1043
  171. package/lib/cjs/test/ArcGisFeature/PhillyLandmarksDataset.d.ts.map +0 -1
  172. package/lib/cjs/test/ArcGisFeature/PhillyLandmarksDataset.js +0 -427
  173. package/lib/cjs/test/ArcGisFeature/PhillyLandmarksDataset.js.map +0 -1
  174. package/lib/cjs/test/coverage/.nyc_output/2a6113c3-018f-40b1-ae8f-f3d0cbe030ce.json +0 -1
  175. package/lib/cjs/test/coverage/.nyc_output/74410d89-cce2-4b2a-89c9-6d56490c73f1.json +0 -1
  176. package/lib/cjs/test/coverage/.nyc_output/processinfo/2a6113c3-018f-40b1-ae8f-f3d0cbe030ce.json +0 -1
  177. package/lib/cjs/test/coverage/.nyc_output/processinfo/74410d89-cce2-4b2a-89c9-6d56490c73f1.json +0 -1
  178. package/lib/cjs/test/coverage/.nyc_output/processinfo/index.json +0 -1
  179. package/lib/cjs/test/coverage/cobertura-coverage.xml +0 -1169
  180. package/lib/cjs/test/coverage/lcov-report/base.css +0 -224
  181. package/lib/cjs/test/coverage/lcov-report/block-navigation.js +0 -87
  182. package/lib/cjs/test/coverage/lcov-report/favicon.png +0 -0
  183. package/lib/cjs/test/coverage/lcov-report/index.html +0 -131
  184. package/lib/cjs/test/coverage/lcov-report/prettify.css +0 -1
  185. package/lib/cjs/test/coverage/lcov-report/prettify.js +0 -2
  186. package/lib/cjs/test/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  187. package/lib/cjs/test/coverage/lcov-report/sorter.js +0 -196
  188. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureFormat.ts.html +0 -133
  189. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureJSON.ts.html +0 -550
  190. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeaturePBF.ts.html +0 -730
  191. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureProvider.ts.html +0 -1546
  192. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureQuery.ts.html +0 -763
  193. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureReader.ts.html +0 -223
  194. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureRenderer.ts.html +0 -598
  195. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisFeatureResponse.ts.html +0 -301
  196. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/ArcGisSymbologyRenderer.ts.html +0 -832
  197. package/lib/cjs/test/coverage/lcov-report/src/ArcGisFeature/index.html +0 -236
  198. package/lib/cjs/test/coverage/lcov-report/src/index.html +0 -131
  199. package/lib/cjs/test/coverage/lcov-report/src/map-layers-formats.ts.html +0 -130
  200. package/lib/cjs/test/coverage/lcov-report/src/mapLayersFormats.ts.html +0 -163
  201. package/lib/cjs/test/coverage/lcov.info +0 -1358
  202. package/lib/cjs/tsconfig.tsbuildinfo +0 -1
  203. package/lib/esm/ArcGisFeature/ArcGisFeatureJSON.d.ts +0 -15
  204. package/lib/esm/ArcGisFeature/ArcGisFeatureJSON.d.ts.map +0 -1
  205. package/lib/esm/ArcGisFeature/ArcGisFeatureJSON.js.map +0 -1
  206. package/lib/esm/ArcGisFeature/ArcGisFeaturePBF.d.ts +0 -15
  207. package/lib/esm/ArcGisFeature/ArcGisFeaturePBF.d.ts.map +0 -1
  208. package/lib/esm/ArcGisFeature/ArcGisFeaturePBF.js +0 -197
  209. package/lib/esm/ArcGisFeature/ArcGisFeaturePBF.js.map +0 -1
  210. package/lib/esm/ArcGisFeature/ArcGisFeatureRenderer.d.ts +0 -33
  211. package/lib/esm/ArcGisFeature/ArcGisFeatureRenderer.d.ts.map +0 -1
  212. package/lib/esm/ArcGisFeature/ArcGisFeatureRenderer.js +0 -139
  213. package/lib/esm/ArcGisFeature/ArcGisFeatureRenderer.js.map +0 -1
  214. package/lib/esm/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.d.ts +0 -2
  215. package/lib/esm/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.d.ts.map +0 -1
  216. package/lib/esm/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.js +0 -33
  217. package/lib/esm/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.js.map +0 -1
  218. package/lib/esm/test/ArcGisFeature/ArcGisFeatureJSON.test.d.ts +0 -2
  219. package/lib/esm/test/ArcGisFeature/ArcGisFeatureJSON.test.d.ts.map +0 -1
  220. package/lib/esm/test/ArcGisFeature/ArcGisFeatureJSON.test.js +0 -160
  221. package/lib/esm/test/ArcGisFeature/ArcGisFeatureJSON.test.js.map +0 -1
  222. package/lib/esm/test/ArcGisFeature/ArcGisFeaturePBF.test.d.ts +0 -2
  223. package/lib/esm/test/ArcGisFeature/ArcGisFeaturePBF.test.d.ts.map +0 -1
  224. package/lib/esm/test/ArcGisFeature/ArcGisFeaturePBF.test.js +0 -166
  225. package/lib/esm/test/ArcGisFeature/ArcGisFeaturePBF.test.js.map +0 -1
  226. package/lib/esm/test/ArcGisFeature/ArcGisFeatureProvider.test.d.ts +0 -2
  227. package/lib/esm/test/ArcGisFeature/ArcGisFeatureProvider.test.d.ts.map +0 -1
  228. package/lib/esm/test/ArcGisFeature/ArcGisFeatureProvider.test.js +0 -678
  229. package/lib/esm/test/ArcGisFeature/ArcGisFeatureProvider.test.js.map +0 -1
  230. package/lib/esm/test/ArcGisFeature/ArcGisFeatureQuery.test.d.ts +0 -2
  231. package/lib/esm/test/ArcGisFeature/ArcGisFeatureQuery.test.d.ts.map +0 -1
  232. package/lib/esm/test/ArcGisFeature/ArcGisFeatureQuery.test.js +0 -102
  233. package/lib/esm/test/ArcGisFeature/ArcGisFeatureQuery.test.js.map +0 -1
  234. package/lib/esm/test/ArcGisFeature/ArcGisFeatureRenderer.test.d.ts +0 -2
  235. package/lib/esm/test/ArcGisFeature/ArcGisFeatureRenderer.test.d.ts.map +0 -1
  236. package/lib/esm/test/ArcGisFeature/ArcGisFeatureRenderer.test.js +0 -213
  237. package/lib/esm/test/ArcGisFeature/ArcGisFeatureRenderer.test.js.map +0 -1
  238. package/lib/esm/test/ArcGisFeature/ArcGisFeatureResponse.test.d.ts +0 -2
  239. package/lib/esm/test/ArcGisFeature/ArcGisFeatureResponse.test.d.ts.map +0 -1
  240. package/lib/esm/test/ArcGisFeature/ArcGisFeatureResponse.test.js +0 -93
  241. package/lib/esm/test/ArcGisFeature/ArcGisFeatureResponse.test.js.map +0 -1
  242. package/lib/esm/test/ArcGisFeature/ArcGisSymbologyRenderer.test.d.ts +0 -2
  243. package/lib/esm/test/ArcGisFeature/ArcGisSymbologyRenderer.test.d.ts.map +0 -1
  244. package/lib/esm/test/ArcGisFeature/ArcGisSymbologyRenderer.test.js +0 -58
  245. package/lib/esm/test/ArcGisFeature/ArcGisSymbologyRenderer.test.js.map +0 -1
  246. package/lib/esm/test/ArcGisFeature/Mocks.d.ts +0 -7
  247. package/lib/esm/test/ArcGisFeature/Mocks.d.ts.map +0 -1
  248. package/lib/esm/test/ArcGisFeature/Mocks.js +0 -16
  249. package/lib/esm/test/ArcGisFeature/Mocks.js.map +0 -1
  250. package/lib/esm/test/ArcGisFeature/NewYorkDataset.d.ts +0 -56
  251. package/lib/esm/test/ArcGisFeature/NewYorkDataset.d.ts.map +0 -1
  252. package/lib/esm/test/ArcGisFeature/NewYorkDataset.js +0 -417
  253. package/lib/esm/test/ArcGisFeature/NewYorkDataset.js.map +0 -1
  254. package/lib/esm/test/ArcGisFeature/PhillyLandmarksDataset.d.ts +0 -1043
  255. package/lib/esm/test/ArcGisFeature/PhillyLandmarksDataset.d.ts.map +0 -1
  256. package/lib/esm/test/ArcGisFeature/PhillyLandmarksDataset.js +0 -424
  257. package/lib/esm/test/ArcGisFeature/PhillyLandmarksDataset.js.map +0 -1
  258. package/lib/esm/tsconfig.tsbuildinfo +0 -1
  259. package/lib/test/junit_results.xml +0 -159
  260. package/map-layers-formats.build.log +0 -30
  261. package/src/ArcGisFeature/ArcGisFeatureFormat.ts +0 -16
  262. package/src/ArcGisFeature/ArcGisFeatureJSON.ts +0 -155
  263. package/src/ArcGisFeature/ArcGisFeaturePBF.ts +0 -215
  264. package/src/ArcGisFeature/ArcGisFeatureProvider.ts +0 -487
  265. package/src/ArcGisFeature/ArcGisFeatureQuery.ts +0 -226
  266. package/src/ArcGisFeature/ArcGisFeatureReader.ts +0 -46
  267. package/src/ArcGisFeature/ArcGisFeatureRenderer.ts +0 -171
  268. package/src/ArcGisFeature/ArcGisFeatureResponse.ts +0 -72
  269. package/src/ArcGisFeature/ArcGisSymbologyRenderer.ts +0 -249
  270. package/src/ArcGisFeature/esriPBuffer.gen.ts +0 -2612
  271. package/src/map-layers-formats.ts +0 -15
  272. package/src/mapLayersFormats.ts +0 -26
  273. package/src/test/ArcGisFeature/ArcGisFeatureFeatureFormats.test.ts +0 -46
  274. package/src/test/ArcGisFeature/ArcGisFeatureJSON.test.ts +0 -202
  275. package/src/test/ArcGisFeature/ArcGisFeaturePBF.test.ts +0 -227
  276. package/src/test/ArcGisFeature/ArcGisFeatureProvider.test.ts +0 -805
  277. package/src/test/ArcGisFeature/ArcGisFeatureQuery.test.ts +0 -117
  278. package/src/test/ArcGisFeature/ArcGisFeatureRenderer.test.ts +0 -296
  279. package/src/test/ArcGisFeature/ArcGisFeatureResponse.test.ts +0 -109
  280. package/src/test/ArcGisFeature/ArcGisSymbologyRenderer.test.ts +0 -77
  281. package/src/test/ArcGisFeature/Mocks.ts +0 -19
  282. package/src/test/ArcGisFeature/NewYorkDataset.ts +0 -423
  283. package/src/test/ArcGisFeature/PhillyLandmarksDataset.ts +0 -455
  284. package/tsconfig.json +0 -20
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.EsriUniqueValueRenderer = exports.EsriSimpleRenderer = exports.EsriRenderer = exports.EsriUniqueValueInfo = exports.EsriSFS = exports.EsriPMS = exports.EsriSLS = exports.EsriSymbol = void 0;
8
+ const core_bentley_1 = require("@itwin/core-bentley");
9
+ const core_common_1 = require("@itwin/core-common");
10
+ // Convert a channel array [r, g, b, a] to ColorDef
11
+ function colorFromArray(channels) {
12
+ if (channels && channels.length === 4) {
13
+ // Alpha channel is reversed, 255 = opaque
14
+ return core_common_1.ColorDef.from(channels[0], channels[1], channels[2], 255 - channels[3]);
15
+ }
16
+ return undefined;
17
+ }
18
+ /** @internal */
19
+ class EsriSymbol {
20
+ static fromJSON(props) {
21
+ if (props.type === "esriSFS") {
22
+ return EsriSFS.fromJSON(props);
23
+ }
24
+ else if (props.type === "esriSLS") {
25
+ return EsriSLS.fromJSON(props);
26
+ }
27
+ else if (props.type === "esriPMS") {
28
+ return EsriPMS.fromJSON(props);
29
+ }
30
+ throw new Error("Unknown ESRI symbology type");
31
+ }
32
+ }
33
+ exports.EsriSymbol = EsriSymbol;
34
+ /** @internal */
35
+ class EsriSLS {
36
+ get color() { return colorFromArray(this.props.color); }
37
+ get type() { return this.props.type; }
38
+ get width() { return this.props.width; }
39
+ get style() { return this.props.style; }
40
+ constructor(json) {
41
+ this.props = json;
42
+ }
43
+ static fromJSON(json) {
44
+ return new EsriSLS(json);
45
+ }
46
+ }
47
+ exports.EsriSLS = EsriSLS;
48
+ /** @internal */
49
+ class EsriPMS {
50
+ get type() { return this.props.type; }
51
+ get url() { return this.props.url; }
52
+ get imageData() { return this.props.imageData; }
53
+ get imageUrl() { return `data:${this.contentType};base64,${this.imageData}`; }
54
+ get image() {
55
+ (0, core_bentley_1.assert)(this._image !== undefined);
56
+ return this._image;
57
+ }
58
+ get contentType() { return this.props.contentType; }
59
+ get width() { return this.props.width; }
60
+ get height() { return this.props.height; }
61
+ get xoffset() { return this.props.xoffset; }
62
+ get yoffset() { return this.props.yoffset; }
63
+ get angle() { return this.props.angle; }
64
+ async loadImage() {
65
+ if (this._image === undefined) {
66
+ this._image = new Image();
67
+ return new Promise((resolve, reject) => {
68
+ if (this._image) {
69
+ this._image.addEventListener("load", () => {
70
+ resolve();
71
+ });
72
+ this._image.src = this.imageUrl;
73
+ }
74
+ else
75
+ reject(new Error("Failed to load image"));
76
+ });
77
+ }
78
+ }
79
+ constructor(json) {
80
+ this.props = json;
81
+ }
82
+ static fromJSON(json) {
83
+ return new EsriPMS(json);
84
+ }
85
+ }
86
+ exports.EsriPMS = EsriPMS;
87
+ /** @internal */
88
+ class EsriSFS {
89
+ get color() { return colorFromArray(this.props.color); }
90
+ get type() { return this.props.type; }
91
+ get style() { return this.props.style; }
92
+ get outline() { return this._outline; }
93
+ constructor(json) {
94
+ this.props = json;
95
+ if (json.outline)
96
+ this._outline = EsriSLS.fromJSON(json.outline);
97
+ }
98
+ static fromJSON(json) {
99
+ return new EsriSFS(json);
100
+ }
101
+ }
102
+ exports.EsriSFS = EsriSFS;
103
+ /** @internal */
104
+ class EsriUniqueValueInfo {
105
+ constructor(json) {
106
+ this.value = json.value;
107
+ this.label = json.label;
108
+ this.description = json.description;
109
+ this.symbol = EsriSymbol.fromJSON(json.symbol);
110
+ }
111
+ static fromJSON(json) {
112
+ return new EsriUniqueValueInfo(json);
113
+ }
114
+ }
115
+ exports.EsriUniqueValueInfo = EsriUniqueValueInfo;
116
+ /** @internal */
117
+ class EsriRenderer {
118
+ static fromJSON(json) {
119
+ if (json.type === "simple")
120
+ return EsriSimpleRenderer.fromJSON(json);
121
+ else if (json.type === "uniqueValue")
122
+ return EsriUniqueValueRenderer.fromJSON(json);
123
+ else
124
+ throw Error("Unknown renderer type");
125
+ }
126
+ }
127
+ exports.EsriRenderer = EsriRenderer;
128
+ /** @internal */
129
+ class EsriSimpleRenderer extends EsriRenderer {
130
+ constructor(json) {
131
+ super();
132
+ this.type = "simple";
133
+ this.type = json.type;
134
+ this.symbol = EsriSymbol.fromJSON(json.symbol);
135
+ }
136
+ async initialize() {
137
+ const promises = [];
138
+ if (this.symbol.type === "esriPMS") {
139
+ promises.push(this.symbol.loadImage());
140
+ }
141
+ await Promise.all(promises);
142
+ }
143
+ static fromJSON(json) {
144
+ return new EsriSimpleRenderer(json);
145
+ }
146
+ }
147
+ exports.EsriSimpleRenderer = EsriSimpleRenderer;
148
+ /** @internal */
149
+ class EsriUniqueValueRenderer extends EsriRenderer {
150
+ get field1() { return this._props.field1 ?? undefined; }
151
+ get field2() { return this._props.field2 ?? undefined; }
152
+ get field3() { return this._props.field3 ?? undefined; }
153
+ constructor(json) {
154
+ super();
155
+ this.type = "uniqueValue";
156
+ this.uniqueValueInfos = [];
157
+ if (json.defaultSymbol)
158
+ this.defaultSymbol = EsriSymbol.fromJSON(json.defaultSymbol);
159
+ for (const uvi of json.uniqueValueInfos) {
160
+ this.uniqueValueInfos.push(EsriUniqueValueInfo.fromJSON(uvi));
161
+ }
162
+ this._props = json;
163
+ }
164
+ async initialize() {
165
+ const promises = [];
166
+ if (this.defaultSymbol?.type === "esriPMS") {
167
+ promises.push(this.defaultSymbol.loadImage());
168
+ }
169
+ for (const uvi of this.uniqueValueInfos) {
170
+ if (uvi.symbol.type === "esriPMS") {
171
+ promises.push(uvi.symbol.loadImage());
172
+ }
173
+ }
174
+ await Promise.all(promises);
175
+ }
176
+ static fromJSON(json) {
177
+ return new EsriUniqueValueRenderer(json);
178
+ }
179
+ }
180
+ exports.EsriUniqueValueRenderer = EsriUniqueValueRenderer;
181
+ //# sourceMappingURL=EsriSymbology.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EsriSymbology.js","sourceRoot":"","sources":["../../../src/ArcGisFeature/EsriSymbology.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert } from \"@itwin/core-bentley\";\r\nimport { ColorDef } from \"@itwin/core-common\";\r\n\r\n// Convert a channel array [r, g, b, a] to ColorDef\r\nfunction colorFromArray(channels?: number[]) {\r\n if (channels && channels.length === 4) {\r\n // Alpha channel is reversed, 255 = opaque\r\n return ColorDef.from(channels[0], channels[1], channels[2], 255 - channels[3]);\r\n }\r\n return undefined;\r\n}\r\n\r\n/** @internal */\r\nexport type EsriSymbolPropsType = \"esriSFS\" | \"esriPMS\" | \"esriSLS\" | \"esriSMS\" | \"esriTS\" | \"CIMSymbolReference\";\r\n\r\n/** @internal */\r\nexport interface EsriSymbolCommonProps {\r\n type: EsriSymbolPropsType;\r\n}\r\n\r\n/** @internal */\r\nexport type EsriSymbolProps = EsriSLSProps | EsriPMSProps | EsriSFSProps;\r\n\r\n/** @internal */\r\nexport abstract class EsriSymbol implements EsriSymbolCommonProps {\r\n public readonly abstract type: EsriSymbolPropsType;\r\n\r\n public static fromJSON(props: EsriSymbolProps) {\r\n if (props.type === \"esriSFS\") {\r\n return EsriSFS.fromJSON(props as EsriSFSProps);\r\n } else if (props.type === \"esriSLS\") {\r\n return EsriSLS.fromJSON(props as EsriSLSProps);\r\n } else if (props.type === \"esriPMS\") {\r\n return EsriPMS.fromJSON(props as EsriPMSProps);\r\n }\r\n throw new Error(\"Unknown ESRI symbology type\");\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport type EsriSLSStyle = \"esriSLSDash\" | \"esriSLSDashDot\" | \"esriSLSDashDotDot\" | \"esriSLSDot\" | \"esriSLSLongDash\" | \"esriSLSLongDashDot\" |\r\n\"esriSLSNull\" | \"esriSLSShortDash\" | \"esriSLSShortDashDot\" | \"esriSLSShortDashDotDot\" | \"esriSLSShortDot\" | \"esriSLSSolid\";\r\n\r\n/** @internal */\r\nexport interface EsriSLSProps extends EsriSymbolCommonProps {\r\n color: number[];\r\n type: EsriSymbolPropsType;\r\n width: number;\r\n style: EsriSLSStyle;\r\n}\r\n\r\n/** @internal */\r\nexport class EsriSLS implements EsriSymbolCommonProps {\r\n public readonly props: EsriSLSProps;\r\n\r\n public get color() { return colorFromArray(this.props.color); }\r\n public get type() { return this.props.type; }\r\n public get width() { return this.props.width; }\r\n public get style() { return this.props.style; }\r\n\r\n constructor(json: EsriSLSProps) {\r\n this.props = json;\r\n }\r\n\r\n public static fromJSON(json: EsriSLSProps) {\r\n return new EsriSLS(json);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport interface EsriPMSProps extends EsriSymbolCommonProps {\r\n type: EsriSymbolPropsType;\r\n url: string;\r\n imageData: string;\r\n contentType: string;\r\n width?: number;\r\n height?: number;\r\n xoffset?: number;\r\n yoffset?: number;\r\n angle?: number;\r\n}\r\n\r\n/** @internal */\r\nexport class EsriPMS implements EsriSymbolCommonProps {\r\n public readonly props: EsriPMSProps;\r\n private _image: HTMLImageElement|undefined;\r\n\r\n public get type() { return this.props.type; }\r\n public get url() { return this.props.url; }\r\n public get imageData() { return this.props.imageData; }\r\n public get imageUrl() { return `data:${this.contentType};base64,${this.imageData}`; }\r\n public get image() {\r\n assert(this._image !== undefined);\r\n return this._image;\r\n }\r\n public get contentType() { return this.props.contentType; }\r\n public get width() { return this.props.width; }\r\n public get height() { return this.props.height; }\r\n public get xoffset() { return this.props.xoffset; }\r\n public get yoffset() { return this.props.yoffset; }\r\n public get angle() { return this.props.angle; }\r\n\r\n public async loadImage() {\r\n if (this._image === undefined) {\r\n this._image = new Image();\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n if (this._image) {\r\n this._image.addEventListener(\"load\", () => {\r\n resolve();\r\n });\r\n this._image.src = this.imageUrl;\r\n } else\r\n reject(new Error(\"Failed to load image\"));\r\n });\r\n }\r\n }\r\n\r\n private constructor(json: EsriPMSProps) {\r\n this.props = json;\r\n }\r\n\r\n public static fromJSON(json: EsriPMSProps) {\r\n return new EsriPMS(json);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport type EsriSFSStyleProps = \"esriSFSBackwardDiagonal\" | \"esriSFSCross\" | \"esriSFSDiagonalCross\" | \"esriSFSForwardDiagonal\" | \"esriSFSHorizontal\" | \"esriSFSNull\" | \"esriSFSSolid\" | \"esriSFSVertical\";\r\n\r\n/** @internal */\r\nexport interface EsriSFSProps {\r\n color?: number[];\r\n type: EsriSymbolPropsType;\r\n style: EsriSFSStyleProps;\r\n outline?: EsriSLSProps;\r\n}\r\n\r\n/** @internal */\r\nexport class EsriSFS implements EsriSymbolCommonProps {\r\n public readonly props: EsriSFSProps;\r\n private _outline: EsriSLS | undefined;\r\n\r\n public get color() { return colorFromArray(this.props.color); }\r\n public get type() { return this.props.type; }\r\n public get style() { return this.props.style; }\r\n public get outline() { return this._outline; }\r\n constructor(json: EsriSFSProps) {\r\n this.props = json;\r\n if (json.outline)\r\n this._outline = EsriSLS.fromJSON(json.outline);\r\n }\r\n\r\n public static fromJSON(json: EsriSFSProps): EsriSFS {\r\n return new EsriSFS(json);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport interface EsriUniqueValueInfoProps {\r\n value: string;\r\n label?: string;\r\n description?: string;\r\n symbol: EsriSymbolProps;\r\n}\r\n\r\n/** @internal */\r\nexport class EsriUniqueValueInfo {\r\n\r\n public readonly value: string;\r\n public readonly label: string|undefined;\r\n public readonly description: string|undefined;\r\n public readonly symbol: EsriSymbol;\r\n\r\n private constructor(json: EsriUniqueValueInfoProps) {\r\n this.value = json.value;\r\n this.label = json.label;\r\n this.description = json.description;\r\n this.symbol = EsriSymbol.fromJSON(json.symbol);\r\n }\r\n\r\n public static fromJSON(json: EsriUniqueValueInfoProps) {\r\n return new EsriUniqueValueInfo(json);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport interface EsriRendererBaseProps {\r\n type: EsriRendererType;\r\n}\r\n\r\n/** @internal */\r\nexport interface EsriSimpleRendererProps extends EsriRendererBaseProps {\r\n symbol: EsriSymbolProps;\r\n}\r\n\r\n/** @internal */\r\nexport interface EsriUniqueValueRendererProps extends EsriRendererBaseProps {\r\n symbol?: EsriSymbolProps;\r\n}\r\n\r\n/** @internal */\r\nexport interface EsriUniqueValueRendererProps extends EsriRendererBaseProps {\r\n field1?: string;\r\n field2?: string;\r\n field3?: string;\r\n defaultSymbol?: EsriSymbolProps;\r\n uniqueValueInfos: EsriUniqueValueInfoProps[];\r\n}\r\n\r\n/** @internal */\r\nexport type EsriRendererType = \"simple\" | \"uniqueValue\";\r\n\r\n/** @internal */\r\nexport type EsriRendererProps = EsriSimpleRendererProps | EsriUniqueValueRendererProps;\r\n\r\n/** @internal */\r\nexport abstract class EsriRenderer {\r\n public readonly abstract type: EsriRendererType;\r\n public abstract initialize(): Promise<void>;\r\n public static fromJSON(json: EsriRendererProps): EsriRenderer {\r\n if (json.type === \"simple\")\r\n return EsriSimpleRenderer.fromJSON(json as EsriSimpleRendererProps);\r\n else if (json.type === \"uniqueValue\")\r\n return EsriUniqueValueRenderer.fromJSON(json as EsriUniqueValueRendererProps);\r\n else\r\n throw Error(\"Unknown renderer type\");\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class EsriSimpleRenderer extends EsriRenderer {\r\n public readonly type: EsriRendererType = \"simple\";\r\n public readonly symbol: EsriSymbol;\r\n\r\n protected constructor(json: EsriSimpleRendererProps) {\r\n super();\r\n this.type = json.type;\r\n this.symbol = EsriSymbol.fromJSON(json.symbol);\r\n }\r\n public async initialize() {\r\n const promises: Promise<void>[] = [];\r\n if (this.symbol.type === \"esriPMS\") {\r\n promises.push((this.symbol as EsriPMS).loadImage());\r\n }\r\n await Promise.all(promises);\r\n }\r\n\r\n public static override fromJSON(json: EsriSimpleRendererProps) {\r\n return new EsriSimpleRenderer(json);\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport class EsriUniqueValueRenderer extends EsriRenderer {\r\n private _props: EsriUniqueValueRendererProps;\r\n public readonly type: EsriRendererType = \"uniqueValue\";\r\n public readonly defaultSymbol?: EsriSymbol;\r\n public readonly uniqueValueInfos: EsriUniqueValueInfo[] = [];\r\n\r\n public get field1() { return this._props.field1 ?? undefined; }\r\n public get field2() { return this._props.field2 ?? undefined; }\r\n public get field3() { return this._props.field3 ?? undefined; }\r\n\r\n protected constructor(json: EsriUniqueValueRendererProps) {\r\n super();\r\n if (json.defaultSymbol)\r\n this.defaultSymbol = EsriSymbol.fromJSON(json.defaultSymbol);\r\n for (const uvi of json.uniqueValueInfos) {\r\n this.uniqueValueInfos.push(EsriUniqueValueInfo.fromJSON(uvi));\r\n }\r\n\r\n this._props = json;\r\n }\r\n\r\n public override async initialize() {\r\n const promises: Promise<void>[] = [];\r\n if (this.defaultSymbol?.type === \"esriPMS\") {\r\n promises.push((this.defaultSymbol as EsriPMS).loadImage());\r\n }\r\n for (const uvi of this.uniqueValueInfos) {\r\n if (uvi.symbol.type === \"esriPMS\") {\r\n promises.push((uvi.symbol as EsriPMS).loadImage());\r\n }\r\n }\r\n await Promise.all(promises);\r\n }\r\n\r\n public static override fromJSON(json: EsriUniqueValueRendererProps) {\r\n return new EsriUniqueValueRenderer(json);\r\n }\r\n}\r\n"]}
@@ -0,0 +1,34 @@
1
+ import { ColorDef } from "@itwin/core-common";
2
+ import { DecorateContext, Decorator } from "@itwin/core-frontend";
3
+ import { LineString3d, Point2d } from "@itwin/core-geometry";
4
+ import { MapFeatureInfoToolData } from "./MapFeatureInfoTool";
5
+ /** @internal */
6
+ export declare class MapFeatureInfoDecorator implements Decorator {
7
+ readonly useCachedDecorations = true;
8
+ readonly disableTerrainDraper = true;
9
+ markerSize: Point2d;
10
+ lineWidth: number;
11
+ private _highlightColor;
12
+ get highlightColor(): ColorDef;
13
+ set highlightColor(color: ColorDef);
14
+ get defaultMarkerIconSvgXml(): string;
15
+ private _drapePoints;
16
+ private _scratchPoints;
17
+ private _drapePointsStates;
18
+ private _drapedStrings?;
19
+ private _allGeomDraped;
20
+ private _draper?;
21
+ private _markerImage;
22
+ private _markerSet;
23
+ private _state;
24
+ private readonly _graphicType;
25
+ constructor();
26
+ private updateMarkerImage;
27
+ private _computeChordTolerance;
28
+ setState: (state: MapFeatureInfoToolData) => void;
29
+ private getGeometryTreeRef;
30
+ protected renderGraphics(context: DecorateContext): import("@itwin/core-frontend").RenderGraphic | undefined;
31
+ addDrapedStrings(drapedStrings: LineString3d[]): void;
32
+ decorate(context: DecorateContext): void;
33
+ }
34
+ //# sourceMappingURL=MapFeatureInfoDecorator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapFeatureInfoDecorator.d.ts","sourceRoot":"","sources":["../../../src/Tools/MapFeatureInfoDecorator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAuB,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EACsC,eAAe,EAAE,SAAS,EAED,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAwD,YAAY,EAAE,OAAO,EAAuG,MAAM,sBAAsB,CAAC;AACxN,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAqI9D,gBAAgB;AAChB,qBAAa,uBAAwB,YAAW,SAAS;IAEvD,SAAgB,oBAAoB,QAAQ;IAC5C,SAAgB,oBAAoB,QAAQ;IACrC,UAAU,UAAuB;IACjC,SAAS,SAAM;IACtB,OAAO,CAAC,eAAe,CAAmC;IAE1D,IAAW,cAAc,IACQ,QAAQ,CADkB;IAC3D,IAAW,cAAc,CAAC,KAAK,EAAE,QAAQ,EAGxC;IAED,IAAW,uBAAuB,WAAwtB;IAE1vB,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,cAAc,CAA0B;IAEhD,OAAO,CAAC,kBAAkB,CAAyB;IACnD,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,OAAO,CAAC,CAAgB;IAChC,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,UAAU,CAAsB;IAExC,OAAO,CAAC,MAAM,CAAqC;IAEnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;;IAOzD,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,sBAAsB;IAavB,QAAQ,UAAW,sBAAsB,UA2B9C;IAEF,OAAO,CAAC,kBAAkB;IAa1B,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,eAAe;IA+F1C,gBAAgB,CAAC,aAAa,EAAE,YAAY,EAAE;IAQ9C,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;CAShD"}
@@ -0,0 +1,281 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MapFeatureInfoDecorator = void 0;
4
+ /*---------------------------------------------------------------------------------------------
5
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
6
+ * See LICENSE.md in the project root for license terms and full copyright notice.
7
+ *--------------------------------------------------------------------------------------------*/
8
+ /* eslint-disable no-console */
9
+ const core_common_1 = require("@itwin/core-common");
10
+ const core_frontend_1 = require("@itwin/core-frontend");
11
+ const core_geometry_1 = require("@itwin/core-geometry");
12
+ /** A TileGeometryCollector that restricts collection to tiles that overlap a line string.
13
+ /* @internal
14
+ */
15
+ class DrapeLineStringCollector extends core_frontend_1.TileGeometryCollector {
16
+ constructor(user, chordTolerance, range, transform, _points) {
17
+ super({ user, chordTolerance, range, transform });
18
+ this._points = _points;
19
+ }
20
+ collectTile(tile) {
21
+ let status = super.collectTile(tile);
22
+ if ("reject" !== status && !this.rangeOverlapsLineString(tile.range))
23
+ status = "reject";
24
+ return status;
25
+ }
26
+ rangeOverlapsLineString(range) {
27
+ let inside = false;
28
+ const clipper = core_geometry_1.ConvexClipPlaneSet.createRange3dPlanes(range, true, true, true, true, false, false);
29
+ if (this._options.transform)
30
+ clipper.transformInPlace(this._options.transform);
31
+ for (let i = 0; i < this._points.length - 1 && !inside; i++)
32
+ inside = clipper.announceClippedSegmentIntervals(0, 1, this._points.getPoint3dAtUncheckedPointIndex(i), this._points.getPoint3dAtUncheckedPointIndex(i + 1));
33
+ return inside;
34
+ }
35
+ }
36
+ /** @internal */
37
+ class TerrainDraper {
38
+ constructor(viewport, treeRef) {
39
+ this.viewport = viewport;
40
+ this.treeRef = treeRef;
41
+ this.tileUserId = core_frontend_1.TileUser.generateId();
42
+ core_frontend_1.IModelApp.tileAdmin.registerUser(this);
43
+ }
44
+ dispose() {
45
+ core_frontend_1.IModelApp.tileAdmin.forgetUser(this);
46
+ }
47
+ get iModel() { return this.viewport.iModel; }
48
+ onRequestStateChanged() {
49
+ this.viewport.invalidateDecorations();
50
+ }
51
+ discloseTileTrees(trees) {
52
+ trees.disclose(this.treeRef);
53
+ }
54
+ drapeLineString(outStrings, inPoints, tolerance, maxDistance = 1.0E5) {
55
+ const tree = this.treeRef.treeOwner.load();
56
+ if (!tree)
57
+ return "loading";
58
+ const range = core_geometry_1.Range3d.createNull();
59
+ range.extendArray(inPoints);
60
+ range.extendZOnly(-maxDistance); // Expand - but not so much that we get opposite side of globe.
61
+ range.extendZOnly(maxDistance);
62
+ const collector = new DrapeLineStringCollector(this, tolerance, range, tree.iModelTransform, inPoints);
63
+ this.treeRef.collectTileGeometry(collector);
64
+ collector.requestMissingTiles();
65
+ if (collector.isAllGeometryLoaded && collector.polyfaces.length > 0) {
66
+ for (const polyface of collector.polyfaces)
67
+ outStrings.push(...core_geometry_1.PolyfaceQuery.sweepLineStringToFacets(inPoints, polyface, core_geometry_1.SweepLineStringToFacetsOptions.create(core_geometry_1.Vector3d.unitZ(), undefined, true, true, false, false)));
68
+ return "complete";
69
+ }
70
+ return "loading";
71
+ }
72
+ }
73
+ /** @internal */
74
+ class PinMarker extends core_frontend_1.Marker {
75
+ constructor(worldLocation, size, image) {
76
+ super(worldLocation, size);
77
+ this.image = image;
78
+ this.imageOffset = new core_geometry_1.Point3d(0, Math.floor(size.y * .5));
79
+ }
80
+ }
81
+ /** @internal */
82
+ class PinMarkerCluster extends core_frontend_1.Marker {
83
+ /** Create a new cluster marker */
84
+ constructor(location, size, cluster, image) {
85
+ super(location, size);
86
+ this.title = core_frontend_1.IModelApp.localization.getLocalizedString("mapLayersFormats:Messages.MapFeatureInfoDecorator.clusterZoomIn", { nbInstances: cluster.markers.length });
87
+ this.imageOffset = new core_geometry_1.Point3d(0, size.y * 0.5);
88
+ this.label = cluster.markers.length.toLocaleString();
89
+ this.labelColor = "black";
90
+ this.labelFont = "bold 14px sans-serif";
91
+ if (image)
92
+ this.setImage(image);
93
+ }
94
+ /** Show the cluster as a white circle with an outline */
95
+ drawFunc(ctx) {
96
+ ctx.beginPath();
97
+ ctx.strokeStyle = "#372528";
98
+ ctx.fillStyle = "white";
99
+ ctx.lineWidth = 5;
100
+ ctx.arc(0, 0, this.size.x * 0.5, 0, Math.PI * 2);
101
+ ctx.fill();
102
+ ctx.stroke();
103
+ }
104
+ onMouseButton(_ev) { return true; } // Don't allow clicks to be sent to active tool...
105
+ }
106
+ /** @internal */
107
+ class PinMarkerSet extends core_frontend_1.MarkerSet {
108
+ getClusterMarker(cluster) {
109
+ // No image passed to the cluster, we prefer to have the circle only
110
+ return new PinMarkerCluster(cluster.getClusterLocation(), cluster.markers[0].size, cluster, undefined);
111
+ }
112
+ }
113
+ /** @internal */
114
+ class MapFeatureInfoDecorator {
115
+ get highlightColor() { return this._highlightColor; }
116
+ set highlightColor(color) {
117
+ this.updateMarkerImage();
118
+ this._highlightColor = color;
119
+ }
120
+ get defaultMarkerIconSvgXml() { return `<svg class="indicator" viewBox="0 0 22 22" width="22" height="22" xmlns="http://www.w3.org/2000/svg"><path d="m11 0a7.44506 7.44506 0 0 0 -7.5 7.2875c0 1.65 1.132 4.2625 3.25477 8.1125 1.55652 2.75 4.24523 6.6 4.24523 6.6s2.68865-3.9875 4.24528-6.7375c2.12272-3.85 3.25472-6.4625 3.25472-8.1125a7.4215 7.4215 0 0 0 -7.5-7.15z" fill="black"/><path d="m11 1.01715a6.46476 6.46476 0 0 0 -6.48285 6.27033c0 1.72619 1.67181 4.97973 3.12836 7.62139.97564 1.7237 2.42828 3.92176 3.34118 5.27161.91413-1.39148 2.385-3.673 3.37336-5.41907 1.451-2.63171 3.1228-5.88525 3.1228-7.61139a6.39982 6.39982 0 0 0 -6.48285-6.13287zm.00183 8.98285a3 3 0 1 1 3-3 3 3 0 0 1 -3 3z" fill="${this.highlightColor.toRgbString()}"/></svg>`; }
121
+ constructor() {
122
+ this.useCachedDecorations = true;
123
+ this.disableTerrainDraper = true;
124
+ this.markerSize = new core_geometry_1.Point2d(32, 32);
125
+ this.lineWidth = 3;
126
+ this._highlightColor = core_common_1.ColorDef.from(0, 255, 255, 127);
127
+ this._drapePoints = new core_geometry_1.GrowableXYZArray();
128
+ this._scratchPoints = new core_geometry_1.GrowableXYZArray();
129
+ this._drapePointsStates = [];
130
+ this._allGeomDraped = false;
131
+ this._markerSet = new PinMarkerSet();
132
+ this._graphicType = core_frontend_1.GraphicType.WorldOverlay;
133
+ this.setState = (state) => {
134
+ this._drapedStrings = undefined;
135
+ this._allGeomDraped = false;
136
+ this._state = state;
137
+ core_frontend_1.IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);
138
+ this._drapePoints.clear();
139
+ this._drapePointsStates = [];
140
+ if (!this.disableTerrainDraper && this._state.mapInfo?.layerInfos && state.hit.viewport.displayStyle.displayTerrain) {
141
+ if (state.hit?.modelId) {
142
+ const drapeTreeRef = this.getGeometryTreeRef(state.hit.viewport);
143
+ if (drapeTreeRef) {
144
+ this._draper = new TerrainDraper(state.hit.viewport, drapeTreeRef);
145
+ return;
146
+ }
147
+ }
148
+ }
149
+ if (this._draper) {
150
+ // Dispose draper every time?
151
+ this._draper.dispose();
152
+ this._draper = undefined;
153
+ }
154
+ };
155
+ this._markerImage = new Image();
156
+ this.updateMarkerImage();
157
+ }
158
+ updateMarkerImage() {
159
+ const base64 = core_common_1.Base64EncodedString.encode(this.defaultMarkerIconSvgXml);
160
+ this._markerImage.src = `data:image/svg+xml;base64,${base64}`;
161
+ }
162
+ _computeChordTolerance(viewport, applyAspectRatioSkew, computeRange) {
163
+ let pixelSize = 1;
164
+ // Compute the horizontal distance in meters between two adjacent pixels at the center of the geometry.
165
+ pixelSize = viewport.getPixelSizeAtPoint(computeRange().center);
166
+ pixelSize = viewport.target.adjustPixelSizeForLOD(pixelSize);
167
+ // Aspect ratio skew > 1.0 stretches the view in Y. In that case use the smaller vertical pixel distance for our stroke tolerance.
168
+ const skew = applyAspectRatioSkew ? viewport.view.getAspectRatioSkew() : 0;
169
+ if (skew > 1)
170
+ pixelSize /= skew;
171
+ return pixelSize * 0.25;
172
+ }
173
+ getGeometryTreeRef(vp) {
174
+ let treeRef;
175
+ if (vp.backgroundMapSettings.applyTerrain) {
176
+ vp.forEachMapTreeRef((ref) => {
177
+ if (!treeRef && ref instanceof core_frontend_1.MapTileTreeReference) {
178
+ treeRef = ref.createGeometryTreeReference();
179
+ }
180
+ });
181
+ }
182
+ return treeRef;
183
+ }
184
+ renderGraphics(context) {
185
+ this._markerSet.markers.clear();
186
+ if (this._state?.mapInfo?.layerInfos === undefined) {
187
+ return undefined;
188
+ }
189
+ const builder = context.createGraphicBuilder(this._graphicType);
190
+ if (this._draper) {
191
+ if (this._drapePoints.length === 0 && this._state.mapInfo.layerInfos) {
192
+ for (const layerInfo of this._state.mapInfo.layerInfos) {
193
+ if (layerInfo.subLayerInfos) {
194
+ for (const subLayerInfo of layerInfo.subLayerInfos) {
195
+ for (const feature of subLayerInfo.features) {
196
+ if (feature.geometries) {
197
+ for (const geom of feature.geometries) {
198
+ if (geom.graphic.type === "linestring") {
199
+ this._drapePointsStates.push({ count: geom.graphic.points.length, collectorState: "loading" });
200
+ this._drapePoints.pushAll(geom.graphic.points);
201
+ }
202
+ }
203
+ }
204
+ }
205
+ }
206
+ }
207
+ }
208
+ }
209
+ if (!this._allGeomDraped) {
210
+ let hasMissingLineStrings = false;
211
+ let drapePointsOffset = 0;
212
+ for (const state of this._drapePointsStates) {
213
+ if (state.collectorState === "loading") {
214
+ this._scratchPoints.clear();
215
+ this._scratchPoints.resize(state.count);
216
+ let dstIdx = 0;
217
+ for (let srcIdx = drapePointsOffset; srcIdx < drapePointsOffset + state.count; srcIdx++) {
218
+ this._scratchPoints.transferFromGrowableXYZArray(dstIdx++, this._drapePoints, srcIdx);
219
+ }
220
+ const drapeRange = core_geometry_1.Range3d.createNull();
221
+ drapeRange.extendArray(this._scratchPoints);
222
+ const drapedStrings = [];
223
+ const tolerance = this._computeChordTolerance(context.viewport, true, () => drapeRange) * 10; // 10 pixels
224
+ if ("loading" === this._draper.drapeLineString(drapedStrings, this._scratchPoints, tolerance)) {
225
+ hasMissingLineStrings = true;
226
+ }
227
+ else {
228
+ this.addDrapedStrings(drapedStrings);
229
+ state.collectorState = "complete";
230
+ }
231
+ }
232
+ drapePointsOffset += state.count;
233
+ }
234
+ this._allGeomDraped = !hasMissingLineStrings;
235
+ }
236
+ if (this._drapedStrings) {
237
+ builder.setSymbology(this.highlightColor, this.highlightColor, this.lineWidth);
238
+ this._drapedStrings.forEach((line) => builder.addLineString(line.points));
239
+ }
240
+ }
241
+ else {
242
+ builder.setSymbology(this.highlightColor, this.highlightColor, this.lineWidth);
243
+ for (const layerInfo of this._state.mapInfo.layerInfos) {
244
+ if (layerInfo.subLayerInfos && !(layerInfo.subLayerInfos instanceof HTMLElement)) {
245
+ for (const subLayerInfo of layerInfo.subLayerInfos) {
246
+ for (const feature of subLayerInfo.features) {
247
+ if (feature.geometries) {
248
+ for (const geom of feature.geometries) {
249
+ if (geom.graphic.type === "pointstring") {
250
+ for (const point of geom.graphic.points)
251
+ this._markerSet.markers.add(new PinMarker(point, this.markerSize, this._markerImage));
252
+ }
253
+ else {
254
+ builder.addPrimitive(geom.graphic);
255
+ }
256
+ }
257
+ }
258
+ }
259
+ }
260
+ }
261
+ }
262
+ }
263
+ return builder.finish();
264
+ }
265
+ addDrapedStrings(drapedStrings) {
266
+ if (!this._drapedStrings) {
267
+ this._drapedStrings = [];
268
+ }
269
+ for (const ds of drapedStrings)
270
+ this._drapedStrings.push(ds);
271
+ }
272
+ decorate(context) {
273
+ const graphics = this.renderGraphics(context);
274
+ if (graphics)
275
+ context.addDecoration(this._graphicType, graphics);
276
+ this._markerSet.addDecoration(context);
277
+ return;
278
+ }
279
+ }
280
+ exports.MapFeatureInfoDecorator = MapFeatureInfoDecorator;
281
+ //# sourceMappingURL=MapFeatureInfoDecorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapFeatureInfoDecorator.js","sourceRoot":"","sources":["../../../src/Tools/MapFeatureInfoDecorator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/* eslint-disable no-console */\r\nimport { Base64EncodedString, ColorDef } from \"@itwin/core-common\";\r\nimport {\r\n BeButtonEvent, Cluster, CollectTileStatus, DecorateContext, Decorator, DisclosedTileTreeSet,\r\n GeometryTileTreeReference, GraphicType, IModelApp, MapTileTreeReference, Marker, MarkerImage, MarkerSet,\r\n Tile, TileGeometryCollector, TileTreeReference, TileUser, Viewport } from \"@itwin/core-frontend\";\r\nimport { ConvexClipPlaneSet, CurvePrimitive, GrowableXYZArray, LineString3d, Point2d, Point3d, PolyfaceQuery, Range3d, SweepLineStringToFacetsOptions, Transform, Vector3d, XAndY, XYAndZ } from \"@itwin/core-geometry\";\r\nimport { MapFeatureInfoToolData } from \"./MapFeatureInfoTool\";\r\n\r\n/** A TileGeometryCollector that restricts collection to tiles that overlap a line string.\r\n/* @internal\r\n*/\r\nclass DrapeLineStringCollector extends TileGeometryCollector {\r\n constructor(user: TileUser, chordTolerance: number, range: Range3d, transform: Transform, private _points: GrowableXYZArray) {\r\n super({ user, chordTolerance, range, transform });\r\n }\r\n\r\n public override collectTile(tile: Tile): CollectTileStatus {\r\n let status = super.collectTile(tile);\r\n if (\"reject\" !== status && !this.rangeOverlapsLineString(tile.range))\r\n status = \"reject\";\r\n\r\n return status;\r\n }\r\n\r\n private rangeOverlapsLineString(range: Range3d) {\r\n let inside = false;\r\n const clipper = ConvexClipPlaneSet.createRange3dPlanes(range, true, true, true, true, false, false);\r\n if (this._options.transform)\r\n clipper.transformInPlace(this._options.transform);\r\n\r\n for (let i = 0; i < this._points.length - 1 && !inside; i++)\r\n inside = clipper.announceClippedSegmentIntervals(0, 1, this._points.getPoint3dAtUncheckedPointIndex(i), this._points.getPoint3dAtUncheckedPointIndex(i + 1));\r\n\r\n return inside;\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass TerrainDraper implements TileUser {\r\n public readonly tileUserId: number;\r\n\r\n public constructor(public readonly viewport: Viewport, public readonly treeRef: GeometryTileTreeReference) {\r\n this.tileUserId = TileUser.generateId();\r\n IModelApp.tileAdmin.registerUser(this);\r\n }\r\n\r\n public dispose(): void {\r\n IModelApp.tileAdmin.forgetUser(this);\r\n }\r\n\r\n public get iModel() { return this.viewport.iModel; }\r\n\r\n public onRequestStateChanged() {\r\n this.viewport.invalidateDecorations();\r\n }\r\n\r\n public discloseTileTrees(trees: DisclosedTileTreeSet) {\r\n trees.disclose(this.treeRef);\r\n }\r\n\r\n public drapeLineString(outStrings: CurvePrimitive[], inPoints: GrowableXYZArray, tolerance: number, maxDistance = 1.0E5): \"loading\" | \"complete\" {\r\n const tree = this.treeRef.treeOwner.load();\r\n if (!tree)\r\n return \"loading\";\r\n\r\n const range = Range3d.createNull();\r\n range.extendArray(inPoints);\r\n range.extendZOnly(-maxDistance); // Expand - but not so much that we get opposite side of globe.\r\n range.extendZOnly(maxDistance);\r\n\r\n const collector = new DrapeLineStringCollector(this, tolerance, range, tree.iModelTransform, inPoints);\r\n this.treeRef.collectTileGeometry(collector);\r\n collector.requestMissingTiles();\r\n\r\n if (collector.isAllGeometryLoaded && collector.polyfaces.length > 0) {\r\n for (const polyface of collector.polyfaces)\r\n outStrings.push(...PolyfaceQuery.sweepLineStringToFacets(inPoints, polyface,\r\n SweepLineStringToFacetsOptions.create(Vector3d.unitZ(), undefined, true, true, false, false)));\r\n return \"complete\";\r\n }\r\n\r\n return \"loading\";\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass PinMarker extends Marker {\r\n public constructor(worldLocation: XYAndZ, size: XAndY, image: MarkerImage) {\r\n super(worldLocation, size);\r\n this.image = image;\r\n this.imageOffset = new Point3d(0, Math.floor(size.y * .5));\r\n }\r\n}\r\n\r\n/** @internal */\r\nclass PinMarkerCluster extends Marker {\r\n /** Create a new cluster marker */\r\n constructor(location: XYAndZ, size: XAndY, cluster: Cluster<PinMarker>, image: MarkerImage | Promise<MarkerImage> | undefined) {\r\n super(location, size);\r\n\r\n this.title = IModelApp.localization.getLocalizedString(\"mapLayersFormats:Messages.MapFeatureInfoDecorator.clusterZoomIn\", { nbInstances: cluster.markers.length});\r\n\r\n this.imageOffset = new Point3d(0, size.y * 0.5);\r\n this.label = cluster.markers.length.toLocaleString();\r\n this.labelColor = \"black\";\r\n this.labelFont = \"bold 14px sans-serif\";\r\n\r\n if (image)\r\n this.setImage(image);\r\n }\r\n\r\n /** Show the cluster as a white circle with an outline */\r\n public override drawFunc(ctx: CanvasRenderingContext2D): void {\r\n ctx.beginPath();\r\n ctx.strokeStyle = \"#372528\";\r\n ctx.fillStyle = \"white\";\r\n ctx.lineWidth = 5;\r\n ctx.arc(0, 0, this.size.x * 0.5, 0, Math.PI * 2);\r\n ctx.fill();\r\n ctx.stroke();\r\n }\r\n\r\n public override onMouseButton(_ev: BeButtonEvent): boolean { return true; } // Don't allow clicks to be sent to active tool...\r\n}\r\n\r\n/** @internal */\r\nclass PinMarkerSet extends MarkerSet<PinMarker> {\r\n protected getClusterMarker(cluster: Cluster<PinMarker>): Marker {\r\n // No image passed to the cluster, we prefer to have the circle only\r\n return new PinMarkerCluster(cluster.getClusterLocation(), cluster.markers[0].size, cluster, undefined);\r\n }\r\n}\r\n\r\n/** @internal */\r\ninterface DrapePointState {\r\n count: number;\r\n collectorState: string;\r\n}\r\n\r\n/** @internal */\r\nexport class MapFeatureInfoDecorator implements Decorator {\r\n\r\n public readonly useCachedDecorations = true;\r\n public readonly disableTerrainDraper = true;\r\n public markerSize = new Point2d(32, 32);\r\n public lineWidth = 3;\r\n private _highlightColor = ColorDef.from(0, 255, 255, 127);\r\n\r\n public get highlightColor() { return this._highlightColor;}\r\n public set highlightColor(color: ColorDef) {\r\n this.updateMarkerImage();\r\n this._highlightColor = color;\r\n }\r\n\r\n public get defaultMarkerIconSvgXml() { return `<svg class=\"indicator\" viewBox=\"0 0 22 22\" width=\"22\" height=\"22\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"m11 0a7.44506 7.44506 0 0 0 -7.5 7.2875c0 1.65 1.132 4.2625 3.25477 8.1125 1.55652 2.75 4.24523 6.6 4.24523 6.6s2.68865-3.9875 4.24528-6.7375c2.12272-3.85 3.25472-6.4625 3.25472-8.1125a7.4215 7.4215 0 0 0 -7.5-7.15z\" fill=\"black\"/><path d=\"m11 1.01715a6.46476 6.46476 0 0 0 -6.48285 6.27033c0 1.72619 1.67181 4.97973 3.12836 7.62139.97564 1.7237 2.42828 3.92176 3.34118 5.27161.91413-1.39148 2.385-3.673 3.37336-5.41907 1.451-2.63171 3.1228-5.88525 3.1228-7.61139a6.39982 6.39982 0 0 0 -6.48285-6.13287zm.00183 8.98285a3 3 0 1 1 3-3 3 3 0 0 1 -3 3z\" fill=\"${this.highlightColor.toRgbString()}\"/></svg>`; }\r\n\r\n private _drapePoints = new GrowableXYZArray();\r\n private _scratchPoints = new GrowableXYZArray();\r\n\r\n private _drapePointsStates: DrapePointState[] = [];\r\n private _drapedStrings?: LineString3d[];\r\n private _allGeomDraped = false;\r\n private _draper?: TerrainDraper;\r\n private _markerImage: HTMLImageElement;\r\n private _markerSet = new PinMarkerSet();\r\n\r\n private _state: MapFeatureInfoToolData | undefined;\r\n\r\n private readonly _graphicType = GraphicType.WorldOverlay;\r\n\r\n public constructor() {\r\n this._markerImage = new Image();\r\n this.updateMarkerImage();\r\n }\r\n\r\n private updateMarkerImage() {\r\n const base64 = Base64EncodedString.encode(this.defaultMarkerIconSvgXml);\r\n this._markerImage.src = `data:image/svg+xml;base64,${base64}`;\r\n }\r\n\r\n private _computeChordTolerance(viewport: Viewport, applyAspectRatioSkew: boolean, computeRange: () => Range3d) {\r\n let pixelSize = 1;\r\n // Compute the horizontal distance in meters between two adjacent pixels at the center of the geometry.\r\n pixelSize = viewport.getPixelSizeAtPoint(computeRange().center);\r\n pixelSize = viewport.target.adjustPixelSizeForLOD(pixelSize);\r\n\r\n // Aspect ratio skew > 1.0 stretches the view in Y. In that case use the smaller vertical pixel distance for our stroke tolerance.\r\n const skew = applyAspectRatioSkew ? viewport.view.getAspectRatioSkew() : 0;\r\n if (skew > 1)\r\n pixelSize /= skew;\r\n return pixelSize * 0.25;\r\n }\r\n\r\n public setState = (state: MapFeatureInfoToolData) => {\r\n\r\n this._drapedStrings = undefined;\r\n this._allGeomDraped = false;\r\n\r\n this._state = state;\r\n IModelApp.viewManager.invalidateCachedDecorationsAllViews(this);\r\n\r\n this._drapePoints.clear();\r\n this._drapePointsStates = [];\r\n\r\n if (!this.disableTerrainDraper && this._state.mapInfo?.layerInfos && state.hit.viewport.displayStyle.displayTerrain) {\r\n\r\n if (state.hit?.modelId) {\r\n const drapeTreeRef = this.getGeometryTreeRef(state.hit.viewport);\r\n if (drapeTreeRef) {\r\n this._draper = new TerrainDraper(state.hit.viewport, drapeTreeRef);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (this._draper) {\r\n // Dispose draper every time?\r\n this._draper.dispose();\r\n this._draper = undefined;\r\n }\r\n };\r\n\r\n private getGeometryTreeRef(vp: Viewport): GeometryTileTreeReference | undefined {\r\n let treeRef: GeometryTileTreeReference | undefined;\r\n if (vp.backgroundMapSettings.applyTerrain) {\r\n vp.forEachMapTreeRef((ref: TileTreeReference) => {\r\n if (!treeRef && ref instanceof MapTileTreeReference) {\r\n treeRef = ref.createGeometryTreeReference();\r\n }\r\n });\r\n }\r\n\r\n return treeRef;\r\n }\r\n\r\n protected renderGraphics(context: DecorateContext) {\r\n this._markerSet.markers.clear();\r\n\r\n if (this._state?.mapInfo?.layerInfos === undefined) {\r\n return undefined;\r\n }\r\n\r\n const builder = context.createGraphicBuilder(this._graphicType);\r\n\r\n if (this._draper) {\r\n if (this._drapePoints.length === 0 && this._state.mapInfo.layerInfos) {\r\n\r\n for (const layerInfo of this._state.mapInfo.layerInfos) {\r\n if (layerInfo.subLayerInfos) {\r\n for (const subLayerInfo of layerInfo.subLayerInfos) {\r\n for (const feature of subLayerInfo.features) {\r\n if (feature.geometries) {\r\n for (const geom of feature.geometries) {\r\n if (geom.graphic.type === \"linestring\") {\r\n this._drapePointsStates.push({ count: geom.graphic.points.length, collectorState: \"loading\" });\r\n this._drapePoints.pushAll(geom.graphic.points);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n }\r\n }\r\n\r\n if (!this._allGeomDraped) {\r\n\r\n let hasMissingLineStrings = false;\r\n let drapePointsOffset = 0;\r\n for (const state of this._drapePointsStates) {\r\n\r\n if (state.collectorState === \"loading\") {\r\n this._scratchPoints.clear();\r\n this._scratchPoints.resize(state.count);\r\n\r\n let dstIdx = 0;\r\n for (let srcIdx = drapePointsOffset; srcIdx < drapePointsOffset + state.count; srcIdx++) {\r\n this._scratchPoints.transferFromGrowableXYZArray(dstIdx++, this._drapePoints, srcIdx);\r\n }\r\n\r\n const drapeRange = Range3d.createNull();\r\n drapeRange.extendArray(this._scratchPoints);\r\n const drapedStrings: LineString3d[] = [];\r\n const tolerance = this._computeChordTolerance(context.viewport, true, () => drapeRange) * 10; // 10 pixels\r\n if (\"loading\" === this._draper.drapeLineString(drapedStrings, this._scratchPoints, tolerance)) {\r\n hasMissingLineStrings = true;\r\n } else {\r\n this.addDrapedStrings(drapedStrings);\r\n state.collectorState = \"complete\";\r\n }\r\n }\r\n drapePointsOffset += state.count;\r\n }\r\n this._allGeomDraped = !hasMissingLineStrings;\r\n }\r\n\r\n if (this._drapedStrings) {\r\n builder.setSymbology(this.highlightColor, this.highlightColor, this.lineWidth);\r\n this._drapedStrings.forEach((line) => builder.addLineString(line.points));\r\n }\r\n\r\n } else {\r\n builder.setSymbology(this.highlightColor, this.highlightColor, this.lineWidth);\r\n for (const layerInfo of this._state.mapInfo.layerInfos) {\r\n if (layerInfo.subLayerInfos && !(layerInfo.subLayerInfos instanceof HTMLElement)) {\r\n for (const subLayerInfo of layerInfo.subLayerInfos) {\r\n for (const feature of subLayerInfo.features) {\r\n if (feature.geometries) {\r\n for (const geom of feature.geometries) {\r\n if (geom.graphic.type === \"pointstring\") {\r\n for (const point of geom.graphic.points)\r\n this._markerSet.markers.add(new PinMarker(point, this.markerSize, this._markerImage));\r\n } else {\r\n builder.addPrimitive(geom.graphic);\r\n }\r\n\r\n }\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n }\r\n }\r\n\r\n return builder.finish();\r\n }\r\n\r\n public addDrapedStrings(drapedStrings: LineString3d[]) {\r\n if (!this._drapedStrings) {\r\n this._drapedStrings = [];\r\n }\r\n for (const ds of drapedStrings)\r\n this._drapedStrings.push(ds);\r\n }\r\n\r\n public decorate(context: DecorateContext): void {\r\n const graphics = this.renderGraphics(context);\r\n if (graphics)\r\n context.addDecoration(this._graphicType, graphics);\r\n\r\n this._markerSet.addDecoration(context);\r\n return;\r\n }\r\n\r\n}\r\n"]}
@@ -0,0 +1,38 @@
1
+ /** @packageDocumentation
2
+ * @module MapLayersFormats
3
+ */
4
+ import { BeButtonEvent, EventHandled, HitDetail, LocateFilterStatus, LocateResponse, MapFeatureInfo, PrimitiveTool } from "@itwin/core-frontend";
5
+ import { BeEvent } from "@itwin/core-bentley";
6
+ /** Data provided every time [[MapFeatureInfoTool]] retrieve feature information.
7
+ * @see [[MapFeatureInfoToolData]]
8
+ * @beta
9
+ */
10
+ export interface MapFeatureInfoToolData {
11
+ hit: HitDetail;
12
+ mapInfo?: MapFeatureInfo;
13
+ }
14
+ /** Tools that allow extracting feature information from map-layers.
15
+ * Simulate feature highlight by drawing overlay decorations. It also
16
+ * fire an event that provide further feature information meant to be displayed in a UI / Widget.
17
+ * @see [[MapFeatureInfoToolData]]
18
+ * @beta
19
+ */
20
+ export declare class MapFeatureInfoTool extends PrimitiveTool {
21
+ readonly onInfoReady: BeEvent<(data: MapFeatureInfoToolData) => void>;
22
+ static toolId: string;
23
+ static iconSpec: string;
24
+ private _decorator;
25
+ private _layerSettingsCache;
26
+ private readonly _detachListeners;
27
+ requireWriteableTarget(): boolean;
28
+ onPostInstall(): Promise<void>;
29
+ onCleanup(): Promise<void>;
30
+ /** @internal */
31
+ private getMapLayerInfoFromHit;
32
+ getToolTip(hit: HitDetail): Promise<HTMLElement | string>;
33
+ filterHit(hit: HitDetail, _out?: LocateResponse): Promise<LocateFilterStatus>;
34
+ onDataButtonDown(ev: BeButtonEvent): Promise<EventHandled>;
35
+ onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled>;
36
+ onRestartTool(): Promise<void>;
37
+ }
38
+ //# sourceMappingURL=MapFeatureInfoTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapFeatureInfoTool.d.ts","sourceRoot":"","sources":["../../../src/Tools/MapFeatureInfoTool.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EAET,kBAAkB,EAClB,cAAc,EACd,cAAc,EAEd,aAAa,EACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAI9C;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,SAAS,CAAC;IACf,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,aAAa;IACnD,SAAgB,WAAW,iBAAsB,sBAAsB,KAAK,IAAI,EAAI;IAEpF,OAAuB,MAAM,SAAwB;IACrD,OAAuB,QAAQ,SAAc;IAE7C,OAAO,CAAC,UAAU,CAA0D;IAC5E,OAAO,CAAC,mBAAmB,CAAiD;IAC5E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAsB;IAEvC,sBAAsB,IAAI,OAAO;IAI3B,aAAa;IAuBb,SAAS;IAO/B,gBAAgB;IAChB,OAAO,CAAC,sBAAsB;IAaR,UAAU,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC;IASzD,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAI7E,gBAAgB,CACpC,EAAE,EAAE,aAAa,GAChB,OAAO,CAAC,YAAY,CAAC;IA4BF,eAAe,CACnC,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,YAAY,CAAC;IAMF,aAAa;CAKpC"}