/*-------------------------------------------------------------------------
* 功能描述:SelectionExtension
* 作者:xulisong
* 创建时间: 2019/5/23 11:31:45
* 版本号:v1.0
* -------------------------------------------------------------------------*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;
namespace FWindSoft.Revit
{
///
/// 选择项相关扩展
///
public static class SelectionExtension
{
static SelectionExtension()
{
AllSnapTypes = GetAllSnapTypes();
}
///
/// 全部可选信息
///
public static ObjectSnapTypes AllSnapTypes { get; private set; }
#region 私有方法
///
/// 获取全局选择配置
///
///
private static ObjectSnapTypes GetAllSnapTypes()
{
ObjectSnapTypes snapSettings =
ObjectSnapTypes.Centers | ObjectSnapTypes.Endpoints |
ObjectSnapTypes.Intersections | ObjectSnapTypes.Midpoints |
ObjectSnapTypes.Nearest | ObjectSnapTypes.WorkPlaneGrid |
ObjectSnapTypes.Perpendicular | ObjectSnapTypes.Points |
ObjectSnapTypes.Quadrants | ObjectSnapTypes.Tangents;
return snapSettings;
}
#endregion
#region 选取点信息
///
/// 选择点信息
///
///
/// 选择项
/// 提示消息
///
public static XYZ PickPointT(this Selection selection, ObjectSnapTypes snapSettings, string strMessage)
{
try
{
return selection.PickPoint(snapSettings, strMessage);
}
catch (OperationCanceledException)
{
return null;
}
}
///
/// 选取点
///
///
///
///
public static XYZ PickPointT(this Selection selection, string strMessage)
{
return PickPointT(selection, AllSnapTypes, strMessage);
}
#endregion
#region 选取reference
///
/// 选取指定的reference
///
///
///
///
///
///
public static Reference PickReferenceT(this Selection selection, string strMessage,
ISelectionFilter filter, ObjectType objType)
{
strMessage = strMessage ?? string.Empty;
Reference reference = null;
try
{
if (filter == null)
{
reference = selection.PickObject(objType, strMessage);
}
else
{
reference = selection.PickObject(objType, filter, strMessage);
}
}
#region 异常处理
catch (OperationCanceledException)
{
return null;
}
catch (InvalidOperationException)
{
return null;
}
#endregion
return reference;
}
public static IList PickReferencesT(this Selection selection, string strMessage,
ISelectionFilter filter, ObjectType objType)
{
strMessage = strMessage ?? string.Empty;
IList references = null;
try
{
if (filter == null)
{
references = selection.PickObjects(objType, strMessage);
}
else
{
references = selection.PickObjects(objType, filter, strMessage);
}
}
#region 异常处理
catch (OperationCanceledException)
{
return null;
}
#endregion
return references;
}
///
/// 获取选中元素elementId
///
///
///
///
///
public static ElementId PickElementId(this Selection selection, string strMessage, ISelectionFilter filter)
{
ElementId selectedElementId = null;
strMessage = strMessage ?? string.Empty;
try
{
Reference reference = null;
reference = selection.PickReferenceT(strMessage, filter, ObjectType.Element);
if (reference != null)
{
selectedElementId = reference.ElementId;
}
}
catch (OperationCanceledException)
{
return null;
}
return selectedElementId;
}
#endregion
#region 框选
///
/// 框选相关元素信息
///
///
///
/// 过滤器
///
public static List PickElementsByRectangleT(this Selection selection, string strMessage, ISelectionFilter filter)
{
strMessage = strMessage ?? string.Empty;
try
{
var listSelected = filter != null
? selection.PickElementsByRectangle(filter, strMessage).ToList()
: selection.PickElementsByRectangle(strMessage).ToList();
if (listSelected.Count == 0)
{
return PickElementsByRectangleT(selection,strMessage, filter);
}
return listSelected;
}
#region 异常处理
catch (OperationCanceledException)
{
return null;
}
catch (InvalidOperationException)
{
return null;
}
#endregion
}
#endregion
}
}