1

我是一名 MEP 工程师,我想在(房间边界)天花板上方添加有关机械设备、管道附件和管道附件的空间信息。

我的第一个想法是使用 BoundingBoxIntersectsFilter 和 Outline 并ClosedShell.GetBoundingBox().Max.Z从空间修改,然后使用 aBoundingBoxIntersectsFilter来捕获我的元素。这种方法有效,但我会在注意限于六面的空间上方的准确性方面遇到问题。这是因为大纲只需要点。现在,我想我需要将我的空间转换为实体几何并修改 Z 值,然后使用ElementIntersectsElementFilter,但我目前正在弄清楚使用哪些方法来修改我的空间几何。

也许我需要使用GetGeometryObjectFromReference,但我并不真正了解如何使用Reference。我看到get_Geometry已经在这里使用过,但我需要帮助如何使用它。具体来说,这是我不明白如何在python代码中实现的代码:

foreach( GeometryObject obj in e.Objects )
  {
    Solid solid = obj as Solid;
    if( null != solid )
    {
      foreach( Face face in solid.Faces )
      {
        PlanarFace pf = face as PlanarFace;
        if( null != pf )

非常感谢任何朝着正确方向的踢!

凯尔

4

2 回答 2

2

当我以前这样做时,有时我使用了一种更简单的方法。识别设备上的关键点,然后将该设备点上的 z 值下拉到一个 z 值,该 z 值就在下一个具有空间的向下层之上,然后测试该 XYZ 以确定哪个空间包围它。

于 2019-05-12T14:01:57.567 回答
1

有很多方法可以做到这一点。我认为最简单的方法可能是分两步完成。首先,使用边界框或轮廓或任何适合您需要的快速过滤器,将潜在候选对象的数量减少到矩形区域内的合理数量。第二步,逐个遍历候选对象并调用Space。IsPointInSpace 方法对它们中的每一个进行消除,以消除位于不规则空间边界之外的那些。

于 2019-05-12T16:03:48.937 回答