@reearth/core 0.0.7-alpha.5 → 0.0.7-beta.1

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 (169) hide show
  1. package/dist/cesium/ThirdParty/Workers/z-worker-pako.js +1 -1
  2. package/dist/cesium/Widgets/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.css +8 -8
  3. package/dist/cesium/Widgets/widgets.css +8 -8
  4. package/dist/cesium/Workers/{chunk-SUQM3OSW.js → chunk-2YD5QWGR.js} +2 -2
  5. package/dist/cesium/Workers/{chunk-74N6MC2V.js → chunk-3T4KR75X.js} +2 -2
  6. package/dist/cesium/Workers/chunk-46KFVW24.js +26 -0
  7. package/dist/cesium/Workers/chunk-4EI6PP43.js +28 -0
  8. package/dist/cesium/Workers/{chunk-YEJWCH6C.js → chunk-4RS52VIY.js} +2 -2
  9. package/dist/cesium/Workers/{chunk-NPBZI5YA.js → chunk-4YLYA3DC.js} +1 -1
  10. package/dist/cesium/Workers/{chunk-JEWHFDAA.js → chunk-5ENAGXBI.js} +2 -2
  11. package/dist/cesium/Workers/{chunk-MRR3RGFO.js → chunk-5VIB3TI5.js} +2 -2
  12. package/dist/cesium/Workers/{chunk-JCJ24DHF.js → chunk-6NGZLDFZ.js} +2 -2
  13. package/dist/cesium/Workers/{chunk-7X2YQ6I4.js → chunk-6RGNWVZ2.js} +2 -2
  14. package/dist/cesium/Workers/{chunk-BK3HCS7I.js → chunk-7AZZVJ52.js} +2 -2
  15. package/dist/cesium/Workers/{chunk-UBIRX2SP.js → chunk-AMXAQQEL.js} +2 -2
  16. package/dist/cesium/Workers/{chunk-LDCAXLGS.js → chunk-AQW44ZPC.js} +2 -2
  17. package/dist/cesium/Workers/{chunk-B6TRTFAA.js → chunk-CPCMDW6Z.js} +2 -2
  18. package/dist/cesium/Workers/{chunk-3C74MLG3.js → chunk-DNL2WDRL.js} +1 -1
  19. package/dist/cesium/Workers/{chunk-FK5KFB6H.js → chunk-ERW7V247.js} +1 -1
  20. package/dist/cesium/Workers/{chunk-5AG2MVRM.js → chunk-EYRIA4TP.js} +2 -2
  21. package/dist/cesium/Workers/{chunk-6AUUBDOF.js → chunk-F7RQIJML.js} +2 -2
  22. package/dist/cesium/Workers/{chunk-JZLZJJQD.js → chunk-FPZMU6QP.js} +2 -2
  23. package/dist/cesium/Workers/{chunk-YBI55DLZ.js → chunk-FZDVQW7A.js} +2 -2
  24. package/dist/cesium/Workers/{chunk-2MBPFWCP.js → chunk-GAZ2U4FO.js} +2 -2
  25. package/dist/cesium/Workers/{chunk-CSISXEG7.js → chunk-I44IOOT4.js} +1 -1
  26. package/dist/cesium/Workers/{chunk-R2AN7EKC.js → chunk-IALXUAD4.js} +1 -1
  27. package/dist/cesium/Workers/{chunk-MDLPQIMP.js → chunk-IXBUEUZL.js} +2 -2
  28. package/dist/cesium/Workers/{chunk-HPBHKP5S.js → chunk-J3GCYV5K.js} +2 -2
  29. package/dist/cesium/Workers/{chunk-KRZBI2MU.js → chunk-KGSZTFHZ.js} +2 -2
  30. package/dist/cesium/Workers/{chunk-B2SKQ7LU.js → chunk-KKKPU2CI.js} +2 -2
  31. package/dist/cesium/Workers/{chunk-QPOPEH3M.js → chunk-KTEJE5KE.js} +2 -2
  32. package/dist/cesium/Workers/chunk-KYZ3DYY6.js +26 -0
  33. package/dist/cesium/Workers/{chunk-LOPN5R3I.js → chunk-L2QG4MRI.js} +2 -2
  34. package/dist/cesium/Workers/{chunk-EXBFEYPQ.js → chunk-MCE3KFYN.js} +2 -2
  35. package/dist/cesium/Workers/{chunk-C6DMEJQ7.js → chunk-MMLDGXML.js} +2 -2
  36. package/dist/cesium/Workers/{chunk-KTTUANTJ.js → chunk-MTBRPBDQ.js} +2 -2
  37. package/dist/cesium/Workers/{chunk-7VZHIB6P.js → chunk-OKT6VBRK.js} +2 -2
  38. package/dist/cesium/Workers/chunk-PHYDKLSY.js +26 -0
  39. package/dist/cesium/Workers/chunk-PWPX3224.js +26 -0
  40. package/dist/cesium/Workers/{chunk-VQZSIOZW.js → chunk-QHOVE6WG.js} +2 -2
  41. package/dist/cesium/Workers/{chunk-CN7UN2OZ.js → chunk-QJ6MBL22.js} +2 -2
  42. package/dist/cesium/Workers/{chunk-NUSW5B6A.js → chunk-QKO6VIG2.js} +2 -2
  43. package/dist/cesium/Workers/{chunk-4N7SRDH5.js → chunk-QVEE4QL2.js} +2 -2
  44. package/dist/cesium/Workers/{chunk-4T6AS6BZ.js → chunk-RXQOQZ7S.js} +2 -2
  45. package/dist/cesium/Workers/{chunk-RURL6ZX2.js → chunk-S3ZKQKMM.js} +2 -2
  46. package/dist/cesium/Workers/{chunk-ZYWD6OQH.js → chunk-SFEUMZSK.js} +2 -2
  47. package/dist/cesium/Workers/{chunk-BOPB43LN.js → chunk-T75MW4X3.js} +2 -2
  48. package/dist/cesium/Workers/chunk-TVO2A75R.js +66 -0
  49. package/dist/cesium/Workers/{chunk-VHNZBQTR.js → chunk-UHR36K45.js} +2 -2
  50. package/dist/cesium/Workers/{chunk-WZUWQMI7.js → chunk-UKJCDZOR.js} +2 -2
  51. package/dist/cesium/Workers/{chunk-B4TQDFIE.js → chunk-VKVIYER6.js} +2 -2
  52. package/dist/cesium/Workers/{chunk-OUXRUXNB.js → chunk-VPIQWTRZ.js} +2 -2
  53. package/dist/cesium/Workers/{chunk-2ED5WI77.js → chunk-XSX5HRFC.js} +2 -2
  54. package/dist/cesium/Workers/{chunk-5Z6L2FHX.js → chunk-Z5WQQHSL.js} +2 -2
  55. package/dist/cesium/Workers/{chunk-YPDO7SPO.js → chunk-Z7B2VEL5.js} +2 -2
  56. package/dist/cesium/Workers/combineGeometry.js +2 -2
  57. package/dist/cesium/Workers/createBoxGeometry.js +2 -2
  58. package/dist/cesium/Workers/createBoxOutlineGeometry.js +2 -2
  59. package/dist/cesium/Workers/createCircleGeometry.js +2 -2
  60. package/dist/cesium/Workers/createCircleOutlineGeometry.js +2 -2
  61. package/dist/cesium/Workers/createCoplanarPolygonGeometry.js +2 -2
  62. package/dist/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +2 -2
  63. package/dist/cesium/Workers/createCorridorGeometry.js +2 -2
  64. package/dist/cesium/Workers/createCorridorOutlineGeometry.js +2 -2
  65. package/dist/cesium/Workers/createCylinderGeometry.js +2 -2
  66. package/dist/cesium/Workers/createCylinderOutlineGeometry.js +2 -2
  67. package/dist/cesium/Workers/createEllipseGeometry.js +2 -2
  68. package/dist/cesium/Workers/createEllipseOutlineGeometry.js +2 -2
  69. package/dist/cesium/Workers/createEllipsoidGeometry.js +2 -2
  70. package/dist/cesium/Workers/createEllipsoidOutlineGeometry.js +2 -2
  71. package/dist/cesium/Workers/createFrustumGeometry.js +2 -2
  72. package/dist/cesium/Workers/createFrustumOutlineGeometry.js +2 -2
  73. package/dist/cesium/Workers/createGeometry.js +2 -2
  74. package/dist/cesium/Workers/createGroundPolylineGeometry.js +2 -2
  75. package/dist/cesium/Workers/createPlaneGeometry.js +2 -2
  76. package/dist/cesium/Workers/createPlaneOutlineGeometry.js +2 -2
  77. package/dist/cesium/Workers/createPolygonGeometry.js +2 -2
  78. package/dist/cesium/Workers/createPolygonOutlineGeometry.js +2 -2
  79. package/dist/cesium/Workers/createPolylineGeometry.js +2 -2
  80. package/dist/cesium/Workers/createPolylineVolumeGeometry.js +2 -2
  81. package/dist/cesium/Workers/createPolylineVolumeOutlineGeometry.js +2 -2
  82. package/dist/cesium/Workers/createRectangleGeometry.js +2 -2
  83. package/dist/cesium/Workers/createRectangleOutlineGeometry.js +2 -2
  84. package/dist/cesium/Workers/createSimplePolylineGeometry.js +2 -2
  85. package/dist/cesium/Workers/createSphereGeometry.js +2 -2
  86. package/dist/cesium/Workers/createSphereOutlineGeometry.js +2 -2
  87. package/dist/cesium/Workers/createTaskProcessorWorker.js +2 -2
  88. package/dist/cesium/Workers/createVectorTileClampedPolylines.js +2 -2
  89. package/dist/cesium/Workers/createVectorTileGeometries.js +2 -2
  90. package/dist/cesium/Workers/createVectorTilePoints.js +2 -2
  91. package/dist/cesium/Workers/createVectorTilePolygons.js +2 -2
  92. package/dist/cesium/Workers/createVectorTilePolylines.js +2 -2
  93. package/dist/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +2 -2
  94. package/dist/cesium/Workers/createVerticesFromHeightmap.js +2 -2
  95. package/dist/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +2 -2
  96. package/dist/cesium/Workers/createWallGeometry.js +2 -2
  97. package/dist/cesium/Workers/createWallOutlineGeometry.js +2 -2
  98. package/dist/cesium/Workers/decodeDraco.js +2 -2
  99. package/dist/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +2 -2
  100. package/dist/cesium/Workers/decodeI3S.js +2 -2
  101. package/dist/cesium/Workers/transcodeKTX2.js +10 -10
  102. package/dist/cesium/Workers/transferTypedArrayTest.js +1 -1
  103. package/dist/cesium/Workers/upsampleQuantizedTerrainMesh.js +2 -2
  104. package/dist/core.js +34193 -34105
  105. package/dist/core.umd.cjs +3866 -3820
  106. package/dist/index.d.ts +212 -217
  107. package/package.json +5 -5
  108. package/src/Map/ClusteredLayers/index.tsx +2 -2
  109. package/src/Map/Layer/index.tsx +3 -3
  110. package/src/Map/Layers/hooks.ts +0 -10
  111. package/src/Map/Layers/index.tsx +2 -2
  112. package/src/Map/Sketch/hooks.ts +66 -46
  113. package/src/Map/Sketch/index.tsx +24 -2
  114. package/src/Map/Sketch/preset.ts +0 -2
  115. package/src/Map/Sketch/types.ts +0 -31
  116. package/src/Map/hooks.ts +4 -0
  117. package/src/Map/index.tsx +5 -8
  118. package/src/Map/ref.ts +7 -4
  119. package/src/Map/types/index.ts +216 -34
  120. package/src/Map/useTimelineManager.ts +3 -5
  121. package/src/Map/utils.ts +43 -1
  122. package/src/Visualizer/coreContext.tsx +8 -1
  123. package/src/Visualizer/hooks.ts +75 -6
  124. package/src/Visualizer/index.stories.tsx +48 -4
  125. package/src/Visualizer/index.tsx +6 -8
  126. package/src/engines/Cesium/Feature/Ellipse/index.stories.tsx +1 -1
  127. package/src/engines/Cesium/Feature/Frustum/index.stories.tsx +1 -1
  128. package/src/engines/Cesium/Feature/Model/index.stories.tsx +1 -1
  129. package/src/engines/Cesium/Feature/Model/index.tsx +9 -10
  130. package/src/engines/Cesium/Feature/Polygon/index.stories.tsx +6 -8
  131. package/src/engines/Cesium/Feature/Raster/index.stories.tsx +2 -2
  132. package/src/engines/Cesium/Feature/Resource/index.stories.tsx +1 -1
  133. package/src/engines/Cesium/Feature/Tileset/hooks.ts +11 -12
  134. package/src/engines/Cesium/Feature/Tileset/index.stories.tsx +1 -1
  135. package/src/engines/Cesium/Feature/Tileset/index.tsx +4 -4
  136. package/src/engines/Cesium/Feature/Tileset/useClippingBox.ts +1 -10
  137. package/src/engines/Cesium/Feature/index.tsx +4 -5
  138. package/src/engines/Cesium/Feature/utils.tsx +2 -3
  139. package/src/engines/Cesium/Shaders/OverriddenShaders/GlobeFS/IBL.glsl +6 -10
  140. package/src/engines/Cesium/{hooks/useOverrideGlobeShader/VertexTerrainElevationMaterial.ts → VertexTerrainElevationMaterial.ts} +2 -3
  141. package/src/engines/Cesium/{hooks/useCameraLimiter.ts → cameraLimiter.ts} +45 -22
  142. package/src/engines/Cesium/core/Globe.tsx +68 -36
  143. package/src/engines/Cesium/core/Imagery.test.ts +9 -9
  144. package/src/engines/Cesium/core/Imagery.tsx +19 -17
  145. package/src/engines/Cesium/core/Indicator/Indicator.tsx +8 -8
  146. package/src/engines/Cesium/hooks.ts +365 -124
  147. package/src/engines/Cesium/index.stories.tsx +1 -1
  148. package/src/engines/Cesium/index.tsx +62 -60
  149. package/src/engines/Cesium/{hooks/useEngineRef.test.tsx → useEngineRef.test.tsx} +34 -38
  150. package/src/engines/Cesium/{hooks/useEngineRef.ts → useEngineRef.ts} +41 -43
  151. package/src/engines/Cesium/{hooks/useOverrideGlobeShader/useOverrideGlobeShader.ts → useOverrideGlobeShader.ts} +17 -20
  152. package/src/engines/index.ts +1 -1
  153. package/src/mantle/compat/types.ts +7 -7
  154. package/dist/cesium/Workers/chunk-45U7TTT3.js +0 -26
  155. package/dist/cesium/Workers/chunk-7VJK3KHI.js +0 -26
  156. package/dist/cesium/Workers/chunk-CUOR5F7T.js +0 -28
  157. package/dist/cesium/Workers/chunk-DGCK3LD2.js +0 -30
  158. package/dist/cesium/Workers/chunk-DXEZYE3K.js +0 -62
  159. package/dist/cesium/Workers/chunk-VAKC5J5C.js +0 -26
  160. package/dist/cesium/Workers/chunk-VKV642QV.js +0 -26
  161. package/dist/cesium/Workers/chunk-VMSXG4OA.js +0 -26
  162. package/src/Map/types/viewerProperty.ts +0 -215
  163. package/src/Visualizer/useCoreAPI.ts +0 -30
  164. package/src/engines/Cesium/hooks/useCamera.ts +0 -135
  165. package/src/engines/Cesium/hooks/useExplicitRender.ts +0 -65
  166. package/src/engines/Cesium/hooks/useLayerDragDrop.ts +0 -77
  167. package/src/engines/Cesium/hooks/useViewerProperty.ts +0 -90
  168. /package/src/engines/Cesium/{hooks/useOverrideGlobeShader/JapanSeaLevelEllipsoid.ts → JapanSeaLevelEllipsoid.ts} +0 -0
  169. /package/src/engines/Cesium/{hooks/useOverrideGlobeShader/vertexTerrainElevationMaterial.glsl → vertexTerrainElevationMaterial.glsl} +0 -0
@@ -1,215 +0,0 @@
1
- /*
2
- * ViewerProperty Interface
3
- * ------------------------
4
- * The ViewerProperty interface defines a collection of sub-properties that represent different aspects of the viewer component.
5
- * Each sub-property encapsulates specific settings and configurations related to the viewer's behavior and appearance.
6
-
7
- * GlobeProperty: Settings related to the globe visualization, such as base color, lighting, and atmosphere.
8
- * TerrainProperty: Configuration options for terrain visualization, including terrain type, height map, and normal mapping.
9
- * SceneProperty: Scene-specific settings, such as background color, scene mode, vertical exaggeration, and lighting.
10
- * TilesProperty: Properties for managing tile layers, including URLs, opacity, zoom levels, and heatmap settings.
11
- * TileLabelProperty: Properties for managing tile labels, such as label type and style.
12
- * SkyProperty: Settings for sky visualization, including skybox, sun, moon, fog, and sky atmosphere.
13
- * CameraProperty: Camera-related settings, such as camera position, limiter, and ground entry.
14
- * RenderProperty: Rendering settings, such as antialiasing and ambient occlusion.
15
- * IndicatorProperty: Properties for customizing the viewer's indicator, such as type and image.
16
- * AssetsProperty: Asset-related settings, such as access tokens and URLs for external assets.
17
- * DebugProperty: Debugging options, such as wireframe display and FPS counter.
18
-
19
- * Guidelines for Adding New Properties
20
- * ------------------------------------
21
- * When adding new properties to the ViewerProperty interface, follow these steps to ensure consistency and maintainability:
22
- * 1. Determine the Appropriate Category: Identify the aspect of the viewer your new property will affect and choose the most relevant existing sub-property type (e.g., GlobeProperty, TerrainProperty, SceneProperty, etc.). If your property does not fit into an existing category, consider creating a new sub-property type.
23
- * 2. Define the New Property: Add your new property to the chosen sub-property type. Ensure that the property name is descriptive and the type is correctly specified. If your property requires complex structures, define new types as needed.
24
- * 3. Maintain Optional Properties: To keep the interface flexible, add new properties as optional (?) unless they are strictly required.
25
- * 4. Follow Naming Rules:
26
- * - Use CamelCase for property names.
27
- * - Keep property names descriptive but concise.
28
- * - Maintain consistency with existing naming patterns.
29
- * - Avoid abbreviations unless widely understood and standard.
30
- * 5. Document the Property: Add comments or documentation to describe the purpose and usage of the new property. This will help other developers understand its function and how to use it.
31
- * 6. Update Usage Examples: If applicable, update any example configurations or documentation to include the new property, demonstrating how it should be used.
32
- */
33
-
34
- import type { LUT, Camera } from "../../mantle";
35
-
36
- export type SceneMode = "3d" | "2d" | "columbus";
37
-
38
- export type ViewerProperty = {
39
- globe?: GlobeProperty;
40
- terrain?: TerrainProperty;
41
- scene?: SceneProperty;
42
- tiles?: TileProperty[];
43
- tileLabels?: TileLabelProperty[];
44
- sky?: SkyProperty;
45
- camera?: CameraProperty;
46
- render?: RenderPeropty;
47
- assets?: AssetsProperty; // anything related to specific assets and its access tokens
48
- debug?: DebugProperty;
49
- indicator?: IndicatorProperty; // consider remove this if not needed in the future
50
- };
51
-
52
- export type GlobeProperty = {
53
- baseColor?: string;
54
- enableLighting?: boolean;
55
- atmosphere?: GlobeAtmosphereProperty;
56
- depthTestAgainstTerrain?: boolean;
57
- };
58
-
59
- export type GlobeAtmosphereProperty = {
60
- enabled?: boolean;
61
- lightIntensity?: number;
62
- brightnessShift?: number;
63
- hueShift?: number;
64
- saturationShift?: number;
65
- };
66
-
67
- export type TerrainProperty = {
68
- enabled?: boolean;
69
- type?: "cesium" | "arcgis" | "cesiumion";
70
- url?: string;
71
- normal?: boolean;
72
- elevationHeatMap?: ElevationHeatMapProperty;
73
- };
74
-
75
- export type ElevationHeatMapProperty = {
76
- type?: "custom";
77
- colorLUT?: LUT;
78
- minHeight?: number;
79
- maxHeight?: number;
80
- logarithmic?: boolean;
81
- };
82
-
83
- export type SceneProperty = {
84
- backgroundColor?: string;
85
- mode?: SceneMode;
86
- verticalExaggeration?: number;
87
- verticalExaggerationRelativeHeight?: number;
88
- vr?: boolean;
89
- light?: LightProperty;
90
- shadow?: ShadowProperty;
91
- imageBasedLighting?: ImageBasedLighting;
92
- };
93
-
94
- export type LightProperty = {
95
- type?: "sunLight" | "directionalLight";
96
- direction?: [x: number, y: number, z: number];
97
- color?: string;
98
- intensity?: number;
99
- };
100
-
101
- export type ShadowProperty = {
102
- enabled?: boolean;
103
- darkness?: number;
104
- shadowMap?: ShadowMapProperty;
105
- };
106
-
107
- export type ShadowMapProperty = {
108
- size?: 1024 | 2048 | 4096;
109
- softShadows?: boolean;
110
- darkness?: number;
111
- maximumDistance?: number;
112
- };
113
-
114
- export type ImageBasedLighting = {
115
- enabled?: boolean;
116
- intensity?: number;
117
- specularEnvironmentMaps?: string;
118
- sphericalHarmonicCoefficients?: [number, number, number][];
119
- };
120
-
121
- export type TileProperty = {
122
- id: string;
123
- type?: string;
124
- url?: string;
125
- opacity?: number;
126
- zoomLevel?: number[];
127
- zoomLevelForURL?: number[];
128
- heatmap?: boolean;
129
- };
130
-
131
- export type TileLabelProperty = {
132
- id: string;
133
- labelType: "japan_gsi_optimal_bvmap";
134
- style: Record<string, any>;
135
- };
136
-
137
- export type SkyProperty = {
138
- skyBox?: SkyBoxProperty;
139
- sun?: SunProperty;
140
- moon?: MoonProperty;
141
- fog?: FogProperty;
142
- skyAtmosphere?: SkyAtmosphereProperty;
143
- };
144
-
145
- export type SkyBoxProperty = {
146
- show?: boolean;
147
- };
148
-
149
- export type SunProperty = {
150
- show?: boolean;
151
- };
152
-
153
- export type MoonProperty = {
154
- show?: boolean;
155
- };
156
-
157
- export type FogProperty = {
158
- enabled?: boolean;
159
- density?: number;
160
- };
161
-
162
- export type SkyAtmosphereProperty = {
163
- show?: boolean;
164
- lightIntensity?: number;
165
- saturationShift?: number;
166
- brightnessShift?: number;
167
- };
168
-
169
- export type CameraProperty = {
170
- allowEnterGround?: boolean;
171
- limiter?: CameraLimiterProperty;
172
- };
173
-
174
- export type CameraLimiterProperty = {
175
- enabled?: boolean;
176
- targetArea?: Camera;
177
- targetWidth?: number;
178
- targetLength?: number;
179
- showHelper?: boolean;
180
- };
181
-
182
- export type RenderPeropty = {
183
- antialias?: "low" | "medium" | "high" | "extreme";
184
- ambientOcclusion?: AmbientOcclusionProperty;
185
- };
186
-
187
- export type AmbientOcclusionProperty = {
188
- enabled?: boolean;
189
- quality?: "low" | "medium" | "high" | "extreme";
190
- intensity?: number;
191
- ambientOcclusionOnly?: boolean;
192
- };
193
-
194
- export type IndicatorProperty = {
195
- type?: "default" | "crosshair" | "custom";
196
- image?: string;
197
- imageScale?: number;
198
- };
199
-
200
- export type AssetsProperty = {
201
- cesium?: AssetsCesiumProperty;
202
- };
203
-
204
- export type AssetsCesiumProperty = {
205
- terrain?: {
206
- ionAccessToken?: string;
207
- ionAsset?: string;
208
- ionUrl?: string;
209
- };
210
- };
211
-
212
- export type DebugProperty = {
213
- showGlobeWireframe?: boolean;
214
- showFramesPerSecond?: boolean;
215
- };
@@ -1,30 +0,0 @@
1
- import { useEffect, useMemo, useRef } from "react";
2
-
3
- import { version } from "../../package.json";
4
- import { ViewerProperty } from "../engines";
5
-
6
- interface CoreAPI {
7
- readonly version: string;
8
- readonly viewerProperty?: ViewerProperty;
9
- }
10
-
11
- export default ({ viewerProperty }: { viewerProperty?: ViewerProperty }) => {
12
- const viewerPropertyRef = useRef(viewerProperty);
13
- viewerPropertyRef.current = viewerProperty;
14
-
15
- const coreAPI: CoreAPI = useMemo(
16
- () => ({
17
- get version() {
18
- return version;
19
- },
20
- get viewerProperty() {
21
- return viewerPropertyRef.current;
22
- },
23
- }),
24
- [],
25
- );
26
-
27
- useEffect(() => {
28
- (window as any).reearth_core = coreAPI;
29
- }, [coreAPI]);
30
- };
@@ -1,135 +0,0 @@
1
- import { Math as CesiumMath, Scene, Viewer } from "cesium";
2
- import { isEqual } from "lodash-es";
3
- import { useCallback, useEffect, useRef } from "react";
4
- import { CesiumComponentRef } from "resium";
5
- import { RefObject } from "use-callback-ref/dist/es5/types";
6
- import { useCustomCompareCallback } from "use-custom-compare";
7
-
8
- import { EngineRef, ViewerProperty } from "../..";
9
- import { Camera } from "../../../mantle";
10
- import { FEATURE_FLAGS } from "../../../Visualizer";
11
- import { getCamera } from "../common";
12
-
13
- import { useCameraLimiter } from "./useCameraLimiter";
14
-
15
- export default ({
16
- cesium,
17
- property,
18
- camera,
19
- featureFlags,
20
- engineAPI,
21
- cameraForceHorizontalRoll = false,
22
- onCameraChange,
23
- }: {
24
- cesium: RefObject<CesiumComponentRef<Viewer>>;
25
- property?: ViewerProperty;
26
- engineAPI: EngineRef;
27
- featureFlags: number;
28
- camera?: Camera;
29
- cameraForceHorizontalRoll?: boolean;
30
- onCameraChange?: (camera: Camera) => void;
31
- }) => {
32
- // cache the camera data emitted from viewer camera change
33
- const emittedCamera = useRef<Camera[]>([]);
34
- const updateCamera = useCallback(() => {
35
- const viewer = cesium?.current?.cesiumElement;
36
- if (!viewer || viewer.isDestroyed() || !onCameraChange) return;
37
-
38
- const c = getCamera(viewer);
39
- if (c && !isEqual(c, camera)) {
40
- emittedCamera.current.push(c);
41
- // The state change is not sync now. This number is how many state updates can actually happen to be merged within one re-render.
42
- if (emittedCamera.current.length > 10) {
43
- emittedCamera.current.shift();
44
- }
45
- onCameraChange?.(c);
46
- }
47
- }, [cesium, camera, onCameraChange]);
48
-
49
- const handleCameraChange = useCallback(() => {
50
- updateCamera();
51
- }, [updateCamera]);
52
-
53
- const handleCameraMoveEnd = useCallback(() => {
54
- updateCamera();
55
- }, [updateCamera]);
56
-
57
- useEffect(() => {
58
- if (camera && !emittedCamera.current.includes(camera)) {
59
- engineAPI.flyTo(camera, { duration: 0 });
60
- emittedCamera.current = [];
61
- }
62
- }, [camera, engineAPI]);
63
-
64
- useEffect(() => {
65
- if (!cesium.current?.cesiumElement) return;
66
- const allowCameraMove = !!(featureFlags & FEATURE_FLAGS.CAMERA_MOVE);
67
- const allowCameraZoom = !!(featureFlags & FEATURE_FLAGS.CAMERA_ZOOM);
68
- const allowCameraTilt = !!(featureFlags & FEATURE_FLAGS.CAMERA_TILT);
69
- const allowCameraLook = !!(featureFlags & FEATURE_FLAGS.CAMERA_LOOK);
70
- cesium.current.cesiumElement.scene.screenSpaceCameraController.enableTranslate =
71
- allowCameraMove;
72
- cesium.current.cesiumElement.scene.screenSpaceCameraController.enableRotate = allowCameraMove;
73
- cesium.current.cesiumElement.scene.screenSpaceCameraController.enableLook = allowCameraLook;
74
- cesium.current.cesiumElement.scene.screenSpaceCameraController.enableTilt = allowCameraTilt;
75
- cesium.current.cesiumElement.scene.screenSpaceCameraController.enableZoom = allowCameraZoom;
76
- }, [cesium, featureFlags]);
77
-
78
- // move to initial position at startup
79
- const initialCameraFlight = useRef(false);
80
-
81
- const mountCamera = useCustomCompareCallback(
82
- () => {
83
- if (initialCameraFlight.current) return;
84
- initialCameraFlight.current = true;
85
- if (property?.camera?.limiter?.enabled && property?.camera?.limiter?.targetArea) {
86
- engineAPI.flyTo(property?.camera?.limiter?.targetArea, { duration: 0 });
87
- } else if (camera) {
88
- engineAPI.flyTo(camera, { duration: 0 });
89
- }
90
- },
91
- [engineAPI, property?.camera?.limiter?.enabled],
92
- (prevDeps, nextDeps) => prevDeps[0] === nextDeps[0] && prevDeps[1] === nextDeps[1],
93
- );
94
-
95
- const unmountCamera = useCallback(() => {
96
- initialCameraFlight.current = false;
97
- }, []);
98
-
99
- // camera limiter
100
- const { cameraViewBoundaries, cameraViewOuterBoundaries, cameraViewBoundariesMaterial } =
101
- useCameraLimiter(cesium, camera, property?.camera?.limiter);
102
-
103
- // horizontal roll
104
- const fixCameraHorizontal = useCallback(
105
- (scene: Scene) => {
106
- if (!scene.camera || !cameraForceHorizontalRoll) return;
107
- if (Math.abs(CesiumMath.negativePiToPi(scene.camera.roll)) > Math.PI / 86400) {
108
- scene.camera.setView({
109
- orientation: {
110
- heading: scene.camera.heading,
111
- pitch: scene.camera.pitch,
112
- roll: 0,
113
- },
114
- });
115
- }
116
- },
117
- [cameraForceHorizontalRoll],
118
- );
119
-
120
- useEffect(() => {
121
- const viewer = cesium.current?.cesiumElement;
122
- if (!viewer) return;
123
- return viewer.scene.preRender.addEventListener(fixCameraHorizontal);
124
- }, [cesium, fixCameraHorizontal]);
125
-
126
- return {
127
- cameraViewBoundaries,
128
- cameraViewOuterBoundaries,
129
- cameraViewBoundariesMaterial,
130
- mountCamera,
131
- unmountCamera,
132
- handleCameraChange,
133
- handleCameraMoveEnd,
134
- };
135
- };
@@ -1,65 +0,0 @@
1
- import { Viewer } from "cesium";
2
- import { MutableRefObject, RefObject, useCallback, useEffect, useRef } from "react";
3
- import { CesiumComponentRef } from "resium";
4
-
5
- import { RequestingRenderMode, ViewerProperty } from "../../../Map";
6
- import { FORCE_REQUEST_RENDER, NO_REQUEST_RENDER, REQUEST_RENDER_ONCE } from "../../../Map/hooks";
7
-
8
- export default ({
9
- cesium,
10
- requestingRenderMode,
11
- isLayerDragging,
12
- shouldRender,
13
- property,
14
- }: {
15
- cesium: RefObject<CesiumComponentRef<Viewer>>;
16
- requestingRenderMode?: MutableRefObject<RequestingRenderMode>;
17
- isLayerDragging?: boolean;
18
- shouldRender?: boolean;
19
- property?: ViewerProperty;
20
- }) => {
21
- // explicit rendering
22
- const explicitRender = useCallback(() => {
23
- const viewer = cesium.current?.cesiumElement;
24
- if (!requestingRenderMode?.current || !viewer || viewer.isDestroyed()) return;
25
- viewer.scene.requestRender();
26
- if (requestingRenderMode.current === REQUEST_RENDER_ONCE) {
27
- requestingRenderMode.current = NO_REQUEST_RENDER;
28
- }
29
- }, [cesium, requestingRenderMode]);
30
-
31
- const explicitRenderRef = useRef<() => void>();
32
-
33
- useEffect(() => {
34
- explicitRenderRef.current = explicitRender;
35
- }, [explicitRender]);
36
-
37
- useEffect(() => {
38
- const viewer = cesium.current?.cesiumElement;
39
- if (!viewer || viewer.isDestroyed()) return;
40
- return viewer.scene.postUpdate.addEventListener(() => {
41
- explicitRenderRef.current?.();
42
- });
43
- }, [cesium]);
44
-
45
- // render one frame when scene property changes
46
- useEffect(() => {
47
- if (requestingRenderMode) {
48
- requestingRenderMode.current = REQUEST_RENDER_ONCE;
49
- }
50
- }, [property, requestingRenderMode]);
51
-
52
- // force render when timeline is animating or is shouldRender
53
- useEffect(() => {
54
- const viewer = cesium.current?.cesiumElement;
55
- if (!viewer || viewer.isDestroyed()) return;
56
- if (requestingRenderMode) {
57
- requestingRenderMode.current =
58
- isLayerDragging || shouldRender
59
- ? FORCE_REQUEST_RENDER
60
- : requestingRenderMode.current === REQUEST_RENDER_ONCE
61
- ? REQUEST_RENDER_ONCE
62
- : NO_REQUEST_RENDER;
63
- }
64
- }, [cesium, isLayerDragging, shouldRender, requestingRenderMode]);
65
- };
@@ -1,77 +0,0 @@
1
- import { Cartesian3, Entity, Viewer } from "cesium";
2
- import CesiumDnD, { Context } from "cesium-dnd";
3
- import { RefObject, useCallback, useEffect, useRef } from "react";
4
- import { CesiumComponentRef } from "resium";
5
-
6
- import { LatLng } from "../../../utils";
7
- import { isDraggable, isSelectable } from "../common";
8
- import { getTag } from "../Feature";
9
- import { convertCartesian3ToPosition } from "../utils/utils";
10
-
11
- export default ({
12
- cesium,
13
- isLayerDraggable,
14
- onLayerDrag,
15
- onLayerDrop,
16
- }: {
17
- cesium: RefObject<CesiumComponentRef<Viewer>>;
18
- isLayerDraggable?: boolean;
19
- onLayerDrag?: (layerId: string, featureId: string | undefined, position: LatLng) => void;
20
- onLayerDrop?: (
21
- layerId: string,
22
- featureId: string | undefined,
23
- position: LatLng | undefined,
24
- ) => void;
25
- }) => {
26
- // enable Drag and Drop Layers
27
- const handleLayerDrag = useCallback(
28
- (e: Entity, position: Cartesian3 | undefined, _context: Context): boolean | void => {
29
- const viewer = cesium.current?.cesiumElement;
30
- if (!viewer || viewer.isDestroyed() || !isSelectable(e) || !isDraggable(e)) return false;
31
-
32
- const pos = convertCartesian3ToPosition(cesium.current?.cesiumElement, position);
33
- if (!pos) return false;
34
-
35
- const tag = getTag(e);
36
- if (!tag) return false;
37
-
38
- onLayerDrag?.(tag.layerId || "", tag.featureId, pos);
39
- },
40
- [cesium, onLayerDrag],
41
- );
42
-
43
- const handleLayerDrop = useCallback(
44
- (e: Entity, position: Cartesian3 | undefined): boolean | void => {
45
- const viewer = cesium.current?.cesiumElement;
46
- if (!viewer || viewer.isDestroyed()) return false;
47
-
48
- const tag = getTag(e);
49
- const pos = convertCartesian3ToPosition(cesium.current?.cesiumElement, position);
50
- onLayerDrop?.(tag?.layerId || "", tag?.featureId || "", pos);
51
-
52
- return false; // let apollo-client handle optimistic updates
53
- },
54
- [cesium, onLayerDrop],
55
- );
56
-
57
- const cesiumDnD = useRef<CesiumDnD>();
58
- useEffect(() => {
59
- const viewer = cesium.current?.cesiumElement;
60
- if (!viewer || viewer.isDestroyed()) return;
61
- cesiumDnD.current = new CesiumDnD(viewer, {
62
- onDrag: handleLayerDrag,
63
- onDrop: handleLayerDrop,
64
- dragDelay: 1000,
65
- initialDisabled: !isLayerDraggable,
66
- });
67
- return () => {
68
- if (!viewer || viewer.isDestroyed()) return;
69
- cesiumDnD.current?.disable();
70
- };
71
- }, [cesium, isLayerDraggable, handleLayerDrag, handleLayerDrop]);
72
-
73
- return {
74
- handleLayerDrag,
75
- handleLayerDrop,
76
- };
77
- };
@@ -1,90 +0,0 @@
1
- import { Cartesian3, Color, DirectionalLight, SceneMode, SunLight, Viewer } from "cesium";
2
- import { RefObject, useMemo } from "react";
3
- import { CesiumComponentRef } from "resium";
4
-
5
- import { ViewerProperty } from "../..";
6
-
7
- // TODO: move all viewer property -> resium component prop logic here (from the gerneal long Cesium/hooks file)
8
- export default ({
9
- cesium,
10
- property,
11
- }: {
12
- cesium: RefObject<CesiumComponentRef<Viewer>>;
13
- property?: ViewerProperty;
14
- }) => {
15
- const sceneLight = useMemo(() => {
16
- let light;
17
- if (property?.scene?.light?.type === "sunLight") {
18
- light = new SunLight({
19
- color: property.scene?.light?.color
20
- ? Color.fromCssColorString(property.scene.light.color)
21
- : undefined,
22
- intensity: property.scene?.light?.intensity,
23
- });
24
- } else if (property?.scene?.light?.type === "directionalLight") {
25
- light = new DirectionalLight({
26
- direction: new Cartesian3(
27
- property?.scene?.light?.direction?.[0] ?? 1,
28
- property?.scene?.light?.direction?.[1] ?? 0,
29
- property?.scene?.light?.direction?.[2] ?? 0,
30
- ),
31
- color: property.scene?.light?.color
32
- ? Color.fromCssColorString(property.scene.light.color)
33
- : undefined,
34
- intensity: property.scene?.light?.intensity,
35
- });
36
- } else {
37
- light = cesium.current?.cesiumElement?.scene.light;
38
- if (light) {
39
- light.color = property?.scene?.light?.color
40
- ? Color.fromCssColorString(property.scene.light.color)
41
- : light.color;
42
- light.intensity = property?.scene?.light?.intensity
43
- ? property.scene.light.intensity
44
- : light.intensity;
45
- }
46
- }
47
- return light;
48
- }, [
49
- cesium,
50
- property?.scene?.light?.type,
51
- property?.scene?.light?.color,
52
- property?.scene?.light?.direction,
53
- property?.scene?.light?.intensity,
54
- ]);
55
-
56
- const sceneBackgroundColor = useMemo(
57
- () =>
58
- property?.scene?.backgroundColor
59
- ? Color.fromCssColorString(property.scene.backgroundColor)
60
- : undefined,
61
- [property?.scene?.backgroundColor],
62
- );
63
-
64
- const sceneMsaaSamples = useMemo(() => {
65
- // TODO: FXAA doesn't support alpha blending in Cesium, so we will enable FXAA when this is fixed.
66
- // viewer.scene.postProcessStages.fxaa.enabled = property?.render?.antialias === "high";
67
- return property?.render?.antialias === "extreme"
68
- ? 8
69
- : property?.render?.antialias === "high"
70
- ? 6
71
- : property?.render?.antialias === "medium"
72
- ? 4
73
- : 1;
74
- }, [property?.render?.antialias]);
75
-
76
- const sceneMode = useMemo(() => {
77
- return property?.scene?.mode === "2d"
78
- ? SceneMode.SCENE2D
79
- : property?.scene?.mode === "columbus"
80
- ? SceneMode.COLUMBUS_VIEW
81
- : SceneMode.SCENE3D;
82
- }, [property?.scene?.mode]);
83
-
84
- return {
85
- sceneLight,
86
- sceneBackgroundColor,
87
- sceneMsaaSamples,
88
- sceneMode,
89
- };
90
- };