Получить BoundingBox из нескольких элементов

Автор Тема: Получить BoundingBox из нескольких элементов  (Прочитано 1478 раз)

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

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Здравствуйте,
Можно ли как то получить boundingBox у нескольких элементов?
Т.е. чтобы в один bbox входили выделенные элементы, например

Отмечено как Решение user32 26-02-2021, 14:24:57

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
А в чём проблема то?
Код - C# [Выбрать]
  1.     public static class BoundingBoxXYZExtensions
  2.     {
  3.         public static BoundingBoxXYZ Union(this BoundingBoxXYZ boundingBox, BoundingBoxXYZ other)
  4.         {
  5.             return new BoundingBoxXYZ
  6.                 {
  7.                     Min = new XYZ(
  8.                         Math.Min(boundingBox.Min.X, other.Min.X),
  9.                         Math.Min(boundingBox.Min.Y, other.Min.Y),
  10.                         Math.Min(boundingBox.Min.Z, other.Min.Z)),
  11.                     Max = new XYZ(
  12.                         Math.Max(boundingBox.Max.X, other.Max.X),
  13.                         Math.Max(boundingBox.Max.Y, other.Max.Y),
  14.                         Math.Max(boundingBox.Max.Z, other.Max.Z))
  15.                 };
  16.         }
  17.     }

Ну и дальше:
Код - C# [Выбрать]
  1. var box = boxes.Aggregate((acc, elem) => acc.Union(elem));

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Спасибо!

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Это подойдет для большинства случаев, по крайней мере по твоему вопросу про элементы. Это я к тому, что при получении bounding box-ов элементов, Transform будет Identity. Более общим решением может быть - по Min и Max построить 8 точек - углов куба и преобразовать их по этому Transform-у. В этом случае, возможно, будет удобнее работать с Outline, а не BoundingBoxXYZ