0
Fork 0
mirror of https://github.com/penpot/penpot-exporter-figma-plugin.git synced 2024-12-23 14:14:05 -05:00
penpot-exporter-figma-plugin/plugin-src/transformers/partials/transformRotationAndPosition.ts
Jordi Sala Morales e5f2943532
Implement rotation for frames and sections (#163)
* Implement rotation for frames and sections

* wip

* finish implementation

* add changelog
2024-06-14 16:28:01 +02:00

50 lines
1.3 KiB
TypeScript

import { applyInverseRotation, hasRotation } from '@plugin/utils';
import { ShapeBaseAttributes, ShapeGeomAttributes } from '@ui/lib/types/shapes/shape';
export const transformRotationAndPosition = (
node: LayoutMixin,
baseRotation: number
): Pick<ShapeBaseAttributes, 'transform' | 'transformInverse' | 'rotation'> &
Pick<ShapeGeomAttributes, 'x' | 'y'> => {
const rotation = node.rotation + baseRotation;
const x = node.absoluteTransform[0][2];
const y = node.absoluteTransform[1][2];
if (!hasRotation(rotation) || !node.absoluteBoundingBox) {
return {
x,
y,
rotation,
transform: undefined,
transformInverse: undefined
};
}
const referencePoint = applyInverseRotation(
{ x, y },
node.absoluteTransform,
node.absoluteBoundingBox
);
return {
...referencePoint,
rotation: -rotation < 0 ? -rotation + 360 : -rotation,
transform: {
a: node.absoluteTransform[0][0],
b: node.absoluteTransform[1][0],
c: node.absoluteTransform[0][1],
d: node.absoluteTransform[1][1],
e: 0,
f: 0
},
transformInverse: {
a: node.absoluteTransform[0][0],
b: node.absoluteTransform[0][1],
c: node.absoluteTransform[1][0],
d: node.absoluteTransform[1][1],
e: 0,
f: 0
}
};
};