пятница, 27 сентября 2024 г.

[Revit API] - Простой макрос

 


По мотивам сообщения https://t.me/bimsapr/175492 сделал видеоролик с решением подобной задачи с помощью макроса Revit

 

Из видео узнаете:

- как найти BuiltInParameter для получения системного параметра

- как получить все типы стен в документе

- как получить строковое значение параметра

- как изменить имя типа

- как использовать транзакцию для внесения изменений


Три важных момента по применению макросов в Revit:

1. Макросы рекомендую использовать для таких мелких задачек или если что-то нужно пощупать по-быстрому в Revit API

2. Если видите что код разрастается или есть необходимость передачи пользователям - значит пора переходить к написанию плагина 

3. Рекомендую использовать макросы приложения, а не документа. При использовании макросов документа SharpDevelop время от времени падает. Отыскать исходный текст макроса можно, но сложно. Код макроса приложения же никуда не теряется, лежит себе спокойно в

%programdata%\Autodesk\Revit\Macros


Успехов!

воскресенье, 30 июня 2024 г.

[Revit API] - Пример csproj для сборки под разные версии Revit

Написать заметку меня побудила статья Александра Зуева:

https://weandrevit.ru/obnovlenie-na-revit-api-2025-net8/

Благодарю Александра за труд и за то что делится своими наработками!

 

При чтении глаз зацепился за этот момент:

 

Сам когда-то писал точно так же. Если используется две-три версии Revit, то ещё терпимо, а при большом числе поддерживать такой файл проекта окзалось весьма затруднительно.

Чтобы утоптать эту часть задал переменную  RvtVersion

<PropertyGroup Condition="$(Configuration.Contains('RVT2015'))">
  <RvtVersion>2015</RvtVersion>
  <TargetFramework>net45</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2016'))">
  <RvtVersion>2016</RvtVersion>
  <TargetFramework>net45</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2017'))">
  <RvtVersion>2017</RvtVersion>
  <TargetFramework>net452</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2018'))">
  <RvtVersion>2018</RvtVersion>
  <TargetFramework>net452</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2019'))">
  <RvtVersion>2019</RvtVersion>
  <TargetFramework>net47</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2020'))">
  <RvtVersion>2020</RvtVersion>
  <TargetFramework>net47</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2021'))">
  <RvtVersion>2021</RvtVersion>
  <TargetFramework>net48</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2022'))">
  <RvtVersion>2022</RvtVersion>
  <TargetFramework>net48</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2023'))">
  <RvtVersion>2023</RvtVersion>
  <TargetFramework>net48</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2024'))">
  <RvtVersion>2024</RvtVersion>
  <TargetFramework>net48</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('RVT2025'))">
  <RvtVersion>2025</RvtVersion>
  <TargetFramework>net8-windows</TargetFramework>
</PropertyGroup>


Для задания условий по конфигурациям типа Debug и Release сделал два блока с условиями:

<PropertyGroup Condition="$(Configuration.Contains('Debug'))">
  <DefineConstants>TRACE;DEBUG;RVT$(RvtVersion)</DefineConstants>
  <DebugSymbols>true</DebugSymbols>
  <DebugType>full</DebugType>
</PropertyGroup>

<PropertyGroup Condition="$(Configuration.Contains('Release'))">
  <DefineConstants>RVT$(RvtVersion)</DefineConstants>
  <Optimize>true</Optimize>
  <DebugType>pdbonly</DebugType>
</PropertyGroup>

 

Таким образом, для задания путей к библиотекам Revit API можно использовать переменную RvtVersion, не требуется громадный блок Choose-When

<ItemGroup>
    <Reference Include="AdWindows">
      <HintPath>C:\Program Files\Autodesk\Revit $(RvtVersion)\AdWindows.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="RevitAPI">
      <HintPath>C:\Program Files\Autodesk\Revit $(RvtVersion)\RevitAPI.dll</HintPath>
      <Private>False</Private>
    </Reference>
    <Reference Include="RevitAPIUI">
      <HintPath>C:\Program Files\Autodesk\Revit $(RvtVersion)\RevitAPIUI.dll</HintPath>
      <Private>False</Private>
    </Reference>
</ItemGroup>

 

В <PostBuildEvent> также компактная запись:

<PropertyGroup>
  <OutputPath>bin\$(Configuration)</OutputPath>
  <InstallAddinPath>$(MSBuildProjectDirectory)\..\Publish\Release\Autodesk\REVIT\Addins\$(RvtVersion)</InstallAddinPath>
  <StartAction>Program</StartAction>
  <StartProgram>$(ProgramW6432)\Autodesk\Revit $(RvtVersion)\Revit.exe</StartProgram>
  <StartArguments>/viewer</StartArguments>
  <PostBuildEvent>
    echo "$(AppData)\Autodesk\REVIT\Addins\$(RvtVersion)"

    if $(Configuration) == RVT$(RvtVersion)Release (
    mkdir "$(AppData)\Autodesk\REVIT\Addins\$(RvtVersion)"
    copy "$(MSBuildProjectDirectory)\ConnectToElPanel.addin" "$(AppData)\Autodesk\REVIT\Addins\$(RvtVersion)"
    copy "$(MSBuildProjectDirectory)\$(OutputPath)\$(TargetFramework)\ConnectToElPanel.dll" "$(AppData)\Autodesk\REVIT\Addins\$(RvtVersion)"
    md $(InstallAddinPath)
    copy "$(MSBuildProjectDirectory)\ConnectToElPanel.addin" "$(InstallAddinPath)\"
    copy "$(MSBuildProjectDirectory)\$(OutputPath)\$(TargetFramework)\ConnectToElPanel.dll" "$(InstallAddinPath)")
  </PostBuildEvent>
</PropertyGroup>


При таком подходе файл проекта становится намного компактнее и проще в поддержке

С полным текстом примера можно ознакомиться тут.

Рекомендую ознакомиться с примерами в репозитории

https://github.com/Nice3point/RevitTemplates

 

Успехов!

пятница, 5 апреля 2024 г.

[Revit API] - Sharp Develop, давай до свидания!

В Revit 2025 плагины работают на .NET 8, Sharp Develop давно не поддерживается его разработчиками и отправляется на покой.

Макросы по умолчанию теперь запускаются в VS Code.

Luiz Henrique Cassettari показывает как запускать Visual Studio 2022 из диспетчера макросов:

Файл cmd для запуска Visual Studio прикреплён в описании к видео.

Успехов!

среда, 13 марта 2024 г.

[Revit] Копирование планов этажей и потолков

Гуглю - нашёл только плагины, которые копируют виды в текущем проекте. 
Странно... очень востребованная функция и ни одного решения... 
 
Ну да ладно, у меня есть микроскоп молоток, а вот гвозди.
 
Накидал макрос копирования и вставки видов:
 

 

Перехожу в модель с планами, в диспетчере проекта выбираю виды, запускаю макрос копирования.
Затем перехожу в другую модель и запускаю макрос вставки.
Созданы соответствующие виды, границы подрезки соответствуют исходным.

Теперь бы оформить плагин, из макросов не очень удобно запускать. 
Надо нарисовать иконки... Не люблю рисовать. Пойду-ка поищу, может всё-таки есть что-нибудь готовое?
 
В ModPlus есть плагин копирования видов, но копирование производится только в рамках одной модели. С помощью плагина копирования листов возможно перенести листы, чертёжные виды, спецификации и изображения, но виды в плане не передаются.

Перехожу к DiRoots.
В DiRootsOne ничего похожего нет, а вот в DiStem есть модуль Project Standarts: 
 
Копирует элементы из одной модели в другую, в том числе и виды.
Есть недостаток - при копировании не передаётся произвольная подрезка вида:



Вернулся к ModPlus и - о, чудо! Есть плагин "Копировать элементы":

https://modplus.org/ru/revitplugins/mprcopyelementstoopendocuments

Кроме копирования элементов модели возможно копировать и виды.

Границы вида передаются корректно: 


Здесь я показываю работу плагинов DiStem и ModPlus:

 

Чуть позже нашёл как можно скопировать планы без использования плагинов:

В модели с планами этажей и потолков:

1. Открыть необходимые виды, включить видимость границы подрезки

2. Выбрать границы подрезки видов с зажатым Ctrl

Переключиться в другую модель, выполнить вставку из буфера обмена с выравниванием по выбранным уровням, выбрать какой-нибудь уровень.

 

Другу больше всего пришёлся по душе вариант копирования средствами Revit

Успехов!

вторник, 5 марта 2024 г.

[Revit API] Макросы в студию!

Показываю как открывать макросы в Visual Studio и использовать Git для контроля изменений в макросах


 Если совсем-совсем коротко:

макросы приложения в отличие от макросов проекта хранятся не в документе Revit, а в папке C:\ProgramData\Autodesk\Revit\Macros


Успехов!

воскресенье, 3 марта 2024 г.

[Revit - Электрика] Трёхфазный резерв

 Показываю как для резервной цепи задать три полюса:

Успехов!

воскресенье, 18 февраля 2024 г.

[Слёзы Revit] - Двигаемся с осторожностью

Из этого видео узнаете из-за чего могут отваливаться размеры и марки, электрические потребители выпадают из цепей, семейства на основе грани теряют основу а отцы семейств теряют покой и сон


 Успехов!

суббота, 3 февраля 2024 г.

[Слёзы Revit] - Нюансы схем обозначения цепей

 

Показываю пару моментов с которыми можно столкнуться при использовании схем обозначения цепей
 



 Успехов!

среда, 31 января 2024 г.

[Revit API] - Починил пару ранее опубликованных макросов

API немного поменялся, макросы перестали работать.

Ссылки на сообщения:

[Revit API] - Запись данных в ключевую спецификацию

[Revit API] - Граница подрезки вида

rvt файлы с макросами приведены в порядок, ссылки на скачивание в соответствующих сообщениях

Успехов!

суббота, 27 января 2024 г.

[Revit - Электрика] - Схемы обозначения цепей

В этом коротком видео показываю как использовать схемы обозначения цепей:

 

Успехов!