责任编辑张大伟 基于DWGdirect技术的公路工程图纸文件转换 刘二洋 随着高速公路的迅猛发展,在公路设计过程中,必然会产 生并积累大量的电子图纸文件,它们分布在企业的不同部门、生 产环节,甚至不同的生产区域。如何有效管理和利用这些电子图 纸,使信息能够在更大范围内快速、安全地进行传输、共享和管 理,是目前公路行业亟待解决的问题。 公路工程设计图档管理系统是面向勘察设计过程、设计成果 管理的平台,通过科学化、规范化、网络化的管理,实现公路行 业基础数据资源的“共享”,从而为公路工程设计、管理、养护 等相关部门提供基础资源。电子文件的归档存储是其重要的组成 部分,在这个过程中,由于图纸文件格式的复杂性、多样性,造 成文件的安全『生差、共享利用不方便、内容不一致等,因此需采 用统一的文件存储格式来进行管理。 PDF格式文件采用工业标准的压缩算法,易于传输与海量存 储,是理想的文件管理格式。本文主要介绍了利用DWGdirect技 术,把DwG文件按照设计图纸文件的标准图幅大小,自动拆分, 并转换生成PDF文件,归档到图档管理系统中。 DWGdirect技术介绍 一、DWG文件的读写 DWG文件格式是Autodesk公司的私有格式,一直都未公 开,独立开发接口程序存在相当的难度。而且随着AutoCAD升 级,DWG文件或多或少会产生相应的变化,造成读写困难。 Autodesk推荐的信息交换格式是DXF,但DXF格式存在一些问 题:l、文件尺寸大,一般DXF文件是DWG文件的2.5倍或更大;2、 DWG ̄UDXF需要额外的操作步骤,而.KDXF文件的装载保存效率远 低于DwG文件;3、AufOCAD没有提供自动保持DWG和DXF文件 一致l生功能,需要解决DXF和DWG的一致性问题。因此直接读写 DWG文件将是更有效的途径。 开放设计联盟(Open Design Alliance),是由软件开发人员和 用户组成的一个协会,致力于推动开放工业标准格式,以实现CAD 数据的广泛交换。该类库直接读取DwG文件获取数据,具有高效 率和高安全性等特点。开发人员只要对DWG文件的整体结构有 一定了解,再结合图形的特点,就可以轻松实现DWG文件的自 由读写等操作。 二、DWGdirect的类库介绍 该类库是开放设计联盟该协会引入的一套基于面向对象的全 新类库,实现支持AutoCAD ̄有版本的DWG文件。主要由以下几 个类库组成: l、OdRx类:该类用于运行时类的注册和识别; 2、OdDb类:该类表示数据库中的所有实体数据; 3、OdGi类:该类实现数据对象的渲染; 4、OdGe类:通用几何类(如点,向量等); 5、OdBr类:该类用于B—Rep; 6、Gs类:图形系统类,为客户提供矢量化界面。  ̄DWGDirect中,DwG文件在内存中由一个0dDbDalabase 类的实例表示。每个0dDbDalabase类的实例就代表一个简单 的数据库,它由9个符号表和14-对象字典组成,分别是View Table TextStyle Table Layer Talbe Line Type DimeStyle Table View2Port Table、UCS Table、RegApp Table Block Table和Object Dictionary。而每个符号表和对象字典中都包含多 条记录,例如:Block Table中包含多 ̄Block Table Record。直 线、圆弧、图块等实体的数据叉都包含在Block Table Record中。 根据数据库结构,采用相应的类函数即可方便的访问到DWG中的 实体数据等信息。该类库的数据模型如图l所示。 图1 DWGDirect类数据模型 3 I@m 131 .c基于DWGDirect技术的DWG转换PDF的步骤 该技术在脱离CAD环境下,通过后台实现对DWG文件解析计 算,自动拆分、转换生成PDF文件。该步骤的流程图如图2所示。 首先,读取DWG文件,解析得到文件中的图幅在CAD环境 下存在的空间类型(即模型空间或布局空间);其次,提取标 志性图元的坐标位置,进行排序;再次,依顺序拆分成单张图 幅文件;最后,设置参数,转换出标准图幅的PDF文件。具体步 骤如下: 搜毒② 除@ 口墨蛔 口熹 T 固蜘 l ‘_______。__・__。_______________。____________・。________。 。___。・。。____^^_・__j 拆分@ i 干 f癌) 压丽 上导出 ll .L+匝亟噩亘 二亘j口 图2 DWQ转换PDF的流程图 第一步:解析图纸空间类型,读取DWG格式的图纸文件, 提取文件中所有布局的名称,排除掉冗余布局(如布局名称为: 布局1、布局2、Layoutl、Layout2)之后,得到剩余布局的个数 N,若N)。,则判断图纸存在于布局空间,否则图纸存在于模型空 间(如图2中的①所示); 第二步:图纸排序,模型空间下的图纸文件,采用全文本搜 索每张图幅的标志性图元(如图框)的空间坐标位置。依据特定 的位置顺序(如先从上到下,后从左到右),对其进行排序(如 图(2)中的②、④所示)。布局空间下的图纸文件,采用先排 除掉冗余图幅,余下布局现存的排列顺序,即为排序的顺序(如 图(2)中的③、④)所示); 第三步:图纸拆分,在模型空间中,依次定位于每个排序 后的标志性图元的空间坐标位置,根据标准图幅的尺寸大小(如 420"297),进行拆分图纸文件。布局空间是按照上述的排列依顺 序直接进行图纸拆分(如图(2)中的⑤所示); 第四步:导出图纸,拆分后的单张图纸文件。首先,设置导 132盅冒 1.2 出PDF的参数(如PDF版本、标记、标题、编码等)和图幅页面参 数(如高度、宽度、页边距等)。然后,利用DWGdirect的图纸 转换技术,转换出所对应的PDF格式标准图幅文件(如图(2)中 fj勺⑦所示)。 DWG转换PDF算法在C 中的实现描述 在使用DWGDirect技术实现DWG文件转换PDF文件时构造了 三个新的类。其中IsModelOrPaper类中封装了读取图纸文件、判 断图纸类型等功能函数;OederAndSplif Drawing类中封装了模 型空间中全文本搜索标志性图元、图纸排序、拆分图纸和布局空 间中图纸排序、拆分图纸等功能函数。DwgC0nvercPDF类中主要 封装了DWG导出PDF文件等功能函数。下面主要介绍上节提到的 四个步骤在C 中的简单实现描述。 一、判断图纸类型 主要分以下两步: l、读取图纸文件,获得该文件DBDictionary类型的对象字典 LayoutDict; 2、遍历对象字典L a y O u t D i C t,获得字典中每个 DicflonaryEnfry类型的对象记录的Key键值,排除掉Key键值为布 局I、布局2、Layoutl、Layout2的对象记录,得到剩余对象记录 的个数LayoutCount,若LayoutCount,0,则判其为布局空间下的 图纸文件,否则为模型空间下的图纸文件。 二、图纸排序 布局空间中图纸文件,排除掉字典LayoutDict中冗余记录 后,剩余记录的排列顺序,即为导出PDF的顺序。下面主要介绍 模型空间下的图纸文件排序: l、定义三个UniteA r raYLi St、DateA r raYLi St、和 ShenHeArrayLjsf数组列表,三个二维的FilterType过滤类型(如 图元类型和名称),和三个二维的FilterData过滤数据( ̄HDbText 和“设计单位”); 2、定义三个IAcadSelecfionSef类型的选择对象,分别利用 上述定义的三个F小erType和FllferDafa,过滤出标志性图元,分 别存放到UniteArrayList、DateArrayList、和ShenHeArrayLjsf数 组列表内; 3、分别对三个数组列表中每个成员的Position值进行排序 (如可采用先对每个成员Position的Y坐标值,按照从小到大进行 排序,再对X坐标值按照从小到大进行排序),即可获得图纸文 件中每幅图纸的标志性图元的特定序列。 三、图纸拆分: 布局空间删除掉冗余布局后,按照现有的顺序,便可拆分成 责任编辑:张大伟 图3模型和布局空间转换结果 单张图纸文件。下面主要介绍模型空间中的图纸分幅: l、C0py一份该图纸文件,然后依次取出UnifeArrayLis c、 DateArrayList、和ShenHeArrayLisc三个数组列表中相互对应的三 个标志点,根据三个标志点确定一个矩形面的原理,即可确定所 对应的图幅范围; 2、获得该文件数据库DataBase的当前事务Transaction,以 ForRead的模式得到块表BlockTable,同时,获取所对应的模型 从转换结果可以看出,利用DWGDirect技术同样可以得到 AutoCAD虚拟打印机转换成pdf文件的效果。该转换模式实现对 DWG] ̄件的后台转换,可方便系统的统一管理。同时,转换出的 pdf文件内容为栅格图像,可以防止一些软件对pdf文件进行反编 辑,对设计文件起到了一定的保护作用。 在对图纸文件进行全文本搜索时,使用过滤器等功能提高了 搜索效率,但是对较大图纸文件}『勺处理速度较慢。尽管开放设计 空间下的块表记录Bl0ckTableRec0rd,并得到当前块表记录的游 标IEnumerator; 联盟将DWGDirect的版本不断的完善和更新,但是桕对AutoCAD 的最新版本仍然不可避免地存在滞后_生,而且由于开发的不系统 性导致核心的图形技术库中存在一些错误,所以我们在实现过程 3、利用当前块表记录的游标IEnumerator,遍历块表记录中 的每一个实体Entity,判断实体的的Postion值是否位于上述的图 幅范围内,超出范围,则Erase; 4、重复以上三步,依次循环拆分出单张图纸文件。 四、导出图纸 中对其中的一些算法需要进行进一步的优化。 结束语 通过分析DWGDirect的技术特点,详细介绍实现DWG文件后 模型与布局空间中导出PDF的算法一致,设置所需的一系列 参数后,转换成标准图幅页面的PDF。主要分以下三步: l、初始化P D F的公有参数,如:F l a g S、T i t l e、 EncodeStream、Versions等; 台转换pdf的步骤、算法描述和综合实验,证明了DWGDi rect技 术在公路工程图档管理系统中,对DWG图纸文件后台转换成pdf 后,实现统一管理的可行性和实用性。利用该技术,可以直接读 写DWG文件,简单方便,而且能够脱离CAD环境下X,1"DWG文件进 行读写双向操作,不需要花费大量的人力物力开发接口程序,可 以和其它格式的文件纳入到统一的管理平台下实现批量转换,方 便有效地统一组织和管理,具有较高的实用价值。蟹 参考文献 [1]AutoCAD刚3/R1 4/R2000 OwG Fi e Specification Version 2 0,Published by 2、依据标志性图元,得到图幅相对于标准图幅(如A3页 面)的放大倍数M。然后,把A3页面的长度、高度以及页边距分 别放大M倍,从而设置PDF的页面参数PageParams; 3、利用DWGDirect技术的转换函数ExportPDF(】,导出PDF; 4、销毁文件流,关闭数据库。 文件转换结果及分析 本文选取了模型和布局空间下的两张图纸(如图3中的左一 和左三所示)。通过上述的转换流程,便可得到所对应的标准图 幅页面的PDF图纸文件(如图3中的左二和左四所示)。 OpenDWfl AI Jiance[EB/0L]www openDWG org 2002年2月 [2]孙士华等基于DWGdi rect技术的图形内容全文搜索[j]精密制造与自动化,第4 期2005年(4):50—5j [3]晏韵,许超 基于DWO,Di rect访f AutoCAD口w0图形文件[J_工程图学学报,第6朝 20/0年(6)1 79-1 I 80 [4]DWG directReferenc[M],0penDWG A/Iiance,2003年4月 2w01 3 .03c 言 息.C化N 133