Revit二次开发示例:DeleteObject

在本例中,通过命令可以删除选中的元素。

需要注意的是要在代码中加入Transaction,否则的话会出现Modifying  is forbidden because the document has no open transaction的错误。

 

#region Namespaces
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
#endregion

namespace DeleteObject
{
    [Autodesk.Revit.Attributes.Transaction(TransactionMode.Manual)]
    [Autodesk.Revit.Attributes.Regeneration(RegenerationOption.Manual)]
    [Autodesk.Revit.Attributes.Journaling(JournalingMode.NoCommandData)]
    public class Command : IExternalCommand
    {
        public Result Execute(
          ExternalCommandData commandData,
          ref string message,
          ElementSet elements)
        {
            UIApplication revit = commandData.Application;

            ElementSet collection = revit.ActiveUIDocument.Selection.Elements;

            if (collection.Size < 1)
            {
                message = "Plase select object(s) before delete.";
                return Result.Cancelled;
            }

            bool error = true;

            try
            {
                error = true;

                IEnumerator e = collection.GetEnumerator();

                Transaction transactoin = new Transaction(commandData.Application.ActiveUIDocument.Document, "DeleteObject");

                transactoin.Start();

                bool MoreValue = e.MoveNext();
                while (MoreValue)
                {
                    Element component = e.Current as Element;
                    revit.ActiveUIDocument.Document.Delete(component.Id);
                    MoreValue = e.MoveNext();
                }

                transactoin.Commit();
                error = false;
            }
            catch (Exception)
            {
                foreach (Element c in collection)
                {
                    elements.Insert(c);
                }
                message = "object(s) can't be deleted.";
                return Result.Failed;
            }
            finally
            {
                if (error)
                {
                    TaskDialog.Show("Error", "Delete failed.");
                }
            }

            return Result.Succeeded;
        }
    }
}
原文地址:https://www.cnblogs.com/xpvincent/p/3605574.html