line-segment-drawer.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { Drawer } from "../../../core/drawers/drawer";
  2. import { ELEMENTS_CLASS } from "../../../core/enums/elements-class-enum";
  3. import { label as Label } from "../../../component-registry/label";
  4. import { DrawerAggregator } from "../../../core/drawers/drawer-aggregator";
  5. import { selector as Selector } from "../../../core/application/selector";
  6. import { LineSegmentModel } from "../models/line-segment-model";
  7. export class LineSegmentDrawer extends Drawer {
  8. static FIRST_POINT() {
  9. return "FIRST_POINT";
  10. }
  11. static SECOND_POINT() {
  12. return "SECOND_POINT";
  13. }
  14. constructor() {
  15. super();
  16. this.pointA;
  17. this.pointB;
  18. this.label;
  19. this.states = [
  20. LineSegmentDrawer.FIRST_POINT,
  21. LineSegmentDrawer.SECOND_POINT
  22. ];
  23. this.lineSegment;
  24. }
  25. setPointA(point) {
  26. this.pointA = point;
  27. }
  28. setPointB(point) {
  29. this.pointB = point;
  30. }
  31. draw() {
  32. const points = Selector.getSelectedPoints();
  33. const aggregators = Selector.getSelectedPointsAggregators();
  34. if (points == undefined || points.length < 1) return;
  35. this.setPointA(points[0]);
  36. this.setPointB(points[1]);
  37. this.label = Label.draw();
  38. this.lineSegment = new LineSegmentModel(
  39. this.pointA,
  40. this.pointB,
  41. this.label
  42. );
  43. const konvaObject = LineSegmentDrawer.getKonvaLine(
  44. this.pointA,
  45. this.pointB
  46. );
  47. super.setKonvaObject(konvaObject);
  48. const aggregator = new DrawerAggregator(
  49. this,
  50. this.lineSegment,
  51. this.konvaObject,
  52. ELEMENTS_CLASS.LINE_SEGMENT
  53. );
  54. super.addAggregator(aggregator);
  55. aggregators[1].addAggregator(aggregator);
  56. aggregators[0].addAggregator(aggregator);
  57. Drawer.drawObject(this.konvaObject);
  58. this.konvaObject.zIndex(0);
  59. super.batchDraw();
  60. }
  61. update(aggregator) {
  62. const pointA = aggregator.genericObject.pointA;
  63. const pointB = aggregator.genericObject.pointB;
  64. aggregator.konvaObject.points([
  65. pointA.posX,
  66. pointA.posY,
  67. pointB.posX,
  68. pointB.posY
  69. ]);
  70. super.batchDraw();
  71. }
  72. static getKonvaLine(pointA, pointB, useLabel) {
  73. const points = [pointA.posX, pointA.posY, pointB.posX, pointB.posY];
  74. const line = new Konva.Line({
  75. points: points,
  76. stroke: "grey",
  77. strokeWidth: 2,
  78. lineJoin: "round",
  79. draggable: false,
  80. strokeScaleEnabled: false,
  81. class: ELEMENTS_CLASS.LINE_SEGMENT,
  82. connections: [],
  83. index: 0
  84. });
  85. return line;
  86. }
  87. static drawKonvaLine(pointA, pointB) {
  88. const line = LineSegmentDrawer.getKonvaLine(pointA, pointB);
  89. }
  90. }