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

问题描述 投票:-1回答:1

目标

大家好,我正在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));

探索

根据我的研究,按钮是试图访问一个已经被访问的元素,但如果我改变比例,我应该能够改变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个独立的事务提交如何解决这个问题,但是我试了一下,并没有成功。这个显示了类似的东西

下面是我的另一个相关问题,关于按钮的参考资料。

c# revit-api revit pyrevit
1个回答
0
投票

我建议你先通过用户界面手动探索和测试你的预期功能。一旦稳定和优化,并按预期工作,你可以转移到通过Revit API自动编程相同的步骤。这可能会帮助你了解问题所在,比在API上挣扎要有效得多,因为API只是复制了用户界面的功能。


0
投票

我已经想明白了。我最初尝试使用从我的 LoadFamily 类,而不是通过Filtered Element Collector来查找元素ID。

我不知道为什么会出现错误,但确实如此。

© www.soinside.com 2019 - 2024. All rights reserved.