Получение выделенного элемента из линк-файла
Главная › Форумы › Задать вопрос › Получение выделенного элемента из линк-файла
- В этой теме 10 ответов, 3 участника, последнее обновление 7 лет, 5 месяцев назад сделано Legantmar.
-
АвторСообщения
-
Друзья, есть пара вопросов
Работаю в файле мех. оборудования, подгружен архитектурный файл, выделяю в нем окно:
Вопрос 1: как в динамо получить это окно (и вообще любой единичный выделенный элемент) из линк-файла?
Вопрос 2: как выделить все подобные окна из линк-файла на текущем виде (видимо надо использовать нод -all elements in active view – и далее фильтровать по выбранным из связанного файла элементам) ?
Здорово, все отлично работает. Спасибо огромное!
Возник еще такой вопрос : можно ли получить именно те элементы из линк-файла , которые находятся в ТЕКУЩЕМ виде , подобно тому, как их определяет нод “All elements in active view” для активных элементов проекта . Допустим, работаю на плане 1 этажа , необходимо получить все окна из связанного файла только на этом виде. Далее перехожу на 2 этажа получаю все окна на этом этаже и т.д. ?
Можно сравнить имя уровня у активного вида с именами уровней у окон.
Добавил несколько нодов.
https://yadi.sk/d/XUDavtJu3EaKcnПосле обновления Динамо почему то стала вылетать ошибка при запуске скрипта (одного из питон кода (на входе принимает True/False) в скрипте указанном выше), отвечающим за извлечение всех стен из связанного файла:
код:
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# Import ToDSType(bool) extension method
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
# Import geometry conversion extension methods
clr.ImportExtensions(Revit.GeometryConversion)
# Import DocumentManager and TransactionManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
from System.Collections.Generic import *
# Import RevitAPI
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Applicationuidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
view = doc.ActiveView
collector = FilteredElementCollector(doc) # создали коллектор
filter = ElementCategoryFilter(BuiltInCategory.OST_RvtLinks) # создали фильтр по категории RvtLinks
linkinst=collector.WherePasses(filter).WhereElementIsNotElementType().ToElements() # link instancelinkdoc = []
-
for i in linkinst:
linkdoc.append(i.GetLinkDocument()) # link documents
Windows=[]
-
for i in linkdoc:
ws= FilteredElementCollector(i).OfCategory(BuiltInCategory.OST_Walls).WhereElementIsNotElementType().ToElements()
OUT = ws
Какова может быть причина?Пробовал на другом компе с версией 1.2 там все норм работает
Сейчас удалил Динамо 1.3 и вернул свою старую версию 1.2 – но не помогло, та же ошибка
Возможно, хотя скорее всего точно, даже дело не в версии (может и скрипт выше и работает у кого то в версии 1.3) это у меня именно такой глюк
что то с входным аргументом.. ругается на document
проверяй (название, ссылки, местораположения и пр.). попробуй с другим линк-файлом в другом месте..Может быть у вас установлены какие-то надстройки, плагины, у которых имеется такой же метод FilteredElementCollector, и теперь возникает конфликт.. подумал так потому что exception ссылается на такой путь:
d:\ship\2017_px64\source\revit\revitdbapi\gensrc\APIFilteredElementCollectorProxy.cpp
Да действительно,
очевидно , что из-за двух линк-файлов он не будет работать
в проекте было два линк -файла , после того как удалил один все заработало
Возник вопрос: если в проекте 2 и более линк файла , то как в скрипте указать чтобы он выбрал все окна именно с конкретного линка (указав, вероятно, его имя) ?
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.