Revit 2022 API:尽管已成功从模型中删除,但已删除的链接在 UI 中仍然可见

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

背景: 我正在使用 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())。 确保每次删除都包含在单独的事务中并正确提交。

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

将文件链接到 Revit 项目时,它会创建链接实例和该链接实例的相应类型。我建议您删除链接实例和相应的类型。

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