Elements belongs to Subcategories

Hi Ahmed,

This revised version takes a list of elements and a list of subcategory names and returns a list of geometries and a corresponding list of subcategory names that the geometry belongs to enable further filtering / sorting.

Hope this helps,
Thomas

# Enable Python support and load DesignScript library and Revit nodes and services
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager

# Document
doc = DocumentManager.Instance.CurrentDBDocument

# IN
elems = UnwrapElement(IN[0]) # Unwrap family instances
subcats = IN[1] # names of subcategories

# Lists
geometries = []
subcatsOut = []

# Options
geomOptions = Options()

for elem in elems:
	geometries.append([])
	subcatsOut.append([])
	for geom in elem.get_Geometry(geomOptions):
		for g in geom.GetInstanceGeometry():
			graphics = doc.GetElement(g.GraphicsStyleId)
			if graphics != None:
				for subcat in subcats:
					if subcat == doc.GetElement(g.GraphicsStyleId).GraphicsStyleCategory.Name:
						geometries[-1].append(g.Convert())
						subcatsOut[-1].append(subcat)

OUT = geometries, subcatsOut
5 Likes