using Autodesk.Revit.UI;
using Autodesk.Revit.DB;
using Autodesk.Revit.Attributes;
using System.Windows.Media.Imaging;
using Autodesk.Revit.UI.Selection;
namespace HelloWorld
{
[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class Test : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uidoc = commandData.Application.ActiveUIDocument;
Document doc = uidoc.Document;
View3D view3d = doc.ActiveView as View3D;
//XYZ.Zero为射线原点 XYZ.BasisZ为射线向量方向
ReferenceIntersectElement(doc, view3d, XYZ.Zero, XYZ.BasisZ);
return Result.Succeeded;
}
//射线相交法只能在三维视图下使用
private List ReferenceIntersectElement(Document doc, View3D view3d, XYZ origin, XYZ normal)
{
List list = new List();
ElementClassFilter filter = new ElementClassFilter(typeof(FamilyInstance));
ReferenceIntersector refInter = new ReferenceIntersector(filter, FindReferenceTarget.Element, view3d);
IList listContext = refInter.Find(origin, normal);
foreach (ReferenceWithContext reference in listContext)
{
Reference refer = reference.GetReference();
ElementId id = refer.ElementId;
FamilyInstance instance = doc.GetElement(id) as FamilyInstance;
if (instance.Symbol.Family.Name.Contains("钢梁"))
{
}
}
return list;
}
}
}