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

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

Просмотр 15 результатов — с 136 по 150 (из 325)
  • Автор
    Результаты поиска
  • #7134
    Иван
    Участник
    4 pts

    К сожалению, я пробовал и менять структуру, и разворачивать элементы (хотя это не ревитовские точки, а сгенерированные в Dynamo), но он все равно просит у меня Array.

    И списки то могу, если мы говорим про list, а вот array могут только цифровые значения. Такую информацию я узнал здесь . Возможно, я что-то путаю..

    Часть скрипта и адаптивное семейство прилагаю :

    https://drive.google.com/open?id=1WZUnNzeJUx-fQCla21KkNaRbf3VfNEdr

    #7132
    Ренат Я.
    Модератор
    79 pts

    использовал функционал “Узел для кодировки”, вот что получилось, может и получиться в 1.1 запустить

    t1 = Flatten(t2);
    num1 = Count(t2@-2<1>);
    t3 = List.OfRepeatedItem(t4@-1<1>, num1@-1<1>);
    t5 = Flatten(t3@-1<1>);
    t6 = List.AddItemToEnd(t1@-1<1>, t5@-1<1>);

    #7130
    ИваСерж
    Хранитель
    134 pts

    @L1 – это хитрый способ выборки по уровням вложенного списка. Почитать можно погуглив или тут
    http://dynamobim.org/introducing-listlevel-working-with-lists-made-easier/

    Раньше как-то и без этого обходились. Лично для меня, непривычно. Но опция прикольная

    Иван
    Участник

    Добрый день!

    Пытаюсь сделать расстановку адаптивных элементов по  4 точкам через Python. Подключил библиотеки RevitNodes,в аргументы подаю  список из четырех точек и тип семейства, все как просит у нас DS.

    import clr
    clr.AddReference(‘ProtoGeometry’)
    clr.AddReference(‘RevitNodes’)
    from Autodesk.DesignScript.Geometry import *
    import Revit
    from Revit.Elements import *

    clr.AddReference(‘DSCoreNodes’)
    import DSCore
    from DSCore import *

    p=IN[0]
    FamType=IN[1]

    AdaptiveComponent.ByPoints(p,FamType)

    Но, к сожалению, нод выдает следующую ошибку:

    “TypeError: expected Array[Array[Point]], got list ”

    Он просит вложенный массив точек, а я подаю ему список. Но в пайтоне массивы (Array) , как я успел вычитать, могут быть в формате  int, float и double. Преобразовать точки в такой формат он не может, да это, наверняка, и не нужно.

    Подскажите, как починить этот нод?))

    P.S. Почему мне нужно именно Python, потому что я хочу прописать условие, чтобы при True он мне строил адаптивные компоненты, а при False – другие элементы. Если я делаю это в пределах DS, то он мне прорабатывает два варианта. Я могу сделать, чтобы он выводит ошибку, но изначально хочется, чтобы скрипт был без желтых нодов:)

    Спасибо!

    Denis
    Участник
    3 pts

    Часто пользуюсь комбинацией нодов SortByKey + GroupByKey. Проблема только одна – не корректная сортировка ( приходиться нумеровать 01, 02, …). Решил попытать сделать в питоне … спустя почти два вечера вышло только вот это:

    from itertools import groupby
    from operator import itemgetter
    Room = IN[0]
    Name = IN[1]
    Param = []
    for i in Room:
    Param.append(i.GetParameterValueByName(Name))
    Duble_list = zip (Room, Param)
    OUT = []
    for key, group in groupby (sorted (Duble_list,key=itemgetter(1)) ,key=lambda x:x[1]):
    OUT.append (list(group))

    В итоге группы не правильно делает (до правильной сортировки я даже не дошел… хотел от сюда взять ). Для первого скипта на питоне сильно сложная задача для меня. Искал еще здесь но там сортировка только списка а не елементов.

    Если не сложно можете допилить его или объяснить как это сделать.

    Задача минимум хотя бы сделать скипт на замену нода SortByKey с правильной сортировкой

    Legantmar
    Хранитель
    475 pts

    заменить строчку 2 на InList = IN[0]
    а 27 на OUT = OutList

    Legantmar
    Хранитель
    475 pts

    Иногда бывает нужно сначала сортировать по алфавиту, а затем по цифрам. (да еще без учета регистра, т.е. независимо от того большие или маленькие буквы):

    на выходе
    [[‘elm0’, ‘Elm2’, ‘elm9’, ‘elm10’], [‘alm12’, ‘Elm11’, ‘elm13’]]

    также работает и со вложенными списками вида (но это не точно)):
    InList = [[‘elm0’, ‘elm10’, ‘Elm2’, ‘elm9’, [‘olm0′,’olm10′,’olm1′,’Olm2′,’olm9’]],[‘elm13′,’alm12′,’Elm11’]]
    p.s. вложенный список должен быть в конце

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

    Аналоги на питоне (IN[0]-список элементов , IN[1]-булевый список ):
    1.) Получаем только истину:
    import itertools
    OUT=list(itertools.compress(IN[0],IN[1]))

    примечание : список IN[1] может быть не только true/false, но и 1/0

    2.) Истина и ложь:
    true_els=[i[0] for i in zip(IN[0],IN[1]) if i[1]==True]
    false_els=[i[0] for i in zip(IN[0],IN[1]) if i[1]==False]
    OUT=true_els, false_els

    список вариантов пополняемый)

    Vlad
    Участник

    Подскажите, а где взять нод List.SublistLengths, из поста #5144

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

    Большое спасибо, amilane, за труды! У вас удалось стандартными нодами сделать то же, что и ранее Legantmar сделал в питоне. Но задачу решить не удалось, к сожалению, потому что нужно еще привести выходной список в соответствие первому неотсортированному списку.. Но идея отличная, посижу, вечером, подумаю, может на основе этого порядка нодов что-то придет в голову)

    И все-таки, это выход!! Если убрать первый нод sort.list, все работает корректно!!! Еще раз огромное спасибо!)

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

    Благодарю) Обязательно попробую, увидел ответ, когда уже почти получилось задать правильные условия для корректного поворота перемычек. Почему-то если с обычного списка поворачивать, задавая угол – все нормально оборачивается, а элементы (может я не разобрался до конца) пришлось вращать, разделяя каждый угол на 2.

    import clr
    clr.AddReference("RevitAPI")
    import Autodesk
    clr.AddReference('ProtoGeometry')
    from Autodesk.DesignScript.Geometry import *
    clr.AddReference("RevitNodes")
    import Revit
    clr.ImportExtensions(Revit.Elements)
    clr.AddReference("RevitServices")
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager
    import math
    doc = DocumentManager.Instance.CurrentDBDocument
    clr.ImportExtensions(Revit.GeometryConversion)
    
    inn = IN[0]
    marka = IN[1]
    if not isinstance(inn, list):
    inn= [inn]
    Rt,Rt1,x1,y1,z1,z2,xz=[],[],[],[],[],[],[]
    for i in inn:
    try:
    elemId = UnwrapElement(i).Id
    xyz = UnwrapElement(i).Location.Point*304.8 #центри розташування елементів
    pt1 = Point.ByCoordinates(xyz.X, xyz.Y,xyz.Z) #ставимо точки
    dX=UnwrapElement(i).FacingOrientation.X
    dY=UnwrapElement(i).FacingOrientation.Y
    y1.append(dY)
    x1.append(dX)
    if dX>0 and dY>0:
    try:
    rotation1 = 180-math.degrees(math.atan(dX/dY))
    except:
    pass
    Rt.append(rotation1/2)
    elif dX>=0 and dY<0:
    try:
    rotation1 = math.degrees(math.atan(-dX/dY))
    except:
    pass
    Rt.append(rotation1/2)
    elif dX<=0 and dY>0:
    try:
    rotation1 = 180-math.degrees(math.atan(dX/dY))
    except:
    pass
    Rt.append(rotation1/2)
    elif dX==1 and dY==0:
    try:
    rotation1 = 90-math.degrees(math.atan(-dY/dX))
    except:
    pass
    Rt.append(rotation1/2)
    else:
    try:
    rotation1 = math.degrees(math.atan(-dX/dY))
    except:
    pass
    Rt.append(rotation1/2)
    except:
    pass
    OUT=Rt

    p.s. Если я многострочием засоряю тему, прошу намекнуть, чтоб я лишнего не писал.

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

    Помогите пожалуйста правильно прописать код для поворота элементов: проблема возникает при делении dX на dY, при dY=0 соответственно возникает ошибка, которую попробовал избежать через try except, но что-то не так делаю, исключение функция выкидывает из списка и соответствующие углы поворота “плывут”.. Пробовал использовать ZeroDivisionError, но правильно прописать не вышло, ошибка null.`


    Прошу прощения, снова выход нашел(( как только написал..
    inn = IN[0]
    marka = IN[1]
    if not isinstance(inn, list):
    inn= [inn]
    Rt,x1,y1,z1,z2,xz=[],[],[],[],[],[]
    for i in inn:
    try:
    elemId = UnwrapElement(i).Id
    xyz = UnwrapElement(i).Location.Point*304.8 #центри розташування елементів
    pt1 = Point.ByCoordinates(xyz.X, xyz.Y,xyz.Z) #ставимо точки
    dX=UnwrapElement(i).FacingOrientation.X
    dY=UnwrapElement(i).FacingOrientation.Y
    try:
    rotation1 = math.degrees(math.atan(dX/dY))
    Rt.append(rotation)
    except:
    pass
    Rt.append(rotation1)
    except:
    pass
    OUT=marka,Rt

    #6870
    Valery
    Участник

    Можно ли упростить подобные конструкции, как то иначе собирать список строк?

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

    как известно, при использовании set(list) мы преобразуем исходный список во множество , то есть элементы становятся неупорядоченными (в сравнении с исходным списком) и уникальными.
    Один из способов сохранить порядок исходного списка с уникальными элементами:
    (для сравнения используем также set):
    inn = [9,8,8,7,5,5,7]
    set=set(inn)
    set_save_order=[ els for indx,els in enumerate(inn) if inn.index(els)==indx ]
    OUT = set, set_save_order

    Аноним
    Неактивированный

    Спасибо! Подошло такое решение. Единственный нюанс – оказалось, что у дверного проёма (пустого) нельзя вызвать Geometry. Выдаёт Empty List. Поэтому пришлось для них решать вопрос через BoundaryBox и далее как у Вас указано

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