Обнаружение близости двух объектов в одном NSView - PullRequest
2 голосов
/ 11 августа 2010

Я работаю над программой для рисования и пытаюсь найти лучший способ имитировать поведение «магнита», которое можно найти в таких приложениях, как Omnigraffle.Идея такова: поскольку линия рисуется между двумя объектами (визуальные объекты на экране, а не объекты ООП), когда линия от первого объекта приближается ко второму, «магнит» или «узел» на втором будет подсвечиваться или второйобъект будет выделен.

Я хотел сохранить все экранные объекты в массиве и использовать уведомления для отправки этому массиву позиции конца строки по мере его перемещения.Таким образом, я мог бы заставить каждый объект выполнить свое собственное сравнение и сказать: «Эй, у меня есть узел рядом с линией, думаю, я его зажгу».

Мне также было интересно, будет ли такой же подход, если я захочу иметь два объекта, например, коробки, которые будут слипаться вместе, когда они соприкасаются друг с другом.Таким образом, было бы возможно выстроить прямоугольники с одинаковыми координатами X или Y

Меня не беспокоит выделение или привязка линии к положению узла, мне просто интересноо наилучшем способе реализации части «обнаружения близости краев» этой проблемы.

1 Ответ

0 голосов
/ 11 августа 2010

Если вы используете CGRect типы, я бы предложил вам использовать две функции CGRectInset() и CGRectIntersectsRect()

Использовать CGRectInset() дляразверните один или оба канала, а затем используйте CGRectIntersectsRect(), чтобы увидеть, есть ли у вас совпадение.Вы также можете использовать (в то же время) CGRectIntersectsRect() на оригинальных ритах, чтобы увидеть, что у вас только есть близко и не закрывают друг друга.

...