Обработка случая дублирования типоразмеров при копировании элементов через API
При использовании метода ElementTransformUtils.CopyElements можно получить вот такое вот предупреждение:
Обработка случая дублирования типоразмеров при копировании элементов через API
Это окно может появится, когда вы копируете тип, которого не существует в проекте, но вложенный тип уже находится в этом же проекте.
Метод ElementTransformUtils.CopyElements имеет несколько перегруженных методов, в один из которых передается параметр CopyPasteOptions. С его помощью можно контролировать поведение Revit при возникновении ситуации с дублированием типов. Мы можем возвратить одно из двух значений:
- UseDestinationTypes – продолжить операцию вставки с использованием имени типоразмера в проекте, в который осуществляется вставка.
- Abort – Отмена операции
Для реализации нужно создать класс, реализующий интерфейс IDuplicateTypeNamesHandler. Класс должен иметь один метод и возвращать нужное действие.
Пример реализации класса:
- public class CustomCopyHandler : IDuplicateTypeNamesHandler
- {
- public DuplicateTypeAction OnDuplicateTypeNamesFound(
- DuplicateTypeNamesHandlerArgs args)
- {
- return DuplicateTypeAction.UseDestinationTypes;
- }
- }
Затем, перед вызовом метода CopyElements, создайте объект типа CopyPasteOptions и установите обработчик события, возникающий при копировании дублирующийся типов:
- CopyPasteOptions options = new CopyPasteOptions();
- // задаем обработчик события обработчик события
- options.SetDuplicateTypeNamesHandler(new CustomCopyHandler());
- //Копируем элементы
- ElementTransformUtils.CopyElements(document2, ss2, document1, Transform.Identity, options);
Спасибо Arnošt Löbel за ответ на нашем форуме.
Источник: http://adndevblog.typepad.com/aec/2014/08/handling-duplicate-types-on-copyelements.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=931
Опубликовано 27.08.2014