C#/AutoCAD 2018/ObjectArx/二次开发添加删除实体的工具函数(四)
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/二次开发添加删除实体的工具函数(四)的更多相关文章
- C#/AutoCAD 2018/ObjectArx/二次开发添加圆对象的的例子(五)
C#/AutoCAD 2018/ObjectArx/二次开发添加圆对象的的例子(五) 1.创建一个图形对象的步骤如下见上一篇博客(三)2.添加删除实体的工具函数见上一篇博客(四) 3.添加圆的例子(完 ...
- C#/AutoCAD 2018/ObjectArx/二次开发添加图形对象步骤和添加直线的例子(三)
1.创建一个图形对象的步骤如下(1)得到创建对象的图形数据库:(2)在内存中创建实体类的一个对象:(3)定义一个指向当前数据库的事务处理:(4)打开图形数据库的块表:(5)打开一个存储实体的块表记录( ...
- 使用.NET开发AutoCAD——C#/AutoCAD 2018/ObjectArx/二次开发入门(二)
1.开发环境配置: (1)安装AutoCAD2018: (2)安装VS2015: (3)安装ObjectARX 2018类库: (4)安装ObjectARX 2018 .NET开发向导(ObjectA ...
- C#/AutoCAD 2018/ObjectArx/二次开发再说实体(六)
这些函数对大家很有用,如果想获取详细源代码请加云幽学院yunyou.ke.qq.com报名免费课程,如果想学习更系统.更全面的知识请报名收费课程,有大量开发案例共享. 1.获取模型空间中所有实体 #r ...
- ObjectARX二次开发创建自己的静态库,如同objectARX库一样
objectARX二次开发的时候,经常会用到一些重复使用的类,如果类已经足够的好,那么我们可以编译成静态库,加快开发和编译的速度,提高工作效率. 环境vs2010+objectARX2012wizar ...
- VC++开发AutoCAD 2018/objectARX 用向导新建项目无法新建的问题
话说笔者最近想用新机子上装的AutoCAD ObjectARX 2018来进行二次开发,兴致勃勃安装了ARX API和向导, 然后打开VS2015,新建项目,无法新建. 折腾了一下,还是没有解决,后面 ...
- jooml二次开发---添加文章组件
在写一个joomla组件的时候需要手动添加excel表格,并把表格当做文章的内容添加到前台文章中, 开始不知道怎么下手,索性先把一个基本的组件写出来,在joomla网站上测试是可以访问这个组件的,在p ...
- Arcengine 二次开发添加右键菜单
最近在搞arcengine 二次开发,遇到了好多问题,也通过网上查资料试着慢慢解决了,把解决的步骤记录下来,有需要帮助的可以看一下,也欢迎各位来批评指正. 想给自己的map application在图 ...
- 通达OA 公共文件柜二次开发添加管理信息(图文)
公共文件柜当内容较多时,管理起来非常easy乱,特别是当有多个名字相近的目录时.这里通过简单的开发添加了两个管理信息,能够通过添加备注的方式加以区分. watermark/2/text/aHR0cDo ...
随机推荐
- raid功能中spanning和striping模式有什么区别?
RAID 0 又称为Stripe(条带化,串列)或Striping 它代表了所有RAID级别中最高的存储性能.RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就可 ...
- 【转载】[ORACLE]详解not in与not exists的区别与用法
在网上搜了下关于oracle中not exists和not in性能的比较,发现没有描述的太全面的,可能是问题太简单了,达人们都不屑于解释吧.于是自己花了点时间,试图把这个问题简单描述清楚,其实归根结 ...
- Coursera DeepLearning.ai Logistic Regression逻辑回归总结
既<Machine Learning>课程后,Andrew Ng又推出了新一系列的课程<DeepLearning.ai>,注册了一下可以试听7天.之后每个月要$49,想想还是有 ...
- jsp学习笔记之:内置对象
application对象: 设置一个名为name,值为val的应用内共享的数据 <% application.setAttribute("name",val); %> ...
- 【CJOJ1372】【洛谷2730】【USACO 3.2.5】魔板
题面 Description 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 我们知道魔板的每一个方格都有一种颜色 ...
- Micropython TurnipBit 青少年入门编程 交通灯实验
不知道大家小时候对红绿灯的原理有什么研究过,我是农村的孩子直到初中才见到真实的红绿灯,当时我记得很清楚,在那个路口站了五六分钟就盯着红绿灯变换,搞不清原理,只觉得神奇.现在想来实在可笑,今天写这个的很 ...
- javaweb代码生成器,专注于javaweb项通用目的代码生成器
该项目为javaWEB项目通用代码生成器,根据数据库表和自定义代码模板生成相应的jsp,js,java文件,生成到指定路径下,javaweb项目开发利器: 项目开源地址:https://gitee.c ...
- 关于OPC UA Helper 命名空间中的OpcUaClient 类中的订阅函数的更改
原函数是opcUaClient.MonitorValue("ns=4;s=MAIN.d", new Action<double, Action>(MonitorTest ...
- Eslint报错整理与解决方法(持续整理)
1.'Unexpected tab character' 字面意思理解呢就是意想不到的制表符,当时出现的时候就是我习惯的使用Tab键去打空格,但是eslint默认不认可Tab,所以解决方法很简单: 在 ...
- PAT乙级-1042. 字符统计(20)
请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过1000的字符串.字符串由ASCII码表中任意可见字符及空格组成,至少包含1个英文字母,以回车结束( ...