diff --git a/src/blenderbim/blenderbim/tool/drawing.py b/src/blenderbim/blenderbim/tool/drawing.py index 9c98e756c0..8b4bc48f6d 100644 --- a/src/blenderbim/blenderbim/tool/drawing.py +++ b/src/blenderbim/blenderbim/tool/drawing.py @@ -1504,7 +1504,7 @@ class Drawing(blenderbim.core.tool.Drawing): elements = cls.get_elements_in_camera_view(tool.Ifc.get_object(drawing), bpy.data.objects) include = pset.get("Include", None) if include: - elements = set(ifcopenshell.util.selector.filter_elements(ifc_file, include, elements=elements)) + elements = ifcopenshell.util.selector.filter_elements(ifc_file, include, elements=elements) else: if tool.Ifc.get_schema() == "IFC2X3": base_elements = set(ifc_file.by_type("IfcElement") + ifc_file.by_type("IfcSpatialStructureElement")) @@ -1516,7 +1516,7 @@ class Drawing(blenderbim.core.tool.Drawing): exclude = pset.get("Exclude", None) if exclude: - elements -= set(ifcopenshell.util.selector.filter_elements(ifc_file, exclude, elements=elements)) + elements -= ifcopenshell.util.selector.filter_elements(ifc_file, exclude) elements -= set(ifc_file.by_type("IfcOpeningElement")) return elements @@ -1529,10 +1529,10 @@ class Drawing(blenderbim.core.tool.Drawing): tool.Ifc.get_object(drawing), [tool.Ifc.get_object(e) for e in ifc_file.by_type("IfcSpace")] ) if include: - elements = set(ifcopenshell.util.selector.filter_elements(ifc_file, include, elements=elements.copy())) + elements = ifcopenshell.util.selector.filter_elements(ifc_file, include, elements=elements) exclude = pset.get("Exclude", None) if exclude: - elements -= set(ifcopenshell.util.selector.filter_elements(ifc_file, exclude, elements=elements.copy())) + elements -= ifcopenshell.util.selector.filter_elements(ifc_file, exclude) return elements @classmethod diff --git a/src/ifcopenshell-python/ifcopenshell/util/selector.py b/src/ifcopenshell-python/ifcopenshell/util/selector.py index 1f62223b7b..f2dda2a9e5 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/selector.py +++ b/src/ifcopenshell-python/ifcopenshell/util/selector.py @@ -119,7 +119,9 @@ def get_element_value(element, query): return Selector.get_element_value(element, filter_query["keys"], filter_query["is_regex"]) -def filter_elements(ifc_file, query, elements=None): +def filter_elements(ifc_file, query, elements=None, edit_in_place=False): + if elements and not edit_in_place: + elements = elements.copy() transformer = FacetTransformer(ifc_file, elements) transformer.transform(filter_elements_grammar.parse(query)) return transformer.get_results()