@scalenc/nc-format
Version:
Library for handling TRUMPF NC file format.
60 lines • 2.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Transformation = void 0;
const Constants_1 = require("./Constants");
const Variables_1 = require("./Variables");
class Transformation {
machine;
variables = new Variables_1.Variables();
constructor(machine) {
this.machine = machine;
}
applyToVars(variables) {
this.applyToAllLinearAxes(variables, this.applyToPoint.bind(this));
}
applyReverseToVars(variables) {
this.applyToAllLinearAxes(variables, this.applyReverseToPoint.bind(this));
}
applyToPoint(point) {
return this.applyTranslationTo(this.applyRotationTo(point, 1.0), 1.0);
}
applyReverseToPoint(point) {
return this.applyRotationTo(this.applyTranslationTo(point, -1.0), -1.0);
}
applyToAllLinearAxes(variables, applyFunc) {
this.machine.linearAxes.forEach((a) => {
if (a.names.length >= 2) {
this.applyToGivenVars(variables, a.names[0], a.names[1], applyFunc, true);
}
if (a.centerNames.length >= 2) {
this.applyToGivenVars(variables, a.centerNames[0], a.centerNames[1], applyFunc, false);
}
});
}
applyToGivenVars(variables, xName, yName, applyFunc, force) {
const x = variables.tryGetNumber(xName);
const y = variables.tryGetNumber(yName);
if (force || x !== undefined || y !== undefined) {
const transformed = applyFunc({ x: x ?? 0, y: y ?? 0 });
variables.setNumber(xName, transformed.x);
variables.setNumber(yName, transformed.y);
}
}
applyRotationTo(point, sign) {
const rotationAngleDeg = sign * this.variables.getNumberOrDefault(Constants_1.Constants.TRANSFORM_ANGLE);
if (!rotationAngleDeg) {
return point;
}
const rotationAngleRad = (Math.PI * rotationAngleDeg) / 180.0;
const cos = Math.cos(rotationAngleRad);
const sin = Math.sin(rotationAngleRad);
return { x: point.x * cos - point.y * sin, y: point.x * sin + point.y * cos };
}
applyTranslationTo(point, sign) {
const translationX = sign * this.variables.getNumberOrDefault(Constants_1.Constants.TRANSFORM_X);
const translationY = sign * this.variables.getNumberOrDefault(Constants_1.Constants.TRANSFORM_Y);
return { x: point.x + translationX, y: point.y + translationY };
}
}
exports.Transformation = Transformation;
//# sourceMappingURL=Transformation.js.map