Сообщество программистов Autodesk в СНГ
ADN Club => Revit API => Тема начата: shss от 08-11-2019, 14:28:23
-
Добрый день!
У меня есть два файла модель с архитектурой (стенами/комнатами) и модель с фурнитурой, и модель с фурнитурой связана с архитектурной моделью. Каждый вид созданный в центральной(архитектурной) модели представляет собой отдельную комнату, в которой находится определенное количество фурнитуры из связанного файла. Есть ли возможность получить все связанные элементы, которые находятся, в выбранном виде?
Пробовал получить элементы из связанного файла, сравнивая, трансформированные координаты элемента с координатами CropBox и если элемент внутри, то работал с ним. Все работало неплохо до тех пор пока я не стокнулся с тем, что элемент связанного файла присутствует на виде, но по координатам он не попадает в CropBox, что очень странно.
-
Абсолютно ничего странного. Когда Вы работаете с документом связанной модели, Вы получаете координаты в пространстве модели связанного документа.
Чтобы перейти к координатам основной модели, нужно получить трансформ из RevitLinkInstance. Метод GetTotalTransform()
-
трансформированные координаты элемента с координатами CropBox
Да, я произвожу трансформацию координат элемента. В этом-то странность и заключается.
Через RevitLookup - Snoop Linked Element - Location (453, 122)
Snoop Active View - CropBox - Max (444, 108)
-
Принято.
Чтож, тогда, вероятно, дело в этом:
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)
В документации более ранних версий этого параграфа может не быть, участвовал в дискусии, благодаря которой добавилось это примечание
-
То есть - это баг? :)
И получается кроме, как через сравнение координат, другого способа получения элементов с вида нет?
-
Да, я произвожу трансформацию координат элемента. В этом-то странность и заключается.
Через RevitLookup - Snoop Linked Element - Location (453, 122)
Snoop Active View - CropBox - Max (444, 108)
В код RevitLookup-а не смотрел, но 99.9% координаты он для Linked Element не переводит.
-
И получается кроме, как через сравнение координат, другого способа получения элементов с вида нет?
Вообще есть CustomExporter, с 2020 можно любой вид обрабатывать, до этого - только 3D.
То есть - это баг?
ну и да и нет.
Тут вообще до 2020 плохо то, что вот так проверить видимость на конкретном виде элементов из связанного файла на 100% нельзя, ну, точнее, можно, но только для 3D. Например, можно скрыть элемент, применить фильтры, применить настройки вида для связанной модели.
С 2020 CustomExporter работает для любых видов, с его помощью уже 100% задача решается.
-
CustomExporter, мне не подходит, потому как у меня планы, а не 3D виды.
-
В код RevitLookup-а не смотрел, но 99.9% координаты он для Linked Element не переводит.
Да, верно, только что проверил, на другом примере.
Просто в первом примере линк и центральная модель в идентичной системе координат.
-
Ну в 2020 любой вид можно CustomExporter скормить :)
Попробуйте ещё пересечение с BoundingBox-ом элемента (естественно, с учётом Transform-а, в т.ч., возможно, поворота), может у него и правда Location где-то за пределами CropBox-а находится
-
Ну в 2020 любой вид можно CustomExporter скормить
Вот это полезная информация. К сожалению, пока на 2018.
может у него и правда Location где-то за пределами CropBox-а находится
А разве в этом случае он будет виден на View?
-
Ну вроде бы без проблем:
(https://i.postimg.cc/Hr0yxbqh/Cut.png) (https://postimg.cc/Hr0yxbqh)
-
Ааа, я про это и говорю :) У меня на виде-то он виден. А по координатам он находится з пределами
-
Ну тогда, буду пробовать CustomExporter в 20ой версии. А там, может и получится перевести пользователей на 20ую версию
-
Ну да, я предлагаю по BoundingBox проверить, а не по Location
-
Ну тогда, буду пробовать CustomExporter в 20ой версии. А там, может и получится перевести пользователей на 20ую версию
Ну это да, самое надёжное для таких задач.