/*------------------------------------------------------------------------- * 功能描述: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 } }