shuishen
2023-03-29 1f48971edb82a95675552eb9563041b5aef3a306
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/**
 * @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._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
        }
        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
        }
        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
    }
 
    /**
   *
   * @returns {Plot}
   */
    destroy () {
        this._viewer.dataSources.remove(this._layer)
        this._viewer = undefined
        return this
    }
}
 
export default Plot