@reearth/core 0.0.7-alpha.5 → 0.0.7-alpha.51

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 (480) hide show
  1. package/dist/core.js +58676 -51066
  2. package/dist/core.umd.cjs +3959 -3915
  3. package/dist/{index-DqatWUTw.js → index-DqGWVPtz.js} +0 -1
  4. package/dist/index.d.ts +150 -34
  5. package/package.json +55 -39
  6. package/src/Map/ClusteredLayers/index.tsx +1 -1
  7. package/src/Map/Geoid/index.tsx +68 -0
  8. package/src/Map/Geoid/types.ts +8 -0
  9. package/src/Map/Layer/hooks.ts +7 -4
  10. package/src/Map/Layer/index.tsx +3 -1
  11. package/src/Map/Layers/hooks.ts +19 -2
  12. package/src/Map/Layers/index.tsx +13 -2
  13. package/src/Map/Layers/keys.ts +1 -0
  14. package/src/Map/Sketch/hooks.ts +453 -410
  15. package/src/Map/Sketch/index.tsx +67 -20
  16. package/src/Map/Sketch/sketchMachine.ts +359 -4
  17. package/src/Map/Sketch/sketchMachine.typegen.ts +58 -1
  18. package/src/Map/Sketch/types.ts +10 -20
  19. package/src/Map/Sketch/usePluginSketchLayer.ts +105 -0
  20. package/src/Map/Sketch/useSketch.ts +559 -0
  21. package/src/Map/Sketch/useSketchFeature.ts +198 -0
  22. package/src/Map/SpatialId/constants.ts +21 -0
  23. package/src/Map/SpatialId/hooks.ts +448 -0
  24. package/src/Map/SpatialId/index.tsx +63 -0
  25. package/src/Map/SpatialId/types.ts +68 -0
  26. package/src/Map/SpatialId/utils.ts +65 -0
  27. package/src/Map/hooks.ts +54 -8
  28. package/src/Map/index.tsx +41 -8
  29. package/src/Map/ref.ts +32 -3
  30. package/src/Map/types/index.ts +39 -3
  31. package/src/Map/types/viewerProperty.ts +10 -0
  32. package/src/Map/useTimelineManager.ts +2 -2
  33. package/src/Map/utils.ts +1 -1
  34. package/src/Visualizer/context.tsx +5 -5
  35. package/src/Visualizer/coreContext.tsx +2 -0
  36. package/src/Visualizer/hooks.ts +54 -20
  37. package/src/Visualizer/index.tsx +22 -3
  38. package/src/Visualizer/interactionMode.ts +2 -1
  39. package/src/Visualizer/useViewport.ts +1 -1
  40. package/src/engines/Cesium/Feature/Box/hooks/box.ts +4 -4
  41. package/src/engines/Cesium/Feature/HeatMap/HeatmapMesh.tsx +1 -1
  42. package/src/engines/Cesium/Feature/Model/index.tsx +3 -3
  43. package/src/engines/Cesium/Feature/PhotoOverlay/hooks.ts +1 -1
  44. package/src/engines/Cesium/Feature/PhotoOverlay/index.tsx +3 -1
  45. package/src/engines/Cesium/Feature/Polygon/index.tsx +6 -4
  46. package/src/engines/Cesium/Feature/Raster/mvt.ts +2 -1
  47. package/src/engines/Cesium/Feature/Resource/utils.ts +86 -91
  48. package/src/engines/Cesium/Feature/Tileset/hooks.ts +135 -70
  49. package/src/engines/Cesium/Feature/Tileset/index.tsx +1 -1
  50. package/src/engines/Cesium/Feature/Tileset/useClippingBox.ts +2 -2
  51. package/src/engines/Cesium/Feature/context.ts +1 -0
  52. package/src/engines/Cesium/Feature/index.tsx +7 -3
  53. package/src/engines/Cesium/Feature/utils.tsx +18 -7
  54. package/src/engines/Cesium/Shaders/OverriddenShaders/GlobeFS/IBL.glsl +6 -10
  55. package/src/engines/Cesium/Sketch/ControlPoint.tsx +128 -24
  56. package/src/engines/Cesium/Sketch/ExtrudedControlPoints.tsx +70 -25
  57. package/src/engines/Cesium/Sketch/ExtrudedMeasurement.tsx +3 -1
  58. package/src/engines/Cesium/Sketch/ExtrudedPolygonEntity.tsx +14 -14
  59. package/src/engines/Cesium/Sketch/PolylineEntity.tsx +7 -4
  60. package/src/engines/Cesium/Sketch/SurfaceAddingPoints.tsx +60 -0
  61. package/src/engines/Cesium/Sketch/SurfaceControlPoints.tsx +125 -35
  62. package/src/engines/Cesium/Sketch/constants.ts +5 -0
  63. package/src/engines/Cesium/Sketch/index.tsx +68 -29
  64. package/src/engines/Cesium/SpatialId/CoordinateIndicator.tsx +28 -0
  65. package/src/engines/Cesium/SpatialId/SpatialIdSpace.tsx +33 -0
  66. package/src/engines/Cesium/SpatialId/VerticalSpaceIndicator.tsx +32 -0
  67. package/src/engines/Cesium/SpatialId/index.ts +3 -0
  68. package/src/engines/Cesium/common.ts +52 -16
  69. package/src/engines/Cesium/core/Clock.tsx +1 -1
  70. package/src/engines/Cesium/core/Globe/index.tsx +73 -0
  71. package/src/engines/Cesium/core/Globe/useTerrainProviderPromise.ts +79 -0
  72. package/src/engines/Cesium/core/Imagery.test.ts +29 -11
  73. package/src/engines/Cesium/core/Imagery.tsx +22 -6
  74. package/src/engines/Cesium/core/Indicator/Indicator.tsx +1 -1
  75. package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapLabelImagery.tsx +9 -2
  76. package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapVectorMapLabel.tsx +14 -2
  77. package/src/engines/Cesium/core/labels/LabelImageryLayers.tsx +10 -1
  78. package/src/engines/Cesium/core/presets.ts +24 -28
  79. package/src/engines/Cesium/helpers/getGeometryFromEntity.ts +55 -0
  80. package/src/engines/Cesium/hooks/useCamera.ts +1 -1
  81. package/src/engines/Cesium/hooks/useCameraLimiter.ts +1 -1
  82. package/src/engines/Cesium/hooks/useEngineRef.ts +48 -3
  83. package/src/engines/Cesium/hooks/useExplicitRender.ts +2 -2
  84. package/src/engines/Cesium/hooks/useInstance.ts +1 -1
  85. package/src/engines/Cesium/hooks/useLayerDragDrop.ts +2 -2
  86. package/src/engines/Cesium/hooks/useLayerSelectWithRect.ts +1 -1
  87. package/src/engines/Cesium/hooks/useOverrideGlobeShader/useOverrideGlobeShader.ts +98 -52
  88. package/src/engines/Cesium/hooks/useViewerProperty.ts +1 -1
  89. package/src/engines/Cesium/hooks.ts +52 -10
  90. package/src/engines/Cesium/index.tsx +16 -3
  91. package/src/engines/Cesium/types.ts +1 -1
  92. package/src/mantle/atoms/compute.ts +8 -3
  93. package/src/mantle/data/geojson.ts +53 -22
  94. package/src/mantle/data/shapefile/parseZip.ts +1 -0
  95. package/src/mantle/evaluator/simple/expression/expression.test.ts +72 -0
  96. package/src/mantle/evaluator/simple/expression/node.ts +10 -12
  97. package/src/mantle/types/appearance.ts +4 -2
  98. package/src/mantle/types/index.ts +3 -0
  99. package/src/test/utils.tsx +1 -1
  100. package/src/utils/image.ts +2 -12
  101. package/src/utils/use-delayed-count.ts +1 -1
  102. package/src/utils/use-dnd/drop.ts +1 -1
  103. package/src/utils/util.ts +1 -1
  104. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json +0 -1
  105. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json +0 -1
  106. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json +0 -1
  107. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json +0 -1
  108. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json +0 -1
  109. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json +0 -1
  110. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json +0 -1
  111. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json +0 -1
  112. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json +0 -1
  113. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json +0 -1
  114. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json +0 -1
  115. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json +0 -1
  116. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json +0 -1
  117. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json +0 -1
  118. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json +0 -1
  119. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json +0 -1
  120. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json +0 -1
  121. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json +0 -1
  122. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json +0 -1
  123. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json +0 -1
  124. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json +0 -1
  125. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json +0 -1
  126. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json +0 -1
  127. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json +0 -1
  128. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json +0 -1
  129. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json +0 -1
  130. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json +0 -1
  131. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json +0 -1
  132. package/dist/cesium/Assets/Images/bing_maps_credit.png +0 -0
  133. package/dist/cesium/Assets/Images/cesium_credit.png +0 -0
  134. package/dist/cesium/Assets/Images/google_earth_credit.png +0 -0
  135. package/dist/cesium/Assets/Images/ion-credit.png +0 -0
  136. package/dist/cesium/Assets/Textures/LensFlare/DirtMask.jpg +0 -0
  137. package/dist/cesium/Assets/Textures/LensFlare/StarBurst.jpg +0 -0
  138. package/dist/cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg +0 -0
  139. package/dist/cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg +0 -0
  140. package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg +0 -0
  141. package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg +0 -0
  142. package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg +0 -0
  143. package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg +0 -0
  144. package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg +0 -0
  145. package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg +0 -0
  146. package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg +0 -0
  147. package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg +0 -0
  148. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg +0 -0
  149. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg +0 -0
  150. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg +0 -0
  151. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg +0 -0
  152. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg +0 -0
  153. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg +0 -0
  154. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg +0 -0
  155. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg +0 -0
  156. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg +0 -0
  157. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg +0 -0
  158. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg +0 -0
  159. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg +0 -0
  160. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg +0 -0
  161. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg +0 -0
  162. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg +0 -0
  163. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg +0 -0
  164. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg +0 -0
  165. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg +0 -0
  166. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg +0 -0
  167. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg +0 -0
  168. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg +0 -0
  169. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg +0 -0
  170. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg +0 -0
  171. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg +0 -0
  172. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg +0 -0
  173. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg +0 -0
  174. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg +0 -0
  175. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg +0 -0
  176. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg +0 -0
  177. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg +0 -0
  178. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg +0 -0
  179. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg +0 -0
  180. package/dist/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml +0 -14
  181. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
  182. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
  183. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
  184. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
  185. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
  186. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
  187. package/dist/cesium/Assets/Textures/maki/airfield.png +0 -0
  188. package/dist/cesium/Assets/Textures/maki/airport.png +0 -0
  189. package/dist/cesium/Assets/Textures/maki/alcohol-shop.png +0 -0
  190. package/dist/cesium/Assets/Textures/maki/america-football.png +0 -0
  191. package/dist/cesium/Assets/Textures/maki/art-gallery.png +0 -0
  192. package/dist/cesium/Assets/Textures/maki/bakery.png +0 -0
  193. package/dist/cesium/Assets/Textures/maki/bank.png +0 -0
  194. package/dist/cesium/Assets/Textures/maki/bar.png +0 -0
  195. package/dist/cesium/Assets/Textures/maki/baseball.png +0 -0
  196. package/dist/cesium/Assets/Textures/maki/basketball.png +0 -0
  197. package/dist/cesium/Assets/Textures/maki/beer.png +0 -0
  198. package/dist/cesium/Assets/Textures/maki/bicycle.png +0 -0
  199. package/dist/cesium/Assets/Textures/maki/building.png +0 -0
  200. package/dist/cesium/Assets/Textures/maki/bus.png +0 -0
  201. package/dist/cesium/Assets/Textures/maki/cafe.png +0 -0
  202. package/dist/cesium/Assets/Textures/maki/camera.png +0 -0
  203. package/dist/cesium/Assets/Textures/maki/campsite.png +0 -0
  204. package/dist/cesium/Assets/Textures/maki/car.png +0 -0
  205. package/dist/cesium/Assets/Textures/maki/cemetery.png +0 -0
  206. package/dist/cesium/Assets/Textures/maki/cesium.png +0 -0
  207. package/dist/cesium/Assets/Textures/maki/chemist.png +0 -0
  208. package/dist/cesium/Assets/Textures/maki/cinema.png +0 -0
  209. package/dist/cesium/Assets/Textures/maki/circle-stroked.png +0 -0
  210. package/dist/cesium/Assets/Textures/maki/circle.png +0 -0
  211. package/dist/cesium/Assets/Textures/maki/city.png +0 -0
  212. package/dist/cesium/Assets/Textures/maki/clothing-store.png +0 -0
  213. package/dist/cesium/Assets/Textures/maki/college.png +0 -0
  214. package/dist/cesium/Assets/Textures/maki/commercial.png +0 -0
  215. package/dist/cesium/Assets/Textures/maki/cricket.png +0 -0
  216. package/dist/cesium/Assets/Textures/maki/cross.png +0 -0
  217. package/dist/cesium/Assets/Textures/maki/dam.png +0 -0
  218. package/dist/cesium/Assets/Textures/maki/danger.png +0 -0
  219. package/dist/cesium/Assets/Textures/maki/disability.png +0 -0
  220. package/dist/cesium/Assets/Textures/maki/dog-park.png +0 -0
  221. package/dist/cesium/Assets/Textures/maki/embassy.png +0 -0
  222. package/dist/cesium/Assets/Textures/maki/emergency-telephone.png +0 -0
  223. package/dist/cesium/Assets/Textures/maki/entrance.png +0 -0
  224. package/dist/cesium/Assets/Textures/maki/farm.png +0 -0
  225. package/dist/cesium/Assets/Textures/maki/fast-food.png +0 -0
  226. package/dist/cesium/Assets/Textures/maki/ferry.png +0 -0
  227. package/dist/cesium/Assets/Textures/maki/fire-station.png +0 -0
  228. package/dist/cesium/Assets/Textures/maki/fuel.png +0 -0
  229. package/dist/cesium/Assets/Textures/maki/garden.png +0 -0
  230. package/dist/cesium/Assets/Textures/maki/gift.png +0 -0
  231. package/dist/cesium/Assets/Textures/maki/golf.png +0 -0
  232. package/dist/cesium/Assets/Textures/maki/grocery.png +0 -0
  233. package/dist/cesium/Assets/Textures/maki/hairdresser.png +0 -0
  234. package/dist/cesium/Assets/Textures/maki/harbor.png +0 -0
  235. package/dist/cesium/Assets/Textures/maki/heart.png +0 -0
  236. package/dist/cesium/Assets/Textures/maki/heliport.png +0 -0
  237. package/dist/cesium/Assets/Textures/maki/hospital.png +0 -0
  238. package/dist/cesium/Assets/Textures/maki/ice-cream.png +0 -0
  239. package/dist/cesium/Assets/Textures/maki/industrial.png +0 -0
  240. package/dist/cesium/Assets/Textures/maki/land-use.png +0 -0
  241. package/dist/cesium/Assets/Textures/maki/laundry.png +0 -0
  242. package/dist/cesium/Assets/Textures/maki/library.png +0 -0
  243. package/dist/cesium/Assets/Textures/maki/lighthouse.png +0 -0
  244. package/dist/cesium/Assets/Textures/maki/lodging.png +0 -0
  245. package/dist/cesium/Assets/Textures/maki/logging.png +0 -0
  246. package/dist/cesium/Assets/Textures/maki/london-underground.png +0 -0
  247. package/dist/cesium/Assets/Textures/maki/marker-stroked.png +0 -0
  248. package/dist/cesium/Assets/Textures/maki/marker.png +0 -0
  249. package/dist/cesium/Assets/Textures/maki/minefield.png +0 -0
  250. package/dist/cesium/Assets/Textures/maki/mobilephone.png +0 -0
  251. package/dist/cesium/Assets/Textures/maki/monument.png +0 -0
  252. package/dist/cesium/Assets/Textures/maki/museum.png +0 -0
  253. package/dist/cesium/Assets/Textures/maki/music.png +0 -0
  254. package/dist/cesium/Assets/Textures/maki/oil-well.png +0 -0
  255. package/dist/cesium/Assets/Textures/maki/park.png +0 -0
  256. package/dist/cesium/Assets/Textures/maki/park2.png +0 -0
  257. package/dist/cesium/Assets/Textures/maki/parking-garage.png +0 -0
  258. package/dist/cesium/Assets/Textures/maki/parking.png +0 -0
  259. package/dist/cesium/Assets/Textures/maki/pharmacy.png +0 -0
  260. package/dist/cesium/Assets/Textures/maki/pitch.png +0 -0
  261. package/dist/cesium/Assets/Textures/maki/place-of-worship.png +0 -0
  262. package/dist/cesium/Assets/Textures/maki/playground.png +0 -0
  263. package/dist/cesium/Assets/Textures/maki/police.png +0 -0
  264. package/dist/cesium/Assets/Textures/maki/polling-place.png +0 -0
  265. package/dist/cesium/Assets/Textures/maki/post.png +0 -0
  266. package/dist/cesium/Assets/Textures/maki/prison.png +0 -0
  267. package/dist/cesium/Assets/Textures/maki/rail-above.png +0 -0
  268. package/dist/cesium/Assets/Textures/maki/rail-light.png +0 -0
  269. package/dist/cesium/Assets/Textures/maki/rail-metro.png +0 -0
  270. package/dist/cesium/Assets/Textures/maki/rail-underground.png +0 -0
  271. package/dist/cesium/Assets/Textures/maki/rail.png +0 -0
  272. package/dist/cesium/Assets/Textures/maki/religious-christian.png +0 -0
  273. package/dist/cesium/Assets/Textures/maki/religious-jewish.png +0 -0
  274. package/dist/cesium/Assets/Textures/maki/religious-muslim.png +0 -0
  275. package/dist/cesium/Assets/Textures/maki/restaurant.png +0 -0
  276. package/dist/cesium/Assets/Textures/maki/roadblock.png +0 -0
  277. package/dist/cesium/Assets/Textures/maki/rocket.png +0 -0
  278. package/dist/cesium/Assets/Textures/maki/school.png +0 -0
  279. package/dist/cesium/Assets/Textures/maki/scooter.png +0 -0
  280. package/dist/cesium/Assets/Textures/maki/shop.png +0 -0
  281. package/dist/cesium/Assets/Textures/maki/skiing.png +0 -0
  282. package/dist/cesium/Assets/Textures/maki/slaughterhouse.png +0 -0
  283. package/dist/cesium/Assets/Textures/maki/soccer.png +0 -0
  284. package/dist/cesium/Assets/Textures/maki/square-stroked.png +0 -0
  285. package/dist/cesium/Assets/Textures/maki/square.png +0 -0
  286. package/dist/cesium/Assets/Textures/maki/star-stroked.png +0 -0
  287. package/dist/cesium/Assets/Textures/maki/star.png +0 -0
  288. package/dist/cesium/Assets/Textures/maki/suitcase.png +0 -0
  289. package/dist/cesium/Assets/Textures/maki/swimming.png +0 -0
  290. package/dist/cesium/Assets/Textures/maki/telephone.png +0 -0
  291. package/dist/cesium/Assets/Textures/maki/tennis.png +0 -0
  292. package/dist/cesium/Assets/Textures/maki/theatre.png +0 -0
  293. package/dist/cesium/Assets/Textures/maki/toilets.png +0 -0
  294. package/dist/cesium/Assets/Textures/maki/town-hall.png +0 -0
  295. package/dist/cesium/Assets/Textures/maki/town.png +0 -0
  296. package/dist/cesium/Assets/Textures/maki/triangle-stroked.png +0 -0
  297. package/dist/cesium/Assets/Textures/maki/triangle.png +0 -0
  298. package/dist/cesium/Assets/Textures/maki/village.png +0 -0
  299. package/dist/cesium/Assets/Textures/maki/warehouse.png +0 -0
  300. package/dist/cesium/Assets/Textures/maki/waste-basket.png +0 -0
  301. package/dist/cesium/Assets/Textures/maki/water.png +0 -0
  302. package/dist/cesium/Assets/Textures/maki/wetland.png +0 -0
  303. package/dist/cesium/Assets/Textures/maki/zoo.png +0 -0
  304. package/dist/cesium/Assets/Textures/moonSmall.jpg +0 -0
  305. package/dist/cesium/Assets/Textures/pin.svg +0 -1
  306. package/dist/cesium/Assets/Textures/waterNormals.jpg +0 -0
  307. package/dist/cesium/Assets/Textures/waterNormalsSmall.jpg +0 -0
  308. package/dist/cesium/Assets/approximateTerrainHeights.json +0 -1
  309. package/dist/cesium/ThirdParty/Workers/package.json +0 -1
  310. package/dist/cesium/ThirdParty/Workers/pako_deflate.min.js +0 -1
  311. package/dist/cesium/ThirdParty/Workers/pako_inflate.min.js +0 -1
  312. package/dist/cesium/ThirdParty/Workers/z-worker-pako.js +0 -1
  313. package/dist/cesium/ThirdParty/basis_transcoder.wasm +0 -0
  314. package/dist/cesium/ThirdParty/draco_decoder.wasm +0 -0
  315. package/dist/cesium/ThirdParty/google-earth-dbroot-parser.js +0 -1
  316. package/dist/cesium/Widgets/Animation/Animation.css +0 -127
  317. package/dist/cesium/Widgets/Animation/lighter.css +0 -70
  318. package/dist/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css +0 -108
  319. package/dist/cesium/Widgets/BaseLayerPicker/lighter.css +0 -22
  320. package/dist/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css +0 -102
  321. package/dist/cesium/Widgets/CesiumInspector/CesiumInspector.css +0 -113
  322. package/dist/cesium/Widgets/CesiumWidget/CesiumWidget.css +0 -124
  323. package/dist/cesium/Widgets/CesiumWidget/lighter.css +0 -14
  324. package/dist/cesium/Widgets/FullscreenButton/FullscreenButton.css +0 -8
  325. package/dist/cesium/Widgets/Geocoder/Geocoder.css +0 -70
  326. package/dist/cesium/Widgets/Geocoder/lighter.css +0 -17
  327. package/dist/cesium/Widgets/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.css +0 -27
  328. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png +0 -0
  329. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png +0 -0
  330. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png +0 -0
  331. package/dist/cesium/Widgets/Images/ImageryProviders/bingAerial.png +0 -0
  332. package/dist/cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png +0 -0
  333. package/dist/cesium/Widgets/Images/ImageryProviders/bingRoads.png +0 -0
  334. package/dist/cesium/Widgets/Images/ImageryProviders/blueMarble.png +0 -0
  335. package/dist/cesium/Widgets/Images/ImageryProviders/earthAtNight.png +0 -0
  336. package/dist/cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png +0 -0
  337. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png +0 -0
  338. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxStreets.png +0 -0
  339. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png +0 -0
  340. package/dist/cesium/Widgets/Images/ImageryProviders/naturalEarthII.png +0 -0
  341. package/dist/cesium/Widgets/Images/ImageryProviders/openStreetMap.png +0 -0
  342. package/dist/cesium/Widgets/Images/ImageryProviders/sentinel-2.png +0 -0
  343. package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png +0 -0
  344. package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png +0 -0
  345. package/dist/cesium/Widgets/Images/ImageryProviders/stamenToner.png +0 -0
  346. package/dist/cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png +0 -0
  347. package/dist/cesium/Widgets/Images/NavigationHelp/Mouse.svg +0 -84
  348. package/dist/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg +0 -76
  349. package/dist/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg +0 -76
  350. package/dist/cesium/Widgets/Images/NavigationHelp/MouseRight.svg +0 -76
  351. package/dist/cesium/Widgets/Images/NavigationHelp/Touch.svg +0 -120
  352. package/dist/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg +0 -129
  353. package/dist/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg +0 -76
  354. package/dist/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg +0 -135
  355. package/dist/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg +0 -74
  356. package/dist/cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png +0 -0
  357. package/dist/cesium/Widgets/Images/TerrainProviders/Ellipsoid.png +0 -0
  358. package/dist/cesium/Widgets/Images/TimelineIcons.png +0 -0
  359. package/dist/cesium/Widgets/Images/info-loading.gif +0 -0
  360. package/dist/cesium/Widgets/InfoBox/InfoBox.css +0 -92
  361. package/dist/cesium/Widgets/InfoBox/InfoBoxDescription.css +0 -178
  362. package/dist/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css +0 -93
  363. package/dist/cesium/Widgets/NavigationHelpButton/lighter.css +0 -38
  364. package/dist/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css +0 -15
  365. package/dist/cesium/Widgets/ProjectionPicker/ProjectionPicker.css +0 -38
  366. package/dist/cesium/Widgets/SceneModePicker/SceneModePicker.css +0 -56
  367. package/dist/cesium/Widgets/SelectionIndicator/SelectionIndicator.css +0 -20
  368. package/dist/cesium/Widgets/Timeline/Timeline.css +0 -103
  369. package/dist/cesium/Widgets/Timeline/lighter.css +0 -23
  370. package/dist/cesium/Widgets/VRButton/VRButton.css +0 -8
  371. package/dist/cesium/Widgets/Viewer/Viewer.css +0 -107
  372. package/dist/cesium/Widgets/VoxelInspector/VoxelInspector.css +0 -16
  373. package/dist/cesium/Widgets/lighter.css +0 -237
  374. package/dist/cesium/Widgets/lighterShared.css +0 -46
  375. package/dist/cesium/Widgets/shared.css +0 -103
  376. package/dist/cesium/Widgets/widgets.css +0 -1346
  377. package/dist/cesium/Workers/chunk-2ED5WI77.js +0 -26
  378. package/dist/cesium/Workers/chunk-2MBPFWCP.js +0 -26
  379. package/dist/cesium/Workers/chunk-3C74MLG3.js +0 -26
  380. package/dist/cesium/Workers/chunk-45U7TTT3.js +0 -26
  381. package/dist/cesium/Workers/chunk-4N7SRDH5.js +0 -26
  382. package/dist/cesium/Workers/chunk-4T6AS6BZ.js +0 -26
  383. package/dist/cesium/Workers/chunk-5AG2MVRM.js +0 -26
  384. package/dist/cesium/Workers/chunk-5Z6L2FHX.js +0 -26
  385. package/dist/cesium/Workers/chunk-6AUUBDOF.js +0 -26
  386. package/dist/cesium/Workers/chunk-74N6MC2V.js +0 -26
  387. package/dist/cesium/Workers/chunk-7VJK3KHI.js +0 -26
  388. package/dist/cesium/Workers/chunk-7VZHIB6P.js +0 -26
  389. package/dist/cesium/Workers/chunk-7X2YQ6I4.js +0 -27
  390. package/dist/cesium/Workers/chunk-B2SKQ7LU.js +0 -26
  391. package/dist/cesium/Workers/chunk-B4TQDFIE.js +0 -26
  392. package/dist/cesium/Workers/chunk-B6TRTFAA.js +0 -26
  393. package/dist/cesium/Workers/chunk-BK3HCS7I.js +0 -26
  394. package/dist/cesium/Workers/chunk-BOPB43LN.js +0 -26
  395. package/dist/cesium/Workers/chunk-C6DMEJQ7.js +0 -26
  396. package/dist/cesium/Workers/chunk-CN7UN2OZ.js +0 -26
  397. package/dist/cesium/Workers/chunk-CSISXEG7.js +0 -26
  398. package/dist/cesium/Workers/chunk-CUOR5F7T.js +0 -28
  399. package/dist/cesium/Workers/chunk-DGCK3LD2.js +0 -30
  400. package/dist/cesium/Workers/chunk-DXEZYE3K.js +0 -62
  401. package/dist/cesium/Workers/chunk-EXBFEYPQ.js +0 -26
  402. package/dist/cesium/Workers/chunk-FK5KFB6H.js +0 -26
  403. package/dist/cesium/Workers/chunk-HPBHKP5S.js +0 -26
  404. package/dist/cesium/Workers/chunk-JCJ24DHF.js +0 -26
  405. package/dist/cesium/Workers/chunk-JEWHFDAA.js +0 -26
  406. package/dist/cesium/Workers/chunk-JZLZJJQD.js +0 -26
  407. package/dist/cesium/Workers/chunk-KRZBI2MU.js +0 -26
  408. package/dist/cesium/Workers/chunk-KTTUANTJ.js +0 -26
  409. package/dist/cesium/Workers/chunk-LDCAXLGS.js +0 -26
  410. package/dist/cesium/Workers/chunk-LOPN5R3I.js +0 -26
  411. package/dist/cesium/Workers/chunk-MDLPQIMP.js +0 -26
  412. package/dist/cesium/Workers/chunk-MRR3RGFO.js +0 -26
  413. package/dist/cesium/Workers/chunk-NPBZI5YA.js +0 -26
  414. package/dist/cesium/Workers/chunk-NUSW5B6A.js +0 -26
  415. package/dist/cesium/Workers/chunk-OUXRUXNB.js +0 -26
  416. package/dist/cesium/Workers/chunk-QPOPEH3M.js +0 -26
  417. package/dist/cesium/Workers/chunk-R2AN7EKC.js +0 -26
  418. package/dist/cesium/Workers/chunk-RURL6ZX2.js +0 -26
  419. package/dist/cesium/Workers/chunk-SUQM3OSW.js +0 -28
  420. package/dist/cesium/Workers/chunk-UBIRX2SP.js +0 -26
  421. package/dist/cesium/Workers/chunk-VAKC5J5C.js +0 -26
  422. package/dist/cesium/Workers/chunk-VHNZBQTR.js +0 -27
  423. package/dist/cesium/Workers/chunk-VKV642QV.js +0 -26
  424. package/dist/cesium/Workers/chunk-VMSXG4OA.js +0 -26
  425. package/dist/cesium/Workers/chunk-VQZSIOZW.js +0 -26
  426. package/dist/cesium/Workers/chunk-WZUWQMI7.js +0 -26
  427. package/dist/cesium/Workers/chunk-YBI55DLZ.js +0 -26
  428. package/dist/cesium/Workers/chunk-YEJWCH6C.js +0 -26
  429. package/dist/cesium/Workers/chunk-YPDO7SPO.js +0 -26
  430. package/dist/cesium/Workers/chunk-ZYWD6OQH.js +0 -26
  431. package/dist/cesium/Workers/combineGeometry.js +0 -26
  432. package/dist/cesium/Workers/createBoxGeometry.js +0 -26
  433. package/dist/cesium/Workers/createBoxOutlineGeometry.js +0 -26
  434. package/dist/cesium/Workers/createCircleGeometry.js +0 -26
  435. package/dist/cesium/Workers/createCircleOutlineGeometry.js +0 -26
  436. package/dist/cesium/Workers/createCoplanarPolygonGeometry.js +0 -26
  437. package/dist/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +0 -26
  438. package/dist/cesium/Workers/createCorridorGeometry.js +0 -26
  439. package/dist/cesium/Workers/createCorridorOutlineGeometry.js +0 -26
  440. package/dist/cesium/Workers/createCylinderGeometry.js +0 -26
  441. package/dist/cesium/Workers/createCylinderOutlineGeometry.js +0 -26
  442. package/dist/cesium/Workers/createEllipseGeometry.js +0 -26
  443. package/dist/cesium/Workers/createEllipseOutlineGeometry.js +0 -26
  444. package/dist/cesium/Workers/createEllipsoidGeometry.js +0 -26
  445. package/dist/cesium/Workers/createEllipsoidOutlineGeometry.js +0 -26
  446. package/dist/cesium/Workers/createFrustumGeometry.js +0 -26
  447. package/dist/cesium/Workers/createFrustumOutlineGeometry.js +0 -26
  448. package/dist/cesium/Workers/createGeometry.js +0 -26
  449. package/dist/cesium/Workers/createGroundPolylineGeometry.js +0 -26
  450. package/dist/cesium/Workers/createPlaneGeometry.js +0 -26
  451. package/dist/cesium/Workers/createPlaneOutlineGeometry.js +0 -26
  452. package/dist/cesium/Workers/createPolygonGeometry.js +0 -26
  453. package/dist/cesium/Workers/createPolygonOutlineGeometry.js +0 -26
  454. package/dist/cesium/Workers/createPolylineGeometry.js +0 -26
  455. package/dist/cesium/Workers/createPolylineVolumeGeometry.js +0 -26
  456. package/dist/cesium/Workers/createPolylineVolumeOutlineGeometry.js +0 -26
  457. package/dist/cesium/Workers/createRectangleGeometry.js +0 -26
  458. package/dist/cesium/Workers/createRectangleOutlineGeometry.js +0 -26
  459. package/dist/cesium/Workers/createSimplePolylineGeometry.js +0 -26
  460. package/dist/cesium/Workers/createSphereGeometry.js +0 -26
  461. package/dist/cesium/Workers/createSphereOutlineGeometry.js +0 -26
  462. package/dist/cesium/Workers/createTaskProcessorWorker.js +0 -26
  463. package/dist/cesium/Workers/createVectorTileClampedPolylines.js +0 -26
  464. package/dist/cesium/Workers/createVectorTileGeometries.js +0 -26
  465. package/dist/cesium/Workers/createVectorTilePoints.js +0 -26
  466. package/dist/cesium/Workers/createVectorTilePolygons.js +0 -26
  467. package/dist/cesium/Workers/createVectorTilePolylines.js +0 -26
  468. package/dist/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +0 -26
  469. package/dist/cesium/Workers/createVerticesFromHeightmap.js +0 -26
  470. package/dist/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +0 -26
  471. package/dist/cesium/Workers/createWallGeometry.js +0 -26
  472. package/dist/cesium/Workers/createWallOutlineGeometry.js +0 -26
  473. package/dist/cesium/Workers/decodeDraco.js +0 -26
  474. package/dist/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +0 -26
  475. package/dist/cesium/Workers/decodeI3S.js +0 -26
  476. package/dist/cesium/Workers/transcodeKTX2.js +0 -56
  477. package/dist/cesium/Workers/transferTypedArrayTest.js +0 -26
  478. package/dist/cesium/Workers/upsampleQuantizedTerrainMesh.js +0 -26
  479. package/src/engines/Cesium/core/Globe.tsx +0 -104
  480. /package/src/{Map/Sketch/utils.ts → utils/use-window-event.ts} +0 -0
@@ -1,27 +1,10 @@
1
1
  import { Feature as GeojsonFeature, MultiPolygon, Polygon, Point, LineString } from "geojson";
2
2
  import { ComponentType } from "react";
3
- import { RequireExactlyOne } from "type-fest";
4
3
 
5
- import { LayerAppearanceTypes } from "../../mantle";
4
+ import { SketchComponentProps } from "../../engines/Cesium/Sketch";
5
+ import { ComputedFeature, LayerAppearanceTypes } from "../../mantle";
6
6
  import { Position3d } from "../../types";
7
7
 
8
- type GeometryOptions = {
9
- type: SketchType;
10
- controlPoints: readonly Position3d[];
11
- };
12
-
13
- type SketchComponentProps = RequireExactlyOne<
14
- {
15
- geometry?: LineString | Polygon | MultiPolygon | null;
16
- geometryOptions?: GeometryOptions | null;
17
- extrudedHeight?: number;
18
- disableShadow?: boolean;
19
- enableRelativeHeight?: boolean;
20
- color?: string;
21
- },
22
- "geometry" | "geometryOptions"
23
- >;
24
-
25
8
  export type SketchComponentType = ComponentType<SketchComponentProps>;
26
9
 
27
10
  export type SketchType =
@@ -39,9 +22,9 @@ export type SketchOptions = {
39
22
  appearance?: SketchAppearance;
40
23
  dataOnly?: boolean;
41
24
  disableShadow?: boolean;
42
- enableRelativeHeight?: boolean;
43
25
  rightClickToAbort?: boolean;
44
26
  autoResetInteractionMode?: boolean;
27
+ useCentroidExtrudedHeight?: boolean;
45
28
  };
46
29
 
47
30
  export type GeometryOptionsXYZ = {
@@ -81,3 +64,10 @@ export function isSketchType(value: unknown): value is SketchType {
81
64
  value === "extrudedPolygon"
82
65
  );
83
66
  }
67
+
68
+ export type SketchEditingFeature = {
69
+ layerId: string;
70
+ feature: ComputedFeature;
71
+ };
72
+
73
+ export type SketchEditFeatureChangeCb = (feature: SketchEditingFeature | undefined) => void;
@@ -0,0 +1,105 @@
1
+ import { Feature as GeojsonFeature } from "geojson";
2
+ import { RefObject, useCallback } from "react";
3
+
4
+ import { ComputedFeature } from "../Layer";
5
+ import { LayerSimple, LazyLayer } from "../Layers";
6
+ import { LayersRef } from "../types";
7
+
8
+ import { SketchFeature, SketchOptions } from "./types";
9
+
10
+ export default ({
11
+ layersRef,
12
+ sketchOptions,
13
+ }: {
14
+ layersRef: RefObject<LayersRef | null>;
15
+ sketchOptions: SketchOptions;
16
+ }) => {
17
+ const pluginSketchLayerCreate = useCallback(
18
+ (feature: SketchFeature) => {
19
+ const newLayer = layersRef.current?.add({
20
+ type: "simple",
21
+ data: {
22
+ type: "geojson",
23
+ isSketchLayer: true,
24
+ value: {
25
+ type: "FeatureCollection",
26
+ features: [{ ...feature, id: feature.properties.id }],
27
+ },
28
+ idProperty: "id",
29
+ },
30
+ ...sketchOptions.appearance,
31
+ });
32
+ return { layerId: newLayer?.id, featureId: feature.properties.id };
33
+ },
34
+ [layersRef, sketchOptions.appearance],
35
+ );
36
+
37
+ const pluginSketchLayerFeatureAdd = useCallback(
38
+ (layer: LazyLayer, feature: SketchFeature) => {
39
+ if (layer.type !== "simple") return {};
40
+ layersRef.current?.override(layer.id, {
41
+ data: {
42
+ ...layer.data,
43
+ type: "geojson",
44
+ value: {
45
+ type: "FeatureCollection",
46
+ features: [
47
+ ...((layer.computed?.layer as LayerSimple)?.data?.value?.features ?? []),
48
+ { ...feature, id: feature.properties.id },
49
+ ],
50
+ },
51
+ },
52
+ });
53
+ return { layerId: layer.id, featureId: feature.properties.id };
54
+ },
55
+ [layersRef],
56
+ );
57
+
58
+ const pluginSketchLayerFeatureUpdate = useCallback(
59
+ (layer: LazyLayer, feature: SketchFeature) => {
60
+ if (layer.type !== "simple") return {};
61
+ layersRef.current?.override(layer.id, {
62
+ data: {
63
+ ...layer.data,
64
+ type: "geojson",
65
+ value: {
66
+ type: "FeatureCollection",
67
+ features: (layer.computed?.layer as LayerSimple)?.data?.value?.features?.map(
68
+ (f: ComputedFeature) => (f.id === feature.id ? feature : f),
69
+ ),
70
+ },
71
+ },
72
+ });
73
+ return { layerId: layer.id, featureId: feature.properties.id };
74
+ },
75
+ [layersRef],
76
+ );
77
+
78
+ const pluginSketchLayerFeatureRemove = useCallback(
79
+ (layer: LazyLayer, featureId: string) => {
80
+ if (layer.type !== "simple" || layer.computed?.layer.type !== "simple") return;
81
+ layersRef.current?.override(layer.id, {
82
+ data: {
83
+ ...layer.data,
84
+ type: "geojson",
85
+ value: {
86
+ type: "FeatureCollection",
87
+ features: [
88
+ ...(layer.computed?.layer?.data?.value?.features ?? []).filter(
89
+ (feature: GeojsonFeature) => feature.id !== featureId,
90
+ ),
91
+ ],
92
+ },
93
+ },
94
+ });
95
+ },
96
+ [layersRef],
97
+ );
98
+
99
+ return {
100
+ pluginSketchLayerCreate,
101
+ pluginSketchLayerFeatureAdd,
102
+ pluginSketchLayerFeatureUpdate,
103
+ pluginSketchLayerFeatureRemove,
104
+ };
105
+ };
@@ -0,0 +1,559 @@
1
+ import { LineString, MultiPolygon, Point, Polygon, Feature } from "geojson";
2
+ import { Dispatch, MutableRefObject, SetStateAction, useCallback, useEffect, useRef } from "react";
3
+ import invariant from "tiny-invariant";
4
+ import { RefObject } from "use-callback-ref/dist/es5/types";
5
+
6
+ import { Position3d } from "../../types";
7
+ import { EngineRef, MouseEventCallback, MouseEventProps } from "../types";
8
+
9
+ import { SketchInterpreter, sketchState } from "./hooks";
10
+ import { Typegen0 } from "./sketchMachine.typegen";
11
+ import {
12
+ GeometryOptionsXYZ,
13
+ SketchEditingFeature,
14
+ SketchFeature,
15
+ SketchOptions,
16
+ SketchType,
17
+ } from "./types";
18
+
19
+ type Props = {
20
+ state: sketchState;
21
+ send: SketchInterpreter["send"];
22
+ engineRef: RefObject<EngineRef | null>;
23
+ disableInteraction: boolean;
24
+ type: SketchType | undefined;
25
+ updateType: Dispatch<SetStateAction<SketchType | undefined>>;
26
+ geometryOptions: GeometryOptionsXYZ | null;
27
+ setGeometryOptions: Dispatch<SetStateAction<GeometryOptionsXYZ | null>>;
28
+ updateGeometryOptions: (controlPoint?: Position3d) => void;
29
+ sketchEditingFeature?: SketchEditingFeature;
30
+ setSelectedControlPointIndex: Dispatch<SetStateAction<number | undefined>>;
31
+ markerGeometryRef: MutableRefObject<GeometryOptionsXYZ | null>;
32
+ pointerLocationRef: MutableRefObject<[lng: number, lat: number, height: number] | undefined>;
33
+ extrudedHeight: number;
34
+ setExtrudedHeight: (height: number) => void;
35
+ setExtrudedPoint: (point: Position3d | undefined) => void;
36
+ updateCentroidPoints: (controlPoints: Position3d[]) => void;
37
+ createFeature: () => Feature<
38
+ Polygon | MultiPolygon | Point | LineString,
39
+ {
40
+ id: string;
41
+ type: SketchType;
42
+ positions: Position3d[];
43
+ extrudedHeight: number;
44
+ }
45
+ > | null;
46
+ handleFeatureCreate: (feature: SketchFeature) => void;
47
+ applyEdit: () => void;
48
+ cancelEdit: () => void;
49
+ isEditing: boolean;
50
+ sketchOptions: SketchOptions;
51
+ };
52
+
53
+ const movingStatus: Typegen0["matchesStates"][] = [
54
+ "editing.marker.moving",
55
+ "editing.polyline.moving",
56
+ "editing.polygon.moving",
57
+ "editing.circle.moving",
58
+ "editing.rectangle.moving",
59
+ "editing.extrudedCircle.moving",
60
+ "editing.extrudedRectangle.moving",
61
+ "editing.extrudedPolygon.moving",
62
+ ];
63
+
64
+ export default ({
65
+ state,
66
+ engineRef,
67
+ disableInteraction,
68
+ type,
69
+ updateType,
70
+ sketchEditingFeature,
71
+ setSelectedControlPointIndex,
72
+ send,
73
+ setGeometryOptions,
74
+ markerGeometryRef,
75
+ pointerLocationRef,
76
+ geometryOptions,
77
+ updateGeometryOptions,
78
+ extrudedHeight,
79
+ setExtrudedHeight,
80
+ setExtrudedPoint,
81
+ updateCentroidPoints,
82
+ createFeature,
83
+ handleFeatureCreate,
84
+ applyEdit,
85
+ cancelEdit,
86
+ isEditing,
87
+ sketchOptions,
88
+ }: Props) => {
89
+ const handleLeftDown = useCallback(
90
+ (props: MouseEventProps) => {
91
+ setSelectedControlPointIndex(undefined);
92
+
93
+ if (
94
+ disableInteraction ||
95
+ (!type && !sketchEditingFeature) ||
96
+ props.lng === undefined ||
97
+ props.lat === undefined ||
98
+ props.height === undefined ||
99
+ props.x === undefined ||
100
+ props.y === undefined
101
+ ) {
102
+ return;
103
+ }
104
+
105
+ if (state.matches("idle") && type) {
106
+ invariant(state.context.lastControlPoint == null);
107
+ const controlPoint = engineRef.current?.toXYZ(props.lng, props.lat, props.height);
108
+ if (controlPoint == null) {
109
+ return;
110
+ }
111
+
112
+ send({
113
+ type: {
114
+ marker: "MARKER" as const,
115
+ polyline: "POLYLINE" as const,
116
+ circle: "CIRCLE" as const,
117
+ rectangle: "RECTANGLE" as const,
118
+ polygon: "POLYGON" as const,
119
+ extrudedCircle: "EXTRUDED_CIRCLE" as const,
120
+ extrudedRectangle: "EXTRUDED_RECTANGLE" as const,
121
+ extrudedPolygon: "EXTRUDED_POLYGON" as const,
122
+ }[type],
123
+ pointerPosition: [props.x, props.y],
124
+ controlPoint,
125
+ });
126
+ setGeometryOptions(null);
127
+ markerGeometryRef.current = null;
128
+ }
129
+ },
130
+ [
131
+ state,
132
+ disableInteraction,
133
+ type,
134
+ sketchEditingFeature,
135
+ engineRef,
136
+ send,
137
+ setGeometryOptions,
138
+ setSelectedControlPointIndex,
139
+ markerGeometryRef,
140
+ ],
141
+ );
142
+
143
+ const handleMouseMove = useCallback(
144
+ (props: MouseEventProps) => {
145
+ if (
146
+ disableInteraction ||
147
+ props.lng === undefined ||
148
+ props.lat === undefined ||
149
+ props.height === undefined ||
150
+ props.x === undefined ||
151
+ props.y === undefined ||
152
+ !engineRef.current
153
+ ) {
154
+ return;
155
+ }
156
+
157
+ pointerLocationRef.current = [props.lng, props.lat, props.height];
158
+
159
+ if (state.matches("drawing")) {
160
+ invariant(state.context.type != null);
161
+ invariant(state.context.controlPoints != null);
162
+ let controlPoint = engineRef.current?.toXYZ(props.lng, props.lat, props.height);
163
+
164
+ if (
165
+ controlPoint == null ||
166
+ hasDuplicate(engineRef.current.equalsEpsilon3d, controlPoint, state.context.controlPoints)
167
+ ) {
168
+ return;
169
+ }
170
+
171
+ if (
172
+ (state.context.type === "rectangle" || state.context.type === "extrudedRectangle") &&
173
+ state.context.controlPoints.length === 2 &&
174
+ controlPoint
175
+ ) {
176
+ const fixedControlPoints = engineRef.current.calcRectangleControlPoint(
177
+ state.context.controlPoints[0],
178
+ state.context.controlPoints[1],
179
+ controlPoint,
180
+ );
181
+ controlPoint = fixedControlPoints[2];
182
+ }
183
+ updateGeometryOptions(controlPoint);
184
+ } else if (state.matches("extruding")) {
185
+ invariant(geometryOptions?.controlPoints != null);
186
+ let extrudedHeight;
187
+ if (state.context.type !== "extrudedRectangle") {
188
+ extrudedHeight = engineRef.current?.getExtrudedHeight(
189
+ geometryOptions?.controlPoints[geometryOptions?.controlPoints?.length - 1],
190
+ [props.x, props.y],
191
+ );
192
+ } else if (state.context.originalControlPoint) {
193
+ extrudedHeight = engineRef.current?.getExtrudedHeight(
194
+ state.context.originalControlPoint,
195
+ [props.x, props.y],
196
+ );
197
+ }
198
+ if (extrudedHeight != null) {
199
+ setExtrudedHeight(extrudedHeight);
200
+ if (state.context.controlPoints) {
201
+ const extrudePoint = engineRef.current?.getExtrudedPoint(
202
+ geometryOptions?.controlPoints[geometryOptions?.controlPoints?.length - 1],
203
+ extrudedHeight,
204
+ );
205
+ setExtrudedPoint(extrudePoint);
206
+ }
207
+ }
208
+ } else if (movingStatus.some(state.matches)) {
209
+ if (state.context.catchedExtrudedPoint) {
210
+ invariant(geometryOptions?.controlPoints != null);
211
+ const extrudedHeight = engineRef.current?.getExtrudedHeight(
212
+ geometryOptions?.controlPoints[geometryOptions?.controlPoints?.length - 1],
213
+ [props.x, props.y],
214
+ );
215
+ if (extrudedHeight != null) {
216
+ setExtrudedHeight(extrudedHeight);
217
+ if (state.context.controlPoints) {
218
+ const extrudePoint = engineRef.current?.getExtrudedPoint(
219
+ geometryOptions?.controlPoints[geometryOptions?.controlPoints?.length - 1],
220
+ extrudedHeight,
221
+ );
222
+ setExtrudedPoint(extrudePoint);
223
+ }
224
+ }
225
+ } else {
226
+ const controlPoint = engineRef.current.toXYZ(props.lng, props.lat, props.height);
227
+
228
+ if (
229
+ controlPoint == null ||
230
+ !state.context.controlPoints ||
231
+ state.context.catchedControlPointIndex === -1 ||
232
+ state.context.catchedControlPointIndex === undefined
233
+ )
234
+ return;
235
+
236
+ let newControlPoints = state.context.controlPoints.toSpliced(
237
+ state.context.catchedControlPointIndex,
238
+ 1,
239
+ controlPoint,
240
+ );
241
+
242
+ if (
243
+ (state.context.type === "rectangle" || state.context.type === "extrudedRectangle") &&
244
+ state.context.controlPoints.length === 3
245
+ ) {
246
+ newControlPoints = engineRef.current.calcRectangleControlPoint(
247
+ newControlPoints[0],
248
+ newControlPoints[1],
249
+ newControlPoints[2],
250
+ );
251
+ }
252
+
253
+ if (
254
+ ["extrudedCircle", "extrudedRectangle", "extrudedPolygon"].includes(
255
+ state.context.type ?? "",
256
+ )
257
+ ) {
258
+ const newExtrudedPoint = engineRef.current.getExtrudedPoint(
259
+ newControlPoints[newControlPoints.length - 1],
260
+ extrudedHeight,
261
+ );
262
+ setExtrudedPoint(newExtrudedPoint);
263
+
264
+ if (sketchOptions.useCentroidExtrudedHeight) {
265
+ updateCentroidPoints(state.context.controlPoints);
266
+ }
267
+ }
268
+
269
+ send({
270
+ type: "MOVE",
271
+ controlPoints: newControlPoints,
272
+ });
273
+
274
+ setGeometryOptions(op =>
275
+ op
276
+ ? {
277
+ type: op.type,
278
+ controlPoints: newControlPoints,
279
+ }
280
+ : null,
281
+ );
282
+ }
283
+ }
284
+ },
285
+ [
286
+ geometryOptions,
287
+ disableInteraction,
288
+ state,
289
+ engineRef,
290
+ extrudedHeight,
291
+ send,
292
+ updateGeometryOptions,
293
+ updateCentroidPoints,
294
+ setExtrudedHeight,
295
+ setExtrudedPoint,
296
+ pointerLocationRef,
297
+ setGeometryOptions,
298
+ sketchOptions.useCentroidExtrudedHeight,
299
+ ],
300
+ );
301
+
302
+ const handleLeftUp = useCallback(
303
+ (props: MouseEventProps) => {
304
+ if (
305
+ disableInteraction ||
306
+ props.lng === undefined ||
307
+ props.lat === undefined ||
308
+ props.height === undefined ||
309
+ props.x === undefined ||
310
+ props.y === undefined ||
311
+ !engineRef.current
312
+ ) {
313
+ return;
314
+ }
315
+
316
+ if (movingStatus.some(state.matches)) {
317
+ send({
318
+ type: "RELEASE",
319
+ controlPoints: state.context.controlPoints ?? [],
320
+ catchedControlPointIndex: -1,
321
+ catchedExtrudedPoint: false,
322
+ });
323
+ setGeometryOptions(op =>
324
+ op
325
+ ? {
326
+ type: op.type,
327
+ controlPoints: state.context.controlPoints ?? [],
328
+ }
329
+ : null,
330
+ );
331
+ }
332
+
333
+ if (
334
+ state.context.controlPoints?.length === 1 &&
335
+ state.context.lastPointerPosition != null &&
336
+ state.context.type !== "marker" &&
337
+ engineRef.current?.equalsEpsilon2d(
338
+ [props.x, props.y],
339
+ state.context.lastPointerPosition,
340
+ 0,
341
+ 5,
342
+ )
343
+ ) {
344
+ return; // Too close to the first position user clicked.
345
+ }
346
+
347
+ if (state.matches("drawing")) {
348
+ const controlPoint = engineRef.current?.toXYZ(props.lng, props.lat, props.height);
349
+ if (controlPoint == null) return;
350
+
351
+ if (state.context.type === "marker") {
352
+ markerGeometryRef.current = {
353
+ type: state.context.type,
354
+ controlPoints: [controlPoint],
355
+ };
356
+ const feature = createFeature();
357
+ markerGeometryRef.current = null;
358
+ if (feature == null) {
359
+ return;
360
+ }
361
+ handleFeatureCreate(feature);
362
+ send({ type: "CREATE" });
363
+ setGeometryOptions(null);
364
+ return;
365
+ }
366
+ if (
367
+ hasDuplicate(
368
+ engineRef.current?.equalsEpsilon3d,
369
+ controlPoint,
370
+ state.context.controlPoints,
371
+ )
372
+ ) {
373
+ return;
374
+ }
375
+ if (
376
+ state.context.type === "circle" ||
377
+ (state.context.type === "rectangle" && state.context.controlPoints?.length === 2)
378
+ ) {
379
+ const feature = createFeature();
380
+ if (feature == null) {
381
+ return;
382
+ }
383
+ handleFeatureCreate(feature);
384
+ send({ type: "CREATE" });
385
+ setGeometryOptions(null);
386
+ return;
387
+ } else {
388
+ if (props.x === undefined || props.y === undefined) return;
389
+ send({
390
+ type: "NEXT",
391
+ pointerPosition: [props.x, props.y],
392
+ controlPoint,
393
+ });
394
+ }
395
+ } else if (state.matches("extruding")) {
396
+ const feature = createFeature();
397
+ if (feature == null) {
398
+ return;
399
+ }
400
+ handleFeatureCreate(feature);
401
+ send({ type: "CREATE" });
402
+ setGeometryOptions(null);
403
+ }
404
+ },
405
+ [
406
+ disableInteraction,
407
+ state,
408
+ engineRef,
409
+ send,
410
+ setGeometryOptions,
411
+ createFeature,
412
+ handleFeatureCreate,
413
+ markerGeometryRef,
414
+ ],
415
+ );
416
+
417
+ const handleDoubleClick = useCallback(
418
+ (props: MouseEventProps) => {
419
+ if (isEditing) {
420
+ applyEdit();
421
+ return;
422
+ }
423
+
424
+ if (
425
+ disableInteraction ||
426
+ props.lng === undefined ||
427
+ props.lat === undefined ||
428
+ props.height === undefined ||
429
+ props.x === undefined ||
430
+ props.y === undefined
431
+ ) {
432
+ return;
433
+ }
434
+ if (state.matches("drawing.extrudedPolygon")) {
435
+ const controlPoint = engineRef.current?.toXYZ(props.lng, props.lat, props.height);
436
+ if (controlPoint == null) return;
437
+ send({
438
+ type: "EXTRUDE",
439
+ pointerPosition: [props.x, props.y],
440
+ controlPoint,
441
+ });
442
+ } else if (state.matches("drawing.polyline") || state.matches("drawing.polygon")) {
443
+ const feature = createFeature();
444
+ if (feature == null) {
445
+ return;
446
+ }
447
+ handleFeatureCreate(feature);
448
+ send({ type: "CREATE" });
449
+ setGeometryOptions(null);
450
+ }
451
+ },
452
+ [
453
+ isEditing,
454
+ applyEdit,
455
+ disableInteraction,
456
+ state,
457
+ engineRef,
458
+ send,
459
+ handleFeatureCreate,
460
+ createFeature,
461
+ setGeometryOptions,
462
+ ],
463
+ );
464
+
465
+ const handleRightClick = useCallback(() => {
466
+ if (isEditing) {
467
+ cancelEdit();
468
+ return;
469
+ }
470
+ if (!sketchOptions.rightClickToAbort) {
471
+ return;
472
+ }
473
+ if (type !== undefined) {
474
+ updateType(undefined);
475
+ }
476
+ if (state.matches("idle")) return;
477
+ send({ type: "ABORT" });
478
+ updateGeometryOptions(undefined);
479
+ }, [
480
+ isEditing,
481
+ cancelEdit,
482
+ type,
483
+ state,
484
+ sketchOptions.rightClickToAbort,
485
+ send,
486
+ updateGeometryOptions,
487
+ updateType,
488
+ ]);
489
+
490
+ const mouseDownEventRef = useRef<MouseEventCallback>(handleLeftDown);
491
+ mouseDownEventRef.current = handleLeftDown;
492
+ const mouseMoveEventRef = useRef<MouseEventCallback>(handleMouseMove);
493
+ mouseMoveEventRef.current = handleMouseMove;
494
+ const mouseUpEventRef = useRef<MouseEventCallback>(handleLeftUp);
495
+ mouseUpEventRef.current = handleLeftUp;
496
+ const mouseDoubleClickEventRef = useRef<MouseEventCallback>(handleDoubleClick);
497
+ mouseDoubleClickEventRef.current = handleDoubleClick;
498
+ const mouseRightClickEventRef = useRef<() => void>(handleRightClick);
499
+ mouseRightClickEventRef.current = handleRightClick;
500
+
501
+ const onMouseDown = useCallback(
502
+ (props: MouseEventProps) => {
503
+ mouseDownEventRef.current?.(props);
504
+ },
505
+ [mouseDownEventRef],
506
+ );
507
+
508
+ const onMouseMove = useCallback(
509
+ (props: MouseEventProps) => {
510
+ mouseMoveEventRef.current?.(props);
511
+ },
512
+ [mouseMoveEventRef],
513
+ );
514
+
515
+ const onMouseUp = useCallback(
516
+ (props: MouseEventProps) => {
517
+ mouseUpEventRef.current?.(props);
518
+ },
519
+ [mouseUpEventRef],
520
+ );
521
+
522
+ const onMouseDoubleClick = useCallback(
523
+ (props: MouseEventProps) => {
524
+ mouseDoubleClickEventRef.current?.(props);
525
+ },
526
+ [mouseDoubleClickEventRef],
527
+ );
528
+
529
+ const onMouseRightClick = useCallback(() => {
530
+ mouseRightClickEventRef.current?.();
531
+ }, [mouseRightClickEventRef]);
532
+
533
+ const eventsBinded = useRef(false);
534
+
535
+ useEffect(() => {
536
+ if (eventsBinded.current || !engineRef.current) return;
537
+ eventsBinded.current = true;
538
+ engineRef.current?.onMouseDown(onMouseDown);
539
+ engineRef.current?.onMouseMove(onMouseMove);
540
+ engineRef.current?.onMouseUp(onMouseUp);
541
+ engineRef.current?.onDoubleClick(onMouseDoubleClick);
542
+ engineRef.current?.onRightClick(onMouseRightClick);
543
+ }, [engineRef, onMouseDown, onMouseMove, onMouseUp, onMouseDoubleClick, onMouseRightClick]);
544
+
545
+ return {};
546
+ };
547
+
548
+ function hasDuplicate(
549
+ equalFunction: (
550
+ point1: Position3d,
551
+ point2: Position3d,
552
+ relativeEpsilon: number | undefined,
553
+ absoluteEpsilon: number | undefined,
554
+ ) => boolean,
555
+ controlPoint: Position3d,
556
+ controlPoints?: readonly Position3d[],
557
+ ): boolean {
558
+ return controlPoints?.some(another => equalFunction(controlPoint, another, 0, 1e-7)) === true;
559
+ }