/**
|
* @Author: Caven
|
* @Date: 2020-08-30 23:50:53
|
*/
|
|
import { PlotEventType } from '@/utils/event/index.js'
|
|
class Edit {
|
constructor(overlay) {
|
this._viewer = undefined
|
this._layer = undefined
|
this._overlay = overlay
|
this._overlay.show = false
|
this._delegate = new global.DC.Namespace.Cesium.Entity()
|
this._delegate.merge(overlay.delegate)
|
this._options = {}
|
this._positions = []
|
}
|
|
get curEditTool () {
|
return this._viewer.curEditTool
|
}
|
|
/**
|
*
|
* @private
|
*/
|
_mountedHook () {
|
this._overlay.positions = global.DC.Transform.transformCartesianArrayToWGS84Array(
|
this._positions
|
)
|
this._overlay.show = true
|
this._options.onEditStop && this._options.onEditStop(this._overlay)
|
}
|
|
/**
|
*
|
* @private
|
*/
|
_stopedHook () {
|
let position
|
if (this._overlay.customType == 'polygon' || this._overlay.customType == 'polyline') {
|
position = this._positions.filter((item, index) => index % 2 === 0)
|
} else {
|
position = this._positions
|
}
|
|
this._overlay.positions = global.DC.Transform.transformCartesianArrayToWGS84Array(
|
position
|
)
|
|
this._overlay.show = true
|
this._options.onEditStop && this._options.onEditStop(this._overlay)
|
}
|
|
/**
|
*
|
* @private
|
*/
|
_mountAnchor () {
|
this._positions = [].concat(
|
global.DC.Transform.transformWGS84ArrayToCartesianArray(this._overlay.positions)
|
)
|
this._positions.forEach((item, index) => {
|
this.curEditTool.fire(PlotEventType.CREATE_ANCHOR, {
|
position: item,
|
index: index
|
})
|
})
|
}
|
|
/**
|
*
|
* @param pickedAnchor
|
* @param position
|
* @returns {boolean}
|
* @private
|
*/
|
_onEditAnchorStop ({ pickedAnchor, position }) {
|
let properties = pickedAnchor.properties.getValue(global.DC.Namespace.Cesium.JulianDate.now())
|
this._positions[properties.index] = position
|
}
|
|
/**
|
*
|
* @param pickedAnchor
|
* @param position
|
* @private
|
*/
|
_onAnchorMoving ({ pickedAnchor, position }) {
|
let properties = pickedAnchor.properties.getValue(global.DC.Namespace.Cesium.JulianDate.now())
|
this._positions[properties.index] = position
|
}
|
|
/**
|
*
|
* @param pickedAnchor
|
* @param position
|
* @private
|
*/
|
_onEditStop ({ pickedAnchor, position }) {
|
this._unbindEvent()
|
this._viewer.curEditTool.deactivate()
|
this._layer.entities.remove(this._delegate)
|
this._stopedHook()
|
}
|
|
/**
|
*
|
* @returns {Edit}
|
* @private
|
*/
|
_bindEvent () {
|
this.curEditTool.on(PlotEventType.ANCHOR_MOVING, this._onAnchorMoving, this)
|
this.curEditTool.on(
|
PlotEventType.EDIT_ANCHOR_STOP,
|
this._onEditAnchorStop,
|
this
|
)
|
this.curEditTool.on(PlotEventType.EDIT_STOP, this._onEditStop, this)
|
return this
|
}
|
|
/**
|
*
|
* @private
|
*/
|
_unbindEvent () {
|
this.curEditTool.off(PlotEventType.ANCHOR_MOVING, this._onAnchorMoving, this)
|
this.curEditTool.off(
|
PlotEventType.EDIT_ANCHOR_STOP,
|
this._onEditAnchorStop,
|
this
|
)
|
this.curEditTool.off(PlotEventType.EDIT_STOP, this._onEditStop, this)
|
}
|
|
/**
|
*
|
* @param measure
|
* @param options
|
* @returns {Edit}
|
*/
|
start (measure, options) {
|
this._viewer = measure.viewer
|
this._layer = measure.layer
|
this._options = options
|
this._viewer.curEditTool.tooltipMess = '点击锚点移动,右击结束编辑'
|
this._viewer.curEditTool.activate(options)
|
this._mountedHook()
|
this._mountAnchor()
|
this._unbindEvent()
|
this._bindEvent()
|
return this
|
}
|
}
|
|
export default Edit
|