前言
上期我们介绍了C#和CAD环境的配置,这次我们介绍一下CAD两个基本的绘图功能——直线和圆,这两个在CAD绘图中用的还是比较多的。
1.绘制直线
首先我们新建一个类库项目,名字myproject,在添加引用acmgd.dll和acdbmgd.dll,需要注意的一点就是,在添加完引用之后,需要将两个引用dll的属性进行一个设置,将属性中“复制本地”的选项改为Fasle。
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
public static class Tools
{
//绘制直线
public static void FirstLine(Point3d startPoint, Point3d endPoint, string layer)
{
//獲取當前活動圖形數據庫
Database db = HostApplicationServices.WorkingDatabase;
Line line = new Line(startPoint, endPoint);//新建一條直線對象
//定義一個指向當前數據庫的事務處里,以添加直線
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);
line.Layer = layer;
btr.AppendEntity(line);//以图形对象的信息添加到块表记录中
trans.AddNewlyCreatedDBObject(line, true);//把对象添加到事务处理中
trans.Commit();//提交事务处理
}
}
}
在.NET中,Autodesk.AutoCAD.Geometry命名空间的Point3d结构表示点的三维坐标,Point2d结构表示点的二维坐标。
其中mode参数表示打开对象的方式,它是一个OpenMode类型的枚举,主要两个值:
(1)ForRead:对象以读的方式被打开,只要它还没有以写的方式被打开;
(2)ForWrite:对象以写的方式被打开,只要它还没有被打开,否则会打开失败;
接着我们在新建一个类,用于建立CAD命令行指令,用于调用上面绘制直线的函数。其中三个参数所代表的意思分别是直线的起点,终点和它所在的图层。
public class Command
{
//名字可以自定义,最好不要和CAD快捷键冲突
[CommandMethod("cad")]
public static void cad()
{
Tools.FirstLine(new Point3d(0, 0, 0), new Point3d(100, 100, 0), "0");
}
}
接下来,编译我们写好的程序,当显示生成成功之后,我们就可以去CAD进行测试了。
打开CAD,在命令行中输入‘cad’命令,CAD就会帮我们画出一条起点为(0,0,0),终点为(100,100,0)的直线了。效果如下图所示:
2.绘制圆
如果学会绘制直线之后,相信读者对C#操作CAD画图会有一个基本的了解了,下面我们在来实现绘制圆。我们采用的是三点画圆法,通过圆周上任意三点创建圆。
public static void CreateCircle(Point3d pt1, Point3d pt2, Point3d pt3, string layer)
{
Database db = HostApplicationServices.WorkingDatabase;
Circle circle = new Circle();
//創建一個幾何類的圓弧對象
CircularArc3d geArc = new CircularArc3d(pt1, pt2, pt3);
//將圓弧對象的圓心和半徑賦值給圓
circle.Center = geArc.Center;
circle.Radius = geArc.Radius;
circle.Layer = layer;
//定義一個指向當前數據庫的事務處里,以添加
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);
btr.AppendEntity(circle);//以图形对象的信息添加到块表记录中
trans.AddNewlyCreatedDBObject(circle, true);//把对象添加到事务处理中
trans.Commit();//提交事务处理
}
}
同样的,我们在之前写好的Command类中添加一行代码:
Tools.CreateCircle(new Point3d(50, 50, 0), new Point3d(0, 50, 0), new Point3d(50, 0, 0), "0");
再次编译写好的程序,打开CAD,输入‘cad’命令,效果如下图所示:
至此,绘制直线和绘制圆的介绍就到此为止了,是不是感觉很简单呀,下期我会介绍利用C#在CAD中的插入文字和插入图块两个功能。