mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-23 14:06:26 +00:00
Including/Excluding IfcAnnotations from drawing #2903
Including or excluding elements from the drawing using EPset_Drawing.Include/Exclude now also works for IfcAnnotation elements. Both in viewport (on "activate view") and on svg print. Related change - annotation decorations are now hidden in viewport if their object is hidden.
This commit is contained in:
@@ -159,9 +159,13 @@ class BaseDecorator:
|
|||||||
"BATTING",
|
"BATTING",
|
||||||
)
|
)
|
||||||
for obj in collection.all_objects:
|
for obj in collection.all_objects:
|
||||||
|
if obj.hide_get():
|
||||||
|
continue
|
||||||
|
|
||||||
element = tool.Ifc.get_entity(obj)
|
element = tool.Ifc.get_entity(obj)
|
||||||
if not element:
|
if not element:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if element.is_a("IfcAnnotation"):
|
if element.is_a("IfcAnnotation"):
|
||||||
if element.ObjectType == self.objecttype:
|
if element.ObjectType == self.objecttype:
|
||||||
results.append(obj)
|
results.append(obj)
|
||||||
|
|||||||
@@ -605,6 +605,9 @@ class CreateDrawing(bpy.types.Operator):
|
|||||||
return svg_path
|
return svg_path
|
||||||
|
|
||||||
elements = tool.Drawing.get_group_elements(tool.Drawing.get_drawing_group(self.camera_element))
|
elements = tool.Drawing.get_group_elements(tool.Drawing.get_drawing_group(self.camera_element))
|
||||||
|
filtered_drawing_elements = tool.Drawing.get_drawing_elements(self.camera_element)
|
||||||
|
elements = [e for e in elements if e in filtered_drawing_elements]
|
||||||
|
|
||||||
annotations = sorted(elements, key=lambda a: tool.Drawing.get_annotation_z_index(a))
|
annotations = sorted(elements, key=lambda a: tool.Drawing.get_annotation_z_index(a))
|
||||||
|
|
||||||
self.svg_writer.metadata = tool.Drawing.get_drawing_metadata(self.camera_element)
|
self.svg_writer.metadata = tool.Drawing.get_drawing_metadata(self.camera_element)
|
||||||
|
|||||||
@@ -1211,16 +1211,21 @@ class Drawing(blenderbim.core.tool.Drawing):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_drawing_elements(cls, drawing):
|
def get_drawing_elements(cls, drawing):
|
||||||
|
"""returns a set of elements that are included in the drawing"""
|
||||||
|
ifc_file = tool.Ifc.get()
|
||||||
pset = ifcopenshell.util.element.get_psets(drawing).get("EPset_Drawing", {})
|
pset = ifcopenshell.util.element.get_psets(drawing).get("EPset_Drawing", {})
|
||||||
include = pset.get("Include", None)
|
include = pset.get("Include", None)
|
||||||
if include:
|
if include:
|
||||||
elements = set(ifcopenshell.util.selector.Selector.parse(tool.Ifc.get(), include))
|
elements = set(ifcopenshell.util.selector.Selector.parse(ifc_file, include))
|
||||||
else:
|
else:
|
||||||
elements = set(tool.Ifc.get().by_type("IfcElement"))
|
elements = set(ifc_file.by_type("IfcElement"))
|
||||||
|
annotations = tool.Drawing.get_group_elements(tool.Drawing.get_drawing_group(drawing))
|
||||||
|
elements.update(annotations)
|
||||||
|
|
||||||
exclude = pset.get("Exclude", None)
|
exclude = pset.get("Exclude", None)
|
||||||
if exclude:
|
if exclude:
|
||||||
elements -= set(ifcopenshell.util.selector.Selector.parse(tool.Ifc.get(), exclude, elements=elements))
|
elements -= set(ifcopenshell.util.selector.Selector.parse(ifc_file, exclude, elements=elements))
|
||||||
elements -= set(tool.Ifc.get().by_type("IfcOpeningElement"))
|
elements -= set(ifc_file.by_type("IfcOpeningElement"))
|
||||||
return elements
|
return elements
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@@ -1293,11 +1298,17 @@ class Drawing(blenderbim.core.tool.Drawing):
|
|||||||
tool.Spatial.set_active_object(camera)
|
tool.Spatial.set_active_object(camera)
|
||||||
|
|
||||||
# sync viewport objects visibility with selectors from EPset_Drawing/Include and /Exclude
|
# sync viewport objects visibility with selectors from EPset_Drawing/Include and /Exclude
|
||||||
drawing_elements = cls.get_drawing_elements(tool.Ifc.get_entity(camera))
|
ifc_file = tool.Ifc.get()
|
||||||
for element in tool.Ifc.get().by_type("IfcElement"):
|
drawing = tool.Ifc.get_entity(camera)
|
||||||
|
all_drawing_elements = set(ifc_file.by_type("IfcElement"))
|
||||||
|
annotations = tool.Drawing.get_group_elements(tool.Drawing.get_drawing_group(drawing))
|
||||||
|
all_drawing_elements.update(annotations)
|
||||||
|
filtered_drawing_elements = cls.get_drawing_elements(drawing)
|
||||||
|
|
||||||
|
for element in all_drawing_elements:
|
||||||
if element.is_a() in ("IfcOpeningElement",):
|
if element.is_a() in ("IfcOpeningElement",):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
obj = tool.Ifc.get_object(element)
|
obj = tool.Ifc.get_object(element)
|
||||||
obj.hide_viewport = element not in drawing_elements
|
obj.hide_set(element not in filtered_drawing_elements)
|
||||||
obj.hide_render = element not in drawing_elements
|
obj.hide_render = element not in filtered_drawing_elements
|
||||||
|
|||||||
Reference in New Issue
Block a user