Результаты поиска для 'list'
-
АвторРезультаты поиска
-
11.08.2020 в 14:39 #10119
Тема: Группировка списков
в форуме Задать вопросOlga
УчастникЗдравствуйте, помогите пожалуйста с группировкой списков. Есть список помещений, в них есть элементы отделки, необходимо сгруппировать помещения по одинаковым значениям содержащихся элементов (к примеру, в List.UniqueItems в подсписке 25 и 26 типы отделки одинаковые, соответственно они (помещения) будут в одной группе, и им будет назначена одна группа номеров помещений). Пробовала в List.GroupByKey список отделки делать ключом, а список помещений – листом, но не получилось, не срослось. Скрин прилагаю, заранее спасибо за помощь
21.07.2020 в 12:39 #10062В ответ на: Реструкторизация списка
04.06.2020 в 19:55 #10011В ответ на: пропадают элементы
Xuan Li
УчастникHi all
Whwn i run PyS Auto dimension for rebars an error ”
<h1 id=”caas-title” class=”caas__title caas-content-result-mt”>IronPythonEvaluator.EvaluateIronPythonScript operation failed”</h1>
import clr
clr.AddReference(‘RevitAPI’)
import Autodesk
from Autodesk.Revit.DB import *
from System.Collections.Generic import *
import System
import mathclr.AddReference(‘ProtoGeometry’)
from Autodesk.DesignScript.Geometry import *from operator import itemgetter, attrgetter
clr.AddReference(“RevitNodes”)
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.GeometryReferences)clr.AddReference(“RevitServices”)
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManagerdoc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
uiapp=DocumentManager.Instance.CurrentUIApplication
app = uiapp.Applicationgopt = Options()
gopt.ComputeReferences = True
view = doc.ActiveView
gopt.View = viewlist0=[]
for i in IN[0]:
typename = i.GetType().Name
if typename = “x”
list0.append(i)coord=[]
ids=[]
list=[]
elem=list0
listcurve= UnwrapElement(elem[0]).GetCenterlineCurves(0,0,0)
curve= listcurve[0].ToProtoType()
pt0=curve.PointAtParameter(1)
x01 = curve.PointAtParameter(0).X
y01 = curve.PointAtParameter(0).Ylistcurve2= UnwrapElement(elem[1]).GetCenterlineCurves(0,0,0)
curve2= listcurve2[0].ToProtoType()
pt02=curve2.PointAtParameter(1)
x02 = curve2.PointAtParameter(0).X
y02 = curve2.PointAtParameter(0).Yif abs(y01-y02)<10:
for i in list0:
listcurve= UnwrapElement(i).GetCenterlineCurves(0,0,0)
curve= listcurve[0].ToProtoType()
coord.append(curve.PointAtParameter(1).X)
ids.append(UnwrapElement(i).Id)
elif abs(x01-x02)<10:
for i in list0:
listcurve= UnwrapElement(i).GetCenterlineCurves(0,0,0)
curve= listcurve[0].ToProtoType()
coord.append(curve.PointAtParameter(1).Y)
ids.append(UnwrapElement(i).Id)list=zip(coord, ids)
list2=sorted(list, key=itemgetter(0))list3=[]
for i in range(len(list2)):
elemId=list2[i][1]
list3.append(doc.GetElement(elemId).ToDSType(True))elem=list3
listcurve= UnwrapElement(elem[0]).GetCenterlineCurves(0,0,0)
curve= listcurve[0].ToProtoType()
pt0=curve.PointAtParameter(1)
x0 = curve.PointAtParameter(0).X
x1 = curve.PointAtParameter(1).X
y0 = curve.PointAtParameter(0).Y
y1 = curve.PointAtParameter(1).Y
z0 = curve.PointAtParameter(0).Z
z1 = curve.PointAtParameter(1).Z
if abs(y01-y02)<10:
if z0>z1:
pt0= Point.ByCoordinates(x0, y0, z1-300)
pt1= Point.ByCoordinates(pt0.X+100, pt0.Y, pt0.Z)
line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()elif z0<z1:
pt0= Point.ByCoordinates(x0, y0, z0-300)
pt1= Point.ByCoordinates(pt0.X+100, pt0.Y, pt0.Z)
line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()if y0>y1:
pt0= Point.ByCoordinates(x0, y1-300, 0)
pt1= Point.ByCoordinates(pt0.X+100, pt0.Y, pt0.Z)
line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()elif y0<y1:
pt0= Point.ByCoordinates(x0, y0-300, 0)
pt1= Point.ByCoordinates(pt0.X+100, pt0.Y, pt0.Z)
line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()elif abs(x01-x02)<10:
if z0>z1:
pt0= Point.ByCoordinates(x0, y0, z1-300)
pt1= Point.ByCoordinates(pt0.X, pt0.Y+100, pt0.Z)
line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()elif z0<z1:
pt0= Point.ByCoordinates(x0, y0, z0-300)
pt1= Point.ByCoordinates(pt0.X, pt0.Y+100, pt0.Z)
line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()if x0>x1:
pt0= Point.ByCoordinates(x1-300, y1, 0)
pt1= Point.ByCoordinates(pt0.X, pt0.Y+100, pt0.Z)
line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()elif x0<x1:
pt0= Point.ByCoordinates(x0-300, y0, 0)
pt1= Point.ByCoordinates(pt0.X, pt0.Y+100, pt0.Z)
line=Line.ByStartPointEndPoint(pt0,pt1).ToRevitType()ref= ReferenceArray()
for i in list3:
rebar=UnwrapElement(i)
geo= rebar.get_Geometry(gopt)
enum = geo.GetEnumerator()
enum.MoveNext()
linerebarref = enum.Current.Reference
ref.Append(linerebarref)TransactionManager.Instance.EnsureInTransaction(doc)
newdim1 = doc.Create.NewDimension(doc.ActiveView, line, ref)
TransactionManager.Instance.TransactionTaskDone()seg=[]
segments = UnwrapElement(newdim1).Segments
for i in segments:
seg.append(i.ValueString)rebarref=[]
for i in list3:
rebar=UnwrapElement(i)
geo = rebar.get_Geometry(gopt)
enum = geo.GetEnumerator()
enum.MoveNext()
linerebarref = enum.Current.Reference
rebarref.append(linerebarref)ref1=ReferenceArray()
rebar=UnwrapElement(elem[0])
geo = rebar.get_Geometry(gopt)
enum = geo.GetEnumerator()
enum.MoveNext()
linerebarref = enum.Current.Reference
ref1.Append(linerebarref)dimseg=[]
k=[]
k.append(0)
dimk=[]
for i in range(len(seg)-1):
if seg[i]==seg[i+1]:
continue
elif seg[i] != seg[i+1]:
rebar=UnwrapElement(elem[i+1])
geo = rebar.get_Geometry(gopt)
enum = geo.GetEnumerator()
enum.MoveNext()
linerebarref = enum.Current.Reference
ref1.Append(linerebarref)
#ref1.Append(rebarref[i+1])
k.append(i+1)
dimseg.append(seg[i])
dimk.append(k)
continuerebar=UnwrapElement(elem[-1])
geo = rebar.get_Geometry(gopt)
enum = geo.GetEnumerator()
enum.MoveNext()
linerebarref = enum.Current.Reference
ref1.Append(linerebarref)dimseg.append(seg[-1])
k.append(len(elem)-1)
p=[]
for i in range(len(k)-1):
p.append(k[i+1]-k[i])TransactionManager.Instance.EnsureInTransaction(doc)
newdim2 = doc.Create.NewDimension(doc.ActiveView, line, ref1)
segments = UnwrapElement(newdim2).Segments
for i in range(len(p)):
if p[i]==1:
segments[i].ValueOverride = dimseg[i]
else:
segments[i].ValueOverride = str(p[i])+ “x” + dimseg[i] + “=” + str(p[i]*int(dimseg[i]))doc.Delete(UnwrapElement(newdim1).Id)
TransactionManager.Instance.TransactionTaskDone()
OUT=newdim2#newdim2.ToDSType(False)
07.04.2020 в 12:21 #9843В ответ на: Получение атрибутов из списка
Да, кажется, конкретики маловато. Скиньте тестовый файлик с несколькими типами врезки, Необходимо обсуждать “на пальцах” где врезается и прибавлять длину к трубам в зависимости от диаметра, а где не нужно. Но, возможно, если сами решите искать, вам поможет нод List.GroupByKey
06.04.2020 в 09:16 #9838В ответ на: Типовой этаж (изменение параметра внутри группы)
Denis
УчастникНа List.Flatten тоже догадался заменить… а вот это я не понял что-то: “и в ноде List.Equals изменил переплетение на ххх” Что такое ххх?
05.04.2020 в 16:13 #9836В ответ на: Типовой этаж (изменение параметра внутри группы)
Посмотрел на нод, у меня также выдавал ошибку, зашел внутрь нода (дважды на него нажал. открылась новая вкладка скрипта), там заменил один нод item (Flatten) (как-то так) на List.Flatten (v2.0 Dynamo) и в ноде List.Equals изменил переплетение на ххх, закрыл окно нода, сохранил изменения и – все заработало.
27.03.2020 в 15:24 #9826В ответ на: Коннектор электрооборудования
Спасибо за помощь, в итоге сделал так (для кабеля):
a = UnwrapElement(IN[0]) #Разворачиваем элемент из Revit в Python
conList = [x for x in a.ConnectorManager.Connectors] #формируем список соединителей кабеля
results = [] #формируем пустой список для результата`
for con in (conList): #для каждого соединителя кабеля
reflist = [x for x in con.AllRefs] #определяем список подключенных соединителей
for ref in (reflist): #каждый соединитель из списка строкой выше
if ref.Owner.Id != a.Id: results.append(ref.Owner) #проверяем на принадлежность к исходному кабелю
#и если соединитель уникальный добавляем его в список результатов
OUT = results24.03.2020 в 21:44 #9816В ответ на: Коннектор электрооборудования
ilgnv88
УчастникВ моей задаче по электрической цепи необходимо найти оборудование входящее в данную цепь (BaseEq и Elements). Учитывая
На каждую подключенную к щиту электрическую цепь создается свой виртуальный коннектор
connector.AllRefs – выдаст коннекторы, с которыми связан. Иначе список будет пустой.
У настоящего коннектора домен Autodesk.Revit.DB.Domain.DomainElectrical
У виртуального коннектора домен Autodesk.Revit.DB.Domain.Undefined
получается, что определить из электрической цепи условием:for con in conList: reflist = [x for x in con.AllRefs] isElectrical = con.Domain == Autodesk.Revit.DB.Domain.DomainElectrical if reflist and isElectrical: isConnected = True
можно только Elements, но не BaseEq.
BaseEq будет подчиняться этому же условию если он сам подключен в другой щит (BaseEq)
И таким образом если у нас есть щит, к которому все подключаются, то он будет иметь только виртуальный коннектор и для него необходимо проверять условие:for con in conList: reflist = [x for x in con.AllRefs] isElectrical = con.Domain == Autodesk.Revit.DB.Domain.Undefined if reflist and isElectrical: isConnected = True
24.03.2020 в 16:11 #9813В ответ на: Коннектор электрооборудования
ilgnv88
УчастникИменно так мы и пытались узнать что подключено к электрической цепи
for con in conList: reflist = [x for x in con.AllRefs] isElectrical = con.Domain == Autodesk.Revit.DB.Domain.DomainElectrical if reflist and isElectrical: isConnected = True
Для начала, надо отфильтровать виртуальные и не виртуальные коннекторы.
У настоящего коннектора домен Autodesk.Revit.DB.Domain.DomainElectrical
У виртуального коннектора домен Autodesk.Revit.DB.Domain.Undefined
В нашем случае цепь есть и коннектор с Autodesk.Revit.DB.Domain.DomainElectrical есть, но вот reflist у данного коннектора пустой. Собственно в этом и заключается вопрос, почему так..?09.03.2020 в 02:09 #9788В ответ на: Разбить список на части по значению
Всем спасибо. Нашел решение с помощью нода List.GroupByKey, как часто бывает, “а СЛОНА и не заметил”))
08.03.2020 в 16:17 #9787Тема: Разбить список на части по значению
в форуме Задать вопросАнатолий
УчастникДоброго времени суток, уважаемые коллеги! Вопрос для профессионалов. Необходимо разбить двухуровневый список на две части в зависимости от количества позиций внутреннего списка. К примеру, дано: list = [[1,2,3],[4,5,6],[7,8,9],[10,11,12 ],[13,14,15,16],[17,18,19,20],[21,22,23,24]], на выходе должно стать list1 = [[[1,2,3],[4,5,6],[7,8,9],[10,11,12]],[[13,14,15,16],[17,18,19,20],[21,22,23,24]]], если применить к существующему списку 1-го уровня list_1= [len(i) for i in list] то будет list_1 = [3,3,3,3,4,4,4], а необходимо сделать list_2 = [[3,3,3,3],[4,4,4]], только на месте цифр у меня должны быть списки.. Задачу с разбиением списка успешно осилил txt в посте #6868. Спасибо всем кто заинтересуется. Мои поиски решения пока что не увенчались успехом.
20.02.2020 в 11:38 #9745В ответ на: string[] to element
Ты получил Имя элемента, получил ключ для сортировки и отсортировал именно имя элементов, а не сами элементы.
В list FilterByMask подай не имя элемента , а сами элементы из All element of Category/
30.11.2019 в 19:07 #9621В ответ на: Работа с вложенным списком
Mikhail
УчастникList.FirstItem и включи обработку по 2му списку
21.11.2019 в 17:51 #9602В ответ на: Балансировка трубопроводов в системе отопления
Виталий
УчастникСпасибо за ответы Ива Серж и Андрей!
Прочитал блог Тамика
filter = ElementMulticategoryFilter(typed_list) – создем фильтр для BuiltInCategory.OST_PipeCurves, BuiltInCategory.OST_PipeFitting
elements = FilteredElementCollector(doc) – Создает новый FilteredElementCollector, который будет искать и фильтровать набор элементов в открытом документе Revit.
WherePasses(filter) – выбирает элементы по нашим категориям
.WhereElementIsNotElementType() – выводим только экземпляры
Как фильтровать генератором элементы я в прошлый раз разобрался
Пробовал убрать #typed_list = List[BuiltInCategory](cat_list) – выдалось больше трех тысяч элементов
Это я к чему, мне что-бы понять как работает скрип нужно и почитать и попробовать, что выводится в OUT (поэтому времени уходит очень много)
Или \ – этот символ переход на новую строку только сегодня понял
Описание методов Revit API – многие слова в описании не понятны (пока не попробую как работает не понимаю)
Подскажите, что делать дальше
<h4></h4>21.11.2019 в 10:44 #9600В ответ на: Балансировка трубопроводов в системе отопления
36. elements = FilteredElementCollector(doc).WherePasses(filter)\
.WhereElementIsNotElementType().ToElements() – вообще не понял что этоЯ не знаю python, но чем смогу – помогу.
https://www.revitapidocs.com/2019/263cf06b-98be-6f91-c4da-fb47d01688f3.htm
elements = FilteredElementCollector(doc). – это выбор элементов с помощью коллектора (фильтрэлементколлектор) в текущем документе (doc). см. коструктор https://www.revitapidocs.com/2019/0635f1e4-652a-7e42-15af-94f24c4d8e8d.htm
.WherePasses(filter) -с помощью одного из методов фильтрэлементколлектора WherePasses(filter) (здесь filter был создан заранее, по двум категориям (29. cat_list = [BuiltInCategory.OST_PipeCurves, BuiltInCategory.OST_PipeFitting] – категория труб и категория соединительных деталей трубопроводов) именно из этих двух категорий и выбираются элементы https://www.revitapidocs.com/2019/42d4eef3-55a1-2739-0ef8-6bc1d9fc2755.htm
.WhereElementIsNotElementType() – могут выводиться в список выбранных элементов одновременно и экземляры размещенные в проектере и типоразмеры (в один список) поэтому тут выбрано, что выбираем не типоразмеры, а только элементы (экземпляры размещенные в проекте)
.ToElements() в виде списка элементов
Класс FilteredElementCollector содержит в себе
наследование
конструктор
методы
свойства.
Мы определились с помощью какого класса будем выбирать элементы. Затем в конструкторе выбрали метод выбора в текущем документе. Затем выбрали метод использующий фильтр WherePasses(filter), который позволяет сделать выборку по нескольким категориям, а дальше уже как было описано выше.В python, мне кажется, все красивей, чем в Dynamo, да и возможностей больше. Вот хочу пойти на курсы, должны скоро открыться.
-
АвторРезультаты поиска