Есть ли возможность выполнить действие после команды Revit

Автор Тема: Есть ли возможность выполнить действие после команды Revit  (Прочитано 2328 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн KsarrikАвтор темы

  • ADN OPEN
  • Сообщений: 35
  • Карма: 2
Добрый день. Возникла необходимость. выполнить действие по завершении, выполнения команды Revit. Дело в том что мой метод execute завершается сразу при передаче управления команде Revit, а мне нужно выполнить удаление временных элементов после выполнения команды, то есть нужно отследить момент когда пользователь завершит выполнение команды. Вот пример кода:
Код - C# [Выбрать]
  1. private void TestMetod(UIDocument uiDoc, Element tempElem)
  2. {
  3. Selection selection = uiDoc.Selection;
  4. selection.SetElementIds(new List<ElementId>() { tempElem.Id });
  5. // Вызываем команду создать аналог
  6. RevitCommandId createSimilar = RevitCommandId.LookupPostableCommandId(PostableCommand.CreateSimilar);
  7. uiDoc.Application.PostCommand(createSimilar);
  8. //по завершении нужно удалить элемент tempElem из документа
  9. }
  10.  

Как вариант решения я думаю сохранять временный элемент в отдельном свойстве класса, и обрабатывать событие документа Saving и при сохранении удалять временный элемент, но тогда эти элементы будут долго висеть в документе, хотелось бы удалять их сразу по завершении команды, кроме того если пользователь после сохранения откатит действия назад  используя Ctrl-Z и сохранит повторно, то временные элементы останутся не удаленными.

Отмечено как Решение Ksarrik 15-08-2021, 18:37:13

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн architect.bim

  • ADN OPEN
  • Сообщений: 1
  • Карма: 1
    • BIM Planet
Добрый вечер!
Я недавно похожую штуку делал на питоне. При открытом документе семейства мне нужно было нажать пару кнопок в интерфейсе, а затем загрузить семейство в проект.
Метод PostCommand я вызывал из обработчика, который подписывал на событие Idling (в моем случае это позволяло несколько раз вызвать команду Revit (иначе было исключение, что мол нельзя больше одного одновременно). Каждый обработчик нажимал кнопку и сразу отписывался от события Idling. Таким образом я последовательно нажал две кнопки в интерфейсе (закрыть неактивные виды, вырезать геометрию). А затем, после того как пользователь вырезал геометрию, третий обработчик, подписанный тоже на Idling, загружал семейство в проект. Вроде все сработало. Попробуйте =)

Оффлайн KsarrikАвтор темы

  • ADN OPEN
  • Сообщений: 35
  • Карма: 2
Спасибо, попробую. В принципе аналогичное решение описано в предложенном варианте от Jeremy Tammik, в ответе Александра