Есть ли ноды для управления видимостью в активном виде ревит ?

Главная Форумы Dynamo Ноды Есть ли ноды для управления видимостью в активном виде ревит ?

Просмотр 15 сообщений - с 1 по 15 (из 17 всего)
  • Автор
    Сообщения
  • #1558 Score: 0
    BaRaBaIIIkA
    Участник

    Помогите новичку.
    Интересует вопрос:
    Есть ли готовые ноды для управления видимостью “элемента” на данном видовом экране, как аналог команды “скрыть на виде” в Revit.

    #1559 Score: 0
    Legantmar
    Хранитель
    469 pts

    Есть нод (можно скачать в поиске пакета) Element.IsHidden, который определяет скрыт ли объект или нет (выдает на выходе 2 списка).
    Но вот есть ли нод или команда позволяющая скрывать и открывать элементы я пока не знаю.

    #1560 Score: 0
    Vladimir
    Участник
    13 pts

    ну через два нода можно. получить параметр и установить тру или фолс, я так думаю.

    #1561 Score: 0
    BaRaBaIIIkA
    Участник

    В том-то и дело, что Element.IsHidden видел, полез в питон нашел еще свойство Element.CanBeHidden – т.е. возможность скрытия, а как задать значение “скрытию” не могу найти никакой инфы.
    Вот и создается впечатление что куда-то не туда полез… не может же быть, что в DYNAMO в нодах все простейшие вещи так или иначе присутствуют, или реализованы кастомными нодами, а про “скрытие” элементов – ничего. Может кто подскажет как в Питоне добраться до свойства объекта “скрытие” (Hidden) ?!

    #1562 Score: 0
    Khasan Mamaev
    Модератор
    187 pts

    Чуть позже доберусь до дома, отпишусь

    #1563 Score: 1
    kulkul
    Участник
    47 pts

    Hi Bara,

    Its Possible to Control Visibility of Elements in Dynamo. See Below is an example of Doors. Hope you like :)

    #1565 Score: 1
    Dmitry_dronov
    Модератор
    50 pts

    Я лично еще такое не делал, но в РевитАПИ есть метод View.HideElements() и View.HideElementsTemporary() возможно это оно и есть


    Как они работают?
    Не знаю.
    Возможно ответ есть у Джереми Таммика: http://thebuildingcoder.typepad.com
    Он не скрывал а изолировал элементы. Это подобная и очень близкая задача. Такие вещи как бы к сожалению только экспериментным путем получаются.

    Вот питон код из кастумного нода TemporalyIsolateInView, который предоставил kulkul:

    Думаю что это можно сделать по аналогии. заменить метод IsolateElementsTemporary() на HideElementsTemporary()

    #1568 Score: 3
    Legantmar
    Хранитель
    469 pts

    Дим, ты прав.
    Kulkul, Дмитрий, спасибо
    вот код

    import clr
    clr.AddReference('RevitAPI')
    from Autodesk.Revit.DB import *
    from System.Collections.Generic import *
    
    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager
    
    doc = DocumentManager.Instance.CurrentDBDocument
    elements = UnwrapElement(IN[0])
    view = UnwrapElement(IN[1])
    ids = list()
    elementlist = list()
    for item in elements:
    	ids.append(item.Id)
    ielements = List[ElementId](ids)
    
    TransactionManager.Instance.EnsureInTransaction(doc)
    #view.IsolateElementsTemporary(ielements)
    view.HideElements(ielements)
    TransactionManager.Instance.TransactionTaskDone()
    OUT = (view,elements)

    Скачать скрипт

    p.s. этим и отличается открытое сообщество (коммунити)
    один поставил задачку, другой нашел похожий ответ, третий нашел в API нужную команду, четвертый собрал все

    ПРИМЕЧАНИЕ: скрипт скрывает элемент или группу элементов, совсем, не временно (т.е. это не очки)
    если нужно скрыть временно, то вместо view.HideElements(ielements) нужно написать view.HideElementsTemporary(ielements)

    #1569 Score: 3
    Legantmar
    Хранитель
    469 pts

    предугадывая вопрос, а как потом скрытые объекты сделать видимыми?
    в том же месте нужно заменить команду на View.UnhideElements(ielements) (картинка)

    p.s. другое дело как вы выделите скрытые объекты не залезая в лампочку?
    (желательно заранее записать куда-то список скрытых элементов)))

    #1570 Score: 2
    kulkul
    Участник
    47 pts

    Hi Anton,

    You can just connect View.DisableTemporaryHideIsolate :)

    #1571 Score: 2
    kulkul
    Участник
    47 pts

    And here is the code:

    import clr
    clr.AddReference('RevitAPI')
    from Autodesk.Revit.DB import *
    
    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager
    
    doc = DocumentManager.Instance.CurrentDBDocument
    view = UnwrapElement(IN[0])
    TransactionManager.Instance.EnsureInTransaction(doc)
    if view.IsTemporaryHideIsolateActive() == True:
    	view.DisableTemporaryViewMode(TemporaryViewMode.TemporaryHideIsolate)
    TransactionManager.Instance.TransactionTaskDone()
    OUT = view


    Create a CODE quote (Dmitry)

    #1578 Score: 0
    Dmitry_dronov
    Модератор
    50 pts

    Чтобы собрать невидимые элементы нужно:
    1. Включить лампочку (на всех видах где нужно выбрать скрытые элементы)
    2. Выбрать нужный вид (или несколько видов) в динамо
    3. Запустить скрипт



    Скачать: 2015-09-04-RevAPI-IsHide.dyn

    #1590 Score: 0
    BaRaBaIIIkA
    Участник

    Всем спасибо все получилось!
    Не ожидал что так быстро получу такой развернутый ответ.

    #1598 Score: 0
    Vladimir
    Участник
    13 pts

    А если не секрет, какой практический толк от этого?

    #1602 Score: 0
    BaRaBaIIIkA
    Участник

    Да все примитивно до безобразия.
    Чистить загружённые виды от лишнего хлама по списку объектов, отобранных по значениям определенных атрибутов.

Просмотр 15 сообщений - с 1 по 15 (из 17 всего)
  • Для ответа в этой теме необходимо авторизоваться.