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。
我不确定为什么会抛出错误,但确实如此。
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。
我不确定为什么会抛出错误,但确实如此。