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

ADN Club => Revit API => Тема начата: Biorn от 04-06-2018, 18:24:51

Название: Работа с документом внутри обработки события
Отправлено: Biorn от 04-06-2018, 18:24:51
Добрый день. У меня есть описание события, его обработчик и подписка на событие.
Внутрь обработчика я поместил код, который будет изменять документ при триггере самого события. Однако, код не срабатывает.
Мне объяснили, что проблема в потоках. Ревит не поддерживает многопоточность и код не выполняется из-за отсутствия свободного потока. Предложили запускать событие Idling во время совершения действия. Однако, я не знаю каким образом поместить подписку и отписку одного события внутрь другого события.
Есть ли какие нибудь способы заставить триггер события делать изменения внутри документа (с помощью транзакций или без)?

Еще я думал создать отдельно public result класс и запустить его выполнение внутри этого события, но не могу в обработчик передать commandData.

Обработчик события:
Код - C# [Выбрать]
  1. private void OnDocumentChanged(object sender, DocumentChangedEventArgs e)
  2.         {        
  3.             Document doc = e.GetDocument();
  4.             IndependentTag newTag = FindAdding(doc, e.GetAddedElementIds());
  5.  
  6.             if (null != newTag)
  7.             {
  8.                 //здесь должен быть код
  9.             }
  10.         }

Класс для выполнения:
Код - C# [Выбрать]
  1.  public Result ses(ExternalCommandData commandData, ref string message, ElementSet elements)
  2.         {
  3.             UIApplication uiApp = commandData.Application;
  4.             Document doc = uiApp.ActiveUIDocument.Document;
  5.             View vid = doc.ActiveView;
  6.             //код изменения документа
  7.             return Result.Succeeded;
  8.         }
  9.  
Название: Re: Работа с документом внутри обработки события
Отправлено: Александр Игнатович от 04-06-2018, 18:29:01
Событие OnDocumentChanged является read-only, тут внесение изменений в документы запрещено.

То, чего Вы хотите, реализуется с помощью Dynamic Model Updater, посмотрите примеры в SDK / сети, их достаточно, если останутся вопросы - пишите в этой или новой теме.
Название: Re: Работа с документом внутри обработки события
Отправлено: Biorn от 04-06-2018, 18:33:14
Вот оно что. Значит буду разбирать DMU
Название: Re: Работа с документом внутри обработки события
Отправлено: Виктор Чекалин от 06-06-2018, 08:39:18
На всякий случай оставлю тут ссылочку на статью DocumentChanged VS Dynamic Model Updater (http://adn-cis.org/documentchanged-vs-dynamic-model-updater.html)