APP下载

利用ObjectARX技术合并dwg文件的软件研制★

2012-08-01侯晓燕鲁先龙

山西建筑 2012年28期
关键词:D版图纸界面

侯晓燕 鲁先龙 崔 强

(中国电力科学研究院,北京 102401)

1 概述

在工程设计中,有很多相似的图,几十个甚至上百个,需要合并到一张图纸上,便于校对和出版。可是AutoCAD没有提供批量自动合并多个dwg文件的功能,只能打开要合并的dwg文件,挨个单独复制粘贴。基于上述需求,开发了一个界面友好、实用可靠、效率高的合并多个dwg文件的软件,使设计后期图纸校对和出版工作趋于简单方便、高效和智能化。

2 软件简介

2.1 软件功能

合并多个dwg文件生成图纸一览图的软件界面如图1所示。用户可以通过浏览文件对话框,批量选择电脑上的任意dwg文件,添加到图纸文件列表中。可以通过操作按钮:上移、下移、删除和清空来调整图纸文件顺序。可以设定生成图纸一览表的参数:每行文件个数、行间距及列间距,并可设置统一缩放比例或统一图纸文件高度。如果要合并的图纸文件高度相差不多,建议选择按统一比例缩放;如果文件高度相差较大,建议选择设置统一文件高度,这样合并出的图纸文件比较美观。

图1 合并多个dwg文件的软件界面

2.2 软件实例

如把6个dwg文件合并生成到一张图纸上,图纸文件高度和宽度不完全一致,设置了图纸统一高度为400 mm,行间距为25 mm,列间距为25 mm。软件根据设置的高度与图纸本身的高度,读取计算出每个图纸的缩放比例,然后将图纸按照各自不同的比例缩放。每个图纸下面标注了该文件的路径,便于用户区分。本软件性能好,可靠性高。经测试,CPU:2.4 GHZ,1 GB内存,AutoCAD 2004,合并100个dwg文件只需2 min。

3 关键技术

3.1 软件开发环境

AutoCAD开放的体系结构使其二次开发功能应用广泛,目前常用的 AutoCAD的二次开发工具有:Visual Lisp,VBA,Object-ARX。ObjectARX是一个以C++语言为基础的面向对象的开发环境和应用程序接口。它本质上是Windows动态链接库(DLL)程序,与AutoCAD共享地址空间,可以直接访问AutoCAD数据库核心数据结构和代码。ObjectARX与其他的AutoCAD二次开发工具相比,速度更快,稳定性更好,运行效率最高,代码可重用性强,而且支持MFC,能简捷高效地实现许多复杂功能。

进行ObjectARX开发需具备两个工具:1)与AutoCAD版本对应的ObjectARX开发包;2)与ObjectARX开发包版本对应的Visual C++版本作为开发工具。本软件为了达到最大兼容性,编程环境为:ObjectARX 2002,VC6.0,支持 AutoCAD 2002。为了兼容更高版本的AutoCAD,需要将代码在其他环境下编译,编译环境见表1。这样可以实现软件兼容 AutoCAD 2002,AutoCAD 2004,AutoCAD 2005,AutoCAD 2006,AutoCAD 2007,AutoCAD 2008,AutoCAD 2009,AutoCAD 2010共8个版本。

表1 软件编译环境

3.2 设置AutoCAD版本

用户需先设置AutoCAD的版本和路径后,才能生成施工图。可以点击图1界面下方的“设置AutoCAD版本”按钮,会弹出设置AutoCAD版本和路径的窗体,如图2所示。

图2 设置AutoCAD版本界面

用户选择版本和路径后,点击图3中“确定”按钮,程序内部处理流程如图3所示,图中的数字代表处理顺序。软件会重写acad.rx和生成fpCAD.lnk文件。acad.rx文件记录了AutoCAD打开时执行的ARX文件,AutoCAD每次打开时都会读取acad.rx文件,执行绘图命令。fpCAD.lnk文件是AutoCAD的快捷方式,指定了起始位置和目标可执行文件,起始位置为当前程序的安装路径,目标可执行文件为用户指定的AutoCAD可执行文件。使用快捷方式可从当前路径下打开AutoCAD,AutoCAD打开时会读取当前路径下的acad.rx,然后执行acad.rx文件中指定的ARX文件。最后ARX文件操作AutoCAD执行绘图命令,生成施工图。

图3 设计AutoCAD版本流程

3.3 程序处理流程

用户点击“生成图纸一览表”按钮之后,程序的处理流程如图4所示。首先保存用户在界面上输入的信息,并修改acad.rx文件,此文件记录了AutoCAD打开时执行的ARX程序。接着,打开AutoCAD,读取 acad.rx,加载ARX程序。ARX程序从入口函数acrxEntryPoint()进入,执行创建的绘图命令。该命令根据读取的用户在界面上输入的信息,循环计算图纸文件的插入位置及缩放比例,接着将文件打开、制作成块、将块插入。最后保存合并生成的施工图。

图4 程序处理流程

3.4 核心代码

本软件的难点是在要合并生成的图纸上插入dwg文件。本软件的处理方法是:打开dwg文件、将其作为块插入、关闭dwg文件。本小节给出了部分核心代码。

3.4.1 打开 dwg文件

打开dwg文件需新建一个空的数据库对象。因为AutoCAD的向下兼容性,AutoCAD低版本打不开高版本的dwg文件,所以需判断是否能打开。

AcDbDatabase*pDwg=new AcDbDatabase

(Adesk::kFalse);

if(Acad::eOk!=pDwg->readDwgFile(blkName))

{acedAlert(_T("图纸文件:")+blkName+_T("无法打开!"));

delete pDwg;

return;}

3.4.2 获取文件图形范围

需获取已打开的图纸文件的高度和宽度,可通过读取左下角坐标和右上角坐标来实现,代码如下:pDwg->updateExt(TRUE);pointleft=pDwg->extmin();pointright=pDwg->extmax();

3.4.3 制作块

本程序将dwg文件做成块时,统一将坐标(0,0,0)作为基点,代码如下:

AcDbObjectId blockId;

Acad::ErrorStatus es = acdbHostApplicationServices()->workingDatabase()-> insert(blockId,blkName+"name",pDwg,Adesk::kFalse);

3.4.4 设置插入块

首先实例AcDbBlockReference对象,然后设置插入块的缩放比例、插入位置和旋转角度。

AcDbBlockReference*pBlkRef=new AcDbBlockReference();

pBlkRef->setBlockTableRecord(blockId);

pBlkRef-> setScaleFactors(AcGeScale3d(s,s,1));

pBlkRef-> setPosition(AcGePoint3d(pt[X]-pointleft.x*s,pt[Y]-pointleft.y*s,0.0))

pBlkRef-> setRotation(0.0);

3.4.5 分解块

分解块便于用户对块内的每个实体根据需要进行修改。ObjectARX提供了AcDbVoidPtrArray指针数组,可以将分解后的块中的所有实体添加到此数组中,然后逐个访问这一集合中所有的实体并添加到块表记录中。

AcDbEntity*pEnt=NULL;

AcDbVoidPtrArray entitySet;

es=pBlkRef->explode(entitySet);

AcDbEntity* ent;

for(int i=0;i< entitySet.length();i++)

{ent=(AcDbEntity*)entitySet.at(i);

AppendEntity(ent);}

4 结语

根据设计工作实际需求,利用ObjectARX技术编制了此软件。实现了自定义设置间距、图纸高度、图纸的比例等,不但使合并生成的图纸整齐美观满足出版需求,而且可以根据不同的需求灵活排列。满足了设计过程中审图时打印缩略图纸的需要,使大幅面绘图仪的效率成倍提高,纸张的利用率也提高了很多。该软件可广泛应用于电力、机械、水利、建筑等工程设计领域,实用性较强。可在Windows XP及以上操作系统使用,可移植性高,并兼容AutoCAD 2002~2010共8个版本。

[1] 于萧榕.基于ObjectARX的标牌曲线文字绘制的研究[J].现代电子技术,2011,34(18):26-28.

[2] 陈海霞,高广德.基于ObjectARX和Visual C++开发工具的格栅参数化设计[J].三峡大学学报,2006,28(1):61-64.

[3] 罗仕庭,漆泰岳,王伟峰.基于ObjectARX的公路隧道衬砌结构计算[J].四川建筑,2008,28(2):42-44.

[4] 马万杰,夏国栋,姜 昆,等.基于ObjectARX的AutoCAD塑料模标准件系统的研究与实现[J].模具技术,2009(2):37-39.

[5] 刘喜平.基于ObjectARX的粗糙度自动标注系统[J].吉林建筑工程学院学报,2011,28(4):64-67.

猜你喜欢

D版图纸界面
浅谈汽车线束产品图纸管理
国企党委前置研究的“四个界面”
看图纸
钓鱼
基于FANUC PICTURE的虚拟轴坐标显示界面开发方法研究
3D版本参上 《变形金刚5:最后的骑士》将发售4K UHD蓝光和3D蓝光
人机交互界面发展趋势研究
手机界面中图形符号的发展趋向
酒店室内装修图纸深化设计浅析
UPROAR IN HEAVEN 3D 大闹天宫3D版