Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: enot от 29-09-2018, 14:11:01

Название: Получить все виды элемента
Отправлено: enot от 29-09-2018, 14:11:01
каков наиболее эффективный способ поиска видов , на котором расположен (отображен) определенный элемент (Element.Id)?
Название: Re: Получить все виды элемента
Отправлено: Александр Игнатович от 01-10-2018, 10:22:36
Эффективный способ есть только для тех элементов, которые существуют только на каком-либо виде, т.е. аннотации, линии детализации, элементы узлов. У них есть свойство OwnerViewId.
Название: Re: Получить все виды элемента
Отправлено: enot от 01-10-2018, 13:53:47
Хорошо, понял. Значит только собрать коллектором виды и на них пробовать получить элемент. Спасибо
Название: Re: Получить все виды элемента
Отправлено: Александр Пекшев aka Modis от 02-10-2018, 00:52:07
А если немного поразмыслить о сути Ревита как о базе данных, то такого вопроса даже не возникнет, ибо вид может знать об элементе, а вот элемент не может знать ничего ни о каких видах. Он даже может везде выглядеть по разному и тоже об этом не знать =))
Название: Re: Получить все виды элемента
Отправлено: enot от 06-10-2018, 09:06:41
Почему элемент не может знать на каком виде он расположен , если есть свойство ownerviewid ?
Мы собираем все экземпляры элемента , например FamilyInstance во всем документе, и для каждого получаем вид
Если мы собираем экземпляры элементов через FilteredElementCollector(doc)... FamilyInstance то получаем все экземпляры, которые точно расположены на каком либо виде, верно?
Другое дело, если мы пытаемся получить ownerview , например family. Тут должна быть ошибка
Название: Re: Получить все виды элемента
Отправлено: Александр Ривилис от 06-10-2018, 15:04:40
Почему элемент не может знать на каком виде он расположен , если есть свойство ownerviewid ?
Простое объяснение. А если элемент виден не на одном, а на нескольких видах? Какое тогда значение у его ownerviewid? ownerviewid имеет смысл только для элементов, которые есть только на виде и их нет в модели, как написал Александр Игнатович.
Название: Re: Получить все виды элемента
Отправлено: Александр Ривилис от 06-10-2018, 16:06:38
Почитай:
Determine Views Displaying Given Element (http://thebuildingcoder.typepad.com/blog/2014/05/views-displaying-given-element-svg-and-nosql.html#6)
Revision help: which views show this object? (http://forums.autodesk.com/t5/Revit-API/Revision-help-which-views-show-this-object/m-p/5029772)
CmdViewsShowingElements (https://github.com/jeremytammik/the_building_coder_samples/blob/master/BuildingCoder/BuildingCoder/CmdViewsShowingElements.cs)
Название: Re: Получить все виды элемента
Отправлено: enot от 06-10-2018, 16:23:43
которые есть только на виде и их нет в модели
Да об этом было сказано ранее, но только сейчас это понял...
Спасибо
Название: Re: Получить все виды элемента
Отправлено: Александр Ривилис от 06-10-2018, 16:26:00
которые есть только на виде и их нет в модели
Только сейчас понял...
Спасибо
Есть еще одна особенность. Элемент может иметь свойство Visible на конкретном виде, но реально не виден (он за пределами области видимости данного вида). Так что это тоже нужно учитывать.
Название: Re: Получить все виды элемента
Отправлено: enot от 06-10-2018, 16:29:45
он за пределами области видимости данного вида
область видимости? речь идет об границах обрезки вида ? или о чем
Название: Re: Получить все виды элемента
Отправлено: Александр Ривилис от 06-10-2018, 16:31:23
речь идет об границах обрезки вида ?
Да.
Название: Re: Получить все виды элемента
Отправлено: enot от 06-10-2018, 16:59:38
Есть еще одна особенность. Элемент может иметь свойство Visible на конкретном виде, но реально не виден (он за пределами области видимости данного вида). Так что это тоже нужно учитывать.
Как это можно учесть (если элемент Visible но находится за пределами обрезки)? Как вариант собрать коллектором все элементы на виде, а затем сравнить с текущим элементом ? так как коллектор дает элементы , которые реально видны на виде...
Название: Re: Получить все виды элемента
Отправлено: Александр Ривилис от 06-10-2018, 18:47:54
так как коллектор дает элементы , которые реально видны на виде...
Если это так, то ничего делать не нужно. Если это не так, то нужно сравнивать CropBox вида с BoundingBox для элемента.
Название: Re: Получить все виды элемента
Отправлено: Александр Пекшев aka Modis от 08-10-2018, 09:52:48
Не надо усложнять =) При использовании FilteredElementCollector с указанием конкретного вида в результат попадают только видимые на этом виде элементы
Название: Re: Получить все виды элемента
Отправлено: Александр Игнатович от 08-10-2018, 10:41:09
Не надо усложнять =) При использовании FilteredElementCollector с указанием конкретного вида в результат попадают только видимые на этом виде элементы

В большинстве случаев, да, всё так. Но. Если отредактировать форму обрезки или добавить разрыв по вертикали / горизонтали, то тогда уже нужно проверять, действительно ли виден элемент, коллектор в общем случае отдаст больше элементов.