AbdulElahGwaith's picture
Upload folder using huggingface_hub
985c397 verified
# SPDX-License-Identifier: LGPL-2.1-or-later
import FreeCAD
import Part
from .CompoundFilter import makeCompoundFilter
def explodeCompound(compound_obj, b_group=None):
"""explodeCompound(compound_obj, b_group = None): creates a bunch of compound filters, to extract every child of a compound into a separate object.
group: if True, Group is always made. If False, group is never made. If None, group is made if there is more than one child.
returns: (group_object, list_of_child_objects)"""
if isinstance(compound_obj, FreeCAD.GeoFeature) and isinstance(
compound_obj.getPropertyOfGeometry(), Part.Shape
):
sh = compound_obj.getPropertyOfGeometry()
else:
raise TypeError("Object must be App.GeoFeature with Part.Shape property")
n = len(sh.childShapes(False, False))
if b_group is None:
b_group = n > 1
if b_group:
group = compound_obj.Document.addObject(
"App::DocumentObjectGroup", "GrExplode_" + compound_obj.Name
)
group.Label = "Exploded {obj.Label}".format(obj=compound_obj)
else:
group = compound_obj.Document
features_created = []
for i in range(0, n):
cf = makeCompoundFilter(
"{obj.Name}_child{child_num}".format(obj=compound_obj, child_num=i), group
)
cf.Label = "{obj.Label}.{child_num}".format(obj=compound_obj, child_num=i)
cf.Base = compound_obj
cf.FilterType = "specific items"
cf.items = str(i)
if cf.ViewObject is not None:
cf.ViewObject.DontUnhideOnDelete = True
features_created.append(cf)
return (group, features_created)