Files
sdk4.0/src/Draw/drawAttackArrow.js

269 lines
8.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @name: drawAttackArrow
* @author: Administrator
* @date: 2022-06-15 16:38
* @descriptiondrawAttackArrow
* @update: 2022-06-15 16:38
*/
import Draw from './draw'
import MouseTip from '../MouseTip'
import MouseEvent from '../Event'
export default class DrawAttackArrow extends Draw {
constructor(sdk, options = {}) {
super(sdk, options)
}
static create_arrow_polygon(that, viewer = that.viewer) {
that.entityHasCreated = true
let id = that.randomString()
viewer.entities.add(
new Cesium.Entity({
id: id,
polygon: {
classificationType: Cesium.ClassificationType.BOTH,
hierarchy: new Cesium.CallbackProperty((e) => {
let arr = that.computeAttackArrow(that.positions)
for (let i = 0; i < arr.length; i++) {
if (isNaN(arr[i].x)) {
arr = []
break
}
}
return new Cesium.PolygonHierarchy(arr)
}, false),
material: Cesium.Color.fromCssColorString(that.color),
zIndex: 99999999
},
})
)
return id
}
start(cb) {
if (YJ.Measure.GetMeasureStatus()) {
cb('上一次测量未结束')
} else {
super.start()
let into
YJ.Measure.SetMeasureStatus(true)
this.tip = new MouseTip('左键确定右键结束CTRL+右键撤销', this.sdk)
this.event = new MouseEvent(this.sdk)
this.positions = []
this.points_ids = [] //存放左键点击时临时添加的point的id
let cache_positions = []
let isMove = false
this.event.mouse_left((movement, cartesian) => {
if(into === '2D') {
return
}
into = '3D'
let pos84 = this.cartesian3Towgs84(cartesian, this.viewer)
let lastPos84 = cache_positions[cache_positions.length - 1]
if(lastPos84 && (lastPos84.lng === pos84.lng && lastPos84.lat === pos84.lat)) {
return
}
if (!this.entityHasCreated) {
let polyline_id = DrawAttackArrow.create_arrow_polygon(this)
this.points_ids.push(polyline_id)
}
this.points_ids.push(this.create_point(cartesian))
cache_positions.push(pos84)
isMove = false
})
this.event.mouse_right((movement, cartesian) => {
if(into === '2D') {
return
}
let c = []
if (this.points_ids.length > 2) {
let positions = this.viewer.entities.getById(this.points_ids[0]).polygon.hierarchy.getValue().positions
positions.forEach(it => {
c.push(this.cartesian3Towgs84(it, this.viewer))
})
}
this.end()
if (isMove) {
this.positions.pop()
}
cb(null, this.positions, c)
})
this.event.mouse_move((movement, cartesian) => {
if(into === '2D') {
return
}
isMove = true
this.positions = cache_positions.concat(
this.cartesian3Towgs84(cartesian, this.viewer)
)
this.tip.setPosition(
cartesian,
movement.endPosition.x,
movement.endPosition.y
)
})
this.event.mouse_right_keyboard_ctrl((movement, cartesian) => {
if(into === '2D') {
return
}
if (this.points_ids.length > 1) {
this.remove_entity(this.points_ids.pop()) //移除point
cache_positions.pop()
}
})
this.event.gesture_pinck_start_keyboard_ctrl(() => {
if(into === '2D') {
return
}
if (this.points_ids.length > 1) {
this.remove_entity(this.points_ids.pop()) //移除point
cache_positions.pop()
}
})
this.event.gesture_pinck_start((movement, cartesian) => {
if(into === '2D') {
return
}
let startTime = new Date()
this.event.gesture_pinck_end(() => {
let endTime = new Date()
if (endTime - startTime >= 500) {
let c = []
if (this.points_ids.length > 2) {
let positions = this.viewer.entities.getById(this.points_ids[0]).polygon.hierarchy.getValue().positions
positions.forEach(it => {
c.push(this.cartesian3Towgs84(it, this.viewer))
})
}
this.end()
cb(null, this.positions, c)
}
else {
if (!this.entityHasCreated) {
let polyline_id = DrawAttackArrow.create_arrow_polygon(this)
this.points_ids.push(polyline_id)
}
this.points_ids.push(this.create_point(cartesian))
cache_positions.push(this.cartesian3Towgs84(cartesian, this.viewer))
this.positions = cache_positions.concat(
this.cartesian3Towgs84(cartesian, this.viewer)
)
this.tip.setPosition(
cartesian,
(movement.position1.x + movement.position2.x) / 2,
(movement.position1.y + movement.position2.y) / 2
)
}
})
})
if (!this._is2D && this._sdk2D) {
this.event2D = new MouseEvent(this._sdk2D)
this.event2D.mouse_left((movement, cartesian) => {
if(into === '3D') {
return
}
into = '2D'
if (!this.entityHasCreated) {
let polyline_id = DrawAttackArrow.create_arrow_polygon(this, this._sdk2D.viewer)
this.points_ids.push(polyline_id)
}
this.points_ids.push(this.create_point(cartesian, this._sdk2D.viewer))
cache_positions.push(this.cartesian3Towgs84(cartesian, this.viewer))
isMove = false
})
this.event2D.mouse_right((movement, cartesian) => {
if(into === '3D') {
return
}
let c = []
if (this.points_ids.length > 2) {
let positions = this.event2D.viewer.entities.getById(this.points_ids[0]).polygon.hierarchy.getValue().positions
positions.forEach(it => {
c.push(this.cartesian3Towgs84(it, this.viewer))
})
}
this.end()
if (isMove) {
this.positions.pop()
}
cb(null, this.positions, c)
})
this.event2D.mouse_move((movement, cartesian) => {
if(into === '3D') {
return
}
isMove = true
this.positions = cache_positions.concat(
this.cartesian3Towgs84(cartesian, this.viewer)
)
this.tip.setPosition(
cartesian,
movement.endPosition.x + this.viewer.canvas.width,
movement.endPosition.y
)
})
this.event2D.mouse_right_keyboard_ctrl((movement, cartesian) => {
if(into === '3D') {
return
}
if (this.points_ids.length > 1) {
this.remove_entity(this.points_ids.pop()) //移除point
cache_positions.pop()
}
})
this.event2D.gesture_pinck_start_keyboard_ctrl(() => {
if(into === '3D') {
return
}
if (this.points_ids.length > 1) {
this.remove_entity(this.points_ids.pop()) //移除point
cache_positions.pop()
}
})
this.event2D.gesture_pinck_start((movement, cartesian) => {
if(into === '3D') {
return
}
let startTime = new Date()
this.event2D.gesture_pinck_end(() => {
let endTime = new Date()
if (endTime - startTime >= 500) {
let c = []
if (this.points_ids.length > 2) {
let positions = this.viewer.entities.getById(this.points_ids[0]).polygon.hierarchy.getValue().positions
positions.forEach(it => {
c.push(this.cartesian3Towgs84(it, this.viewer))
})
}
this.end()
cb(null, this.positions, c)
}
else {
if (!this.entityHasCreated) {
let polyline_id = DrawAttackArrow.create_arrow_polygon(this, this._sdk2D.viewer)
this.points_ids.push(polyline_id)
}
this.points_ids.push(this.create_point(cartesian, this._sdk2D.viewer))
cache_positions.push(this.cartesian3Towgs84(cartesian, this.viewer))
this.positions = cache_positions.concat(
this.cartesian3Towgs84(cartesian, this.viewer)
)
this.tip.setPosition(
cartesian,
((movement.position1.x + movement.position2.x) / 2) + this.viewer.canvas.width,
(movement.position1.y + movement.position2.y) / 2
)
}
})
})
}
}
}
}