UNPKG

@wcardinal/wcardinal-geditor

Version:

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

178 lines 6.86 kB
import { __extends } from "tslib"; import { EShapeCircle, EShapeContainer, EShapeLockPart, EShapeRectangle, ESnapperModifierAnchor } from "@wcardinal/wcardinal-ui"; import { EToolSelectModifierHitArea } from "./e-tool-select-modifier-hit-area"; var EToolSelectModifier = /** @class */ (function (_super) { __extends(EToolSelectModifier, _super); function EToolSelectModifier(options) { var _this = _super.call(this) || this; _this.selected = false; _this.index = 0; _this._width = 0; _this._height = 0; _this._scaleBound = 1; _this._scaleBoundInverse = 1; _this._isAllowed = true; _this._lastHitAnchor = ESnapperModifierAnchor.NONE; if (options == null || options.editable !== false) { _this.cursor = "grab"; _this.interactive = true; _this.hitArea = new EToolSelectModifierHitArea(_this); } else { _this.interactive = false; } _this.group = false; _this._anchorBase = new EShapeRectangle().attach(_this); _this._anchorsScale = [ new EShapeRectangle().attach(_this), new EShapeRectangle().attach(_this), new EShapeRectangle().attach(_this), new EShapeRectangle().attach(_this), new EShapeRectangle().attach(_this), new EShapeRectangle().attach(_this), new EShapeRectangle().attach(_this), new EShapeRectangle().attach(_this) ]; _this._anchorRotate = new EShapeCircle().attach(_this); return _this; } EToolSelectModifier.prototype.onPrerender = function () { var scale0 = this.getParentScale(); var scale1 = this._scaleBound; if (0.001 < Math.abs(scale0 - scale1)) { this._scaleBound = scale0; this._scaleBoundInverse = 1 / scale0; this.update(); } }; EToolSelectModifier.prototype.render = function (renderer) { if (!this.visible || this.worldAlpha <= 0 || !this.renderable) { return; } this.onPrerender(); _super.prototype.render.call(this, renderer); }; EToolSelectModifier.prototype.getParentScale = function () { var parent = this.parent; if (parent != null) { var parentParent = parent.parent; if (parentParent != null) { return parentParent.scale.y; } } return 1; }; Object.defineProperty(EToolSelectModifier.prototype, "factor", { get: function () { return this._scaleBoundInverse; }, enumerable: false, configurable: true }); Object.defineProperty(EToolSelectModifier.prototype, "width", { get: function () { return this._width; }, set: function (width) { this._width = width; }, enumerable: false, configurable: true }); Object.defineProperty(EToolSelectModifier.prototype, "height", { get: function () { return this._height; }, set: function (height) { this._height = height; }, enumerable: false, configurable: true }); EToolSelectModifier.prototype.getLastHitAnchor = function () { return this._lastHitAnchor; }; EToolSelectModifier.prototype.setLastHitAnchor = function (anchor) { var result = this._lastHitAnchor; this._lastHitAnchor = anchor; return result; }; EToolSelectModifier.prototype.getAnchorSize = function () { return 7 * this._scaleBoundInverse; }; EToolSelectModifier.prototype.getAnchorRotationDistance = function () { return (0 <= this._height ? -18 : +18) * this._scaleBoundInverse; }; EToolSelectModifier.prototype.getAnchorRotationSize = function () { return 5 * this._scaleBoundInverse; }; EToolSelectModifier.prototype.update = function () { var color = this.group ? 0x1ef087 : 0x1e87f0; var width = this._width; var height = this._height; var scaleInverse = this._scaleBoundInverse; var s = this.getAnchorSize(); var w = width; var h = height; var p = w * 0.5; var q = h * 0.5; var d = this.getAnchorRotationDistance(); var r = 2 * this.getAnchorRotationSize(); var l = 2 * scaleInverse; var o = 1.5 * l; // Anchor base var anchorBase = this._anchorBase; anchorBase.lock(EShapeLockPart.UPLOADED); anchorBase.fill.enable = false; anchorBase.stroke.set(true, color, 0.333, l, 2); anchorBase.transform.position.set(width * 0.5, height * 0.5); anchorBase.size.set(width, height); anchorBase.unlock(EShapeLockPart.UPLOADED, true); // Anchor for rotation var anchorRotate = this._anchorRotate; anchorRotate.lock(EShapeLockPart.UPLOADED); anchorRotate.stroke.enable = false; anchorRotate.fill.set(true, color, 1.0); anchorRotate.size.set(r, r); anchorRotate.transform.position.set(p, d); anchorRotate.unlock(EShapeLockPart.UPLOADED, true); // Anchor for scaling var anchorsScale = this._anchorsScale; for (var i = 0, imax = anchorsScale.length; i < imax; ++i) { var anchorScale = anchorsScale[i]; anchorScale.lock(EShapeLockPart.UPLOADED); anchorScale.stroke.enable = false; anchorScale.fill.set(true, color, 1.0); anchorScale.size.set(s, s); } anchorsScale[0].transform.position.set(-o, -o); anchorsScale[1].transform.position.set(+o + w, -o); anchorsScale[2].transform.position.set(-o, +o + h); anchorsScale[3].transform.position.set(+o + w, +o + h); anchorsScale[4].transform.position.set(p, -o); anchorsScale[5].transform.position.set(+o + w, q); anchorsScale[6].transform.position.set(p, +o + h); anchorsScale[7].transform.position.set(-o, q); for (var i = 0, imax = anchorsScale.length; i < imax; ++i) { anchorsScale[i].unlock(EShapeLockPart.UPLOADED, true); } }; EToolSelectModifier.prototype.allow = function () { this._isAllowed = true; }; EToolSelectModifier.prototype.isAllowed = function () { return this._isAllowed; }; EToolSelectModifier.prototype.disallow = function () { this._isAllowed = false; }; EToolSelectModifier.prototype.destroy = function () { var parent = this.parent; if (parent) { parent.removeChild(this); } }; return EToolSelectModifier; }(EShapeContainer)); export { EToolSelectModifier }; //# sourceMappingURL=e-tool-select-modifier.js.map