JavaFX: PannableCanvas: получить CenterX / Y - PullRequest
0 голосов
/ 28 июня 2018

Я использовал настроенный PannableCanvas, который был представлен здесь , и я столкнулся с небольшой проблемой. Мое программное обеспечение почти закончено, и последнее, что мне нужно сделать, это добавить поддержку для появления узлов в центре экрана. Итак, что я сделал изначально:

nodeTranslateX/Y = -pannableCanvas.getTranslateX/Y

И это работало до тех пор, пока я не понял, что если вы увеличиваете / уменьшаете масштаб (где масштаб больше не равен 1,0), он полностью портит его, и узел начинает помещаться в странные места. Тогда я попробовал:

nodeTranslateX/Y = -pannableCanvas.getTranslateX/Y * pannableCanvas.getScale()

И это тоже не сработало! Его еще больше выбрасывают из строя.

Я пробовал многочисленные комбинации преобразований, таких как деление шкалы, инвертирование шкалы, используя screenToLocal (), вы называете это. Никто из них не работал. Проблема в том, что когда вы уменьшаете масштаб, translateX / Y холста корректируется с учетом масштаба, но это дает вам такие вещи, как 1500, когда узлы должны появляться с нормальными координатами, такими как 300.

Есть ли способ получить координаты верхнего левого угла экрана относительно холста? Я совершенно не знаю, как это исправить. Опять же, мне просто нужно иметь возможность порождать узел в центре экрана. Что мне делать?

Спасибо, что уделили время!

1 Ответ

0 голосов
/ 28 июня 2018

Я получил его на работу, сделав это:

Window window = scene.getWindow();
double screenCenterX = (window.getX() + window.getWidth()/2);
double screenCenterY = (window.getY() + window.getHeight()/2);

Point2D point = pannablePane.screenToLocal(screenCenterX, screenCenterY);

double nodeX = point.getX() - MyNodeImplementation.WIDTH/2;
double nodeY = point.getY() - MyNodeImplementation.HEIGHT/2;

Я ошибочно принял screenX / Y за то, что он находится внутри окна (т.е. Т.е. центр = ШИРИНА / 2, ВЫСОТА / 2), но вместо этого вы фактически должны принять во внимание фактическую позицию окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...