using System; using System.Reflection; using System.Windows; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.DB.Plumbing; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; using Sai.Toolkit.Revit.Assist; namespace RvAddinTest; [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] public class DeleteCmd : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { //程序UI界面 var uiapp = commandData.Application; //获取元素(选择) 显示元素 视图(活动视图)管理(对象) var uidoc = uiapp.ActiveUIDocument; //程序 var app = uiapp.Application; //获取位置和场地 视图(多个视图)管理 获取元素(Revit 项目里的全部元素) var doc = uidoc.Document; //获取所有打开文档 var docset = uiapp.Application.Documents; //当前视图 var view = doc.ActiveView; #region FilterExecute //if (doc.IsFamilyDocument) //{ // var manager = doc.FamilyManager; // using (var trans = new Transaction(doc, "default")) // { // try // { // trans.Start(); // var param = manager.AddParameter( // "测试", // BuiltInParameterGroup.PG_ADSK_MODEL_PROPERTIES, // ParameterType.Number, // true); // trans.Commit(); // } // catch (Exception ex) // { // throw ex; // } // } //} var docType = doc.GetType(); var method = docType.GetMethod("GetUnusedFamilies", BindingFlags.NonPublic | BindingFlags.Instance); if (method != null) { var unusedFamilyIds = method.Invoke(doc, null) as ISet; using (var trans = new Transaction(doc, nameof(DeleteCmd))) { trans.Start(); //foreach (var id in unusedFamilyIds) //{ // doc.Delete(id); //} MessageBox.Show(unusedFamilyIds.Count.ToString()); trans.Commit(); } } //var instances = new FilteredElementCollector(doc).OfClass(typeof(Pipe)).ToElements(); //using (Transaction trans = new Transaction(doc, "default")) //{ // try // { // trans.Start(); // var ids = new List(); // foreach (Pipe pipe in instances) // { // if (Math.Abs(pipe.Diameter - 32 / 304.8) < 10E-5) // { // ids.Add(pipe.Id); // } // } // //doc.Delete(ids); // uidoc.Selection.SetElementIds(ids); // //Do Something. // trans.Commit(); // } // catch (Exception ex) // { // message = ex.Message; // if (trans.GetStatus() == TransactionStatus.Started) // { // trans.RollBack(); // } // return Result.Failed; // } //} #endregion FilterExecute return Result.Succeeded; } }