• 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;
            }
        }
    }
  • 相关阅读:
    ASP.NET2.0服务器控件之自定义状态管理
    sql中RIGHT和LEFT(小技巧)
    微软云计算的思考
    枚举转化和判断方法的总结
    sql中的split(小技巧)
    ASP.net实现无扩展名的URL重写。简单、方便、无需ISAPI
    浅析值类型与引用类型的内存分配
    ASP.Net Web Page深入探讨
    const和static readonly 区别
    程序中一种用in的sql防注入的方法(小技巧)
  • 原文地址:https://www.cnblogs.com/xpvincent/p/3605574.html
Copyright © 2020-2023  润新知