Почему нельзя программно скрыть некоторые элементы на виде?

Главная Форумы Задать вопрос Почему нельзя программно скрыть некоторые элементы на виде?

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

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

    Antoni
    Участник
    1 pt

    Столкнулся со следующей проблемой: не могу через API скрыть определенные элементы , а именно группы модели. Почему стоит такое ограничение и как его можно обойти?

    Вот элементы, которые нельзя скрывать судя по результатам метода Element.CanBeHidden(view).

    Элементы

    Их имена:

    Значение метода:

    Ну и понятная ошибка при попытке скрыть группу модели:

    И кусочек рабочего кода:

    #Получение элементов на виде
    def getEl(view):
    return FilteredElementCollector(doc,view.Id).ToElements()
    doc = DocumentManager.Instance.CurrentDBDocument
    uiapp = DocumentManager.Instance.CurrentUIApplication
    app = uiapp.Application

    views =  FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Views).ToElements()
    #Фильтруем виды
    sortViews = [x for x in views if "Армирование" in x.Name and "См-4.0-5" in x.Name]

    test = []
    TransactionManager.Instance.EnsureInTransaction(doc)
    for view in sortViews:
    noHidden = []
    els = []
    elsId = []
    #Получам список марок групп, которые нельзя скрывать
    for id in re.finditer("См-", view.Name):
    noHidden.append(view.Name[id.start():id.end()+6].rstrip())
    #Получение списка элементов, которые нужно скрыть
    for el in getEl(view):
    if not el.CanBeHidden(view):
    test.append(el.CanBeHidden(view))
    if el.GetType().Name == "Group" and "(арматура)" in el.Name and "См-" in el.Name:
    els.append(el)
    for i in noHidden:
    for x in els[:]:
    if i in x.Name:
    els.remove(x)
    elsId = [x.Id for x in els]
    iels =  List[ElementId](elsId)
    view.HideElements(iels)
    TransactionManager.Instance.TransactionTaskDone()

    #8151 Score: 1

    Antoni
    Участник
    1 pt

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

    #Получение элементов на виде
    def getEl(view):
    return FilteredElementCollector(doc,view.Id).ToElements()
    doc = DocumentManager.Instance.CurrentDBDocument
    uiapp = DocumentManager.Instance.CurrentUIApplication
    app = uiapp.Application

    views =  FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Views).ToElements()
    #Фильтруем виды
    sortViews = [x for x in views if “Армирование” in x.Name and “См-” in x.Name]

    TransactionManager.Instance.EnsureInTransaction(doc)
    for view in sortViews:
    noHidden = []
    els = []
    elsId = []
    #Получам список марок групп, которые нельзя скрывать
    for id in re.finditer(“См-“, view.Name):
    noHidden.append(view.Name[id.start():id.end()+6].rstrip())
    #Получение списка элементов, которые нужно скрыть
    for el in getEl(view):
    if el.GetType().Name == “Group” and “(арматура)” in el.Name and “См-” in el.Name:
    els.append(el)
    for i in noHidden:
    for x in els[:]:
    if i in x.Name:
    els.remove(x)
    #Получение идентификаторов группы
    ids = [g.GetMemberIds() for g in els]
    ids = list(itertools.chain(*ids[:]))
    iels =  List[ElementId](ids)
    if iels:
    view.HideElements(iels)
    TransactionManager.Instance.TransactionTaskDone()

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

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