Skip to content

Commit 63e65b2

Browse files
committed
Fix broken selector utility
1 parent 1222716 commit 63e65b2

1 file changed

Lines changed: 13 additions & 1 deletion

File tree

src/ifcopenshell-python/ifcopenshell/util/selector.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import ifcopenshell.util
2+
import ifcopenshell.util.element
13
import lark
24

35
class Selector():
@@ -129,14 +131,24 @@ def filter_elements(self, elements, filter_rule):
129131
comparison = filter_rule.children[1].children[0].data
130132
value = filter_rule.children[2].children[0][1:-1]
131133
for element in elements:
132-
element_value = IfcAttributeExtractor.get_element_key(element, key)
134+
element_value = self.get_element_value(element, key)
133135
if not element_value:
134136
continue
135137
if not comparison \
136138
or self.filter_element(element, element_value, comparison, value):
137139
results.append(element)
138140
return results
139141

142+
def get_element_value(self, element, key):
143+
info = element.get_info()
144+
if key in info:
145+
return info[key]
146+
elif '.' in key:
147+
pset_name, prop = key.split('.')
148+
psets = ifcopenshell.util.element.get_psets(element)
149+
if pset_name in psets and prop in psets[pset_name]:
150+
return psets[pset_name][prop]
151+
140152
def filter_element(self, element, element_value, comparison, value):
141153
if comparison == 'equal':
142154
return str(element_value) == value

0 commit comments

Comments
 (0)