










entity的闪烁主要是通过回调函数CallbackProperty,控制样式改变或是否显示
1. 点的闪烁
function f2(){
var x=1;
var flog=true;
viewer.entities.add({
name:"圆点point闪烁",
position:Cesium.Cartesian3.fromDegrees(116.20+0.03,39.53+0.03,0),
point : {
show : true, // default
color :new Cesium.CallbackProperty(function () {
if(flog){
x=x-0.05;
if(x<=0){
flog=false;
}
}else{
x=x+0.05;
if(x>=1){
flog=true;
}
}
return Cesium.Color.RED.withAlpha(x);
},false),
pixelSize : 10, // default: 1
outlineWidth :0
}
});
}
2. 面的闪烁
function f1() {
var x = 1;
var flog = true;
viewer.entities.add({
name: "圆形区域闪烁",
position: Cesium.Cartesian3.fromDegrees(116.20, 39.53, 0),
ellipse: {
semiMinorAxis: 2000.0,
semiMajorAxis: 2000.0,
height: 0,
material: new Cesium.ColorMaterialProperty(new Cesium.CallbackProperty(function () {
if (flog) {
x = x - 0.05;
if (x <= 0) {
flog = false;
}
} else {
x = x + 0.05;
if (x >= 1) {
flog = true;
}
}
console.log(x)
return Cesium.Color.RED.withAlpha(x);
}, false))
}
});
}
3. billboard图片的闪烁
function f1() {
var x = 1;
var flog = true;
viewer.entities.add({
name: 'singleWarning',
position: Cesium.Cartesian3.fromDegrees(116.20, 39.53),
billboard: {
image: '预警定位.png',
name: 'singleWarning',
show: new Cesium.CallbackProperty(function () {
if (flog) {
x = x - 0.05;
if (x <= 0) {
flog = false;
}
} else {
x = x + 0.05;
if (x >= 1) {
flog = true;
}
}
return x >= 0.5;
},false),
width: 100,
height: 100,
distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0, 6.8e10)
},
})
}
动态圆semiMinorAxis和semiMajorAxis指定一个CallbackProperty对象,并返回半径大小。由于要做的是要给圆,长短轴相同,可以抽出一个共同的方法getRadius()。 在CallbackProperty的回调函数中,不断的调整半径的大小,这个就和我们平时常用的requestAnimationFrame一样了。
颜色渐变
使用ColorMaterialProperty,根据半径的大小,调整透明度。半径越大,透明度越高。
var r = 0,
up = true
const pos = Cesium.Cartesian3.fromDegrees([120.191, 30.255, 100])
const maxRadius = 50
const minRadius = 10
const step = 1
function getRadius() {
return new Cesium.CallbackProperty(function (time, result) {
if (up) {
r += step
} else {
r -= step
}
if (r >= maxRadius) {
up = false
}
if (r <= minRadius) {
up = true
}
return r
}, false)
}
viewer.entities.add({
position: pos,
ellipse: {
semiMinorAxis: getRadius(),
semiMajorAxis: getRadius(),
material: new Cesium.ColorMaterialProperty(
new Cesium.CallbackProperty(function (time, result) {
return new Cesium.Color(1, 0, 0, 1 - r / maxRadius)
})
),
height: this.target[2],
outline: false
}
})
var viewer = new Cesium.Viewer('cesiumContainer',
{
imageryProvider: new Cesium.SingleTileImageryProvider({
url: '../img/worldimage.jpg'
}),
homeButton: false,
baseLayerPicker: false,
navigationHelpButton: false,
animation: false,
timeline: false,
fullscreenButton: false,
vrButton: false
});
function computeCircle(radius) {
var positions = [];
for (var i = 0; i < 360; i++) {
var radians = Cesium.Math.toRadians(i);
positions.push(new Cesium.Cartesian2(radius * Math.cos(radians), radius * Math.sin(radians)));
}
return positions;
}
var startTime = Cesium.JulianDate.now();
var redTube = viewer.entities.add({
name : 'Red tube with rounded corners',
polylineVolume : {
positions : Cesium.Cartesian3.fromDegreesArray([-85.0, 32.0,
-85.0, 36.0,
-89.0, 36.0]),
shape : computeCircle(6000.0),
material : new Cesium.ColorMaterialProperty(new Cesium.CallbackProperty(function() {
return Cesium.Color.fromRandom({
minimumRed : 0.75,
minimumGreen : 0.75,
minimumBlue : 0.75,
alpha : 1.0
});
}, false))
}
});
viewer.zoomTo(viewer.entities);
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。