Skip to content

Repository files navigation

RevitServerBrowser

изображение

Базовый инструмент для работы с Revit Server внутри Revit-плагинов на .NET Framework 4.8.

Проект можно использовать как готовый браузер моделей и как основу для своих инструментов: пакетного экспорта, проверок, аудита структуры, массовой обработки.

Что делает

  • автоматически определяет версию Revit из ExternalCommandData;
  • читает список серверов из RSN.INI;
  • показывает WinForms-дерево структуры Revit Server;
  • лениво загружает папки и модели по мере раскрытия;
  • позволяет выбрать одну или несколько моделей;
  • возвращает пути в формате RSN://... и в "сыром" виде |Folder|....

Две реализации доступа к Revit Server

REST APINative WCF API
СпособHTTP-запросы к публичному эндпоинтуПрямой вызов internal WCF-прокси Revit
ЗависимостиWebClientInternal сборки Revit (RS.Enterprise.*)
СкоростьЗависит от сетиБыстрее для больших структур
АвторизацияТребует прав на RevitServerAdminИспользует текущую сессию Revit
РеализацияRevitServerClientRevitServerNativeClient
ФормаRevitServerBrowserFormRevitServerBrowserNativeForm

Рекомендация: начинайте с REST. Если он недоступен или медленный — используйте Native.

Как работает

  • Версия Revit определяется автоматически, для REST формируется URL с годом.
  • Серверы читаются из C:\ProgramData\Autodesk\Revit Server <YEAR>\Config\RSN.INI.
  • Дерево подгружается лениво, при раскрытии узлов.
  • Выбранные модели доступны через свойства SelectedModelPaths (RSN://) и SelectedModelPathsRaw (внутренние пути).

Форматы путей

  • Внутренний: |ProjectA|AR|Building.rvt
  • Для Revit API: RSN://rs-main/ProjectA/AR/Building.rvt

Публичные точки расширения

  • RevitServerConfigReader.ReadServers(revitYear) – получить список серверов.
  • RevitServerBrowserForm / RevitServerBrowserNativeForm – готовые формы.
  • RevitServerClient / RevitServerNativeClient – низкоуровневые клиенты.
  • RevitServerItem – модель папки/модели.

Быстрое подключение в плагин

Обе формы автоматически определяют версию Revit и читают RSN.INI, достаточно передать commandData.

// REST-формаusing(varform=newRevitServerBrowser.RevitServerBrowserForm(commandData)){form.ConfirmButton.Click+=(s,e)=>{foreach(varpathinform.SelectedModelPaths)TaskDialog.Show("Модель",path);};form.ShowDialog();}// Native-форма – аналогичноusing(varform=newRevitServerBrowser.RevitServerBrowserNativeForm(commandData)){// ...}

Если нужна только клиентская часть без UI:

using(varclient=newRevitServerClient(host,apiYear)){varitems=client.GetContents("|");}

Пример реальной интеграции (BatchIfcExporter)

В проекте BatchIfcExporter браузер используется для выбора моделей перед экспортом IFC. После подтверждения выбора получаются SelectedModelPaths, которые передаются в пайплайн открытия и экспорта.

Рекомендуемый паттерн

Разделяйте ответственность:

  • RevitServerBrowser отвечает за выбор моделей.
  • Ваш код – за бизнес-логику (открытие, экспорт, проверки).

Доступные команды Revit

  • RS – запускает REST-форму.
  • RSNative – запускает Native-форму.

Обе зарегистрированы во вкладке ISTools через PluginsManager.

Технические детали

Стек: .NET Framework 4.8, Revit API, WinForms, WebClient, рефлексия.

REST endpoint:http://<host>/RevitServerAdminRESTService<year>/AdminRESTService.svc/<path>/contents

Заголовки:User-Name, User-Machine-Name, Operation-GUID.

Native WCF: использует сборки RS.Enterprise.Common.ClientServer.* и рефлексию для вызова ListSubFoldersAndModels.

Модель данных:RevitServerItem с полями Name, ItemType, Path, методами IsFolder/IsModel.

Таймаут REST: настраивается через client.Timeout.

Структура проекта

  • Command.cs / CommandNative.cs – команды для Revit.
  • RevitServerBrowserForm.cs / RevitServerBrowserNativeForm.cs – формы.
  • RevitServerClient.cs / RevitServerNativeClient.cs – клиенты.
  • RevitServerConfigReader.cs – чтение RSN.INI.
  • RevitServerItem.cs – модель.
  • TimeoutWebClient.cs – WebClient с таймаутом.

Сборка

Собирается как RevitServerBrowser.dll. Требует RevitLogger.dll рядом. Зависит от RevitAPI.dll, RevitAPIUI.dll.

Ограничения

  • Работает только внутри процесса Revit.
  • Список серверов зависит от локального RSN.INI.
  • Не открывает модели, только возвращает пути.
  • Native-реализация зависит от internal сборок Revit и может измениться в новых версиях.

Когда использовать

Используйте, если нужен готовый слой выбора моделей с Revit Server без написания:

  • чтения RSN.INI;
  • REST/Native клиентов;
  • дерева папок и конвертации путей.

Прикладную логику стройте отдельно.

Выбор между REST и Native

СценарийРекомендация
Стандартная работаREST
Проблемы с доступом к REST APINative
Максимальная производительностьNative
Стабильность важнее скоростиREST
Отладка проблемREST (проще логировать)
Проблемы с авторизациейNative (использует сессию Revit)

About

simple tool for working with revit-server

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages