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

ADN Club => Revit API => Тема начата: Ksarrik от 15-08-2021, 10:13:41

Название: Есть ли возможность выполнить действие после команды Revit
Отправлено: Ksarrik от 15-08-2021, 10:13:41
Добрый день. Возникла необходимость. выполнить действие по завершении, выполнения команды 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 и сохранит повторно, то временные элементы останутся не удаленными.
Название: Re: Есть ли возможность выполнить действие после команды Revit
Отправлено: Александр Ривилис от 15-08-2021, 18:21:11
Ksarrik,
Посмотри варианты решения от Jeremy Tammik в https://forums.autodesk.com/t5/revit-api-forum/how-to-find-if-the-execution-of-command-is-complete/m-p/8175861#M32651
Название: Re: Есть ли возможность выполнить действие после команды Revit
Отправлено: architect.bim от 15-08-2021, 22:22:18
Добрый вечер!
Я недавно похожую штуку делал на питоне. При открытом документе семейства мне нужно было нажать пару кнопок в интерфейсе, а затем загрузить семейство в проект.
Метод PostCommand я вызывал из обработчика, который подписывал на событие Idling (в моем случае это позволяло несколько раз вызвать команду Revit (иначе было исключение, что мол нельзя больше одного одновременно). Каждый обработчик нажимал кнопку и сразу отписывался от события Idling. Таким образом я последовательно нажал две кнопки в интерфейсе (закрыть неактивные виды, вырезать геометрию). А затем, после того как пользователь вырезал геометрию, третий обработчик, подписанный тоже на Idling, загружал семейство в проект. Вроде все сработало. Попробуйте =)
Название: Re: Есть ли возможность выполнить действие после команды Revit
Отправлено: Ksarrik от 16-08-2021, 06:40:56
Спасибо, попробую. В принципе аналогичное решение описано в предложенном варианте от Jeremy Tammik, в ответе Александра