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 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
    }
}

C#/AutoCAD 2018/ObjectArx/二次开发添加删除实体的工具函数(四)的更多相关文章

  1. C#/AutoCAD 2018/ObjectArx/二次开发添加圆对象的的例子(五)

    C#/AutoCAD 2018/ObjectArx/二次开发添加圆对象的的例子(五) 1.创建一个图形对象的步骤如下见上一篇博客(三)2.添加删除实体的工具函数见上一篇博客(四) 3.添加圆的例子(完 ...

  2. C#/AutoCAD 2018/ObjectArx/二次开发添加图形对象步骤和添加直线的例子(三)

    1.创建一个图形对象的步骤如下(1)得到创建对象的图形数据库:(2)在内存中创建实体类的一个对象:(3)定义一个指向当前数据库的事务处理:(4)打开图形数据库的块表:(5)打开一个存储实体的块表记录( ...

  3. 使用.NET开发AutoCAD——C#/AutoCAD 2018/ObjectArx/二次开发入门(二)

    1.开发环境配置: (1)安装AutoCAD2018: (2)安装VS2015: (3)安装ObjectARX 2018类库: (4)安装ObjectARX 2018 .NET开发向导(ObjectA ...

  4. C#/AutoCAD 2018/ObjectArx/二次开发再说实体(六)

    这些函数对大家很有用,如果想获取详细源代码请加云幽学院yunyou.ke.qq.com报名免费课程,如果想学习更系统.更全面的知识请报名收费课程,有大量开发案例共享. 1.获取模型空间中所有实体 #r ...

  5. ObjectARX二次开发创建自己的静态库,如同objectARX库一样

    objectARX二次开发的时候,经常会用到一些重复使用的类,如果类已经足够的好,那么我们可以编译成静态库,加快开发和编译的速度,提高工作效率. 环境vs2010+objectARX2012wizar ...

  6. VC++开发AutoCAD 2018/objectARX 用向导新建项目无法新建的问题

    话说笔者最近想用新机子上装的AutoCAD ObjectARX 2018来进行二次开发,兴致勃勃安装了ARX API和向导, 然后打开VS2015,新建项目,无法新建. 折腾了一下,还是没有解决,后面 ...

  7. jooml二次开发---添加文章组件

    在写一个joomla组件的时候需要手动添加excel表格,并把表格当做文章的内容添加到前台文章中, 开始不知道怎么下手,索性先把一个基本的组件写出来,在joomla网站上测试是可以访问这个组件的,在p ...

  8. Arcengine 二次开发添加右键菜单

    最近在搞arcengine 二次开发,遇到了好多问题,也通过网上查资料试着慢慢解决了,把解决的步骤记录下来,有需要帮助的可以看一下,也欢迎各位来批评指正. 想给自己的map application在图 ...

  9. 通达OA 公共文件柜二次开发添加管理信息(图文)

    公共文件柜当内容较多时,管理起来非常easy乱,特别是当有多个名字相近的目录时.这里通过简单的开发添加了两个管理信息,能够通过添加备注的方式加以区分. watermark/2/text/aHR0cDo ...

随机推荐

  1. OWA 无法连接到Exchange

    Outlook WebAccess中无法连接到Microsoft Exchange.如果问题仍然存在,请联系您的组织的技术支持. 1.   在Exchange邮件服务器,收件人配置--邮箱--右击用户 ...

  2. 几款实力很强的小工具,提高Windows使用效率

    如果你说我会用Windows,许多人会说,切,谁不会用Windows啊? 接下来说说我在Windows环境下,如何使用一些工具,提高效率.这些工具是我过去这些年雪藏的,今天放出来晒一晒. 当我要搜索文 ...

  3. css3动画结束捕捉事件整理

    //捕捉webkitAnimationEnd事件 element.addEventListener('webkitAnimationEnd', end, false); //捕捉webkitTrans ...

  4. 【BZOJ2049】洞穴勘测(Link-Cut Tree)

    [BZOJ2049]洞穴勘测(Link-Cut Tree) 题面 题目描述 辉辉热衷于洞穴勘测. 某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别 ...

  5. [CQOI2007]余数求和

    大于k的部分直接加k 对于小于等于k的cnt个数 ans=cnt*k - Σ(k/i * i) 然后k/i在一段区间内不变,这段区间直接可以数列求和 # include <bits/stdc++ ...

  6. STM32高级定时器TIM1产生两路互补的PWM波(带死区)

    测试环境:Keil 5.20.0.0 STM32F103RBT6 固件库版本:STM32F10x_StdPeriph_Lib_V3.5.0(2011) 本文使用TIM1的通道1,通道2,产生两路1kh ...

  7. C#程序入门学习

    前言: C# (C sharp) 是微软对这一问题的解决方案.C#是一种最新的.面向对象的编程语言.它使得程序员可以快速地编写各种基于Microsoft .NET平台的应用程序,Microsoft . ...

  8. python 批量删除mysql前缀相同的表

    1,一般游戏log数据库会存储大量的玩家行为日志,一种行为一张表,每天生成一张新表,一天会有30+张不同行为的表,通常会保留玩家日志1年左右,对于超过1年的日志需要删除 2,log数据库一年会保存1W ...

  9. WordPress让文本小工具支持简码

    WordPress 的 “文本” 小工具是非常常用的,可以添加一些自定义的文本或者 Html 代码.但很多时候,我们需要在文本小工具里使用简码来添加一些更加丰富的内容. 默认情况下,文本小工具是不支持 ...

  10. WebCracker4.0和monster字典——路由器登陆密码破解工具

    路由器登陆密码破解,很伤cpu的