LineService.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import Point from "../Geometry/Point.js";
  2. import Line from "../Geometry/Line.js";
  3. import CurvePoint from "../Geometry/CurvePoint.js";
  4. import CurveLine from "../Geometry/CurveLine.js";
  5. import { dataService } from "./DataService.js";
  6. // import { curvePointService } from "./CurvePointService.js";
  7. import VectorCategory from "../enum/VectorCategory.js";
  8. import { mathUtil } from "../Util/MathUtil.js";
  9. import { uiService } from "./UIService.js";
  10. import { addLine } from "../Controls/AddLine.js";
  11. export default class LineService {
  12. constructor() {}
  13. create(startPoint, endPoint, category, vectorId) {
  14. if (!startPoint || !endPoint || mathUtil.equalPoint(startPoint, endPoint)) {
  15. return null;
  16. }
  17. let start = new Point(startPoint);
  18. let end = new Point(endPoint);
  19. let line = new Line(start.vectorId, end.vectorId, vectorId);
  20. if (category) {
  21. line.setCategory(category);
  22. }
  23. start.setPointParent(line.vectorId, "start");
  24. end.setPointParent(line.vectorId, "end");
  25. dataService.addPoint(start);
  26. dataService.addPoint(end);
  27. dataService.addLine(line);
  28. return line;
  29. }
  30. createByPointId(startId, endId, category, vectorId) {
  31. let line = new Line(startId, endId, vectorId);
  32. if (category) {
  33. line.setCategory(category);
  34. }
  35. let start = dataService.getPoint(startId);
  36. let end = dataService.getPoint(endId);
  37. start.setPointParent(line.vectorId, "start");
  38. end.setPointParent(line.vectorId, "end");
  39. dataService.addLine(line);
  40. return line;
  41. }
  42. deleteLine(lineId) {
  43. let line = dataService.getLine(lineId);
  44. //如果是基准线
  45. if (line.getCategory() == VectorCategory.Line.BaseLine) {
  46. let points = dataService.getPoints();
  47. for (let key in points) {
  48. let point = dataService.getPoint(key);
  49. let category = point.getCategory();
  50. if (
  51. category == VectorCategory.Point.BasePoint ||
  52. category == VectorCategory.Point.TestBasePoint ||
  53. category == VectorCategory.Point.TestPoint
  54. ) {
  55. dataService.deletePoint(key);
  56. }
  57. }
  58. Settings.baseLineId = null;
  59. }
  60. dataService.deleteLine();
  61. }
  62. copy(vectorId) {
  63. let line = dataService.getLine(vectorId);
  64. let startPoint = dataService.getPoint(line.startId);
  65. let endPoint = dataService.getPoint(line.endId);
  66. startPoint = uiService.getNewPositionForPop(startPoint);
  67. endPoint = uiService.getNewPositionForPop(endPoint);
  68. let newLine = this.create(startPoint, endPoint, line.category);
  69. newLine.setColor(line.color);
  70. return newLine;
  71. }
  72. getLine(pointId1, pointId2) {
  73. let lines = dataService.getLines();
  74. for (let key in lines) {
  75. const line = dataService.getLine(key);
  76. if (
  77. (line.startId == pointId1 && line.endId == pointId2) ||
  78. (line.endId == pointId1 && line.startId == pointId2)
  79. ) {
  80. return key;
  81. }
  82. }
  83. return null;
  84. }
  85. /******************************************************************************曲线**************************************************************************************/
  86. createCurveLine(startPosition, endPosition, vectorId) {
  87. if (
  88. !startPosition ||
  89. !endPosition ||
  90. mathUtil.equalPoint(startPosition, endPosition)
  91. ) {
  92. return null;
  93. }
  94. let startPoint = curvePointService.create(startPosition);
  95. let endPoint = curvePointService.create(endPosition);
  96. let curveLine = new CurveLine(
  97. startPoint.vectorId,
  98. endPoint.vectorId,
  99. vectorId
  100. );
  101. startPoint.setPointParent(curveLine.vectorId, "start");
  102. endPoint.setPointParent(curveLine.vectorId, "end");
  103. let midPoint = curvePointService.create({
  104. x: (startPoint.x + endPoint.x) / 2,
  105. y: (startPoint.y + endPoint.y) / 2,
  106. });
  107. curveLine.points = [];
  108. curveLine.points.push(startPoint);
  109. curveLine.points.push(midPoint);
  110. curveLine.points.push(endPoint);
  111. curveLine.curves = mathUtil.getCurvesByPoints(curveLine.points);
  112. dataService.addCurveLine(curveLine);
  113. return curveLine;
  114. }
  115. createCurveLineForPoints(points, vectorId) {
  116. let curvePoints = [];
  117. for (let i = 0; i < points.length; ++i) {
  118. let curvePoint = curvePointService.create(points[i]);
  119. curvePoints.push(curvePoint);
  120. }
  121. let curveLine = new CurveLine(
  122. curvePoints[0].vectorId,
  123. curvePoints[curvePoints.length - 1].vectorId,
  124. vectorId
  125. );
  126. curvePoints[0].setPointParent(curveLine.vectorId, "start");
  127. curvePoints[curvePoints.length - 1].setPointParent(
  128. curveLine.vectorId,
  129. "end"
  130. );
  131. curveLine.points = JSON.parse(JSON.stringify(curvePoints));
  132. curveLine.curves = mathUtil.getCurvesByPoints(curveLine.points);
  133. dataService.addCurveLine(curveLine);
  134. return curveLine;
  135. }
  136. }
  137. const lineService = new LineService();
  138. export { lineService };