Плагин для Autodesk Revit: копирование выбранных листов (Sheets) из активного документа в другие открытые документы Revit с набором опций (параметры, основная надпись, аннотации, виды/легенды/спецификации, ревизии и т.д.).
Также есть режим предпросмотра (dry-run): показывает, какие действия будут выполнены и где возможны предупреждения.
- Копирование листов из текущего документа в один или несколько других открытых документов.
- Опционально:
- Параметры листа (только записываемые; с исключением системных/запрещённых).
- Основная надпись (TitleBlock): подобрать тип в целевом документе, при необходимости скопировать тип из источника.
- Параметры экземпляра основной надписи.
- Элементы, «принадлежащие листу»:
- Текст (TextNote)
- Типовые аннотации (Generic Annotation)
- Линии детализации (Detail Lines / Lines)
- Guide Grids
- Растровые изображения (Raster Images)
- Импортированные PDF (ImportInstance с распознаванием по имени типа/символа)
- Виды на листе: Drafting Views и Legends (копируются и размещаются viewport’ы).
- Спецификации (Schedules) на листе (копируется ViewSchedule и размещается ScheduleSheetInstance).
- Ревизии листа + синхронизация ревизионных облаков в скопированных видах (по геометрическому совпадению bbox-центров/размеров).
- Предпросмотр операций (без транзакций и без изменений в целевых документах).
- Логи результата копирования (успех/ошибка по листам и этапам).
После установки добавляется вкладка Ribbon:
- Tab: Sheet Copy
- Panel: Sheet Copy Tools
- Button: Copy Sheets
Кнопка открывает UI-окно (в коде используется SheetCopyToDocsWindow) для:
- выбора листов;
- выбора целевых документов;
- настройки опций;
- предпросмотра действий;
- запуска копирования. :contentReference[oaicite:16]{index=16}
- Autodesk Revit (версия зависит от вашей сборки/SDK; код использует
Autodesk.Revit.DBи стандартные API-классы Revit).
- Соберите проект в
Release. - Скопируйте
.dll(и) плагина в папку аддинов Revit. - Создайте
.addinфайл, который указывает на вашу сборку и:FullClassNameдля приложения Ribbon:SheetCopyToDocs.Application.RibbonAppFullClassNameдля команды:SheetCopyToDocs.Application.SheetCopyToDocsCommand
Примечание: точный путь и формат
.addinзависят от версии Revit и вашей структуры сборки.
- Откройте исходный документ (в котором находятся листы).
- Откройте один или несколько целевых документов (Project-документы, не family).
- Ribbon → Sheet Copy → Copy Sheets.
- В окне:
- выберите листы;
- выберите целевые документы;
- настройте опции;
- (опционально) выполните предпросмотр;
- нажмите OK для запуска копирования.
- Во время выполнения показывается окно прогресса (ProgressWindow).
Все опции находятся в CopyOptions:
CopySheetParams— копировать параметры листа (только записываемые; исключаются Sheet Number/Name и некоторые системные).CopyTitleBlock— копировать тип основной надписи (если нужного типа нет в целевом документе).CopyTitleBlockParams— копировать параметры экземпляра основной надписи.CopySchedules— копировать спецификации на листе.CopyLegends— копировать легенды на листе.CopyDraftingViews— копировать чертёжные виды (Drafting Views) на листе.CopyText— копировать TextNote.CopyGenericAnnotations— копировать Generic Annotations.CopyDetailLines— копировать линии детализации / линии.CopyGuideGrids— копировать Guide Grids.CopyRasterImages— копировать растровые изображения.CopyPdfImports— копировать импортированные PDF.CopyRevisions— копировать ревизии листа + сопоставлять ревизии для ревизионных облаков в скопированных видах.
Перед копированием параметров листа номер принудительно уникализируется в целевом документе:
- если номер уже занят → добавляется суффикс
_1,_2, ...
При копировании параметров исключаются системные/запрещённые параметры листа (например SHEET_NUMBER, VIEW_NAME и схожие по имени).
- На исходном листе должен быть TitleBlock, иначе операция листа упадёт с ошибкой.
- В целевом документе тип подбирается по ключу
FamilyName|TypeName. - Если тип не найден:
- при
CopyTitleBlock=true— тип копируется из source в target, - иначе используется «первый попавшийся» TitleBlock тип в целевом документе как fallback.
- при
Для Drafting Views / Legends плагин:
- копирует View (если ещё не копировался ранее в рамках одного target-документа),
- создаёт Viewport на целевом листе в той же точке,
- затем пытается сопоставить revision clouds в исходном/целевом виде по bbox-геометрии (центры/размеры с допуском 1 мм) и назначить соответствующую Revision.
- На каждый целевой документ открывается
TransactionGroup. - На каждый лист — отдельная
Transaction. - Ошибки по этапам пишутся в лог и не обязательно валят весь процесс (зависит от места исключения).
- Связанные документы (Revit Link) не поддерживаются как target.
- Целевые документы берутся только из уже открытых документов Revit.
- Копируются только:
- Drafting Views и Legends (другие типы видов на листе игнорируются).
- PDF определяется эвристикой по имени типа/символа, содержащему
.pdf.
- Сопоставление ревизионных облаков зависит от геометрического совпадения; при расхождении количества/геометрии синхронизация может пропуститься.
SheetCopyToDocs.ApplicationRibbonApp— добавляет вкладку/панель/кнопку в Ribbon.SheetCopyToDocsCommand— собирает данные, открывает UI, запускает workflow.
SheetCopyToDocs.DomainCopyResult,CopyLogEntry— результаты и лог.ICopyService,IPreviewService— интерфейсы.Models—CopyRequest,CopyOptions,PreviewResultи модели предпросмотра.Rules.CopyRules— правила уникализации номеров и фильтра параметров.
SheetCopyToDocs.Infrastructure.RevitCopyWorkflow— реализация копирования и dry-run предпросмотра.
PR приветствуются:
- улучшения UI,
- расширение поддержки типов видов,
- более надёжное сопоставление ревизий/облаков,
- настройки правил копирования параметров.
Автор: Daniel Rogulin Telegram: @sadblueses E-mail: danrogulin@gmail.com GitHub: https://github.com/Akkhazriel