APP下载

DXF到SVG图元转换关键问题分析

2010-08-28辉,刘星,郑

天津工业大学学报 2010年4期
关键词:正点图元矢量

刘 辉,刘 星,郑 静

(东北大学 信息科学与工程学院,辽宁 沈阳 110819)

DXF到SVG图元转换关键问题分析

刘 辉,刘 星,郑 静

(东北大学 信息科学与工程学院,辽宁 沈阳 110819)

为了实现矿图的重新发布,通过分析AutoCAD数据格式(DXF文件)和SVG格式标准,建立DXF文件中的实体和SVG中的元素之间的对应关系.详细分析了关键的复杂图元对象(文字,多线)以及非图元对象(坐标系,颜色)到SVG的转换,以便更方便地运用到WebGIS的矿图发布.编程测试证明,重新发布的矿图与原图基本相同.

DXF;图元;SVG

DXF文件是AUTODESK公司提出的一种专用的CAD数据交换格式,是一种具有专门格式的ASCII码文本文件,比较好读,易于被其它程序处理,主要用于实现高级语言编写的程序与AutoCAD系统的连接,或其它CAD系统与AutoCAD之间的图形文件交换[1].但是由于DXF不能描述空间信息的完整几何模型,难以进一步发展;其信息定义不完整,仅保留了原有系统数据结构中的几何和部分属性信息,而大量的拓扑信息已不复存在;其信息描述方面也有许多缺陷,致使一些信息量过分冗长,文件格式比较复杂而且不尽合理[2].而XML(Extended Markup Language,可扩展标记语言)作为目前互联网上广泛流行的数据交换标准,具有结构化、可扩展性以及灵活性等特点,所以设计一种基于XML模式的可描述矿图图形的标记语言对矿图进行描述.利用所生成的矿图标记语言(XML文件),作为中性文件可实现矿图数据的交换和发布,还可利用关系数据库实现对XML文件的管理.为了实现矿图的重新发布,必须把矿图标记语言文件通过XSLT转换语言转换为另一种XML格式的文件——SVG.使用SVG可以在网页上显示出各种各样的高质量二维矢量图形,包括图像处理中常见的许多功能,如图形、文字、动画、色彩和滤镜效果等.但SVG不同于传统的二维(平面)图形,而是使用简单的一维(文本)指令,完成矢量图形特征的描述[3].尽管DXF文件和SVG文件在表示方式上有一定的相似之处,都通过记录图形的特征数据来描述矢量图形,但在有些实体的描述上,两者存在差异,比如坐标系、文字等[4].本文在此基础上着重分析了关键图元的转换问题.

1 DXF数据组织结构

DXF文件描述了AutoCAD图形数据库中所包含的全部信息,是图形完全等价的矢量表达形式.DXF本质上由代码及关联值对组成,称为组码和组值.每个组码和组值各占一行,组码是一个整数,表明了其后数据元素的类型,也指出了数据元素对于给定对象(或记录)类型的含意;组值是数据类型,根据组码的数值可以是字符串型、整型或浮点数型等.通过使用这些配对的组码和组值,DXF文件被组织成段,这些段由记录组成,而记录又由依次排列的组码和数据条目组成.完整的DXF文件由7段SECTION组成,每段由一行组码0及一行字符串SECTION开始,紧接着组码2及一行表示段名称的字符串;段的结束由一行组码0及一行字符ENDSEC表示.这些段中的内容由对象或图元组成,而这些对象或图元由标志它们属性的组码和组值组成.整个文件以一行组码0及一行EOF结束[5],其文件结构如图1所示.

2 SVG数据组织结构

SVG是一种标准、开放、可缩放的矢量图形规范,是一种基于XML来描述二维矢量图形和矢量/点阵混合图形的置标语言,是一种全新的矢量图形规范.SVG图形包括框架元素和图形元素,框架元素能够包含图形元素和其他框架元素.

(1)主要的框架元素有

(2)图形元素包括路径

3 DXF到SVG图元的转换

该转换实现从DXF矿图文件到矿图标记语言(XML文件)的转换,然后通过XSLT语言实现XML格式到SVG的简单转换,最后实现矿图的发布.XSLT语言,它代表eXtensible Stylesheet Language:Transformations(即扩展样式表语言:转换),是一种用来将一个XML文档的结构进行转换的语言,是XSL(eXtensible Stylesheet Language,扩展样式表语言)语言的一部分.XSL用来定义XML文档的格式和表现方式,用于其在屏幕上的显示、打印到纸上或是作为语音输出[6].下面介绍复杂的图元对象和非图元对象的转换.

以往研究DXF到SVG的图元转换的文献,如文献[4]中CAD文件转换为SVG文件的探讨,主要针对坐标系统、圆弧椭圆、文字等进行转换.通过细致研究了前人的转换方法后,本文提出了一些新的转换方法和一些比较复杂图元的转换方法,并通过VC++6.0加以测试实现.

3.1 坐标系的转换

在AutoCAD中采用的是世界坐标系(WCS),也就是说坐标原点在屏幕的左下角,X轴向右为正方向,Y轴向上为正方向.而SVG坐标原点在初始视口(屏幕)的左上角,X轴的正向朝右,Y轴的正向朝下.可通过XSLT语言从矿图标记语言到SVG里实现坐标系的转换.在转换后的矿图标记语言(XML文件)里面存储了DXF文件中所有图元的横纵坐标的最大值和最小值(Xmin,Ymin,Xmax,Ymax),这样可以在SVG里定义图形的视口.

对于坐标系的转换,除了在文献[4]中提到的方法之外,本文提出了另两种转换方法.

(1)在对应的视口元素中加入:transform=“translate(0,Ymax)scale(1,-1)”.上述语句中:translate(0,Ymax)的意思是将坐标原点由原来的位置平移到点(0,Ymax)的位置,而scale(1,-1)的含义是X轴的正方向不变,Y轴的正方向与原来相反.其中Ymax表示从DXF文件中读取的最大纵坐标.

(2)直接在XSLT文件中针对对应的每一个图元的纵坐标做y=-y+Ymax变换.代码如下:

3.2 颜色

AutoCAD系统采用颜色索引(ACI),用0~255的整数表示256种颜色[7].而SVG中采用RGB颜色系统,利用(Red,Green,Blue)三元组来表示一种颜色值,其中,Red、Green和Blue分别代表3种基色的取值,范围从0~255.所以本文在XML文件转换时就实现颜色的转换,SVG直接从XML文件中提取.由于ACI与RGB颜色系统存在一定对应关系,最直接简单的办法就是通过穷举法实现颜色的对应关系,例如转换函数:CreateXmlDocument::CADToRGB_color(int color,double&r,double&g,double&b);其中参数color代表了AutoCAD的颜色,通过穷举找到对应的RGB.C++代码如下:

3.3 文字

在将矿图标记语言向SVG转换之后,可能出现中文文字在SVG中不能正常显示的情况.这是因为SVG有iso-8859-1(ASCII)、utf-8和utf-16共3种编码形式,ASCII码不能直接使用汉字字符,utf-8和utf-16是Unicode形式的编码.utf-8支持多种语种,每个ASCII字符使用一个字节表示,其它字符使用3个字节来表示;utf-16则对于任何一个字符都是使用2个字节来表示,这2种编码都能正常显示汉字[8].编程时,如果直接生成SVG文档,则文档使用的是ASCII码,所以不能正常显示汉字.需要将ASCII码文档转换成Unicode,可利用函数C++库函数WideCharToMultiByte实现文字的转换问题.

3.4 多线(MLINE)

DXF对于多线的处理比较复杂,必须通过计算才可以得出两条折线,对应于SVG的

①对正信息,如图2所示.

②比例因子,表示两条线之间的宽度;

③对正点的坐标;

④每个对正点到上线和下线的距离(有可能是负的),由每一对组码所对应的组值相减而得,分别为d1即对正点到上线的距离、d2即对正点到下线的距离;

⑤从该顶点开始的线段的方向矢量,(12,22)对应的组值,即为(u1,v1);

⑥此顶点处的斜接方向矢量,(13,23),即为(u2,v2).计算方法如图3所示.

这条MLINE采用居中正对,令B的坐标为(x,y),C的坐标为(x1,y1),A的坐标为(x2,y2),从对正点B开始的线段的方向矢量表示单位方向的向量,即方向为模长为1;从对正点B点处的斜接方向矢量为,模长为1.所以现在只要求得A、C的坐标即可:

其中对应的值为:

代入可以得到A、C的坐标:

4 结束语

本文详细介绍了DXF实体到SVG元素之间的转换方法,在前人研究基础上提出了新的转换方法,分析了比较复杂的图元对象的转换方法,并在转换过程中给出了具体的解决方案.通过实现DXF数据到SVG数据的转换,一方面解决了矿图数据网络化应用中存在的现实问题,为煤矿企业信息系统建设尤其是WebGIS系统的建设提供了空间数据格式方面的参考;另一方面,在矿图空间数据格式标准化方面具有很好的参考和实用价值.

[1]史玉红.浅谈AutoCAD的接口DXF文件 [J].山东煤炭科技,2002(1):38-39.

[2]陈晓兵.基于Web和数据库的AutoCAD图形文件的数据交换[J].组合机床与自动化加工技术,2003(11):38-41.

[3] 袁家政.可伸缩矢量图形SVG的数据表示研究[D].北京:北京交通大学,2007.

[4]柳 玲,李百战,杨明宇.CAD文件转换为SVG文件的探讨[J].计算机应用,2006,26(B06):51-53.

[5]李芳珍,许伦辉.DXF文件格式及其外部接口的研究[J].兵工自动化,2008,27(7):83-85.

[6]尹章才,李 霖.基于XML的地理信息可视化方法优化研究[J].武汉理工大学学报,2006,28(2):45-48.

[7]刘俊荷.矿图[M].北京:煤炭工业出版社,2005.

[8]黄凯伟.SVG开发实践[M].北京:电子工业出版社,2008.

Analysis on key issues about conversion from DXF to SVG metafile

LIU Hui,LIU Xing,ZHENG Jing
(School of Information Science and Engineering,Northeastern University,Shenyang 110819,China)

In order to re-release Mine maps,the AutoCAD data formats(DXF files)and SVG format standard are analyzed,and the corresponding relationship between the entities of DXF files and SVG elements is established. Then the conversion from the key and complex metafile objects(text,line)and non-metafile objects(coordinates,color)to SVG is analyzed at length.By doing so,it can be more easily applied to the map releasing of WebGIS.At last,programming is made to testify that the re-released mine map is basically same with the original mine map.

DXF;metafile;SVG

book=4,ebook=137

TP319

A

1671-024X(2010)04-0078-03

2010-03-25 基金项目:国家2006年度安全生产科技发展计划项目

刘 辉(1985—),男,硕士研究生.

刘 星(1964—),女,副教授,工学硕士.E-mail:haphlx@163.com

猜你喜欢

正点图元矢量
一种适用于高轨空间的GNSS矢量跟踪方案设计
矢量三角形法的应用
学术出版物插图的编排要求(一):图注
复杂地形的动车组正点、节能优化
联锁表自动生成软件的设计与实现
正点
趣味汉字——正点和整点
基于矢量最优估计的稳健测向方法
三角形法则在动态平衡问题中的应用
电气CAD接线图快速转换G图形的技术应用研究