From 63e65b21140848e3ba3013d9dc6f4c2a38ec3d82 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Tue, 14 Jul 2020 19:27:56 +1000 Subject: [PATCH] Fix broken selector utility --- .../ifcopenshell/util/selector.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ifcopenshell-python/ifcopenshell/util/selector.py b/src/ifcopenshell-python/ifcopenshell/util/selector.py index be3441a499..3ad3b683ec 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/selector.py +++ b/src/ifcopenshell-python/ifcopenshell/util/selector.py @@ -1,3 +1,5 @@ +import ifcopenshell.util +import ifcopenshell.util.element import lark class Selector(): @@ -129,7 +131,7 @@ class Selector(): comparison = filter_rule.children[1].children[0].data value = filter_rule.children[2].children[0][1:-1] for element in elements: - element_value = IfcAttributeExtractor.get_element_key(element, key) + element_value = self.get_element_value(element, key) if not element_value: continue if not comparison \ @@ -137,6 +139,16 @@ class Selector(): results.append(element) return results + def get_element_value(self, element, key): + info = element.get_info() + if key in info: + return info[key] + elif '.' in key: + pset_name, prop = key.split('.') + psets = ifcopenshell.util.element.get_psets(element) + if pset_name in psets and prop in psets[pset_name]: + return psets[pset_name][prop] + def filter_element(self, element, element_value, comparison, value): if comparison == 'equal': return str(element_value) == value