Merge branch 'develop' of http://xny.yj-3d.com:3000/zh/sdk4.0
This commit is contained in:
@ -96,10 +96,9 @@ function html(that) {
|
||||
<input class="btn-switch" type="checkbox" @model="rotate">
|
||||
</div>
|
||||
<div class="col" style="flex: 0 0 33%;">
|
||||
<span class="label">动画时长</span>
|
||||
<span class="label">流动速率</span>
|
||||
<div class="input-number input-number-unit-1" style="width: 80px;">
|
||||
<input class="input" type="number" title="" min="0" max="999999" step="0.1" @model="speed">
|
||||
<span class="unit">s</span>
|
||||
<input class="input" type="number" title="" min="0" max="999999" step="1" @model="speed">
|
||||
<span class="arrow"></span>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -177,7 +177,8 @@ class PolylineObject extends Base {
|
||||
}
|
||||
|
||||
set speed(v) {
|
||||
this.options.speed = v
|
||||
// this.options.speed = v
|
||||
this.options.speed = v !== 0 ? Math.pow(v, -1) * 100 : 0
|
||||
this.entity.polyline.material = this.getMaterial(this.options.color, this.options.type, this.entity, this.options)
|
||||
}
|
||||
get dashSize() {
|
||||
@ -1321,6 +1322,7 @@ class PolylineObject extends Base {
|
||||
}
|
||||
})
|
||||
that.entity.polyline.oriWidth = that.options.width
|
||||
that.judgeLine(that.entity, that.options)
|
||||
that.sdk._entityZIndex++
|
||||
PolylineObject.createLabel(that)
|
||||
// that.entity.polyline.positionsLngLat = positions
|
||||
@ -1355,7 +1357,102 @@ class PolylineObject extends Base {
|
||||
|
||||
let scene = that.sdk.viewer.scene
|
||||
}
|
||||
judgeLine(entity, newParam) {
|
||||
if (!entity.polyline.oriRepeat) {
|
||||
let param = {
|
||||
color: newParam.color,
|
||||
image: this.getSourceRootPath() + `/img/arrow/1.png`,
|
||||
space: newParam.space,
|
||||
speed: newParam.speed
|
||||
}
|
||||
|
||||
param.speed = newParam.rotate ? param.speed : 0 - param.speed
|
||||
|
||||
const canvasEle = document.createElement('canvas');
|
||||
const ctx = canvasEle.getContext('2d')
|
||||
const myImg = new Image()
|
||||
// myImg.src = that.getSourceRootPath() + '/img/arrow/1.png'
|
||||
myImg.src = param.image
|
||||
let that = this
|
||||
myImg.onload = function () {
|
||||
canvasEle.width = myImg.width * (param.space + 1)
|
||||
canvasEle.height = myImg.height
|
||||
|
||||
let oriRepeat = that.getSceenLine(entity, param, canvasEle)
|
||||
oriRepeat && (entity.polyline.oriRepeat = oriRepeat)
|
||||
|
||||
|
||||
var positionProperty = entity.polyline.positions;
|
||||
var positions = positionProperty.getValue(that.sdk.viewer.clock.currentTime);
|
||||
|
||||
if (!Cesium.defined(positions)) {
|
||||
return new Cesium.Cartesian2(1.0, 1.0);
|
||||
// return 1.0;
|
||||
}
|
||||
|
||||
var distance = 0;
|
||||
for (var i = 0; i < positions.length - 1; ++i) {
|
||||
distance += Cesium.Cartesian3.distance(positions[i], positions[i + 1]);
|
||||
}
|
||||
|
||||
var repeatX = distance / entity.polyline.width.getValue();
|
||||
// 根据地图缩放程度调整repeatX
|
||||
var cameraHeight = that.sdk.viewer.camera.positionCartographic.height;
|
||||
var boundingSphere = new Cesium.BoundingSphere(
|
||||
new Cesium.Cartesian3(-1000000, 0, 0), // 中心点坐标
|
||||
500000 // 半径(距离)
|
||||
);
|
||||
|
||||
// 获取绘图缓冲区的宽度和高度(通常是屏幕的分辨率)
|
||||
var drawingBufferWidth = that.sdk.viewer.canvas.clientWidth;
|
||||
var drawingBufferHeight = that.sdk.viewer.canvas.clientHeight;
|
||||
|
||||
// 使用 getPixelSize 方法获取包围球在屏幕上的像素大小
|
||||
var groundResolution = that.sdk.viewer.scene.camera.getPixelSize(boundingSphere, drawingBufferWidth, drawingBufferHeight)
|
||||
repeatX *= groundResolution / cameraHeight / (param.space * (canvasEle.width / canvasEle.height * 5) + 1);
|
||||
// if (entity.polyline.material.oriRepeat) {
|
||||
let speed = repeatX / entity.polyline.oriRepeat
|
||||
entity.polyline.oriSpeed = speed
|
||||
entity.polyline.oriRepeatX = repeatX
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
/**获取当前满屏横线速度 */
|
||||
getSceenLine(entity, options, canvasEle) {
|
||||
let point1 = new Cesium.Cartesian2(0, this.sdk.viewer.canvas.clientHeight)
|
||||
let point2 = new Cesium.Cartesian2(this.sdk.viewer.canvas.clientWidth / 2, this.sdk.viewer.canvas.clientHeight)
|
||||
var cartesian1 = this.sdk.viewer.scene.pickPosition(point1)
|
||||
var cartesian2 = this.sdk.viewer.scene.pickPosition(point2)
|
||||
|
||||
var distance = Cesium.Cartesian3.distance(cartesian1, cartesian2);
|
||||
|
||||
var repeatX = distance / entity.polyline.width.getValue();
|
||||
// 根据地图缩放程度调整repeatX
|
||||
var cameraHeight = this.sdk.viewer.camera.positionCartographic.height;
|
||||
var boundingSphere = new Cesium.BoundingSphere(
|
||||
new Cesium.Cartesian3(-1000000, 0, 0), // 中心点坐标
|
||||
500000 // 半径(距离)
|
||||
);
|
||||
|
||||
// 获取绘图缓冲区的宽度和高度(通常是屏幕的分辨率)
|
||||
var drawingBufferWidth = this.sdk.viewer.canvas.clientWidth;
|
||||
var drawingBufferHeight = this.sdk.viewer.canvas.clientHeight;
|
||||
|
||||
// 使用 getPixelSize 方法获取包围球在屏幕上的像素大小
|
||||
var groundResolution = this.sdk.viewer.scene.camera.getPixelSize(boundingSphere, drawingBufferWidth, drawingBufferHeight)
|
||||
// repeatX *= groundResolution / cameraHeight / ((myImg.width / myImg.height * 5) + 1);
|
||||
if (groundResolution > 700) {
|
||||
repeatX *= groundResolution / cameraHeight / (options.space * (canvasEle.width / canvasEle.height * 5) + 1);
|
||||
} else {
|
||||
repeatX = undefined;
|
||||
}
|
||||
|
||||
return repeatX
|
||||
}
|
||||
/**
|
||||
* 编辑框
|
||||
* @param {boolean} state true打开,false关闭
|
||||
|
Reference in New Issue
Block a user