Revit:获取所有ViewSheet的速度很慢

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

对于插件,我需要在rvt文件中获取所有视图,并在xaml对话框中显示它们的信息但是我第一次使用它的过程非常缓慢(使用调试器:对于83 viewplan来说,是500毫秒,如果没有调试器,它也非常慢)(如果再次执行我的代码,则执行是同时执行的)

我的下面的代码

你能帮我吗?

预先感谢

Luc

    protected IEnumerable<Element> GetAllEl(Document document)
    {
        var filteredElementCollector = new FilteredElementCollector(document);
        filteredElementCollector = filteredElementCollector
            .OfCategory(BuiltInCategory.OST_Sheets)
            .WhereElementIsNotElementType()
            .OfClass(typeof(ViewSheet));

        var fcElements = filteredElementCollector.ToElements();

        return fcElements;
    }
c# revit collectors
2个回答
0
投票

我认为目前没有解决该问题的通用解决方案。

这里是与开发团队最近的讨论:

对于给定的元素ID,

问题:,我们需要找到显示它的图纸ID的列表。当前解决方案:我们遍历所有图纸和视图并使用FilteredElementCollector( doc, sheet.Id)根据这些结果,我们再次调用FilteredElementCollector( doc, view.Id),并查找元素ID。问题:当前解决方案需要花费很多时间,并显示Revit进度栏,显示Generating graphics。有没有更好的方法来知道工作表中是否有给定的元素ID?例如,类似这样的东西将非常有用:

    getAllSheets(ElementId) // returns array of sheet id
    hasGuid(ElementId,sheetId) // return true/false

API是否提供任何此类方法,以检查表中是否有给定的ElementId?

答案:因此,目标是要找到一个在图纸上显示特定元素的视图?许多模型元素可能在多个视图上可见,而大多数注释元素通常仅在一个视图中出现。您要检查什么类型的元素?您将如何处理该信息?

Response:目标是找到一个在图纸上显示特定元素的视图。它可以是任何类型的元素。

答案:以下是一些先前的相关讨论:

Response:问题是对FilteredElementCollector( doc, viewId )的第一次调用在进度栏中显示generating graphics。只有第一次搜索才这样做。第二次,在同一视图上进行搜索没有性能问题。

答案:第一次很慢,因为要迭代视图中可见的元素,必须生成该视图的图形。我想不出一种解决方法来获得准确的答案。您可以跳过视口列表中没有模型视图的图纸,以节省一些时间。某些工作表可能只包含草稿视图,进度表和注释。

开发小组提出了非常有帮助的建议,在特殊情况下有助于解决generating graphics调用,到Loop through sheets - generating graphics

也许您可以针对特定情况以类似方式进行优化?


0
投票

我认为您可能过度过滤了ElementCollector。在我的外接程序中,我只使用以下代码即可获取视图表:new FilteredElementCollector(_doc).OfClass(typeof(ViewSheet));

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