@tokens-studio/graph-engine
Version:
An execution engine to handle Token Studios generators and resolvers
60 lines • 2.2 kB
JavaScript
import { BooleanSchema, FloatCurveSchema } from '../../schemas/index.js';
import { Node } from '../../programmatic/node.js';
import { setToPrecision } from '../../utils/precision.js';
export default class NodeDefinition extends Node {
static title = 'Flip Float Curve';
static type = 'studio.tokens.curve.flipFloat';
static description = 'Flips a float curve horizontally, vertically, or both';
constructor(props) {
super(props);
this.addInput('curve', {
type: FloatCurveSchema
});
this.addInput('flipHorizontal', {
type: {
...BooleanSchema,
default: false
}
});
this.addInput('flipVertical', {
type: {
...BooleanSchema,
default: false
}
});
this.addOutput('curve', {
type: FloatCurveSchema
});
}
flipPoint(point, flipH, flipV) {
const [x, y] = point;
return [
setToPrecision(flipV ? 1 - x : x, 5),
setToPrecision(flipH ? 1 - y : y, 5)
];
}
execute() {
const { curve, flipHorizontal, flipVertical } = this.getAllInputs();
if (!flipHorizontal && !flipVertical) {
this.outputs.curve.set(curve);
return;
}
const flippedSegments = curve.segments.map(segment => this.flipPoint(segment, flipHorizontal, flipVertical));
const flippedControlPoints = curve.controlPoints.map(([c1, c2]) => [
this.flipPoint(c1, flipHorizontal, flipVertical),
this.flipPoint(c2, flipHorizontal, flipVertical)
]);
// If flipping horizontally, we need to reverse the order of points
if (flipHorizontal) {
flippedSegments.reverse();
flippedControlPoints.reverse();
// Also swap control points within each pair when flipping horizontally
flippedControlPoints.forEach(points => points.reverse());
}
this.outputs.curve.set({
segments: flippedSegments,
controlPoints: flippedControlPoints
});
}
}
//# sourceMappingURL=flipFloatCurve.js.map