This API call is built to use a Revit Solid not a Dynamo Solid. Best bet is to take the element and extract the geometry from that, filter out non-solid geometry, union the solids, and test that; all in Python.
I may say stupid things (to limit the processing volume)
a 1st filter with intersection of bounding box on the elements
a 2nd filter to filter “false positives” by exploiting their geometry
you need to work with solids from Revit API here is a simple example
import clr
import sys
import System
#
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
import Autodesk.DesignScript.Geometry as DS
#import Revit API
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB
#import transactionManager and DocumentManager (RevitServices is specific to Dynamo)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
import itertools
def get_Solid_from_Elem(elem):
opt = Options()
geoSet = elem.get_Geometry(opt)
for geo in geoSet:
if isinstance(geo, GeometryInstance):
for gi in geo.GetInstanceGeometry():
if isinstance(gi, Solid) and gi.Volume > 0.01:
return gi
elif isinstance(geo, Solid) and geo.Volume > 0.01:
return geo
else:
pass
out = []
fec_floor = FilteredElementCollector(doc).OfCategory(DB.BuiltInCategory.OST_Floors).WhereElementIsNotElementType()
for elemA, elemB in itertools.combinations_with_replacement(fec_floor, 2):
if elemA.Id != elemB.Id:
solidA = get_Solid_from_Elem(elemA)
if solidA is not None:
filterInterSect = ElementIntersectsSolidFilter(solidA)
are_Intersect = filterInterSect.PassesFilter(elemB)
out.append([are_Intersect, elemA, elemB])
OUT = out