CAD是一个在很多行业被使用的软件,在工程设计的工作中使用的非常之多。因为其通用性,在某些方面通过对其进行二次开发定制一些功能变得可能和必要,就让我们在接下来这一系列的文章里,来一场说走就走的旅行,一起来探讨一下如何通过CAD的二次开发在一定程度上提高我们的工作效率。
这里先说明一下,本系列讨论的是使用C#语言对CAD进行二次开发,由于笔者个人只是一个接触编程时间不长的业余程序员,关于C#语言的一些语法知识会在同步的一个系列中,以拾遗的形式进行讨论。这里我们先进行一下准备工作:本系列以CAD2014和C#的.NET framework4.0为例进行开发,注意CAD的版本要和.NET的版本对应,否则程序无法运行,具体对应关系可以查询CAD官网或者查找相应的API文件。下图给出部分版本的对应关系,以供参考。
打开C#的IDE,也就是Visual Studio,新建项目,由于是在CAD程序上进行拓展,所以选择.NET framework的类库,如下图所示
点击下一步,选择存储路径,并将版本选为4.0
建立好项目之后,在Visual Studio右侧的解决方案管理器中右键引用,进行添加,加工CAD安装目录下的3个dll文件(acdbmgd.dll,accoremgd.dll,acmgd.dll)添加到引用当中,并将三个文件的复制本地属性改为False。同时,在文件开头添加几个using语句以引用CAD中相关的名称空间:
这里注意不要硬敲代码,Visual Studio有着非常完善的代码提示功能,在业界有宇宙第一IDE之称,关于一些快捷键等使用技巧请在上文所说的语法拾遗系列中介绍。
弄好了开发环境,有了引用之后,我们就该开始正式工作,本篇作为旅途的开始,完成下列任务:在CAD中绘制一条直线,并且,在CAD下方的编辑栏中输出一句话来表示。
这里介绍下我们在CAD绘制一条直线的过程:
首先,更改CAD的系统命令,在类中声明一个特性,以中括号括住CommandMethod,其参数是一个字符串,该字符串即为要添加到CAD系统里面的命令,当我们在CAD中输入这个命令的时候,CAD会执行这个特性下的方法:
现在,向方法中写入代码。众所周知(实际上我也刚搞明白),CAD是一个关系型数据库,关系型数据库有存储数据的表以及每个客体所占的记录(类似于Excel的行),那么,我们的直线所在的记录也要添加进CAD所对应的表中,这样才能做到在程序中绘制一条直线,并且让所有人看到,具体过程是这样的:
获取当前图形的数据库
在内存中创建一个对象(要绘制的图形)
打开CAD的块表并找到对应模型空间的块表记录
添加所绘制图形的记录
听起来比较晦涩,这里分开来看:
(1)当前图形的数据库在我们引用的Autodesk.AutoCAD.DatabaseServices这个名称空间里面,所以这里我们找一个变量来储存即可,对于编辑栏,同样的道理,编辑栏属于Autodesk.AutoCAD.ApplicationServices:
(2)CAD的图形(点,直线,圆,多段线等)属于名称空间Autodesk.AutoCAD.Geometry:这里我们声明两个点和一条直线,并将直线赋值为两点相连的直线:
这里的声明语法涉及到C#数据类型方面的一些语法,老样子,这里在另一个系列里面细说
(3)关系型数据库需要以事务处理的方式进行写的操作,事务处理的类Transaction属于DatabaseServices名称空间:
接下来寻找块表并且获取块表记录,寻找块表即以读的方式打开块表,由于需要向块表记录中添加直线的记录,属于块表记录以写的形式打开,这里的as是强制转换操作符,也可以用隐式转换:
(4)接下来,将直线记录添加到模型空间的块表记录中,再将直线添加进事务处理中,最后提交事务处理,一条直线绘制完成:
最后,调用Editor的WriteMessage方法,向编辑栏写入想要的信息
到此为止,完成目标。
是不是觉得有些从入门到放弃的意思,不要着急,下一篇我们来讨论如何使用面向对象编程的特性,使得同样的过程只用一行代码就可以完成,从此以后,只要引用了现在的类库,向CAD添加图形就是一行代码就完成的了。
由于笔者能力有限,文章叙述有误之处,还请大家批评指正。