Не работает View.IsolateElementsTemporary()

Главная Форумы Python Revit Library (API) Не работает View.IsolateElementsTemporary()

В этой теме 8 ответов, 2 участника, последнее обновление  Legantmar 3 года/лет, 2 мес. назад.

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

    tuuletin
    Участник
    3 pts

    Привет, собственно, проблема такая, как быть?
    Есть elements_to_isolate, который является System.Collections.Generic.List'1[Autodesk.Revit.DB.ElementId].
    Сам объект содержит следующие ElementId:

    Открываю транзакцию, меняю разные свойства вида sec_view, что мне нужно. Самым последним шагом, хочу изолировать все объекты по elements_to_isolate.
    sec_view.IsolateElementsTemporary(elements_to_isolate)

    Выполняю код, на виде включается режим “Временная изоляция”, но при этом элементы не из elements_to_isolate не скрыты! Как с этим бороться?

    #3285 Score: 0

    Legantmar
    Хранитель
    461 pts

    не знаю проверил все работает

    использую ревит 2015, может в ревит 2016 что-то изменили.

    #3315 Score: 0

    tuuletin
    Участник
    3 pts

    Да, там какая-то хрень с транзакцией вероятно, потому что я сначала создаю вид, а потом что-то на нём изолирую… Напрямую не работает, а с переключателем boolean всё работает (на true создаётся вид, на false — изолируется).

    #3318 Score: 0

    Legantmar
    Хранитель
    461 pts

    //с переключателем boolean всё работает

    это особенность питон нодов, если внутри ничего не изменилось в тексте скрипта и на вход ничего не подается, то он не запускается более одного раза.

    для этого умные люди придумали подключать boolean, чтобы “разнообразить жизнь питон-нода”.

    ПЕРЕД КАЖДЫМ запуском просто переводи boolean в противоположное положение и будет тебе счастье.

    Второй вариант (смотри многие стали использовать), это скачать пакет от prorubim и использовать нод ForceChildrenEval (тоже самое, но нод делает это автоматически)

    #3335 Score: 0

    tuuletin
    Участник
    3 pts

    Legantmar, нет, там была особенность, что я подряд:

    1. Создал вид.
    2. Менял ряд его свойств (имя, уровень детализации и т. п.).
    3. Хотел применить изоляцию по элементам, но ничего не получалось именно с изоляцией элементов.

    В итоге забил, сделав вывод, что что-то не так со взаимодействием dynamo с ревит и транзакциями, которые dynamo открывает и закрывает сам (кажется ведь так? По крайней мере сделать некоторый вид активным нельзя из dynamo никак, т. е. даже если делать ForceCloseTransaction(), dynamo оставляет открытой некую глобальную транзакцию).

    #3396 Score: 0

    tuuletin
    Участник
    3 pts

    Legantmar, ну как, нет идей у тебя, почему изоляция не работает в только что созданном виде? Кстати, такая же хрень не только в dynamo, но и в revit python shell — если создать вид и что-то пытаться в нём заизолировать (предположу, что это случится и на других платформах). Другие свойства вида меняются, а изоляция — нет. Сам режим изоляции на виде включается (голубая рамочка), а вот элементы он не схватывает из System.Collections.Generic.List.
    Но обратный инструмент HideElements работает! Можно конечно скрыть то, что не нужно, но если модель объёмная, мне кажется, не очень хорошо будет собирать коллектором все остальные элементы из модели (которые нужно скрыть на виде).

    sec_view = ViewSection.CreateSection(doc, ElementId(49554), bb)
    sec_view.IsolateElementsTemporary(elements_to_isolate)
    #3398 Score: 0

    Legantmar
    Хранитель
    461 pts

    а как ты вид создаешь? и как пытаешься изолировать? в одной транзакции?

    предполагаю что должно быть примерно так:

    транзакция открыть
    создать вид
    транзакцию закрыть

    транзакцию открыть
    изолировать
    транзакцию закрыть

    #3402 Score: 0

    tuuletin
    Участник
    3 pts

    И так тоже пытался…

    Но, как я написал, проблема не привязана к dynamo (т. е. не связана с постоянно открытой транзакцией от dynamo). :с

    #3403 Score: 0

    Legantmar
    Хранитель
    461 pts

    есть предположение, что в одном ноде не стоит объединять “две одновременных операции”,

    нужна “задержка” между созданием вида и действиями на нем.

    попробуй вторую часть по изоляции вынести в следующий нод .

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

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