Revit把所有的交互选择的操作全部封装在Selection类中。
Selection类提供了选择点,选择线,选择面,选择对象,窗口选择,多重选择等等操作。
Pick...是执行命令之后选择。
GetElementIds 执行命令之前选中图元,并返回他们的Id。
SetElementIds 执行命令后,选中传入Id的图元。
PickBox(PickBoxStyle) //窗口选的效果,返回所选择的范围,不返回所选的对象集合
PickBox(PickBoxStyle, String) //窗口选,可输入状态栏提醒字符串,返回返回所选择的范围
PickElementsByRectangle()()()() //窗口选,返回选中对象集合
PickElementsByRectangle(String) //窗口选,返回选中对象集合
PickElementsByRectangle(ISelectionFilter) //窗口选,指定一个选择过滤器,返回选中对象集合
PickElementsByRectangle(ISelectionFilter, String) // 窗口选,指定一个选择过滤器,返回选中对象集合, 提示字符串
PickObject(ObjectType) //单选一个实体上的点,棱边,面,对象
PickObject(ObjectType, ISelectionFilter) //单选一个实体上的点,棱边,面,对象,带过滤器,只有符合过滤器的才能在选择中被高亮,且被选中
PickObject(ObjectType, String)
PickObject(ObjectType, ISelectionFilter, String)
PickObjects(ObjectType) //多选,可以组合多中选择方式。
PickObjects(ObjectType, ISelectionFilter)
PickObjects(ObjectType, String)
PickObjects(ObjectType, ISelectionFilter, String)
PickObjects(ObjectType, ISelectionFilter, String, IList<(Of <<'(Reference>)>>))
PickPoint()()()() //选择一个点
PickPoint(String) //选择一个点
PickPoint(ObjectSnapTypes) //选择一个点,指定捕捉类型
PickPoint(ObjectSnapTypes, String)
测试代码:
//主函数
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uidoc = commandData.Application.ActiveUIDocument;
Document doc = uidoc.Document;
ISelectionFilter WallFilter = new WallSelectionFilter();
IList<Element> elementList = uidoc.Selection.PickElementsByRectangle(WallFilter, "框选常规 - 200mm的墙");
var eleIds = from Element in elementList
select Element.Id;
uidoc.Selection.SetElementIds(eleIds.ToList());
return Result.Succeeded;
}
//实现函数
public class WallSelectionFilter : ISelectionFilter
{
public bool AllowElement(Element elem)
{
if(elem is Wall && elem.Name == "常规 - 200mm")
{
return true;
}
return false;
}
public bool AllowReference(Reference reference, XYZ position)
{
return false;
}
}
参考: http://blog.csdn.net/joexiongjin/article/details/8099842