Как мне получить космическую информацию об объектах над потолком? - PullRequest
1 голос
/ 12 мая 2019

Я инженер MEP, и я хочу добавить информацию о пространстве для механического оборудования, принадлежностей воздуховодов и принадлежностей труб над (ограничивающими комнату) потолками.

Моя первая идея состояла в том, чтобы использовать BoundingBoxIntersectsFilter с Outline смодифицированный ClosedShell.GetBoundingBox().Max.Z из пространства и затем BoundingBoxIntersectsFilter, чтобы поймать мои элементы.Этот метод работает, но у меня будут проблемы с точностью над пробелами, которые ограничены шестью сторонами.Это из-за того, что Outline только набирает очки.Теперь я думаю, что мне нужно преобразовать мои пробелы в твердую геометрию и изменить значение 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 )

Любой удар в правильном направлении очень ценится!

Kyrre

Ответы [ 2 ]

2 голосов
/ 12 мая 2019

Когда я делал это раньше, иногда я использовал более простой подход. Определите ключевую точку на оборудовании, затем опустите значение z на этой точке оборудования до значения z чуть выше следующего уровня, на котором есть пробелы, и затем проверьте этот XYZ, чтобы определить, какое пространство окружает его.

1 голос
/ 12 мая 2019

Есть много способов сделать это.Я думаю, что самым простым может быть сделать это в два этапа.Во-первых, используйте ограничивающий прямоугольник или контур или любой другой быстрый фильтр, который соответствует вашим потребностям, чтобы уменьшить количество потенциальных объектов-кандидатов до разумного числа в прямоугольной области.На втором шаге, перебирайте объекты-кандидаты один за другим, вызывая пространство .Метод IsPointInSpace на каждом из них, чтобы исключить те, которые лежат вне границы нерегулярного пространства.

...