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

ADN Club => Revit API => Тема начата: Павел Тер-Микаэлян от 12-08-2020, 13:42:40

Название: Надстройки Revit. Панель FreeAddIns. Мои разработки.
Отправлено: Павел Тер-Микаэлян от 12-08-2020, 13:42:40
Здравствуйте, уважаемые форумчане.
Спешу поделиться своими разработками.
Это надстройки для Revit, которые могут быть полезны, как проектировщикам, так и BIM менеджерам.
Видео с инструкциями:
https://www.youtube.com/watch?v=3X9kjAS0Dxo (https://www.youtube.com/watch?v=3X9kjAS0Dxo)
Ссылка на скачивание в описании видеоролика.
Буду рад вопросам и предложениям.
Название: Re: Надстройки Revit. Панель FreeAddIns. Мои разработки.
Отправлено: Александр Пекшев aka Modis от 12-08-2020, 14:58:21
Интересная идея с формулами в параметрах. Конечно, есть нюансы (ИМХО)
1. Ключевой параметры, содержащий имена параметров с формулами, явно лишний. Можно вполне придумать другое решение. Например, начинать строку с определенного символа
2. Нужно прикручивать к этой истории Updater, чтобы параметры обновлялись сами, а не по команде

P.S. Немножко пропиарил в своих группах
Название: Re: Надстройки Revit. Панель FreeAddIns. Мои разработки.
Отправлено: Павел Тер-Микаэлян от 12-08-2020, 15:53:13
Александр Пекшев aka Modis, Спасибо за отзыв, Александр, и за пиар в своих группах, давно за вами наблюдаю.
На счет ключевого параметра.
При разработке остро стоял вопрос производительности. Если перебирать значение каждого параметра в каждом элементе проекта, выискивая там формулу, то это очень долго. В ключевой параметр записываются только те параметры, в которых есть формулы, соответственно, значения остальных параметров программа не анализирует.
Плюс к этому, в ключевой параметр записывается последовательность, в которой выполняются формулы.
Можно было бы, конечно, избежать использования ключевого параметра, например, обязать писать формулу только в определенные параметры, например: "Формула_1", "Формула_2" и т.д. Но я решил так не делать, чтобы дать возможность записывать формулу в любой параметр.
На счет того, чтобы формулы вычислялись сами, я пока думаю и не решил, как это сделать. Потому что, если, например, раз в 5 минут в проекте будет запускаться эта надстройка, то проект будет тормозить. Если привязывать запуск к какому-то событию, то во-первых, пользователю в голове нужно держать, что без события ничего не произойдет, а во-вторых, событие может и не наступить в тот момент, когда понадобится, чтобы формула вычислилась.
Название: Re: Надстройки Revit. Панель FreeAddIns. Мои разработки.
Отправлено: Александр Пекшев aka Modis от 12-08-2020, 16:06:33
При разработке остро стоял вопрос производительности. Если перебирать значение каждого параметра в каждом элементе проекта, выискивая там формулу, то это очень долго.
Это по замерам или предположение?
Плюс к этому, в ключевой параметр записывается последовательность, в которой выполняются формулы.
Вот последовательность - да - тут уже нужен ключевой параметр.
Ну мне простительно, так как я не вдавался в подробности и не обдумывал варианты =))
На счет того, чтобы формулы вычислялись сами, я пока думаю и не решил, как это сделать. Потому что, если, например, раз в 5 минут в проекте будет запускаться эта надстройка, то проект будет тормозить. Если привязывать запуск к какому-то событию, то во-первых, пользователю в голове нужно держать, что без события ничего не произойдет, а во-вторых, событие может и не наступить в тот момент, когда понадобится, чтобы формула вычислилась.
Так я предложил сразу - IUpdater. На нем можно сделать. Главное условие - понимание причин пересчета параметров.

Ну а по производительности - конечно надо пробовать и смотреть прям на больших проектах. Получение информации по элементам в Ревите происходит очень даже быстро. А если что-то происходит долго - скорее всего нужна оптимизация кода. В некоторых случаях, конечно, нужна регенерация и тогда будет долго и ничего не поделать.

Прям сход могу пример привести - отключите в своих окнах ProgressBar и скорость увеличится в разы ;)
Название: Re: Надстройки Revit. Панель FreeAddIns. Мои разработки.
Отправлено: Павел Тер-Микаэлян от 12-08-2020, 16:54:18
Это по замерам или предположение?
По замерам. Например, большие проекты, там много элементов. Я их получаю. Потом надо у каждого получить коллекцию параметров, потом у каждого параметра проверить тип, что он текстовый, потом получить значения параметров, потом операция поиска подстроки в значении (может Regex, но все равно долго). А ключевой параметр я получаю по GUID у элемента сразу (или не получаю, если его нет).
По-моему, работает очень быстро, учитывая, что там даже выполняются скрипты C#.
Так я предложил сразу - IUpdater. На нем можно сделать. Главное условие - понимание причин пересчета параметров.
Посмотрю IUpdater, не работал с ним. Была идея использовать событие DocumentChanged, но она не прижилась, т.к.,
вроде как, изначально двигался в направлении - ни в коем случае не тормозить работу пользователя в Revit сторонними процессами. Была бы в Revit многопоточность хотя бы.
Прям сход могу пример привести - отключите в своих окнах ProgressBar и скорость увеличится в разы ;)
А у меня окна всегда в отдельном потоке, на время работы программы не влияет.