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

ADN Club => Revit API => Тема начата: enot от 13-01-2022, 12:55:15

Название: Границы видимых элементов
Отправлено: enot от 13-01-2022, 12:55:15
Как определить BoundingBox для элементов видимых на виде.
То есть аналогично тому, как если бы мы добавили все видимые элементы на виде в группу и взяли ее BoundingBox, проблема в том , что на виде множество различных элементов 
Название: Re: Границы видимых элементов
Отправлено: ivmax от 13-01-2022, 13:01:55
я создавал в ручную новый ББ, брал все мин координаты минимальных точек и макс координаты максимальных точек, возможно это не самый оптимальный вариант, другого способа не нашел :)
Название: Re: Границы видимых элементов
Отправлено: enot от 13-01-2022, 13:20:23
ну это опять-таки работа с каждым элементом.
Название: Re: Границы видимых элементов
Отправлено: Александр Игнатович от 13-01-2022, 13:36:59
ну это опять-таки работа с каждым элементом.

А в чём проблема? Получить элементы текущего вида - ок, получить BoundingBox элемента на текущем виде - ок. Можно ещё Outline использовать - создать из BoundingBox-а первого, потом пройтись по всем, вызвать метод Outline.AddPoint для min/max каждого BoundingBox-а, в итоге имеем MinimumPoint и MaximumPoint.

Группу создавать не надо :-)
Название: Re: Границы видимых элементов
Отправлено: enot от 13-01-2022, 14:04:53
Outline.AddPoint
Outline - это линия из двух точек. когда мы BoundingBox Minimum/Max point  каждого элемента в нее будем добавлять , что получится?
Название: Re: Границы видимых элементов
Отправлено: Александр Игнатович от 13-01-2022, 14:07:51
Outline - это линия из двух точек

(https://i.postimg.cc/Lq1jLWsY/wat.jpg) (https://postimg.cc/Lq1jLWsY)

Цитировать
Outline is a generic object that provides a bounding box/bounding outline. It supports operations to scale and transform. It also supports intersections and contains operations
Название: Re: Границы видимых элементов
Отправлено: enot от 13-01-2022, 14:09:44
Цитировать
   Outline(XYZ, XYZ)   
Constructor that uses a minimum and maximum XYZ point to initialize the outline.

Цитировать
   AddPoint   
Adds a point to the bounding box, expanding it if the point is outside the existing boundary.

- когда мы добавляем новую точку , может быть такое что новый outline будет короче прежнего  то есть будет
не
Цитировать
outside the existing boundary.
а
inside the existing boundary.
Название: Re: Границы видимых элементов
Отправлено: Александр Игнатович от 13-01-2022, 14:20:08
Создаем из BoundingBox-а первого элемента.
когда мы добавляем новую точку , может быть такое что новый outline будет короче прежнего  то есть будет

нет. Если точка внутри, то outline не изменится, если снаружи - то растянется
Название: Re: Границы видимых элементов
Отправлено: enot от 13-01-2022, 14:20:18
так понял, новая точка будет добавлена , только если она приведет к расширению существующего outline , верно?
Название: Re: Границы видимых элементов
Отправлено: enot от 13-01-2022, 14:20:55
нет. Если точка внутри, то outline не изменится, если снаружи - то растянется
Тогда это то что нужно!
Название: Re: Границы видимых элементов
Отправлено: enot от 13-01-2022, 14:22:59
ivmax,
я создавал в ручную новый ББ, брал все мин координаты минимальных точек и макс координаты максимальных точек, возможно это не самый оптимальный вариант, другого способа не нашел
Вы здесь работали с outline или только координаты Min Max использовали?
Название: Re: Границы видимых элементов
Отправлено: ivmax от 13-01-2022, 14:28:46
у меня было так

Код - C# [Выбрать]
  1.             var bbs = elems.Where(x => x is not null).Select(x => x.get_BoundingBox(null));
  2.             var mins = bbs.Select(x => x.Min);
  3.             var maxs = bbs.Select(x => x.Max);
  4.  
  5.             var min = new XYZ(mins.Min(x => x.X), mins.Min(x => x.Y), mins.Min(x => x.Z));
  6.             var max = new XYZ(maxs.Max(x => x.X), maxs.Max(x => x.Y), maxs.Max(x => x.Z));
  7.  
  8.             bb = new BoundingBoxXYZ()
  9.             {
  10.                 Min = min - new XYZ(offset, offset, offset),
  11.                 Max = max + new XYZ(offset, offset, offset)
  12.             };
Название: Re: Границы видимых элементов
Отправлено: enot от 13-01-2022, 14:31:57
у меня было так
тоже вариант)

Александр Игнатович,  подсказал более "Ревитовский" способ, так что теперь будем знать)