Анатолий
Ответы в темах
-
АвторСообщения
-
Для элементов системы пожарной сигнализации скрипт 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 элементов, потому что в файле, который отказался под рукой не все стены имели корректную длину/высоту.
В принципе, ИваСерж дал расширенный ответ о выводе данных списком, немного уточню по вашему коду скрипта питона 2.7. Чтобы ответ выглядел в виде списка, в вашем коде необходимо прописать:
list = [] for x in a: x = x*2 list.append(x) OUT = list
В одну строку как вам отвечали, это будет
list=[x*2 for x in a]
Рад, что почти все получается. Питон, конечно, поизучать стоит, особенно когда проекты больших объемов. В данном случае прописывать следующим образом:
doors1=doors.Where(lambda x: UnwrapElement(x).Symbol(если параметр экземпляра, Symbol не пишем).LookupParameter(“Параметр объекта“).AsString() (AsValueString(), AsDouble(), AsInteger(), все на выбор, смотря в каком формате данные параметра заложены) == (если равняется или !=, если не равняется следующим данным параметра, который будем дальше прописывать) “Данные параметра“. Прописывать код необходимо строго в этом порядке. ничего не убирать и не добавлять. То есть, например
name1=name.Where(lambda x: UnwrapElement(x).LookupParameter(“Параметр объекта“).AsValueString()==“Данные параметра“, при необходимости добавить фильтр еще по каким-то параметрам работаем уже с последними данными, например
name2=name1.Where(lambda x: UnwrapElement(x).Symbol.LookupParameter(“Новый параметр объекта“).AsValueString()==“Соответствующие данные параметра“ , постарался объяснить немного доступней)
Кстати, на основании ответов Рената в ссылке на тему выше, попробовал что-то похожее сделать на питоне. Вывод – транзакция работает при условии выключенного автозапуска скрипта, иначе динамо пересчитывает все заново до безконечности и ревит зависает.
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 Ренат показал как сделать транзакцию нодами, думаю, для вашей темы ответ должен быть актуальным.
-
АвторСообщения