Получение элемента из связанного файла, находящегося в виде центральной модели

Автор Тема: Получение элемента из связанного файла, находящегося в виде центральной модели  (Прочитано 7765 раз)

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

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Добрый день!

У меня есть два файла модель с архитектурой (стенами/комнатами) и модель с фурнитурой, и модель с фурнитурой связана с архитектурной моделью. Каждый вид созданный в центральной(архитектурной) модели представляет собой отдельную комнату, в которой находится определенное количество фурнитуры из связанного файла. Есть ли возможность получить все связанные элементы, которые находятся, в выбранном виде?

Пробовал получить элементы из связанного файла, сравнивая, трансформированные координаты элемента с координатами CropBox и если элемент внутри, то работал с ним. Все работало неплохо до тех пор пока я не стокнулся с тем, что элемент связанного файла присутствует на виде, но по координатам он не попадает в CropBox, что очень странно.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Абсолютно ничего странного. Когда Вы работаете с документом связанной модели, Вы получаете координаты в пространстве модели связанного документа.

Чтобы перейти к координатам основной модели, нужно получить трансформ из RevitLinkInstance. Метод GetTotalTransform()

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
трансформированные координаты элемента с координатами CropBox
Да, я произвожу трансформацию координат элемента. В этом-то странность и заключается.
Через RevitLookup - Snoop Linked Element - Location (453, 122)
Snoop Active View - CropBox - Max (444, 108)

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Принято.

Чтож, тогда, вероятно, дело в этом:

Цитировать
For elements which are outside of a crop region, they may still be passed by the collector because Revit relies on later processing to eliminate the elements hidden by the crop. This effect may more easily occur for non-rectangular crop regions, but may also happen even for rectangular crops. You can compare the boundary of the region with the element's boundary if more precise results are required.

Это цитата из документации к Revit 2020:
Цитировать
FilteredElementCollector Constructor (Document, ElementId)

В документации более ранних версий этого параграфа может не быть, участвовал в дискусии, благодаря которой добавилось это примечание

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
То есть - это баг? :)
И получается кроме, как через сравнение координат, другого способа получения элементов с вида нет?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Да, я произвожу трансформацию координат элемента. В этом-то странность и заключается.
Через RevitLookup - Snoop Linked Element - Location (453, 122)
Snoop Active View - CropBox - Max (444, 108)

В код RevitLookup-а не смотрел, но 99.9% координаты он для Linked Element не переводит.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
И получается кроме, как через сравнение координат, другого способа получения элементов с вида нет?

Вообще есть CustomExporter, с 2020 можно любой вид обрабатывать, до этого - только 3D.

То есть - это баг?

ну и да и нет.

Тут вообще до 2020 плохо то, что вот так проверить видимость на конкретном виде элементов из связанного файла на 100% нельзя, ну, точнее, можно, но только для 3D. Например, можно скрыть элемент, применить фильтры, применить настройки вида для связанной модели.

С 2020 CustomExporter работает для любых видов, с его помощью уже 100% задача решается.

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
CustomExporter, мне не подходит, потому как у меня планы, а не 3D виды.

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
В код RevitLookup-а не смотрел, но 99.9% координаты он для Linked Element не переводит.
Да, верно, только что проверил, на другом примере.
Просто в первом примере линк и центральная модель в идентичной системе координат.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Ну в 2020 любой вид можно CustomExporter скормить :)

Попробуйте ещё пересечение с BoundingBox-ом элемента (естественно, с учётом Transform-а, в т.ч., возможно, поворота), может у него и правда Location где-то за пределами CropBox-а находится

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Ну в 2020 любой вид можно CustomExporter скормить
Вот это полезная информация. К сожалению, пока на 2018.
может у него и правда Location где-то за пределами CropBox-а находится
А разве в этом случае он будет виден на View?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Ааа, я про это и говорю :) У меня на виде-то он виден. А по координатам он находится з пределами

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

  • ADN Club
  • ***
  • Сообщений: 214
  • Карма: 5
  • Sergey
  • Skype: sergey.s.shevtsov
Ну тогда, буду пробовать CustomExporter в 20ой версии. А там, может и получится перевести пользователей на 20ую версию

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Ну да, я предлагаю по BoundingBox проверить, а не по Location