mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-19 06:39:13 +00:00
Fix #3627. Bug where exclude didn't take into account entities are "OR" not "AND". Whoops.
This commit is contained in:
@@ -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)
|
elements = cls.get_elements_in_camera_view(tool.Ifc.get_object(drawing), bpy.data.objects)
|
||||||
include = pset.get("Include", None)
|
include = pset.get("Include", None)
|
||||||
if include:
|
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:
|
else:
|
||||||
if tool.Ifc.get_schema() == "IFC2X3":
|
if tool.Ifc.get_schema() == "IFC2X3":
|
||||||
base_elements = set(ifc_file.by_type("IfcElement") + ifc_file.by_type("IfcSpatialStructureElement"))
|
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)
|
exclude = pset.get("Exclude", None)
|
||||||
if exclude:
|
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"))
|
elements -= set(ifc_file.by_type("IfcOpeningElement"))
|
||||||
return elements
|
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")]
|
tool.Ifc.get_object(drawing), [tool.Ifc.get_object(e) for e in ifc_file.by_type("IfcSpace")]
|
||||||
)
|
)
|
||||||
if include:
|
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)
|
exclude = pset.get("Exclude", None)
|
||||||
if exclude:
|
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
|
return elements
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -119,7 +119,9 @@ def get_element_value(element, query):
|
|||||||
return Selector.get_element_value(element, filter_query["keys"], filter_query["is_regex"])
|
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 = FacetTransformer(ifc_file, elements)
|
||||||
transformer.transform(filter_elements_grammar.parse(query))
|
transformer.transform(filter_elements_grammar.parse(query))
|
||||||
return transformer.get_results()
|
return transformer.get_results()
|
||||||
|
|||||||
Reference in New Issue
Block a user