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 ...
随机推荐
- docker学习系列(一):docker 基础
一.简介 开发当中比较麻烦的问题在于软件配置,每个人的机械以及系统都不尽相同,程序需要运行在系统当中需要配置好相应的系统以及各种依赖的组件,但是很多时候由于各种软件依赖包的版本,系统兼容性问题会导致程 ...
- 让安卓app支持swf的一个播放器,和自己编写的音乐管理程序
jcenter方式导入 在需要用到这个库的module中的build.gradle中的dependencies中加入 dependencies { compile 'com.yhd.hdswfplay ...
- 【Luogu1337】平衡点(模拟退火)
[Luogu1337]平衡点(模拟退火) 题面 洛谷 题解 和BZOJ3680吊打XXX是一样的.. 但是数据很强呀.. 疯狂调参 各种WA... 很无奈呀.... #include<iostr ...
- [SCOI2010]传送带
在两个传送带上分别三分两个点计算 三分套三分 # include <bits/stdc++.h> # define IL inline # define RG register # def ...
- ES6学习总结二(数组的四个方法,字符串)
数组 1 map 映射 一个对一个 如:分数数组[34,56,78,99]映射为[不及格,不及格,及格,及格]; 等级数组[23,56,89]映射为 [ {name:'lmx',level:1,rol ...
- 在linux上安装dotnetcore
dotnet core已经出来有一段时间了,不是什么新名词了.但这个技术,目前还是比较新的,企业也没有普遍应用.它最大的亮点就是跨平台,也就是我们写的c#代码,可以运行在linux上. 在国内学习do ...
- SpringMVC【校验器、统一处理异常、RESTful、拦截器】
前言 本博文主要讲解的知识点如下: 校验器 统一处理异常 RESTful 拦截器 Validation 在我们的Struts2中,我们是继承ActionSupport来实现校验的...它有两种方式来实 ...
- Win10_x86_x64PE维护光盘——我用过最好用的PE
先感谢hongxj和fish2006两位大大提供的PE. 先放出所有工具的下载地址: hongxj的PE:https://yunpan.cn/crAw6HS6ar9ck 访问密码 4a4e fish ...
- 设计模式——策略模式(C++实现)
程序优化是用于消除程序中大量的if else这种判断语句 #include <iostream> #include <string> using namespace std; ...
- numpy用法小结
前言 个人感觉网上对numpy的总结感觉不够详尽细致,在这里我对numpy做个相对细致的小结吧,在数据分析与人工智能方面会有所涉及到的东西在这里都说说吧,也是对自己学习的一种小结! numpy用法的介 ...