Skip to content

Commit 52fb074

Browse files
authored
Merge pull request #3362 from Wurschdhaud/feat/filter-keep-editable
feat(selection): add Keep Editable filter button
2 parents 550905f + 797986f commit 52fb074

2 files changed

Lines changed: 77 additions & 0 deletions

File tree

  • extensions/pyRevitTools.extension/pyRevit.tab/Selection.panel/select.stack/Filter.pulldown/Keep Editable.pushbutton
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
title:
2+
en_us: Keep Editable
3+
fr_fr: Conserver les éditables
4+
ru: Удержать редактируемые
5+
chinese_s: 保留可编辑图元
6+
es_es: Mantener editables
7+
de_de: Nur bearbeitbare Elemente in aktueller Auswahl belassen
8+
pt_br: Manter Editáveis
9+
tooltip:
10+
en_us: >-
11+
Keeps only editable elements (unclaimed or owned by current user) in current
12+
selection. If nothing is selected, pick a region to filter from.
13+
fr_fr: >-
14+
Conserve uniquement les éléments éditables (non réclamés ou appartenant à
15+
l'utilisateur actuel) dans la sélection actuelle. Si rien n'est sélectionné,
16+
délimitez une zone à filtrer.
17+
ru: >-
18+
Удерживает только редактируемые элементы (незаявленные или принадлежащие
19+
текущему пользователю) в текущем выделении. Если ничего не выбрано, выберите
20+
область для фильтрации.
21+
chinese_s: >-
22+
在当前选择中仅保留可编辑图元(未申请或由当前用户拥有)。若未选择任何内容,则框选区域进行过滤。
23+
es_es: >-
24+
Mantiene solo los elementos editables (no reclamados o del usuario actual) en
25+
la selección actual. Si no hay nada seleccionado, delimite una región para
26+
filtrar.
27+
de_de: >-
28+
Die aktuelle Elementauswahl wird so vermindert, dass nur bearbeitbare Elemente
29+
(nicht beanspruchte oder dem aktuellen Benutzer gehörende) in der Auswahl
30+
verbleiben. Wenn nichts ausgewählt ist, kann ein Bereich zum Filtern gewählt
31+
werden.
32+
pt_br: >-
33+
Mantém apenas os elementos editáveis (não reivindicados ou do usuário atual)
34+
na seleção atual. Se nada estiver selecionado, selecione uma região para
35+
filtrar.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
"""Keep only editable elements in current selection.
2+
3+
If nothing is selected, pick a region to filter editable elements from.
4+
Works in both workshared and non-workshared documents.
5+
"""
6+
from pyrevit import revit
7+
from pyrevit import DB, UI
8+
9+
doc = revit.doc
10+
11+
12+
def is_editable(el):
13+
if not doc.IsWorkshared:
14+
return True
15+
try:
16+
status = DB.WorksharingUtils.GetCheckoutStatus(doc, el.Id)
17+
return status in (
18+
DB.CheckoutStatus.NotOwned,
19+
DB.CheckoutStatus.OwnedByCurrentUser,
20+
)
21+
except Exception:
22+
return True
23+
24+
25+
class EditableSelectionFilter(UI.Selection.ISelectionFilter):
26+
def AllowElement(self, element):
27+
return is_editable(element)
28+
29+
def AllowReference(self, reference, point):
30+
return False
31+
32+
33+
selection = list(revit.get_selection())
34+
if selection:
35+
editable = [el for el in selection if is_editable(el)]
36+
revit.get_selection().set_to(editable)
37+
else:
38+
try:
39+
elements = revit.pick_rectangle(pick_filter=EditableSelectionFilter())
40+
revit.get_selection().set_to(elements)
41+
except Exception:
42+
pass

0 commit comments

Comments
 (0)