Рис. 11.2. Расстояния от положения указки до отрезков Используя устройство размещения курсора, можно отобразить указанную точку экрана в точку в глобальных координатах с помощью геометрических преобразований и преобразований точки наблюдения, заданных для этой сцены. Затем глобальные координаты точки можно сравнить с координатами границ объектов. Если указка находится в пределах границ одного объекта, объект, выбранный с ее помощью, идентифицирован. Далее можно использовать название, координаты или другую информацию об объекте и применить желаемое преобразование или выполнить необходимое редактирование. Однако, если положение указки находится на границе нескольких объектов, необходимы дополнительные проверки. В зависимости от типа выбираемого объекта и сложности сцены может потребоваться несколько уровней поиска для идентификации объекта, выбранного с помощью указки. Например, если мы пытаемся указать на сферу, которая в координатном пространстве накладывается на некоторый трехмерный объект, положение указки можно сравнивать с координатами отдельных граней поверхностей двух объектов. Если эта проверка не даст результатов, можно проверять границы отдельных отрезков.
Выбор с помощью указки можно упростить, если не выполнять проверку границ для граней поверхностей и отрезков объекта. Если указка находится внутри границ нескольких объектов, процедура выбора с помощью указки может просто возвращать список всех возможных выбранных объектов.
Рис. 11.3. Окно выбора с координатами центра (хр,ур), шириной w и высотой h
Другой метод выбора с помощью указки заключается в том, что с выбранным положением курсора соотносится окно выбора (pick window). Окно выделения центрировано в месте расположения курсора, как показано на рис. 11.3, и, чтобы определить, какие объекты пересекают границы окна, используются процедуры отсечения. Для выбора линий размеры окна w и h можно сделать столь малыми, что границы окна будет пересекать только один отрезок. В некоторых графических пакетах реализован трехмерный выбор, для чего сцена перестраивается с преобразованием точки наблюдения и проектирования, а в качестве окна отсечения используется окно выбора. При такой перестройке на экране не отображается ничего, но применяются процедуры отсечения, позволяющие определить, какие объекты находятся в отображаемом объеме, выделенном с помощью указки. Для каждого объекта в этом объеме может затем в форме списка выдаваться информация о дальнейшей обработке. В данный список включается такая информация, как название объекта и карта глубин, причем информация о глубине может использоваться для выделения ближайшего объекта в выбранном отображаемом объеме.
Облегчить выбор позволяет подсветка. Чтобы это реализовать, например, можно последовательно подсвечивать те объекты, границы которых накладываются на положение указки (или окно выбора). Во время подсветки объекта пользователь, используя клавиатуру, “принимает” или “отклоняет” его. Это продолжается до тех пор, пока пользователь не примет подсвеченный объект в качестве выбранного объекта. Другой вариант - просто последовательно подсвечивать все объекты на сцене, не выбирая положение курсора. Последовательность подсветки инициализируется нажатием кнопки или функциональной клавиши, а с помощью второй кнопки можно остановить процесс в момент, когда подсвечен желаемый объект. Если при такой схеме придется перебирать множество объектов, для ускорения процесса подсветки используются дополнительные клавиши или кнопки. Одна кнопка инициирует быструю последовательную подсветку структур, вторая - останавливает процесс, а третья используется для медленного возврата по последовательности подсвеченных объектов. В завершение можно нажать клавишу остановки и закончить процедуру выбора с помощью указки.