Анатолий

Ответы в темах

Просмотр 15 сообщений - с 1 по 15 (из 32 всего)
  • Автор
    Сообщения
  • #8257 Score: 3
    Анатолий
    Участник
    37 pts

    Добрый день! Если б немного упростить задачу, можно было бы сделать что-то подобное.. А так, конечно, хотелось бы больше практических подробностей: что нужно сделать и для чего. Возможно другие варианты появятся.

    #8712 Score: 2
    Анатолий
    Участник
    37 pts

    Добрый день! На вход необходимо подавать элементы которые не повторяются, иначе скрипт выдаст первый порядочный номер по списку.

    #8463 Score: 2
    Анатолий
    Участник
    37 pts

    Для элементов системы пожарной сигнализации скрипт https://drive.google.com/open?id=1UkPl7VH_IZjZIZatIQoXKvEtpIz6e_i8, видео https://youtu.be/WWEQYTLxTaM

    #7071 Score: 2
    Анатолий
    Участник
    37 pts

    Еще один вариант с помощью масенького скрипта питона

    import clr
    el=IN[0]
    a=IN[1]
    b=IN[2]
    from operator import itemgetter
    c=sorted (el, key=itemgetter(a,b))
    OUT = c

    p.s. В начале у меня стоит нод на выборку первых 109 элементов, потому что в файле, который отказался под рукой не все стены имели корректную длину/высоту.

    #8029 Score: 2
    Анатолий
    Участник
    37 pts

    Не знаю, правильно ли я понял вашу просьбу.

    #8675 Score: 1
    Анатолий
    Участник
    37 pts

    В принципе, ИваСерж дал расширенный ответ о выводе данных списком, немного уточню по вашему коду скрипта питона 2.7. Чтобы ответ выглядел в виде списка, в вашем коде необходимо прописать:

    list = []
    for x in a:
        x = x*2
        list.append(x)
    OUT = list

    В одну строку как вам отвечали, это будет list=[x*2 for x in a]

    #9208 Score: 1
    Анатолий
    Участник
    37 pts

    Рад, что почти все получается. Питон, конечно, поизучать стоит, особенно когда проекты больших объемов. В данном случае прописывать следующим образом:

    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()==“Соответствующие данные параметра“ , постарался объяснить немного доступней)

    #8346 Score: 1
    Анатолий
    Участник
    37 pts

    a = IN[0]
    b = IN[1]
    d = []
    for k,l in zip(a,b):
    e = round(l,1)
    c = str(k)+"х"+str(e)
    d.append(c)
    OUT = d
    #8685 Score: 1
    Анатолий
    Участник
    37 pts

    Кстати, на основании ответов Рената в ссылке на тему выше, попробовал что-то похожее сделать на питоне. Вывод – транзакция работает при условии выключенного автозапуска скрипта, иначе динамо пересчитывает все заново до безконечности и ревит зависает.

    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

    Повторять код в питоне можно сколько угодно.

    #9206 Score: 1
    Анатолий
    Участник
    37 pts

    По поводу кода:

    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 удаляем.

    #8349 Score: 1
    Анатолий
    Участник
    37 pts

    Александр, у нас просто разница в версиях динамо. Квадратные скобки работают начиная с версии 2.0. При том, по скрипту у вас, как видете, функция zip обрезает количество получаемых результатов по длине меньшего входящего списка.

    #9324 Score: 1
    Анатолий
    Участник
    37 pts

    Попытался сделать как-то так

    В чем суть? Достаем параметры номер квартиры, секция(корпус) и этаж (уровень). Для всех помещений внутри каждой квартиры параметр “номер квартиры” будет одинаковым, потому собираем в одну строчку три параметра и отбираем уникальные, получаемое количество записываем в новый параметр.

    #8400 Score: 1
    Анатолий
    Участник
    37 pts

    Запишу, чтобы не забыть.
    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

    #8724 Score: 1
    Анатолий
    Участник
    37 pts

    В посте #5863 Ренат показал как сделать транзакцию нодами, думаю, для вашей темы ответ должен быть актуальным.

    #9393 Score: 1
    Анатолий
    Участник
    37 pts

    Позвольте ответить. Отступы, как написал Антон делаются клавишей Tab, что равняется 4-м пробелам, строго 4 пробела должно быть в следующей строке (можно также делать пробелом) после команд for door in doors: try: except: и так далее.

Просмотр 15 сообщений - с 1 по 15 (из 32 всего)