Не работает View.IsolateElementsTemporary()
Главная › Форумы › Python › Revit Library (API) › Не работает View.IsolateElementsTemporary()
- В этой теме 8 ответов, 2 участника, последнее обновление 8 лет, 10 месяцев назад сделано Legantmar.
-
АвторСообщения
-
Привет, собственно, проблема такая, как быть?
Есть 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 не скрыты! Как с этим бороться?
не знаю проверил все работает
использую ревит 2015, может в ревит 2016 что-то изменили.
Да, там какая-то хрень с транзакцией вероятно, потому что я сначала создаю вид, а потом что-то на нём изолирую… Напрямую не работает, а с переключателем boolean всё работает (на true создаётся вид, на false — изолируется).
//с переключателем boolean всё работает
это особенность питон нодов, если внутри ничего не изменилось в тексте скрипта и на вход ничего не подается, то он не запускается более одного раза.
для этого умные люди придумали подключать boolean, чтобы “разнообразить жизнь питон-нода”.
ПЕРЕД КАЖДЫМ запуском просто переводи boolean в противоположное положение и будет тебе счастье.
Второй вариант (смотри многие стали использовать), это скачать пакет от prorubim и использовать нод ForceChildrenEval (тоже самое, но нод делает это автоматически)
Legantmar, нет, там была особенность, что я подряд:
- Создал вид.
- Менял ряд его свойств (имя, уровень детализации и т. п.).
- Хотел применить изоляцию по элементам, но ничего не получалось именно с изоляцией элементов.
В итоге забил, сделав вывод, что что-то не так со взаимодействием dynamo с ревит и транзакциями, которые dynamo открывает и закрывает сам (кажется ведь так? По крайней мере сделать некоторый вид активным нельзя из dynamo никак, т. е. даже если делать ForceCloseTransaction(), dynamo оставляет открытой некую глобальную транзакцию).
Legantmar, ну как, нет идей у тебя, почему изоляция не работает в только что созданном виде? Кстати, такая же хрень не только в dynamo, но и в revit python shell — если создать вид и что-то пытаться в нём заизолировать (предположу, что это случится и на других платформах). Другие свойства вида меняются, а изоляция — нет. Сам режим изоляции на виде включается (голубая рамочка), а вот элементы он не схватывает из
System.Collections.Generic.List
.
Но обратный инструментHideElements
работает! Можно конечно скрыть то, что не нужно, но если модель объёмная, мне кажется, не очень хорошо будет собирать коллектором все остальные элементы из модели (которые нужно скрыть на виде).sec_view = ViewSection.CreateSection(doc, ElementId(49554), bb) sec_view.IsolateElementsTemporary(elements_to_isolate)
а как ты вид создаешь? и как пытаешься изолировать? в одной транзакции?
предполагаю что должно быть примерно так:
транзакция открыть
создать вид
транзакцию закрытьтранзакцию открыть
изолировать
транзакцию закрытьИ так тоже пытался…
Но, как я написал, проблема не привязана к dynamo (т. е. не связана с постоянно открытой транзакцией от dynamo). :с
есть предположение, что в одном ноде не стоит объединять “две одновременных операции”,
нужна “задержка” между созданием вида и действиями на нем.
попробуй вторую часть по изоляции вынести в следующий нод .
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.