Autocad的开发形式包括visual lisp、objectarx、vba、.Net等等,其中基于.Net平台的C#语言学习曲线较为平缓,使用该语言进行AutoCad的二次开发效率较高。
本文主要记录了使用C#进行AutoCad二次开发的环境搭建和几种二次开发的模式。
学习资料:1. Autocad .Net开发指南(中文版),此为欧特克公司提供的官方文档;
2. AutoCad官网,在开发人员板块可以查阅官方提供的各种类库;
3. b站的AutoCad_C#二开视屏,链接如下:
https://www.bilibili.com/video/BV1x4411y79M?from=search&seid=11773567052653254338;
4. 百度,google......
软件配置:Autocad2014 + objectarx2014 + AutoCAD_2014_dotnet_wizards + vs2013;
注:此配置不是唯一的,因为.NET框架可向下兼容;
第一节:搭建环境
1.1 创建项目
在vs中创建一个类库项目,适用于.dll和对话框应用程序的开发。
1.2 引用类库
从objectarx2014中引入下图所示类库,并且对于所有类库,右击->属性->复制到本地->false;
1.3 框架及目标平台
做完上述操作,建议先不要动项目的框架及目标平台(右击->项目->应用程序or生成),如果编译出问题,再调整这两项,即注意:平台要与Autocad相匹配:是x64 or x32;框架也要相匹配,看是否和当前Autocad版本相兼容。
第二节:代码编写
在正式写代码之前,需要了解你想做哪种形式的Cad二次开发,如:.dll; Ribbon; 对话框应用程序等等。不同形式的开发,其代码编写也有所不同。
2.1 载入动态链接库(.dll)
这应该是较为常用的,且比较简单快捷的一种开发形式。可以用其来编写一些小的功能,类似于在Cad下方的编辑框中输入一些命令(Command)。
具体开发如下:
在public class xxx下方编写:
[Command("xxx")] //可以理解为:当写完代码并加载至cad后,在编译框键入命令xxx,从而执行操作。至于具体执行什么操作,这要根据下面的xxx方法具体的算法逻辑了。
public void xxx() //编写期望cad具体执行的操作。
{
xxxxxx;
}
注:以上只是一个模板,具体可参照《Autocad .Net开发指南》上的例子。
2.2 对话框应用程序
本质上,这也是一个类库项目,与2.1节类似,也是先编译生成一个.dll格式的动态链接库,然后再通过NETLOAD命令加载入Cad中,随后键入xxx命令,执行操作。但是,与上述开发形式相比,其与用户之间的交互模式更为友好。
一般地,当键入xxx命令后,cad会弹出一个对话框,通过点选按钮的方式,让cad执行具体操作。
具体开发如下:(注:仅为模板)
1. 创建一个类库项目;
2. 添加窗体文件,并在类库中编写类似如下的代码:
public class Class1 { [CommandMethod("DialogDemo")] public void DialogDemo() { Form1 f1 = new Form1(); //创建窗体实例 f1.ShowDialog(); //弹出对话框,注意与show的区别 } }
3. 为了实现:当点击按钮,从而触发事件这一操作,
需要编写事件中命令cad所做的具体操作逻辑,这就需要单独编写一个或多个类,可以添加一个类文件,将他们放在其中。
4.最后,为了点击按钮后能够触发相应的事件,在事件处理器中需要添加类似如下的代码:
private void btnDrawToCad_Click(object sender, EventArgs e) { MyEntites m1 = new MyEntites((double)numericUpDown1.Value, (double)numericUpDown2.Value, (double)numericUpDown3.Value); //创建一个实例; datatool.AddEntity(m1.Ents); //将list作参数载入,将创建的图形添加进模型空间块表记录中。 }
5. 综合起来,在cad键入命令xxx后,弹出一个对话框,点击按钮后,在cad中自动画出了一个图形。
ps: 随着继续学习深入,其他的一些开发模式也会陆续更新~ to be continue~