From 8a7fb9a519cae32d38ba66058d243aa7e6b6aeb2 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Tue, 27 Jan 2026 08:57:49 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
applications/drone-command/src/components/map-container/device-map-materials.js | 40 +++++++++++++++++++++++++++++++---------
1 files changed, 31 insertions(+), 9 deletions(-)
diff --git a/applications/drone-command/src/components/map-container/device-map-materials.js b/applications/drone-command/src/components/map-container/device-map-materials.js
index bf2edc8..6177bb7 100644
--- a/applications/drone-command/src/components/map-container/device-map-materials.js
+++ b/applications/drone-command/src/components/map-container/device-map-materials.js
@@ -1,6 +1,15 @@
import * as Cesium from 'cesium'
-export const RING_STYLES = [{ inner: 0, outer: 2000, gradient: ['#FF361C', '#360B00'] }]
+export const RING_STYLES = [
+ {
+ inner: 0,
+ outer: 2000,
+ gradient: ['#FF6A57', '#A11806'],
+ alpha: 0.42,
+ outlineAlpha: 0.85,
+ innerRatio: 0.12,
+ },
+]
export const MATERIAL_TYPE = 'RadialGradientMaterial'
export const DRONE_TRACK_MATERIAL_TYPE = 'DroneTrackFlowMaterial'
@@ -26,15 +35,25 @@
uniforms: {
color1: new Cesium.Color(1.0, 1.0, 1.0, 1.0),
color2: new Cesium.Color(0.0, 0.0, 0.0, 1.0),
+ gamma: 1.7,
+ innerCutoff: 0.0,
},
source: `
+ uniform vec4 color1;
+ uniform vec4 color2;
+ uniform float gamma;
+ uniform float innerCutoff;
+
czm_material czm_getMaterial(czm_materialInput materialInput) {
czm_material material = czm_getDefaultMaterial(materialInput);
vec2 st = materialInput.st - vec2(0.5);
float t = clamp(length(st) * 2.0, 0.0, 1.0);
vec4 color = mix(color1, color2, t);
+ float ramp = smoothstep(innerCutoff, 1.0, t);
+ float shaped = pow(t, gamma);
+ float alpha = color.a * ramp * shaped;
material.diffuse = color.rgb;
- material.alpha = color.a;
+ material.alpha = alpha;
return material;
}
`,
@@ -82,9 +101,9 @@
})
}
-export const createRadialGradientMaterial = (color1, color2) => {
+export const createRadialGradientMaterial = (color1, color2, options = {}) => {
registerRadialGradientMaterial()
- return Cesium.Material.fromType(MATERIAL_TYPE, { color1, color2 })
+ return Cesium.Material.fromType(MATERIAL_TYPE, { color1, color2, ...(options || {}) })
}
export const createDroneTrackMaterial = options => {
@@ -115,18 +134,19 @@
return positions
}
-export const addDeviceRings = (center, ringFillInstancesByStyle, ringOutlineInstancesByStyle) => {
+export const addDeviceRings = (center, ringFillInstancesByStyle, ringOutlineInstancesByStyle, rangeMeters) => {
if (!ringFillInstancesByStyle) return
const centerPosition = Cesium.Cartesian3.fromDegrees(center.longitude, center.latitude, 0)
const vertexFormat = getTexturedVertexFormat()
RING_STYLES.forEach((ring, index) => {
if (!ringFillInstancesByStyle[index]) return
+ const outer = Number.isFinite(rangeMeters) && rangeMeters > 0 ? rangeMeters : ring.outer
ringFillInstancesByStyle[index].push(
new Cesium.GeometryInstance({
geometry: new Cesium.EllipseGeometry({
center: centerPosition,
- semiMajorAxis: ring.outer,
- semiMinorAxis: ring.outer,
+ semiMajorAxis: outer,
+ semiMinorAxis: outer,
vertexFormat,
}),
})
@@ -135,7 +155,9 @@
if (!ringOutlineInstancesByStyle) return
RING_STYLES.forEach((ring, index) => {
if (!ringOutlineInstancesByStyle[index]) return
- const positions = buildCirclePositions(center, ring.outer)
+ const outer = Number.isFinite(rangeMeters) && rangeMeters > 0 ? rangeMeters : ring.outer
+ const positions = buildCirclePositions(center, outer)
+ const outlineAlpha = typeof ring.outlineAlpha === 'number' ? ring.outlineAlpha : 0.8
ringOutlineInstancesByStyle[index].push(
new Cesium.GeometryInstance({
geometry: new Cesium.GroundPolylineGeometry({
@@ -144,7 +166,7 @@
}),
attributes: {
color: Cesium.ColorGeometryInstanceAttribute.fromColor(
- Cesium.Color.fromCssColorString(ring.gradient[0]).withAlpha(0.8)
+ Cesium.Color.fromCssColorString(ring.gradient[0]).withAlpha(outlineAlpha)
),
},
})
--
Gitblit v1.9.3