Анатолий

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

Просмотр 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

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

    #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: и так далее.

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

    Посмотрел. Максим, причина скорее всего в версии динамо (или ревита). Так понимаю, вы пытались скрипт запустить в последней 2019 версии. У меня тоже ошибку выдает. Пока вспомнил что да к чему, хорошо, что на заметку осталось сообщение о версии динамо 1.3.3. Исправление ошибки просто нужно искать в РевитАПИ..В динамо версии 2.0.1 и выше необходимо заменить нод Geometry.BoundingBox на Element.BoundingBox, но пока что скрипт у меня в 2019 версии не работает…
    Заработало, просто необходимо правильно выставлять глубину проецирования этого дополнительного “тела для скрипта”.

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

    Правильней было б.. СПАСИ-БО(Г)..)

    Извините за оффтоп, давно известная истина..)

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

    Добрый день! Не хочется флудить, я бы сказал, что тема просто не совсем изучена, мне лично таким не приходилось заниматься, был бы какой опыт, с радостью помог бы) лично у меня тоже такое в некоторых вопросах на форуме, но бывает позже и ответ получаю). Как вариант, можно спросить или поискать решения на зарубежном форуме, там много решений присутствует.

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