ADN Open CIS
Сообщество программистов Autodesk в СНГ

09/03/2015

Открытие файла проекта в событиях Revit API

Вопрос: Довольно понятная и четкая ошибка возникает при попытке выполнить метод Application.OpenandActivateDocument() дважды (т.е. пока нет активных документов, метод работает).

Я пробую выполнить этот метод в обработчике события Idling. Я думал я могу выполнять открытие документа в обработчике события.

Ответ: Помогла ли статья закрытие активного документа (на англ.)?

Ответ: Джереми, я прошелся по вашему блогу, перед тем как спрашивать и ту статью я читал.

Я пытался закрыть документ, но получил другую ошибку. Думаю, Process.Start может помочь, но мне не нравится этот метод, так как у меня не будет ссылки на документ в этом случае. Может быть можно пройтись по всем документам и найти нужный по имени файла?

Первый вызов метода работает, второй – нет.

Я создал проект на GitHub, чтобы совместно решить проблему.

Ответ от Arnošt Löbel: Мне тоже не очень нравится решение Джереми (и он об этом знает)

Хотя и открытие нового активного документа не разрешено в обработчиках событий, когда уже есть открытый и активный документ, должна быть какая-то альтернатива. Мне кажется у нас реализован механизм External Events, и в них нет подобных ограничений. Соответственно, пользователи, которые использовали событие Idling могут переключиться на использование External Events и это должно сработать.

Ну и конечно, как вы уже заметили, открытие базы данных документа не тоже имеет подобных ограничений.

В примерах к Revit SDK есть пример использования External Events, а также в файле справке Revit API.

Ответ: Я нашел пример использования в блоге Джереми и обновил свой проект используя External Events и действительно все заработало.

Спасибо за помощь. Я обновил пример на GitHub.

В последней версии демонстрируется как использование ExternalEvent решает проблему ошибки «Не разрешено переключение активного документа в обработке событий API», при попытке открыть документ (больше чем один документ) из команды или в обработчике события.

Также показывается как объявить и вызывать внешние события.

Источник: http://thebuildingcoder.typepad.com/blog/2015/03/opening-and-activating-document-in-an-event-handler.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=1916

Опубликовано 09.03.2015