【问题标题】:In Revit how to do interference detecting programmatically?在 Revit 中如何以编程方式进行干扰检测?
【发布时间】:2011-03-19 21:55:09
【问题描述】:

更准确地说,我如何确定一个 Solid 是否与另一个元素相交? 我查看了 Revit API,找不到任何相关信息。

【问题讨论】:

    标签: revit


    【解决方案1】:

    如果您要寻找相交的元素,我会使用 BoundingBoxIntersectsFilter ,它是一种快速过滤器,对性能影响很小

    首先,获取几何边界框

    GeometryElement geoElem = wall.get_Geometry(_geoOpt) as GeometryElement;
    BoundingBoxXYZ boundXYZ = geoElem.GetBoundingBox();
    

    然后,创建轮廓并传递给 BoundingBoxIntersectsFilter

    if (boundXYZ != null)
    {
      outline = new Outline(boundXYZ.Min, boundXYZ.Max);
      boundingFilter = new BoundingBoxIntersectsFilter(outline);
    
      var filterElems = new FilteredElementCollector(elem.Document).WherePasses(boundingFilter).ToElementIds();
      foreach (var item in filterElems)
      {
         //retrieve intersected elements
      }
    }
    

    【讨论】:

      【解决方案2】:

      在 Revit 2012 中,在过滤元素时使用 ElementIntersectsSolidFilter。您提供的输入 Solid 可能来自另一个元素或您以编程方式生成的几何图形。

      【讨论】:

        【解决方案3】:

        看看光线投影 API,你可以向某个方向射出一条光线,它会返回它击中的所有元素及其位置等。

        FindReferencesByDirection 方法我相信是这样做的方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-28
          • 2021-03-24
          • 2019-03-24
          • 2014-06-25
          相关资源
          最近更新 更多