選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

Plot.js 5.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. /**
  2. * @Author: Caven
  3. * @Date: 2020-08-29 19:26:06
  4. */
  5. import { Cesium } from '@dc-modules/namespace'
  6. import { OverlayType } from '@dc-modules/overlay'
  7. import DrawPoint from './draw/DrawPoint'
  8. import DrawPolyline from './draw/DrawPolyline'
  9. import DrawPolygon from './draw/DrawPolygon'
  10. import DrawCircle from './draw/DrawCircle'
  11. import DrawRectangle from './draw/DrawRectangle'
  12. import DrawBillboard from './draw/DrawBillboard'
  13. import DrawAttackArrow from './draw/DrawAttackArrow'
  14. import DrawDoubleArrow from './draw/DrawDoubleArrow'
  15. import DrawFineArrow from './draw/DrawFineArrow'
  16. import DrawGatheringPlace from './draw/DrawGatheringPlace'
  17. import DrawTailedAttackArrow from './draw/DrawTailedAttackArrow'
  18. import EditPoint from './edit/EditPoint'
  19. import EditPolyline from './edit/EditPolyline'
  20. import EditPolygon from './edit/EditPolygon'
  21. import EditCircle from './edit/EditCircle'
  22. import EditRectangle from './edit/EditRectangle'
  23. import EditBillboard from './edit/EditBillboard'
  24. import EditAttackArrow from './edit/EditAttackArrow'
  25. import EditDoubleArrow from './edit/EditDoubleArrow'
  26. import EditFineArrow from './edit/EditFineArrow'
  27. import EditGatheringPlace from './edit/EditGatheringPlace'
  28. import EditTailedAttackArrow from './edit/EditTailedAttackArrow'
  29. class Plot {
  30. constructor(viewer, options = {}) {
  31. this._viewer = viewer
  32. this._options = options
  33. this._layer = new Cesium.CustomDataSource('plot-layer')
  34. this._viewer.dataSources.add(this._layer)
  35. this._state = undefined
  36. }
  37. get viewer() {
  38. return this._viewer
  39. }
  40. get layer() {
  41. return this._layer
  42. }
  43. get state() {
  44. return this._state
  45. }
  46. /**
  47. *
  48. * @param type
  49. * @param style
  50. * @private
  51. */
  52. _createDrawWorker(type, style) {
  53. let drawWorker = undefined
  54. switch (type) {
  55. case OverlayType.POINT:
  56. drawWorker = new DrawPoint(style)
  57. break
  58. case OverlayType.POLYLINE:
  59. drawWorker = new DrawPolyline(style)
  60. break
  61. case OverlayType.POLYGON:
  62. drawWorker = new DrawPolygon(style)
  63. break
  64. case OverlayType.CIRCLE:
  65. drawWorker = new DrawCircle(style)
  66. break
  67. case OverlayType.RECTANGLE:
  68. drawWorker = new DrawRectangle(style)
  69. break
  70. case OverlayType.BILLBOARD:
  71. drawWorker = new DrawBillboard(style)
  72. break
  73. case OverlayType.ATTACK_ARROW:
  74. drawWorker = new DrawAttackArrow(style)
  75. break
  76. case OverlayType.DOUBLE_ARROW:
  77. drawWorker = new DrawDoubleArrow(style)
  78. break
  79. case OverlayType.FINE_ARROW:
  80. drawWorker = new DrawFineArrow(style)
  81. break
  82. case OverlayType.TAILED_ATTACK_ARROW:
  83. drawWorker = new DrawTailedAttackArrow(style)
  84. break
  85. case OverlayType.GATHERING_PLACE:
  86. drawWorker = new DrawGatheringPlace(style)
  87. break
  88. default:
  89. break
  90. }
  91. return drawWorker
  92. }
  93. /**
  94. *
  95. * @param overlay
  96. * @private
  97. */
  98. _createEditWorker(overlay) {
  99. let editWorker = undefined
  100. switch (overlay.type) {
  101. case OverlayType.POINT:
  102. editWorker = new EditPoint(overlay)
  103. break
  104. case OverlayType.POLYLINE:
  105. editWorker = new EditPolyline(overlay)
  106. break
  107. case OverlayType.POLYGON:
  108. editWorker = new EditPolygon(overlay)
  109. break
  110. case OverlayType.CIRCLE:
  111. editWorker = new EditCircle(overlay)
  112. break
  113. case OverlayType.RECTANGLE:
  114. editWorker = new EditRectangle(overlay)
  115. break
  116. case OverlayType.BILLBOARD:
  117. editWorker = new EditBillboard(overlay)
  118. break
  119. case OverlayType.ATTACK_ARROW:
  120. editWorker = new EditAttackArrow(overlay)
  121. break
  122. case OverlayType.DOUBLE_ARROW:
  123. editWorker = new EditDoubleArrow(overlay)
  124. break
  125. case OverlayType.FINE_ARROW:
  126. editWorker = new EditFineArrow(overlay)
  127. break
  128. case OverlayType.TAILED_ATTACK_ARROW:
  129. editWorker = new EditTailedAttackArrow(overlay)
  130. break
  131. case OverlayType.GATHERING_PLACE:
  132. editWorker = new EditGatheringPlace(overlay)
  133. break
  134. default:
  135. break
  136. }
  137. return editWorker
  138. }
  139. /**
  140. *
  141. * @param type
  142. * @param callback
  143. * @param style
  144. * @param clampToModel
  145. * @returns {Plot}
  146. */
  147. draw(type, callback, style = {}, clampToModel = false) {
  148. this._state = 'draw'
  149. this._createDrawWorker(type, style)?.start(this, {
  150. ...this._options,
  151. onDrawStop: callback,
  152. clampToModel: clampToModel ?? this._options.clampToModel
  153. })
  154. return this
  155. }
  156. /**
  157. *
  158. * @param overlay
  159. * @param callback
  160. * @param clampToModel
  161. * @returns {Plot}
  162. */
  163. edit(overlay, callback, clampToModel = false) {
  164. this._state = 'edit'
  165. this._createEditWorker(overlay)?.start(this, {
  166. ...this._options,
  167. onEditStop: callback,
  168. clampToModel: clampToModel ?? this._options.clampToModel
  169. })
  170. return this
  171. }
  172. /**
  173. *
  174. * @returns {Plot}
  175. */
  176. destroy() {
  177. this._viewer.dataSources.remove(this._layer)
  178. this._viewer = undefined
  179. return this
  180. }
  181. }
  182. export default Plot