scaleX не работает, всегда кажется, что дает положительное значение. В конце концов мне пришлось сделать это с матрицей, чтобы получить ответ. Это основано на идее, что мы знаем, что матрица всегда содержит двумерное вращение, и мы знаем угол, поэтому мы можем избавиться от вращения от элементов матрицы, чтобы просто оставить нас со шкалой. Это ужасно, но, похоже, работает.
Кроме того, вращение иногда проявляется как NaN, особенно когда элемент перевернут. использование значения skewX, кажется, работает для вещей, которые, как вы знаете, не перекошены, но я хочу, чтобы мой экспортер мог обрабатывать перекошенные элементы, поэтому я думаю, что это может послужить основой для другого вопроса.
var rotationRadians;
if(isNaN(someElement.rotation)) {
rotationRadians = someElement.skewX * Math.PI / 180;
}
else {
rotationRadians = someElement.rotation * Math.PI / 180;
}
var sinRot = Math.sin(rotationRadians);
var cosRot = Math.cos(rotationRadians);
var SOME_EPSILON = 0.01;
var flipScaleX, flipScaleY;
if(Math.abs(cosRot) < SOME_EPSILON) {
// Avoid divide by zero. We can use sine and the other two elements of the matrix instead.
flipScaleX = (someElement.matrix.b / sinRot);
flipScaleY = (someElement.matrix.c / -sinRot);
}
else {
flipScaleX = someElement.matrix.a / cosRot;
flipScaleY = someElement.matrix.d / cosRot;
}
flipScaleX выходит на ~ -1, если он перевернут горизонтально, на ~ 1, если нет. flipScaleY равно ~ -1, если перевернуто вертикально, ~ 1, если нет.