//冲突检查
namespace revit_text
{
[TransactionAttribute(TransactionMode.Manual)]
[RegenerationAttribute(RegenerationOption.Manual)]
class collision : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Document doc = uiDoc.Document;
//Transaction 事务
Transaction trans = new Transaction(doc,"ExComm");
trans.Start();
//元素选择
Selection select = uiDoc.Selection;
//PickObject 提示用户在显示自定义状态提示字符串时选择一个对象。
Reference r = select.PickObject(ObjectType.Element,"请选择要检查的墙");
Element column = doc.GetElement(r);
FilteredElementCollector collect = new FilteredElementCollector(doc);
//ElementIntersectFilter冲突检查 ;寻找与给定元素的立体几何相交的元素的过滤器。
ElementIntersectsElementFilter iFilter = new ElementIntersectsElementFilter(column, false);
collect.WherePasses(iFilter);
List<ElementId> excludes = new List<ElementId>();
excludes.Add(column.Id);
collect.Excluding(excludes);
List<ElementId> ids = new List<ElementId>();
select.SetElementIds(ids);
foreach (Element elem in collect) {
ids.Add(elem.Id);
}
select.SetElementIds(ids);
trans.Commit();
return Result.Succeeded;
}
}
}