Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: user32 от 03-11-2020, 15:04:00

Название: Получить профили отверстий по отдельности
Отправлено: user32 от 03-11-2020, 15:04:00
Здравствуйте, мне необходимо получить профили отверстий в стене, сами профили нахожу следующим образом
Код - 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 - это контур стены со всеми профилями отверстий в ней...

Можно ли как то получить все эти профили по отдельности?
(https://i.postimg.cc/G43dBcCh/2020-11-03-14-58-06-Autodesk-Revit-2020-11-UJA04-rvt-3-D-3-D.png) (https://postimg.cc/G43dBcCh)

(https://i.postimg.cc/B8k0wH1X/2020-11-03-15-00-22-Autodesk-Auto-CAD-2017-1-dwg.png) (https://postimg.cc/B8k0wH1X)
Название: Re: Получить профили отверстий по отдельности
Отправлено: Александр Игнатович от 03-11-2020, 16:24:45
Эм.. В CurveLoops у тебя все контуры, причем по-отдельности, можно проверить, является ли он внешним с помощью метода
Код - C# [Выбрать]
  1. CurveLoop.IsCounterclockwise

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

Проверяй свой код MyBoundaries, в каждом curveLoop только один "профиль", по твоей картинке в каждом из них 4 линии будет проема или стены. Он не даром зовется loop-ом, в нем конец каждой, кроме, возможно, последней, кривой является началом следующей.
Название: Re: Получить профили отверстий по отдельности
Отправлено: user32 от 03-11-2020, 19:53:02
Да, нашёл косяк, спасибо)