@reearth/core 0.0.7-alpha.4 → 0.0.7-alpha.41

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 (452) hide show
  1. package/dist/core.js +44858 -39524
  2. package/dist/core.umd.cjs +3910 -3868
  3. package/dist/{index-DqatWUTw.js → index-DqGWVPtz.js} +0 -1
  4. package/dist/index.d.ts +141 -24
  5. package/package.json +29 -9
  6. package/src/Map/Geoid/index.tsx +68 -0
  7. package/src/Map/Geoid/types.ts +8 -0
  8. package/src/Map/Layer/hooks.ts +6 -3
  9. package/src/Map/Layer/index.tsx +2 -0
  10. package/src/Map/Layers/hooks.ts +27 -0
  11. package/src/Map/Layers/index.tsx +12 -1
  12. package/src/Map/Layers/keys.ts +1 -0
  13. package/src/Map/Sketch/hooks.ts +450 -407
  14. package/src/Map/Sketch/index.tsx +65 -18
  15. package/src/Map/Sketch/sketchMachine.ts +359 -4
  16. package/src/Map/Sketch/sketchMachine.typegen.ts +58 -1
  17. package/src/Map/Sketch/types.ts +10 -20
  18. package/src/Map/Sketch/usePluginSketchLayer.ts +105 -0
  19. package/src/Map/Sketch/useSketch.ts +559 -0
  20. package/src/Map/Sketch/useSketchFeature.ts +198 -0
  21. package/src/Map/SpatialId/constants.ts +21 -0
  22. package/src/Map/SpatialId/hooks.ts +448 -0
  23. package/src/Map/SpatialId/index.tsx +63 -0
  24. package/src/Map/SpatialId/types.ts +68 -0
  25. package/src/Map/SpatialId/utils.ts +65 -0
  26. package/src/Map/hooks.ts +54 -8
  27. package/src/Map/index.tsx +40 -7
  28. package/src/Map/ref.ts +30 -0
  29. package/src/Map/types/index.ts +37 -1
  30. package/src/Map/types/viewerProperty.ts +10 -0
  31. package/src/Visualizer/coreContext.tsx +2 -0
  32. package/src/Visualizer/hooks.ts +46 -12
  33. package/src/Visualizer/index.tsx +22 -3
  34. package/src/Visualizer/interactionMode.ts +2 -1
  35. package/src/engines/Cesium/Feature/Model/index.tsx +3 -3
  36. package/src/engines/Cesium/Feature/Polygon/index.tsx +6 -4
  37. package/src/engines/Cesium/Feature/Raster/mvt.ts +2 -1
  38. package/src/engines/Cesium/Feature/Resource/utils.ts +86 -91
  39. package/src/engines/Cesium/Feature/Tileset/hooks.ts +75 -35
  40. package/src/engines/Cesium/Feature/context.ts +1 -0
  41. package/src/engines/Cesium/Feature/index.tsx +6 -2
  42. package/src/engines/Cesium/Feature/utils.tsx +9 -5
  43. package/src/engines/Cesium/Shaders/OverriddenShaders/GlobeFS/IBL.glsl +6 -10
  44. package/src/engines/Cesium/Sketch/ControlPoint.tsx +128 -24
  45. package/src/engines/Cesium/Sketch/ExtrudedControlPoints.tsx +70 -25
  46. package/src/engines/Cesium/Sketch/ExtrudedMeasurement.tsx +3 -1
  47. package/src/engines/Cesium/Sketch/ExtrudedPolygonEntity.tsx +14 -14
  48. package/src/engines/Cesium/Sketch/PolylineEntity.tsx +7 -4
  49. package/src/engines/Cesium/Sketch/SurfaceAddingPoints.tsx +60 -0
  50. package/src/engines/Cesium/Sketch/SurfaceControlPoints.tsx +125 -35
  51. package/src/engines/Cesium/Sketch/constants.ts +5 -0
  52. package/src/engines/Cesium/Sketch/index.tsx +68 -29
  53. package/src/engines/Cesium/SpatialId/CoordinateIndicator.tsx +28 -0
  54. package/src/engines/Cesium/SpatialId/SpatialIdSpace.tsx +33 -0
  55. package/src/engines/Cesium/SpatialId/VerticalSpaceIndicator.tsx +32 -0
  56. package/src/engines/Cesium/SpatialId/index.ts +3 -0
  57. package/src/engines/Cesium/common.ts +52 -16
  58. package/src/engines/Cesium/core/Globe.tsx +11 -2
  59. package/src/engines/Cesium/core/Imagery.tsx +16 -3
  60. package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapLabelImagery.tsx +8 -1
  61. package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapVectorMapLabel.tsx +14 -2
  62. package/src/engines/Cesium/core/labels/LabelImageryLayers.tsx +10 -1
  63. package/src/engines/Cesium/core/presets.ts +10 -27
  64. package/src/engines/Cesium/helpers/getGeometryFromEntity.ts +55 -0
  65. package/src/engines/Cesium/hooks/useEngineRef.ts +46 -1
  66. package/src/engines/Cesium/hooks/useOverrideGlobeShader/useOverrideGlobeShader.ts +1 -1
  67. package/src/engines/Cesium/hooks.ts +45 -4
  68. package/src/engines/Cesium/index.tsx +16 -3
  69. package/src/engines/Cesium/types.ts +1 -1
  70. package/src/mantle/atoms/compute.ts +5 -1
  71. package/src/mantle/data/geojson.ts +53 -22
  72. package/src/mantle/evaluator/simple/expression/expression.test.ts +72 -0
  73. package/src/mantle/evaluator/simple/expression/node.ts +10 -12
  74. package/src/mantle/types/appearance.ts +12 -10
  75. package/src/mantle/types/index.ts +3 -0
  76. package/src/utils/image.ts +1 -11
  77. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json +0 -1
  78. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json +0 -1
  79. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json +0 -1
  80. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json +0 -1
  81. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json +0 -1
  82. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json +0 -1
  83. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json +0 -1
  84. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json +0 -1
  85. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json +0 -1
  86. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json +0 -1
  87. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json +0 -1
  88. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json +0 -1
  89. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json +0 -1
  90. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json +0 -1
  91. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json +0 -1
  92. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json +0 -1
  93. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json +0 -1
  94. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json +0 -1
  95. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json +0 -1
  96. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json +0 -1
  97. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json +0 -1
  98. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json +0 -1
  99. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json +0 -1
  100. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json +0 -1
  101. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json +0 -1
  102. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json +0 -1
  103. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json +0 -1
  104. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json +0 -1
  105. package/dist/cesium/Assets/Images/bing_maps_credit.png +0 -0
  106. package/dist/cesium/Assets/Images/cesium_credit.png +0 -0
  107. package/dist/cesium/Assets/Images/google_earth_credit.png +0 -0
  108. package/dist/cesium/Assets/Images/ion-credit.png +0 -0
  109. package/dist/cesium/Assets/Textures/LensFlare/DirtMask.jpg +0 -0
  110. package/dist/cesium/Assets/Textures/LensFlare/StarBurst.jpg +0 -0
  111. package/dist/cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg +0 -0
  112. package/dist/cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg +0 -0
  113. package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg +0 -0
  114. package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg +0 -0
  115. package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg +0 -0
  116. package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg +0 -0
  117. package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg +0 -0
  118. package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg +0 -0
  119. package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg +0 -0
  120. package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg +0 -0
  121. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg +0 -0
  122. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg +0 -0
  123. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg +0 -0
  124. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg +0 -0
  125. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg +0 -0
  126. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg +0 -0
  127. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg +0 -0
  128. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg +0 -0
  129. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg +0 -0
  130. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg +0 -0
  131. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg +0 -0
  132. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg +0 -0
  133. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg +0 -0
  134. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg +0 -0
  135. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg +0 -0
  136. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg +0 -0
  137. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg +0 -0
  138. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg +0 -0
  139. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg +0 -0
  140. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg +0 -0
  141. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg +0 -0
  142. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg +0 -0
  143. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg +0 -0
  144. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg +0 -0
  145. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg +0 -0
  146. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg +0 -0
  147. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg +0 -0
  148. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg +0 -0
  149. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg +0 -0
  150. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg +0 -0
  151. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg +0 -0
  152. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg +0 -0
  153. package/dist/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml +0 -14
  154. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
  155. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
  156. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
  157. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
  158. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
  159. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
  160. package/dist/cesium/Assets/Textures/maki/airfield.png +0 -0
  161. package/dist/cesium/Assets/Textures/maki/airport.png +0 -0
  162. package/dist/cesium/Assets/Textures/maki/alcohol-shop.png +0 -0
  163. package/dist/cesium/Assets/Textures/maki/america-football.png +0 -0
  164. package/dist/cesium/Assets/Textures/maki/art-gallery.png +0 -0
  165. package/dist/cesium/Assets/Textures/maki/bakery.png +0 -0
  166. package/dist/cesium/Assets/Textures/maki/bank.png +0 -0
  167. package/dist/cesium/Assets/Textures/maki/bar.png +0 -0
  168. package/dist/cesium/Assets/Textures/maki/baseball.png +0 -0
  169. package/dist/cesium/Assets/Textures/maki/basketball.png +0 -0
  170. package/dist/cesium/Assets/Textures/maki/beer.png +0 -0
  171. package/dist/cesium/Assets/Textures/maki/bicycle.png +0 -0
  172. package/dist/cesium/Assets/Textures/maki/building.png +0 -0
  173. package/dist/cesium/Assets/Textures/maki/bus.png +0 -0
  174. package/dist/cesium/Assets/Textures/maki/cafe.png +0 -0
  175. package/dist/cesium/Assets/Textures/maki/camera.png +0 -0
  176. package/dist/cesium/Assets/Textures/maki/campsite.png +0 -0
  177. package/dist/cesium/Assets/Textures/maki/car.png +0 -0
  178. package/dist/cesium/Assets/Textures/maki/cemetery.png +0 -0
  179. package/dist/cesium/Assets/Textures/maki/cesium.png +0 -0
  180. package/dist/cesium/Assets/Textures/maki/chemist.png +0 -0
  181. package/dist/cesium/Assets/Textures/maki/cinema.png +0 -0
  182. package/dist/cesium/Assets/Textures/maki/circle-stroked.png +0 -0
  183. package/dist/cesium/Assets/Textures/maki/circle.png +0 -0
  184. package/dist/cesium/Assets/Textures/maki/city.png +0 -0
  185. package/dist/cesium/Assets/Textures/maki/clothing-store.png +0 -0
  186. package/dist/cesium/Assets/Textures/maki/college.png +0 -0
  187. package/dist/cesium/Assets/Textures/maki/commercial.png +0 -0
  188. package/dist/cesium/Assets/Textures/maki/cricket.png +0 -0
  189. package/dist/cesium/Assets/Textures/maki/cross.png +0 -0
  190. package/dist/cesium/Assets/Textures/maki/dam.png +0 -0
  191. package/dist/cesium/Assets/Textures/maki/danger.png +0 -0
  192. package/dist/cesium/Assets/Textures/maki/disability.png +0 -0
  193. package/dist/cesium/Assets/Textures/maki/dog-park.png +0 -0
  194. package/dist/cesium/Assets/Textures/maki/embassy.png +0 -0
  195. package/dist/cesium/Assets/Textures/maki/emergency-telephone.png +0 -0
  196. package/dist/cesium/Assets/Textures/maki/entrance.png +0 -0
  197. package/dist/cesium/Assets/Textures/maki/farm.png +0 -0
  198. package/dist/cesium/Assets/Textures/maki/fast-food.png +0 -0
  199. package/dist/cesium/Assets/Textures/maki/ferry.png +0 -0
  200. package/dist/cesium/Assets/Textures/maki/fire-station.png +0 -0
  201. package/dist/cesium/Assets/Textures/maki/fuel.png +0 -0
  202. package/dist/cesium/Assets/Textures/maki/garden.png +0 -0
  203. package/dist/cesium/Assets/Textures/maki/gift.png +0 -0
  204. package/dist/cesium/Assets/Textures/maki/golf.png +0 -0
  205. package/dist/cesium/Assets/Textures/maki/grocery.png +0 -0
  206. package/dist/cesium/Assets/Textures/maki/hairdresser.png +0 -0
  207. package/dist/cesium/Assets/Textures/maki/harbor.png +0 -0
  208. package/dist/cesium/Assets/Textures/maki/heart.png +0 -0
  209. package/dist/cesium/Assets/Textures/maki/heliport.png +0 -0
  210. package/dist/cesium/Assets/Textures/maki/hospital.png +0 -0
  211. package/dist/cesium/Assets/Textures/maki/ice-cream.png +0 -0
  212. package/dist/cesium/Assets/Textures/maki/industrial.png +0 -0
  213. package/dist/cesium/Assets/Textures/maki/land-use.png +0 -0
  214. package/dist/cesium/Assets/Textures/maki/laundry.png +0 -0
  215. package/dist/cesium/Assets/Textures/maki/library.png +0 -0
  216. package/dist/cesium/Assets/Textures/maki/lighthouse.png +0 -0
  217. package/dist/cesium/Assets/Textures/maki/lodging.png +0 -0
  218. package/dist/cesium/Assets/Textures/maki/logging.png +0 -0
  219. package/dist/cesium/Assets/Textures/maki/london-underground.png +0 -0
  220. package/dist/cesium/Assets/Textures/maki/marker-stroked.png +0 -0
  221. package/dist/cesium/Assets/Textures/maki/marker.png +0 -0
  222. package/dist/cesium/Assets/Textures/maki/minefield.png +0 -0
  223. package/dist/cesium/Assets/Textures/maki/mobilephone.png +0 -0
  224. package/dist/cesium/Assets/Textures/maki/monument.png +0 -0
  225. package/dist/cesium/Assets/Textures/maki/museum.png +0 -0
  226. package/dist/cesium/Assets/Textures/maki/music.png +0 -0
  227. package/dist/cesium/Assets/Textures/maki/oil-well.png +0 -0
  228. package/dist/cesium/Assets/Textures/maki/park.png +0 -0
  229. package/dist/cesium/Assets/Textures/maki/park2.png +0 -0
  230. package/dist/cesium/Assets/Textures/maki/parking-garage.png +0 -0
  231. package/dist/cesium/Assets/Textures/maki/parking.png +0 -0
  232. package/dist/cesium/Assets/Textures/maki/pharmacy.png +0 -0
  233. package/dist/cesium/Assets/Textures/maki/pitch.png +0 -0
  234. package/dist/cesium/Assets/Textures/maki/place-of-worship.png +0 -0
  235. package/dist/cesium/Assets/Textures/maki/playground.png +0 -0
  236. package/dist/cesium/Assets/Textures/maki/police.png +0 -0
  237. package/dist/cesium/Assets/Textures/maki/polling-place.png +0 -0
  238. package/dist/cesium/Assets/Textures/maki/post.png +0 -0
  239. package/dist/cesium/Assets/Textures/maki/prison.png +0 -0
  240. package/dist/cesium/Assets/Textures/maki/rail-above.png +0 -0
  241. package/dist/cesium/Assets/Textures/maki/rail-light.png +0 -0
  242. package/dist/cesium/Assets/Textures/maki/rail-metro.png +0 -0
  243. package/dist/cesium/Assets/Textures/maki/rail-underground.png +0 -0
  244. package/dist/cesium/Assets/Textures/maki/rail.png +0 -0
  245. package/dist/cesium/Assets/Textures/maki/religious-christian.png +0 -0
  246. package/dist/cesium/Assets/Textures/maki/religious-jewish.png +0 -0
  247. package/dist/cesium/Assets/Textures/maki/religious-muslim.png +0 -0
  248. package/dist/cesium/Assets/Textures/maki/restaurant.png +0 -0
  249. package/dist/cesium/Assets/Textures/maki/roadblock.png +0 -0
  250. package/dist/cesium/Assets/Textures/maki/rocket.png +0 -0
  251. package/dist/cesium/Assets/Textures/maki/school.png +0 -0
  252. package/dist/cesium/Assets/Textures/maki/scooter.png +0 -0
  253. package/dist/cesium/Assets/Textures/maki/shop.png +0 -0
  254. package/dist/cesium/Assets/Textures/maki/skiing.png +0 -0
  255. package/dist/cesium/Assets/Textures/maki/slaughterhouse.png +0 -0
  256. package/dist/cesium/Assets/Textures/maki/soccer.png +0 -0
  257. package/dist/cesium/Assets/Textures/maki/square-stroked.png +0 -0
  258. package/dist/cesium/Assets/Textures/maki/square.png +0 -0
  259. package/dist/cesium/Assets/Textures/maki/star-stroked.png +0 -0
  260. package/dist/cesium/Assets/Textures/maki/star.png +0 -0
  261. package/dist/cesium/Assets/Textures/maki/suitcase.png +0 -0
  262. package/dist/cesium/Assets/Textures/maki/swimming.png +0 -0
  263. package/dist/cesium/Assets/Textures/maki/telephone.png +0 -0
  264. package/dist/cesium/Assets/Textures/maki/tennis.png +0 -0
  265. package/dist/cesium/Assets/Textures/maki/theatre.png +0 -0
  266. package/dist/cesium/Assets/Textures/maki/toilets.png +0 -0
  267. package/dist/cesium/Assets/Textures/maki/town-hall.png +0 -0
  268. package/dist/cesium/Assets/Textures/maki/town.png +0 -0
  269. package/dist/cesium/Assets/Textures/maki/triangle-stroked.png +0 -0
  270. package/dist/cesium/Assets/Textures/maki/triangle.png +0 -0
  271. package/dist/cesium/Assets/Textures/maki/village.png +0 -0
  272. package/dist/cesium/Assets/Textures/maki/warehouse.png +0 -0
  273. package/dist/cesium/Assets/Textures/maki/waste-basket.png +0 -0
  274. package/dist/cesium/Assets/Textures/maki/water.png +0 -0
  275. package/dist/cesium/Assets/Textures/maki/wetland.png +0 -0
  276. package/dist/cesium/Assets/Textures/maki/zoo.png +0 -0
  277. package/dist/cesium/Assets/Textures/moonSmall.jpg +0 -0
  278. package/dist/cesium/Assets/Textures/pin.svg +0 -1
  279. package/dist/cesium/Assets/Textures/waterNormals.jpg +0 -0
  280. package/dist/cesium/Assets/Textures/waterNormalsSmall.jpg +0 -0
  281. package/dist/cesium/Assets/approximateTerrainHeights.json +0 -1
  282. package/dist/cesium/ThirdParty/Workers/package.json +0 -1
  283. package/dist/cesium/ThirdParty/Workers/pako_deflate.min.js +0 -1
  284. package/dist/cesium/ThirdParty/Workers/pako_inflate.min.js +0 -1
  285. package/dist/cesium/ThirdParty/Workers/z-worker-pako.js +0 -1
  286. package/dist/cesium/ThirdParty/basis_transcoder.wasm +0 -0
  287. package/dist/cesium/ThirdParty/draco_decoder.wasm +0 -0
  288. package/dist/cesium/ThirdParty/google-earth-dbroot-parser.js +0 -1
  289. package/dist/cesium/Widgets/Animation/Animation.css +0 -127
  290. package/dist/cesium/Widgets/Animation/lighter.css +0 -70
  291. package/dist/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css +0 -108
  292. package/dist/cesium/Widgets/BaseLayerPicker/lighter.css +0 -22
  293. package/dist/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css +0 -102
  294. package/dist/cesium/Widgets/CesiumInspector/CesiumInspector.css +0 -113
  295. package/dist/cesium/Widgets/CesiumWidget/CesiumWidget.css +0 -124
  296. package/dist/cesium/Widgets/CesiumWidget/lighter.css +0 -14
  297. package/dist/cesium/Widgets/FullscreenButton/FullscreenButton.css +0 -8
  298. package/dist/cesium/Widgets/Geocoder/Geocoder.css +0 -70
  299. package/dist/cesium/Widgets/Geocoder/lighter.css +0 -17
  300. package/dist/cesium/Widgets/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.css +0 -27
  301. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png +0 -0
  302. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png +0 -0
  303. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png +0 -0
  304. package/dist/cesium/Widgets/Images/ImageryProviders/bingAerial.png +0 -0
  305. package/dist/cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png +0 -0
  306. package/dist/cesium/Widgets/Images/ImageryProviders/bingRoads.png +0 -0
  307. package/dist/cesium/Widgets/Images/ImageryProviders/blueMarble.png +0 -0
  308. package/dist/cesium/Widgets/Images/ImageryProviders/earthAtNight.png +0 -0
  309. package/dist/cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png +0 -0
  310. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png +0 -0
  311. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxStreets.png +0 -0
  312. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png +0 -0
  313. package/dist/cesium/Widgets/Images/ImageryProviders/naturalEarthII.png +0 -0
  314. package/dist/cesium/Widgets/Images/ImageryProviders/openStreetMap.png +0 -0
  315. package/dist/cesium/Widgets/Images/ImageryProviders/sentinel-2.png +0 -0
  316. package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png +0 -0
  317. package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png +0 -0
  318. package/dist/cesium/Widgets/Images/ImageryProviders/stamenToner.png +0 -0
  319. package/dist/cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png +0 -0
  320. package/dist/cesium/Widgets/Images/NavigationHelp/Mouse.svg +0 -84
  321. package/dist/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg +0 -76
  322. package/dist/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg +0 -76
  323. package/dist/cesium/Widgets/Images/NavigationHelp/MouseRight.svg +0 -76
  324. package/dist/cesium/Widgets/Images/NavigationHelp/Touch.svg +0 -120
  325. package/dist/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg +0 -129
  326. package/dist/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg +0 -76
  327. package/dist/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg +0 -135
  328. package/dist/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg +0 -74
  329. package/dist/cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png +0 -0
  330. package/dist/cesium/Widgets/Images/TerrainProviders/Ellipsoid.png +0 -0
  331. package/dist/cesium/Widgets/Images/TimelineIcons.png +0 -0
  332. package/dist/cesium/Widgets/Images/info-loading.gif +0 -0
  333. package/dist/cesium/Widgets/InfoBox/InfoBox.css +0 -92
  334. package/dist/cesium/Widgets/InfoBox/InfoBoxDescription.css +0 -178
  335. package/dist/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css +0 -93
  336. package/dist/cesium/Widgets/NavigationHelpButton/lighter.css +0 -38
  337. package/dist/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css +0 -15
  338. package/dist/cesium/Widgets/ProjectionPicker/ProjectionPicker.css +0 -38
  339. package/dist/cesium/Widgets/SceneModePicker/SceneModePicker.css +0 -56
  340. package/dist/cesium/Widgets/SelectionIndicator/SelectionIndicator.css +0 -20
  341. package/dist/cesium/Widgets/Timeline/Timeline.css +0 -103
  342. package/dist/cesium/Widgets/Timeline/lighter.css +0 -23
  343. package/dist/cesium/Widgets/VRButton/VRButton.css +0 -8
  344. package/dist/cesium/Widgets/Viewer/Viewer.css +0 -107
  345. package/dist/cesium/Widgets/VoxelInspector/VoxelInspector.css +0 -16
  346. package/dist/cesium/Widgets/lighter.css +0 -237
  347. package/dist/cesium/Widgets/lighterShared.css +0 -46
  348. package/dist/cesium/Widgets/shared.css +0 -103
  349. package/dist/cesium/Widgets/widgets.css +0 -1346
  350. package/dist/cesium/Workers/chunk-2ED5WI77.js +0 -26
  351. package/dist/cesium/Workers/chunk-2MBPFWCP.js +0 -26
  352. package/dist/cesium/Workers/chunk-3C74MLG3.js +0 -26
  353. package/dist/cesium/Workers/chunk-45U7TTT3.js +0 -26
  354. package/dist/cesium/Workers/chunk-4N7SRDH5.js +0 -26
  355. package/dist/cesium/Workers/chunk-4T6AS6BZ.js +0 -26
  356. package/dist/cesium/Workers/chunk-5AG2MVRM.js +0 -26
  357. package/dist/cesium/Workers/chunk-5Z6L2FHX.js +0 -26
  358. package/dist/cesium/Workers/chunk-6AUUBDOF.js +0 -26
  359. package/dist/cesium/Workers/chunk-74N6MC2V.js +0 -26
  360. package/dist/cesium/Workers/chunk-7VJK3KHI.js +0 -26
  361. package/dist/cesium/Workers/chunk-7VZHIB6P.js +0 -26
  362. package/dist/cesium/Workers/chunk-7X2YQ6I4.js +0 -27
  363. package/dist/cesium/Workers/chunk-B2SKQ7LU.js +0 -26
  364. package/dist/cesium/Workers/chunk-B4TQDFIE.js +0 -26
  365. package/dist/cesium/Workers/chunk-B6TRTFAA.js +0 -26
  366. package/dist/cesium/Workers/chunk-BK3HCS7I.js +0 -26
  367. package/dist/cesium/Workers/chunk-BOPB43LN.js +0 -26
  368. package/dist/cesium/Workers/chunk-C6DMEJQ7.js +0 -26
  369. package/dist/cesium/Workers/chunk-CN7UN2OZ.js +0 -26
  370. package/dist/cesium/Workers/chunk-CSISXEG7.js +0 -26
  371. package/dist/cesium/Workers/chunk-CUOR5F7T.js +0 -28
  372. package/dist/cesium/Workers/chunk-DGCK3LD2.js +0 -30
  373. package/dist/cesium/Workers/chunk-DXEZYE3K.js +0 -62
  374. package/dist/cesium/Workers/chunk-EXBFEYPQ.js +0 -26
  375. package/dist/cesium/Workers/chunk-FK5KFB6H.js +0 -26
  376. package/dist/cesium/Workers/chunk-HPBHKP5S.js +0 -26
  377. package/dist/cesium/Workers/chunk-JCJ24DHF.js +0 -26
  378. package/dist/cesium/Workers/chunk-JEWHFDAA.js +0 -26
  379. package/dist/cesium/Workers/chunk-JZLZJJQD.js +0 -26
  380. package/dist/cesium/Workers/chunk-KRZBI2MU.js +0 -26
  381. package/dist/cesium/Workers/chunk-KTTUANTJ.js +0 -26
  382. package/dist/cesium/Workers/chunk-LDCAXLGS.js +0 -26
  383. package/dist/cesium/Workers/chunk-LOPN5R3I.js +0 -26
  384. package/dist/cesium/Workers/chunk-MDLPQIMP.js +0 -26
  385. package/dist/cesium/Workers/chunk-MRR3RGFO.js +0 -26
  386. package/dist/cesium/Workers/chunk-NPBZI5YA.js +0 -26
  387. package/dist/cesium/Workers/chunk-NUSW5B6A.js +0 -26
  388. package/dist/cesium/Workers/chunk-OUXRUXNB.js +0 -26
  389. package/dist/cesium/Workers/chunk-QPOPEH3M.js +0 -26
  390. package/dist/cesium/Workers/chunk-R2AN7EKC.js +0 -26
  391. package/dist/cesium/Workers/chunk-RURL6ZX2.js +0 -26
  392. package/dist/cesium/Workers/chunk-SUQM3OSW.js +0 -28
  393. package/dist/cesium/Workers/chunk-UBIRX2SP.js +0 -26
  394. package/dist/cesium/Workers/chunk-VAKC5J5C.js +0 -26
  395. package/dist/cesium/Workers/chunk-VHNZBQTR.js +0 -27
  396. package/dist/cesium/Workers/chunk-VKV642QV.js +0 -26
  397. package/dist/cesium/Workers/chunk-VMSXG4OA.js +0 -26
  398. package/dist/cesium/Workers/chunk-VQZSIOZW.js +0 -26
  399. package/dist/cesium/Workers/chunk-WZUWQMI7.js +0 -26
  400. package/dist/cesium/Workers/chunk-YBI55DLZ.js +0 -26
  401. package/dist/cesium/Workers/chunk-YEJWCH6C.js +0 -26
  402. package/dist/cesium/Workers/chunk-YPDO7SPO.js +0 -26
  403. package/dist/cesium/Workers/chunk-ZYWD6OQH.js +0 -26
  404. package/dist/cesium/Workers/combineGeometry.js +0 -26
  405. package/dist/cesium/Workers/createBoxGeometry.js +0 -26
  406. package/dist/cesium/Workers/createBoxOutlineGeometry.js +0 -26
  407. package/dist/cesium/Workers/createCircleGeometry.js +0 -26
  408. package/dist/cesium/Workers/createCircleOutlineGeometry.js +0 -26
  409. package/dist/cesium/Workers/createCoplanarPolygonGeometry.js +0 -26
  410. package/dist/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +0 -26
  411. package/dist/cesium/Workers/createCorridorGeometry.js +0 -26
  412. package/dist/cesium/Workers/createCorridorOutlineGeometry.js +0 -26
  413. package/dist/cesium/Workers/createCylinderGeometry.js +0 -26
  414. package/dist/cesium/Workers/createCylinderOutlineGeometry.js +0 -26
  415. package/dist/cesium/Workers/createEllipseGeometry.js +0 -26
  416. package/dist/cesium/Workers/createEllipseOutlineGeometry.js +0 -26
  417. package/dist/cesium/Workers/createEllipsoidGeometry.js +0 -26
  418. package/dist/cesium/Workers/createEllipsoidOutlineGeometry.js +0 -26
  419. package/dist/cesium/Workers/createFrustumGeometry.js +0 -26
  420. package/dist/cesium/Workers/createFrustumOutlineGeometry.js +0 -26
  421. package/dist/cesium/Workers/createGeometry.js +0 -26
  422. package/dist/cesium/Workers/createGroundPolylineGeometry.js +0 -26
  423. package/dist/cesium/Workers/createPlaneGeometry.js +0 -26
  424. package/dist/cesium/Workers/createPlaneOutlineGeometry.js +0 -26
  425. package/dist/cesium/Workers/createPolygonGeometry.js +0 -26
  426. package/dist/cesium/Workers/createPolygonOutlineGeometry.js +0 -26
  427. package/dist/cesium/Workers/createPolylineGeometry.js +0 -26
  428. package/dist/cesium/Workers/createPolylineVolumeGeometry.js +0 -26
  429. package/dist/cesium/Workers/createPolylineVolumeOutlineGeometry.js +0 -26
  430. package/dist/cesium/Workers/createRectangleGeometry.js +0 -26
  431. package/dist/cesium/Workers/createRectangleOutlineGeometry.js +0 -26
  432. package/dist/cesium/Workers/createSimplePolylineGeometry.js +0 -26
  433. package/dist/cesium/Workers/createSphereGeometry.js +0 -26
  434. package/dist/cesium/Workers/createSphereOutlineGeometry.js +0 -26
  435. package/dist/cesium/Workers/createTaskProcessorWorker.js +0 -26
  436. package/dist/cesium/Workers/createVectorTileClampedPolylines.js +0 -26
  437. package/dist/cesium/Workers/createVectorTileGeometries.js +0 -26
  438. package/dist/cesium/Workers/createVectorTilePoints.js +0 -26
  439. package/dist/cesium/Workers/createVectorTilePolygons.js +0 -26
  440. package/dist/cesium/Workers/createVectorTilePolylines.js +0 -26
  441. package/dist/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +0 -26
  442. package/dist/cesium/Workers/createVerticesFromHeightmap.js +0 -26
  443. package/dist/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +0 -26
  444. package/dist/cesium/Workers/createWallGeometry.js +0 -26
  445. package/dist/cesium/Workers/createWallOutlineGeometry.js +0 -26
  446. package/dist/cesium/Workers/decodeDraco.js +0 -26
  447. package/dist/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +0 -26
  448. package/dist/cesium/Workers/decodeI3S.js +0 -26
  449. package/dist/cesium/Workers/transcodeKTX2.js +0 -56
  450. package/dist/cesium/Workers/transferTypedArrayTest.js +0 -26
  451. package/dist/cesium/Workers/upsampleQuantizedTerrainMesh.js +0 -26
  452. /package/src/{Map/Sketch/utils.ts → utils/use-window-event.ts} +0 -0
@@ -15,13 +15,11 @@ import {
15
15
  Cesium3DTileFeature,
16
16
  Model,
17
17
  Cesium3DTilePointFeature,
18
- GoogleMaps as CesiumGoogleMaps,
19
- Resource,
20
- defaultValue,
21
18
  ImageBasedLighting,
22
19
  Cesium3DTileContent,
23
20
  Color,
24
21
  Viewer,
22
+ createGooglePhotorealistic3DTileset,
25
23
  } from "cesium";
26
24
  import { pick } from "lodash-es";
27
25
  import { MutableRefObject, useCallback, useEffect, useMemo, useRef, useState } from "react";
@@ -57,7 +55,6 @@ import {
57
55
  } from "../utils";
58
56
 
59
57
  import { TilesetFeatureIndex } from "./TilesetFeatureIndex";
60
- import { GoogleMaps } from "./types";
61
58
  import { useClippingBox } from "./useClippingBox";
62
59
  import { useDrawClipping } from "./useDrawClipping";
63
60
 
@@ -77,6 +74,7 @@ const useData = (layer: ComputedLayer | undefined) => {
77
74
  ? data.layers.join(",")
78
75
  : data?.layers
79
76
  : undefined,
77
+ googleMapApiKey: data?.serviceTokens?.googleMapApiKey,
80
78
  };
81
79
  }, [layer]);
82
80
  };
@@ -225,20 +223,25 @@ const useFeature = ({
225
223
  const style = computedFeature?.["3dtiles"];
226
224
 
227
225
  COMMON_STYLE_PROPERTIES.forEach(({ name, convert }) => {
226
+ const val = convertStyle(style?.[name], convert);
227
+
228
228
  if (name === "color") {
229
- if (isFeatureSelected) {
230
- raw.color =
231
- typeof layer["3dtiles"]?.selectedFeatureColor === "string"
232
- ? toColor(layer["3dtiles"]?.selectedFeatureColor) ?? raw.color
233
- : raw.color;
234
- return;
229
+ // Reset color to default so that new style could update all.
230
+ raw.color = DEFAULT_FEATURE_COLOR;
231
+
232
+ // Apply color from style.
233
+ if (val !== undefined) {
234
+ raw.color = val;
235
235
  }
236
236
 
237
- raw.color = DEFAULT_FEATURE_COLOR;
238
- }
239
- const val = convertStyle(style?.[name], convert);
240
- if (val !== undefined) {
241
- raw[name] = val;
237
+ // Apply color for selected feature.
238
+ if (isFeatureSelected && typeof layer["3dtiles"]?.selectedFeatureColor === "string") {
239
+ raw.color = toColor(layer["3dtiles"]?.selectedFeatureColor) ?? val;
240
+ }
241
+ } else {
242
+ if (val !== undefined) {
243
+ raw[name] = val;
244
+ }
242
245
  }
243
246
  });
244
247
 
@@ -450,7 +453,7 @@ export const useHooks = ({
450
453
  }) => {
451
454
  const { viewer } = useCesium();
452
455
  const tilesetRef = useRef<Cesium3DTilesetType>();
453
- const { onLayerLoad } = useContext();
456
+ const { onLayerLoad, updateCredits } = useContext();
454
457
  const layerIdRef = useRef(layer?.id);
455
458
  layerIdRef.current = layer?.id;
456
459
 
@@ -460,7 +463,6 @@ export const useHooks = ({
460
463
  edgeColor,
461
464
  edgeWidth,
462
465
  experimental_clipping,
463
- apiKey,
464
466
  selectedFeatureColor,
465
467
  disableIndexingFeature,
466
468
  } = property ?? {};
@@ -481,7 +483,7 @@ export const useHooks = ({
481
483
  } = useClippingBox({ clipping: experimental_clipping, boxId });
482
484
 
483
485
  const [style, setStyle] = useState<Cesium3DTileStyle>();
484
- const { url, type, idProperty } = useData(layer);
486
+ const { url, type, idProperty, googleMapApiKey } = useData(layer);
485
487
  const shouldUseFeatureIndex = !disableIndexingFeature && !!idProperty;
486
488
 
487
489
  const [isTilesetReady, setIsTilesetReady] = useState(false);
@@ -503,8 +505,9 @@ export const useHooks = ({
503
505
  return prevPlanes.current;
504
506
  }, [_planes]);
505
507
  const clipDirection = direction === "inside" ? -1 : 1;
508
+
506
509
  // Create immutable object
507
- const [clippingPlanes] = useState(
510
+ const [clippingPlanes, setClippingPlanes] = useState<CesiumClippingPlaneCollection>(
508
511
  () =>
509
512
  new CesiumClippingPlaneCollection({
510
513
  planes: planes?.map(
@@ -519,6 +522,27 @@ export const useHooks = ({
519
522
  edgeColor: toColor(edgeColor),
520
523
  }),
521
524
  );
525
+ // Initialize clipping planes
526
+ // This is workaround to reinitialize ClippingPlanes in strict mode.
527
+ useEffect(
528
+ () => () => {
529
+ setClippingPlanes(
530
+ new CesiumClippingPlaneCollection({
531
+ planes: planes?.map(
532
+ plane =>
533
+ new ClippingPlane(
534
+ new Cartesian3(plane.normal?.x, plane.normal?.y, plane.normal?.z),
535
+ (plane.distance || 0) * clipDirection,
536
+ ),
537
+ ),
538
+ unionClippingRegions: direction === "outside",
539
+ edgeWidth: edgeWidth,
540
+ edgeColor: toColor(edgeColor),
541
+ }),
542
+ );
543
+ },
544
+ [], // eslint-disable-line react-hooks/exhaustive-deps
545
+ );
522
546
 
523
547
  const { drawClippingEnabled, drawClippingEdgeProps } = useDrawClipping({
524
548
  ...experimental_clipping?.draw,
@@ -708,31 +732,40 @@ export const useHooks = ({
708
732
  })();
709
733
  }, [styleUrl]);
710
734
 
711
- const googleMapResource = useMemo(() => {
712
- if (type !== "google-photorealistic" || !isVisible) return;
713
- // Ref: https://github.com/CesiumGS/cesium/blob/b208135a095073386e5f04a59956ee11a03aa847/packages/engine/Source/Scene/createGooglePhotorealistic3DTileset.js#L30
714
- const googleMaps = CesiumGoogleMaps as GoogleMaps;
715
- // Default key: https://github.com/CesiumGS/cesium/blob/b208135a095073386e5f04a59956ee11a03aa847/packages/engine/Source/Core/GoogleMaps.js#L6C36-L6C36
716
- const key = defaultValue(apiKey, googleMaps.defaultApiKey);
717
- const credit = googleMaps.getDefaultApiKeyCredit(key);
718
- return new Resource({
719
- url: `${googleMaps.mapTilesApiEndpoint}3dtiles/root.json`,
720
- queryParameters: { key },
721
- credits: credit ? [credit] : undefined,
722
- } as Resource.ConstructorOptions);
723
- }, [apiKey, type, isVisible]);
735
+ const googleMapPhotorealisticResource = useMemo(() => {
736
+ if (type !== "google-photorealistic" || !isVisible) return null;
737
+
738
+ const loadTileset = async () => {
739
+ try {
740
+ if (googleMapApiKey) {
741
+ const tileset = await createGooglePhotorealistic3DTileset(googleMapApiKey);
742
+ return tileset.resource;
743
+ } else {
744
+ const resource = IonResource.fromAssetId(2275207, {
745
+ accessToken: meta?.cesiumIonAccessToken as string | undefined,
746
+ });
747
+ return resource;
748
+ }
749
+ } catch (error) {
750
+ console.error(`Error loading Photorealistic 3D Tiles tileset: ${error}`);
751
+ throw error;
752
+ }
753
+ };
754
+
755
+ return loadTileset();
756
+ }, [type, isVisible, googleMapApiKey, meta?.cesiumIonAccessToken]);
724
757
 
725
758
  const tilesetUrl = useMemo(() => {
726
759
  return type === "osm-buildings" && isVisible
727
760
  ? IonResource.fromAssetId(96188, {
728
761
  accessToken: meta?.cesiumIonAccessToken as string | undefined,
729
762
  }) // https://github.com/CesiumGS/cesium/blob/main/packages/engine/Source/Scene/createOsmBuildings.js#L53
730
- : googleMapResource
731
- ? googleMapResource
763
+ : googleMapPhotorealisticResource && isVisible
764
+ ? googleMapPhotorealisticResource
732
765
  : type === "3dtiles" && isVisible
733
766
  ? url ?? tileset
734
767
  : null;
735
- }, [isVisible, tileset, url, type, meta, googleMapResource]);
768
+ }, [type, isVisible, meta?.cesiumIonAccessToken, googleMapPhotorealisticResource, url, tileset]);
736
769
 
737
770
  const imageBasedLighting = useMemo(() => {
738
771
  if (
@@ -780,6 +813,13 @@ export const useHooks = ({
780
813
  [onLayerFetch, onLayerLoad],
781
814
  );
782
815
 
816
+ useEffect(() => {
817
+ updateCredits?.();
818
+ return () => {
819
+ updateCredits?.();
820
+ };
821
+ }, [type, updateCredits]);
822
+
783
823
  return {
784
824
  tilesetUrl,
785
825
  ref,
@@ -26,6 +26,7 @@ export type Context = {
26
26
  position: [x: number, y: number, z: number],
27
27
  ) => [x: number, y: number] | undefined;
28
28
  isPositionVisible?: (position: [x: number, y: number, z: number]) => boolean;
29
+ updateCredits?: () => void;
29
30
  };
30
31
 
31
32
  export const context = createContext<Context>({});
@@ -96,6 +96,7 @@ const FEATURE_DELEGATE_THRESHOLD = 6000;
96
96
  export default function Feature({
97
97
  layer,
98
98
  isHidden,
99
+ sketchEditingFeature,
99
100
  ...props
100
101
  }: FeatureComponentProps): JSX.Element | null {
101
102
  const data = extractSimpleLayerData(layer);
@@ -131,7 +132,10 @@ export default function Feature({
131
132
  const useSceneSpecularEnvironmentMaps =
132
133
  !!props.viewerProperty?.scene?.imageBasedLighting?.specularEnvironmentMaps;
133
134
 
134
- const isVisible = layer.layer.visible !== false && !isHidden;
135
+ const isVisible =
136
+ layer.layer.visible !== false &&
137
+ !isHidden &&
138
+ !(sketchEditingFeature?.layerId === layer.id && sketchEditingFeature?.feature?.id === f?.id);
135
139
 
136
140
  const componentId =
137
141
  urlMD5 +
@@ -140,7 +144,7 @@ export default function Feature({
140
144
  f?.id ?? ""
141
145
  }_${k}_${isVisible}_${useSceneSphericalHarmonicCoefficients}_${useSceneSpecularEnvironmentMaps}_${
142
146
  JSON.stringify(f?.[k]) ?? ""
143
- }_${JSON.stringify(layer.transition) ?? ""}`,
147
+ }_${JSON.stringify(layer.transition) ?? ""}_${JSON.stringify(f?.geometry) ?? ""}`,
144
148
  );
145
149
 
146
150
  if (cacheable) {
@@ -23,9 +23,10 @@ import {
23
23
  ComponentType,
24
24
  ForwardedRef,
25
25
  forwardRef,
26
+ useCallback,
26
27
  useLayoutEffect,
27
28
  useMemo,
28
- useRef,
29
+ useState,
29
30
  } from "react";
30
31
  import { type CesiumComponentRef, Entity } from "resium";
31
32
 
@@ -86,10 +87,11 @@ function EntityExtComponent(
86
87
  }: ComponentProps<typeof Entity> & Tag,
87
88
  ref: ForwardedRef<CesiumComponentRef<CesiumEntity>>,
88
89
  ) {
89
- const r = useRef<CesiumComponentRef<CesiumEntity>>(null);
90
+ const [entity, setEntity] = useState<CesiumComponentRef<CesiumEntity> | null>(null);
90
91
 
91
92
  useLayoutEffect(() => {
92
- attachTag(r.current?.cesiumElement, {
93
+ if (!entity?.cesiumElement) return;
94
+ attachTag(entity.cesiumElement, {
93
95
  layerId: layerId || props.id,
94
96
  featureId,
95
97
  draggable,
@@ -105,10 +107,12 @@ function EntityExtComponent(
105
107
  props.id,
106
108
  unselectable,
107
109
  hideIndicator,
108
- r.current?.cesiumElement,
110
+ entity,
109
111
  ]);
110
112
 
111
- return <Entity ref={composeRefs(ref, r)} {...props} />;
113
+ const handleRef = useCallback((r: CesiumComponentRef<CesiumEntity>) => setEntity(r), []);
114
+
115
+ return <Entity ref={composeRefs(ref, handleRef)} {...props} />;
112
116
  }
113
117
 
114
118
  export function attachTag(
@@ -6,8 +6,7 @@
6
6
  // https://github.com/CesiumGS/cesium/blob/1.106/packages/engine/Source/Shaders/Model/ImageBasedLightingStageFS.glsl
7
7
  // Specular term was removed, as I never apply it on terrain.
8
8
  vec3 reearth_imageBasedLightingStage(vec3 positionEC, vec3 normalEC,
9
- vec3 lightDirectionEC, vec3 lightColorHdr,
10
- czm_pbrParameters pbrParameters) {
9
+ vec3 lightDirectionEC, czm_modelMaterial material) {
11
10
  vec3 v = -positionEC;
12
11
  vec3 n = normalEC;
13
12
  vec3 l = normalize(lightDirectionEC);
@@ -24,21 +23,18 @@ vec3 reearth_imageBasedLightingStage(vec3 positionEC, vec3 normalEC,
24
23
  vec3 diffuseIrradiance =
25
24
  czm_sphericalHarmonics(cubeDir, u_reearth_sphericalHarmonicCoefficients);
26
25
 
27
- return pbrParameters.diffuseColor * diffuseIrradiance;
26
+ return material.diffuse * diffuseIrradiance;
28
27
  }
29
28
 
30
29
  vec4 reearth_computeImageBasedLightingColor(vec4 color) {
31
30
  if (u_reearth_globeImageBasedLighting) {
32
- czm_pbrParameters pbrParameters;
33
- pbrParameters.diffuseColor = color.rgb;
31
+ czm_modelMaterial material;
32
+ material.diffuse = color.rgb;
34
33
 
35
34
  vec3 normalEC = normalize(v_normalEC);
36
35
  vec3 lighting =
37
- czm_pbrLighting(v_positionEC, normalEC, czm_lightDirectionEC,
38
- czm_lightColorHdr, pbrParameters);
39
- lighting += reearth_imageBasedLightingStage(
40
- v_positionEC, normalEC, czm_lightDirectionEC,
41
- czm_lightColorHdr, pbrParameters) *
36
+ czm_pbrLighting(v_positionEC, normalEC, czm_lightDirectionEC, material) * czm_lightColorHdr;
37
+ lighting += reearth_imageBasedLightingStage(v_positionEC, normalEC, czm_lightDirectionEC, material) *
42
38
  u_vertexShadowDarkness;
43
39
 
44
40
  #ifndef HDR
@@ -5,37 +5,42 @@ import {
5
5
  type PositionProperty,
6
6
  type Property,
7
7
  } from "@cesium/engine";
8
- import { useMemo, useRef, type FC } from "react";
8
+ import { useCallback, useMemo, useRef, type FC } from "react";
9
9
  import { Entity } from "resium";
10
10
  import invariant from "tiny-invariant";
11
11
 
12
12
  import { useConstant } from "../../../utils";
13
13
 
14
- let image: HTMLCanvasElement | undefined;
14
+ import { ADDING_POINT_COLOR, DEFAULT_EDIT_COLOR, SELECTED_EDIT_COLOR } from "./constants";
15
15
 
16
- function getImage(): HTMLCanvasElement {
17
- if (image != null) {
18
- return image;
19
- }
20
- image = document.createElement("canvas");
21
- image.width = 16;
22
- image.height = 16;
23
- const context = image.getContext("2d");
24
- invariant(context != null);
25
- context.fillStyle = "white";
26
- context.fillRect(3, 3, 10, 10);
27
- context.strokeStyle = "black";
28
- context.lineWidth = 2;
29
- context.strokeRect(3, 3, 10, 10);
30
- return image;
31
- }
16
+ import { ControlPointMouseEventHandler } from ".";
17
+
18
+ let drawPointImage: HTMLCanvasElement | undefined;
19
+ let editPointImage: HTMLCanvasElement | undefined;
20
+ let selectedPointImage: HTMLCanvasElement | undefined;
21
+ let addingPointImage: HTMLCanvasElement | undefined;
32
22
 
33
23
  export interface ControlPointProps {
34
24
  position: Property | Cartesian3;
35
25
  clampToGround?: boolean;
26
+ index: number;
27
+ isEditing?: boolean;
28
+ isSelected?: boolean;
29
+ isAddingPoint?: boolean;
30
+ isExtrudedControlPoint?: boolean;
31
+ handleControlPointMouseEvent?: ControlPointMouseEventHandler;
36
32
  }
37
33
 
38
- export const ControlPoint: FC<ControlPointProps> = ({ position, clampToGround = false }) => {
34
+ export const ControlPoint: FC<ControlPointProps> = ({
35
+ position,
36
+ clampToGround = false,
37
+ index,
38
+ isEditing,
39
+ isSelected,
40
+ isAddingPoint,
41
+ isExtrudedControlPoint,
42
+ handleControlPointMouseEvent,
43
+ }) => {
39
44
  const positionRef = useRef(position);
40
45
  positionRef.current = position;
41
46
  const positionProperty = useConstant(
@@ -53,15 +58,114 @@ export const ControlPoint: FC<ControlPointProps> = ({ position, clampToGround =
53
58
  () => ({
54
59
  position: positionProperty,
55
60
  billboard: {
56
- image: getImage(),
57
- width: 8,
58
- height: 8,
61
+ image: isEditing
62
+ ? isAddingPoint
63
+ ? getAddingPointImage()
64
+ : isSelected
65
+ ? getSelectedPointImage()
66
+ : getEditPointImage()
67
+ : getDrawPointImage(),
68
+ width: isEditing ? 16 : 8,
69
+ height: isEditing ? 16 : 8,
59
70
  heightReference: clampToGround ? HeightReference.CLAMP_TO_GROUND : HeightReference.NONE,
60
71
  disableDepthTestDistance: Infinity,
61
72
  },
62
73
  }),
63
- [clampToGround, positionProperty],
74
+ [clampToGround, positionProperty, isAddingPoint, isEditing, isSelected],
64
75
  );
65
76
 
66
- return <Entity {...options} />;
77
+ const handleMouseDown = useCallback(() => {
78
+ handleControlPointMouseEvent?.(index, !!isExtrudedControlPoint, "mousedown");
79
+ }, [index, isExtrudedControlPoint, handleControlPointMouseEvent]);
80
+
81
+ const handleMouseClick = useCallback(() => {
82
+ handleControlPointMouseEvent?.(index, !!isExtrudedControlPoint, "click");
83
+ }, [index, isExtrudedControlPoint, handleControlPointMouseEvent]);
84
+
85
+ return <Entity {...options} onMouseDown={handleMouseDown} onClick={handleMouseClick} />;
67
86
  };
87
+
88
+ function getDrawPointImage(): HTMLCanvasElement {
89
+ if (drawPointImage != null) {
90
+ return drawPointImage;
91
+ }
92
+ drawPointImage = document.createElement("canvas");
93
+ drawPointImage.width = 16;
94
+ drawPointImage.height = 16;
95
+ const ctx = drawPointImage.getContext("2d");
96
+ invariant(ctx != null);
97
+ ctx.fillStyle = "white";
98
+ ctx.fillRect(3, 3, 10, 10);
99
+ ctx.strokeStyle = "black";
100
+ ctx.lineWidth = 2;
101
+ ctx.strokeRect(3, 3, 10, 10);
102
+ return drawPointImage;
103
+ }
104
+
105
+ function getEditPointImage(): HTMLCanvasElement {
106
+ return getImage(editPointImage, {
107
+ size: 32,
108
+ color: "white",
109
+ strokeColor: DEFAULT_EDIT_COLOR,
110
+ });
111
+ }
112
+
113
+ function getSelectedPointImage(): HTMLCanvasElement {
114
+ return getImage(selectedPointImage, {
115
+ size: 32,
116
+ color: "white",
117
+ strokeColor: SELECTED_EDIT_COLOR,
118
+ });
119
+ }
120
+
121
+ function getAddingPointImage(): HTMLCanvasElement {
122
+ if (addingPointImage != null) {
123
+ return addingPointImage;
124
+ }
125
+ addingPointImage = document.createElement("canvas");
126
+ addingPointImage.width = 32;
127
+ addingPointImage.height = 32;
128
+ const ctx = addingPointImage.getContext("2d");
129
+ invariant(ctx != null);
130
+ ctx.beginPath();
131
+ ctx.arc(16, 16, 12, 0, 2 * Math.PI);
132
+ ctx.fillStyle = "white";
133
+ ctx.fill();
134
+ ctx.strokeStyle = ADDING_POINT_COLOR;
135
+ ctx.lineWidth = 4;
136
+ ctx.stroke();
137
+ ctx.beginPath();
138
+ ctx.moveTo(16, 8);
139
+ ctx.lineTo(16, 24);
140
+ ctx.stroke();
141
+ ctx.moveTo(8, 16);
142
+ ctx.lineTo(24, 16);
143
+ ctx.stroke();
144
+ return addingPointImage;
145
+ }
146
+
147
+ function getImage(
148
+ canvas: HTMLCanvasElement | undefined,
149
+ options: {
150
+ size: number;
151
+ color: string;
152
+ strokeColor: string;
153
+ },
154
+ ): HTMLCanvasElement {
155
+ if (canvas != null) {
156
+ return canvas;
157
+ }
158
+ canvas = document.createElement("canvas");
159
+ canvas.width = options.size;
160
+ canvas.height = options.size;
161
+ const ctx = canvas.getContext("2d");
162
+ invariant(ctx != null);
163
+ ctx.beginPath();
164
+ ctx.arc(options.size / 2, options.size / 2, options.size / 2 - 4, 0, 2 * Math.PI);
165
+ ctx.fillStyle = options.color;
166
+ ctx.fill();
167
+ ctx.strokeStyle = options.strokeColor;
168
+ ctx.lineWidth = 4;
169
+ ctx.stroke();
170
+ return canvas;
171
+ }
@@ -1,46 +1,91 @@
1
- import { Cartesian3, type Color } from "@cesium/engine";
1
+ import { Cartesian3, Color } from "@cesium/engine";
2
2
  import { memo, type FC } from "react";
3
- import { useCesium } from "resium";
4
- import invariant from "tiny-invariant";
5
3
 
4
+ import { Position3d } from "../../../types";
5
+
6
+ import { DEFAULT_EDIT_COLOR } from "./constants";
6
7
  import { ControlPoint } from "./ControlPoint";
7
8
  import { type GeometryOptions } from "./createGeometry";
8
9
  import { ExtrudedMeasurement } from "./ExtrudedMeasurement";
9
10
 
11
+ import { ControlPointMouseEventHandler } from ".";
12
+
10
13
  export interface ExtrudedControlPointsProps {
11
14
  geometryOptions: GeometryOptions;
12
15
  extrudedHeight: number;
16
+ extrudedPoint?: Position3d;
17
+ centroidBasePoint?: Position3d;
18
+ centroidExtrudedPoint?: Position3d;
19
+ catchedExtrudedPoint?: boolean;
13
20
  color?: Color;
21
+ isEditing?: boolean;
22
+ handleControlPointMouseEvent?: ControlPointMouseEventHandler;
14
23
  }
15
24
 
16
- const cartesianScratch = new Cartesian3();
17
-
18
25
  const ExtrudedControlPoints: FC<ExtrudedControlPointsProps> = memo(
19
- ({ geometryOptions: { controlPoints }, extrudedHeight, color }) => {
20
- const { viewer } = useCesium();
26
+ ({
27
+ geometryOptions: { controlPoints, type },
28
+ extrudedHeight,
29
+ color,
30
+ isEditing,
31
+ extrudedPoint: extrudedPointPosition,
32
+ centroidBasePoint: extrudeBasePointPosition,
33
+ centroidExtrudedPoint: extrudeControlPointPosition,
34
+ catchedExtrudedPoint,
35
+ handleControlPointMouseEvent,
36
+ }) => {
21
37
  const controlPoint = controlPoints[controlPoints.length - 1];
22
- const normal = viewer?.scene?.globe.ellipsoid.geodeticSurfaceNormal(
23
- controlPoint,
24
- cartesianScratch,
25
- );
26
38
 
27
- invariant(normal !== undefined);
28
- const extrudedPoint = Cartesian3.add(
29
- controlPoint,
30
- Cartesian3.multiplyByScalar(normal, extrudedHeight, cartesianScratch),
31
- cartesianScratch,
32
- );
39
+ const extrudedPoint = extrudedPointPosition
40
+ ? new Cartesian3(...extrudedPointPosition)
41
+ : undefined;
42
+
43
+ const heightBasePoint = extrudeBasePointPosition
44
+ ? new Cartesian3(...extrudeBasePointPosition)
45
+ : undefined;
46
+
47
+ const centroidExtrudedPoint = extrudeControlPointPosition
48
+ ? new Cartesian3(...extrudeControlPointPosition)
49
+ : undefined;
33
50
 
34
51
  return (
35
52
  <>
36
- <ControlPoint position={controlPoint} clampToGround />
37
- <ControlPoint position={extrudedPoint} />
38
- <ExtrudedMeasurement
39
- a={controlPoint}
40
- b={extrudedPoint}
41
- extrudedHeight={extrudedHeight}
42
- color={color}
43
- />
53
+ {extrudedPoint && (
54
+ <>
55
+ <ControlPoint
56
+ index={-1}
57
+ position={extrudedPoint}
58
+ isEditing={isEditing}
59
+ isExtrudedControlPoint
60
+ handleControlPointMouseEvent={handleControlPointMouseEvent}
61
+ />
62
+ {(!isEditing || catchedExtrudedPoint) && (
63
+ <ExtrudedMeasurement
64
+ a={controlPoint}
65
+ b={extrudedPoint}
66
+ extrudedHeight={extrudedHeight}
67
+ color={isEditing ? Color.fromCssColorString(DEFAULT_EDIT_COLOR) : color}
68
+ showLine={type !== "extrudedPolygon"}
69
+ />
70
+ )}
71
+ </>
72
+ )}
73
+ {heightBasePoint && (
74
+ <ControlPoint
75
+ index={-1}
76
+ position={heightBasePoint}
77
+ isEditing={isEditing}
78
+ isExtrudedControlPoint
79
+ />
80
+ )}
81
+ {centroidExtrudedPoint && (
82
+ <ControlPoint
83
+ index={-1}
84
+ position={centroidExtrudedPoint}
85
+ isEditing={isEditing}
86
+ isExtrudedControlPoint
87
+ />
88
+ )}
44
89
  </>
45
90
  );
46
91
  },
@@ -46,6 +46,7 @@ export interface ExtrudedMeasurementProps {
46
46
  b: Cartesian3;
47
47
  extrudedHeight: number;
48
48
  color?: Color;
49
+ showLine?: boolean;
49
50
  }
50
51
 
51
52
  export const ExtrudedMeasurement: FC<ExtrudedMeasurementProps> = ({
@@ -53,6 +54,7 @@ export const ExtrudedMeasurement: FC<ExtrudedMeasurementProps> = ({
53
54
  b,
54
55
  extrudedHeight,
55
56
  color,
57
+ showLine,
56
58
  }) => {
57
59
  const position = useConstant(() => new Cartesian3());
58
60
  return (
@@ -64,7 +66,7 @@ export const ExtrudedMeasurement: FC<ExtrudedMeasurementProps> = ({
64
66
  : `${(extrudedHeight / 1000).toFixed(1)} km`}
65
67
  </MeasurementText>
66
68
  </ScreenSpaceElement>
67
- <MeasurementLine a={a} b={b} color={color} />
69
+ {showLine && <MeasurementLine a={a} b={b} color={color} />}
68
70
  </>
69
71
  );
70
72
  };