关于DWG文件解析的研究报告(初稿)
(张玄德)
经过对DWG文件的资料整理和对华天软件周云鹏经理的咨询,Autodesk公司一直没有公开DWG文件的存储格式,去年华天软件也开始着手解析该文件,以前一直采用第三方的组件实现。他们采用的是通过ODA数据交换平台对DWG的文件格式进行解析(见图1)。
图1
通过对比分析,目前主流的对DWG文件解析的手段有6种。分别是:
(1)采用AutoLisp和Visual Lisp进行二次开发。这种方式有点是集成性好,缺点是无法摆脱CAD运行环境。
(2)采用ADS/ObjectARX实现DWG文件的解析。 ADS/ObjectARX是一个用C语言访问的DWG文件的开发工具,ObjectARX是一个基于C++的类库,而且AutoCAD本身也是ObjectARX创建的CAD软件系统,因此可以采用ObjectARX对DWG文件进行完全访问,但是ObjectARX只能运行在Auto CAD内核环境中。
(3)通过DXF文件解析DWG文件。DXF文件是DWG文件的一种文本形式的等价表示。但是后期通过DXF文件很难完全访问DWG文件的内在信息。
(4)通过COM/ActiveX方式实现对DWG文件的解析。该种方式的进程透明性和位置透明性为不同应用程序进程之间通过网络进行数据通信提供了一种良好的机制,实现双接口的组件既能保证强类型语言应用程序的高效率。这种方式的缺点是应用程序作为客户端无法独立于AutoCAD这个ActiveX服务器单独运行。
(5)采用ObjectDBX方式实现。由于AutoCAD所提供的四种访问DWG文件的方法都无法脱离CAD运行平台独立运行。ObjectDBX是一套基于C++的类库。与ObjectARX不同的是ObjectDBX不在依赖AutoCAD平台。只限制于Windows平台和VisioC++开发工具。
(6)采用OpenDwg Toolkit实现对DWG文件的解析。由于ObjectDBX应用程序只能在Windows平台上采用Visual C++来开发,而网络应用开发环境要比AutoCAD单个软件运行的环境要复杂的多。OpenDwg Toolkit简称ODT。除了其跨平台优势外,对开发者而言ODT不仅是免费的,不需要OpenDBX比较昂贵的授权费用。
AutoCAD软件是我国目前最流行的微机软件包之一,DWG文件为Auto Desk公司推出的图形格式文件,可以理解成由点、线、面等构成的图形数据库。其复杂性主要来自由对象的多样性及属性的复杂性。比如图形、线形、样式的关联。一个DWG图纸文件由图纸信息和各种图元对象组成。分为无图形表示类和有图形表示类。有图形表示类对象以块表方式存放;无图形表示类包括图层、线形。DWG文件内容可以分为四个部分:(一)索引部;(二)标题部;(三)实体部;(四)名表部。
(一)索引部
索引部主要是由Auto CAD的版本信息及各部的首地址、各分表的首地址、长度及个数等信息构成,从DWG文件中的#0000-#0050H。
#00-#13 Char*20 AutoCAD版本信息
#14-#17 int *4 实体部首址
#18-#1F int *4 名表部首址
#1C-#1F int *4 图块定义首址
#20-#23 int *4 图块定义长度
#24-#27 int *4 文件总长度
#28-#2B int *4 常数
1、图块描述段:
#2C-#2D int *2 图块名长度(25H)
#2E-#2F int *2 图块个数
#30-#31 int *2 标识数
#32-#35 int *2 图块名表首址
2、层描述段:
#36-#37 int *2 层名长度(25H)
#38-#39 int *2 层的个数
#3A-#3B int *2 标识数
#3C-#3F int *2 层名表首址
3、字型描述段:
#40-#41 int *2 字型名长度(C2H)
#42-#43 int *2 字型个数
#44-#45 int *2 标识数
#46-#49 int *2 字型名表首址
4、线形描述段:
#4A-#4B int *2 线型名长度(BBH)
#4C-#4D int *2 线型个数
#4E-#4F int *2 标识数
#50-#53 int *4 线型名表首址
5、视图描述段:
#54-#55 int *2 视图名长度(5BH)
#56-#57 int *2 视图个数
#58-#59 int *2 标识数
#5A-#5D int *4 视图名表首址
6、各个地址间的关系:
实体部首址=索引部长度+标题部长度
表部首址=实体部首址+实体部总长度
块实体首址=表部首址+表部总长度
文件总长度=块实体首址+块实体部总长度
(二)环境部
该部给出了系统变量,属性设置及当前状态等信息,它位于DWG文件的#005E-#03EEH。
存的部首 #05E-#075 INSBASE real*24
#076-#077 实体个数 int *2
#078-#08F EXTININ real*24
#090-#0A7 EXTMAX real*24
#0A8-#0B7 LIMMIN real*16
#0B8-#0C7 LIMMIX real*16
#0C8-#0DF VIEWCTR real*24
#0E0-#0E7 VIEWSIZE real*8
#0E8-#0E9 SNAPNODE int*2
#0EA-#0F9 SNAPUNIT int*16
#0FA-#109 SNAPBASE real*16
#10A-#111 SNAPANC int *8
#112-#113 SNAPSTYL int *2
#114-#115 SNAPISOPAIR int *2
#116-#117 GRIDNODE int *2
#118-#127 GRIDUNIT int *2
#128-#129 ORTHOMODE int *2
#12A-#12B REGENNODE int *2
#12C-#12D FILEMODE int *2
#12E-#12F QTEXTMODE int *2
#130-#131 DRAGMODE int *2
#132-#139 LTSCALE int *8
#13A-#141 TEXTSIZE real*8
#142-#149 TRACEWID real*8
#14A-#14B CLAYER real*2
#14C-#163
#164-#165 LUNITS int*2
#166-#167 LUPREC int *2
#168-#169 AXISMODE int *2
#16A-#179 AXISUNIT int *16
#17A-#191 SKETCHINC real * 8
#182-#189 FILLETRAD real * 8
#18A-#18B AUNITS int *2
#18C-#18D AUPREC int *2
#18E-#18F
#190-#191 OSMODE int *2
#192-#193 ATTMODE int *2
#194-#1A2 MENU char *15
#1A3-#1AA DIMSCALE real*8
#1AB-#1B2 DIMASZ real*8
#1B3-#1BA DIMEXO real*8
#1BB-#1C2 DIMDLI real*8
#1C3-#1C4 DIMEXE real*8
#1CB-#1D2 DIMTP real*8
#1D3-#1DA DIMTN real*8
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论