项目完整代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.UI;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;//类Selection使用
namespace Collision
{
[TransactionAttribute(TransactionMode.Manual)]
[RegenerationAttribute(RegenerationOption.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Document doc = uiDoc.Document;
Transaction trans = new Transaction(doc,"Excomm");
trans.Start();
Selection select = uiDoc.Selection;
Reference r = select.PickObject(ObjectType.Element, "选择需要检查的墙");
Element column = doc.GetElement(r);
FilteredElementCollector collect = new FilteredElementCollector(doc);
//ElementIntersectionFilter冲突检查
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)//遍历collect中每一个元素
{
ids.Add(elem.Id);//将elem的Id添加到List中
}
select.SetElementIds(ids);
trans.Commit();
return Result.Succeeded;
}
}
}
效果:
参考文献:
周婧祎《Autodesk Revit 2016二次开发入门教程》