mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-20 06:58:56 +00:00
Fix broken selector utility
This commit is contained in:
@@ -1,3 +1,5 @@
|
|||||||
|
import ifcopenshell.util
|
||||||
|
import ifcopenshell.util.element
|
||||||
import lark
|
import lark
|
||||||
|
|
||||||
class Selector():
|
class Selector():
|
||||||
@@ -129,7 +131,7 @@ class Selector():
|
|||||||
comparison = filter_rule.children[1].children[0].data
|
comparison = filter_rule.children[1].children[0].data
|
||||||
value = filter_rule.children[2].children[0][1:-1]
|
value = filter_rule.children[2].children[0][1:-1]
|
||||||
for element in elements:
|
for element in elements:
|
||||||
element_value = IfcAttributeExtractor.get_element_key(element, key)
|
element_value = self.get_element_value(element, key)
|
||||||
if not element_value:
|
if not element_value:
|
||||||
continue
|
continue
|
||||||
if not comparison \
|
if not comparison \
|
||||||
@@ -137,6 +139,16 @@ class Selector():
|
|||||||
results.append(element)
|
results.append(element)
|
||||||
return results
|
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):
|
def filter_element(self, element, element_value, comparison, value):
|
||||||
if comparison == 'equal':
|
if comparison == 'equal':
|
||||||
return str(element_value) == value
|
return str(element_value) == value
|
||||||
|
|||||||
Reference in New Issue
Block a user