Результаты поиска для 'list'

Главная Форумы Поиск Результаты поиска для 'list'

Просмотр 15 результатов — с 16 по 30 (из 325)
  • Автор
    Результаты поиска
  • #10119
    Olga
    Участник

    Здравствуйте, помогите пожалуйста с группировкой списков. Есть список помещений, в них есть элементы отделки, необходимо сгруппировать помещения по одинаковым значениям содержащихся элементов (к примеру, в List.UniqueItems в подсписке 25 и 26 типы отделки одинаковые, соответственно они (помещения) будут в одной группе, и им будет назначена одна группа номеров помещений). Пробовала в List.GroupByKey список отделки делать ключом, а список помещений – листом, но не получилось, не срослось. Скрин прилагаю, заранее спасибо за помощь

    #10062
    txt
    Модератор
    86 pts

    #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 math

    clr.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 TransactionManager

    doc = DocumentManager.Instance.CurrentDBDocument
    uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
    uiapp=DocumentManager.Instance.CurrentUIApplication
    app = uiapp.Application

    gopt = Options()
    gopt.ComputeReferences = True
    view = doc.ActiveView
    gopt.View = view

    list0=[]
    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).Y

    listcurve2= UnwrapElement(elem[1]).GetCenterlineCurves(0,0,0)
    curve2= listcurve2[0].ToProtoType()
    pt02=curve2.PointAtParameter(1)
    x02 = curve2.PointAtParameter(0).X
    y02 = curve2.PointAtParameter(0).Y

    if 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)
    continue

    rebar=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)

    #9843
    Анатолий
    Участник
    37 pts

    Да, кажется, конкретики маловато. Скиньте тестовый файлик с несколькими типами врезки, Необходимо обсуждать “на пальцах” где врезается и прибавлять длину к трубам в зависимости от диаметра, а где не нужно. Но, возможно, если сами решите искать, вам поможет нод List.GroupByKey

    Denis
    Участник

    На List.Flatten тоже догадался заменить… а вот это я не понял что-то: “и в ноде List.Equals изменил переплетение на ххх” Что такое ххх?

    Анатолий
    Участник
    37 pts

    Посмотрел на нод, у меня также выдавал ошибку, зашел внутрь нода (дважды на него нажал. открылась новая вкладка скрипта), там заменил один нод item (Flatten) (как-то так) на List.Flatten (v2.0 Dynamo) и в ноде List.Equals изменил переплетение на ххх, закрыл окно нода, сохранил изменения и  – все заработало.

    #9826
    Sergey
    Участник
    1 pt

    Спасибо за помощь, в итоге сделал так (для кабеля):

    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 =  results

    #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
    #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 у данного коннектора пустой. Собственно в этом и заключается вопрос, почему так..?

    Анатолий
    Участник
    37 pts

    Всем спасибо. Нашел решение с помощью нода List.GroupByKey, как часто бывает, “а СЛОНА и не заметил”))

    Анатолий
    Участник

    Доброго времени суток, уважаемые коллеги! Вопрос для профессионалов. Необходимо разбить двухуровневый список на две части в зависимости от количества позиций внутреннего списка. К примеру, дано: 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. Спасибо всем кто заинтересуется. Мои поиски решения пока что не увенчались успехом.

    #9745

    В ответ на: string[] to element

    Александр
    Участник
    16 pts

    Ты получил Имя элемента, получил ключ для сортировки и отсортировал именно имя элементов, а не сами элементы.

    В list FilterByMask подай не имя элемента , а сами элементы из All element of Category/

    #9621
    Mikhail
    Участник

    List.FirstItem и включи обработку по 2му списку

    Виталий
    Участник

    Спасибо за ответы Ива Серж и Андрей!

    Прочитал блог Тамика

    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>

    Андрей
    Участник
    2 pts

    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, да и возможностей больше. Вот хочу пойти на курсы, должны скоро открыться.

Просмотр 15 результатов — с 16 по 30 (из 325)