You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Edit.js 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  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. /**
  28. *
  29. * @private
  30. */
  31. _stopedHook() {
  32. this._overlay.positions = Transform.transformCartesianArrayToWGS84Array(
  33. this._positions
  34. )
  35. this._overlay.show = true
  36. this._options.onEditStop && this._options.onEditStop(this._overlay)
  37. }
  38. /**
  39. *
  40. * @private
  41. */
  42. _mountAnchor() {
  43. this._positions = [].concat(
  44. Transform.transformWGS84ArrayToCartesianArray(this._overlay.positions)
  45. )
  46. this._positions.forEach((item, index) => {
  47. this.editTool.fire(PlotEventType.CREATE_ANCHOR, {
  48. position: item,
  49. index: index
  50. })
  51. })
  52. }
  53. /**
  54. *
  55. * @param pickedAnchor
  56. * @param position
  57. * @returns {boolean}
  58. * @private
  59. */
  60. _onEditAnchorStop({ pickedAnchor, position }) {
  61. let properties = pickedAnchor.properties.getValue(Cesium.JulianDate.now())
  62. this._positions[properties.index] = position
  63. }
  64. /**
  65. *
  66. * @param pickedAnchor
  67. * @param position
  68. * @private
  69. */
  70. _onAnchorMoving({ pickedAnchor, position }) {
  71. let properties = pickedAnchor.properties.getValue(Cesium.JulianDate.now())
  72. this._positions[properties.index] = position
  73. }
  74. /**
  75. *
  76. * @param pickedAnchor
  77. * @param position
  78. * @private
  79. */
  80. _onEditStop({ pickedAnchor, position }) {
  81. this._unbindEvent()
  82. this._viewer.editTool.deactivate()
  83. this._layer.entities.remove(this._delegate)
  84. this._stopedHook()
  85. }
  86. /**
  87. *
  88. * @returns {Edit}
  89. * @private
  90. */
  91. _bindEvent() {
  92. this.editTool.on(PlotEventType.ANCHOR_MOVING, this._onAnchorMoving, this)
  93. this.editTool.on(
  94. PlotEventType.EDIT_ANCHOR_STOP,
  95. this._onEditAnchorStop,
  96. this
  97. )
  98. this.editTool.on(PlotEventType.EDIT_STOP, this._onEditStop, this)
  99. return this
  100. }
  101. /**
  102. *
  103. * @private
  104. */
  105. _unbindEvent() {
  106. this.editTool.off(PlotEventType.ANCHOR_MOVING, this._onAnchorMoving, this)
  107. this.editTool.off(
  108. PlotEventType.EDIT_ANCHOR_STOP,
  109. this._onEditAnchorStop,
  110. this
  111. )
  112. this.editTool.off(PlotEventType.EDIT_STOP, this._onEditStop, this)
  113. }
  114. /**
  115. *
  116. * @param plot
  117. * @param options
  118. * @returns {Edit}
  119. */
  120. start(plot, options) {
  121. this._viewer = plot.viewer
  122. this._layer = plot.layer
  123. this._options = options
  124. this._viewer.editTool.deactivate()
  125. this._viewer.editTool.tooltipMess = '点击锚点移动,右击结束编辑'
  126. this._viewer.editTool.activate(options)
  127. this._mountedHook()
  128. this._mountAnchor()
  129. this._unbindEvent()
  130. this._bindEvent()
  131. return this
  132. }
  133. /**
  134. *
  135. * @returns {Edit}
  136. */
  137. stop() {
  138. this.editTool.fire(PlotEventType.EDIT_STOP, {
  139. pickedAnchor: null,
  140. position: null
  141. })
  142. return this
  143. }
  144. }
  145. export default Edit