• 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;
            }
        }
    }
  • 相关阅读:
    Java与Http协议
    android之VideoView和视频播放View的扩展
    Android之SurfaceView实现视频播放
    AchartEngineActivity引擎绘制柱状图、曲线图
    Android消息推送
    字符串如何排序
    Java内部类总结
    利用反射机制实现工厂设计模式的高扩展性
    Java反射机制
    android AsyncTask介绍
  • 原文地址:https://www.cnblogs.com/xpvincent/p/3605574.html
Copyright © 2020-2023  润新知