Тест на попадание в объект Graphics2D? - PullRequest
1 голос
/ 09 февраля 2012

У меня есть несколько объектов Graphics2D (Line2D, Rectangle2D, Ellipse2D, Rectangle2D) и GeneralPath.Я знаю, что если я хочу выполнить проверку на них, я мог бы использовать метод .contains (Point), но мне нужно выполнить проверку на этих объектах, когда они не заполнены. Поэтому я просто хочу проверить, нажал ли пользователь на их объекты.граница / линия.Мне не нужно беспокоиться о толщине границы на данный момент.Допустим, мне просто нужно беспокоиться, если пользователь щелкнул в пределах 10 пикселей от границы / линии.

У меня есть MouseListener, где я могу получить координаты щелчка мыши, и мои объекты Graphics2D хранятся вструктура данных, которую я повторяю.Я просто не знаю, как пройти тест на линии / границы.

Будем благодарны за любые предложения!

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

У меня никогда не было причин его использовать, но, похоже, ваша лучшая ставка - метод Graphics2D.hit() здесь .

Просто используйте прямоугольник размером 1px * 1px в позиции мыши и установите для параметра onStroke значение true и убедитесь, что свойства Clip, Transform и Stroke установлены правильно (как указано в javadoc), прежде чем выполнять звоните.

1 голос
/ 09 февраля 2012

Вот что я бы сделал:

Ellipse2D case: Каждый раз, когда вы хотите увидеть, коснулась ли ваша мышь края Ellipse2D, создайте Ellipse2D, который немного больше оригинала, и Ellipse2D, который немного меньше. Если ваша точка щелчка мыши находится внутри большего Ellipse2D, но вне меньшего, то вы щелкнули «близко» к краю исходной формы.

Rectangle2D case: Решите это так же, как Ellipse2D - сделайте одну больше, одну поменьше, и определите, находится ли ваша мышь внутри большей, но снаружи меньшей.

корпус Line2D: Создайте Rectangle2D, который окружает ваш Line2D некоторой заданной шириной. Затем посмотрите, находится ли ваша мышь внутри этого Rectangle2D.

...