C#实战之CAD二次开发002:绘制直线和绘制圆

前言
上期我们介绍了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中的插入文字和插入图块两个功能。

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值