import { ELEMENTS_CLASS } from "../../../core/enums/elements-class-enum"; import { label as Label } from "../../../component-registry/label"; import { app as App } from "../../../app"; import { PointModel } from "../models/point-model"; import { DrawerAggregator } from "../../../core/drawers/drawer-aggregator"; import { objects } from "../../../core/application/objects"; import { SelectableDrawer } from "../../../core/drawers/selectable-drawer"; const STYLE = { fill: "#9bc364", fill2: "#828783", strokeWidth: 1, stroke: "#9bc364" }; export class PointDrawer extends SelectableDrawer { constructor() { super(); this.point; this.label; this.text; this.states = ["center"]; super.setElementClass(ELEMENTS_CLASS.POINT); } draw(e) { if (this.state == undefined) { super.setState(this.states[0]); App.setStatus("Selecione o centro do Ponto"); } if (this.state == this.states[0]) { App.setStatus("Selecione o centro do Ponto"); const aggregator = this.drawPoint(); super.setState(this.states[0]); return aggregator; } } drawPoint() { const pos = App.pos(); if (pos == undefined) return; const drawResult = PointDrawer.drawAndGetPoint(pos.x, pos.y, true); this.point = drawResult.geometricObject; super.setKonvaObject(drawResult.konvaObject); const aggregator = new DrawerAggregator( this, this.point, this.konvaObject, ELEMENTS_CLASS.POINT ); super.addAggregator(aggregator); this.konvaObject.on("dragmove", aggregator.update.bind(aggregator)); return aggregator; } update(aggregator, event) { aggregator.konvaObject.children.forEach(function (element) { if (element.attrs.class == ELEMENTS_CLASS.POINT) { aggregator.genericObject.update(element, event); } }); } inserPointInLineSegment(konvaObject) { const drawerAggregators = objects.getByKonvaObject(konvaObject); if (drawerAggregators == undefined || drawerAggregators.length == 0) return; const drawerAggregator = drawerAggregators[0]; drawerAggregator.drawer.insertPoint(drawerAggregator); } static drawAndGetPoint(x, y, useLabel) { return PointDrawer.drawPoint(new PointModel(x, y), useLabel); } static drawPoint(point, useLabel, draggable, selectable) { const group = SelectableDrawer.getKonvaGroup(draggable); const circle = PointDrawer.getKonvaCircle(point, draggable, selectable); if (useLabel != undefined && useLabel) { const label = Label.draw(); point.setLabel(label); const text = PointDrawer.getKonvaText(point, label); group.add(text); } if (selectable == undefined || selectable) SelectableDrawer.setSelectable(circle); if (useLabel) { group.add(circle); SelectableDrawer.drawObject(group); SelectableDrawer.setMaxIndex(group); return { geometricObject: point, konvaObject: group }; } else { SelectableDrawer.drawObject(circle); SelectableDrawer.setMaxIndex(circle); return { geometricObject: point, konvaObject: circle }; } } static getKonvaCircle(point, draggable, selectable) { const fill = draggable == undefined || draggable ? STYLE.fill : STYLE.fill2; const stroke = draggable == undefined || draggable ? STYLE.stroke : STYLE.fill2; return new Konva.Circle({ x: point.posX, y: point.posY, radius: 5, fill: fill, stroke: fill, strokeWidth: 1, strokeScaleEnabled: false, draggable: false, resizeEnabled: false, transformEnabled: false, style: { fill: fill, stroke: stroke }, class: ELEMENTS_CLASS.POINT, connections: [], startPosX: point.posX, startPosY: point.posY, listening: true, selectable: selectable }); } static getKonvaText(point, label) { return new Konva.Text({ x: point.posX + 10, y: point.posY - 10, text: label, fontSize: 14, fontFamily: "Calibri", fill: "#434a45", stroke: "#ffffff", strokeWidth: 0.2, draggable: false, resizeEnabled: false, transformEnabled: false, selectable: false }); } }