李愛國
(陜西工業職業技術學院 陜西 咸陽 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]。
近年來富客戶端技術的發展越來越繁榮,很多種不同技術背景的富客戶端技術都在利用自身的優勢推廣到Web應用中。由于98%以上的瀏覽器都安裝了Flash Player插件,并且有著很好的跨平臺特性,因此基于Flash技術的富客戶端技術也因此得到很好的推廣。
RIA集成了桌面應用的交互性和傳統Web應用的部署靈活性與成本分析,以創建單一而完整的用戶體驗。富客戶端技術使創建RIA成為可能,它提供一個運行時的環境以承載被編譯的客戶端應用程序,該客戶端應用程序是一個使用HTTP協議發布的文件[3]。由于富客戶端技術可以支持運動的圖像、視頻、音頻、雙向的數據通信和創建復雜的窗體,它為創建應用程序用戶接口提供了一個高效而完善的開發環境[4]。
隨著Flash技術不斷地發展變化,Action Script腳本已經發展成為一種擁有自己的語法體系的面向對象的、交互功能強大的腳本語言。它是構建基于Flash富客戶端應用的一項重要技術基礎。
Flash使用 ActionScript的MovieClip類的方法繪制直線、曲線、形狀和進行填充。使用這些基本的圖像元素就可以完成在Flash中顯示AutoCAD圖形的要求。
DXF(Drawing Interchange Format,圖形交換格式)是AutoCAD圖形文件中包含的所有信息的一種帶標記數據的表示方式。這種格式的文件最初是用于共享圖形數據,由于其良好的結構和通用性,因此被大量使用。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段 本段描述構成圖形的所有的圖形實體和塊的引用,但不包括塊內的實體。
在Flash中讀取并顯示AutoCAD文件過程相對較為復雜,采用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
讀出來的DXF數據包含組碼以及圖形元素的數據,需要進一步將其提取和規劃,鑒于Flash Action Script有很強的處理XML文件的能力,另一方面XML文件也非常適合在網絡上傳輸和共享,因此在讀出DXF文件的數據之后,將其轉換成XML文件。在XML的體系中,XML Schema的作用是定義XML文檔的合法構建模塊,通過Schema模板,程序可以驗證外部接收到的數據的正確性。下面給出Schema文件中關于直線的相關定義,其他實體的數據模板與直線的定義相似。


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]。
通過在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.