Get void of Family type in a project

Hi,
solution by analyzing cut lines geometry (hidden lines)

get void cut

import clr
import sys
import System
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
import Autodesk.DesignScript.Geometry as DS

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

clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument

pf_path = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFilesX86)
sys.path.append('%sIronPython 2.7Lib' % pf_path)
import itertools
	
def get_CutLinesDoor(e):
	lines = []
	opt = Options()
	opt.IncludeNonVisibleObjects = True
	geoSet = e.get_Geometry(opt)
	for g in geoSet:
		if isinstance(g, GeometryInstance):
			for gi in g.GetInstanceGeometry():
				if isinstance(gi, Line):
					if gi.GraphicsStyleId == ElementId.InvalidElementId:
						# get horizontal Lines
						vect = gi.ComputeDerivatives(0.5, True).BasisX
						if abs(vect.Z) < 0.001:
							lines.append(gi.ToProtoType())
	opt.Dispose()
	return lines

e = UnwrapElement(IN[0])
out = []

cutLines = get_CutLinesDoor(e)
cutLines.sort(key = lambda x : x.StartPoint.Z, reverse = True)

for idx, (key_, group) in enumerate(itertools.groupby(cutLines, key = lambda x : x.StartPoint.Z)):
	if idx == 0:
		top = key_
		top_loopCurve = DS.PolyCurve.ByJoinedCurves([x for x in group])
	else:
		bottom = key_
		DSSolid = DS.Curve.ExtrudeAsSolid(top_loopCurve, Vector.ByCoordinates(0,0,-1), abs(top - bottom))
		out.append(DSSolid)
	
OUT = out 
2 Likes