zoukankan      html  css  js  c++  java
  • 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;
            }
        }
    }
  • 相关阅读:
    Linux进程间通信—消息队列
    Linux进程间通信—信号
    Linux进程间通信—信号量
    Linux进程间通信—管道
    Linux进程间通信:管道,信号量,消息队列,信号,共享内存,套接字
    安全文件传输系统
    嵌入式mp3播放器
    用C语言实现面向对象的开发
    Haskell 差点儿无痛苦上手指南
    Oracle EBS 入门
  • 原文地址:https://www.cnblogs.com/xpvincent/p/3605574.html
Copyright © 2011-2022 走看看