Fix #3627. Bug where exclude didn't take into account entities are "OR" not "AND". Whoops.

This commit is contained in:
Dion Moult
2023-08-24 11:50:33 +10:00
parent 002985a446
commit 968cceb725
2 changed files with 7 additions and 5 deletions
+4 -4
View File
@@ -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
@@ -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()