point-drawer.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. /*
  2. iGeom
  3. LInE www.usp.br/line
  4. */
  5. import { ELEMENTS_CLASS } from "../../../core/enums/elements-class-enum";
  6. import { label as Label } from "../../../component-registry/label";
  7. import { app as App } from "../../../app";
  8. import { PointModel } from "../models/point-model";
  9. import { DrawerAggregator } from "../../../core/drawers/drawer-aggregator";
  10. import { objects } from "../../../core/application/objects";
  11. import { SelectableDrawer } from "../../../core/drawers/selectable-drawer";
  12. const STYLE = {
  13. fill: "#9bc364",
  14. fill2: "#828783",
  15. strokeWidth: 1,
  16. stroke: "#9bc364"
  17. };
  18. export class PointDrawer extends SelectableDrawer {
  19. constructor () {
  20. super();
  21. this.point;
  22. this.label;
  23. this.text;
  24. this.states = ["center"];
  25. super.setElementClass(ELEMENTS_CLASS.POINT);
  26. }
  27. draw (e) {
  28. if (e != undefined && e.attrs != undefined && e.attrs.genericObject != undefined) {
  29. const aggregator = this.drawPoint(e.attrs.genericObject);
  30. return aggregator;
  31. }
  32. if (this.state == undefined) {
  33. super.setState(this.states[0]);
  34. App.setStatus("Selecione o centro do Ponto");
  35. }
  36. if (this.state == this.states[0]) {
  37. App.setStatus("Selecione o centro do Ponto");
  38. const aggregator = this.drawPoint();
  39. super.setState(this.states[0]);
  40. return aggregator;
  41. }
  42. }
  43. drawPoint (point) {
  44. const pos = App.pos();
  45. let drawResult;
  46. if (point == undefined) {
  47. if (pos == undefined) return;
  48. drawResult = PointDrawer.drawAndGetPoint(pos.x, pos.y, true);
  49. } else
  50. drawResult = PointDrawer.drawPoint(point, true, point.draggable);
  51. this.point = drawResult.geometricObject;
  52. super.setKonvaObject(drawResult.konvaObject);
  53. const aggregator = new DrawerAggregator(this, this.point, this.konvaObject, ELEMENTS_CLASS.POINT); // app/core/drawers/drawer-aggregator.js
  54. super.addAggregator(aggregator);
  55. this.konvaObject.on("dragmove", aggregator.update.bind(aggregator));
  56. return aggregator;
  57. }
  58. update (aggregator, event) {
  59. aggregator.konvaObject.children.forEach(function (element) {
  60. if (element.attrs.class == ELEMENTS_CLASS.POINT) {
  61. aggregator.genericObject.update(element, event);
  62. }
  63. });
  64. }
  65. inserPointInLineSegment (konvaObject) {
  66. const drawerAggregators = objects.getByKonvaObject(konvaObject);
  67. if (drawerAggregators == undefined || drawerAggregators.length == 0) return;
  68. const drawerAggregator = drawerAggregators[0];
  69. drawerAggregator.drawer.insertPoint(drawerAggregator);
  70. }
  71. static drawAndGetPoint (x, y, useLabel) {
  72. return PointDrawer.drawPoint(new PointModel(x, y), useLabel);
  73. }
  74. static drawPoint (point, useLabel, draggable, selectable) {
  75. const group = SelectableDrawer.getKonvaGroup(draggable);
  76. const circle = PointDrawer.getKonvaCircle(point, draggable, selectable);
  77. if (useLabel != undefined && useLabel) {
  78. let label = (point != undefined && point.label != undefined && point.label != '') ? point.label : Label.draw();
  79. point.setLabel(label);
  80. const text = PointDrawer.getKonvaText(point, label);
  81. group.add(text);
  82. }
  83. if (selectable == undefined || selectable)
  84. SelectableDrawer.setSelectableIfSelectorChanged(circle);
  85. if (useLabel) {
  86. group.add(circle);
  87. SelectableDrawer.drawObject(group);
  88. SelectableDrawer.setMaxIndex(group);
  89. return { geometricObject: point, konvaObject: group };
  90. } else {
  91. SelectableDrawer.drawObject(circle);
  92. SelectableDrawer.setMaxIndex(circle);
  93. return { geometricObject: point, konvaObject: circle };
  94. }
  95. }
  96. static getKonvaCircle (point, draggable, selectable) {
  97. let fill = draggable == undefined || draggable ? STYLE.fill : STYLE.fill2;
  98. let stroke = draggable == undefined || draggable ? STYLE.stroke : STYLE.fill2;
  99. if (point.backgroundColor != undefined) {
  100. fill = point.backgroundColor;
  101. stroke = point.backgroundColor;
  102. }
  103. return new Konva.Circle({
  104. x: point.posX,
  105. y: point.posY,
  106. radius: 5,
  107. fill: fill,
  108. stroke: fill,
  109. strokeWidth: 1,
  110. strokeScaleEnabled: false,
  111. draggable: false,
  112. resizeEnabled: false,
  113. transformEnabled: false,
  114. style: { fill: fill, stroke: stroke },
  115. class: ELEMENTS_CLASS.POINT,
  116. connections: [],
  117. startPosX: point.posX,
  118. startPosY: point.posY,
  119. listening: true,
  120. selectable: selectable
  121. });
  122. }
  123. static getKonvaText (point, label) {
  124. return new Konva.Text({
  125. x: point.posX + 10,
  126. y: point.posY - 10,
  127. text: label,
  128. fontSize: 14,
  129. fontFamily: "Calibri",
  130. fill: "#434a45",
  131. stroke: "#ffffff",
  132. strokeWidth: 0.2,
  133. draggable: false,
  134. resizeEnabled: false,
  135. transformEnabled: false,
  136. selectable: false
  137. });
  138. }
  139. }