|                                                                                                              | 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 | /**
 * @Author: Caven
 * @Date: 2020-02-25 18:28:36
 */
import { Cesium } from '../../../namespace'
import Overlay from '../Overlay'
import State from '../../state/State'
import Parse from '../../parse/Parse'
import { Util } from '../../utils'
import { Transform } from '../../transform'
class Box extends Overlay {
  constructor(position, length, width, height) {
    super()
    this._position = Parse.parsePosition(position)
    this._length = length
    this._width = width
    this._height = height
    this._delegate = new Cesium.Entity({
      box: {
        dimensions: {
          x: +this._length,
          y: +this._width,
          z: +this._height,
        },
      },
    })
    this._state = State.INITIALIZED
  }
  get type() {
    return Overlay.getOverlayType('box')
  }
  /**
   *
   * @param position
   * @returns {Box}
   */
  set position(position) {
    this._position = Parse.parsePosition(position)
    this._delegate.position = Transform.transformWGS84ToCartesian(
      this._position
    )
    this._delegate.orientation = Cesium.Transforms.headingPitchRollQuaternion(
      Transform.transformWGS84ToCartesian(this._position),
      new Cesium.HeadingPitchRoll(
        Cesium.Math.toRadians(this._position.heading),
        Cesium.Math.toRadians(this._position.pitch),
        Cesium.Math.toRadians(this._position.roll)
      )
    )
    return this
  }
  get position() {
    return this._position
  }
  set length(length) {
    this._length = length || 0
    this._delegate.box.dimensions.x = +this._length
    return this
  }
  get length() {
    return this._length
  }
  set width(width) {
    this._width = width || 0
    this._delegate.box.dimensions.y = +this._width
    return this
  }
  get width() {
    return this._width
  }
  set height(height) {
    this._height = height || 0
    this._delegate.box.dimensions.z = +this._height
    return this
  }
  get height() {
    return this._height
  }
  _mountedHook() {
    /**
     * set the location
     */
    this.position = this._position
  }
  /**
   * Sets Style
   * @param style
   * @returns {Box}
   */
  setStyle(style) {
    if (Object.keys(style).length === 0) {
      return this
    }
    delete style['length'] && delete style['width'] && delete style['height']
    Util.merge(this._style, style)
    Util.merge(this._delegate.box, style)
    return this
  }
}
Overlay.registerType('box')
export default Box
 |