ADN Club > Revit API
Wall Duct пересечение и добавление Opening
begiz:
Доброго временни суток,
Есть на первый вгляд примитивная задача.
в месте пересечения трубы со стеной, в стене сделать отверстие.
Пересечения нашел без проблем.
Пытаюсь для начала вставить прямоугольное отверстие:
doc.Create.NewOpening(wall, interBox.Min, interBox.Max);
interBox - это BoundingBoxXYZ из результата:
BooleanOperationsUtils.ExecuteBooleanOperation(solid, wallSolid, BooleanOperationsType.Intersect)
но програма говорит что объекты не пересекаются.
как так то?
Александр Ривилис:
begiz,
Придётся подождать до четверга, пока Александр Игнатович сможет помочь, если никто до того времени не поможет. В идеале нужен файл со стеной, в которой пытаешься сделать отверстие.
begiz:
фаилик прицепил.
https://yadi.sk/d/3zfWjvUEttIMTA
надеюсь меня по голове не по гладят что я его выложил :)
задача в полном объеме звучит так:
найти все пересечения труб и стен, и туда вставить семейство отверстия с круглым сечением.
но я для начала пытаюсь прямоугольное/встроенное отверстие вставить.
чувствую что с координатами беда, разные либо принимаются либо я получаю не те что надо
Александр Игнатович:
Про поиск пересечений гляньте, недавно тут тема была https://adn-cis.org/forum/index.php?topic=2872.msg38679#msg38679
По сути вопроса - для создания проема с помощью метода Document.NewOpening(Wall, XYZ, XYZ) нужно указывать координаты углов прямоугольного проема. Эти координаты должны быть в на поверхности стены, т.е., если Вы пользуйтесь BooleanOperationsUtils.ExecuteBooleanOperation, то нужно взять поверхность получившегося solid-а, являющуюся частью стены.
Но, вообще говоря, рекомендую пересмотреть алгоритм в пользу ReferenceIntersector-а, как в той теме. BooleanOperationsUtils.ExecuteBooleanOperation может выкидывать исключения в ряде случаев и, если оборачивать в try-catch, то сильно на производительность влияет.
begiz:
--- Цитировать ---Про поиск пересечений гляньте, недавно тут тема была https://adn-cis.org/forum/index.php?topic=2872.msg38679#msg38679
--- Конец цитаты ---
используя данное предложение я могу получить обе точки пересечения трубы и стены.
далее мне нужно будет взять радиуц трубы и построить окружность (при пересечении под приамым углом) с радиусом трубы и центром в точке пересечения и потом повернуть эту окружность(плоскость) чтобы она была параллельна плоскости стены, так?
или даже так, построить окружность взять BoundingBox и уже его повернуть?
--- Цитировать ---По сути вопроса - для создания проема с помощью метода Document.NewOpening(Wall, XYZ, XYZ) нужно указывать координаты углов прямоугольного проема. Эти координаты должны быть в на поверхности стены, т.е., если Вы пользуйтесь BooleanOperationsUtils.ExecuteBooleanOperation, то нужно взять поверхность получившегося solid-а, являющуюся частью стены.
--- Конец цитаты ---
а как получить из солида обшиую со стеной поверхность?
--- Цитировать ---Но, вообще говоря, рекомендую пересмотреть алгоритм в пользу ReferenceIntersector-а, как в той теме. BooleanOperationsUtils.ExecuteBooleanOperation может выкидывать исключения в ряде случаев и, если оборачивать в try-catch, то сильно на производительность влияет.
--- Конец цитаты ---
да, я этот вариант тоже рассматриваю
Навигация
Перейти к полной версии