Наборы листов и видов – получить список

Главная Форумы Задать вопрос Наборы листов и видов – получить список

В этой теме 4 ответа, 2 участника, последнее обновление  Denver-22 6 мес. назад.

Просмотр 5 сообщений - с 1 по 5 (из 5 всего)
  • Автор
    Сообщения
  • #7942 Score: 0

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

    Текущая задача – удаление всех наборов листов (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.

    #7944 Score: 1

    ИваСерж
    Модератор
    96 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)

    #7945 Score: 0

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

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

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

    #7946 Score: 1

    ИваСерж
    Модератор
    96 pts

    в коде строчки 14 и 15 не нужны.
    Цикл не надо организовывать вообще.
    Вся магия сделана в генераторе списков.

    Проверил – удаляет все.

    #7947 Score: 0

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

    Серж, огромное спасибо. И за корректировку, и за показ “магии генератора списков”. Приму на заметку.

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

Для ответа в этой теме необходимо авторизоваться.