ʳʰʸᵗʰᵐ|FamilyInstances.RetrieveNestedComponents vs GetSubComponent

With a recursive Python function

import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
	
def get_SubComponent2(item, i = 0):
	"""get SubComponents recursively"""
	i += 1
	if i < 100: # avoid infinite loop
		allSub = [item.Document.GetElement(subcompId)for subcompId in item.GetSubComponentIds()]
		# return the list and check if SubComponent have a SubComponent too
		# use sum trick to flat the python list
		return allSub + sum([get_SubComponent2(subitem, i) for subitem in allSub], [])
	return []


toList = lambda x : x if hasattr(x, '__iter__') else [x]
lst_item = toList(UnwrapElement(IN[0]))

OUT = [get_SubComponent2(item) for item in lst_item]
5 Likes