Надстройки Revit. Панель FreeAddIns. Мои разработки.

Автор Тема: Надстройки Revit. Панель FreeAddIns. Мои разработки.  (Прочитано 3306 раз)

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

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Здравствуйте, уважаемые форумчане.
Спешу поделиться своими разработками.
Это надстройки для Revit, которые могут быть полезны, как проектировщикам, так и BIM менеджерам.
Видео с инструкциями:
https://www.youtube.com/watch?v=3X9kjAS0Dxo
Ссылка на скачивание в описании видеоролика.
Буду рад вопросам и предложениям.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Интересная идея с формулами в параметрах. Конечно, есть нюансы (ИМХО)
1. Ключевой параметры, содержащий имена параметров с формулами, явно лишний. Можно вполне придумать другое решение. Например, начинать строку с определенного символа
2. Нужно прикручивать к этой истории Updater, чтобы параметры обновлялись сами, а не по команде

P.S. Немножко пропиарил в своих группах

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Александр Пекшев aka Modis, Спасибо за отзыв, Александр, и за пиар в своих группах, давно за вами наблюдаю.
На счет ключевого параметра.
При разработке остро стоял вопрос производительности. Если перебирать значение каждого параметра в каждом элементе проекта, выискивая там формулу, то это очень долго. В ключевой параметр записываются только те параметры, в которых есть формулы, соответственно, значения остальных параметров программа не анализирует.
Плюс к этому, в ключевой параметр записывается последовательность, в которой выполняются формулы.
Можно было бы, конечно, избежать использования ключевого параметра, например, обязать писать формулу только в определенные параметры, например: "Формула_1", "Формула_2" и т.д. Но я решил так не делать, чтобы дать возможность записывать формулу в любой параметр.
На счет того, чтобы формулы вычислялись сами, я пока думаю и не решил, как это сделать. Потому что, если, например, раз в 5 минут в проекте будет запускаться эта надстройка, то проект будет тормозить. Если привязывать запуск к какому-то событию, то во-первых, пользователю в голове нужно держать, что без события ничего не произойдет, а во-вторых, событие может и не наступить в тот момент, когда понадобится, чтобы формула вычислилась.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
При разработке остро стоял вопрос производительности. Если перебирать значение каждого параметра в каждом элементе проекта, выискивая там формулу, то это очень долго.
Это по замерам или предположение?
Плюс к этому, в ключевой параметр записывается последовательность, в которой выполняются формулы.
Вот последовательность - да - тут уже нужен ключевой параметр.
Ну мне простительно, так как я не вдавался в подробности и не обдумывал варианты =))
На счет того, чтобы формулы вычислялись сами, я пока думаю и не решил, как это сделать. Потому что, если, например, раз в 5 минут в проекте будет запускаться эта надстройка, то проект будет тормозить. Если привязывать запуск к какому-то событию, то во-первых, пользователю в голове нужно держать, что без события ничего не произойдет, а во-вторых, событие может и не наступить в тот момент, когда понадобится, чтобы формула вычислилась.
Так я предложил сразу - IUpdater. На нем можно сделать. Главное условие - понимание причин пересчета параметров.

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

Прям сход могу пример привести - отключите в своих окнах ProgressBar и скорость увеличится в разы ;)

Оффлайн Павел Тер-МикаэлянАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 124
  • Карма: 5
Это по замерам или предположение?
По замерам. Например, большие проекты, там много элементов. Я их получаю. Потом надо у каждого получить коллекцию параметров, потом у каждого параметра проверить тип, что он текстовый, потом получить значения параметров, потом операция поиска подстроки в значении (может Regex, но все равно долго). А ключевой параметр я получаю по GUID у элемента сразу (или не получаю, если его нет).
По-моему, работает очень быстро, учитывая, что там даже выполняются скрипты C#.
Так я предложил сразу - IUpdater. На нем можно сделать. Главное условие - понимание причин пересчета параметров.
Посмотрю IUpdater, не работал с ним. Была идея использовать событие DocumentChanged, но она не прижилась, т.к.,
вроде как, изначально двигался в направлении - ни в коем случае не тормозить работу пользователя в Revit сторонними процессами. Была бы в Revit многопоточность хотя бы.
Прям сход могу пример привести - отключите в своих окнах ProgressBar и скорость увеличится в разы ;)
А у меня окна всегда в отдельном потоке, на время работы программы не влияет.