UIControl.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. import { coordinate } from "../Coordinate.js";
  2. import LayerEvents from "../enum/LayerEvents.js";
  3. import UIEvents from "../enum/UIEvents.js";
  4. import VectorType from "../enum/VectorType.js";
  5. import GeoActions from "../enum/GeoActions.js";
  6. import { stateService } from "../Service/StateService.js";
  7. import { uiService } from "../Service/UIService.js";
  8. import { dataService } from "../Service/DataService.js";
  9. import { historyService } from "../Service/HistoryService.js";
  10. import { elementService } from "../Service/ElementService";
  11. import { mathUtil } from "../Util/MathUtil";
  12. import { textService } from "../Service/TextService.js/";
  13. import Constant from "../Constant";
  14. // import { roomsUtil } from "../Room/RoomsUtil.js";
  15. import { addRoad } from "../Controls/AddRoad";
  16. import { addLine } from "./AddLine.js";
  17. import VectorCategory from "../enum/VectorCategory.js";
  18. // import { floorplanData } from "../VectorData.js";
  19. export default class UIControl {
  20. constructor(layer, newsletter, graphicStateUI) {
  21. this.layer = layer;
  22. this.newsletter = newsletter;
  23. this.graphicStateUI = graphicStateUI;
  24. }
  25. get selectUI() {
  26. return this.newsletter.selectUI;
  27. }
  28. set selectUI(selectUI) {
  29. this.updateEventNameForSelectUI(selectUI);
  30. this.newsletter.selectUI = selectUI;
  31. }
  32. get focusVector() {
  33. return this.newsletter.focusVector;
  34. }
  35. set focusVector(focusVector) {
  36. this.newsletter.focusVector = focusVector;
  37. }
  38. /**
  39. * 获取选中要操作的UI
  40. */
  41. get currentUI() {}
  42. /**
  43. * 设置选中要操作的UI
  44. */
  45. set currentUI(value) {
  46. this.selectUI = value;
  47. }
  48. clearUI() {
  49. this.selectUI = null;
  50. }
  51. //点击左侧栏后,更新事件
  52. updateEventNameForSelectUI(selectUI) {
  53. console.log(this.selectUI, selectUI);
  54. if (selectUI != null) {
  55. if (this.selectUI == selectUI) {
  56. return;
  57. } else if (this.selectUI != selectUI) {
  58. if (this.selectUI != null) {
  59. //先取消当前事件和进程
  60. stateService.clear();
  61. //。。。。
  62. }
  63. //执行新的事件
  64. if (uiService.isBelongRoad(selectUI) || selectUI == "road") {
  65. stateService.setEventName(LayerEvents.AddRoad);
  66. } else if (selectUI == UIEvents.CurveRoad) {
  67. stateService.setEventName(LayerEvents.AddCurveRoad);
  68. } else if (selectUI == UIEvents.Arrow) {
  69. stateService.setEventName(LayerEvents.AddLine);
  70. addLine.setCategory(VectorCategory.Line.ArrowLine);
  71. } else if (selectUI == UIEvents.MeasureLine) {
  72. stateService.setEventName(LayerEvents.AddLine);
  73. addLine.setCategory(VectorCategory.Line.MeasureLine);
  74. } else if (selectUI == UIEvents.Line) {
  75. stateService.setEventName(LayerEvents.AddLine);
  76. } else if (selectUI == UIEvents.Circle) {
  77. stateService.setEventName(LayerEvents.AddCircle);
  78. } else if (selectUI == UIEvents.Text) {
  79. stateService.setEventName(LayerEvents.AddText);
  80. } else if (selectUI == UIEvents.Magnifier) {
  81. stateService.setEventName(LayerEvents.AddMagnifier);
  82. } else if (selectUI == UIEvents.SVG) {
  83. stateService.setEventName(LayerEvents.AddSVG);
  84. } else if (selectUI == UIEvents.Img) {
  85. stateService.setEventName(LayerEvents.Img);
  86. }
  87. }
  88. }
  89. }
  90. async handleGeo(action) {
  91. let needAutoRedraw = false;
  92. const item = stateService.getFocusItem();
  93. if (item && item.vectorId) {
  94. switch (action) {
  95. case GeoActions.CopyAction:
  96. await dataService.copyVector(item.vectorId, item.type);
  97. needAutoRedraw = true;
  98. break;
  99. case GeoActions.DeleteAction:
  100. dataService.deleteVector(item.vectorId, item.type);
  101. needAutoRedraw = true;
  102. break;
  103. }
  104. }
  105. if (needAutoRedraw) {
  106. this.layer.history.save();
  107. this.layer.renderer.autoRedraw();
  108. }
  109. }
  110. /****************************************************************************针对菜单*******************************************************************************/
  111. //撤销
  112. menu_revoke() {
  113. this.layer.history.goPreState();
  114. const historyState = historyService.getHistoryState();
  115. this.graphicStateUI.canRevoke = historyState.pre;
  116. this.graphicStateUI.canRecovery = true;
  117. this.layer.stopAddVector();
  118. this.layer.renderer.autoRedraw();
  119. }
  120. //恢复
  121. menu_recovery() {
  122. this.layer.history.goNextState();
  123. const historyState = historyService.getHistoryState();
  124. this.graphicStateUI.canRecovery = historyState.next;
  125. this.graphicStateUI.canRevoke = true;
  126. this.layer.stopAddVector();
  127. this.layer.renderer.autoRedraw();
  128. }
  129. menu_view_reset() {
  130. coordinate.reSet(this.layer.canvas);
  131. this.layer.renderer.autoRedraw();
  132. }
  133. // value 为true则开 false则关
  134. menu_backgroundImg(value) {
  135. //
  136. this.graphicStateUI.showBackImage = value;
  137. }
  138. menu_clear() {
  139. dataService.clear();
  140. elementService.hideAll();
  141. this.layer.history.save();
  142. this.layer.renderer.autoRedraw();
  143. }
  144. /******************************************************************************************************************************************************************/
  145. }