Получить профили отверстий по отдельности

Автор Тема: Получить профили отверстий по отдельности  (Прочитано 3779 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Здравствуйте, мне необходимо получить профили отверстий в стене, сами профили нахожу следующим образом
Код - C# [Выбрать]
  1. public List<MyBoundaries> OpeningsProfile(Wall wall)
  2. {
  3.         Reference sideFaceReference = HostObjectUtils.GetSideFaces(wall, ShellLayerType.Exterior).First();
  4.         Face face = wall.GetGeometryObjectFromReference(sideFaceReference) as Face;
  5.         Transform transform = Transform.CreateTranslation(wall.Orientation.Normalize());
  6.         IList<CurveLoop> curveLoops = face.GetEdgesAsCurveLoops();
  7.         List<MyBoundaries> bound = new List<MyBoundaries>();
  8.         TaskDialog.Show("s", curveLoops.Count.ToString());
  9.         foreach (CurveLoop curveLoop in curveLoops)
  10.         {
  11.                 MyBoundaries b = new MyBoundaries();
  12.                 foreach (Curve curve in curveLoop)
  13.                 {
  14.                         b.Curves.Add(curve.CreateTransformed(transform));
  15.                 }
  16.                 bound.Add(b);
  17.         }
  18.         return bound;
  19. }

Но это возвращает мне не совсем то что нужно, я получаю например List<CurveLoop>, в надежде, что одна CurveLoop будет образовывать замкнутый контур одного отверстия, но вместо этого я получаю все отверстия с контуром стены в каждом CurveLoop (ниже скриншот)

Например, у меня есть стена с окном, дверью и отверстием. Итого у меня получается список из 4-х CurveLoop, первый элемент - это просто контур стены, оставшиеся 3 - это контур стены со всеми профилями отверстий в ней...

Можно ли как то получить все эти профили по отдельности?




Отмечено как Решение user32 03-11-2020, 19:53:03

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Эм.. В CurveLoops у тебя все контуры, причем по-отдельности, можно проверить, является ли он внешним с помощью метода
Код - C# [Выбрать]
  1. CurveLoop.IsCounterclockwise

Параметром указываешь ориентацию стенки.

Проверяй свой код MyBoundaries, в каждом curveLoop только один "профиль", по твоей картинке в каждом из них 4 линии будет проема или стены. Он не даром зовется loop-ом, в нем конец каждой, кроме, возможно, последней, кривой является началом следующей.

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Да, нашёл косяк, спасибо)