Отслеживайте изменения элемента или событие редактирования элемента в Revit 2018/2019

Я работаю над проектом, в котором арматура для размещения элементов в Revit 2018 и Revit 2019. После того, как мой код регенерирует арматуру арматуры для основного элемента, я не могу знать, редактировал ли пользователь вручную мой хост или мои арматурные стержни (сгенерированные моим кодом , конечно). Я просто придумал эти 2 идеи:

  1. Храните всю информацию о арматуре и хосте в расширяемом хранилище хоста (буквально каждое свойство, идентификаторы и т. Д.) В то время, когда арматура генерируется моим кодом. Когда я снова вызываю свой код для работы на хосте, я собираюсь сравнить всю текущую информацию с сохраненной информацией в сущности хоста, чтобы выяснить, что было изменено. Ясно, что этот подход будет стоить мне очень дорого и будет иметь огромные потери в производительности.

  2. Отслеживайте все изменения, которые пользователь может сделать с моими арматурными стержнями и хостами, с помощью события «Элемент - отредактирован -». Однако я не могу найти подходящее мероприятие, которое мне подходит. Я пробовал события Element и Document и класс ITransactionFinalizer, но безрезультатно.

Где я могу найти мероприятие, которое хочу, или как добиться того, чего я хотел? Приветствуется другой, лучший подход. Спасибо всем заранее.


person Thế Long    schedule 05.11.2018    source источник
comment
Я только что нашел очень интересный способ получить то, что я хотел. Я сделаю это официальным решением после того, как протестирую его. Вот ссылка для тех, кто столкнулся с той же проблемой: ссылка   -  person Thế Long    schedule 05.11.2018


Ответы (2)


Поздравляем, вы сами заметили ссылку на изменение элемента отслеживания . Я бы тоже на это указал. Вы также можете проверить репозиторий GitHub для этого проекта, а также дополнительную идею проекта:

С нетерпением жду вашего окончательного решения. Если он достаточно общий, чтобы представлять интерес и для других, я хотел бы поделиться им в блоге для вас. Спасибо!

person Jeremy Tammik    schedule 06.11.2018
comment
Спасибо за ответ. Упомянутое вами решение решило мою проблему, но кое-что мне пришло в голову: просто скажу, что я хочу сделать снимок, а затем обновить текущее состояние в моей базе данных, занимает ли этот подход много времени, если проект содержит много моделей? Это может быть хорошим решением, чтобы конечный пользователь мог не показаться плохим. - person Thế Long; 07.11.2018
comment
Считаете ли вы, что небольшие накладные расходы на обновление базы данных при подписке на событие Document changed для каждого небольшого изменения, которое конечный пользователь вносит в документ, могут компенсировать это? Я очень ценю вашу мысль по поводу такого масштаба. - person Thế Long; 07.11.2018
comment
вы можете попробовать использовать событие DocumentChanged, чтобы получать уведомления о каждом изменении. Сколько времени это будет стоить, будет зависеть от вашей конкретной реализации. Думаю, это можно сделать очень быстро и ненавязчиво. Однако действительно ли вам нужно уведомление о каждой отдельной модификации? Как насчет того, чтобы просто реализовать событие таймера Windows, которое запускает внешнее событие Revit API каждые 15 минут или около того? Или любой другой временной интервал, который вы предпочитаете? Это практически не повлияет на производительность. - person Jeremy Tammik; 08.11.2018

Решение, которое я (а также г-н Джереми Таммик) упомянул Изменение элемента отслеживания

это то, что мне нужно, но это слишком общее.

Чтобы получить более подробное решение этой конкретной проблемы, я отфильтровал свою основу арматурных стержней (балка, колонна, стена…), получил все размещенные арматурные стержни, а затем сделал снимок их параметров.

Небольшие заметки для новичков вроде меня:

  1. Некоторые параметры будут меняться в зависимости от других. Если пользовательская модификация - это то, что вам нужно, отфильтруйте измененный параметр ReadOnly, чтобы немного сузить список.

  2. Если вы удалите всю арматуру из основы или добавите арматуру в пустую основу, некоторые параметры будут удалены или добавлены соответственно.

person Thế Long    schedule 07.11.2018