AutoCAD图形网络化的研究与实现

2012-06-09 10:25李爱国
电子设计工程 2012年2期
关键词:插件圆弧浏览器

李爱国

(陕西工业职业技术学院 陕西 咸阳 712000)

AutoCAD是目前使用非常广泛的计算机辅助设计系统,据AutoDesk公司的统计数据,目前全世界有200多万设计者使用AutoCAD来定义和设计各种工程方案,有20多亿的AutoCAD图形文件存储于计算机中[1-2]。由于其文档格式使用广泛,AutoDesk公司为了适应目前网络应用的需求,也实现了通过互联网对其图形文件的显示。早期采用Whip!插件在浏览器上浏览DWF专用格式文件。DWF文件格式支持图层、超级链接、背景颜色、距离测量、线宽、比例等图形特性。但同时也存在很多问题,AutoCAD本身不能显示DWF文件,而如果将DWF文件转换回到DWG格式需使用第三方供应商的文件转换软件。因此,这种方式只适合通过网络显示图形文件,不适合进行数据的交换。Autodesk提供的第二种在非AutoCAD环境下显示其图形文件的方法是Voloview控件。Voloview控件可以在支持ActiveX的软件中作为插件使用,这样就可以通过它对DWG文件进行浏览甚至简单的编辑。由于它的实现借助了ActiveX技术,因此对浏览器有着很强的依赖性,对于非IE核心的浏览器来说,无法使用该控件进行显示图形文件。其次,Voloview对中文的支持也存在一定的问题。

通过将AutoCAD的图形文件转换成能够在浏览器上查看的数据文件,也可以做到在浏览器上显示图形数据。通常使用的方式是将AutoCAD的图形文件数据转换成SVG格式文件,然后在安装了SVG插件的浏览器上进行浏览。SVG(Scalable Vector Graphics)是 World Wide Web Consortium(W3C)组织开发和维护的一种开放的矢量图形标准,它提供了制作复杂元素的工具,如渐变、嵌入字体、透明效果、动画和滤镜效果,并且可使用平常的字体命令插入到HTML编码中。由于SVG基于XML语言,因此有着非常良好的通用性,因此容易被推广使用。但使用SVG也必须使用专用的插件,在浏览器中安装这种插件的很少,因此其广泛使用受到一定程度的限制。

在浏览器中普遍安装并能够显示矢量图形的是Flash Player插件。Flash是Web页面上矢量动画的事实标准,因此在浏览器上安装Flash Player几乎是大多数用户必做的事情。Flash Player可以通过其Action Script脚本程序实际上是一种富客户端(Rich Client)技术,采用这种技术开发的富因特网应用程序(Rich Internet Applications,RIA)可以通过很强的交互性的富客户端技术为用户创建一个更为全面的网络体验[2]。

1 Flash富客户端技术

近年来富客户端技术的发展越来越繁荣,很多种不同技术背景的富客户端技术都在利用自身的优势推广到Web应用中。由于98%以上的浏览器都安装了Flash Player插件,并且有着很好的跨平台特性,因此基于Flash技术的富客户端技术也因此得到很好的推广。

RIA集成了桌面应用的交互性和传统Web应用的部署灵活性与成本分析,以创建单一而完整的用户体验。富客户端技术使创建RIA成为可能,它提供一个运行时的环境以承载被编译的客户端应用程序,该客户端应用程序是一个使用HTTP协议发布的文件[3]。由于富客户端技术可以支持运动的图像、视频、音频、双向的数据通信和创建复杂的窗体,它为创建应用程序用户接口提供了一个高效而完善的开发环境[4]。

随着Flash技术不断地发展变化,Action Script脚本已经发展成为一种拥有自己的语法体系的面向对象的、交互功能强大的脚本语言。它是构建基于Flash富客户端应用的一项重要技术基础。

Flash使用 ActionScript的MovieClip类的方法绘制直线、曲线、形状和进行填充。使用这些基本的图像元素就可以完成在Flash中显示AutoCAD图形的要求。

2 AutoCAD DXF文件格式分析

2.1 简介

DXF(Drawing Interchange Format,图形交换格式)是AutoCAD图形文件中包含的所有信息的一种带标记数据的表示方式。这种格式的文件最初是用于共享图形数据,由于其良好的结构和通用性,因此被大量使用。DXF可以以文本形式存储矢量数据,且文件结构简单、清晰,读取方便,因此是有使用更为广泛。

2.2 DXF文件的组成

DXF文件的组成采用类似标记语言(如:HTML和XML)的方式记录数据。以下用AutoCAD R2000版DXF为例分析其组成。文件中的每个数据元素前面都带有一个称为组码的整数。组码的值表明了随后的数据元素的类型,同时这个组码也指出了数据元素对于给定对象(或记录)类型的含义。一个DXF文件由若干段组成,每一段又由一些记录组成,而记录又由若干组码和数据条目组成。在DXF文件中,每个组码和每个数据条目都各占一行。文件总是以一行组码和一行组值组成,因此规定组值的最大长度不能超过255个字节(AutoCAD2000以后组码 0~9及 1 000~1 009已经去除了255个字符的限制,但通常小于2 049个字节),这种规律使得编程设计更加方便[5]。

完整的DXF文件由七个段(SECTION)组成,以下列出的是主要段的段名及段中包含的信息:

1)HEADER段 DXF文件的HEADER段记录了与图形相关联的一些信息,其中包括AutoCAD图形数据库的版本号以及大量的系统变量。

2)CLASSES段 CLASSES段存储了应用程序定义的类的信息,这些类的实例将会出现在数据库的 BLOCKS、ENTITIES和 OBJECTS段中[6]。

3)BLOCKS段 本段描述图形中每个块的引用以及块中的实体。

4)ENTITIES段 本段描述构成图形的所有的图形实体和块的引用,但不包括块内的实体。

3 在Flash中显示AutoCAD图形文件

在Flash中读取并显示AutoCAD文件过程相对较为复杂,采用DXF文件进行数据共享是一种很通用的方法。

3.1 DXF文件的读取

文本格式的DXF文件很容易被其他的系统读取和使用。Flash虽然提供了loadVariables和loadVariablesNum函数从外部读取数据并将其存入Flash中的某个影片剪辑或者某个特定的级别中,但其处理数据的方式是通过“&”将数据分开,并采用“UserName=tom&Age=20”这样的方式将数据规格化,这样的格式与DXF的差别太大,处理起来非常麻烦。因此需要借助其他工具进行读取。

由于Flash插件是在Web页面上工作,因此可以利用Web页面上提供的现有工具进行DXF数据的读取。这里使用Java Script读取DXF文件的数据,同时利用DOM接口,将这些数据转换成XML文件。这样也可以将DXF数据存储在XML文件中,用于其他方面的数据交换。Java Script提供FSO(File System Object)对象通过大量的属性、方法和事件来处理文件夹和文件。由于DXF文件中的数据单元都是占用单独一行,因此从DXF文件中读取数据,可以使用 Text Stream对象的Read Line方法,一次读取一行内容,并可以将其存储之变量中。

图1 读取DXF文件流程图Fig.1 Flow chart of reading DXF files

3.2 DXF数据的格式化

读出来的DXF数据包含组码以及图形元素的数据,需要进一步将其提取和规划,鉴于Flash Action Script有很强的处理XML文件的能力,另一方面XML文件也非常适合在网络上传输和共享,因此在读出DXF文件的数据之后,将其转换成XML文件。在XML的体系中,XML Schema的作用是定义XML文档的合法构建模块,通过Schema模板,程序可以验证外部接收到的数据的正确性。下面给出Schema文件中关于直线的相关定义,其他实体的数据模板与直线的定义相似。

3.3 Flash中显示DXF数据(显示,缩放)

3.3.1 读取XML文件中的图形数据

Flash Player在5.0以后的版本中提供一个XML类,使用XML类的load方法将指定XML文件的数据读取至数组中,然后通过childnode以及firstchild等属性获取指定位置数据。接下来将数据交由 Movie Clip类提供的绘图方法在Flash的舞台上绘制相应的图形。

3.3.2 绘制图形元素

Flash的Action Script脚本中提供一个Movie Clip类,该类的方法主要提供的功能与定位影片剪辑的动作所提供的功能相同,除此之外还提供在Flash动画中实时绘图。利用其提供的这些绘图方法将DXF中的图形数据绘制在Flash的动画舞台上。Movie Clip类提供的绘图方法只提供基本的移动绘制点、直线、填充、设置线型样式和曲线,这些只能满足CAD图形元素中的一部分要求,对于圆和圆弧以及椭圆Movie Clip类都没有提供相应的绘制方法,但其提供的曲线的实质就是二次贝赛尔曲线,因此可以采用这个方法拟合所需要的图形元素。二次贝赛尔曲线包含两个锚点和一个控制点。该曲线内插这两个锚点,并向控制点弯曲。二次贝赛尔曲线的数据点只有3个因此便于存储,也便于快速绘制图形,但缺点也是显而易见的,如果要精确拟合成圆或者圆弧,就需要较多段的曲线。以下给出分8段绘制拟合一个圆的函数。

图2 二次贝塞尔曲线Fig.2 Quadratic Bezier curves

Movie Clip.curveTo(controlX,controlY,anchorX,anchorY)方法的4个参数都是整数,前两个分别用于指定控制点的水平位置、垂直位置。后两个指定下一个锚记点的水平位置、垂直位置。但在CAD系统中圆的信息存储形式往往是圆心坐标以及半径值,因此在使用这个方法拟合圆的时候需要进行换算。

圆弧虽然是圆的一部分,但在绘制的时候却不完全一致。绘制圆弧分两种情况,一种是小于等于45°的圆弧,此种圆弧较为简单,只需要绘制一段曲线拟合即可,由于圆弧的起点是任意位置因此需要对其进行计算转换。另一种是小于等于360°,其画法与绘制圆的方法类似。以下是绘制小于等于45°的圆弧的方法,其中mc是创建的的剪辑对象,ox与oy是圆心的坐标,r表示半径origin_angle表示圆弧的起始角度,angle是弧的角度,正数顺时针画弧,负数逆时针画弧。thickness、rbg、alpha为设置线型的参数。返回值为圆弧终点坐标,终点为角度大的点,与angle符号无关。

对于拟合小于等于360°的圆弧,也采用分段方式进行,由于拟合是从任意角度开始,因此起点需要计算而不能采用绘制圆时的方法,

以上代码中sinD与cosD是以角度值为参数计算正弦值和余弦值的函数[7]。

4 结束语

通过在Web方式下显示DXF文件可以跟进一步促进CAD图形文件的交流,同样也可以通过企业内部网提供一种新的工艺文件在线传递的方法,以及进一步促进企业信息化。同时这也为实现在线CAD系统的实现提供了一种切实可行的方法。

[1]魏建军,欧阳一鸣,杜晓荣,等.基于XML的AutoCAD图形与SVG图形转换研究[J].微电子学与计算机,2005(2):58-62.WEI Jian-Jun, OUYANG Yi-ming, DU Xiao-rong, et al.XML-based SVG graphics convert AutoCAD drawing and research[J].Microelectronics and Computer,2005(2):58-62.

[2]张卫峰,林端敏.AutoCAD软件的DXF接口技术[J].机械与电子,2004(11):45-47.ZHANG Wei-feng,LIN Duan-min.AutoCAD DXF software interface technology[J].Machinery and Electronic,2004(11):45-47.

[3]孙放,陈云芳,林杭锋.适用于富客户端的云计算模型[J].计算机技术与发展,2010(8):23-25.SUN Fang, CHEN Yun-fang, LIN Hang-feng.Suitable for rich client cloud computing model[J].Computer Technology and Development,2010(8):23-25.

[4]百度百科.富客户端[EB/OL].[2011-12-267]http://baike.baidu.com/view/1330363.htm.

[5]刘传亮,陆建德.AutoCAD DXF文件格式与二次开发图形软件编程[J].微机发展,2004(9):78-79.LIU Chuan-liang,LU Jian-de.AutoCAD DXF file format and the secondary development of graphics software programming[J].Microcomputer Development,2004(9):78-79.

[6]郭朝勇.AutoCAD R14(中文版)二次开发技术[M].北京:清华大学出版社,1999.

[7]boenlee.制作随机画圆弧动画[EB/OL].(2008-3)http://www.webjx.com/flash/example-4886.html.

猜你喜欢
插件圆弧浏览器
浅析圆弧段高大模板支撑体系设计与应用
外圆弧面铣削刀具
自编插件完善App Inventor与乐高机器人通信
反浏览器指纹追踪
六圆弧齿廓螺旋齿轮及其啮合特性
基于jQUerY的自定义插件开发
环球浏览器
MapWindowGIS插件机制及应用
基于Revit MEP的插件制作探讨
等截面圆弧无铰板拱技术状况评价