uidoc.Selection.PickElementsByRectangle => Rectangle

Автор Тема: uidoc.Selection.PickElementsByRectangle => Rectangle  (Прочитано 5190 раз)

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

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

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Есть ли способ получить Rectangle
для дальнейшего получения XYZ его вершин

Аналогично, как , например, для pickedBox : XYZ pt= pickedBox.Min;

из  uidoc.Selection.PickElementsByRectangle ?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: uidoc.Selection.PickElementsByRectangle => Rectangle
« Ответ #1 : 05-02-2019, 13:10:15 »
Нет. Используйте Selection.PickBox, затем уже ищите элементы внутри этого Box-а

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: uidoc.Selection.PickElementsByRectangle => Rectangle
« Ответ #2 : 05-02-2019, 14:52:35 »
Цитировать
затем уже ищите элементы внутри этого Box-а
но в PickBox нет метода отвечающего за это

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: uidoc.Selection.PickElementsByRectangle => Rectangle
« Ответ #3 : 05-02-2019, 16:03:55 »
пока вижу единственный вариант:

 
Код - C# [Выбрать]
  1.  PickedBox pickedBox = uidoc.Selection.PickBox(PickBoxStyle.Crossing);
  2.             Outline outline = new Outline(pickedBox.Min, pickedBox.Max);        
  3.  
  4.             BoundingBoxIntersectsFilter bbfilter  = new BoundingBoxIntersectsFilter(outline);
  5.             var els = new FilteredElementCollector(doc, doc.ActiveView.Id).WherePasses(bbfilter).ToElements();

Однако,

       
Код - C# [Выбрать]
  1.      MessageBox.Show(els.Count().ToString());  
els.Count() => выдает ноль элементов

В чем может быть причина?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: uidoc.Selection.PickElementsByRectangle => Rectangle
« Ответ #4 : 05-02-2019, 16:06:50 »
Вероятно, pickedBox по одному из направлений плоский

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: uidoc.Selection.PickElementsByRectangle => Rectangle
« Ответ #5 : 05-02-2019, 16:09:39 »
Думаю , на плане это бы работало, но тут разрез и нужна какая то корректирующая примочка наподобие вами предоставленной UpDirection
из
http://adn-cis.org/forum/index.php?topic=9069.0

Прошу прощения, я забыл указать что у меня разрез!

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: uidoc.Selection.PickElementsByRectangle => Rectangle
« Ответ #6 : 05-02-2019, 16:23:19 »
у вида есть ещё ViewDirection, можете его попробовать.

А вообще, к чему это? Зачем нужен этот прямоугольник? Может, достаточно у выбранных элементов получить boundingbox-ы и их объединить, не?

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: uidoc.Selection.PickElementsByRectangle => Rectangle
« Ответ #7 : 05-02-2019, 16:30:51 »
мне на разрезе нужно прямоугольником выбрать элементы, которые он пересекает , а также получить точки этого прямоугольника (Min, Max)

Либо, ткнуть на две точки , и получить линию => получить элементы , которые эта линия пересекает

Но прямоугольник дает больше опций в плане что можно к нему применить BoundingBoxIntersectsFilter , либо BoundingBoxIsInsideFilter

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: uidoc.Selection.PickElementsByRectangle => Rectangle
« Ответ #8 : 06-02-2019, 10:53:45 »
В продолжение темы вопрос:
как получить Reference уровней на разрезе для создания размера?



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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: uidoc.Selection.PickElementsByRectangle => Rectangle
« Ответ #9 : 06-02-2019, 10:54:42 »
Код - C# [Выбрать]
  1. var reference = new Reference(level);

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: uidoc.Selection.PickElementsByRectangle => Rectangle
« Ответ #10 : 06-02-2019, 11:05:46 »
Ага)
 я просто забыл добавить уровни в список...

Сохраню сюда также ссылки, помогающие в решение моего вопроса, чтобы не забыть

http://adn-cis.org/forum/index.php?topic=3121.0

http://adn-cis.org/ploskosti-proekczii-i-vyibrannyie-tochki.html

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: uidoc.Selection.PickElementsByRectangle => Rectangle
« Ответ #11 : 10-02-2019, 12:21:41 »
у вида есть ещё ViewDirection, можете его попробовать.
судя по всему, ViewDirection изменить нельзя? (он ReadOnly )

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: uidoc.Selection.PickElementsByRectangle => Rectangle
« Ответ #12 : 10-02-2019, 12:45:00 »
Хотите камеру 3D вида подвигать чтоли? Тогда нужны методы GetOrientation / SetOrientation.

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

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: uidoc.Selection.PickElementsByRectangle => Rectangle
« Ответ #13 : 10-02-2019, 14:09:43 »
хочу использовать PickPoint() на разрезе , но, видимо, его можно использовать только на плане...

Отмечено как Решение enot 10-02-2019, 17:07:23

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: uidoc.Selection.PickElementsByRectangle => Rectangle
« Ответ #14 : 10-02-2019, 14:19:42 »
На разрезе тоже можно. Только перед вызовом PickPoint() надо создать рабочую плоскость. Можно получить CropBox.Transform, из него взять Origin и Normal, по ним создать Plane, из него SketchPlane и присвоить view.SketchPlane