Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. /**
  2. * @Author: Caven
  3. * @Date: 2020-08-30 23:50:53
  4. */
  5. import { Cesium } from '@dc-modules/namespace'
  6. import { PlotEventType } from '@dc-modules/event'
  7. import { Transform } from '@dc-modules/transform'
  8. class Edit {
  9. constructor(overlay) {
  10. this._viewer = undefined
  11. this._layer = undefined
  12. this._overlay = overlay
  13. this._overlay.show = false
  14. this._delegate = new Cesium.Entity()
  15. this._delegate.merge(overlay.delegate)
  16. this._options = {}
  17. this._positions = []
  18. }
  19. get editTool() {
  20. return this._viewer.editTool
  21. }
  22. /**
  23. *
  24. * @private
  25. */
  26. _mountedHook() {
  27. this._overlay.positions = Transform.transformCartesianArrayToWGS84Array(
  28. this._positions
  29. )
  30. this._overlay.show = true
  31. this._options.onEditStop && this._options.onEditStop(this._overlay)
  32. }
  33. /**
  34. *
  35. * @private
  36. */
  37. _stopdHook() {
  38. this._overlay.positions = Transform.transformCartesianArrayToWGS84Array(
  39. this._positions
  40. )
  41. this._overlay.show = true
  42. this._options.onEditStop && this._options.onEditStop(this._overlay)
  43. }
  44. /**
  45. *
  46. * @private
  47. */
  48. _mountAnchor() {
  49. this._positions = [].concat(
  50. Transform.transformWGS84ArrayToCartesianArray(this._overlay.positions)
  51. )
  52. this._positions.forEach((item, index) => {
  53. this.editTool.fire(PlotEventType.CREATE_ANCHOR, {
  54. position: item,
  55. index: index
  56. })
  57. })
  58. }
  59. /**
  60. *
  61. * @param pickedAnchor
  62. * @param position
  63. * @returns {boolean}
  64. * @private
  65. */
  66. _onEditAnchorStop({ pickedAnchor, position }) {
  67. let properties = pickedAnchor.properties.getValue(Cesium.JulianDate.now())
  68. this._positions[properties.index] = position
  69. }
  70. /**
  71. *
  72. * @param pickedAnchor
  73. * @param position
  74. * @private
  75. */
  76. _onAnchorMoving({ pickedAnchor, position }) {
  77. let properties = pickedAnchor.properties.getValue(Cesium.JulianDate.now())
  78. this._positions[properties.index] = position
  79. }
  80. /**
  81. *
  82. * @param pickedAnchor
  83. * @param position
  84. * @private
  85. */
  86. _onEditStop({ pickedAnchor, position }) {
  87. this._unbindEvent()
  88. this._viewer.editTool.deactivate()
  89. this._layer.entities.remove(this._delegate)
  90. this._stopdHook()
  91. }
  92. /**
  93. *
  94. * @returns {Edit}
  95. * @private
  96. */
  97. _bindEvent() {
  98. this.editTool.on(PlotEventType.ANCHOR_MOVING, this._onAnchorMoving, this)
  99. this.editTool.on(
  100. PlotEventType.EDIT_ANCHOR_STOP,
  101. this._onEditAnchorStop,
  102. this
  103. )
  104. this.editTool.on(PlotEventType.EDIT_STOP, this._onEditStop, this)
  105. return this
  106. }
  107. /**
  108. *
  109. * @private
  110. */
  111. _unbindEvent() {
  112. this.editTool.off(PlotEventType.ANCHOR_MOVING, this._onAnchorMoving, this)
  113. this.editTool.off(
  114. PlotEventType.EDIT_ANCHOR_STOP,
  115. this._onEditAnchorStop,
  116. this
  117. )
  118. this.editTool.off(PlotEventType.EDIT_STOP, this._onEditStop, this)
  119. }
  120. /**
  121. *
  122. * @param measure
  123. * @param options
  124. * @returns {Edit}
  125. */
  126. start(measure, options) {
  127. this._viewer = measure.viewer
  128. this._layer = measure.layer
  129. this._options = options
  130. this._viewer.editTool.tooltipMess = '点击锚点移动,右击结束编辑'
  131. this._viewer.editTool.activate(options)
  132. this._mountedHook()
  133. this._mountAnchor()
  134. this._unbindEvent()
  135. this._bindEvent()
  136. return this
  137. }
  138. }
  139. export default Edit