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