Почему нельзя программно скрыть некоторые элементы на виде?
Главная › Форумы › Задать вопрос › Почему нельзя программно скрыть некоторые элементы на виде?
- В этой теме 1 ответ, 1 участник, последнее обновление 6 лет, 2 месяца назад сделано
Antoni.
-
АвторСообщения
-
Столкнулся со следующей проблемой: не могу через API скрыть определенные элементы , а именно группы модели. Почему стоит такое ограничение и как его можно обойти?
Вот элементы, которые нельзя скрывать судя по результатам метода Element.CanBeHidden(view).
Элементы
Их имена:
Значение метода:
Ну и понятная ошибка при попытке скрыть группу модели:
И кусочек рабочего кода:
#Получение элементов на виде
def getEl(view):
return FilteredElementCollector(doc,view.Id).ToElements()
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Applicationviews = 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()Нашел решение. Нужно скрывать не саму группу, а элементы, которые в нее входят.
#Получение элементов на виде
def getEl(view):
return FilteredElementCollector(doc,view.Id).ToElements()
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Applicationviews = 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() -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.