Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: Bazinga от 06-06-2018, 14:11:45

Название: IUpdate и дублирование листов
Отправлено: Bazinga от 06-06-2018, 14:11:45
Код - C# [Выбрать]
  1. viewDrafting.Duplicate(ViewDuplicateOption.WithDetailing)

Копирую лист чертежный вид таким образом. Без автоматического обновления - все работает.
В IUpdate выдает ошибку "ViewDuplicateOption" не содержит определение для "WithDetailing"
Как подлатать?
Название: Re: IUpdate и дублирование листов
Отправлено: Александр Игнатович от 06-06-2018, 14:18:02
Укажите полностью:

Код - C# [Выбрать]
  1. viewDrafting.Duplicate(Autodesk.Revit.DB.ViewDuplicateOption.WithDetailing)
Название: Re: IUpdate и дублирование листов
Отправлено: Bazinga от 06-06-2018, 14:22:09
Александр Игнатович, Исключение запускает ("viewDrafting.Duplicate(Autodesk.Revit.DB.ViewDuplicateOption.Duplicate)" запустило исключение типа "Autodesk.Revit.Exceptions.InvalidOperationException")
Похоже нельзя использовать в обновлении.
Название: Re: IUpdate и дублирование листов
Отправлено: Александр Игнатович от 06-06-2018, 14:42:13
Не думаю, что дело в том, что код выполняется в IUpdater, разве что, IUpdater реагирует на создание вида, в коде запускается Duplicate, затем IUpdater ловит создание вида в результате запуска Duplicate и т.д. до OutOfMemory / StackOverflow Exception

Вообще у Вас немного показания расходятся. В сообщении указываете, что копируете листы, в коде viewDrafting - чертежный вид. Насколько помню, листы вообще нельзя так копировать...

Рекомендую перед вызовом Duplicate проверять возможность копирования с помощью метода CanViewBeDuplicated
Название: Re: IUpdate и дублирование листов
Отправлено: Bazinga от 06-06-2018, 14:55:06
что копируете листы, в коде viewDrafting - чертежный вид
Я особой разницы не вижу ^_^'. Для меня это объект, на котором располагаются элементы, и с ними можно работать.
И вроде бы у всех видов (план этажей, чертежный, лист и т.п.) есть в контекстном меню пункт "копирование вида".
Название: Re: IUpdate и дублирование листов
Отправлено: Bazinga от 06-06-2018, 15:07:43
Код - C# [Выбрать]
  1.  if (viewDrafting.CanViewBeDuplicated(ViewDuplicateOption.WithDetailing))
  2.                             {
  3.                                 ElementId viewID = viewDrafting.Duplicate(Autodesk.Revit.DB.ViewDuplicateOption.WithDetailing);
  4.                              }
Возвращает истину, а всё равно выдает ошибку

Магия какая-та с ревитом.
Если просто выполнять - эксепшен идет
(https://s15.postimg.cc/f7xr4haxz/image.png) (https://postimg.cc/image/f7xr4haxz/)
Если вручную пересчитать - выполняет
(https://s15.postimg.cc/5amqbgdmv/image.png) (https://postimg.cc/image/5amqbgdmv/)
Название: Re: IUpdate и дублирование листов
Отправлено: Александр Игнатович от 07-06-2018, 13:40:00
Можно еще попробовать поиграться с приоритетом выполнения DMU: ChangePriority, как советует Джереми в этой теме: https://forums.autodesk.com/t5/revit-api-forum/dmu-amp-change-added-elements-type-problem/m-p/8052782#M31550 (https://forums.autodesk.com/t5/revit-api-forum/dmu-amp-change-added-elements-type-problem/m-p/8052782#M31550)