我想看一级黄色大片_久久亚洲国产精品一区二区_久久精品免视看国产明星_91久久青青青国产免费

您的位置:網站首頁 > CAD新聞

CAD文件轉換為SVG文件的探討

時間:2011-08-17 10:15:40 來源:未知

詳細剖析了CAD的圖形交換格式———DXF文件的結構,分析了SVG文件的框架元素和圖形元素,建立了CAD中的對象、DXF文件中的實體和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平臺,應用不夠靈活?,F在國外對DWG格式的研究也有很多,較為著名的是OpenDWG協會的ODT軟件包,該軟件包為直接操作DWG文件提供了豐富的函數。但要利用此軟件包必須是會員,并且需要繳費,在非盈利條件下可以免費使用。DXF是AutoCAD提供的圖形交換格式,它以ASCII碼格式存儲文件,可以用記事本編輯,簡單易讀,應用廣泛。DXF在表現圖形的大小方面十分精確,本文主要探討了DXF文件轉換到SVG文件的一系列問題。

1 DXF格式剖析

  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的基本屬性 :

  1. 所有的標記都有開始標記和結束標記,否則必須注明為空標記。空標記用反斜杠結束,如< line / >。
  2. 標記必須正確嵌套。如果一個標記在另一個標記中開始,那么它也必須在那個標記中結束。
  3. 文檔必須只有一個根。一個< svg > < / svg > 元素包含了一個SVG文檔的所有內容。
  4. 文檔應該以XML 聲明< ? xml version = ”1. 0”? >開始。
  5. 文檔應該包含一個DOCTYPE聲明, 該聲明指向一個允許元素的列表。

  SVG 1. 0 文檔的DOCTYPE聲明是:

 <?xml version="1.0"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTDSVG1.0//EN"" http://www.w3.org/TR/2001/REC2SVG220010904/DTD/svg10.dtd">
<svg width="800" height="600" xmlns="http://www.w3.org/2000/svg">
</svg>

  SVG圖形包括框架元素和圖形元素??蚣茉啬軌虬瑘D形元素和其他框架元素,如:<svg>、<g>、<defs>、<symbol>、<clipPath>、<mask>、<pattern>、<marker>、<a>和<switch>。<g>元素是編組元素,能分組圖形對象,便于管理和使用,如對組進行變換或提供一個公共屬性。<defs>元素定義可重用部件,以后可在圖形主體中調用,這種重用技術最大限度地利用了HTTP的緩存功能,避免了數據的重復下載。調用<defs>元素定義的項有兩種方式,一種是定義的項通過其本地URL(或URI)引用;第二種是使用<use/>元素。

  例如: <use xlink:href="#block1"/>

  圖形元素包含路徑<path>、文字<text>、圖像<image>、<use>和六種基本形狀:矩形<rect>、圓<circle>、橢圓<ellipse>、線<line>、折線<polyline>、多邊形<polygon>,簡單圖形直接由基本形狀構建,每個基本形狀都帶有位置、大小、顏色、輪廓等屬性。復雜圖形可以用路徑<path>來描述,路徑是一系列命令,用來創建作為圖像一部分精確定義的形狀,該形狀可以是開放的或閉合的,并可以包含一條或多條線、曲線和線段,其中曲線可用圓弧、三次或兩次的Bezier曲線繪制。SVG提供了對嵌入圖像的支持,可以在<image>直接寫入圖像的二進制信息,也可以鏈接指向某個圖像文件,還可以用濾鏡中的<feImage>引入外部圖像文件加以處理。SVG在字體處理上采用了CSS 2中的字體顯示核心技術Web Font,保證在任何情況下看到的字體相同。SVG通過<transform>可以實現坐標轉換,實現圖形放縮、旋轉、鏡像、傾斜等效果。

3 DXF文件轉換為SVG文件

  分析DXF文件和SVG文件,發現兩者在表示方式上有一定的相似之處,兩者均是文本文件,通過記錄圖形的特征數據來描述矢量圖形,比如圓,兩者均記錄了圓心、半徑等數據。但在有些圖形的描述上,記錄的特征數據是不同的,比如橢圓等。所以,實現CAD文件到SVG文件的轉換,不僅要分析AutoCAD中的每一類型的二維矢量圖形對象在DXF文件中的對應實體描述,以及SVG中對應于DXF文件中的實體的元素,而且應針對DXF記錄的特征數據利用相應的公式推導出SVG需要的數據。經過詳細深入的分析,得到AutoCAD中的對象、DXF文件中的實體和SVG中的元素之間的對應如表1所示。

表1 AutoCAD中的對象、DXF文件中的實體和SVG中的元素對應表

 AutoCAD中的圖形對象 DXF文件中的實體   SVG中對應的元素
 矩形、多邊形、多段線  LWPOLYLINE  polyline
 圓  CIRCLE  Circle
 橢圓  ELLIPSE  ellipse、rotate
 直線  LINE  line
 圓弧  ARC  path
 橢圓弧  ELLIPSE  path
 樣條曲線  SPLINE  path
 圖塊和塊引用  BLOCK、INSERT  defs、g、use等
  文字  TEXT、MTEXT  text
 圖像  IMAGE  image
 多線  MLINE  polyline
 圖案填充  HATCH  defs、g、use等
 參照線  XLINE  line
 尺寸  DIMENSION  defs、g、use等

  在轉換的過程中,會遇到一些難點,下面提出具體的解決方案:

3.1 坐標系統

  不管是AutoCAD中的對象還是SVG中的圖形都是通過坐標定位的。但是兩者的坐標系統是不同的, AutoCAD的世界坐標系的原點在屏幕的左下角, X軸的正向朝右, Y軸的正向向上。SVG的坐標系的原點在初始視口(屏幕)的左上角,X軸的正向朝右, Y軸的正向朝下。兩者均可以定義自己的坐標系。在DXF文件向SVG文件轉換時,為保證圖形顯示正確,應將所有的圖形進行坐標矩陣變換。在SVG中使用下面語句:

<g transform="matrix(1 0 0 21 0 600)">
</g>

3.2 橢圓

  由于在DXF文件中的橢圓記錄的特征數據和SVG中的橢圓元素需要的數據是不同的, DXF文件記錄了橢圓圓心、長軸的端點(相對于圓心的相對值) 、半長軸與半短軸的比例等數據。SVG中的橢圓元素需要橢圓圓心、半長軸、半短軸等數據。并且AutoCAD中的橢圓的長軸可以和水平軸成任意角度,但直接用SVG中的< ellip se >元素所繪的圖形只能使橢圓的長軸平行于水平軸,因此,需要計算長軸和水平軸所成角度,再使用旋轉變換。所以應利用下面公式轉換:

sl = S qr( x23 x2 + y23 y2)
ss = sl3 r1
aa = A tn ( y2 / x2) 3 180 /3. 141 592 6

  其中sl代表橢圓的半長軸, ss代表橢圓的半短軸, aa代表橢圓的長軸與水平軸的角度, x2和y2是長軸的端點(相對于圓心的相對值) , r1是半長軸與半短軸的比例。

3.3 文字

  對所有圖形進行了坐標系統轉換,但文字不同于其他圖形,轉換之后會出現了反轉,這時應先將文字相對于原所在位置的基線進行鏡像,這樣能保證文字按正常狀態顯示。

  轉換之后,可能出現SVG中的中文不能顯示的情況,這是因為SVG有3種編碼形式: iso2885921 (ASCII) 、utf28和utf216, iso2885921 (ASCII)不能直接使用漢字字符, utf28和utf216是Unicode形式的編碼, utf28支持多語種,每一個ASCII字符使用一個字節來表示,對于其他字符使用三個字節來表示。utf216對于任何一個字符都是使用兩個字節來表示,這兩種編碼能正常顯示漢字。在編程時,如果直接寫SVG文檔,則文檔使用的是ASCII碼,所以不能正常顯示漢字。解決的方案是:

  3.3.1 在SVG中,需要將中文字體名稱進行“國際化”,即將漢字字體名稱改為英文名稱,下面是部分字體對照列表(表2) 。

表2 部分漢字字體與英文名稱對照表

 英文名稱  漢字字體  英文名稱  漢字字體
 FangSong_GB2312  仿宋_GB2312  KaiTi_GB2312  楷體_GB2312
 YouYuan  幼圓  LiSu  隸書
 SimSun  宋體  SimHei  黑體

  3.3.2 將ASCII碼的文檔轉換成Unicode編碼后寫文件。下面是VB 實現的代碼,將ASCII碼的文檔讀入byte 數組mem,通過StrConv( )轉換后,寫入文件。

fLength = FileLen (" c: / svg1. svg" )
ReDim mem (fLength) AsByte
Open "c: / svg1. svg" For Binary As #2
Get #2, , mem
Close #2
mem = StrConv(mem, vbUnicode, &H804)
Open svgfilename For Binary As #3
Put #3, , mem
Close #3

3.4 圓弧、橢圓弧

  對于圓弧、橢圓弧等復雜圖形,在SVG中用< Path >元素
描述,其中有橢圓弧命令:

A rx ry x2axis2rotation large2arc2flag sweep2flag x y

  其中, rx和ry分別是半長軸和半短軸, x2axis2rotation是弧所在橢圓的X 軸與水平方向的夾角, large2arc2flag 和sweep2flag決定橢圓弧的繪制方向,如果large2arc2flag為1代表大角度弧線,為0代表小角度弧線, sweep2flag為1代表起點到終點的弧線繞橢圓中心是順時針方向,為0是逆時針方向, x和y是橢圓弧終點坐標。這和DXF中的圓弧、橢圓弧描述的特征數據是不一樣的,同樣需要轉換。

3.5 圖塊

  為了提高繪圖效率, AutoCAD中提供了圖塊對象。在DXF中,圖塊定義在TABLES 區域,在ENTITIES區域通過INSERT組碼存儲圖塊調用信息。轉換成SVG時,將圖塊定義用<defs>來組織,圖塊名作為每個defs元素的ID屬性,使用<use>元素調用圖塊信息。這種方式支持圖塊的嵌套。

3.6 圖層

  圖層是AutoCAD中的一種非常有用的圖形管理方式,將圖形對象分門別類放在不同的圖層中,便于用戶管理、編輯和打印。在轉換器中,實現了根據圖層有選擇轉換圖形,極大地增強了靈活性。

4 應用實例

  根據上述分析,筆者利用VB編程實現了二維矢量圖形從DXF文件到SVG文件的轉換,實現算法如下:

  1. 選擇DXF文件后,進行DXF文件讀,顯示圖形所包含的所有圖層。
  2. 輸入目標文件名。
  3. 選擇要轉換的圖層。
  4. 進行DXF文件到SVG文件的轉換:
  1. 首先對一個臨時SVG文件進行初始化。
  2. 根據從DXF文件中讀出的組碼和組值判斷對象的類型,不同類型的對象取得不同的屬性。
  3. 進行必要的屬性轉換,對每個不同對象用SVG中相應的元素來描述。
  4. 將轉換后的結果寫到臨時的SVG文件中。
  5. 將臨時的SVG文件進行從ASCII碼到Unicode編碼的轉換。
  6. 將Unicode編碼以二進制方式寫入目標文件。

 

圖1 通過轉換器轉換后得到的SVG圖形

圖1 通過轉換器轉換后得到的SVG圖形

 

5 結語

  本文詳細剖析了DXF文件的結構,并且分析了SVG文件的基本要素和框架要素,建立了CAD中的對象、DXF文件中的實體和SVG中的元素三者之間的對應表,并對轉換中遇到的坐標系統轉換、文字顯示、圖塊、復雜圖形的顯示等多個問題提出了解決方案,最后,通過VB編程實現驗證了方法的可行性。這種轉換方法完全不依賴于AutoCAD平臺,靈活高效,具有一定的實用價值。


我想看一级黄色大片_久久亚洲国产精品一区二区_久久精品免视看国产明星_91久久青青青国产免费

            日精品一区二区| 日韩欧美中文字幕精品| 亚洲一区二区偷拍精品| 99久久精品免费观看| 亚洲已满18点击进入久久| 中文无字幕一区二区三区 | 国产欧美一区二区精品婷婷| 在线不卡一区二区| 亚洲风情在线资源站| 亚洲六月丁香色婷婷综合久久 | 91网站视频在线观看| 91在线免费看| 91福利小视频| 欧美日韩亚洲高清一区二区| 精品视频免费在线| 欧美高清dvd| 欧美大片国产精品| 精品国产伦理网| 国产精品人成在线观看免费| 国产精品美女久久久久久久久久久| 中文字幕一区二区三区在线不卡 | 午夜精品福利视频网站| 麻豆专区一区二区三区四区五区| 久久国产精品区| 大陆成人av片| 色噜噜夜夜夜综合网| 在线成人免费观看| 久久久久国色av免费看影院| 国产精品久久久久婷婷二区次| 亚洲日本在线看| 奇米影视一区二区三区小说| 国产成人免费xxxxxxxx| 色久综合一二码| 欧美一区二区三区四区视频| 日韩免费福利电影在线观看| 亚洲国产精品成人久久综合一区| 亚洲精品国产无天堂网2021| 日本伊人色综合网| 成人午夜激情视频| 欧美日韩成人高清| 国产日本亚洲高清| 亚洲bt欧美bt精品777| 国产成人在线影院| 欧美日韩国产免费一区二区| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲主播在线播放| 国产精品亚洲人在线观看| 欧美日韩国产在线播放网站| 国产日产欧美一区二区视频| 日韩精品亚洲一区| 91福利国产成人精品照片| 久久久久国产成人精品亚洲午夜| 亚洲va在线va天堂| 99久久精品国产毛片| 日韩情涩欧美日韩视频| 亚洲精品大片www| 国产不卡视频在线播放| 91精品国产欧美一区二区成人| 综合久久一区二区三区| 国产超碰在线一区| 精品美女一区二区三区| 视频在线在亚洲| 欧美在线看片a免费观看| 国产精品国产三级国产专播品爱网| 日本最新不卡在线| 欧美午夜影院一区| 亚洲免费av高清| 亚洲欧洲成人av每日更新| 一区二区三区在线看| 国产精品中文有码| 91精品国产综合久久精品app| 综合激情网...| 懂色av噜噜一区二区三区av| 精品国产一区二区在线观看| 秋霞电影一区二区| 欧美日韩亚洲综合一区| 亚洲欧美精品午睡沙发| 播五月开心婷婷综合| 国产亲近乱来精品视频 | 欧美日韩精品免费| 亚洲欧美成aⅴ人在线观看| 成人深夜在线观看| 国产精品久久久久久久久晋中| 国产乱码字幕精品高清av| 日韩片之四级片| 极品少妇一区二区三区精品视频| 欧美一区二区网站| 六月丁香婷婷久久| 精品伦理精品一区| 国产精品12区| 国产精品你懂的在线| gogogo免费视频观看亚洲一| 国产精品国产三级国产普通话三级 | 久久精品综合网| 狠狠色狠狠色综合系列| 欧美不卡123| 狠狠色狠狠色合久久伊人| 精品成人佐山爱一区二区| 精品一区二区三区视频在线观看| 日韩视频在线永久播放| 老色鬼精品视频在线观看播放| 日韩午夜三级在线| 国产福利精品导航| 国产精品理论在线观看| 91成人看片片| 免费欧美在线视频| 国产视频一区不卡| 99热精品国产| 午夜精品福利一区二区三区av| 日韩欧美亚洲一区二区| 国产成人午夜片在线观看高清观看| 欧美国产亚洲另类动漫| 一本久久a久久免费精品不卡| 亚洲一二三四久久| 日韩精品在线网站| av动漫一区二区| 午夜精品久久久久久久久久| 精品国产乱码久久久久久久久 | 欧洲精品一区二区| 极品销魂美女一区二区三区| 中文字幕日本乱码精品影院| 欧美蜜桃一区二区三区| 国产精品羞羞答答xxdd| 亚洲高清三级视频| 国产亚洲福利社区一区| 91久久国产最好的精华液| 加勒比av一区二区| 一片黄亚洲嫩模| 久久精品视频一区二区| 欧美三级电影网站| 国产不卡高清在线观看视频| 亚洲风情在线资源站| 国产欧美日韩三区| 日韩视频免费直播| 91行情网站电视在线观看高清版| 看片网站欧美日韩| 一区二区三区日韩欧美精品| 久久久五月婷婷| 欧美另类变人与禽xxxxx| eeuss鲁一区二区三区| 美女久久久精品| 亚洲一区二区精品久久av| 国产精品无圣光一区二区| 欧美α欧美αv大片| 欧美日韩中文一区| 99国产精品99久久久久久| 国产高清精品在线| 韩国女主播成人在线| 男女男精品视频网| 爽好久久久欧美精品| 夜夜嗨av一区二区三区网页 | 久久噜噜亚洲综合| 3d成人动漫网站| 欧美色电影在线| 91丨porny丨蝌蚪视频| 成人午夜av电影| 国产一区二区三区美女| 久久99精品国产.久久久久| 亚洲成av人影院| 亚洲国产婷婷综合在线精品| 亚洲视频图片小说| 1000部国产精品成人观看| 国产精品情趣视频| 国产精品私房写真福利视频| 久久免费电影网| 久久久噜噜噜久久人人看| 欧美成人aa大片| 精品人伦一区二区色婷婷| 日韩欧美电影一区| 2023国产精品| 欧美激情资源网| 最新国产成人在线观看| 18成人在线视频| 一区二区三区蜜桃网| 亚洲午夜国产一区99re久久| 视频一区国产视频| 激情文学综合网| 国产不卡在线视频| 91农村精品一区二区在线| 欧美性生活久久| 日韩亚洲欧美一区| 国产视频一区二区三区在线观看| 国产精品国模大尺度视频| 亚洲黄色av一区| 国产精品18久久久久久久网站| 蜜臀精品久久久久久蜜臀| 性做久久久久久免费观看 | 这里是久久伊人| 精品国产乱码久久久久久牛牛| 精品国精品自拍自在线| 国产欧美日韩精品a在线观看| 国产精品国产三级国产| 亚洲成人精品一区二区| 美女一区二区视频| 成人自拍视频在线观看| 在线观看三级视频欧美| 欧美一卡二卡三卡| 中文字幕乱码久久午夜不卡 | 精品亚洲国内自在自线福利| 丁香激情综合国产|