AutoCAD二次开发技术在矿山工程设计中的应用
2017-08-28李少辉王志远中国恩菲工程技术有限公司北京100038
李少辉,王志远(中国恩菲工程技术有限公司,北京 100038)
AutoCAD二次开发技术在矿山工程设计中的应用
李少辉,王志远(中国恩菲工程技术有限公司,北京 100038)
介绍了AutoCAD二次开发在工程设计中的必要性,及基于.NET平台利用C#语言对AutoCAD进行二次开发的方法。根据矿山工程设计的实际需要,开发了坐标计算和坐标表自动绘制的辅助设计程序,对其主要功能和特点进行了介绍。
AutoCAD; .NET API; 二次开发; 坐标计算
1 前言
AutoCAD软件由于其易学易用、功能丰富等特点,现已成为国际上广为流行的绘图工具,特别是在工程设计领域成为不可或缺的重要工具,但是在矿山工程设计工作中,经常遇到图形复杂、计算量较大或重复工作较多等问题,对于这样的复杂CAD问题,依据AutoCAD的基本功能往往难以解决问题或者制图效率不高,在此情况下,就需要根据制图工作的具体要求,对AutoCAD进行二次开发,给软件添加自定义功能,以提高设计效率和技术水平,减少人力投入和降低出错概率[1~2],同时使制图工作更加规范准确。因此,AutoCAD的二次开发是十分必要的。
2 基于.NET API的AutoCAD二次开发工具
Autodesk公司为AutoCAD的二次开发提供了一系列的工具和应用程序编程接口(API),方便用户对其进行二次开发。
2.1 .NET API技术简介
从AutoCAD2006开始,.NET API开始用于AutoCAD的二次开发,.NET API提供了一系列托管的外包类,使开发人员可以在.NET框架下,使用任何支持.NET的语言,如Visual Basic、C#等对AutoCAD进行二次开发。其优点是完全面向对象,功能强大且方便易用,是目前较理想的AutoCAD二次开发工具[3~4]。
.NET API与传统ObjectARX的区别主要在于开发应用程序的环境不同,.NET API将ObjectARX下的全局函数封装为.NET API下的某些对象或对象的属性,利用C#、VB来编写托管ARX程序,提高了程序的重用性和安全性,开发人员不必关心具体的函数实现方法,只需要了解其用法,因此开发流程较为简便。
2.2 .NET API与其它二次开发工具的比较
当前主要的AutoCAD二次开发工具中,VisualLisp与VBA语法简单,使用方便且开发速度较快,不需要安装另外的编程工具包,但是其功能也有所不足,开发的AutoCAD插件可视化程度低,对面向对象的功能支持不好。而ObjectARX基于VC平台,使用C++作为编程语言,功能强大,可以很好地运用各种面向对象技术,但其缺点是开发效率较低,由于C++语法较为复杂,对开发人员的能力要求较高。ObjectARX使用C#语言时,不但融合了VBA开发速度快、语言简单的特点,还结合了C++面向对象的许多优点,可以说C#是最适合进行AutoCAD开发的语言。基于.NET平台对AutoCAD进行二次开发,可充分利用.NET 的各种优势,在保证功能强大的前提下大大提高开发速度[5]。
3 利用.NET API进行AutoCAD二次开发的流程
应用.NET API进行AutoCAD二次开发,所开发的程序会生成动态链接库(DLL)文件,在AutoCAD中加载后就可以使用。下面以使用C#语言基于Visual Studio 2010平台下进行开发为例,对于使用.NET API进行AutoCAD二次开发的一般过程进行描述。
3.1 建立Windows应用程序
在Visual Studio 2010中新建Windows应用程序,在程序开发前要对AutoCAD进行托管,即在Visual Studio 2010中添加引用(acdbmgd.dll和acmgd.dl1)[6],此外还要在程序的开头引用命名空间。代码如下:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
应用程序引用了AutoCAD提供的开发程序集后,就可以利用程序集中的函数编写代码,实现与AutoCAD的互操作。
3.2 添加AutoCAD命令
接下来对需要在AutoCAD中新增的各项功能,在二次程序开发中定义对应菜单和命令入口。可以在功能函数中进行各功能模块的具体代码编写。编译成功以后生成的DLL文件,在AutoCAD中可以通过NETLOAD命令加载启动,也可以通过修改AutoCAD的加载文件实现自动加载。
3.3 向AutoCAD绘制图形
在程序中绘制图形需要访问AutoCAD图形数据库。AutoCAD图形数据库对象包含一套固定的符号表和命名的对象词典。符号表和命名对象词典都是存储数据库对象的容器。访问AutoCAD数据库的方法为:使用事务处理来获取数据库对象,在符号表(模型空间所在的块表也是符号表之一)中加入实体。通常绘图都在模型空间中进行,所有模型空间的实体都存储在块表的“模型空间”记录中。
4 二次开发的应用——矿山坐标计算程序的开发
在矿山工程设计工作中,如设计中段平面图、斜坡道时,需要计算各个控制点的坐标,两点间的坡度、距离,并绘制坐标表等,并需要经常调整坐标点的位置和两点间的坡度等数据进行试算,计算过程较为复杂。利用.NET平台,对AutoCAD2010进行二次开发,制作出了点坐标计算和坐标表自动绘制的辅助设计程序,能够实现坐标自动计算、坐标点的添加、修改、删除后的数据实时更新等功能,有助于减少工作量,提高工作效率并保证数据的准确性。
二次开发使用Visual Studio 2010作为开发工具,C#为开发语言,利用ObjectARX2010开发包对AutoCAD2010进行开发。对于AutoCAD的其它版本,使用对应版本的开发工具包进行重新编译即可。
4.1 主要功能
坐标计算程序包括“平面坐标计算”和“斜井斜坡道坐标计算”两种,主要差别在于平面坐标计算中坡度值较小,因此坡度数值以千分数表示,绘制的坐标表中不包含“实际斜长”一项,斜井斜坡道坐标计算中坡度值较大,因此坡度数值以百分数表示,绘制的坐标表中包含“实际斜长”一项。程序功能结构如图1所示。
图1 坐标计算程序功能结构图
在AutoCAD命令栏中输入自定义的坐标计算命令后,即弹出窗体对话框,如图2所示。
图2 初始窗体界面
(1)添加坐标数据。打开坐标计算对话框后,首先需要输入或拾取第一点的平面X、Y坐标及标高(Z坐标)。需进行坐标计算的示例图形如图3所示,添加坐标数据后对话框如图4所示。后续的坐标点要选择基点(默认为上一点),输入标号,选择到基点为直线或圆弧,输入标高或坡度以及圆弧半径等,拾取点获取其坐标后,计算该点到基点的距离、实际斜长、坡度或标高等数据,并将该点的数据实时添加到对话框左侧的坐标数据表中,添加坐标点后,会在AutoCAD图形中根据已拾取的点绘制一条标示线,提示用户已经选取的坐标点。
图3 坐标计算示例图形
图4 添加坐标数据
坐标计算中经常会遇到分支的坐标点计算或者闭合线路的计算,如图3中点2到点7即为一个分支,计算坐标点7时,只需选择基点为已知点2,程序会自动将点2作为该分支的起始点进行计算,坐标表中会添加点2和点7的数据。
当分支需要闭合时,如图6中点4→点8→点9→点10→点3即为一个闭合的分支,选择闭合点3时,只需在标号中输入3,系统会将其识别为已知点,不需录入其它参数,便会自动计算点10到点3的距离,坡度等数据,添加到坐标表中,如图4中数据表格所示。
(2)修改坐标数据。要插入坐标点,需在坐标表中选中某一点,点击工具栏中的“插入”按钮,即弹出“插入点对话框”,如图5所示,以选中的点为基点,其它参数录入同(1)中所述,拾取点后即将该点插入到坐标表中。如果AutoCAD图形中移动了某一点的位置,可以点击工具栏中的“拾取点替换”按钮,更改选中点的坐标。要删除坐标表中的点,可以点击工具栏中的“删除”按钮,即删除选中的坐标点。
图5 插入坐标点
除在图形中选取点外,也可以直接修改数据表中的数据,包括坡度、标高等。在修改数据后,由于各个坐标点之间是相互关联的,因此需要对整个坐标表中的数据进行重新计算,计算流程如图6所示。
图6 坐标表计算流程图
(3)绘制图形。点击工具栏中的“标注圆弧尺寸”按钮,可在图形中拾取圆弧,之后会自动标注其半径、弧长、角度等数据。
完成坐标点拾取后,可以设置绘制坐标表的参数,如图7所示,设置的参数为字体高度、字体颜色、绘图比例、宽度比例等,绘制的图形默认以生成AutoCAD块的形式插入到图形中。绘制的坐标表格式如图8所示。
图7 设置绘图参数
图8 在AutoCAD中绘制的坐标表
(4)坐标数据的导入导出。可以将坐标数据导出至csv格式文件,需要修改坐标数据时,可以直接将csv格式文件导入,而不需用重新到图形中拾取坐标点。
4.2 程序特点
(1)可视化界面,便于操作。将坐标计算的各种功能集成到对话框中,并将已获取的点坐标数据实时显示在数据表格中,用户可以随时掌握各个坐标点的数据。
(2)实时更新数据。在需要修改点的坐标时,可以方便地插入点、删除点和编辑坐标数据,并可自动更新数据,自定义程度较高,用户可以随时获取修改后的数据。
(3)坐标数据可以随时保存和导入,便于此后的数据修改而不需要重新获取点坐标。
5 结语
基于.NET API进行AutoCAD二次开发的方法结合了其它二次开发工具的优点,流程简单而功能强大,开发效率高,且有利于实现与其他Windows应用程序的数据交互,是目前进行AutoCAD二次开发较为理想的工具。
依据此方法开发的点坐标计算程序能够实现修改坐标点后的数据自动计算,可作为中段平面图或斜坡道等设计中的辅助工具,经过在多个设计项目中的实际使用表明,程序能够有效降低出错概率,提高工作效率。
[1] 陈文峰,刘祚秋,等.AutoCAD二次开发在工程计算软件中的应用[J].科学技术与工程,2011,11(24).
[2] 丁航行,任凤玉,等.AutoCAD环境下巷道坐标参数表的自动生成[J].东北大学学报(自然科学版),2015,36(6).
[3] 李保风.基于.NET访问AutoCAD数据库探讨[J].制造业自动化,2012,34(4).
[4] 宋 威,王正琼,等.使用C#语言进行AutoCAD开发学习初探[J].测绘与空间地理信息,2010,33(4).
[5] 魏 坤,陈 开,等.基于.NET技术与AutoCAD的产品数据管理系统研究[J].制造业信息化,2008,(7).
[6] 于萧榕,郭昌言.结合Objectarx和C#进行AutoCAD二次开发框架的研究[J].科学技术与工程,2010,10(20).
Application of AutoCAD secondary development in mine engineering design
The necessity of AutoCAD secondary development in engineering design and the method of based on. NET platform, using C# language to develop AutoCAD were introduced. According to the actual demand of mine engineering design, the aided design program was developed to accomplish coordinate calculation and automatically draw coordinate table, and its main functions and characteristics were introduced.
AutoCAD; .NET API; secondary development; coordinate calculation
TP391.72
A
李少辉(1987-),男,河北邯郸人,工程师,从事矿山工程咨询与设计工作。