@wcardinal/wcardinal-geditor
Version:
WebGL-based graphic editor, tester and viewer for supervisory systems
88 lines • 3.31 kB
JavaScript
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