详细剖析了CAD的图形交换格式———DXF文件的结构,分析了SVG文件的框架元素和图形元素,建立了CAD中的对象、DXF文件中的实体和SVG中的元素三者之间的对应表,并对转换中遇到的难点问题提出了解决方案,最后,通过编程实现验证了方法的可行性。来源:SVG中国(ChinaSVG.COM) [SVG中国专题文章]
目前CAD技术已广泛应用于建筑设计、机械设计、城市规划、交通等领域,由其主流软件AutoCAD或在之基础上二次开发的软件生成的图纸层出不穷。SVG(Scalable Vector Graphics,可缩放的矢量图形)基于XML标准,既具有开放性,文件较小,显示放缩不损失质量等优点,又有强大的动画交互功能和丰富的滤镜效果。尽管现在已有一些SVG图形的生成工具,但为了充分共享已有的CAD文件,使之能运用于WebGIS或图形发布,因此有必要探讨将CAD文件有效地转换为SVG文件的问题。
AutoCAD的主要图形格式为DWG文件和DXF文件,AutoCAD公司直今未公开DWG文件格式,如要直接读取DWG文件,就需要分析其二进制数据,破译其格式,这种工作相对很困难。另一种方法是利用AutoCAD的二次开发技术,使用如ADS、ObjectARX、VBA、Visual Lisp等开发语言直接访问AutoCAD提供的一组ActiveX接口,获取图形文件中各个图形对象的有用信息,然后使用SVG中相应的元素来描述这些图形对象。但这种方法不能完全脱离AutoCAD平台,应用不够灵活。现在国外对DWG格式的研究也有很多,较为著名的是OpenDWG协会的ODT软件包,该软件包为直接操作DWG文件提供了丰富的函数。但要利用此软件包必须是会员,并且需要缴费,在非盈利条件下可以免费使用。DXF是AutoCAD提供的图形交换格式,它以ASCII码格式存储文件,可以用记事本编辑,简单易读,应用广泛。DXF在表现图形的大小方面十分精确,本文主要探讨了DXF文件转换到SVG文件的一系列问题。
DXF格式是标记AutoCAD图形文件中所包含的全部信息的一种表示方法,最小组成单位是组,每组占两行,第一行是组码,是一个整数,表明了其后数据元素的类型,也指出了数据元素对于给定对象(或记录)类型的含意;第二行是组值,数据类型根据组码的数值可以是字符串型、整型或浮点数型等。一个DXF文件分为七个区域(如图1),每个区域均由多个组组成。每个区域都是以组码0开始,其后跟随着字符串SECTION,接着是组码2和表示区域名称的字符串(例如HEADER),当出现组码0,其后跟随字符串ENDSEC时表示该区域结束。所有区域都结束后,在DXF文件的最后是组码0,后跟组值为字符串EOF作为文件的结束标志。图2是DXF文件中的HEADER区域。一个DXF文件可以只包含七个区域中的若干个区域,而不是全部区域。七个区域中,最重要的是ENTITIES区域。一个最简单的DXF文件可以只包含ENTITIES区域,而不需要包含其他任何区域,这样就大大降低了DXF文件编写的难度。
HEADER区域CLASSES区域
TABLES区域
BLOCKS区域
ENTITIES区域
OBJECTS区域
THUMBNAIL IMAGE区域
表1 DXF文件的组织结构
0
SECTION
2
HEADER
HEADER区域的开始9
$<变量>
<组码>
<值> 重复每一头部变量
0
ENDSEC HEADER区域结束
表2 DXF文件中的HEADER区域
DXF文件完整的组织结构说明如下:
HEADER区域:包含图形的基本信息,由一个AutoCAD数据库版本号和许多系统变量组成。
CLASSES区域:包含有关应用程序定义类的信息,这些类的实例包含在BLOCKS区域、ENTITIES区域和OBJECTS区域的数据库中。
TABLES区域:包含一系列符号表的定义。这些符号表包括:APP ID(应用程序标识表) 、BLOCK_RECORD (块引用表) 、DIMSTYLE (标注样式表) 、LAYER (图层表) 、LTYPE (线型表) 、STYLE (文本样式表) 、UCS(用户坐标系表) 、VIEW (视图表)和VPORT(视口配置表) 。
BLOCKS区域:包括块定义和组成图形中每个块引用的图形图元。
ENTITIES区域:包含图形中的所有图形对象(包括点、线、面、插入块,注记文字等实体) ,其中包括块引用。
OBJECTS区域:包含图形中的非图形对象。
THUMBNAIL IMAGE区域:包含图形中的预览图像。
2 SVG文件的结构分析 SVG矢量图形具有很多优点,与目前网络流行的点阵图
像格式GIF和JPEG相比, SVG能任意对图形显示进行放缩
而保证图像质量,不会出现点阵图常见的锯齿边缘,文件容量相对较小,存储效率高,下载速度快;与矢量动画软件Flash制作的图形相比,也具有一些优势,比如Flash的文件仅能用Flash软件编辑,不利于文档的更改和维护,而SVG图形能用任意的文本编辑工具编辑; Flash的文件与通用的标准技术间缺乏互操作性,如缺乏与HTML 页面或CSS表单互动的机制,而SVG能嵌入到HTML 页面中,支持事件编程,能通过XSL或CSS的方法添加各种样式等。
SVG是XML的扩展,在语法和格式上是XML 规范的一部分,但不属于XML 所能解释的范畴。SVG文档区分大小
写,具有XML的基本属性 :
所有的标记都有开始标记和结束标记,否则必须注明为空标记。空标记用反斜杠结束,如< line / >。
标记必须正确嵌套。如果一个标记在另一个标记中开始,那么它也必须在那个标记中结束。
文档必须只有一个根。一个< svg > < / svg > 元素包含了一个SVG文档的所有内容。
文档应该以XML 声明< ? xml version = ”1. 0”? >开始。
文档应该包含一个DOCTYPE声明, 该声明指向一个允许元素的列表。
SVG 1. 0 文档的DOCTYPE声明是:
<?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTDSVG1.0//EN"" ">
<svg xmlns="http://www.w3.org/2000/svg">
</svg>