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

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

  1. C#实战之CAD二次开发006:与python进行Socket传输文件

    前言 前面介绍了与CAD相关的一些功能,本期介绍一下C#和python如何通过socket通信来进行文件的传输,建议不了解Socket的同学先去了解一下socket的通讯原理,这样看起来不会云里雾里的 ...

  2. C#实战之CAD二次开发001:CAD和C#的环境配置

    前言 本博文主要介绍利用C#对CAD进行二次开发,结合了ObjectARX功能强大的特点和VBA易用的特点,通过实战项目对C#开发CAD进行一个简要的介绍. 1.CAD的安裝 首先我们需要安装CAD, ...

  3. C#实战之CAD二次开发003:插入文字和插入图块

    前言 上期我们介绍了如何利用C#在CAD中绘制直线和圆,这期我们介绍一下CAD中两个比较重要的功能,插入文字和插入图块,在CAD中插入文字主要是单行文字和多行文字,插入块主要有内部图块和外部图块.本文 ...

  4. C#实战之CAD二次开发004:插入尺寸标注

    前言 上期我们介绍了CAD中插入文字和插入图块两个功能,这期我们继续介绍一个比较常用的功能--标注尺寸,标注尺寸是我们在绘图的时候经常用到这个功能. 插入标注 CAD中的标注形式有很多种,例如水平标注 ...

  5. CAD二次开发仿系统直线命令

    [CommandMethod("Line1")]         public void Line1()         {             Database db = H ...

  6. CAD二次开发资料汇总

    欢迎加入建筑信息化开发交流群,获取开发资料 群号:711844216 一.背景 对工程出身的朋友来说,CAD就像一位朋友,常伴吾身,为了提高效率,于是小伙伴门开始尝试CAD二次开发,刚入门,资料去哪找 ...

  7. C# Cad二次开发新手入门系列教程(一)开发环境搭建

    目录 前言 开发需要做什么准备? 编写自己的第一个程序 前言 本课程主要针对刚接触Cad二次开发或者准备入门Cad二次开发的朋友,笔者是用的C#进行开发,在该系列教程内,笔者会带着大家从最基础的开发到 ...

  8. cad二次开发程序的绿色安装

    此问题的引入是因为一个cad二次开发软件,客户要求做成绿色安装.何为绿色安装呢?软件包copy到一台电脑上(已安装CAD),双击exe,打开的界面包含自定义的菜单.菜单的图标能正确显示.每个功能能使用 ...

  9. intersect 相交 范围_关于CAD二次开发中(范围线自相交)相交线的问题

    CAD二次开发对于毕业没多久,又是半路出家的我来说,是一个很大的挑战,遇到过很多难以解决的问题,这次在CAD二次开发遇到一个很苦恼的问题:判断 一个由线段组成的闭合区域中,是否存在着相互之间相交的线段 ...

  10. CAD 二次开发 图层操作(1)创建图层

    CAD二次开发的资料比较少,除了李冠亿先生的<深居浅出AutoCAD二次开发>这本书之外,目前没有找到合适的参考资料.现将自己工作中用的的一些方法贴出来.方便各位网友快速入门. #regi ...

最新文章

  1. 数据挖掘关联规则挖掘FPtree的思想
  2. linux下创建proc文件系统,[转载]Linux下的proc文件系统(转载)
  3. 1.2.1 Logistic回归和梯度下降简介
  4. 解决从github上拉取代码慢的问题
  5. C宏定义-SWAP的妙用
  6. 五个温度带的分界线_女神建筑师在拿破仑故乡打造的海景别墅,超美!超有温度!【环球设计2225期】...
  7. json模拟数据怎么用_在使用axios获取自己模拟的json数据是踩到的坑
  8. ecshop彻底去版权把信息修改成自己的全教程
  9. 图深度学习论文笔记整理活动 | ApacheCN
  10. JAVA自定义变量_Java 系统自定义变量-D
  11. 关于C++的建议,仅仅为了规范代码(一)
  12. 操作系统的工作流程(流程图表示)
  13. 人脸识别小区门禁系统_(完整版)小区人脸识别门禁系统
  14. C#:实现数据去重算法​(附完整源码)
  15. 小米/红米 手机内部存储空间其它文件怎么删除内部存储空间不足
  16. JVM中OOM和SOF的产生
  17. Python就业怎么样
  18. 国稻种芯百团计划行动 丰收节贸促会:袁氏高科全球新通道
  19. php区块链以太坊,兄弟连区块链教程以太坊源码分析CMD深入分析(一)
  20. Cadence全家桶Capture+Allegro流程-1-创建原理图库和元器件库

热门文章

  1. SeaWeedfs 分布式网络文件存储介绍
  2. mysql 查询最多的_mysql查询——查找订单最多的客户
  3. 高级算法日记9:图(2)
  4. 基于PHP的班级分数量化管理系统
  5. ctf 网络安全比赛简介
  6. python 切片器_Excel数据透视表应用之三切片器
  7. 树梅派应用22:树莓派 SAKS 扩展板实用应用 之 DS1307 RTC 时钟模块
  8. Ubuntu移动硬盘下载
  9. 如何定期清理DNS缓存?清理DNS缓存有什么用?
  10. 每日一诗词 —— 行路难