using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; using ShrlAlgoToolkit.Revit.Assists; namespace ShrlAlgoToolkit.Revit.Extensions; public static class UIDocumentExtensons { /// /// 运行命令选择元素或选择元素执行操作 /// public static List GetSelectedElements( this UIDocument uidoc, string prompt = "请选择元素", ISelectionFilter filter = null, ObjectType type = ObjectType.Element ) { //取到当前文档。 var doc = uidoc.Document; //取到当前文档的选择集。 var collection = uidoc.Selection.GetElementIds().Select(id => doc.GetElement(id)).ToList(); if (collection.Count != 0) { return collection; } try { var references = filter == null ? uidoc.Selection.PickObjects(type, prompt) : uidoc.Selection.PickObjects(type, filter, prompt); collection = references.Select(refer => doc.GetElement(refer)).ToList(); } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { } return collection; } /// /// 按类型选择元素 /// /// /// /// /// /// public static T SelectObject( this UIDocument uidoc, string prompt = "请选择元素", ObjectType objectType = ObjectType.Element ) where T : Element { try { var reference = uidoc.Selection.PickObject(objectType, new GenericFilter(), prompt); return uidoc.Document.GetElement(reference) as T; } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { return null; } } /// /// 选择元素 /// /// /// /// /// public static Element SelectObject( this UIDocument uidoc, FuncFilter funcFilter, string prompt = "请选择元素", ObjectType objectType = ObjectType.Element ) { try { var reference = uidoc.Selection.PickObject(objectType, funcFilter, prompt); return uidoc.Document.GetElement(reference); } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { return null; } } public static List SelectObjects( this UIDocument uidoc, FuncFilter funcFilter, string prompt = "请选择元素", ObjectType objectType = ObjectType.Element ) { try { var references = uidoc.Selection.PickObjects(objectType, funcFilter, prompt); return references.Select(reference => uidoc.Document.GetElement(reference)).ToList(); } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { return null; } } /// /// 按类型选择多个元素 /// /// /// /// /// /// public static List SelectObjects( this UIDocument uidoc, string prompt = "请选择多个元素", ObjectType objectType = ObjectType.Element ) where T : Element { try { var references = uidoc.Selection.PickObjects(objectType, new GenericFilter(), prompt); return references.Select(refer => uidoc.Document.GetElement(refer) as T).ToList(); } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { return null; } } /// /// 按类型框选元素 /// /// /// /// /// public static IList SelectObjectsByRectangle(this UIDocument uidoc, string prompt = "请框选元素") where T : Element { try { return uidoc.Selection.PickElementsByRectangle(new GenericFilter(), prompt).Cast().ToList(); } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { return null; } } }