JavaFX получит глобальное вращение ребенка? - PullRequest
0 голосов
/ 14 октября 2019

У меня есть Ярлык в качестве Украшения Линии, следовательно, он - дочерний элемент линии. Эта линия связана с 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, а внешний применяет этот угол, чтобы метка оставалась читаемой.

Но это не работает.

Заранее спасибо.

...