UNPKG

@wcardinal/wcardinal-geditor

Version:

WebGL-based graphic editor, tester and viewer for supervisory systems

234 lines 9.82 kB
import { __extends } from "tslib"; import { EShapeAcceptorEdgeSide, EShapeAcceptorEdgeType, EShapeCapabilities, EShapeCapability, EShapeConnectorBodies, EShapeConnectorLine, EShapeLockPart, toPointsBoundary } from "@wcardinal/wcardinal-ui"; import { Point } from "pixi.js"; import { EToolShapeAcceptorEdge } from "./e-tool-shape-acceptor-edge"; import { EToolShapeEditLineBase } from "./e-tool-shape-edit-line-base"; var EToolShapeEditLineConnector = /** @class */ (function (_super) { __extends(EToolShapeEditLineConnector, _super); function EToolShapeEditLineConnector(options) { var _this = _super.call(this, options) || this; _this._edge = new EToolShapeAcceptorEdge(_this._diagram, true); _this._work = new Point(); return _this; } EToolShapeEditLineConnector.prototype.toCapability = function (shape) { var result = EShapeCapability.NONE; if (EShapeCapabilities.contains(shape, EShapeCapability.LINE_TAIL)) { result |= EShapeCapability.LINE_TAIL; } if (EShapeCapabilities.contains(shape, EShapeCapability.LINE_HEAD)) { result |= EShapeCapability.LINE_HEAD; } return result; }; EToolShapeEditLineConnector.prototype.onActivate = function () { this._edge.begin(this._diagram.canvas, this._shape); this._edgeTail = undefined; this._edgeHead = undefined; _super.prototype.onActivate.call(this); }; EToolShapeEditLineConnector.prototype.onDeactivate = function () { this._edge.end(); this._edgeTail = undefined; this._edgeHead = undefined; _super.prototype.onDeactivate.call(this); }; EToolShapeEditLineConnector.prototype.onTargetChange = function (targetIndex, point) { if (targetIndex === 0) { var edge = this._edge; edge.show(); if (point != null) { edge.update(EShapeAcceptorEdgeType.TAIL, point.x, point.y); } } else if (targetIndex === this._points.length - 1) { var edge = this._edge; edge.show(); if (point != null) { edge.update(EShapeAcceptorEdgeType.HEAD, point.x, point.y); } } else { this._edge.hide(); } }; EToolShapeEditLineConnector.prototype.onTargetMove = function (point) { var targetIndex = this._targetIndex; if (targetIndex === 0) { this._edge.update(EShapeAcceptorEdgeType.TAIL, point.x, point.y); } else if (targetIndex === this._points.length - 1) { this._edge.update(EShapeAcceptorEdgeType.HEAD, point.x, point.y); } }; EToolShapeEditLineConnector.prototype.onTargetNotMove = function (e) { var targetIndex = this._targetIndex; if (targetIndex === 0) { var canvas = this._diagram.canvas; if (canvas) { var onMovePoint = canvas.toLocal(e.data.global, undefined, this._onMovePoint); this._edge.update(EShapeAcceptorEdgeType.TAIL, onMovePoint.x, onMovePoint.y); } } else if (targetIndex === this._points.length - 1) { var canvas = this._diagram.canvas; if (canvas) { var onMovePoint = canvas.toLocal(e.data.global, undefined, this._onMovePoint); this._edge.update(EShapeAcceptorEdgeType.HEAD, onMovePoint.x, onMovePoint.y); } } }; EToolShapeEditLineConnector.prototype.toSnapped = function (target, diagram, result) { var targetIndex = this._targetIndex; if (targetIndex === 0) { var edge = this._edge.find(EShapeAcceptorEdgeType.TAIL, target.x, target.y); if (edge != null) { result.copyFrom(edge.local); } this._edgeTail = edge; } else { var points = this._points; var pointsLength = points.length; if (targetIndex === pointsLength - 1) { var edge = this._edge.find(EShapeAcceptorEdgeType.HEAD, target.x, target.y); if (edge != null) { result.copyFrom(edge.local); } this._edgeHead = edge; } else { diagram.snapper.toSnapped(target, result); } } }; EToolShapeEditLineConnector.prototype.toPoints = function (shape, points, transform) { var result = []; if (shape instanceof EShapeConnectorLine) { var edge = shape.edge; var tailLocal = edge.tail.local; var headLocal = edge.head.local; var transformPosition = shape.transform.position; var px = transformPosition.x; var py = transformPosition.y; var x0 = tailLocal.x - px; var y0 = tailLocal.y - py; var x1 = headLocal.x - px; var y1 = headLocal.y - py; var tailPoint = new Point(x0, y0); result.push(transform.apply(tailPoint, tailPoint)); var bodyValues = shape.body.values; var bodyValuesLength = bodyValues.length; if (0 < bodyValuesLength) { var cx = (x1 + x0) * 0.5; var cy = (y1 + y0) * 0.5; var dx = x1 - x0; var dy = y1 - y0; var a = Math.atan2(dy, dx); var l = Math.sqrt(dx * dx + dy * dy); var c = Math.cos(a) * l; var s = Math.sin(a) * l; for (var i = 0; i < bodyValuesLength; i += 2) { var x = bodyValues[i + 0]; var y = bodyValues[i + 1]; var x2 = cx + c * x - s * y; var y2 = cy + c * y + s * x; var middlePoint = new Point(x2, y2); result.push(transform.apply(middlePoint, middlePoint)); } } var headPoint = new Point(x1, y1); result.push(transform.apply(headPoint, headPoint)); } return result; }; EToolShapeEditLineConnector.prototype.newShape = function (values, segments, style, oldShape) { var boundary = toPointsBoundary(values, [0, 0, 0, 0]); var cx = (boundary[2] + boundary[0]) * 0.5; var cy = (boundary[3] + boundary[1]) * 0.5; var sx = boundary[2] - boundary[0]; var sy = boundary[3] - boundary[1]; var result = oldShape.clone(); var transform = result.transform; var transformPosition = transform.position; var px = transformPosition.x; var py = transformPosition.y; result.lock(EShapeLockPart.UPLOADED); transformPosition.set(px + cx, py + cy); transform.scale.set(1, 1); transform.rotation = 0; transform.skew.set(0, 0); result.points.toFitted(sx, sy); result.size.set(sx, sy); result.edge.lock(); result.body.set(EShapeConnectorBodies.from(values, 0, 0)); var local = this._work; if (2 <= values.length) { local.set(px + values[0], py + values[1]); } else { local.set(px, py); } var edgeTail = this._edgeTail; if (edgeTail !== undefined) { if (this.isTailAccepted(result, local, edgeTail)) { this.onTailAccepted(result, local, edgeTail); } } if (2 <= values.length) { var valuesLength = values.length; local.set(px + values[valuesLength - 2], py + values[valuesLength - 1]); } else { local.set(px, py); } var edgeHead = this._edgeHead; if (edgeHead !== undefined) { if (this.isHeadAccepted(result, local, edgeHead)) { this.onHeadAccepted(result, local, edgeHead); } } result.edge.unlock(); result.unlock(EShapeLockPart.UPLOADED, true); return result; }; EToolShapeEditLineConnector.prototype.isDanglingEdgeAllowed = function () { var _a; return (_a = this._options.dangling) !== null && _a !== void 0 ? _a : false; }; EToolShapeEditLineConnector.prototype.isTailAccepted = function (connector, local, edge) { if (edge == null) { return this.isDanglingEdgeAllowed(); } else { return true; } }; EToolShapeEditLineConnector.prototype.onTailAccepted = function (connector, local, edge) { if (edge != null) { connector.edge.tail.set(edge.shape, edge.id, edge.x, edge.y, undefined, undefined, undefined, undefined, undefined, edge.acceptor.side); } else { connector.edge.tail.set(null, null, null, null, undefined, local.x, local.y, undefined, undefined, EShapeAcceptorEdgeSide.TOP); } }; EToolShapeEditLineConnector.prototype.isHeadAccepted = function (connector, local, edge) { if (edge == null) { return this.isDanglingEdgeAllowed(); } else { return true; } }; EToolShapeEditLineConnector.prototype.onHeadAccepted = function (connector, local, edge) { if (edge != null) { connector.edge.head.set(edge.shape, edge.id, edge.x, edge.y, undefined, undefined, undefined, undefined, undefined, edge.acceptor.side); } else { connector.edge.head.set(null, null, null, null, undefined, local.x, local.y, undefined, undefined, EShapeAcceptorEdgeSide.TOP); } }; return EToolShapeEditLineConnector; }(EToolShapeEditLineBase)); export { EToolShapeEditLineConnector }; //# sourceMappingURL=e-tool-shape-edit-line-connector.js.map