Почему C#?
Масштабируемость
С чего начать
- Установите Visual Studio 2022 Community
- Установите .NET SDK ( .NET 4.8 и .NET 8)
- Установите шаблоны Nice3Point
Структура проекта (Project Solution)
- Создайте
new project
- Выберите шаблон Revit Addin (
Nice3Point)
- Настройте новый проект:
NameпроектаLocationSolution Name— как имя проекта (это папка, которая хранит несколько проектов)
- Дополнительная информация:
- Add-in type ->
Application - User Interface ->
None - IoC ->
Disabled - Serilog support ->
unchecked
- Add-in type ->
Пока что держим всё просто — позже эти настройки можно будет изменить.
Знакомство с проектом в Visual Studio 2022
Solution Explorer(как Project Browser в Revit)- Здесь видны все файлы, папки и ссылки проекта. Представьте это как Project Browser, но для кода.
- Окна Error List и Output
- Error List показывает ошибки и предупреждения в коде.
- Output выводит сообщения Visual Studio, например, о сборке.
- Файл .csproj
- Хранит настройки проекта. В шаблоне Nice3Point он уже готов для Revit 2025, менять пока ничего не нужно.
- Файл .addin
- Сообщает Revit о вашем плагине — где он лежит и как его загрузить.
- Сейчас просто измените GUID (уникальный идентификатор плагина).
- Остальное изменим позже.

- Сообщает Revit о вашем плагине — где он лежит и как его загрузить.
Class Application
Это «точка входа» плагина. Revit смотрит сюда первым делом при запуске или закрытии:

Тип класса:
ExternalApplication- Сообщает Revit, что ваш add-in — это полноценное приложение (а не отдельная команда).
Метод
OnStartup()- Выполняется автоматически при запуске Revit:
- Вызывает функцию
CreateRibbon(). CreateRibbon()создаёт панель на ленте Revit.- Добавляет на эту панель кнопку.
- Кнопка получает две иконки (для разных размеров).
- Вызывает функцию
- Выполняется автоматически при запуске Revit:
Как работает
CreateRibbon()CreatePanel()— встроенный метод Revit API для создания панели.AddPushButton()— метод API для добавления кнопки.- Оба метода уже настроены в шаблоне.
Папка
CommandsStartupCommand.cs- Основной код команды.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19using Autodesk.Revit.Attributes; using Autodesk.Revit.UI; using Nice3point.Revit.Toolkit.External; namespace Test.Commands { /// <summary> /// External command entry point /// </summary> [UsedImplicitly] [Transaction(TransactionMode.Manual)] public class StartupCommand : ExternalCommand { public override void Execute() { TaskDialog.Show(Document.Title, "Test"); } } }- Сейчас: Task Dialog — показывает имя плагина
Test, можно поменять по желанию.- Используется
ExternalCommand, но лучше применятьIExternalCommand.
- Используется
- Здесь пишется логика для кнопки (Оставляем все как есть для первого запуска).
- При нажатии кнопки выполняется код из папки Commands.
- Если изменить
TaskDialog.Show(Document.Title, "Hello World");:- То в Revit при нажатии появится сообщение «Hello World».
Resources:
- Иконки
Всё хранится в Проводнике Windows (
Windows Explorer)Конфигурации:
- Debug и Release
- По версиям Revit от R20 до R25
References:
- Путь: This PC > Windows (C:) > Program Files > Autodesk > Revit [2025].
- DLL-библиотеки, которые можно подключать к проекту.
- Позже добавим пакет для работы с Excel.
Сборка и тест первого плагина:
- Выберите
Debug R25для Revit 2025:
- Выберите
Соберите solution, нажав
Run(Play ButtonTEST) рядом сAny CPU.Запустится Revit (та версия, которую вы указали).
В окне доверия выберите
Always Loadдля.addin.Что произошло за кулисами:
- Visual Studio 2022 скопировала DLL и
.addinв нужную папку и запустила Revit с вашим плагином. - Это возможно благодаря шаблону
Nice3Point. - Всё уже настроено для быстрого старта.
- Visual Studio 2022 скопировала DLL и
Откройте
New Projectв Revit:- Найдите новую панель на ленте.
- Найдите свой плагин.

- Нажмите на него.
- Появится сообщение с
именеминструмента.
Готово! Теперь можно остановить
Debugв Visual Studio:- Это закроет Revit и завершит отладку.

- Это закроет Revit и завершит отладку.
На этом вы создали своё первое приложение или кнопку в Revit!
Поздравляю! Теперь вы готовы писать реальную функциональность.
В Уроке 1 мы пошагово разберём примерIExternalCommand.
