Границы видимых элементов

Автор Тема: Границы видимых элементов  (Прочитано 4613 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Как определить BoundingBox для элементов видимых на виде.
То есть аналогично тому, как если бы мы добавили все видимые элементы на виде в группу и взяли ее BoundingBox, проблема в том , что на виде множество различных элементов 

Оффлайн ivmax

  • ADN OPEN
  • **
  • Сообщений: 70
  • Карма: 3
Re: Границы видимых элементов
« Ответ #1 : 13-01-2022, 13:01:55 »
я создавал в ручную новый ББ, брал все мин координаты минимальных точек и макс координаты максимальных точек, возможно это не самый оптимальный вариант, другого способа не нашел :)

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Границы видимых элементов
« Ответ #2 : 13-01-2022, 13:20:23 »
ну это опять-таки работа с каждым элементом.

Отмечено как Решение enot 13-01-2022, 14:24:24

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Границы видимых элементов
« Ответ #3 : 13-01-2022, 13:36:59 »
ну это опять-таки работа с каждым элементом.

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

Группу создавать не надо :-)

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Границы видимых элементов
« Ответ #4 : 13-01-2022, 14:04:53 »
Outline.AddPoint
Outline - это линия из двух точек. когда мы BoundingBox Minimum/Max point  каждого элемента в нее будем добавлять , что получится?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Границы видимых элементов
« Ответ #5 : 13-01-2022, 14:07:51 »
Outline - это линия из двух точек



Цитировать
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

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Границы видимых элементов
« Ответ #6 : 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.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Границы видимых элементов
« Ответ #7 : 13-01-2022, 14:20:08 »
Создаем из BoundingBox-а первого элемента.
когда мы добавляем новую точку , может быть такое что новый outline будет короче прежнего  то есть будет

нет. Если точка внутри, то outline не изменится, если снаружи - то растянется

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Границы видимых элементов
« Ответ #8 : 13-01-2022, 14:20:18 »
так понял, новая точка будет добавлена , только если она приведет к расширению существующего outline , верно?

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Границы видимых элементов
« Ответ #9 : 13-01-2022, 14:20:55 »
нет. Если точка внутри, то outline не изменится, если снаружи - то растянется
Тогда это то что нужно!

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Границы видимых элементов
« Ответ #10 : 13-01-2022, 14:22:59 »
ivmax,
я создавал в ручную новый ББ, брал все мин координаты минимальных точек и макс координаты максимальных точек, возможно это не самый оптимальный вариант, другого способа не нашел
Вы здесь работали с outline или только координаты Min Max использовали?

Оффлайн ivmax

  • ADN OPEN
  • **
  • Сообщений: 70
  • Карма: 3
Re: Границы видимых элементов
« Ответ #11 : 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.             };

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Границы видимых элементов
« Ответ #12 : 13-01-2022, 14:31:57 »
у меня было так
тоже вариант)

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