intersection-drawer.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import { PointDrawer } from "../../point-component/drawers/point-drawer";
  2. import { ELEMENTS_CLASS } from "../../../core/enums/elements-class-enum";
  3. import { Drawer } from "../../../core/drawers/drawer";
  4. import { app as App } from "../../../app";
  5. import { objects } from "../../../core/application/objects";
  6. import { DrawerAggregator } from "../../../core/drawers/drawer-aggregator";
  7. export class IntersectionDrawer extends Drawer {
  8. static FIRST_OBJECT_STATE() {
  9. return "FIRST_OBJECT";
  10. }
  11. static SECOND_OBJECT_STATE() {
  12. return "SECOND_OBJECTf";
  13. }
  14. constructor() {
  15. super();
  16. this.aggregatorA;
  17. this.aggregatorB;
  18. this.label;
  19. this.states = [
  20. IntersectionDrawer.FIRST_OBJECT_STATE,
  21. IntersectionDrawer.SECOND_OBJECT_STATE
  22. ];
  23. this.intersections = [];
  24. this.pointDrawer = new PointDrawer();
  25. super.setElementClass(ELEMENTS_CLASS.INTERSECTION_POINT);
  26. }
  27. draw(e) {
  28. if (e != undefined && e.attrs != undefined) {
  29. this.aggregatorA = this.getObjectAggregatorByGenericObject(e.attrs.genericObject.r);
  30. this.aggregatorB = this.getObjectAggregatorByGenericObject(e.attrs.genericObject.s);
  31. this.drawByIntersectionPoints([e.attrs.genericObject]);
  32. return;
  33. }
  34. if (e == undefined || !this.isValidObject(e.target)) return;
  35. const selectedTool = App.getSelectedTool();
  36. if (
  37. selectedTool != undefined &&
  38. selectedTool.drawer != undefined &&
  39. selectedTool.drawer.elementClass == ELEMENTS_CLASS.INTERSECTION_POINT
  40. ) {
  41. if (
  42. this.state == undefined ||
  43. this.state == IntersectionDrawer.FIRST_OBJECT_STATE
  44. ) {
  45. this.setFirstObject(e.target);
  46. this.setState(IntersectionDrawer.SECOND_OBJECT_STATE);
  47. } else if (this.state == IntersectionDrawer.SECOND_OBJECT_STATE) {
  48. this.setSecondObject(e.target);
  49. this.drawPoint();
  50. this.clear();
  51. }
  52. }
  53. }
  54. setFirstObject(konvaObject) {
  55. const aggregator = this.getObjectAggregator(konvaObject);
  56. this.aggregatorA = aggregator;
  57. }
  58. setSecondObject(konvaObject) {
  59. const aggregator = this.getObjectAggregator(konvaObject);
  60. this.aggregatorB = aggregator;
  61. }
  62. getObjectAggregator(konvaObject) {
  63. return objects.getByKonvaObject(konvaObject)[0];
  64. }
  65. getObjectAggregatorByGenericObject(genericObject) {
  66. return objects.getByGenericObject(genericObject)[0];
  67. }
  68. drawPoint() {
  69. const intersectionPoints = this.aggregatorA.genericObject.getIntersection(
  70. this.aggregatorB.genericObject
  71. );
  72. this.drawByIntersectionPoints(intersectionPoints);
  73. }
  74. drawByIntersectionPoints(intersectionPoints) {
  75. for (let index = 0; index < intersectionPoints.length; index++) {
  76. const intersectionPoint = intersectionPoints[index];
  77. intersectionPoint.update();
  78. const point = PointDrawer.drawPoint(
  79. intersectionPoint,
  80. false,
  81. false,
  82. true
  83. );
  84. const aggregator = new DrawerAggregator(
  85. this,
  86. intersectionPoint,
  87. point.konvaObject,
  88. ELEMENTS_CLASS.INTERSECTION_POINT
  89. );
  90. super.addAggregator(aggregator);
  91. this.aggregatorB.addAggregator(aggregator);
  92. this.aggregatorA.addAggregator(aggregator);
  93. }
  94. }
  95. isValidObject(konvaObject) {
  96. switch (konvaObject.attrs.class) {
  97. case ELEMENTS_CLASS.LINE_SEGMENT:
  98. return true;
  99. case ELEMENTS_CLASS.CIRCUMFERENCE:
  100. return true;
  101. default:
  102. return false;
  103. }
  104. }
  105. update(aggregator, e) {
  106. aggregator.genericObject.update(aggregator, e);
  107. if (!aggregator.genericObject.visible) {
  108. if (aggregator.visible) {
  109. aggregator.konvaObject.hide();
  110. aggregator.aggregators.forEach(a => {
  111. a.visible = false;
  112. a.konvaObject.hide();
  113. });
  114. this.batchDraw();
  115. }
  116. aggregator.visible = false;
  117. return;
  118. }
  119. aggregator.konvaObject.x(aggregator.genericObject.posX);
  120. aggregator.konvaObject.y(aggregator.genericObject.posY);
  121. if (!aggregator.visible) {
  122. aggregator.konvaObject.show();
  123. aggregator.aggregators.forEach(a => {
  124. a.visible = true;
  125. a.konvaObject.show();
  126. });
  127. aggregator.visible = true;
  128. }
  129. this.batchDraw();
  130. }
  131. reset() {
  132. this.aggregatorA = undefined;
  133. this.aggregatorB = undefined;
  134. this.setState(undefined);
  135. }
  136. }