Анатолий
Ответы в темах
-
АвторСообщения
-
Для элементов системы пожарной сигнализации скрипт https://drive.google.com/open?id=1UkPl7VH_IZjZIZatIQoXKvEtpIz6e_i8, видео https://youtu.be/WWEQYTLxTaM
Еще один вариант с помощью масенького скрипта питона
import clr
el=IN[0]
a=IN[1]
b=IN[2]
from operator import itemgetter
c=sorted (el, key=itemgetter(a,b))
OUT = cp.s. В начале у меня стоит нод на выборку первых 109 элементов, потому что в файле, который отказался под рукой не все стены имели корректную длину/высоту.
Кстати, на основании ответов Рената в ссылке на тему выше, попробовал что-то похожее сделать на питоне. Вывод – транзакция работает при условии выключенного автозапуска скрипта, иначе динамо пересчитывает все заново до безконечности и ревит зависает.
import clr clr.AddReference("RevitNodes") import Revit kk = IN[0] Revit.Transaction.Transaction.Start(kk) for i in kk: k=UnwrapElement(i).LookupParameter("Комментарии").Set("0") Revit.Transaction.Transaction.End(kk) Revit.Transaction.Transaction.Start(kk) for i in kk: k=UnwrapElement(i).LookupParameter("Комментарии").Set("1") Revit.Transaction.Transaction.End(kk) OUT = kk
Повторять код в питоне можно сколько угодно.
По поводу кода:
fund = IN[0] # принимаем на вход все элементы относящиеся к категории “фундамента несущей конструкции”, имя может быть любое.
fund1=fund.Where(lambda x: UnwrapElement(x).LookupParameter(“Наименование_Спецификация“).AsString()!=“Плита ростверка монолитная железобетонная“) # что здесь: смотрим по каким параметрам мы можем исключить ненужные элементы данной категории или оставить только необходимые. В своих задачах часто решаю проблемку заполняя параметр “Описание” для всех необходимых элементов, например для все свай – “Свая”, но у вас параметр занят, сваи по описанию бывают трех типов, потому идем другим путем. Посмотрел, в проекте были только фундаментные плиты не принадлежащие к разделу свай с категории “фундамент несущей конструкции”. У них есть параметр “Наименование_Спецификация“, который объединяет все такие плиты, мы исключаем их данным методом прописывая LookupParameter(“Наименование_Спецификация“).AsString() != (не равняется) “Плита ростверка монолитная железобетонная“). Важно! Необходимо чтобы данный параметр был у всех элементов данной категории, иначе скрипт выдаст ошибку, потому анализируем проект и исключаем лишнее.fund2=fund1.Where(lambda x: UnwrapElement(x).Symbol.LookupParameter(“Имя семейства“).AsString()==(равняется)“Бетонная свая прямоугольного сечения“) #последний шаг. Если у фундаментых плит и других не нужных элементов данной категории присутствует параметр “Имя семейства“, можно предыдущий фильтр выключить.
OUT = fund2 #подаем на выход одни сваи со всей данной категории.
Еще важно. Для фильтра по остальным параметрам, на выходе могут быть нули, если сам параметр сохраняется не в строке AsString(), другие варианты могут быть (в конце нужно прописывать): AsValueString(), AsDouble(), AsInteger().
И еще один важный момент. Возьмем пример fund2=fund1.Where(lambda x: UnwrapElement(x).Symbol.LookupParameter(“Имя семейства“).AsString()==“Бетонная свая прямоугольного сечения“) Присутствие Symbol необходимо для параметров типа, если параметр экземляра, слово Symbol удаляем.
Попытался сделать как-то так
В чем суть? Достаем параметры номер квартиры, секция(корпус) и этаж (уровень). Для всех помещений внутри каждой квартиры параметр “номер квартиры” будет одинаковым, потому собираем в одну строчку три параметра и отбираем уникальные, получаемое количество записываем в новый параметр.
Запишу, чтобы не забыть.
import clr
clr.AddReference("RevitNodes")
import Revit
family=IN[0] # на вход подаем семейство
familyName=family.Name
types = family.Types #получение всех типов семейства без подключения каких-либо библиотек
types = Revit.Elements.Family.ByName(familyName).Types #получение всех типов семейства (по имени семейства) с библиотеками import clr/clr.AddReference("RevitNodes")/import Revit
elements = []
for type in types:
elem = Revit.Elements.FamilyInstance.ByFamilyType(type) #получение всех экземпляров данного семейства (с теми же подключаемыми библиотеками)
elements.append(elem)
OUT = elementsВ посте #5863 Ренат показал как сделать транзакцию нодами, думаю, для вашей темы ответ должен быть актуальным.
Посмотрел. Максим, причина скорее всего в версии динамо (или ревита). Так понимаю, вы пытались скрипт запустить в последней 2019 версии. У меня тоже ошибку выдает. Пока вспомнил что да к чему, хорошо, что на заметку осталось сообщение о версии динамо 1.3.3. Исправление ошибки просто нужно искать в РевитАПИ..В динамо версии 2.0.1 и выше необходимо заменить нод Geometry.BoundingBox на Element.BoundingBox, но пока что скрипт у меня в 2019 версии не работает…
Заработало, просто необходимо правильно выставлять глубину проецирования этого дополнительного “тела для скрипта”.Добрый день! Не хочется флудить, я бы сказал, что тема просто не совсем изучена, мне лично таким не приходилось заниматься, был бы какой опыт, с радостью помог бы) лично у меня тоже такое в некоторых вопросах на форуме, но бывает позже и ответ получаю). Как вариант, можно спросить или поискать решения на зарубежном форуме, там много решений присутствует.
-
АвторСообщения