Сообщество программистов Autodesk в СНГ
ADN Club => Revit API => Тема начата: enot от 29-09-2018, 14:11:01
-
каков наиболее эффективный способ поиска видов , на котором расположен (отображен) определенный элемент (Element.Id)?
-
Эффективный способ есть только для тех элементов, которые существуют только на каком-либо виде, т.е. аннотации, линии детализации, элементы узлов. У них есть свойство OwnerViewId.
-
Хорошо, понял. Значит только собрать коллектором виды и на них пробовать получить элемент. Спасибо
-
А если немного поразмыслить о сути Ревита как о базе данных, то такого вопроса даже не возникнет, ибо вид может знать об элементе, а вот элемент не может знать ничего ни о каких видах. Он даже может везде выглядеть по разному и тоже об этом не знать =))
-
Почему элемент не может знать на каком виде он расположен , если есть свойство ownerviewid ?
Мы собираем все экземпляры элемента , например FamilyInstance во всем документе, и для каждого получаем вид
Если мы собираем экземпляры элементов через FilteredElementCollector(doc)... FamilyInstance то получаем все экземпляры, которые точно расположены на каком либо виде, верно?
Другое дело, если мы пытаемся получить ownerview , например family. Тут должна быть ошибка
-
Почему элемент не может знать на каком виде он расположен , если есть свойство ownerviewid ?
Простое объяснение. А если элемент виден не на одном, а на нескольких видах? Какое тогда значение у его ownerviewid? ownerviewid имеет смысл только для элементов, которые есть только на виде и их нет в модели, как написал Александр Игнатович.
-
Почитай:
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)
-
которые есть только на виде и их нет в модели
Да об этом было сказано ранее, но только сейчас это понял...
Спасибо
-
которые есть только на виде и их нет в модели
Только сейчас понял...
Спасибо
Есть еще одна особенность. Элемент может иметь свойство Visible на конкретном виде, но реально не виден (он за пределами области видимости данного вида). Так что это тоже нужно учитывать.
-
он за пределами области видимости данного вида
область видимости? речь идет об границах обрезки вида ? или о чем
-
речь идет об границах обрезки вида ?
Да.
-
Есть еще одна особенность. Элемент может иметь свойство Visible на конкретном виде, но реально не виден (он за пределами области видимости данного вида). Так что это тоже нужно учитывать.
Как это можно учесть (если элемент Visible но находится за пределами обрезки)? Как вариант собрать коллектором все элементы на виде, а затем сравнить с текущим элементом ? так как коллектор дает элементы , которые реально видны на виде...
-
так как коллектор дает элементы , которые реально видны на виде...
Если это так, то ничего делать не нужно. Если это не так, то нужно сравнивать CropBox вида с BoundingBox для элемента.
-
Не надо усложнять =) При использовании FilteredElementCollector с указанием конкретного вида в результат попадают только видимые на этом виде элементы
-
Не надо усложнять =) При использовании FilteredElementCollector с указанием конкретного вида в результат попадают только видимые на этом виде элементы
В большинстве случаев, да, всё так. Но. Если отредактировать форму обрезки или добавить разрыв по вертикали / горизонтали, то тогда уже нужно проверять, действительно ли виден элемент, коллектор в общем случае отдаст больше элементов.