Revit API - 抛出异常:RevitAPI.dll 中的 'Autodesk.Revit.Exceptions.InternalException' - 尝试按 运行 按钮两次时

Revit API - Exception thrown: 'Autodesk.Revit.Exceptions.InternalException' in RevitAPI.dll - When trying to run button twice

Objective

大家好,我正在 Revit 中制作一个按钮,旨在将单个视口添加到新 sheet,然后更改视口以显示 viewTitle 而不是空的或只是一个行

错误

当我第一次 运行 按钮时,尽管视图标题 "line" 正在显示,但除了视图标题未设置为加载的族外,一切正常。当我第二次 运行 按钮时,我的错误发生了。

这是我第二次尝试 运行 按钮时遇到的错误:

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));

探索

根据我的研究,该按钮正在尝试访问一个已经被访问的元素,但如果我要更改比例,我应该能够更改 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);

它有效并且能够创建新的 sheet 并仅重复放置带有视图标题行的视口。

感谢您提供的所有帮助。 This link here shows how having 2 separate transaction commits solved the problem however I tried it and that didn't work. this one shows something similar

我建议您首先通过用户界面手动探索和测试您的预期功能。一旦它稳定和优化并按预期工作,您可以转向通过 Revit API 以编程方式自动执行相同的步骤。这可能会帮助您以更有效的方式理解问题所在,而不是纠结于 API,后者只是复制 UI 功能。

我已经弄明白了。我最初尝试使用从我的 LoadFamily class 加载的 TitleView 的 elementId,而不是通过过滤元素收集器查找 elementId。

我不确定为什么会抛出错误,但确实如此。