Revit API - выброшенное исключение: «Autodesk.Revit.Exceptions.InternalException» в RevitAPI.dll - при попытке дважды запустить кнопку - PullRequest
0 голосов
/ 09 мая 2020

Цель

Привет всем, я работаю над созданием кнопки в Revit, которая предназначена для добавления одного окна просмотра на новый лист, а затем изменения окна просмотра для отображения viewTitle вместо того, чтобы быть пустой или просто строкой

Ошибка

Когда я запускаю кнопку в первый раз, все работает, за исключением того, что заголовок представления не установлен для загруженного семейства хотя "строка" заголовка вида отображается. Моя ошибка возникает, когда я нажимаю кнопку во второй раз.

Это ошибка, которую я получаю, когда пытаюсь запустить кнопку второй раз:

Exception thrown: 'Autodesk.Revit.Exceptions.InternalException' in RevitAPI.dll
A managed exception was thrown by Revit or by one of its external applications.

Ошибка возникает в этой строке :

Viewport newViewPort = Viewport.Create(doc, viewSheet.Id, duplicatedPlan2Copy, new XYZ(location.U, location.V, 0));

Исследование

Из того, что я исследовал, кнопка пытается получить доступ к элементу, к которому уже осуществляется доступ, но если я меняю scale, я смогу изменить ViewTitle. См. Ссылки внизу этого вопроса

вот часть моего кода , который находится в транзакции

FamilySymbol firstSheet = colTitleBlocks.FirstElement() as FamilySymbol;
ViewSheet viewSheet = ViewSheet.Create(doc, firstSheet.Id);
UV location = new UV((viewSheet.Outline.Max.U - viewSheet.Outline.Min.U) / 2,
                                            (viewSheet.Outline.Max.V - viewSheet.Outline.Min.V) / 2);

ElementId duplicatedPlan2Copy = duplicatedPlan.Duplicate(ViewDuplicateOption.WithDetailing);
Viewport newViewPort = Viewport.Create(doc, viewSheet.Id, duplicatedPlan2Copy, new XYZ(location.U, location.V, 0));

Выводы Я обнаружил, что если я удалю эту строку из своего кода: bool elementType = doc.GetElement(newViewPort.GetTypeId()).get_Parameter(BuiltInParameter.VIEWPORT_ATTR_LABEL_TAG).Set(viewTitleIdCommand);

Она работает и может создавать новые листы и размещать окна просмотра с заголовком вида только многократно.

Любая помощь ценится. Эта ссылка здесь показывает, как две отдельные транзакции решили проблему, но я попробовал, и это не сработало. здесь что-то похожее

Вот ссылка на мой другой связанный вопрос, касающийся кнопки

Ответы [ 2 ]

0 голосов
/ 14 мая 2020

Я понял. Первоначально я пытался использовать elementId TitleView, загруженный из моего класса LoadFamily, вместо того, чтобы находить elementId с помощью Filtered Element Collector.

Я не уверен, почему это вызывало у меня ошибку, но это было так.

0 голосов
/ 09 мая 2020

Я предлагаю вам сначала изучить и протестировать предполагаемую функциональность вручную через пользовательский интерфейс. Как только это будет стабильно, оптимизировано и работает должным образом, вы можете перейти к автоматизации тех же шагов программно с помощью Revit API. Это, вероятно, поможет вам понять, в чем проблема, гораздо более эффективно, чем борьба с API, который просто копирует функциональность пользовательского интерфейса.

...