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
