Vertices of solid through Dynamo Revit

Hello @Daan
a solution with Python

#v2
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

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

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

def getBottomVertex(geo):
	outVertices = []
	filterEdges = []
	if isinstance(geo, Solid):
		minFaces = sorted(geo.Faces, key = lambda x : x.Area)[0:2]
		for face in minFaces:
			edgeArrArr = face.EdgeLoops 
			for edgeArr in edgeArrArr:
				for edge in edgeArr:
					edgeProto = edge.AsCurve().ToProtoType()
					if edgeProto.StartPoint.Z == edgeProto.EndPoint.Z:
						filterEdges.append(edgeProto)
					elif round(edgeProto.Normal.Z) != 0:
						filterEdges.append(edgeProto)
		#filter with Z		
		filterEdges.sort(key = lambda x : (x.StartPoint.Z, x.EndPoint.Z ))
		for edg in filterEdges[0:2]:
			outVertices.extend([edg.StartPoint, edg.EndPoint]) 
			
		return outVertices

elemlist = UnwrapElement(IN[0])

if not hasattr(elemlist, "__iter__"):
	elemlist = [elemlist]

listVertices = []

op = Options()
for elem in elemlist:
	geoms = elem.get_Geometry(op)
	for geoinst in geoms:
		if isinstance(geoinst, GeometryInstance):
			geosymbs = geoinst.GetInstanceGeometry()
			for geoelem in geosymbs:
				bottomVertices = getBottomVertex(geoelem)
				if bottomVertices:
					#try with 'extend' if you want one list
					listVertices.append(bottomVertices)
	
OUT = listVertices
2 Likes