回覆列表
  • 1 # xmjiang

    AutoCAD作為計算機輔助設計軟體,其檔案儲存方式仍是採用二進位制0、1的方式進行儲存,在該軟體設計之初即定義了dwg檔案各結構部分的表示內容和表示方法、即首先制定了生成圖形和解析圖形的協議,雖然AutoCAD的原始碼並未開放,但是仍然有跡可循。

    以下摘錄對AutoCAD的dwg格式檔案的研究內容:

    AutoCAD軟體是中國目前最流行的微機軟體包之一,DWG檔案為Auto Desk公司推出的圖形格式檔案,可以理解成由點、線、面等構成的圖形資料庫。其複雜性主要來自由物件的多樣性及屬性的複雜性。比如圖形、線形、樣式的關聯。一個DWG圖紙檔案由圖紙資訊和各種圖元物件組成。分為無圖形表示類和有圖形表示類。有圖形表示類物件以塊表方式存放;無圖形表示類包括圖層、線形。DWG檔案內容可以分為四個部分:(一)索引部;(二)環境部;(三)實體部;(四)名錶部。

    (一) 索引部

    索引部主要是由Auto CAD的版本資訊及各部的首地址、各分表的首地址、長度及個數等資訊構成,從DWG檔案中的#0000-#0050H。

    #00-#13 Char*20 AutoCAD版本資訊

    #14-#17 int *4 實體部首址

    #18-#1F int *4 名錶部首址

    #1C-#1F int *4 圖塊定義首址

    #20-#23 int *4 圖塊定義長度

    #24-#27 int *4 檔案總長度

    #28-#2B int *4 常數

    1、 圖塊描述段:

    #2C-#2D int *2 圖塊名長度(25H)

    #2E-#2F int *2 圖塊個數

    #30-#31 int *2 標識數

    #32-#35 int *2 圖塊名錶首址

    2、 層描述段:

    #36-#37 int *2 層名長度(25H)

    #38-#39 int *2 層的個數

    #3A-#3B int *2 標識數

    #3C-#3F int *2 層名錶首址

    3、 字型描述段:

    #40-#41 int *2 字型名長度(C2H)

    #42-#43 int *2 字型個數

    #44-#45 int *2 標識數

    #46-#49 int *2 字型名錶首址

    4、 線形描述段:

    #4A-#4B int *2 線型名長度(BBH)

    #4C-#4D int *2 線型個數

    #4E-#4F int *2 標識數

    #50-#53 int *4 線型名錶首址

    5、 檢視描述段:

    #54-#55 int *2 檢視名長度(5BH)

    #56-#57 int *2 檢視個數

    #58-#59 int *2 標識數

    #5A-#5D int *4 檢視名錶首址

    6、 各個地址間的關係:

    實體部首址=索引部長度+標題部長度

    表部首址=實體部首址+實體部總長度

    塊實體首址=表部首址+表部總長度

    檔案總長度=塊實體首址+塊實體部總長度

    (二) 環境部

    該部給出了系統變數,屬性設定及當前狀態等資訊,它位於DWG檔案的#005E-#03EEH。

    #05E-#075 INSBASE real*24

    #076-#077 實體個數 int *2

    #078-#08F EXTININ real*24

    #090-#0A7 EXTMAX real*24

    #0A8-#0B7 LIMMIN real*16

    #0B8-#0C7 LIMMIX real*16

    #0C8-#0DF VIEWCTR real*24

    #0E0-#0E7 VIEWSIZE real*8

    #0E8-#0E9 SNAPNODE int*2

    #0EA-#0F9 SNAPUNIT int*16

    #0FA-#109 SNAPBASE real*16

    #10A-#111 SNAPANC int *8

    #112-#113 SNAPSTYL int *2

    #114-#115 SNAPISOPAIR int *2

    #116-#117 GRIDNODE int *2

    #118-#127 GRIDUNIT int *2

    #128-#129 ORTHOMODE int *2

    #12A-#12B REGENNODE int *2

    #12C-#12D FILEMODE int *2

    #12E-#12F QTEXTMODE int *2

    #130-#131 DRAGMODE int *2

    #132-#139 LTSCALE int *8

    #13A-#141 TEXTSIZE real*8

    #142-#149 TRACEWID real*8

    #14A-#14B CLAYER real*2

    #14C-#163

    #164-#165 LUNITS int*2

    #166-#167 LUPREC int *2

    #168-#169 AXISMODE int *2

    #16A-#179 AXISUNIT int *16

    #17A-#191 SKETCHINC real * 8

    #182-#189 FILLETRAD real * 8

    #18A-#18B AUNITS int *2

    #18C-#18D AUPREC int *2

    #18E-#18F

    #190-#191 OSMODE int *2

    #192-#193 ATTMODE int *2

    #194-#1A2 MENU char *15

    #1A3-#1AA DIMSCALE real*8

    #1AB-#1B2 DIMASZ real*8

    #1B3-#1BA DIMEXO real*8

    #1BB-#1C2 DIMDLI real*8

    #1C3-#1C4 DIMEXE real*8

    #1CB-#1D2 DIMTP real*8

    #1D3-#1DA DIMTN real*8

    #1DB-#1E2 DIMTXT real*8

    #1E3-#1EA DIMCEN real*8

    #1E8-#1F2 DIMTSZ real*8

    #1F3 DIMTOL int *1

    #1F4 DIMLIN int *1

    #1F5 DIMTIH int *1

    #1F6 DIMTOH int *1

    #1F7 DIMSE1 int *1

    #1F8 DIMSE2 int *1

    #1F9 DIMTAD int *1

    #1FA-#228

    #229-#230 ELEVATION real*8

    #234-#238 THICHNESS real*8

    #239-#250 VIEWDIR real*24

    #251-#2B2 圖形顯示說明

    #2E3-#2E4 BLIPMODE int *2

    #2E5-#3EE 備用

    (三) 實體部

    該部給出了所有圖形實體的描述,圖形實體又分為簡單圖形實體和複雜圖形實體。簡單圖形實體是點、直線等基本圖形。複雜圖形實體指多線段、圖塊等由基本圖形實體所組成的圖形。

    圖形的大部分資訊都在實體部段中,因此讀取實體段的內容很重要。讀取實體段的資料首先要考慮讀取資料的儲存方式,然後再進行後一步的處理或存入資料檔案中。此處用連結串列結構來儲存。各個實體的資料分成兩塊:公共資料塊和特殊資料塊。公共資料塊儲存每個實體都具有特徵引數,如所在圖層,實體標識,線型名等。特殊資料塊儲存每個實體特有的資料,如實體LINE,它裡面有兩個端點的座標值;實體CIRCLE中有圓心座標值和半徑值等

    每一個圖形實體都有描述段,他由描述首部和描述內容兩部分所組成,描述首部的格式是固定的,描述內容各不相同。描述首部格式:

    (1) LINE實體

    標識數為01H,描述段長度為28H。

    #00-#07 描述首部

    #08-#17 起點座標值 real *16

    #18-#27 終點座標值 real *16

    (2) POINT實體

    標識數為02H,描述段長度為18H

    #00-#07 描述首部

    #08-#17 點的座標值 real*16

    (3) CIRCLE實體

    標識數為03H,描述段長度為20H

    #00-#07 描述首部

    #08-#17 圓心座標值 real*16

    #18-#1F 圓的半徑 real*8

    (4) SHAPE實體

    標識數為04H,描述段長度可變

    #00-#07 描述首部

    #08-#17 插入座標值 real*16

    #18-#1F 型體高度 real*8

    #20 型體號 real*8

    #21-#28 插入角度(可省略) real*8

    若描述首部中的屬性字第0位為1,讀值存在,否則預設值為0

    #29 型體檔案號(可省) int*1

    若描述首部中的屬性字第1位為1,讀值存在,否則預設值為0

    (5) TEXT實體

    標識數為07H,描述段長度可變

    #00-#07 描述首部

    #08-#17 文字頭的座標值 real*16

    #18-#1F 字元高度 real*8

    #20-#21 字串長度 into*2

    #22 字串 char*256

    # 字元創旋轉角 real*8

    (6) ARC實體

    標識數為08H,描述段長度為30H

    #00-#07 描述首部

    #08-#17 圓心座標值 real*16

    #18-#1F 半徑 real*8

    #20-#27 起始角 real*8

    #28-#2F 終止角 real*8

    (7) TRACE實體

    標識數為09H,描述段長度為48H

    #00-#07 描述首部

    #08-#17 第一點座標值 real*16

    #18-#1F 第二點座標值 real*16

    #28-#37 第三點座標值 real*16

    #38-#47 第四點座標值 real*16

    (8) SOLID實體

    標識數為0BH,描述段長度為48H

    #00-#07 描述首部

    #08-#17 第一點座標值 real*16

    #18-#1F 第二點座標值 real*16

    #28-#37 第三點座標值 real*16

    #38-#47 第四點座標值 real*16

    複雜圖形實體:

    在DWG檔案中,複雜圖形實體指重複圖形、圖塊和多段連線實體,它們都是有不止一個標識數的實體。

    (1) 重複圖形實體

    重複圖形指某些簡單圖形的重複排列,它的描述由三部分組成,開始實體、簡單圖形實體和結束實體。

    (a)開始實體

    標識數為06H,描述段長度為08H,格式同描述首部。

    (b)結束實體

    標識數為07H,描述段長度為1CH。

    #00-#07 描述首部

    #08-#09 重複行數 int *2

    #0A-#0B 重複列數 int*2

    #14-#1B 重複行距 real*8

    #14-#1B 重複列距 real*8

    (2) 實體圖塊

    圖塊實體就是將某些簡單圖形實體看作一個整體,他的描述由三部分組成,BLOCK(圖塊開始)實體,簡單圖形實體和圖塊結束實體。

    (a) BLOCK實體

    標識數為0CH,描述段長度為08H,格式同描述首部

    (b)圖塊結束實體

    標識數為0CH,描述段長度為18H。

    #00-#07 描述首部

    #08-#17 基點座標值 real*16

    (3) POLYLINE實體

    多段連線指直線和圓弧所組合的曲線,它的描述也由三部分組成:POLYINE(多段連線)實體、結點實體和結束實體。

    (a) POLYLINE實體

    標識數為8013H,描述段長度可變

    #00-#07 描述首部

    #08 狀態值(可省) int*1

    (若屬性字第0位為1,該值存在,否則為0)

    數值0,正常;數值1 封閉;數值2 擬合

    #09-#10 起始寬度(可省)

    #11-#18 終止寬度(可省)

    (b) 結點實體

    標識數為14H,描述長度可變

    #00-#07 描述首部

    #08-#17 結點座標值

    #18-#1F 結點起始寬度

    #20-#27 結點終止寬度

    #28-#2F 凹凸值

    #30 結點狀態

    #31--#38 光滑切線方向

    (c) 結束實體

    標識數為11H,描述段長度為12H

    #00-#07 描述首部

    #08-#11 開始實體的首址

    (四) 名錶部

    該部給出了所有有名實體的描述,有名實體具體指圖塊名、LAYER圖層名、字型格式名、型體檔名,線型名和檢視名

    (1) 圖塊名

    圖塊名錶的首地址存在於DWG檔案的#32-#35H中,描述段的長度為25H,其格式為:

    #00 標識 int *1

    #01-#20 名字 char *32

    #21-#24 地址 int *4

    (2) 層名

    層名錶的首地址存於DWG檔案的#3C-#3FH中。描述段長度為25H.

    在對DWG檔案進行解析的過程中需要什麼資訊就可以在相應的段中尋找。例如你需要得到DWG檔案的直線就可以去實體部段裡取LINE實體對應的起點座標和重點座標屬性,構造出自定義直線類,其他類似。

  • 中秋節和大豐收的關聯?
  • 為什麼亞共析鋼淬火溫度範圍是Ac3以上30~50℃,而過共析鋼是Ac1以上30~50℃?急求!謝謝?