需要引用CAD的库文件
accoremad.dll
acdbmgd.dll
acmgd.dll
这些库文件在CAD的安装目录下
常用接口和类
// 获取当前数据库 写法1
Database db = HostApplicationServices.WorkingDatabase;
// 或者 写法2
//Document doc = Application.DocumentManager.MdiActiveDocument;
//Database = doc.Database;
一个示例函数,添加实体到当前数据库
关键知识点:Transaction事务的使用:在C# .Net进行CAD实体的编辑修改时,需要开启事务,在编辑完成之后,提交事务
// 示例函数。添加实体到数据库中
public static ObjectId AddEntityToDatabase(this Database db, Entity ent)
{
ObjectId idRet = ObjectId.Null;
// 在C# .Net进行CAD实体的编辑修改时,需要开启事务,在编辑完成之后,提交事务
using(Transaction trans = db.TransactionManager.StartTransaction())
{
// 打开块表
BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead);
// 打开块表记录
BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
// 将实体添加到块表记录
idRet = btr.AppendEntity(ent);
// 添加新的实体到事务中, 很关键
trans.AddNewlyCreatedDBObject(ent, true);
trans.Commit();
}
return idRet;
}
// 判断实体是否已经加入到数据库中
bool bNew = ent.IsNewObject; // true:已经添加到数据库中,如果需要编辑,要用写方式打开,false,未在数据库中添加,可直接编辑
一些实体和常用类
// CAD实体
Line line = new Line(); // 直线
Arc arc = new Arc(); // 圆弧
Circle circle = new Circle(); // 园
Polyline pl = new Polylline(); // 多段线
Point2d pt2d = new Point2d(); // 2d点
Point3d pt3d = new Point3d(); //3d点
// 常用类型
Vector3d vct = new Vector3d(); // 向量
Matrix3d matrix = new Matrix3d(); // 矩阵,实体在编辑:移动,复制,镜像,阵列时经常用到相关内容
// 一些其他
ObjectId idRet = ObjectId.Null; // 实体id
使用C#开发时,实体的一些基础的接口和ObjectArx的接口有一点差别,此处不一一记录,需要慢慢积累。
与C++ ---- ObjectArx库的一些区别
- 在C#中,实体new出来的是对象,不是指针
Line line = new Line();
此处line不是指针对象。不用进行指针清理等工作 - 在事务中打开的实体对象,不用专门进行关闭,无论是都打开还是写打开。
- C#和C++的一些区别,比如集合使用List<>; 或者在静态函数的第一个参数,使用关键字this修饰时,可以使用第一个参数的对象直接调用该函数,挺好用的。
- ……