基于 Visual C#的 AutoCAD 开发
及其在工程中的应用
肖泽云 编著
二〇一〇年四月
内容提要
本书以实例形式介绍采用 Visual C# 语言对 AutoCAD 进行二次开发的技术。全书包括基础篇
和应用篇两部分,其中基础篇主要介绍 AutoCAD 开发中常见的图形对象获取、图形绘制、图形编
辑等实例,应用篇主要结合实际工程问题、基于数学理论知识、采用程序设计来解决这些问题。
本书内容深入浅出、易学易懂,并对各个实例都作了详细的分析说明,有助于解决工作中的
实际问题。书中所有实例均给出了完整的程序源代码和注释。
本书结构清晰、实用性很强,适合土木、水利等专业人员以及 AutoCAD 开发爱好者,也可作
为高校计算机辅助设计类课程的教材。
前 言
AutoCAD 是由美国 Autodesk 公司于二十世纪 80 年代为微机上应用 CAD 技术而开发的绘图程
序软件包,经过不断的完善,以其优异的绘图功能、易学易用等特点,现已成为国际上广为流行的
绘图工具。特别是其通用性强、具有多种工业标准和开放的体系结构,使得它在土木、水利、机械、
电子、船舶等领域得到了极为广泛的应用。
为充分利用 AutoCAD 进行二次开发,Autodesk 公司为用户提供了四种对 AutoCAD 进行二次开
发的方式,即 AutoLisp、ADS、Object ARX 和 ActiveX Automation。其中,ActiveX Automation
是微软公司推出的一个技术标准,其核心技术是允许一个 Windows 应用程序通过暴露对象控制和操
作另一个 Windows 应用程序。由于 ActiveX 技术是一种完全面向对象的技术,所以许多面向对象化
编程的语言和应用程序,可以通过 ActiveX 与 AutoCAD 进行通信,实现应用程序之间相互控制、相
互调用。从 AutoCAD R14 版开始,AutoCAD 引入了 ActiveX Automation 技术,本书中将介绍采用
Visual C#语言基于 ActiveX 技术对 AutoCAD 进行二次开发。
C#(C Sharpe)是由微软公司所开发的一种面向对象,且运行于.NET Framework 之上的高级程
序设计语言。它具有简单、功能强大、类型安全等特点,并综合了 VB 简单的可视化操 作和 C++
的高运行效率,以其 强大的操作能力、优雅的语法风格 、创新的语言 特性和便捷的面向组件
编程的 支持成为.NET 开发的首选语言。
本书主要介绍基于 Visual C#对 AutoCAD 进行二次开发,另外通过结合数学理论知识、程序
设计和 CAD 开发技术等介绍一些常见工程问题的解决方案。本书分基础篇和应用篇两部分,其中基
础篇主要介绍一些使用 ActiveX 技术开发 AutoCAD 的常见例子,应用篇主要针对土木水利工程中较
为常见的问题提出一些数学理论分析并结合程序设计来解决这类问题。全书共二十六个实例,所选
例题力求实用、精简,深入浅出,易学易懂。本书中讲解的实例主要以 AutoCAD 2007 为基础,使
用 Visual Studio 2005 进行程序设计、编写以及调试运行。希望通过本书,能够帮助读者提高善
于发现问题与分析问题的能力,并能使用程序设计来解决这些问题。
本书主要面向土木、水利等专业人员以及 AutoCAD 开发爱好者,也可作为高校计算机辅助设
计类课程的教材。由于作者水平有限,疏漏和错误之处在所难免,恳请读者批评指正。
作者
2010 年 4 月
目 录
基础篇 ...............................................................................................................................................................................1
实例 1 基本例子 ..................................................................................................................................................................1
1、新建项目 .................................................................................................................................................................1
2、添加引用 .................................................................................................................................................................1
3、全局变量定义 .........................................................................................................................................................1
4、打开 CAD 文件.......................................................................................................................................................2
5、定义启动 CAD 对象的函数...................................................................................................................................2
实例 2 获取 CAD 中图形对象...............................................................................................................................................5
1、获取 CAD 图形对象...............................................................................................................................................5
2、CAD 中常用图形对象名称....................................................................................................................................5
3、获取鼠标点击位置 .................................................................................................................................................5
实例 3 直线对象 ..................................................................................................................................................................7
1、获取直线的坐标 .....................................................................................................................................................7
2、其他常用属性和方法..............................................................................................................................................7
实例 4 多段线对象 ..............................................................................................................................................................9
1、获取多段线节点坐标..............................................................................................................................................9
2、其他常用属性和方法............................................................................................................................................10
实例 5 获取三维多段线节点坐标.....................................................................................................................................11
实例 6 获取点的坐标 ........................................................................................................................................................13
实例 7 获取块的插入点.....................................................................................................................................................14
实例 8 获取文字插入点及内容.........................................................................................................................................15
实例 9 获取样条曲线的控制点坐标及拟合点坐标.........................................................................................................17
1、获取样条曲线的控制点坐标................................................................................................................................17
2、获取样条曲线的拟合点坐标................................................................................................................................18
实例 10 选择集 ..................................................................................................................................................................20
1、在屏幕上选择对象 ...............................................................................................................................................20
2、根据条件选择对象 ...............................................................................................................................................20
3、根据范围选择对象 ...............................................................................................................................................25
实例 11 绘制基本图形.......................................................................................................................................................27
1、绘制直线 ...............................................................................................................................................................27
2、添加文字 ...............................................................................................................................................................27
3、绘制三维多段线 ...................................................................................................................................................28
实例 12 编辑对象 ..............................................................................................................................................................30
1、复制对象 ...............................................................................................................................................................30
2、删除对象 ...............................................................................................................................................................30
3、旋转对象 ...............................................................................................................................................................30
4、缩放对象 ...............................................................................................................................................................32
5、移动对象 ...............................................................................................................................................................34
实例 13 图层对象 ..............................................................................................................................................................37
1、添加新图层 ...........................................................................................................................................................37
2、删除图层 ...............................................................................................................................................................38
3、设置图层锁定、冻结、可见性及线型................................................................................................................38
实例 14 其他 ......................................................................................................................................................................39
1、向 CAD 发送命令.................................................................................................................................................39
2、创建一个新的 CAD 文件.....................................................................................................................................39
3、保存 CAD 文件.....................................................................................................................................................40
4、文件另存为 ...........................................................................................................................................................40
5、关闭文档 ...............................................................................................................................................................42
6、退出 CAD..............................................................................................................................................................43
应用篇 .............................................................................................................................................................................44
实例 15 获取坐标 ..............................................................................................................................................................44
1、新建项目 ...............................................................................................................................................................44
2、获取直线坐标 .......................................................................................................................................................46
3、获取多段线节点坐标............................................................................................................................................48
4、获取三维多段线节点坐标....................................................................................................................................50
5、获取样条曲线控制点坐标....................................................................................................................................52
6、获取样条曲线拟合点坐标....................................................................................................................................54
7、获取点的坐标 .......................................................................................................................................................56
8、获取块的插入点 ...................................................................................................................................................57
9、获得文字插入点及内容........................................................................................................................................58
10、获取各种线节点坐标..........................................................................................................................................60
11、表格显示数据......................................................................................................................................................62
12、输出为文本文件 .................................................................................................................................................66
13、输出 Excel 表格 ..................................................................................................................................................67
实例 16 向量应用 ..............................................................................................................................................................71
1、线段的方向判断 ...................................................................................................................................................71
2、更改面片方向 .......................................................................................................................................................74
实例 17 根据等高线绘制剖面图.......................................................................................................................................80
1、获取两条多段线的交点........................................................................................................................................80
2、根据等高线绘制剖面图........................................................................................................................................81
实例 18 边界搜索 ..............................................................................................................................................................92
1、凸边界搜索 ...........................................................................................................................................................92
2、含凹边界的凸边界搜索........................................................................................................................................95
3、边界内点的个数 ...................................................................................................................................................99
实例 19 一般三角网介绍.................................................................................................................................................105
1、定义绘制面片的函数..........................................................................................................................................105
2、定义一个集判断和绘制于一体的函数 GetBaseTrian()...............................................................................105
3、划分三角网 .........................................................................................................................................................106
4、错误处理 .............................................................................................................................................................107
实例 20 Delaunay 三角剖分............................................................................................................................................110
1、获取点集坐标数组 .............................................................................................................................................110
2、获取点集外围边界 .............................................................................................................................................111
3、根据边界及内部点生成三角网..........................................................................................................................114
4、绘制三角网和边 .................................................................................................................................................121
实例 21 开挖量计算 ........................................................................................................................................................124
1、开挖方量计算原理 .............................................................................................................................................124
2、填方量计算原理 .................................................................................................................................................126
3、既有挖方、又有填方的计算原理......................................................................................................................127
4、程序设计步骤及实现..........................................................................................................................................132
实例 22 根据 TIN 生成等高线.........................................................................................................................................142
1、定义数据结构 .....................................................................................................................................................142
2、选择三角形面片对象..........................................................................................................................................143
3、参数设置并绘制等高线......................................................................................................................................143
实例 23 根据高度图生成 TIN..........................................................................................................................................147
1、新建项目 .............................................................................................................................................................148
2、添加相关控件 .....................................................................................................................................................149
3、全局变量定义 .....................................................................................................................................................150
4、打开图片文件 .....................................................................................................................................................150
5、生成方阵网格点 .................................................................................................................................................150
6、生成 TIN..............................................................................................................................................................151
7、保存 CAD 文件...................................................................................................................................................152
实例 24 根据剖面线及路径建立模型.............................................................................................................................156
1、选取剖面线 .........................................................................................................................................................156
2、选取路径对象 .....................................................................................................................................................157
3、编辑面域对象 .....................................................................................................................................................158
实例 25 根据浇注信息划分大坝模型.............................................................................................................................166
1、读取浇筑信息数据 .............................................................................................................................................166
2、大坝模型的搜索寻找..........................................................................................................................................170
3、划分模型 .............................................................................................................................................................171
实例 26 智能赋予高程值..................................................................................................................................................175
1、提取高程注记 .....................................................................................................................................................175
2、连接高程注记 .....................................................................................................................................................179
3、赋予高程值 .........................................................................................................................................................184
4、搜索首曲线 .........................................................................................................................................................205
基于 Visual C#的 AutoCAD 开发及其在工程中的应用
基础篇
实例 1 基本例子
1、新建项目
启动 Visual Studio 2005,新建一个项目,命名为“CAD 开发”,如下图所示:
2、添加引用
添加 AutoCAD 的引用 AutoCAD 2007 Type Library和 AutoCAD/ObjectDBX Common 17.0 Type Library,如下
图所示:
3、全局变量定义
1
基于 Visual C#的 AutoCAD 开发及其在工程中的应用
在全局变量中定义如下:
Autodesk.AutoCAD.Interop.AcadApplication AcadApp;
Autodesk.AutoCAD.Interop.AcadDocument AcadDoc;
其中,AcadApplication 是 CAD 对象接口,AcadDocument 是 CAD 文件。
4、打开 CAD 文件
添加一个按钮,为按钮添加如下代码,实现打开一个 CAD 文件的功能:
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog pOpenDG = new OpenFileDialog();
pOpenDG.ShowDialog();
string filePath = pOpenDG.FileName;
AcadApp = new AcadApplication();
AcadApp.Application.Visible = true;
AcadDoc = AcadApp.Documents.Open(filePath,null,null);
}
程序运行结果如下图所示:
如果没有语句“AcadApp.Application.Visible = true;”则无法显示 CAD 软件界面,只能启动 CAD 在后台。通
过“AcadApp = new AcadApplication();”是创建一个新的 CAD 对象,但是并不是每次都需要创建 CAD 对象,如
CAD 对象已经存在时就不需要再创建 CAD 对象。
5、定义启动 CAD 对象的函数
定义一个启动 CAD 对象的函数“启动 CAD()”,代码如下:
private void 启动CAD()
{
try
{
AcadApp =
(AcadApplication)System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application");
2