Skip to content

Commit 43b70fb

Browse files
ZTongciclaude
andcommitted
feat(terrain): add configurable waterMask prop to TerrainProperty
Replaces the hardcoded requestWaterMask: true (added in #158) with an optional waterMask?: boolean on TerrainProperty. Defaults to true so existing behavior is preserved. Consumers can now pass waterMask: false to disable the water surface effect. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 06a2bed commit 43b70fb

3 files changed

Lines changed: 8 additions & 5 deletions

File tree

src/Map/types/viewerProperty.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ export type TerrainProperty = {
7777
type?: "cesium" | "cesiumion" | "reearth_terrain";
7878
url?: string;
7979
normal?: boolean;
80+
waterMask?: boolean;
8081
elevationHeatMap?: ElevationHeatMapProperty;
8182
};
8283

src/engines/Cesium/core/Globe/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export default function Globe({
2222
terrain: property?.terrain?.enabled,
2323
terrainType: property?.terrain?.type,
2424
normal: property?.terrain?.normal,
25+
waterMask: property?.terrain?.waterMask,
2526
ionAccessToken: property?.assets?.cesium?.terrain?.ionAccessToken || cesiumIonAccessToken,
2627
ionAsset: property?.assets?.cesium?.terrain?.ionAsset,
2728
ionUrl: property?.assets?.cesium?.terrain?.ionUrl,

src/engines/Cesium/core/Globe/useTerrainProviderPromise.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ type TerrainType = NonNullable<TerrainProperty["type"]>;
1313

1414
const REEARTH_TERRAIN_URL = "https://terrain.reearth.land/cesium-mesh/ellipsoid";
1515

16-
type ProviderOpts = Pick<TerrainProperty, "normal"> &
16+
type ProviderOpts = Pick<TerrainProperty, "normal" | "waterMask"> &
1717
AssetsCesiumProperty["terrain"] & {
1818
terrain?: boolean;
1919
terrainType?: TerrainType | null | undefined;
@@ -46,21 +46,22 @@ function makeKey(type: TerrainType, opts: ProviderOpts) {
4646
const url = opts.ionUrl ?? "";
4747
const ionToken = opts.ionAccessToken ?? "";
4848
const normal = String(!!opts.normal);
49-
return `${type}|asset:${asset}|url:${url}|ion:${ionToken}|normal:${normal}`;
49+
const wm = String(opts.waterMask ?? true);
50+
return `${type}|asset:${asset}|url:${url}|ion:${ionToken}|normal:${normal}|wm:${wm}`;
5051
}
5152

5253
function createProvider(type: TerrainType, opts: ProviderOpts): Promise<TerrainProvider> {
5354
switch (type) {
5455
case "reearth_terrain":
5556
return CesiumTerrainProvider.fromUrl(REEARTH_TERRAIN_URL, {
5657
requestVertexNormals: !!opts.normal,
57-
requestWaterMask: true,
58+
requestWaterMask: opts.waterMask ?? true,
5859
}) as Promise<TerrainProvider>;
5960

6061
case "cesium": {
6162
return CesiumTerrainProvider.fromUrl(
6263
IonResource.fromAssetId(1, { accessToken: opts.ionAccessToken }),
63-
{ requestVertexNormals: !!opts.normal, requestWaterMask: true },
64+
{ requestVertexNormals: !!opts.normal, requestWaterMask: opts.waterMask ?? true },
6465
) as Promise<TerrainProvider>;
6566
}
6667

@@ -71,7 +72,7 @@ function createProvider(type: TerrainType, opts: ProviderOpts): Promise<TerrainP
7172
IonResource.fromAssetId(parseInt(String(opts.ionAsset), 10), {
7273
accessToken: opts.ionAccessToken,
7374
}),
74-
{ requestVertexNormals: !!opts.normal, requestWaterMask: true },
75+
{ requestVertexNormals: !!opts.normal, requestWaterMask: opts.waterMask ?? true },
7576
) as Promise<TerrainProvider>;
7677
}
7778

0 commit comments

Comments
 (0)