import c4d
def main():
objlist = doc.GetActiveObjects(c4d.GETACTIVEOBJECTFLAGS_CHILDREN)
baseview = doc.GetActiveBaseDraw()
doc.StartUndo()
for obj in objlist:
check(obj, baseview)
doc.EndUndo()
c4d.EventAdd()
def check(obj, bv):
result = bv.TestClipping3D(c4d.Vector(), obj.GetRad(), obj.GetMg())
lchild = []
for child in obj.GetChildren():
cld = check(child, bv)
if cld:
lchild.append(cld)
if not result["visible"] and not lchild:
doc.AddUndo(c4d.UNDOTYPE_DELETE, obj)
obj.Remove()
return None
elif not result["visible"] and lchild:
parent = obj.GetUp()
if not parent:
parent = c4d.BaseObject(c4d.Onull)
host = c4d.BaseObject(c4d.Onull)
host.SetName(obj.GetName())
host.SetMl(obj.GetMl())
host.InsertAfter(obj)
for child in lchild:
child.InsertUnderLast(host)
doc.AddUndo(c4d.UNDOTYPE_DELETE, obj)
obj.Remove()
return host
else:
return obj
if __name__=='__main__':
main()