IUpdate и дублирование листов

Автор Тема: IUpdate и дублирование листов  (Прочитано 4446 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Код - C# [Выбрать]
  1. viewDrafting.Duplicate(ViewDuplicateOption.WithDetailing)

Копирую лист чертежный вид таким образом. Без автоматического обновления - все работает.
В IUpdate выдает ошибку "ViewDuplicateOption" не содержит определение для "WithDetailing"
Как подлатать?
« Последнее редактирование: 06-06-2018, 14:55:35 от Bazinga »

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: IUpdate и дублирование листов
« Ответ #1 : 06-06-2018, 14:18:02 »
Укажите полностью:

Код - C# [Выбрать]
  1. viewDrafting.Duplicate(Autodesk.Revit.DB.ViewDuplicateOption.WithDetailing)

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: IUpdate и дублирование листов
« Ответ #2 : 06-06-2018, 14:22:09 »
Александр Игнатович, Исключение запускает ("viewDrafting.Duplicate(Autodesk.Revit.DB.ViewDuplicateOption.Duplicate)" запустило исключение типа "Autodesk.Revit.Exceptions.InvalidOperationException")
Похоже нельзя использовать в обновлении.

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: IUpdate и дублирование листов
« Ответ #3 : 06-06-2018, 14:42:13 »
Не думаю, что дело в том, что код выполняется в IUpdater, разве что, IUpdater реагирует на создание вида, в коде запускается Duplicate, затем IUpdater ловит создание вида в результате запуска Duplicate и т.д. до OutOfMemory / StackOverflow Exception

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

Рекомендую перед вызовом Duplicate проверять возможность копирования с помощью метода CanViewBeDuplicated

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: IUpdate и дублирование листов
« Ответ #4 : 06-06-2018, 14:55:06 »
что копируете листы, в коде viewDrafting - чертежный вид
Я особой разницы не вижу ^_^'. Для меня это объект, на котором располагаются элементы, и с ними можно работать.
И вроде бы у всех видов (план этажей, чертежный, лист и т.п.) есть в контекстном меню пункт "копирование вида".

Оффлайн BazingaАвтор темы

  • ADN Club
  • ***
  • Сообщений: 101
  • Карма: 4
Re: IUpdate и дублирование листов
« Ответ #5 : 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.                              }
Возвращает истину, а всё равно выдает ошибку

Магия какая-та с ревитом.
Если просто выполнять - эксепшен идет

Если вручную пересчитать - выполняет

« Последнее редактирование: 06-06-2018, 15:38:09 от Bazinga »

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: IUpdate и дублирование листов
« Ответ #6 : 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