【问题标题】:Revit : Get All ViewSheet is very slowRevit:获取所有视图表非常慢
【发布时间】:2020-02-23 20:48:51
【问题描述】:

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

下面是我的代码

你能帮我吗?

提前致谢

卢克

    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;
    }

【问题讨论】:

  • 第二次很快,因为你已经有了第一个结果的数据。如果不了解您的应用程序和数据库的更多信息,没有简单的方法可以加快第一个结果的速度。
  • 这是您可以立即应用的一项最小性能增强:消除对ToElements 的调用。它没有任何用处,只是通过复制现有数据来浪费性能时间和内存空间。过滤后的元素收集器已经是IEnumerable&lt;Element&gt;

标签: c# revit collectors


【解决方案1】:

我认为您可能过度过滤了 ElementCollector。在我的加载项中,我只是使用此代码来获取视图表:new FilteredElementCollector(_doc).OfClass(typeof(ViewSheet));

【讨论】:

    【解决方案2】:

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

    这是最近与开发团队就此进行的讨论:

    问题:对于给定的元素 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 在工作表中是否可用?

    答案:所以目标是找到一个在工作表上显示特定元素的视图? 许多模型元素可以在多个视图中可见,而大多数注释元素通常只出现在一个视图中。 您要检查什么类型的元素? 您将如何处理这些信息?

    响应:目标是找到在工作表上显示特定元素的视图。 它可以是任何类型的元素。

    回答:以下是之前的一些相关讨论:

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

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

    开发团队提供了一个非常有用的建议,帮助解决了特殊情况下的 generating graphics 调用, 到Loop through sheets - generating graphics

    也许您可以针对您的具体情况以类似的方式进行优化?

    【讨论】:

      猜你喜欢
      • 2021-10-14
      • 1970-01-01
      • 2018-07-25
      • 2016-05-28
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 1970-01-01
      • 2016-06-25
      相关资源
      最近更新 更多