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