void GetInstancesIntersectingElement( Element e )
{
#region Joe's code
#if JOE_CODE
// Find intersections between family instances and a selected element
Reference Reference = uidoc.Selection.PickObject(
ObjectType.Element, "Select element that will "
+ "be checked for intersection with all family "
+ "instances" );
Element e = doc.GetElement( reference );
GeometryElement geomElement = e.get_Geometry(
new Options() );
Solid solid = null;
foreach( GeometryObject geomObj in geomElement )
{
solid = geomObj as Solid;
if( solid = !null ) break;
}
FilteredElementCollector collector
= new FilteredElementCollector( doc )
.OfClass( typeof( FamilyInstance ) )
.WherePasses( new ElementIntersectsSolidFilter(
solid ) );
TaskDialog.Show( "Revit", collector.Count() +
"Family instances intersect with selected element ("
+ element.Category.Name + "ID:" + element.Id + ")" );
#endif // JOE_CODE
#endregion // Joe's code
// Test this in these SDK sample models:
// C:\a\lib\revit\2015\SDK\Samples\FindReferencesByDirection\FindColumns\FindColumns-Basic.rvt
// C:\a\lib\revit\2015\SDK\Samples\FindReferencesByDirection\FindColumns\FindColumns-TestCases.rvt
Document doc = e.Document;
Solid solid = e.get_Geometry( new Options() )
.OfType<Solid>()
.Where<Solid>( s => null != s && !s.Edges.IsEmpty )
.FirstOrDefault();
FilteredElementCollector intersectingInstances
= new FilteredElementCollector( doc )
.OfClass( typeof( FamilyInstance ) )
.WherePasses( new ElementIntersectsSolidFilter(
solid ) );
int n1 = intersectingInstances.Count<Element>();
intersectingInstances
= new FilteredElementCollector( doc )
.OfClass( typeof( FamilyInstance ) )
.WherePasses( new ElementIntersectsElementFilter(
e ) );
int n = intersectingInstances.Count<Element>();
Debug.Assert( n.Equals( n1 ),
"expected solid intersection to equal element intersection" );
string result = string.Format(
"{0} family instance{1} intersect{2} the "
+ "selected element {3}{4}",
n, Util.PluralSuffix( n ),
( 1 == n ? "s" : "" ),
Util.ElementDescription( e ),
Util.DotOrColon( n ) );
string id_list = 0 == n
? string.Empty
: string.Join( ", ",
intersectingInstances
.Select<Element, string>(
x => x.Id.IntegerValue.ToString() ) )
+ ".";
Util.InfoMsg2( result, id_list );
}