本文演示Revit文件中的碰撞检测。
1.用Revit绘制模型
2.碰撞检测
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System.Linq;
using System.Windows.Forms;
namespace RevitAddin4
{
[TransactionAttribute(TransactionMode.Manual)]
public class RevitAddin : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Document doc = uiDoc.Document;
//当前视图下的结构梁
FilteredElementCollector collector = new FilteredElementCollector(doc,doc.ActiveView.Id);
collector.OfCategory(BuiltInCategory.OST_StructuralFraming).OfClass(typeof(FamilyInstance));
FilteredElementCollector col = new FilteredElementCollector(doc);
foreach (FamilyInstance item in collector)
{
string str = "Host element: \n" + item.Name + "\n";
//碰撞检测,检测与结构梁碰撞的构件
ElementIntersectsElementFilter filter = new ElementIntersectsElementFilter(item);
col.WherePasses(filter);
if (col.Count() == 0)
continue;
str += "Sub element: " + "\n";
foreach (var c in col)
{
FamilyInstance curve = c as FamilyInstance;
if (curve == null)
continue;
str += c.Name + "\n";
}
MessageBox.Show(str, "信息");
}
return Result.Succeeded;
}
}
}
运行结果: