何安静
(中铁二院(成都)建设发展有限责任公司,四川 成都 610031)
土木工程专业工程师大都基于计算机辅助绘图工具开展设计工作,平面图纸即为设计成果。目前,国内辅助绘图工具多基于AutoCAD平台开发了相应的图纸快速生成扩展功能,提高了绘图效率,但一般都缺少可准确统计工程量功能,或只能利用外部工具进行统计计算。ObjectARX是AutoDesk公司针对AutoCAD平台上的二次开发而推出的一个开发软件包,它提供了以C++为基础的面向对象的开发环境及应用程序接口。本文充分基于AcDbObject类的基本特性,扩展出AutoCAD图形数据库快速访问修改功能,研究设计绘图过程中的工程量自动统计方法。
铁路站场土石方量统计是站场设计中最重要的工作内容之一,传统工作方法设计者需一边量测不同类型的土石方量一边做记录,最后填入Excel表并计算得到结果。由于全部采用人工操作,工作效率低、出错率较高,在设计任务繁重,在设计人员有限的情况下,往往还要配备专门的人员做土石方量统计工作。本研究定制AcDbObject的派生类,使设计者在框算土石方的同时,记录不同类型挖方和填方数据,而后输出到Excel表进行工程量统计计算。
AcDbObject类对象能够实现随图形一起保存在dwg文件中。数据成员对应相应的数据信息,函数成员对应数据处理过程。创建AcDbObject的一般步骤为。
1)利用向导创建派生于AcDbObject类的新类。
2)重载函数dwgInFields()和dwgOutFields()用于数据保存。
3)添加数据成员。
4)添加函数成员。
AcDbObject派生类要实现撤销,需在修改数据成员函数前调用assertWriteEnabled()函数,而读取数据成员的函数时又要先调用assertReadEnabled()函数。在ObjectARX中,图形自定义对象必须派生自AcDbEntity派生类,而AcDbObject派生类可以没有相应的图形实体与其相对应。使用时,AcDbEntity派生类是添加到模型空间或者图纸空间中,而AcDbObject派生类是添加到数据库的命名对象字典中。
系统将每个断面作为独立的个体,每个断面均有一个土石方类的对象与其相对应,土石方类的数据成员代表断面的各种数据信息,函数成员即为处理每个断面数据信息的过程。
系统用里程值识别不同的断面,再用两个整数表示挖方和填方类型数目,为便于数据组织,系统用数据结构中的链表形式存储不同挖方与填方类型的具体信息,包括:种类名称、线条颜色、面积等。以下是数据成员列表。
doubleLiCheng; // 里程
char*GuanHao //冠号
Adesk::Int32 nw; // 挖方种类个数
Adesk::Int32 nt; // 填方种类个数
STWFWList; //挖方链表
STWFTList; //填方链表
STWF为链表数据结构,其具体形式为:
typedef struct TWF{
char* name; //类型名称
Adesk::Int32 colour; //绘制颜色
double Area; //面积
TWF *next; //前驱指针
TWF::TWF() //初始化函数
{
name=new char[100];
colour=0;
Area=0;
next=NULL;
}
}*STWF;
函数成员是出来数据成员的过程,通过函数成员可以为每个数据成员赋值。以下是土石方类函数成员列表。
数据存储函数:
virtualAcad::ErrorStatus dwgOutFields (AcDbDwgFiler *pFiler) const ;
virtualAcad::ErrorStatus dwgInFields (AcDbDwgFiler *pFiler) ;
链表处理函数:
voidclearW(void);
voidclearT(void);
bool GetWN(int n,STWF &Wnode);
bool GetTN(int n,STWF &Tnode);
voidpush_back_W(char* name,int colour);
voidpush_back_T(char* name,int colour);
bool Read(void);
bool print(void);
链表出来函数包括了链表的清空、提取节点值、追加值、链表赋值、链表打印。由于部分数据成员被设置为公共成员,因此省去了一些函数的编写。
文件配置类代表系统常量,这些常量包括:填挖方类型名称、多段线的宽度颜色等基本信息。配置类是由AcDbObject类派生得到,因此,将此类添加到数据库的命名对象字典中即可实现随文件保存。文件配置类与土石方类较为相似,不再累述。
本系统使用VC++7.0开放平台编制而成,该平台能够非常方便地设置Excel连接端口,在类视图中右击程序名,在弹出的对话框中,选择MFC中ActiveX控件中的MFC类,然后选择从文件来源添加类,指定位置到Microsoft Office安装目录中Office12文件中的Excel.exe,在接口列表中选择_Application、Workbooks、 _Workbook、 Worksheets、 _Worksheet、Range等基本的操作类到系统中,之后对这些对象编写相应的操作程序,即可实现断面数据的输出。
为验证程序的各项功能,现以统计某路基断面土石方量为例进行说明。
1)设置配置信息。
(1)首先设计者需编辑土石方类文本文件,并将其导入当前文件中,文本文件格式为:
n1 n2挖方类个数 填方类个数
(2)编辑好文件后,使用Peizhi命令,弹出文件配置对话框,就可将其导入该文档,并设定好线路名称、车站名称、设计阶段,如图1所示。
图1 文件配置对话框
2)框选断面里程。添加断面里程,填写里程冠号,选择挖方或者填方类型,设置好统计面积站框选面积的百分比,然后用框选命令,框选其面积,即可得到相应的结果,如果多次框选,面积还会累加。
图2 土石方统计工具栏
另外,系统还设置了转化既有多边形面积、删除里程断面、数据重置三种功能。
3)文本输出。框选统计完各种类型填挖方量数据后,可以使用文本输出功能将此组数据输出到CAD文档中。
图3 文本输出图
4)导入Excel表。当一个CAD文档中的所有断面全部统计完成后,可以使用导入Excel表命令将各断面统计数据导入至标准Excel表格中,最后计算得到最终的土石方量。
表1为某站断面土石方统计表。
表1 土石方统计表
本文通过ObjectARX提供的AcDbObject派生类,解决了站场土石方计算数据随文档保存的问题,为设计者提供了多种途经和功能统计站场路基断面土石方量,并且在统计完成后一并导入Excle标准表格。该系统不但大幅提高了生产效率,而且与人工统计相比,出错率明显降低。系统操作性强,适合在生产工作中推广使用。
[ID:009135]