AnlaxRevitTools 2025.1.24
dotnet add package AnlaxRevitTools --version 2025.1.24
NuGet\Install-Package AnlaxRevitTools -Version 2025.1.24
<PackageReference Include="AnlaxRevitTools" Version="2025.1.24" />
<PackageVersion Include="AnlaxRevitTools" Version="2025.1.24" />
<PackageReference Include="AnlaxRevitTools" />
paket add AnlaxRevitTools --version 2025.1.24
#r "nuget: AnlaxRevitTools, 2025.1.24"
#:package AnlaxRevitTools@2025.1.24
#addin nuget:?package=AnlaxRevitTools&version=2025.1.24
#tool nuget:?package=AnlaxRevitTools&version=2025.1.24
AnlaxRevitTools
Библиотека для разработки плагинов Autodesk Revit, предоставляющая набор полезных инструментов и утилит для упрощения разработки.
🚀 Быстрая публикация пакетов
Для автоматической сборки и публикации всех версий пакета:
Простой способ
# Запустите главный скрипт (API ключ читается автоматически из publish-config.json)
BuildAndPublish.bat
Подробная документация: AUTOMATION_README.md
Описание
AnlaxRevitTools - это комплексная библиотека, которая помогает разработчикам создавать стабильные и функциональные плагины для Autodesk Revit. Библиотека включает в себя инструменты для логирования, асинхронного выполнения команд, управления параметрами и многое другое.
Основные компоненты
🔍 Логирование - AnlaxBaseLog
Центральный компонент для логирования в плагинах Revit. Прост в использовании и не требует дополнительной настройки.
// Примеры использования
AnlaxBaseLog.LogInfo("Информационное сообщение");
AnlaxBaseLog.LogWarning("Предупреждение");
AnlaxBaseLog.LogError("Ошибка");
AnlaxBaseLog.LogDebug("Отладочная информация");
⚡ Асинхронное выполнение - AsyncTask
Класс для безопасного запуска команд в Revit без блокировки интерфейса. Предотвращает вылеты Revit при использовании диалоговых окон.
// Пример использования
await AsyncTask.RunAsync(() => {
// Ваш код для выполнения в Revit
// Revit не будет зависать или вылетать
});
🪟 Окно результатов - ResultWindow
Специализированное окно для отображения результатов операций плагина Revit. Позволяет пользователям видеть результаты работы плагина, выделять элементы в модели и получать детальную информацию об ошибках.
Пример использоввания:
// Создание и заполнение данных операции
var operationData = new OperationResultData
{
// УСПЕШНО ОБРАБОТАННЫЕ ЭЛЕМЕНТЫ
ProcessedDetails = "Обработано 5 стеновых проемов",
ProcessedItems = new List<Element>
{
wallOpening1, // Element объекты из Revit
wallOpening2,
wallOpening3
},
// ПРЕДУПРЕЖДЕНИЯ (не критичные проблемы)
WarningItems = new List<Element>
{
door1, // Дверь с некорректными параметрами
window1 // Окно требует проверки
},
// ОШИБКИ (критичные проблемы)
ErrorItems = new List<Element>
{
invalidWall1, // Стена с ошибками в геометрии
failedElement1
},
// ОШИБКИ ПЛАГИНА (общие проблемы плагина)
PluginErrorTitle = "Ошибка запуска",
PluginErrorContent = "Ты вот кнопку нажал и всё слетело. Не в масть тебе такие плагины",
// ПУТЬ К ЛОГ-ФАЙЛУ (опционально)
LogFilePath = @"C:\Users\Username\AppData\Local\Temp\plugin_log_228.txt",
// ИНФОРМАЦИЯ ДЛЯ ОТПРАВКИ ОТЧЕТА
ErrorReportInfo = new ErrorReportInfo(
commandName: "CheckWallOpenings",
userName: Environment.UserName,
userLogin: Environment.UserDomainName + "\\" + Environment.UserName,
pluginErrorText: "Критическая ошибка при проверке стеновых проемов"
),
// ССЫЛКА НА REVIT ДОКУМЕНТ (для выделения элементов)
RevitUIDocument = uidoc // UIDocument из ExternalCommandData
};
// Отображение окна результатов
OperationResultHelper.ShowResult(operationData);
Примечание
Для показа ошибок\предупреждений желательно, но не обязательно добавлять и распределенять их по группам при помощи:
AddToError(string groupName, Element element) и AddToWarning(string groupName, Element element) соотвественно и после уже отображать
Пример расрпеделения
private void GroupErrors(List<Element> errorItems, OperationResultData operationResultData)
{
foreach (var element in errorItems)
{
var heightParam = element.get_Parameter(BuiltInParameter.WALL_USER_HEIGHT_PARAM)?.AsDouble() ?? 0;
if (heightParam > 10)
{
operationResultData.AddToError("Слишком высокие стены", element);
}
else if (heightParam < 5)
{
operationResultData.AddToError("Слишком низкие стены", element);
}
else
{
operationResultData.AddToError(null, element); // Простой список
}
}
}
Далее в примере общего окна использовать вместе со списком ErrorItems и сгрупиировать как GroupErrors(errorItems, operationResultData);
📦 Загрузка плагинов
GitHub Downloader
Класс для загрузки плагинов и обновлений через GitHub API.
Yandex Downloader
Альтернативный способ загрузки через Yandex сервисы.
🔧 Управление параметрами - RevitParameter
Мощный класс для работы с параметрами проекта Revit. Позволяет добавлять, проверять и управлять параметрами.
⚠️ ВАЖНО: Перед добавлением параметров обязательно проверяйте подключение ФОП методом расширения CheckFSPFile. Этот метод также автоматически переключает ФОП на "Anlax", если он еще не был таковым.
// Примеры использования
var parameter = new RevitParameter();
// ОБЯЗАТЕЛЬНО: Проверка и настройка ФОП перед работой с параметрами
document.CheckFSPFile(); // Проверяет подключение ФОП и переключает на Anlax при необходимости
// Добавление параметра
parameter.AddParameter(document, element, parameterDefinition);
// Проверка существования параметра
bool exists = parameter.ParameterExists(element, parameterName);
Расширения (Extensions)
BoundingBoxXYZEx
Расширения для работы с ограничивающими блоками элементов.
DocumentEx
Расширения для работы с документами Revit.
ElementEx
Расширения для работы с элементами Revit.
Утилиты
ParameterTypeUniversal
Универсальные типы параметров для работы с различными версиями Revit.
UnitTypeUniversal
Универсальные типы единиц измерения.
🪟 Управление окнами - WindowManager
Критически важный компонент для управления модальными окнами в плагинах Revit. Предотвращает ошибки при горячем обновлении плагинов и запуске нескольких экземпляров одного окна.
⚠️ Обязательная регистрация модальных окон
ВСЕ модальные окна, которые показываются через Window.Show(), ДОЛЖНЫ быть зарегистрированы через WindowManager.Register()!
// ❌ НЕПРАВИЛЬНО - может вызвать ошибки при горячем обновлении
var myWindow = new MyModalWindow();
myWindow.Show();
// ✅ ПРАВИЛЬНО - безопасно для горячего обновления
var myWindow = new MyModalWindow();
WindowManager.Register(myWindow); // Обязательная регистрация!
myWindow.Show();
Преимущества регистрации
- Предотвращение ошибок при горячем обновлении - все зарегистрированные окна будут корректно закрыты при перезагрузке плагина
- Защита от дублирования окон - можно проверить, не открыто ли уже нужное окно
- Централизованное управление - возможность закрыть все окна плагина одной командой
Основные методы
// Регистрация окна (ОБЯЗАТЕЛЬНО для модальных окон)
WindowManager.Register(myWindow);
// Получение всех открытых окон
var openWindows = WindowManager.GetOpenWindows();
// Закрытие всех зарегистрированных окон
WindowManager.CloseAllWindows();
// Проверка, открыто ли окно с определенным именем
bool isOpen = WindowManager.CheckOpenWindows(new[] { "Мое окно", "Другое окно" });
Пример полного использования
public class MyRevitCommand : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
// Проверяем, не открыто ли уже наше окно
if (WindowManager.CheckOpenWindows(new[] { "Мой плагин" }))
{
return Result.Succeeded; // Окно уже открыто
}
// Создаем и регистрируем окно
var myWindow = new MyModalWindow();
WindowManager.Register(myWindow); // КРИТИЧЕСКИ ВАЖНО!
// Показываем окно
myWindow.Show();
return Result.Succeeded;
}
}
⚠️ Важные замечания
- Всегда регистрируйте модальные окна перед их показом
- Регистрация происходит автоматически при закрытии окна
- Используйте
CheckOpenWindows()для предотвращения дублирования окон - При горячем обновлении плагина все зарегистрированные окна будут автоматически закрыты
BackgroundErrorReporter
Система отчетности об ошибках в фоновом режиме.
Установка
Через NuGet Package Manager
Пакет публикуется на NuGet.org и хранится на аккаунте dev@anlax.org.
Установка через Package Manager Console:
Install-Package AnlaxRevitTools
Установка через .NET CLI:
dotnet add package AnlaxRevitTools
Установка через PackageReference в .csproj:
<PackageReference Include="AnlaxRevitTools" Version="2025.1.18" />
Ручная установка
- Скачайте последнюю версию библиотеки
- Добавьте ссылку на AnlaxRevitTools в ваш проект
- Убедитесь, что у вас установлена совместимая версия .NET Framework
Совместимость
Библиотека поддерживает следующие версии Autodesk Revit:
- Revit 2020
- Revit 2021
- Revit 2022
- Revit 2023
- Revit 2024
- Revit 2025
Примеры использования
using AnlaxRevitTools;
public class MyRevitPlugin
{
public async Task ExecuteAsync()
{
try
{
AnlaxBaseLog.LogInfo("Начало выполнения плагина");
await AsyncTask.RunAsync(() => {
// Ваш код для Revit
var parameter = new RevitParameter();
// ... логика работы с параметрами
});
AnlaxBaseLog.LogInfo("Плагин выполнен успешно");
}
catch (Exception ex)
{
AnlaxBaseLog.LogError($"Ошибка: {ex.Message}");
}
}
}
Лицензия
[Укажите вашу лицензию]
Поддержка
Для получения поддержки или сообщения об ошибках, пожалуйста, создайте issue в репозитории проекта.
Вклад в проект
Мы приветствуем вклад в развитие проекта! Если у вас есть предложения по улучшению или исправлению ошибок, создайте pull request.
AnlaxRevitTools - упрощаем разработку плагинов для Autodesk Revit
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0-windows7.0 is compatible. net9.0-windows was computed. net10.0-windows was computed. |
-
net8.0-windows7.0
- AnlaxPackageDesign (>= 1.9.14)
- AnlaxPackageLaunch (>= 2025.2.4)
- Newtonsoft.Json (>= 13.0.3)
- NLog (>= 5.3.4)
- Octokit (>= 14.0.0)
- System.Net.Http (>= 4.3.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2025.1.24 | 238 | 11/16/2025 |
| 2025.1.23 | 276 | 11/12/2025 |
| 2025.1.22 | 134 | 11/1/2025 |
| 2025.1.21 | 163 | 10/12/2025 |
| 2025.1.20 | 215 | 9/20/2025 |
| 2025.1.18 | 178 | 9/20/2025 |
| 2025.1.17 | 169 | 9/5/2025 |
| 2025.1.14 | 202 | 8/29/2025 |
| 2025.1.13 | 114 | 5/31/2025 |
| 2025.1.12 | 189 | 5/18/2025 |
| 2025.1.11 | 154 | 5/18/2025 |
| 2025.1.10 | 205 | 4/29/2025 |
| 2025.1.9 | 194 | 3/18/2025 |
| 2025.1.8 | 169 | 3/1/2025 |
| 2025.1.7 | 150 | 2/22/2025 |
| 2025.1.6 | 137 | 2/22/2025 |
| 2025.1.5 | 160 | 2/18/2025 |
| 2025.1.4 | 178 | 1/26/2025 |
| 2025.1.3 | 139 | 1/26/2025 |
| 2025.1.2 | 146 | 1/22/2025 |
| 2025.1.1 | 142 | 1/22/2025 |
| 2024.1.24 | 228 | 11/16/2025 |
| 2024.1.23 | 268 | 11/12/2025 |
| 2024.1.22 | 127 | 11/1/2025 |
| 2024.1.21 | 164 | 10/12/2025 |
| 2024.1.20 | 200 | 9/20/2025 |
| 2024.1.18 | 172 | 9/20/2025 |
| 2024.1.17 | 159 | 9/5/2025 |
| 2024.1.14 | 207 | 8/29/2025 |
| 2024.1.13 | 116 | 5/31/2025 |
| 2024.1.12 | 198 | 5/18/2025 |
| 2024.1.11 | 135 | 5/18/2025 |
| 2024.1.10 | 196 | 4/29/2025 |
| 2024.1.9 | 192 | 3/18/2025 |
| 2024.1.8 | 143 | 3/1/2025 |
| 2024.1.7 | 161 | 2/22/2025 |
| 2024.1.6 | 143 | 2/22/2025 |
| 2024.1.5 | 155 | 2/18/2025 |
| 2024.1.4 | 129 | 1/26/2025 |
| 2024.1.3 | 155 | 1/26/2025 |
| 2024.1.2 | 134 | 1/22/2025 |
| 2024.1.1 | 145 | 1/22/2025 |
| 2023.1.24 | 225 | 11/16/2025 |
| 2023.1.23 | 269 | 11/12/2025 |
| 2023.1.22 | 124 | 11/1/2025 |
| 2023.1.21 | 158 | 10/12/2025 |
| 2023.1.20 | 203 | 9/20/2025 |
| 2023.1.18 | 166 | 9/20/2025 |
| 2023.1.17 | 154 | 9/5/2025 |
| 2023.1.14 | 208 | 8/29/2025 |
| 2023.1.13 | 114 | 5/31/2025 |
| 2023.1.12 | 191 | 5/18/2025 |
| 2023.1.11 | 149 | 5/18/2025 |
| 2023.1.10 | 201 | 4/29/2025 |
| 2023.1.9 | 200 | 3/18/2025 |
| 2023.1.8 | 162 | 3/1/2025 |
| 2023.1.7 | 148 | 2/22/2025 |
| 2023.1.6 | 160 | 2/22/2025 |
| 2023.1.5 | 155 | 2/18/2025 |
| 2023.1.4 | 160 | 1/26/2025 |
| 2023.1.3 | 141 | 1/26/2025 |
| 2023.1.2 | 150 | 1/22/2025 |
| 2023.1.1 | 146 | 1/22/2025 |
| 2022.1.24 | 225 | 11/16/2025 |
| 2022.1.23 | 275 | 11/12/2025 |
| 2022.1.22 | 138 | 11/1/2025 |
| 2022.1.21 | 172 | 10/12/2025 |
| 2022.1.20 | 210 | 9/20/2025 |
| 2022.1.18 | 161 | 9/20/2025 |
| 2022.1.17 | 146 | 9/5/2025 |
| 2022.1.16 | 194 | 9/3/2025 |
| 2022.1.14 | 213 | 8/29/2025 |
| 2022.1.13 | 117 | 5/31/2025 |
| 2022.1.12 | 183 | 5/18/2025 |
| 2022.1.11 | 147 | 5/18/2025 |
| 2022.1.10 | 226 | 4/29/2025 |
| 2022.1.9 | 206 | 3/18/2025 |
| 2022.1.8 | 165 | 3/1/2025 |
| 2022.1.7 | 156 | 2/22/2025 |
| 2022.1.6 | 152 | 2/22/2025 |
| 2022.1.5 | 150 | 2/18/2025 |
| 2022.1.4 | 163 | 1/26/2025 |
| 2022.1.3 | 147 | 1/26/2025 |
| 2022.1.2 | 139 | 1/22/2025 |
| 2022.1.1 | 146 | 1/22/2025 |
| 2021.1.24 | 222 | 11/16/2025 |
| 2021.1.23 | 276 | 11/12/2025 |
| 2021.1.22 | 125 | 11/1/2025 |
| 2021.1.21 | 156 | 10/12/2025 |
| 2021.1.20 | 202 | 9/20/2025 |
| 2021.1.18 | 175 | 9/20/2025 |
| 2021.1.17 | 133 | 9/5/2025 |
| 2021.1.14 | 192 | 8/29/2025 |
| 2021.1.13 | 121 | 5/31/2025 |
| 2021.1.12 | 192 | 5/18/2025 |
| 2021.1.11 | 148 | 5/18/2025 |
| 2021.1.10 | 203 | 4/29/2025 |
| 2021.1.9 | 211 | 3/18/2025 |
| 2021.1.8 | 153 | 3/1/2025 |
| 2021.1.7 | 156 | 2/22/2025 |
| 2021.1.6 | 149 | 2/22/2025 |
| 2021.1.5 | 146 | 2/18/2025 |
| 2021.1.4 | 151 | 1/26/2025 |
| 2021.1.3 | 140 | 1/26/2025 |
| 2021.1.2 | 134 | 1/22/2025 |
| 2021.1.1 | 137 | 1/22/2025 |
| 2020.1.24 | 225 | 11/16/2025 |
| 2020.1.23 | 269 | 11/12/2025 |
| 2020.1.22 | 128 | 11/1/2025 |
| 2020.1.21 | 165 | 10/12/2025 |
| 2020.1.20 | 209 | 9/20/2025 |
| 2020.1.18 | 168 | 9/20/2025 |
| 2020.1.17 | 168 | 9/5/2025 |
| 2020.1.14 | 200 | 8/29/2025 |
| 2020.1.13 | 115 | 5/31/2025 |
| 2020.1.12 | 202 | 5/18/2025 |
| 2020.1.11 | 147 | 5/18/2025 |
| 2020.1.10 | 198 | 4/29/2025 |
| 2020.1.9 | 195 | 3/18/2025 |
| 2020.1.8 | 156 | 3/1/2025 |
| 2020.1.7 | 163 | 2/22/2025 |
| 2020.1.6 | 146 | 2/22/2025 |
| 2020.1.5 | 160 | 2/18/2025 |
| 2020.1.4 | 161 | 1/26/2025 |
| 2020.1.3 | 137 | 1/26/2025 |
| 2020.1.2 | 142 | 1/22/2025 |
| 2020.1.1 | 140 | 1/22/2025 |
| 2020.1.0 | 138 | 1/21/2025 |