摘要:讨论在VisualC++.NET2002的集成开发环境下,使用ObjectARX和MFC相结合开发控制测量验算应用程序,有效地解决人工计算量大、控制精度误差繁琐等问题,同时使用该方法还为控制测量验算应用程序提供了强大的图形处理技术平台,发挥了MFC与ObjectARX模块性好、独立性强、稳定性高等优点。
关键词:AutoCAD二次开发、ObjectARX;VC.NET;MFC;坐标反算;控制测量验算
1.ObjectARX与MFC特色
1.1ObjectARX
ObjectARX程序本质上为Windows动态链接库(DLL)程序,与AutoCAD共享地址空间,直接调用AutoCAD核心函数,直接访问AutoCAD数据库,并且可以扩充AutoCAD的类和协议,建立和AutoCAD的内部命令在同一层次上的命令,因此用其开发的CAD软件具有模块性好、独立性强、稳定性高等优点。而AutoCAD又具有强大的矢量绘图功能,调用已知的数据可以绘制出用户所需要的图形。
1.2MFC
MFC(MicrosoftFoundationClass)是Windows环境下编程的一个应用程序框架,是C++类库的扩展。它提供了大量的预写类和支持码,可以处理许多标准Windows编程任务,如生成窗口和处理消息。它还可以在程序中加入复杂的特性,如工具条、分窗视图等。
2.ObjectARX与VC.NET结合
正是由于CAD处理图形数据和MFC提供的视窗交互、类库计算的强大功能,把两者通过CAD平台结合在一起,可以使研究人员更好地输入和管理数据。在ObjectARX与MFC结合编程的过程中,ObjectARX应用程序能够创建动态链接的MFC类库并在AutoCAD中使用,用户可以使用这些库来创建标准的Windows图形用户界面(GUI),从而实现程序界面的可视化。ObjectARX是基于AutoCAD面向对象的二次开发工具,其开发环境必须基于VC.NET平台。
3.ObjectARX应用程序设计思路
3.1工程控制测量验算问题
在工程测量中我们经常要通过一些已采集的数据计算某些控制点的坐标、方位角等验算,然后通过CAD等绘图软件绘制地形图。常用的计算有坐标正反算、支导线、附合导线、测角前方交会、测角后方交会等。
3.2坐标反算实例
本文以坐标反算为例,运用ObjectARX与MFC开发一个可视化的坐标反算小程序。如图1所示,若A、B为两已知点,其坐标分别为(XA,YA)和(XB,YB),根据三角函数,可以得出直线的边长和坐标方位角计算公式:tanα=△YAB/△XAB=(YB-YA)/(XB-XA)。
3.3程序流程
如图2所示,为测量数据计算一般流程。通过此流程图,开发人员可以开发出各种计算小程序在CAD平台下被调用。
3.4ObjectARX应用程序结构
ObjectARX应用程序通常由初始化程序和用户定义的命令函数两部分组成。初始化部分主要由入口函数acrxEntrypoint()定义、初始化函数initApp()定义和ARX卸载程序的函数定义组成。ARX初始化函数initApp()通常是调用addCommand()函数注册用户定义的AutoCAD命令,而卸载函数unloadApp()调用RemoveGroup()函数释放addCommand()函数定义的命令组。
图1 图2
3.5程序对话框设计
用类向导创建相应的对话框类,自动生成CDialog类的派生类定义的头文件(h文件)和相应的实现文件(cpp文件)。创建8个editbox编辑框、两个Button按钮,若干个static静态文本,并拖动到相应位置,如图4所示。
3.6定义数据结构类型
坐标和距离的单位均为米(m),方位角以角度制为单位。测量数据精度要求较高,坐标和距离采用双精度(double)型,角度采用度分秒形式,度和分定义为整型(int)变量,秒定义为单精度(float)变量。见表1所示。
表1主要控件说明:
3.7坐标反算主程序
MFC提供了大量预定义的类库是大大简化了编程时带来的计算繁琐,如math.h文件中包含了绝大数的数学函数,使开发人员不需要再去定义函数。以下为坐标反算程序的主要代码:
voidFSDlg::OnBnClickedFS()
{
UpdateData();//刷新控件的值到对应的变量
.............
UpdateData(FALSE);//拷贝变量值到控件显示
}
3.8注册命令
在initApp()函数中有一个重要的函数acedRegcmds->addcommand()函数,acedRegcmds为一个宏,它提供一个向ARX系统中Acedcommandstack(命令堆栈)对象的指针。命令堆栈是AutoCAD存放命令的地方,它包含了AutoCAD的内部命令和用户定制的命令。而addcommand()函数是Acedcommandstack类,加入命令的方法即成员函数,正是通过这个函数,使用户定义的函数与自定义的命令名建立了联系。这样,用户就可以直接输入命令名来执行应用程序。此程序注册新命令“zuobiaofansuan”,命令简化名为“zbfs”。
图3
3.9ObjectARX应用程序的装载与卸载
ARX应用程序的装载和卸载主要有以下几种方法:
(1)在AutoCAD安装目录下文件acad.rx中写有AutoCAD启动中指定待装入的ARX应用程序名。acad.rx可以用记事本打开编辑,每个ObjectARX应用程序名必须单独占一行,AutoCAD启动时会自动装载该文件中的ObjectARX应用程序;
(2)使用APPLOAD对话框。AutoCAD文件appload.lsp定义了使用AutoLISP函数arxload和arxunload装载和卸载ARX应用程序的用户接口;
(3)“ARX”是一个AutoCAD命令。在AutoCAD命令行键入ARX,然后键入L后弹出对话框,指定待装载的ARX应用程序名即可;相反,然后键入U后弹出对话框,可以卸载ARX应用程序。
在这里我们加载“坐标反算”程序,然后直接在命令行键入“zbfs”(简化名),弹出如图3所示对话框。
4.结语
随着AutoCAD在各个行业应用中的广泛深入,以VisualC++.NET与ObjectARX相结合的开发方法对AutoCAD进行二次开发,极大地提高了开发效率,特别是在对图形数据的处理上,AutoCAD提供了强大的数据管理平台。
参考文献
[1]李长勋.AutoCADObjectARX程序开发技术[M].北京:国际工业出版社,2005.
[2]陈元琰,邓宗明.VisualC++6.0编程实用技术与案例[M].北京:清华大学出版社,2001.
[3]朱学军,赖惠芬.基于MFC的ObjectARX应用程序开发[J].微机发展,2003.
[4]张英杰.基于ARX与MFC的AutoCAD2006应用程序开发[Z].机械工程师,2007.9.
[5]刘英璐.ObjectARX与MFC相结合进行AutoCAD二次开发[Z].煤炭技术,2007.1