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

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

Просмотр 15 результатов — с 91 по 105 (из 325)
  • Автор
    Результаты поиска
  • A.Balm
    Участник

    Спасибо огромное за наводку!

    Задача стояла чуть шире.. см. код ниже)) Но твое видео навело на интересную мысль: просто найти все параметры а потом сделать пересечение данных множеств и получить множество параметров которые принадлежат всей коллекции. Хорошо бы теперь все это оформить с помощью хотя бы SlowFilter, а не перебора нерасторопным питоном в лоб))

    Уровни слишком специфичный параметр что бы по на его основе фильтровать.. тем >, что для разных семейств он представлен по разному: стены – зависимость снизу  и сверху, familySymbol – уровень плюс смещение, и.т.д

    import clr
    clr.AddReference('RevitAPI')
    clr.AddReference('RevitAPIUI')
    from Autodesk.Revit.DB import *
    
    clr.AddReference("System.Core")
    from System.Collections.Generic import List
    
    import System
    clr.ImportExtensions(System.Linq)
    
    """ Function region """
    def set_of_string(set_string):
        name = ' '
        for i in set_string:
            name += ' ' + str(i)
        return name
    
    """ Main region """
    uidoc = __revit__.ActiveUIDocument
    doc = uidoc.Document
    
    collector = FilteredElementCollector(doc)
    collector.WhereElementIsNotElementType() # only Instances pass the collector
    
    list_of_categories = [
        ElementCategoryFilter(BuiltInCategory.OST_StructuralColumns),
        ElementCategoryFilter(BuiltInCategory.OST_Walls),
        # ElementCategoryFilter(BuiltInCategory.OST_Floors)
    ]
    
    logical_filter = LogicalOrFilter(list_of_categories)
    collector.WherePasses(logical_filter)
    
    parameter_sets = []
    trigger = 0
    for element in collector:
        try:
            parameter_set = set()
            for parameter in element.Parameters:
                parameter_set.add(parameter.Id)
            parameter_sets.append(parameter_set)
            print('ok! ' + set_of_string(parameter_set))  
        except:
            print('Error...')
            continue
    
    a = set.intersection(*parameter_sets)
    print(len(a))
    
    for id in a:
        print(id.Value.ToString())
    A.Balm
    Участник

    Доброго времени суток, коллеги!

    Не так давно стал изучать способы автоматизации revit. Сейчас хотелось бы разобраться больше с принципами работы API и для начала с фильтрами.

    Имеется коллекция полученная из FIlteredElementCollection в которую входят совершенно разные элементы: стены, полы и колонны, к примеру… Задача из всей этой коллекции получить список параметров который применим ко всем этим элементам, а затем фильтровать по ним, например оставить в коллекции только элементы которые располагаются на 2 ом этаже и в поле марка имеют значение “ololo”.Подскажите как это можно реализовать?

    uidoc = __revit__.ActiveUIDocument
    doc = uidoc.Document
    
    collector = FilteredElementCollector(doc)
    
    list_of_categories = [
        ElementCategoryFilter(BuiltInCategory.OST_StructuralColumns),
        ElementCategoryFilter(BuiltInCategory.OST_Walls),
        ElementCategoryFilter(BuiltInCategory.OST_Floors)
    ]
    
    logical_filter = LogicalOrFilter(list_of_categories)
    collector.WherePasses(logical_filter)
    Ром
    Участник

    Коллеги добрый день. Помогите пожалуйста. Почему ругается? Почему не определена? Вот сираница из API: http://www.revitapidocs.com/2016/17966565-84c8-9dc3-dc0d-62cb6c896624.htm

    вот картинка:

     

    вот код:

    reset = IN[2]

    outList = []

    objGeom1 = U(IN[0]).get_Geometry(Options())#.GeometryInstance

    for elem2 in IN[1]:
    objGeom2 = U(elem2).get_Geometry(Options())
    ex = ExecuteBooleanOperationModifyingOriginalSolid(objGeom1 , objGeom2, BooleanOperationsType.Union)

    Antoni
    Участник
    1 pt

    Нашел решение. Нужно скрывать не саму группу, а элементы, которые в нее входят.

    #Получение элементов на виде
    def getEl(view):
    return FilteredElementCollector(doc,view.Id).ToElements()
    doc = DocumentManager.Instance.CurrentDBDocument
    uiapp = DocumentManager.Instance.CurrentUIApplication
    app = uiapp.Application

    views =  FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Views).ToElements()
    #Фильтруем виды
    sortViews = [x for x in views if “Армирование” in x.Name and “См-” in x.Name]

    TransactionManager.Instance.EnsureInTransaction(doc)
    for view in sortViews:
    noHidden = []
    els = []
    elsId = []
    #Получам список марок групп, которые нельзя скрывать
    for id in re.finditer(“См-“, view.Name):
    noHidden.append(view.Name[id.start():id.end()+6].rstrip())
    #Получение списка элементов, которые нужно скрыть
    for el in getEl(view):
    if el.GetType().Name == “Group” and “(арматура)” in el.Name and “См-” in el.Name:
    els.append(el)
    for i in noHidden:
    for x in els[:]:
    if i in x.Name:
    els.remove(x)
    #Получение идентификаторов группы
    ids = [g.GetMemberIds() for g in els]
    ids = list(itertools.chain(*ids[:]))
    iels =  List[ElementId](ids)
    if iels:
    view.HideElements(iels)
    TransactionManager.Instance.TransactionTaskDone()

    Antoni
    Участник

    Столкнулся со следующей проблемой: не могу через API скрыть определенные элементы , а именно группы модели. Почему стоит такое ограничение и как его можно обойти?

    Вот элементы, которые нельзя скрывать судя по результатам метода Element.CanBeHidden(view).

    Элементы

    Их имена:

    Значение метода:

    Ну и понятная ошибка при попытке скрыть группу модели:

    И кусочек рабочего кода:

    #Получение элементов на виде
    def getEl(view):
    return FilteredElementCollector(doc,view.Id).ToElements()
    doc = DocumentManager.Instance.CurrentDBDocument
    uiapp = DocumentManager.Instance.CurrentUIApplication
    app = uiapp.Application

    views =  FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Views).ToElements()
    #Фильтруем виды
    sortViews = [x for x in views if "Армирование" in x.Name and "См-4.0-5" in x.Name]

    test = []
    TransactionManager.Instance.EnsureInTransaction(doc)
    for view in sortViews:
    noHidden = []
    els = []
    elsId = []
    #Получам список марок групп, которые нельзя скрывать
    for id in re.finditer("См-", view.Name):
    noHidden.append(view.Name[id.start():id.end()+6].rstrip())
    #Получение списка элементов, которые нужно скрыть
    for el in getEl(view):
    if not el.CanBeHidden(view):
    test.append(el.CanBeHidden(view))
    if el.GetType().Name == "Group" and "(арматура)" in el.Name and "См-" in el.Name:
    els.append(el)
    for i in noHidden:
    for x in els[:]:
    if i in x.Name:
    els.remove(x)
    elsId = [x.Id for x in els]
    iels =  List[ElementId](elsId)
    view.HideElements(iels)
    TransactionManager.Instance.TransactionTaskDone()

    #8140
    Yrij
    Участник
    2 pts

    Посмотри здесь: https://www.youtube.com/watch?v=uuOMhY3uhGc&t=0s&list=PLVCDzVIlOckHsZcqkq3DmzdGcq2503l1G&index=7

    Много раз уже обсуждалось.

    Хасан Мамаев тоже очень хорошо объяснял, что и как надо сделать

    Всеволод
    Участник

    Проблема такая: При использовании в питоне функций

    List.SortByKey и  List.GroupByKey , питон помещает массивы в библиотеку и  у меня ничего не получается с ней сделать. Ни вызвать элемент по индексу или ключу. Ничего

    Выдает такие ошибки:

    1)AttributeError: ‘Dictionary[object, object]’ object has no attribute ‘clear’

    2) File “<string>”, line 43, in <module>
    KeyError: The given key was not present in the dictionary.

    Полагаю, что ничего криминального, просто я чего-то не понимаю о работе библиотек. Кто что может подсказать ?

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

    отсортировать список можно нодом List.SortByKey 

    панели располагаются в 0 List

    Арсений
    Участник
    1 pt

    Скрипт по нумерации марок панелей витража снизу вверх – буду рад если кому пригодится.

    https://cloud.mail.ru/public/Hsif/xhRirzDuT

    Нод – Get.FamilyName из пакета BlackBox
    Нод – List.FilterByString из пакета SteamNodes

    Denver-22
    Участник
    6 pts

    Серж, спасибо за правки. Но теперь наоборот, удаляются все Наборы, кроме одного.
    В чем может быть причина? Текущий код – ссылка.

    P.S. Минимум 1 ошибку нашел: IdList надо присваивать вне цикла for. Исправил.
    Но проблема осталась. Список формируется всегда на 1 набор меньше существующих.

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

    цикл с for надо переписать предлагаю так:
    ———————————-

    SetList = [f for f in fec]
    #Получаем все id
    IdList = map(lambda x:x.Id, SetList)

    #Удаляем все id, естественно, в тразнакции
    TransactionManager.Instance.EnsureInTransaction(doc)
    for i in IdList:
    doc.Delete(i)
    TransactionManager.Instance.TransactionTaskDone()

    #OUT – не забывем, что у нас теперь не один элемент, а список.
    OUT = map(lambda x:x.Name, SetList)

    Denver-22
    Участник

    Текущая задача – удаление всех наборов листов (ViewSheetSet). Подглядел код в нодах сторонних пакетов и пытаюсь выполнить задачу.
    Текущий мой код удаляет только 1 из Наборов. А нужно, чтобы удалял все. Помогите пожалуйста исправить ошибку.
    import clr
    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager
    doc = DocumentManager.Instance.CurrentDBDocument
    clr.AddReference("RevitAPI")
    from Autodesk.Revit.DB import *
    fec = FilteredElementCollector(doc).OfClass(ViewSheetSet).GetElementIterator()
    SetList=[]
    fec.Reset()
    for f in fec:
    SetList = f
    # Для отчетности:
    OUT = SetList.Name
    TransactionManager.Instance.EnsureInTransaction(doc)
    doc.Delete(SetList.Id)
    TransactionManager.Instance.TransactionTaskDone()

    P.S. Пытался решить задачу нодами: получить элементы по категории и удалить их. Но споткнулся в самом начале – не смог найти нужное имя категории: безуспешно пробовал ViewSheetSet и OST_ViewSheetSet.

    #7928

    В ответ на: Сортировка листов

    Denver-22
    Участник
    6 pts

    Выполнить надо только для выделенной области? Т.е. не смешивая с другими элементами 1-го уровня?
    Также сделать группировку с List.GroupByKey – получатся группировки 3-го уровня. Там сделать суммирование для уровня L3 (настраивается на входе нода Sum.
    P.S. Советы даю только по нодам. Уверен, что спецы по Python могут предложить код куда более оптимальный.

    #7924

    В ответ на: Сортировка листов

    Denver-22
    Участник
    6 pts

    Вы пробовали применить связку List.SortByKey и List.GroupByKey вместо ist.GroupByFunction? Может поможет.

    #7923
    Boris.Fedonin
    Участник

    Всем доброго времени суток! Помогите, пожалуйста, разобраться с сортировкой листов. В данном скрипте я хочу взять статическое давление с каждой системы воздуховодов, взять сумму потерь давления всех воздухораспределителей конкретной системы, просуммировать и слить в спецификацию. Столкнулся с тем, что при “List.GroupByFunction”  получаются разный порядок систем для разных категорий (на скриншоте отметил). Нужно отсортировать листы так, чтобы порядок систем (и соответствующих значений) был везде одинаковый (например в алфавитном порядке). Заранее спасибо!

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