ADN Club > Revit API

Wall Duct пересечение и добавление Opening

(1/3) > >>

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, то сильно на производительность влияет.

--- Конец цитаты ---
да, я этот вариант тоже рассматриваю

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии