У меня есть Ярлык в качестве Украшения Линии, следовательно, он - дочерний элемент линии. Эта линия связана с 2 узлами, которые я могу перемещать. При изменении направления линии метка также «вращается», но я хочу, чтобы метка всегда была перпендикулярна экрану (как и этот текст, который вы читаете), чтобы вам не приходилось поворачивать голову. Поэтому я должен применить некоторое вращение, чтобы компенсировать это.
Но setRotate(0)
не имеет никакого эффекта, потому что вращение интерпретируется как локальное вращение родителя.
В качестве обходного пути я могу создать угол, используя atan2 (lineDirection), который представляет угол линии, но я считаю, что лучше просто установить глобальное вращение метки на 0, чтобы оно "не вращалось".
Это решение трансформируется из локального в глобальное, но как мне получить обратное?
public static double globalToLocalAngle(final Node node, double globalAngle){
double yx = node.getLocalToSceneTransform().getMyx();
double yy = node.getLocalToSceneTransform().getMyy();
double angle = Math.atan2(yx - globalAngle, yy - globalAngle);
angle = Math.toDegrees(angle);
angle = angle < 0 ? angle + 360 : angle;
return angle;
}
Так что, если я позвоню label.setRotate(globalToLocalAngle(label, 0))
, внутренний должен вернуть локальный z-rot, а внешний применяет этот угол, чтобы метка оставалась читаемой.
Но это не работает.
Заранее спасибо.