BIM: Better objects filtering when IFC locking/unlocking - fixes #17193 (#17285)

This commit is contained in:
Yorik van Havre
2024-10-21 17:55:12 +02:00
committed by GitHub
parent 990b9b27fe
commit 8fa80ee48e

View File

@@ -279,6 +279,7 @@ def lock_document():
def find_toplevel(objs):
"""Finds the top-level objects from the list"""
import Draft
# filter out any object that depend on another from the list
nobjs = []
for obj in objs:
@@ -292,17 +293,35 @@ def find_toplevel(objs):
break
else:
nobjs.append(obj)
# filter out 2D objects
objs = nobjs
# filter out non-convertible objects
objs = filter_out(nobjs)
return objs
def filter_out(objs):
"""Filter out objects that should not be converted to IFC"""
nobjs = []
for obj in objs:
if obj.isDerivedFrom("Part::Feature"):
if obj.Shape.Edges and not obj.Shape.Solids:
print("Excluding", obj.Label, "- 2D objects not supported yet")
else:
nobjs.append(obj)
else:
nobjs.append(obj)
elif obj.isDerivedFrom("Mesh::Feature"):
nobjs.append(obj)
elif obj.isDerivedFrom("App::DocumentObjectGroup"):
if filter_out(obj.Group):
# only append groups that contain exportable objects
nobjs.append(obj)
else:
print("DEBUG: Filtering out",obj.Label)
elif obj.isDerivedFrom("Mesh::Feature"):
nobjs.append(obj)
elif obj.isDerivedFrom("App::Feature"):
if Draft.get_type(obj) in ("Dimension","LinearDimension","Layer","Text","DraftText"):
nobjs.append(obj)
else:
print("DEBUG: Filtering out",obj.Label)
else:
print("DEBUG: Filtering out",obj.Label)
return nobjs