论文部分内容阅读
【摘要】作者开发的门式实腹刚架CAD系统(Portal Solid-web Rigid Frame and Computer Aided Design system)采用Visual C++和ObjectARX实现了自动绘制施工图功能。本文通过简单实例介绍了使用ObjectARX進行编程的详细过程。
【关键词】门式实腹刚架; AutoCAD; 二次开发; ObjectARX
0. 引言
我国于1999年颁布实施了《门式刚架轻型房屋钢结构技术规程》(ECS 102:98) [1],这为门式刚架结构在我国的普及推广奠定了坚实的技术基础,使其成为近几年发展最快的一种新型轻钢结构。门式刚架包括实腹式和格构式两种。门式实腹刚架建筑造型简洁美观,空间开阔,使用功能优越,而且可采用标准化、工厂化制作、小型机具吊装,因而劳动强度轻,施工速度快,综合施工费用低,建筑表现能力更强,具有良好的适用性和经济效应。
在作者开发的PSRFCAD中前处理部分采用了Visual C++的面向对象程序设计(Object-Oriented Programming,简称OOP);结构内力计算采用的是用C++语言编写的平面杆系有限元分析程序;而后处理的自动图形绘制部分采用AutoCAD的二次开发工具ObjectARX。
本文将就PSRFCAD的模块组成及各部分功能进行简单说明,并举例着重介绍如何利用MFC对话框和ObjectARX在AutoCAD中自动绘制图形。
1. PSRFCAD模块组成及功能
随着计算机硬件技术的发展和建筑结构分析理论的日臻完善,计算机辅助设计(CAD)系统在建筑
设计领域得到越来越广泛的应用。CAD软件作为辅助设计人员完成设计工作的工具,要求软件的每一个功能细节都要受到用户的欢迎。例如数据输入要尽可能少;人机交互界面要友好,操作要方便,高度的自动化和人工干预要有机结合;计算准确;便于查阅及理解等。一个完整的计算机辅助设计系统应包括三大部分:前处理部分、计算分析部分、后处理部分,如图1所示。
1.1 前处理模块及其功能
前处理部分需要收集有关有限元计算和后处理施工图绘制所需的大量数据信息,主要有:平面数据、立面数据、截面数据、材料信息、荷载信息。
本系统的前处理利用MFC编写各种对话框输入的形式,得到计算所需的数据文件。在程序的运行过程中,对话框可用来捕捉用户的输入信息和数据,达到管理数据并与用户交换信息的目的。
1.2 结构计算模块及其功能
结构内力计算部分采用的是用C++语言编写的平面杆系有限元分析程序,适用于计算平面刚架和平面框架。C++语言充分支持面向对象的编程技术,可以直接访问内存地址、能进行位操作、生成的目标代码质量高、程序运行效率高、可移植性好[2]。面向对象程序设计的实现需要封装和数据隐藏技术,需要继承和多态性技术。
规范检验部分按现行《钢结构设计规范》(GBJ17-88)和《门式刚架轻型房屋钢结构技术规程》(CECS 102:98) [3]进行。
1.3 后处理模块及其功能
后处理部分包括两大部分,一部分是在系统所在的窗口中进行结果显示,包括结构的位移、内力和应力比的显示,以图形的方式来检查结果的对错;另一部分是利用AutoCAD的二次开发工具ObjectARX进行自动施工图绘制。
2. ObjectARX应用
2.1 AutoCAD二次开发工具简述
AutoCAD是目前国内外应用最广泛、使用人数最多的CAD软件。AutoCAD系统提供了一系列二次开发环境和工具,如AutoLISP、ADS(AutoCAD Development System)、ARX(AutoCAD Runtime Extension)、VBA(Visual Basic for Application)、Visual LISP、ObjectARX等[4],本系统采用AutoCAD进行二次开发的最强有力的开发工具ObjectARX:用于开发AutoCAD的ObjectARX目前支持Microsoft Visual C++编译器。ObjectARX的类库由以下AcRx、AcEd、AcGi、AcDb、AcGe五个类库组成。AcRx库提供了一些系统类,用于DLL的初始化和链接及运行时类的注册和标识;AcEd库提供定义和注册新的AutoCAD命令的类,新命令的操作性能与AutoCAD内部命令是完全一样的;AcGi库提供了用于绘制AutoCAD实体的图形界面;AcDb库提供了组成AutoCAD数据库的类;AcGe库提供了公用线性代数和几何学对象应用类。
2.2 ObjectARX 应用实例
ObjectARX应用程序是共享AutoCAD的地址空间、对AutoCAD 进行直接函数调用的一个DLL(动态连接库),其程序的入口是acrxEntryPoint函数(与一般的main函数不同);MFC(Microsoft Foundation Class Library)是Windows环境下编程的一个应用程序框架,提供了许多必须的代码用于管理窗口、选单和对话框,完成基本的输入/输出,存储数据对象等。
下面介绍PSRFCAD中使用Visual C++和ObjectARX 进行二次开发的工程实例。
(1) 建立工程项目
启动Visual C++,从File下拉菜单中选中New选项(用File/New表示),弹出New对话框;点击Projects标签,选择ObjectARX AppWizard 项,在Project name编辑框中输入项目名(本例是DRAWSTEEL),Location项可以选择文件路径,点OK按钮进入下一步;在Step 1 of 1对话框中,在Your Registered Developer(注册开发商前缀)编辑框中填入DUT,选中Use MFC复选框,其他选项保持不变,单击Finish按钮进入下一步;在New Project Information对话框中单击OK按钮。
(2)创建对话框资源和相应的类框架
从Insert/Resource打开Resource对话框,在Resource type中选择Dialog,点击New按钮,建立和编辑ID为IDD_DIALOG1的对话框;设置对话框如图2:
选择菜单View/Class Wizard,在Adding a Class对话框中确保选择了Create a new class,单击OK按钮;在New class对话框中,在Name编辑框中填入CSteelDlg,单击OK按钮;在MFC ClassWizard对话框中选择Member Variables标签,给8个编辑框依次设置double型成员变量:m_editL,m_editH1,m_editH2,m_edita,m_editb,m_editS1,m_editS2。
(3)利用ObjectARX 嵌入工具[5]定义新命令
点击ObjectARX嵌入工具条上的 按钮,弹出ObjectARX Defined Commands对话框,在Group(组名)编辑框里输入DUT;在International(国际名)编辑框里输入STEEL;在Local(本地名)编辑框里输入STEEL(可以与国际名不同,且可以用中文)。单击Add按钮,然后单击Edit Code按钮,进入DRAWSTEELCommands.cpp文件中,进行编码。其部分代码如下:
void dutsteel(){
CSteelDlg dlg;
if(dlg.DoModal()==IDOK){
createNewlayer("轴线",1,"CENTER");
createNewlayer("标注",2,"CONTINUE");
createNewlayer("钢筋",7,"CONTINUE");//构造图层
…
AcGePoint3d basept,startpt,endpt;
startpt.set(-1500,0,0);//以总平面左下脚为坐标原点
endpt.set(prj_projectDB.sfdb_plane.Span*5+600,0,0);//调用前处理数据
createLine(startpt,endpt,"轴线",500);//画轴线
… startpt.set(prj_projectDB.sfdb_plane.Span*5+5000-prj_projectDB.sfdb_face.Zhua/2,
-prj_projectDB.sfdb_face.HeightH1,0);
endpt.set(prj_projectDB.sfdb_plane.Span*5+5000-prj_projectDB.sfdb_face.Zhua/2,
prj_projectDB.sfdb_face.Liangs1/2/C,0);
createLine(startpt,endpt,"钢筋",1);//画刚架
…
startpt.set(prj_projectDB.sfdb_plane.Span*5+5000-600, 0,0); endpt.set(prj_projectDB.sfdb_plane.Span*5+5000-600,prj_projectDB.sfdb_face.HeightH2,0);
dimpt=Arx_polar(startpt,PI,600);
createAlignedDim(startpt,endpt,dimpt,DimId); //标注尺寸
…
acedCommand(RTSTR,"ZOOM",RTSTR,"Extents",RTNONE);//显示全图
}}
在DRAWSTEELCommands源文件中还应包括头文件 "resource.h"、"ARXDlg.h" 和 "dbents.h",现在可以进行编译、连接。启动AutoCAD,Tools/Load Application,找到dutsteel.arx文件,点击Load按钮,然后在AutoCAD Command:提示符下输入steel即可弹出如图2所示对话框,输入數据后,执行结果如图3所示。
3. 结束语
ObjectARX提供了ObjectARX 向导和嵌入工具条,比以往的ARX能更充分调用Visual
C++的资源和发挥面向对象的编程思想,因此在开发建筑结构CAD系统上,占有很大的优势。
注:文章内所涉及的公式和图表请用PDF格式打开
【关键词】门式实腹刚架; AutoCAD; 二次开发; ObjectARX
0. 引言
我国于1999年颁布实施了《门式刚架轻型房屋钢结构技术规程》(ECS 102:98) [1],这为门式刚架结构在我国的普及推广奠定了坚实的技术基础,使其成为近几年发展最快的一种新型轻钢结构。门式刚架包括实腹式和格构式两种。门式实腹刚架建筑造型简洁美观,空间开阔,使用功能优越,而且可采用标准化、工厂化制作、小型机具吊装,因而劳动强度轻,施工速度快,综合施工费用低,建筑表现能力更强,具有良好的适用性和经济效应。
在作者开发的PSRFCAD中前处理部分采用了Visual C++的面向对象程序设计(Object-Oriented Programming,简称OOP);结构内力计算采用的是用C++语言编写的平面杆系有限元分析程序;而后处理的自动图形绘制部分采用AutoCAD的二次开发工具ObjectARX。
本文将就PSRFCAD的模块组成及各部分功能进行简单说明,并举例着重介绍如何利用MFC对话框和ObjectARX在AutoCAD中自动绘制图形。
1. PSRFCAD模块组成及功能
随着计算机硬件技术的发展和建筑结构分析理论的日臻完善,计算机辅助设计(CAD)系统在建筑
设计领域得到越来越广泛的应用。CAD软件作为辅助设计人员完成设计工作的工具,要求软件的每一个功能细节都要受到用户的欢迎。例如数据输入要尽可能少;人机交互界面要友好,操作要方便,高度的自动化和人工干预要有机结合;计算准确;便于查阅及理解等。一个完整的计算机辅助设计系统应包括三大部分:前处理部分、计算分析部分、后处理部分,如图1所示。
1.1 前处理模块及其功能
前处理部分需要收集有关有限元计算和后处理施工图绘制所需的大量数据信息,主要有:平面数据、立面数据、截面数据、材料信息、荷载信息。
本系统的前处理利用MFC编写各种对话框输入的形式,得到计算所需的数据文件。在程序的运行过程中,对话框可用来捕捉用户的输入信息和数据,达到管理数据并与用户交换信息的目的。
1.2 结构计算模块及其功能
结构内力计算部分采用的是用C++语言编写的平面杆系有限元分析程序,适用于计算平面刚架和平面框架。C++语言充分支持面向对象的编程技术,可以直接访问内存地址、能进行位操作、生成的目标代码质量高、程序运行效率高、可移植性好[2]。面向对象程序设计的实现需要封装和数据隐藏技术,需要继承和多态性技术。
规范检验部分按现行《钢结构设计规范》(GBJ17-88)和《门式刚架轻型房屋钢结构技术规程》(CECS 102:98) [3]进行。
1.3 后处理模块及其功能
后处理部分包括两大部分,一部分是在系统所在的窗口中进行结果显示,包括结构的位移、内力和应力比的显示,以图形的方式来检查结果的对错;另一部分是利用AutoCAD的二次开发工具ObjectARX进行自动施工图绘制。
2. ObjectARX应用
2.1 AutoCAD二次开发工具简述
AutoCAD是目前国内外应用最广泛、使用人数最多的CAD软件。AutoCAD系统提供了一系列二次开发环境和工具,如AutoLISP、ADS(AutoCAD Development System)、ARX(AutoCAD Runtime Extension)、VBA(Visual Basic for Application)、Visual LISP、ObjectARX等[4],本系统采用AutoCAD进行二次开发的最强有力的开发工具ObjectARX:用于开发AutoCAD的ObjectARX目前支持Microsoft Visual C++编译器。ObjectARX的类库由以下AcRx、AcEd、AcGi、AcDb、AcGe五个类库组成。AcRx库提供了一些系统类,用于DLL的初始化和链接及运行时类的注册和标识;AcEd库提供定义和注册新的AutoCAD命令的类,新命令的操作性能与AutoCAD内部命令是完全一样的;AcGi库提供了用于绘制AutoCAD实体的图形界面;AcDb库提供了组成AutoCAD数据库的类;AcGe库提供了公用线性代数和几何学对象应用类。
2.2 ObjectARX 应用实例
ObjectARX应用程序是共享AutoCAD的地址空间、对AutoCAD 进行直接函数调用的一个DLL(动态连接库),其程序的入口是acrxEntryPoint函数(与一般的main函数不同);MFC(Microsoft Foundation Class Library)是Windows环境下编程的一个应用程序框架,提供了许多必须的代码用于管理窗口、选单和对话框,完成基本的输入/输出,存储数据对象等。
下面介绍PSRFCAD中使用Visual C++和ObjectARX 进行二次开发的工程实例。
(1) 建立工程项目
启动Visual C++,从File下拉菜单中选中New选项(用File/New表示),弹出New对话框;点击Projects标签,选择ObjectARX AppWizard 项,在Project name编辑框中输入项目名(本例是DRAWSTEEL),Location项可以选择文件路径,点OK按钮进入下一步;在Step 1 of 1对话框中,在Your Registered Developer(注册开发商前缀)编辑框中填入DUT,选中Use MFC复选框,其他选项保持不变,单击Finish按钮进入下一步;在New Project Information对话框中单击OK按钮。
(2)创建对话框资源和相应的类框架
从Insert/Resource打开Resource对话框,在Resource type中选择Dialog,点击New按钮,建立和编辑ID为IDD_DIALOG1的对话框;设置对话框如图2:
选择菜单View/Class Wizard,在Adding a Class对话框中确保选择了Create a new class,单击OK按钮;在New class对话框中,在Name编辑框中填入CSteelDlg,单击OK按钮;在MFC ClassWizard对话框中选择Member Variables标签,给8个编辑框依次设置double型成员变量:m_editL,m_editH1,m_editH2,m_edita,m_editb,m_editS1,m_editS2。
(3)利用ObjectARX 嵌入工具[5]定义新命令
点击ObjectARX嵌入工具条上的 按钮,弹出ObjectARX Defined Commands对话框,在Group(组名)编辑框里输入DUT;在International(国际名)编辑框里输入STEEL;在Local(本地名)编辑框里输入STEEL(可以与国际名不同,且可以用中文)。单击Add按钮,然后单击Edit Code按钮,进入DRAWSTEELCommands.cpp文件中,进行编码。其部分代码如下:
void dutsteel(){
CSteelDlg dlg;
if(dlg.DoModal()==IDOK){
createNewlayer("轴线",1,"CENTER");
createNewlayer("标注",2,"CONTINUE");
createNewlayer("钢筋",7,"CONTINUE");//构造图层
…
AcGePoint3d basept,startpt,endpt;
startpt.set(-1500,0,0);//以总平面左下脚为坐标原点
endpt.set(prj_projectDB.sfdb_plane.Span*5+600,0,0);//调用前处理数据
createLine(startpt,endpt,"轴线",500);//画轴线
… startpt.set(prj_projectDB.sfdb_plane.Span*5+5000-prj_projectDB.sfdb_face.Zhua/2,
-prj_projectDB.sfdb_face.HeightH1,0);
endpt.set(prj_projectDB.sfdb_plane.Span*5+5000-prj_projectDB.sfdb_face.Zhua/2,
prj_projectDB.sfdb_face.Liangs1/2/C,0);
createLine(startpt,endpt,"钢筋",1);//画刚架
…
startpt.set(prj_projectDB.sfdb_plane.Span*5+5000-600, 0,0); endpt.set(prj_projectDB.sfdb_plane.Span*5+5000-600,prj_projectDB.sfdb_face.HeightH2,0);
dimpt=Arx_polar(startpt,PI,600);
createAlignedDim(startpt,endpt,dimpt,DimId); //标注尺寸
…
acedCommand(RTSTR,"ZOOM",RTSTR,"Extents",RTNONE);//显示全图
}}
在DRAWSTEELCommands源文件中还应包括头文件 "resource.h"、"ARXDlg.h" 和 "dbents.h",现在可以进行编译、连接。启动AutoCAD,Tools/Load Application,找到dutsteel.arx文件,点击Load按钮,然后在AutoCAD Command:提示符下输入steel即可弹出如图2所示对话框,输入數据后,执行结果如图3所示。
3. 结束语
ObjectARX提供了ObjectARX 向导和嵌入工具条,比以往的ARX能更充分调用Visual
C++的资源和发挥面向对象的编程思想,因此在开发建筑结构CAD系统上,占有很大的优势。
注:文章内所涉及的公式和图表请用PDF格式打开