背景: 我正在使用 Revit 2022 并使用 Revit API 开发 C# 插件。我的目标是从 Revit 项目中删除特定的链接实例。我要删除的链接通过其名称中包含“COM”来标识。
问题: 脚本成功地从模型中删除了链接,通过重新运行脚本并且不再找到这些链接来确认这一点。但是,UI 仍然显示这些链接,就好像它们存在于项目中一样。模型和 UI 之间的这种差异令人困惑。我希望 UI 能够反映 API 所做的更改,即删除的链接不应在 UI 中可见。
代码: 这是我用来删除链接的函数:
public static void ProcessAndRemoveLinks(Document doc)
{
List<string> deletedLinkNames = new List<string>();
// Collect all Revit link instances in the document
FilteredElementCollector collector = new FilteredElementCollector(doc);
var revitLinks = collector.OfClass(typeof(RevitLinkInstance)).Cast<RevitLinkInstance>();
foreach (RevitLinkInstance linkInstance in revitLinks)
{
// Check if the name contains 'COM'
if (linkInstance.Name.Contains("_COM"))
{
RevitLinkType linkType = doc.GetElement(linkInstance.GetTypeId()) as RevitLinkType;
if (linkType != null)
{
// Wrap unload and delete operations in transactions with error handling
try
{
using (Transaction trans = new Transaction(doc, "Unload and Delete Link"))
{
// Unload the link
linkType.Unload(null);
trans.Start();
// Delete the link instance
deletedLinkNames.Add(linkInstance.Name);
doc.Delete(linkInstance.Id);
// Regenerate the document to reflect changes
doc.Regenerate();
trans.Commit();
}
}
catch (Exception ex)
{
TaskDialog.Show("Error", $"Error processing link '{linkInstance.Name}': {ex.Message}");
}
}
}
}
尝试解决: 我尝试在删除后重新生成文档(doc.Regenerate())。 我还尝试刷新活动视图(uiDoc.RefreshActiveView())。 确保每次删除都包含在单独的事务中并正确提交。
问题: 为什么已删除的链接在 Revit UI 中仍然可见?如何确保 UI 准确反映加载项所做的更改? Revit API 中是否有特定的方法或过程来在此类操作后更新 UI,尤其是链接删除?
我尝试在删除后重新生成文档(doc.Regenerate())。 我还尝试刷新活动视图(uiDoc.RefreshActiveView())。 确保每次删除都包含在单独的事务中并正确提交。
将文件链接到 Revit 项目时,它会创建链接实例和该链接实例的相应类型。我建议您删除链接实例和相应的类型。