LineService.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import Point from "../Geometry/Point.js";
  2. import Line from "../Geometry/Line.js";
  3. import { dataService } from "./DataService.js";
  4. import VectorCategory from "../enum/VectorCategory.js";
  5. import { mathUtil } from "../Util/MathUtil.js";
  6. import { uiService } from "./UIService.js";
  7. import { addLine } from "../Controls/AddLine.js";
  8. export default class LineService {
  9. constructor() {}
  10. create(startPoint, endPoint, category, vectorId) {
  11. if (!startPoint || !endPoint || mathUtil.equalPoint(startPoint, endPoint)) {
  12. return null;
  13. }
  14. let start = new Point(startPoint);
  15. let end = new Point(endPoint);
  16. let line = new Line(start.vectorId, end.vectorId, vectorId);
  17. if (category) {
  18. line.setCategory(category);
  19. }
  20. start.setPointParent(line.vectorId, "start");
  21. end.setPointParent(line.vectorId, "end");
  22. dataService.addPoint(start);
  23. dataService.addPoint(end);
  24. dataService.addLine(line);
  25. return line;
  26. }
  27. createByPointId(startId, endId, category, vectorId) {
  28. let line = new Line(startId, endId, vectorId);
  29. if (category) {
  30. line.setCategory(category);
  31. }
  32. let start = dataService.getPoint(startId);
  33. let end = dataService.getPoint(endId);
  34. start.setPointParent(line.vectorId, "start");
  35. end.setPointParent(line.vectorId, "end");
  36. dataService.addLine(line);
  37. return line;
  38. }
  39. deleteLine(lineId) {
  40. let line = dataService.getLine(lineId);
  41. //如果是基准线
  42. if (line.getCategory() == VectorCategory.Line.BaseLine) {
  43. let points = dataService.getPoints();
  44. for (let key in points) {
  45. let point = dataService.getPoint(key);
  46. let category = point.getCategory();
  47. if (
  48. category == VectorCategory.Point.BasePoint ||
  49. category == VectorCategory.Point.TestBasePoint ||
  50. category == VectorCategory.Point.TestPoint
  51. ) {
  52. dataService.deletePoint(key);
  53. }
  54. }
  55. Settings.baseLineId = null;
  56. }
  57. dataService.deleteLine();
  58. }
  59. copy(vectorId) {
  60. let line = dataService.getLine(vectorId);
  61. let startPoint = dataService.getPoint(line.startId);
  62. let endPoint = dataService.getPoint(line.endId);
  63. startPoint = uiService.getNewPositionForPop(startPoint);
  64. endPoint = uiService.getNewPositionForPop(endPoint);
  65. let newLine = this.create(startPoint, endPoint, line.category);
  66. newLine.setArrowColor(line.arrowColor);
  67. return newLine;
  68. }
  69. //将pointId1合并到pointId2
  70. mergePoint(pointId1, pointId2) {
  71. if (pointId1 == pointId2) {
  72. return;
  73. } else if (pointId1 != null && pointId2 != null) {
  74. let point1 = dataService.getPoint(pointId1);
  75. let parent1 = point1.getParent();
  76. let point2 = dataService.getPoint(pointId2);
  77. for (let key in parent1) {
  78. let line = dataService.getLine(key);
  79. let dir = line.getDir(pointId1);
  80. if (dir == "start") {
  81. line.startId = pointId2;
  82. } else if (dir == "end") {
  83. line.endId = pointId2;
  84. }
  85. point2.setPointParent(key, dir);
  86. }
  87. dataService.deletePoint(pointId1);
  88. }
  89. }
  90. }
  91. const lineService = new LineService();
  92. export { lineService };