/** * @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