Autodesk Inventor API. Первые шаги/Взаимодействие с пользователем: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 61:
=== Интерактивное выделение ===
 
Объект InteractionEvents позволяет контролировать процесс выделения объектов в существенно большей степени, чем SelectSet.
Как видим, набор выделенных объектов позволяет довольно легко реализовать подход «объект — действие». Однако следует отдавать себе отчет, что легкость на стороне программиста оборачивается усложнением интерфейса для конечного пользователя. Так, реализованный в примере метод выделения не является оптимальным для получения от пользователя объекта грань, поскольку пользователь должен заранее точно знать, что ваша программа ожидает от него одну и только одну грань и именно грань, а не что-либо иное. Вследствие отсутствия контроля с вашей стороны, пользователь может выделить неподходящие объекты.
 
Интерактивное выделение является мощным инструментом взаимодействия с пользователем благодаря возможности вашего участия в самом процессе выделения объектов. С этой целью поддерживается целый ряд событий, благодаря которым вы можете знать о том, что происходит, и можете повлиять на то, что видит пользователь. Если приглядеться к работе команд самого Инвентора, можно заметить, что для каждой из них характерен собственный стиль поведения, помогающий пользователю выделять лишь те объекты, которые имеют смысл в контексте выполняемой задачи. Например, при вызове команды «Fillet» (Сопряжение) вы можете выделять ребра модели, но не грани, рабочую геометрию и проч. Кроме того, автоматически выделяются и другие ребра, если они связаны с уже выделенным ребром зависимостью касательности. Здесь представлен краткий обзор объектов и событий интерактивного выделения.
 
На рисунке ниже приведена часть объектной модели API, относящаяся к объектам InteractionEvents и SelectEvents.
 
{{Внимание|Здесь будет фрагмент объектной модели}}.
 
 
Последовательность шагов при использовании интерактивного выделения выглядит следующим образом:
* Создается объект InteractionEvents
* Его поведение регулируется заданием соответствующих свойств
* Устанавливается связь с событиями объекта InteractionEvents
* Устанавливается связь с событиями объекта SelectEvents
* Инициируется процесс интерактивного выделения и реакция на послупающие события
 
Рассмотрим этапы реализации процедуры интерактивного выделения ребер, напоминающей поведение команды Fillet. Этот простой пример предлагает пользователю выделить ребро и, как только выделение состоялось, отображает его длину. Первым делом следует создать объект InteractionEvents вызовом метода CreateInteractionEvents объекта CommandManager. Далее следует инициализировать ряд объектов, связывая их с интересующими нас событиями, и задать различные их свойства, чтобы обеспечить желаемое поведение. События есть для объекта InteractionEvents, а также для объектов SelectEvents, MouseEvents и KeyboardEvents, которые можно получить у объекта InteractionEvents.
 
Как только с помощью событий и свойств разных объектов будет задано поведение, можно запустить процесс выделения вызовом метода Start объекта InteractionEvents. Следует отметить, что старт объекта InteractionEvents, как и активизация обычных команд самого Инвентора, прерывает исполнение текущей команды. Справедливо и обратное, старт команды Autodesk Inventor в момент работы InteractionEvents, прерывает исполнение InteractionEvents. Из этого правила есть лишь одно исключение — команды визуализации. Они не прерывают текущую команду, а временно приостанавливают ее выполнение до завершения команды визуализации.
Объект InteractionEvents может предоставить информацию, которая необходима для корректной обработки этих ситуаций.
 
 
 
Эту проблему решает техника интерактивного выделения (interactive selection), в рамках которой сам процесс выделения объектов управляется таким образом, что выбранными могут оказаться только объекты нужного типа.