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

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

Помечено: 

В этой теме 5 ответов, 3 участника, последнее обновление  Илья 3 мес., 1 неделя назад.

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

    Denver-22
    Участник
    6 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

    ИваСерж
    Модератор
    122 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
    Участник
    6 pts

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

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

    #7946 Score: 1

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

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

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

    #7947 Score: 0

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

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

    #9230 Score: 0

    Илья
    Участник

    Добрый день!

    Спасибо Legantmar за его скрипт(прилагаю) и Ивану Ситишеву(ссылка).

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

    Сейчас скрипт работает: выделяешь листы-запускаешь скрипт-создается набор из этих выбранных листов. Что я хочу: Есть “Стадия проектирования”=[х1,×2], есть “Орг.КомплектЧертежей”=[х1,×2,x3], есть “Ш_ФорматЛистаТекст”=[A1A,A2A,A3A,A2x3A и т.д.] и на основании этих данных хотелось бы создать автоматом разные наборы листов-это в идеале. Или хотя бы, чтобы создавались наборы листов по переменному выбору “Орг.КомплектЧертежей”. Надеюсь понятно).

    Почему не хочу первый скрипт- потому, что он печатает все листы сразу и после каждого листа спрашивает куда и с каким именем сохранить и после 12 примерно листов ревит вылетает. Второй скрипт не подходит, потому как нужно каждый раз( не часто, конечно) выделять листы(предварительно диспетчер проекта отсортировав по форматам листов).

    Спасибо заранее.

    p.s. в Python не силён пока что до сих пор.(

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

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