UNPKG

@wcardinal/wcardinal-geditor

Version:

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

88 lines 3.31 kB
import { __extends } from "tslib"; import { EShapeCapability } from "@wcardinal/wcardinal-ui"; import { Rectangle } from "pixi.js"; var EToolShapeEditLineHitArea = /** @class */ (function (_super) { __extends(EToolShapeEditLineHitArea, _super); function EToolShapeEditLineHitArea(parent) { var _this = _super.call(this) || this; _this._parent = parent; _this._capability = EShapeCapability.LINE_TAIL | EShapeCapability.LINE_HEAD; return _this; } Object.defineProperty(EToolShapeEditLineHitArea.prototype, "capability", { get: function () { return this._capability; }, set: function (capability) { this._capability = capability; }, enumerable: false, configurable: true }); EToolShapeEditLineHitArea.prototype.contains = function (x, y) { var parent = this._parent; if (parent.isEditing()) { return true; } var points = parent.points; var pointsClosed = parent.closed; var capability = this._capability; var hasTail = !!(capability & EShapeCapability.LINE_TAIL); var hasHead = !!(capability & EShapeCapability.LINE_HEAD); // Anchors var s = parent.getAnchorSize() * 2; var thresholdLine = s * s; var thresholdAnchor = thresholdLine * 2; for (var i = hasTail ? 0 : 1, imax = points.length - (hasHead ? 0 : 1); i < imax; ++i) { var point = points[i]; var dx = point.x - x; var dy = point.y - y; var d = dx * dx + dy * dy; if (d < thresholdAnchor) { parent.setLastHitAnchor(i); return true; } } // Lines for (var i = 0, imax = points.length - 1; i < imax; ++i) { var p0 = points[i + 0]; var p1 = points[i + 1]; var hitPoint = this.calcHitPoint(x, y, p0.x, p0.y, p1.x, p1.y, thresholdLine); if (0 <= hitPoint) { parent.setLastHitSegment(i, hitPoint); return true; } } if (hasTail && hasHead && pointsClosed) { var p0 = points[points.length - 1]; var p1 = points[0]; var hitPoint = this.calcHitPoint(x, y, p0.x, p0.y, p1.x, p1.y, thresholdLine); if (0 <= hitPoint) { parent.setLastHitSegment(points.length - 1, hitPoint); return true; } } parent.setLastHitSegment(-1, -1); return false; }; EToolShapeEditLineHitArea.prototype.calcHitPoint = function (x, y, p0x, p0y, p1x, p1y, threshold) { var d0x = p1x - p0x; var d0y = p1y - p0y; var d1x = x - p0x; var d1y = y - p0y; var a = d0x * d0x + d0y * d0y; var b = d0x * d1x + d0y * d1y; var c = d1x * d1x + d1y * d1y; if (0.0001 < a) { var t = Math.max(0, Math.min(1, b / a)); var d = a * t * t - 2 * b * t + c; if (d < threshold) { return t; } } return -1; }; return EToolShapeEditLineHitArea; }(Rectangle)); export { EToolShapeEditLineHitArea }; //# sourceMappingURL=e-tool-shape-edit-line-base-hit-area.js.map