/**
|
* @Author: Caven
|
* @Date: 2020-08-29 19:26:06
|
*/
|
import DrawPolygon from './draw/DrawPolygon'
|
import DrawPolyline from './draw/DrawPolyline'
|
import DrawBillboard from './draw/DrawBillboard'
|
|
import EditPolygon from './edit/EditPolygon'
|
import EditPolyline from './edit/EditPolyline'
|
import EditBillboard from './edit/EditBillboard'
|
class Plot {
|
constructor(viewer, options = {}) {
|
this._currentWorker = undefined
|
this._viewer = viewer
|
this._options = options
|
this._layer = new global.DC.Namespace.Cesium.CustomDataSource('cur-plot-layer')
|
this._viewer.dataSources.add(this._layer)
|
this._state = undefined
|
}
|
|
get viewer () {
|
return this._viewer
|
}
|
|
get layer () {
|
return this._layer
|
}
|
|
get state () {
|
return this._state
|
}
|
|
/**
|
*
|
* @param type
|
* @param style
|
* @private
|
*/
|
_createDrawWorker (type, style) {
|
let drawWorker = undefined
|
switch (type) {
|
case global.DC.OverlayType.POLYGON:
|
drawWorker = new DrawPolygon(style)
|
break
|
case global.DC.OverlayType.POLYLINE:
|
drawWorker = new DrawPolyline(style)
|
break
|
case global.DC.OverlayType.BILLBOARD:
|
drawWorker = new DrawBillboard(style)
|
break
|
default:
|
break
|
}
|
|
this._currentWorker = drawWorker
|
|
return drawWorker
|
}
|
|
/**
|
*
|
* @param overlay
|
* @private
|
*/
|
_createEditWorker (overlay) {
|
let editWorker = undefined
|
switch (overlay.type) {
|
case global.DC.OverlayType.POLYGON:
|
editWorker = new EditPolygon(overlay)
|
break
|
case global.DC.OverlayType.POLYLINE:
|
editWorker = new EditPolyline(overlay)
|
break
|
case global.DC.OverlayType.BILLBOARD:
|
editWorker = new EditBillboard(overlay)
|
break
|
default:
|
break
|
}
|
|
this._currentWorker = editWorker
|
|
return editWorker
|
}
|
|
/**
|
*
|
* @param type
|
* @param callback
|
* @param style
|
* @param clampToModel
|
* @returns {Plot}
|
*/
|
draw (type, callback, style = {}, clampToModel = false) {
|
|
this._state = 'draw'
|
|
this._createDrawWorker(type, style)?.start(this, {
|
...this._options,
|
onDrawStop: callback,
|
clampToModel: clampToModel ?? this._options.clampToModel
|
})
|
return this
|
}
|
|
|
/**
|
*
|
* @param overlay
|
* @param callback
|
* @param clampToModel
|
* @returns {Plot}
|
*/
|
edit (overlay, callback, clampToModel = false) {
|
this._state = 'edit'
|
this._createEditWorker(overlay)?.start(this, {
|
...this._options,
|
onEditStop: callback,
|
clampToModel: clampToModel ?? this._options.clampToModel
|
})
|
return this
|
}
|
|
stop (overlay) {
|
if (this._state == 'draw') {
|
this._currentWorker?._onDrawStop()
|
} else {
|
this._currentWorker?._onEditStop(overlay)
|
}
|
}
|
|
/**
|
*
|
* @returns {Plot}
|
*/
|
destroy () {
|
this._viewer.dataSources.remove(this._layer)
|
this._viewer = undefined
|
return this
|
}
|
}
|
|
export default Plot
|