对DWG文件解析的研究报告
关于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小时内删除。