text: /**
   * @Author: Caven
   * @Date: 2020-08-30 23:50:53
   */
  
  import { Cesium } from '@dc-modules/namespace'
  import { MouseEventType } from '@dc-modules/event'
  
  class Edit {
    constructor() {
      this._viewer = undefined
      this._overlay = undefined
      this._anchors = []
      this._delegate = undefined
      this._pickedAnchor = undefined
      this._isMoving = false
      this._clampToGround = true
      this._tooltip = undefined
      this._tooltipMess = '点击锚点移动,右击结束编辑'
      this._layer = undefined
      this._anchorLayer = undefined
      this._layer = undefined
      this._plotEvent = undefined
      this._options = {}
      this._positions = []
    }
  
    _mountEntity() {}
  
    _mountAnchor() {}
  
    _onClick(e) {}
  
    _onMouseMove(e) {
      this._tooltip.showAt(e.windowPosition, this._tooltipMess)
      if (!this._isMoving) {
        return false
      }
      if (this._pickedAnchor && this._pickedAnchor.position) {
        let properties = this._pickedAnchor.properties.getValue(
          Cesium.JulianDate.now()
        )
        let position = this._clampToGround ? e.surfacePosition : e.position
        if (!position) {
          return false
        }
        this._pickedAnchor.position.setValue(position)
        this._positions[properties.index] = position
      }
    }
  
    _onRightClick(e) {}
  
    bindEvent() {
      this._viewer.on(MouseEventType.CLICK, this._onClick, this)
      this._viewer.on(MouseEventType.MOUSE_MOVE, this._onMouseMove, this)
      this._viewer.on(MouseEventType.RIGHT_CLICK, this._onRightClick, this)
    }
  
    unbindEvent() {
      this._viewer.off(MouseEventType.CLICK, this._onClick, this)
      this._viewer.off(MouseEventType.MOUSE_MOVE, this._onMouseMove, this)
      this._viewer.off(MouseEventType.RIGHT_CLICK, this._onRightClick, this)
    }
  
    /**
     *
     * @param position
     * @param index
     * @param isMid
     * @param isCenter
     */
    createAnchor(position, index, isMid = false, isCenter = false) {
      let image = isMid
        ? this._options.icon_midAnchor
        : isCenter
        ? this._options.icon_center
        : this._options.icon_anchor
      let anchor = this._anchorLayer.add({
        position: position,
        billboard: {
          image: image,
          width: 12,
          height: 12,
          eyeOffset: new Cesium.ConstantProperty(
            new Cesium.Cartesian3(0, 0, -500)
          ),
          heightReference:
            this._viewer.scene.mode === Cesium.SceneMode.SCENE3D &&
            this._clampToGround
              ? Cesium.HeightReference.CLAMP_TO_GROUND
              : Cesium.HeightReference.NONE
        },
        properties: {
          isMid: isMid,
          index: index
        }
      })
      this._anchors.push(anchor)
    }
  
    /**
     *
     * @param p1
     * @param p2
     * @returns {Cartesian3}
     */
    computeMidPosition(p1, p2) {
      let c1 = Cesium.Ellipsoid.WGS84.cartesianToCartographic(p1)
      let c2 = Cesium.Ellipsoid.WGS84.cartesianToCartographic(p2)
      let cm = new Cesium.EllipsoidGeodesic(c1, c2).interpolateUsingFraction(0.5)
      return Cesium.Ellipsoid.WGS84.cartographicToCartesian(cm)
    }
  
    /**
     *
     * @param plot
     * @param clampToGround
     */
    start(plot, clampToGround) {
      this._viewer = plot.viewer
      this._tooltip = plot.viewer.tooltip
      this._layer = plot.overlayLayer
      this._anchorLayer = plot.anchorLayer
      this._plotEvent = plot.plotEvent
      this._options = plot.options
      this._clampToGround = clampToGround
      this._mountEntity()
      this._mountAnchor()
      this.bindEvent()
    }
  }
  
  export default Edit
  