Установка перемычки над проемом

Автор Тема: Установка перемычки над проемом  (Прочитано 11036 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Установка перемычки над проемом
« Ответ #15 : 22-10-2020, 22:59:51 »
У стены всегда есть ориентация, т.е. вектор, ей перпендикулярный, направленный в сторону внешней стороны. У стены есть собственно Location, который можно привести к LocationCurve, из которого получить линию (или, потенциально дугу, или эллипс в последних версиях) по которой построена стена, собственно, отсюда можно получить абсолютно всю необходимую информацию.

Я бы ориентировался на центр bounding box-а, он не будет меняться от поворота стен.

как тогда его использовать в методе NewFamilyInstance?

Какое у тебя семейство перемычки, мы не знаем, тут могут быть разные варианты, как применить полученные знания, возможно, просто повернуть после создания.

Оффлайн asiaАвтор темы

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Re: Установка перемычки над проемом
« Ответ #16 : 23-10-2020, 14:23:39 »
Семейство OneLevelBased, наверное и правда можно попробовать просто поворачивать, тогда нужно как-то получить угол поворота стены.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13923
  • Карма: 1793
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Установка перемычки над проемом
« Ответ #17 : 23-10-2020, 15:01:43 »
Семейство OneLevelBased, наверное и правда можно попробовать просто поворачивать, тогда нужно как-то получить угол поворота стены.
Угол поворота, как я понимаю, ты можешь вычислить исходя из свойства Wall.Orientation - вектор нормали к плоскости стены.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн asiaАвтор темы

  • ADN OPEN
  • Сообщений: 27
  • Карма: 0
Re: Установка перемычки над проемом
« Ответ #18 : 23-10-2020, 15:49:15 »
Получилось так:
Код - C# [Выбрать]
  1. LocationCurve lc = wall.Location as LocationCurve;
  2. XYZ start = lc.Curve.GetEndPoint(0);
  3. XYZ end = lc.Curve.GetEndPoint(1);
  4. Line axis = Line.CreateBound(start, end);
  5. XYZ direction = axis.Direction;
И тогда я просто использую это здесь:
Код - C# [Выбрать]
  1. NewFamilyInstance(XYZ, symbol, direction, level, StructuralType.Beam);
Но проблема в том, что boundingBoxы для стен и проемов я получаю в виде double значений по осям, чтоб разместить перемычку четко по центру стены (по y):
Код - C# [Выбрать]
  1. BoundingBoxXYZ wallBb = wall.get_BoundingBox(doc.ActiveView);
  2. double y = (wallBb.Max.Y + wallBb.Min.Y) * 0.5;
и по центру проема вверху (по оси z самая высокая точка проема):
Код - C# [Выбрать]
  1. BoundingBoxXYZ windowBb = window.get_BoundingBox(doc.ActiveView);
  2. double z = windowBb.Max.Z;
Высота в любом случае одинаковая будет, даже если стена под углом, но значения по x и y изменятся: