關於使用C# 進行AutoCAD 二次開發添加刪除實體的工具函數

1、添加刪除實體

C# ObjectARX二次開發添加刪除實體是非常容易主要代碼如下:

添加實體:
 objId = btr.AppendEntity(entity);
 trans.AddNewlyCreatedDBObject(entity, true);

刪除實體: entity.Erase(true);

2、基本過程

在代碼YunyouXueYuan命名空間,新增Tools類。這個例子非常簡單,想學習AutoCAD二次開發(c#、C++等語言)、BIM軟件二次開發、Java、python等在線課程的同學,請關注雲幽學院的視頻課程 yunyou.ke.qq.com

3、代碼實現具體實現方法如下:

複製代碼
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace YunyouXueYuan
{
    public class Tools
    {
        #region "添加實體"
        /// <summary>
        /// 添加實體。
        /// 將實體添加到當前模型空間上。
        /// </summary>
        /// <param name="entityID">實體ID</param>
        /// <returns>true:成功 false:失敗</returns>
        public bool AddEntity(Entity entity, out ObjectId objId)
        {
            objId = ObjectId.Null;
            try
            {
                using (Database db = HostApplicationServices.WorkingDatabase)
                {
                    using (Transaction trans = db.TransactionManager.StartTransaction())
                    {
                        using (BlockTableRecord btr = (BlockTableRecord)trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite))
                        {
                            objId = btr.AppendEntity(entity);
                            trans.AddNewlyCreatedDBObject(entity, true);
                        }
                        trans.Commit();
                    }
                }
            }
            catch
            {
                return false;
            }
            return true;
        }
        /// <summary>
        /// 添加實體。
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public bool AddEntity(Entity entity)
        {
            //返回結果id
            ObjectId objId = ObjectId.Null;
            try
            {
                using (DocumentLock docLock = Application.DocumentManager.MdiActiveDocument.LockDocument())
                {

                    using (Database db = HostApplicationServices.WorkingDatabase)
                    {

                        using (Transaction trans = db.TransactionManager.StartTransaction())
                        {

                            using (BlockTableRecord btr = (BlockTableRecord)trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite))
                            {

                                objId = btr.AppendEntity(entity);
                                trans.AddNewlyCreatedDBObject(entity, true);
                            }

                            trans.Commit();
                        }
                    }
                }
            }
            catch
            {
                //添加失敗
                return false;
            }
            return true;
        }
        #endregion

        #region "添加多個實體"
        /// <summary>
        /// 添加實體。
        /// 將實體添加到當前模型空間上。
        /// </summary>
        /// <param name="entityID">實體ID</param>
        /// <returns>true:成功 false:失敗</returns>
        public bool AddEntity(Entity[] ents, out ObjectIdCollection objId)
        {

            objId = new ObjectIdCollection();
            try
            {

                using (Database db = HostApplicationServices.WorkingDatabase)
                {

                    using (Transaction trans = db.TransactionManager.StartTransaction())
                    {

                        using (BlockTableRecord btr = (BlockTableRecord)trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite))
                        {
                            foreach (Entity ent in ents)
                            {

                                objId.Add(btr.AppendEntity(ent));
                                trans.AddNewlyCreatedDBObject(ent, true);
                            }
                        }

                        trans.Commit();
                    }
                }
            }
            catch
            {

                return false;
            }
            return true;
        }
        #endregion

        #region "刪除實體"
        /// <summary>
        /// 刪除實體。
        /// 刪除當前模型空間上的實體。
        /// </summary>
        /// <param name="id">實體ID</param>
        /// <returns>true:成功 false:失敗</returns>
        public bool DelEntity(ObjectId id)
        {
            try
            {

                if (!id.IsNull)
                {

                    using (Database db = HostApplicationServices.WorkingDatabase)
                    {

                        using (Transaction trans = db.TransactionManager.StartTransaction())
                        {

                            Entity entity = (Entity)trans.GetObject(id, OpenMode.ForWrite, true);

                            entity.Erase(true);

                            trans.Commit();
                        }
                    }
                }
                else
                {
                    return false;
                }
            }
            catch
            {

                return false;
            }
            return true;
        }
        #endregion

        #region "刪除多個實體"
        /// <summary>
        /// 刪除實體。
        /// 刪除當前模型空間上的實體。
        /// </summary>
        /// <param name="entityID">實體ID</param>
        /// <returns>true:成功 false:失敗</returns>
        public bool DelEntity(ObjectIdCollection ids)
        {
            try
            {

                using (Database db = HostApplicationServices.WorkingDatabase)
                {

                    using (Transaction trans = db.TransactionManager.StartTransaction())
                    {

                        using (BlockTableRecord btr = (BlockTableRecord)trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite))
                        {
                            foreach (ObjectId id in ids)
                            {

                                Entity entity = (Entity)trans.GetObject(id, OpenMode.ForWrite, true);
                                if (entity == null || entity.IsErased == true || entity is ProxyEntity)
                                {
                                    continue;
                                }

                                entity.Erase(true);
                            }
                        }
                        trans.Commit();
                    }
                }
            }
            catch
            {
                return false;
            }
            return true;
        }
        #endregion
    }
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章