using Autodesk.Revit.DB; using Autodesk.Revit.DB.Architecture; using Autodesk.Revit.UI; using Autodesk.Revit.UI.Selection; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TestTools { [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)] [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)] public class TestCmd : Autodesk.Revit.UI.IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIApplication uiapp = commandData.Application; UIDocument uidoc = uiapp.ActiveUIDocument; Autodesk.Revit.ApplicationServices.Application app = uiapp.Application; Document doc = uidoc.Document; DocumentSet docset = uiapp.Application.Documents; //Reference refer = uidoc.Selection.PickObject(ObjectType.Element, "请选择XXX"); //Element e = uidoc.Document.GetElement(refer); //Options options = new Options() //{ // ComputeReferences = true, // DetailLevel = ViewDetailLevel.Fine, //}; //var eleIds = e.GetGeneratingElementIds(e.get_Geometry(options)); //uidoc.Selection.SetElementIds(eleIds); #region FilterExecute var walls = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms).ToElements(); using (Transaction trans = new Transaction(doc, "default")) { try { trans.Start(); var rooms = walls.Where(wall => wall.Name.Contains("房间")).Select(wall => wall.Id).ToList(); doc.Delete(rooms); trans.Commit(); } catch (Exception ex) { message = ex.Message; if (trans.GetStatus() == TransactionStatus.Started) { trans.RollBack(); } return Result.Failed; } } #endregion FilterExecute #region RepeatExecute //bool isCoutine = true; //using (Transaction trans = new Transaction(doc, "default")) //{ // try // { // while (isCoutine) // { // try // { // trans.Start(); // //do something. // trans.Commit(); // } // catch (Autodesk.Revit.Exceptions.OperationCanceledException ex) // { // trans.Commit(); // return Result.Succeeded; // } // } // } // catch (Exception ex) // { // message = ex.Message; // if (trans.GetStatus() == TransactionStatus.Started) // { // trans.RollBack(); // } // return Result.Failed; // } //} #endregion RepeatExecute #region SelectExecute //using (Transaction trans = new Transaction(doc, "default")) //{ // try // { // Reference refer = uidoc.Selection.PickObject(ObjectType.Element, "请选择XXX"); // Element e = uidoc.Document.GetElement(refer); // trans.Start(); // trans.Commit(); // } // catch (Autodesk.Revit.Exceptions.OperationCanceledException ex) // { // } // catch (Exception ex) // { // } //} #endregion SelectExecute return Result.Succeeded; } } }