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

27/09/2015

Закрытие активного документа

На форуме один из пользователей говорит, что он хочет закрыть активный документ и заново его открыть. Он прочитал на блоге Jeremy как это сделать, но все же у него остались некоторые поросы, хоть я их и не очень понялL.

Как мы знаем, для закрытия документа используется метод UIDocument.SaveAndClose() или Document.Close(). Однако, при попытке закрыть активный документ, мы получаем исключение InvalidOperationException – нельзя закрыть активный документ с помощью API.

Поэтому нужно использовать что-то другое. Один из способов, предложенных Jeremy – послать сообщение Ctrl+F4 в окно Revit, т.е.:

Код - C#: [Выделить]
  1. SendKeys.SendWait( "^{F4}" );

Другой способ – открыть и активировать пустой документ и затем закрыть желаемый документ. Как раз этот метод пользователь использовал, и он прекрасно сработал.

Для обобщения информация о чем эта статья, я приведу код:

Код - C#: [Выделить]
  1. var placeholderFile = @"C:\placeholder.rvt";
  2. var doc = commandData.Application.ActiveUIDocument.Document;
  3. var file = doc.PathName;
  4. var docPlaceholder = commandData.Application.OpenAndActivateDocument(placeholderFile);
  5. doc.Close(false);
  6. var uidoc = commandData.Application.OpenAndActivateDocument(file);
  7. docPlaceholder.Document.Close(false);

Т.е. алгоритм таков:

  • Открываем и активируем пустой документ
  • Закрываем требуемый документ
  • Открываем его заново и активируем
  • Закрываем пустой документ.

На этом всеJ

Источник: http://adndevblog.typepad.com/aec/2015/07/revitapi-close-active-document.html

Автор перевода: Виктор Чекалин

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

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