dxf 格式詳解

解析DXF圖形文件格式

一、DXF文件格式分析

DXF文件由標題段、表段、塊段、實體段和文件結束段5部分組成,其內容如下。


☆標題段(HEADER)標題段記錄AutoCAD系統的所有標題變量的當前值或當前狀態。標題變量記錄了AutoCAD系統的當前工作環境,如SNAP捕捉當前狀態、柵格間距式樣、當前圖層層名及線型、顏色等。

☆表段(TABLES)表段共包含4個表,每個表又包含可變數目的表項。這些表在文件中出現的順序是線型表(LTYPE)、圖層表(LAYER)、字樣表(STYLE)、視圖表(VIEW)。

☆塊段(BLOCK)塊段記錄了所用塊的塊名,當前圖層層名、塊的種類、塊的插入基點及組成該塊的所有成員。塊的種類分爲圖形塊、帶有屬性的塊和無名塊三種。無名塊包括用HATCH命令生成的剖面線和用DIM命令所完成的尺寸標準。

☆實體段(ENTITIES)實體段記錄了每個實體的名稱、所在圖層及其名字、線型、顏色等。

☆文件結束段(EOF OF FILE)DXF文件的結束標誌。

一個DXF文件由若干個組構成,每個組佔兩行,第一行爲組的代碼,第二行爲組值。組代碼相當於數據類型的代碼,它由CAD圖形系統所規定,而組值爲具體的數值,二者結合起來表示一個數據的含義和值。例如,代碼10代表一個點的X座標,佔一行,而其第二行4.5425則是點X座標的具體數值,二者結合表示一點,其X座標值爲4.5425。

(1)組代碼和組值的類型組代碼爲一個非負的不超過三位的整數,而組值由組代碼的類型決定。例如:

代碼0~9組值類型爲字符型。
代碼10~59組值類型爲實型。
代碼60~79組值類型爲整型。
代碼999表示解釋行。

(2)組代碼的含義每個組代碼均有規定的含義,有些代碼含義是固定的,而有些組代碼則因應用場合不同而有多個含義,應具體分析。另外,一些代碼是備用的,目前版本尚未用到,現將他們的含義舉例介紹如下。

0:表示一個事物的開始,如一個塊、表、圖層、實體等。
1:字符型數據的值,如TEXT的字符串、文件名、屬性值等。
2:一個事物的名字,如段、表、塊、線型、視圖等的名字。
3~5:字符型數據的值,如文件名、線型說明等。
6:線型名(固定類型)。
8:圖層名(固定類型)。

關於實體的座標與相應的組代碼10~18、20~28、30~38的用法應根據實體所用到點的數量,按組代碼個位的0、1、2、……的順序使用。例如LINE的起點組代碼爲10、20、30,而11、21、31爲其終點。其他類似。

DXF文件的結構相當複雜,完整讀取DXF文件也是一項異常繁瑣的工程。在實際應用中,爲了提取圖形的實體信息,可以省略DXF文件中的許多項,只要獲取其中的層表、塊段和實體段,就可以完成相應幾何圖形的描述。在層表中說明每一層的顏色、線型,在塊段中說明塊所在的層、屬性及其在圖形中的位置,在實體段中說明直線的起點、終點及圓的圓心、半徑等幾何信息和各實體所在的層。根據實體所在的層,在層表中搜索每一層的顏色、線型並將其添加到實體對象中。在利用CAD進行繪圖時,需將變量參數DIMASO設爲ON,以保證塊段中定義的尺寸塊爲一個整體,並可被正確無誤地獲取。根據尺寸類型名、尺寸定義的起點、終點座標與實體類型名、實體空間座標是否匹配,對實體對象進行尺寸附加。在繪圖時,如對自定義的粗糙度、形位公差等塊不進行"EXPLODE"炸開操作,也可通過增加相應讀取函數提取其屬性。

下面舉例說明實體段在DXF文件中的格式。

圓弧(ARC)

0(開始)ARC(圓弧)
8(層的組碼)
W1(層名爲"W1")
10(圓弧圓心的X座標組碼)
7.0(圓弧圓心的X座標組值)
20(圓弧圓心的Y座標組碼)
9.0(圓弧圓心的Y座標組值)
30(圓弧圓心的Z座標組碼)
0.0(圓弧圓心的Z座標組值)
40(圓弧的半徑組碼)
25.0(圓弧的半徑值)
50(圓弧的起始角度組碼)
90.0(圓弧的起始角度值)
51(圓弧的終止角度組碼)
180.0(圓弧的終止角度組值)

若實體的線型用BYLAYER,顏色爲256(即BYLAYER),基面高度和厚度爲零,其格式可簡化。

對於其他圖形實體的格式描述(LINE、CIRCLE、TEXT等),這裏就不再一一詳述了。

 

二、幾何圖形實體信息的提取

生成DXF文件必須首先進入圖形編輯環境,在命令(Command)提示下鍵入DXFOUT,回答所需的一個文件名後,即把內部壓縮格式的圖形數據轉換爲ASCⅡ的數據並寫入相應DXF文件(以DXF爲擴展名)中,供應用程序提取並處理實體數據。

三、幾何圖形描述的數據結構

通過對CAD系統的DXF圖形交換文件進行分析,可以得到描述零件的全部幾何圖形元素。爲簡化問題,設定組成零件內外輪廓的圖形元素只包括點、直線和圓弧,並分別用下列數據結構表示。

點:class POINT { float x;float y;float z;}虛基類:class SHAPE{ //由虛基類派生出直線、圓弧,便於鏈表操作public:
[replyview]
virtual void showEntity()=0;//表示此函數在派生類中必須定義……//在此定義其他虛函數} 直線:class LINE:public SHAPE,public POINT{ public://直線類由兩個基類SHAPE和POINT派生而來POINT start_point;//直線起點POINT end_point;//直線終點……//在此定義其他內部變量和函數}圓弧:class ARC:public SHAPE,public POINT{ public://圓弧類由兩個基類SHAPE和POINT派生而來POINT center_point;//圓弧圓心POINT start_point;//圓弧起點POINT end_point;//圓弧終點float radius;//圓弧半徑……//在此定義其他內部變量和函數}結點:struct Node //定義結點,便於鏈表內部刪除,增加和修改{SHAPE *Item;//內容域Node *llink;//左指針Node *rlink;//右指針} 鏈表:class LIST { //鏈表類private:

Node *head;//結點頭指針public:

LIST();//構造函數,進行變量初始化void~LIST();//析構函數,釋放內存void addEntity(SHAPE *);//定義增加圖形元素的函數……//在此定義其他函數}由此,迴轉體零件的幾何圖形元素不難用上述數據結構以線性鏈表進行存儲。完整的特徵識別系統不僅僅包含幾何信息,還要包括加工工藝信息,而常用的幾何造型CAD系統並不提供後者。爲此,我們在AutoCAD系統中定義了一套工藝信息塊,其全部以圖形文件塊的形式存儲,這些信息包括:形狀公差(直線度、平面度、圓度、圓柱度、線輪廓度和麪輪廓度)、位置公差(平行度、垂直度、傾斜度、同軸度、對稱度、位置度、圓跳動和全跳動)、表面粗糙度和基準等。[/replyview]

介紹了DXF文件的結構,分析組值和組代碼的含義,然後說明讀取DXF文件的方法,最後簡單介紹了實現此功能模塊的數據結構

這個對dxf初學者有用,支持一下哦.

 

 

 

DXF文檔詳解

 

DXF的基本慣例

 

DXF格式是特定版本AutoCAD圖形文件中所包含的全部信息的標記數據的一種表示方法。

標記數據的意思是指在每個數據元素前都帶一個稱爲組碼的整數。組碼的值表明了其後數據元素的類型,也指出了數據元素對於給定對象(或記錄)類型的含意。實際上,圖形文件中所有用戶指定的信息都能夠以DXF文件格式表示。在AutoLISP和ARX應用程序中使用的DXF格式與上述格式基本相同,只是在某些數據組上存在着細微的差別。

如不作特殊說明,本節中所出現的組碼都可以應用於DXF文件、AutoLISP應用程序和ARX應用程序。當組碼說明對於應用程序和DXF文件有所不同時(或只適用於其中之一),在組碼的說明前有如下提示符:

APP只用於應用程序的說明

DXF只用於DXF文件的說明

如果組碼說明對DXF文件和應用程序都適用,那麼沒有提示符;否則將顯示適當的提示符。

 

組碼範圍

組碼將與組碼關聯的值(組值)定義爲整型、浮點數型或字符串型。具體說明如下表:

組碼範圍    組碼範圍組值類型

0-9            字符串(最多255個字符,對於UNICODE字符串則更少)

10-59        雙精度三維點

60-79        16位整數值

90-99        32位整數值

100            字符串(最多255個字符,對於UNICODE字符串則更少)

102            字符串(最多255個字符,對於UNICODE字符串則更少)

105            表示十六進制句柄值的字符串

140-147        雙精度標量浮點值

170-175        16位整數值

280-289        8位整數值

300-309        任意文字字符串

310-319        表示二進制數據組的十六進制值的字符串

320-329        表示十六進制句柄值的字符串

330-369        表示十六進制對象標識符的字符串

999            註釋(字符串)

1000-1009    字符串(最多255個字符;對於UNICODE字符串則更少)

1010-1059    浮點值

1060-1070    16位整數值

1071        32位整數值

 

按數字次序排列的組碼

下表給出了組碼(或組碼範圍)及其說明。在表中,"固定"表示該組碼的用途固定不變,非固定組碼的用途將隨上下文變化。

按數字次序排列的圖元組碼

組碼說明

-5APP:persistentreactor鏈表

-4APP:條件運算符(僅用於ssget)

-3APP:擴展數據(XDATA)標記(固定)

-2APP:圖元名引用(固定)

-1APP:圖元名。每次打開圖形時它都改變,且不被保存。(固定)

 

0    表示圖元類型的文字字符串(固定)

1    圖元的主要文字值

2    名稱(屬性標記、塊名稱等)

3-4    其他的文字值或名稱值

5    圖元句柄。最多16位十六進制數字的文字字符串(固定)

6        線型名(固定)

7        文字樣式名(固定)

8        圖層名(固定)

9        DXF:變量名標識符(僅用於DXF文件的HEADER區域)。

10        主要點。此點爲直線或文字圖元的起點,圓的圓心等等。

DXF:主要點的X值(其後爲Y和Z值的組碼20和30)

APP:三維點(三個實數構成的表)

11-18    其他點。

DXF:其他點的X值(其後爲Y和Z值的組碼21-28和31-38)

APP:三維點(三個實數構成的表)

20,30    DXF:主要點的Y和Z值

21-28,

31-37    DXF:其他點的Y和Z值

38        DXF:如果非零,則爲圖元的標高。只在R11以前的AutoCAD輸出的DXF文件中存在

39        如果非零,則爲圖元的厚度(固定)

40-48    浮點值(文字高度、比例因子等)

48        線型比例。浮點標量值。缺省值適用於所有圖元類型。

49        可重複的浮點值。一個圖元中的可變長度表(例如LTYPE表中的虛線長度)中可出現多個組碼49。組碼7x總是在第一個組碼49前出現,用於指定表的長度。

50-58    角度(在DXF文件中單位爲度,在AutoLISP和ARX應用程序中單位爲弧度)。

60        表示圖元可見性的整數值。不賦值或值爲0時表示可見;爲1時表示不可見。

62        顏色代碼(固定)

66        "圖元跟隨"標誌(固定)

67        空間,即模型空間或圖紙空間(固定)

68        APP:表示視口打開但不可見、未激活或者關閉。

69        APP:視口標識數字。

70-78    整數值,如重複部分的計數器、標誌位或模式等。

90-99    32位整數值

100        子類數據標記(把繼承下來的類名當作字符串)。由具體類繼承下來的所有對象和圖元類都必須有此項。此標記用於分離某個對象中由不同的類定義的數據。它也滿足從ARX繼承下來的每個獨立的具體類的DXF命名需要(請參見子類標記!AL(`XREF_11832_al_u05_c',1))。

102        控制字符串,其後爲"{<任意名稱>"或"}"。除了字符串必須以"{"開始外,它與外部數據組碼1002類似。其後可跟任意字符串,且此字符串的解釋取決於應用程序。另一個可用的控制字符串爲"}",它標識組的結束。如上所述,除了在執行圖形覈查操作期間外AutoCAD一般不解釋這些字符串;它們僅用於應用程序。

105        DIMVAR符號表條目對象句柄。

210        拉伸方向(固定)。

DXF:拉伸方向的X值

APP:三維拉伸方向矢量

220,230    DXF:拉伸方向的Y和Z值

280-289    8位整數值

300-309    任意的文字字符串

310-319    任意二進制數據組,與組碼1004具有相同表示法和限制:最長爲254個字符的十六進制字符串表示最長爲127個字節的數據數據組。

320-329    任意對象句柄。句柄值保留原樣,在執行INSERT和XREF操作時它們不被轉化。

330-339    軟鍵指針句柄。任意指向同一DXF文件或圖形中的其他對象的軟鍵指針,在執行INSERT和XREF操作時被轉化。

340-349    硬鍵指針句柄。任意指向同一DXF文件或圖形中的其他對象的硬鍵指針,在執行INSERT和XREF操作時被轉化。

350-359    軟鍵從屬句柄。鏈接到同一DXF文件或圖形中其他對象的任意軟鍵從屬鏈接,在執行INSERT和XREF操作時被轉化。

360-369    硬鍵從屬句柄。鏈接到同一DXF文件或圖形中其他對象的任意硬鍵從屬鏈接,在執行INSERT和XREF操作時被轉化。

999        DXF:999組碼錶示其後爲註釋字符串行。DXFOUT不在DXF輸出文件中包括此組;DXFIN能識別詞組碼,但忽略其後的註釋。通過999組碼,用戶可以在所編輯的DXF文件中包括註釋。

1000    擴展數據中的ASCII字符串(最長255個字節)。

1001    擴展數據的已註冊應用程序名(ASCII字符串,最長31個字節)。

1002    擴展數據控制字符串("{"或"}")。

1003    擴展數據圖層名。

1004    擴展數據中的字節數據組(最長127字節)。

1005    擴展數據中的圖元句柄。文字字符串,最多16位十六進制數字。

1010    擴展數據中的點

DXF:X值(其後跟組碼1020和1030)

APP:三維點

1020,1030    DXF:點的Y和Z值

1011        擴展數據中的三維世界空間位置:X值(其後跟組碼1021和1031):三維點

1021,1031    DXF:世界空間位置的Y和Z值。

1012    擴展數據中的三維世界空間位移:X值(其後跟組碼1022和1032):三維矢量

1022,1032    DXF:世界空間位移的Y和Z值

1013    擴展數據中的三維世界空間方向

DXF:X值(其後跟組碼1022和1032)

APP:三維矢量

1023,1033    DXF:世界空間方向的Y和Z值

1040    擴展數據浮點值。

1041    擴展數據距離值。

1042    擴展數據比例因子。

1070    擴展數據16位符號整數。

1071    擴展數據32位符號整數。

   

   

對象和圖元的組碼

在DXF格式中,對象的定義與圖元的定義不同:圖元有圖形表示,而對象則沒有圖形表示。例如,詞典是對象而不是圖元。對象通常作爲非圖形對象來使用,圖元則作爲圖形對象來使用。

在DXF文件中,圖元可以出現在BLOCK和ENTITIESE區域中。兩個區域中圖元的用法一樣。某些定義圖元的組碼始終會出現,而其他的組碼僅在它們的值與缺省值不同時纔出現。

讀取DXF文件的程序不應該假定說明圖元的組碼是按照給定次序出現的。與說明圖元的組碼相連的0組碼錶示此圖元已結束。0組碼將開始新圖元或表示此區域已結束。

注意如果用戶以表驅動方式(即忽略未定義的組碼,且對圖元中的組碼次序不做任何假定)編寫DXF處理程序,那麼該程序將比較容易針對AutoCAD的後續版本做調整。因爲AutoCAD的性能將不斷得到增強,所以圖元中將添加一些新的組碼以提供更多的功能。

 

 

讀取DXF格式文件

 

 

OpenGL是美國SGI公司最新推出的一套開放式的三維圖形軟件接口,適用於廣泛的計算機環境,從個人計算機到工作站,OpenGL都能實現高性能的三維圖形功能。OpenGL本身不僅提供對簡單圖元的操作和控制,還提供了許多函數用於複雜物體的建模。但是,我們通常喜歡使用AutoCAD和3DS及3Dmax等工具來建立模型,並且我們已經有了很多這樣的模型,那麼我們如何才能資源共享,避免重複勞動呢?利用CAD圖形標準數據交換格式—DXF格式,我們就能很容易地實現資源共享,而不需要重複建模。

 

DXF文件的結構很清楚,具體如下:

1.標題段(HEADER)

有關圖形的一般信息都可以DXF文件的這一節找到,每一個參數具有一個變量名和一個相關值。

 

2.表段

這一段包含的指定項的定義,它包括:

a、線形表(LTYPE)

b、層表(LYER)

c、字體表(STYLE)

d、視圖表(VIEW)

e、用戶座標系統表(UCS)

f、視窗配置表(VPORT)

g、標註字體表(DIMSTYLE)

h、申請符號表(APPID)

 

3.塊段(BLOCKS)

這一段含有塊定義實體,這些實體描述了圖形種組成每個塊的實體。

 

4.實體段(ENTITIES)

這一段含有實體,包括任何塊的調用。

 

5.ENDOFFILE(文件結束)

 

 

下面是對DXF的基本結構舉一實例進行說明:

0    0後接SECTION    SECTION表明這是一個段的開始

2    2後接的是段名    HEADER說明該段是HEADER段(標題段)

9

    $ACADVER文件是由AUTOCAD產生的

1

AC1008

9    9後接$UCSORG    $UCSORG用戶座標系原點在世界座標系中的座標

10    10對應X    0.0X的值

20    20對應Y    0.0Y的值

30    30對應Z    0.0Z的值

 

9    $UCSXDIR這是一段不太相關的部分,略去

10

1.0

.......

9    9後接$EXTMIN    $EXTMIN說明三維實體模型在世界座標系中的最小值

10    10對應X    -163.925293X的值

20    20對應Y    -18.5415860.0Y的值

30    30對應Z    78.350945Z的值

9    9後接$EXTMAN    $EXTMAX說明三維實體模型在世界座標系中的最大值

10    10對應X    202.492279X的值

20    20對應Y    112.634300Y的值

30    30對應Z    169.945602Z的值

0    0後接ENDSEC    ENDSEC說明這一段結束了

0    0後接SECTION    SECTION表明這是一個段的開始

2    2後接的是段名    TABLES說明該段是TABLES段(表段)

............該段對我們不太相關,此處略去不進行說明

0    0後接ENDSEC    ENDSEC說明這一段結束了

0    0後接SECTION    SECTION表明這是一個段的開始

2    2後接的是段名    ENTITIES說明該段是ENTITIES段(實體段)這是我們要詳細說明的段,該段包含了所有實體的POLYLINE點的座標和組成面的點序。

0後接POLYLINE    

 

8    表明以下數據是對於一個新的實體;

OBJECT018後接的字符串是這個實體的名稱

66

1

70從66 1到70 64

64說明該實體是由許多小平面組成的

71

38 71 38說明該實體共有38個點

72

72 72 72說明該實體由72個三角形構成

00VERTEX

VERTEX表明後面緊跟着的是實體的數據

8

OBJECT01

10對應X座標    -163.925293X的值

20對應Y座標    -17.772665Y的值

30對應Z座標    128.929947Z的值

70 70 192

192表明上面的數據信息是點的座標

0每一個從0VERTEX到70 192之間VERTEX的一小段是點的座標

.........

70

192

0

VERTEX

8

OBJECT01

10

0

20

0

30

0    當70後跟128時,表明該實體的每個點的座標數據已經記錄70完了,下面緊跟着的是記錄這些點是以什麼樣的方式組合成各128個三角形。

71    71、72、73後面跟着的值表明某一個三角形是第二個、第2一個、第四個點構成的,點的順序是按照記入DXF文件的順72序。當某一值爲負數時,則表明該點到下一點的線不要畫出,1如果要畫三維實體的線型圖,就必須使用這一特性,否則線條73將會出現紊亂。

-4

0

VERTEX

............

0    0後接SEQEND表明該實體的數據已經全部記錄完了

SEQEND

8

OBJECT01

0

POLYLINE0後接POLYLINE表明以下又是一個新的實體

............

0

ENDSEC0後接ENDSEC表明這是該段的結尾

0

EOF0後接EOF表明這個DXF文件結束了

 

在DXF文件中,我們最關心的是如何得到模型上各個點的座標,並且用這些點連成許多個三用形,構成面,進而繪製出整個模型。在DXF文件的結構中,我們已經看到,DXF文件先敘述實體上各個點的座標,然後敘述實體上有多少個面,每個面由哪些點構成。這樣,我們至少需要2個數組來存儲一個實體的信息,一個用於存儲點的座標,一個用於存儲點序,我們可以把這2個數組放到一個結構中,如果模型中實體的數目不止一個是,我們就用這個結構來定義一個數組。在本文中,我們使用

VisualC++6.0來寫一個讀取DXF文件的小程序。

在實際應用中,模型中實體的數目以及實體中點和麪的數目都是不定的,爲了有效地利用內存,我們選擇MFC類庫中的聚合類CobArray類所創建的對象vertex,

sequence來存儲和管理實體的點座標和點序。

CObArray類是一個用來存放數組類的聚合類,它能根據要存進來的數組(或結構)多少自動進行自身大小的高速,而且這個類本身具有的成員函數使得我們對它的對象的操作更加方便、快捷,用它編的程序也易於讀懂。

三維實體模型的模型信息中的一部分信息可以在標題段中讀出,通過讀取變量名爲$UCSORG的三個變量,可以得到三維實體在世界座標系中自身所定義的用戶座標系原點的三維座標。通過讀取$EXTMAX,$EXTMIN可以獲知三維實體在世界座標系中的範圍,而其它部分的信息只有讀完了全部DXF文件後纔可以通過計算確定。對於三維實體模型的全部點座標、點序,可以在實體段中按照前面介紹的DXF文件基本結構讀出。現在我們開始寫這個程序。

先建立一個頭文件HEAD.H定義如下的結構:VERTEX,SEQUENCE和類CVertex,Csequence。

typedefstruct{

floatx,y,z;

}VERTEX;

//結構VERTEX用來存儲點的座標

 

typedefstruct{

inta,b,c;

}SEQUENCE;

//結構SEQUENCE用來存儲實體的面的組成

 

typedefstruct{

charobName[20];

/*定義結構myVertex來存儲實體的名字,點的座標以及面的組成,CObArrayVertex;其中,點的座標和麪的組成是由聚合類CObArray定義的對象來CObArraySequence;在存儲的,我們可以把VERTEX結構和SEQUENCE結構加入到這兩個對象中保存*/

}myVertex;

 

classCVertex:publicCObject

{因爲CObArray類的對象中只能加入由CObject派生的對象,所以protected:我們還需要建立一個由CObject類派生的CVertex類。在CVertex類CVertex();中有一個VERTEX結構的變量:m_vertex,信息實際上是存儲在這DECLARE_DYNCREATE(CVertex)個變量中的。

virtual~CVertex();

 

//Attributes

public:我們還需要建立一個由CObject類派生的CVertex類。在CVertex類CVertex(VERTEX&ver);中有一個VERTEX結構的變量:m_vertex,信息實際上是存儲在這個變量中的,函數CVertex(VERTEX&ver)把VERTEX結構的變量VERTEXm_vertex;存入CObArray對象中。

};

 

classCSequence:publicCObject{這也是一個由CObject類派生的類,作用和剛纔CVertex類一樣,protected:只不過Csequence類是用來存儲實體中面的組成(點序)的。

CSequence();

DECLARE_DYNCREATE(CSequence)

virtual~CSequence();

 

public:CSequence(SEQUENCE&sequ);

SEQUENCEm_sequence;

};

 

聲明好結構與類後,我們還需要建立一個.CPP文件,來定義幾個函數。

IMPLEMENT_DYNCREATE(CVertex,CObject)

CVertex::CVertex()

{

}

 

CVertex::~CVertex()構造函數和銷燬函數都是空的

{

}

 

CVertex::CVertex(VERTEX&ver)

{這個函數的作用是:把一個VERTEX結構的數據存入變量m_vertex中m_vertex=ver;它是這個類中最重要的一環。

}

 

IMPLEMENT_DYNCREATE(CSequence,CObject)

CSequence::CSequence()

{

}Csequence類的定義與CVertex類的定義差不多,只是其中的參數m_sequence的類型和CVertex類中的參數my_vertex的類型不一樣

CSequence::~CSequence()

{

}

 

CSequence::CSequence(SEQUENCE&sequ)

{

m_sequence=sequ;

}

 

然後用結構myVertex(如前所定義)定義一個指針*myData,目的在於根據模型中實體的多少來給指針分配合適的內存,使之成爲結構數組。

定義一個函數,用於確定模型中有多少個實體,函數的返回值就是實體的個數。

intCJupiterView::getObjectNumber()

{

charstr1[10],str2[10];

charname[]="theFirst";

intnum;

 

num=0;

 

FILE*fp;

fp=fopen("data.dxf","r");打開DXF文件,data.dxf

while(!feof(fp)&&!ferror(fp))這個函數是根據實體的名字來判斷實體的個數的

{所以函數只讀取實體的名字,一旦出現新的實體名字,fscanf(fp,"%s\n",str1);實體數就加一。

if(strcmp(str1,"VERTEX")==0)

{

fscanf(fp,"%s\n",str2);打開DXF文件,data.dxf

fscanf(fp,"%s\n",str2);這個函數是根據實體的名字來判斷實體的個數的

if(strcmp(name,str2)!=0)所以函數只讀取實體的名字,一旦出現新的實體名字,{實體數就加一。

strcpy(name,str2);

num++;

}

}

}

fclose(fp);

 

returnnum;

}

 

以下是讀取實體點的座標以及點序的程序代碼,在這個程序中,讀取了模型中點的座標的最大值與最小值、實體的名字、點的座標,以及點序。

voidCJupiterView::OnFileInput()

{

//TODO:Addyourcommandhandlercodehere

FILE*fp,*fp2;

inti,k,j;

floattempX,tempY,tempZ;

 

floatxMin,yMin,zMin,xMax,yMax,zMax,Max;

intlab;

charstr1[20],str2[20],str[20],HT;

charmyName[20];

intmyNumber;

VERTEXtempVertex;

SEQUENCEtempSequence;

 

typedefstruct{

floatx,y,z,max;

}MAX;

 

MAXmax;

HT=9;

 

objectNumber=getObjectNumber();

myData=newmyVertex[objectNumber];

 

fp=fopen(FileName,"r");

 

i=0;

j=0;

k=0;

 

myNumber=-1;

strcpy(myName,"ObjectName");

 

while(!feof(fp)&&!ferror(fp))

{

fscanf(fp,"%s\n",str);

 

if(strcmp(str,"$EXTMIN")==0)

{

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&xMin);

 

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&yMin);

 

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&zMin);

}

 

if(strcmp(str,"$EXTMAX")==0)

{

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&xMax);

 

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&yMax);

 

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&zMax);

 

max.x=max(abs(xMax),abs(xMin));

max.y=max(abs(yMax),abs(yMin));

max.z=max(abs(zMax),abs(zMin));

max.max=max(max.x,max.y);

max.max=max(max.max,max.z);

 

 

}

 

if(strcmp(str,"VERTEX")==0)

{

fscanf(fp,"%s\n",str1);

fscanf(fp,"%s\n",str1);

 

if(strcmp(myName,str1)!=0)

{

myNumber++;

strcpy(myName,str1);

strcpy((myData+myNumber)->obName,myName);

}

 

 

fscanf(fp,"%s\n",str2);

fscanf(fp,"%f\n",&tempX);

 

fscanf(fp,"%s\n",str2);

fscanf(fp,"%f\n",&tempY);

 

fscanf(fp,"%s\n",str2);

fscanf(fp,"%f\n",&tempZ);

 

fscanf(fp,"%d\n",&lab);

fscanf(fp,"%d\n",&lab);

 

if(lab==192)

{

tempVertex.x=tempX/max.max;

tempVertex.y=tempY/max.max;

tempVertex.z=tempZ/max.max;

(myData+myNumber)->Vertex.Add(newCVertex(tempVertex));

 

 

}

 

if(lab==128)

{

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&tempX);

 

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&tempY);

 

fscanf(fp,"%s\n",str1);

fscanf(fp,"%f\n",&tempZ);

 

tempSequence.a=abs(tempX);

tempSequence.b=abs(tempY);

tempSequence.c=abs(tempZ);

 

(myData+myNumber)->Sequence.Add(newCSequence(tempSequence));

 

}

 

}

}

fclose(fp);

}

 

 

區域

 

 

本節中描述的組碼僅適用於DXF文件。

DXF文件的HEADER區域包括與圖形相關聯的變量的設置。其中的每一個變量都通過組碼9給出變量名,並由其後的組碼提供變量值。注意:AutoCAD命令參考中的附錄B"系統變量"中的一些變量不出現在DXF文件中。

通過執行函數getvar,應用程序可以檢索這些變量的值。

下面是DXF文件的HEADER區域的樣例:

0    SECTION

2    HEADER區域的開始

9    $<variable>

<groupcode>

<value>    對每個表頭變量重複

0    HEADER區域的結束

======================================================================

下表列出了保存在DXF文件中的變量。

======================================================================

DXF系統變量    變量組碼說明

$ACADVER        1

                AutoCAD圖形數據庫版本號:    AC1006=R10,AC1009=R11和R12,

AC1012=R13,AC1014=R14,AC1018=?

$ACADMAINTVER    70    76

$ANGBASE        500    角度的方向

$ANGDIR        70    1=角爲順時針方向,0=逆時針方向

$ATTDIA        70    屬性條目對話框:1=開,0=關

$ATTMODE        70    屬性可見性:0=無,1=普通,2=全部

$ATTREQ        70    INSERT期間的屬性提示:1=開,0=關

$AUNITS        70    角的單位格式

$AUPREC        70    角的單位精度

$BLIPMODE        70    如果非零,則"點標記"模式打開

$CECOLOR        62    當前圖元顏色代碼:0=BYBLOCK,256=BYLAYER

$CELTSCALE    40    當前圖元線型比例

$CELTYPE        6    圖元線型名稱,也可爲BYBLOCK或BYLAYER

$CHAMFERA    40    第一個倒角距離

$CHAMFERB    40    第二個倒角距離

$CHAMFERC    40    倒角長度

$CHAMFERD    40    倒角角度

$CLAYER        8    當前圖層名

$CMLJUST        70    當前多線對正模式:0=頂端,1=中間,2=底端

$CMLSCALE        40    當前多線比例

$CMLSTYLE        2    當前多線樣式名

$COORDS        70    座標顯示方式:0=靜態的,1=持續更新,2="d<a"格式

$DELOBJ        70    控制是否刪除對象:0=刪除,1=保留

$DIMALT        70    如果非零,則標註中執行換算單位

$DIMALTD        70    換算單位小數位數

$DIMALTF        40    換算單位比例因子

$DIMALTTD        70    換算單位標註的公差值的十進制小數位數

$DIMALTTZ        70    控制替換公差值的消零:    0=清除零英尺並精確到零英寸

1=包括零英尺並精確到零英寸

2=包括零英尺並清除零英寸

3=包括零英寸並清除零英尺

$DIMALTU    70    所有標註樣式族成員(不包括角度)換算單位的單位格式:

1=科學;2=十進制;3=工程;4=建築(堆疊);5=分數(堆疊);6=建築;7=分數

$DIMALTZ    70    控制換算單位標註值的消零:    0=清除零英尺並精確到零英寸

1=包括零英尺並精確到零英寸

2=包括零英尺並清除零英寸

3=包括零英寸並清除零英尺

$DIMAPOST    1    替換標註後綴

$DIMASO    70    1=創建關聯標註,0=繪製獨立圖元

$DIMASZ    40    標註箭頭的尺寸

$DIMAUNIT    70    角度標註的單位格式:0=十進制度數;1=度/分/秒;2=百分度;3=弧度;4=勘測

$DIMBLK    1    箭頭塊名

$DIMBLK    11    第一箭頭塊名

$DIMBLK    21    第二箭頭塊名

$DIMCEN    40    中心標記/中心線的尺寸

$DIMCLRD    70    尺寸線顏色:範圍爲0=BYBLOCK,256=BYLAYER

$DIMCLRE    70    尺寸界線顏色:範圍爲0=BYBLOCK,256=BYLAYER

$DIMCLRT    70    標註文字顏色:範圍爲0=BYBLOCK,256=BYLAYER

$DIMDEC    70    主單位標註公差值的小數位數

$DIMDLE    40    尺寸線範圍

$DIMDLI    40    尺寸線增量

$DIMEXE    40    尺寸界線範圍

$DIMEXO    40    尺寸界線偏移

$DIMFIT        70    文本和箭頭的放置;可能值:0到3

$DIMGAP    40    尺寸線的間距

$DIMJUST    70    水平標註文字位置:    0=在尺寸線上方且與尺寸界線間中心對正;

1=在尺寸線上方且與第一尺寸界線相鄰;

2=在尺寸線上方且與第二尺寸界線相鄰;

3=在第一尺寸界線上方且與之中心對正;

4=在第二尺寸界線上方且與之中心對正;

$DIMLFAC    40    線型測量比例因子

$DIMLIM    70    如果非零,則生成標註圖形界限

$DIMPOST    1    基本標註後綴

$DIMRND    40    標註距離的舍入值

$DIMSAH    70    如果非零,則使用單獨的箭頭塊

$DIMSCALE    40    全局標註比例因子

$DIMSD        170    控制是否清除第一尺寸線:0=不清除;1=清除

$DIMSD        270    控制是否清除第二尺寸線:0=不清除;1=清除

$DIMSE        170    如果非零,則清除第一尺寸界線

$DIMSE        270    如果非零,則清除第二尺寸界線

$DIMSHO    70    1=拖動後重新計算標註;0=拖動原圖像

$DIMSOXD    70    如果非零,則清除外部尺寸尺寸線

$DIMSTYLE    2    標註樣式名稱

$DIMTAD    70    如果非零,則文字在尺寸線上方

$DIMTDEC    70    公差值的十進制數位數

$DIMTFAC    40    標註公差顯示比例因子

$DIMTIH    70    如果非零,則文字在水平方向內

$DIMTIX    70    如果非零,則強制文字在尺寸線之間

$DIMTM        40    負公差

$DIMTOFL    70    如果非零,則當文字在範圍外時,強制直線範圍在尺寸界線之間

$DIMTOH    70    如果非零,則文字在水平方向之外

$DIMTOL    70    如果非零,則生成標註公差

$DIMTOLJ    70    公差值的垂直對正模式:0=頂端;1=中間;2=底端

$DIMTP        40    正公差

$DIMTSZ    40    標註標記尺寸:0=無標記

$DIMTVP    40    文字垂直位置

$DIMTXSTY    7    標註文字樣式

$DIMTXT    40    標註文字高度

$DIMTZIN    70    控制公差值的消零:    0=清除零英尺並精確到零英寸

1=包括零英尺並精確到零英寸

2=包括零英尺並清除零英寸

3=包括零英寸並清除零英尺

$DIMUNIT    70    所有的標註樣式族成員(角度除外)的單位格式:

1=科學;2=十進制;3=工程;

4=建築(堆疊);5=分數(堆疊);

6=建築;7=分數

$DIMUPT    70    用戶放置文字的光標功能:0=只控制尺寸線位置:1=同時控制尺寸線和文字位置

$DIMZIN    70    控制主單位值的消零:    0=清除零英尺並精確到零英寸

1=包括零英尺並精確到零英寸

2=包括零英尺並清除零英寸

3=包括零英寸並清除零英尺

$DISPSILH    70    控制線框圖模式中體對象輪廓曲線的顯示:0=關;1=開

$DRAGMODE    70    0=關;1=開;2=自動

$DWGCODEPAGE    3圖形代碼頁;

當新圖形創建時,設置爲系統代碼頁,但AutoCAD不作另外的維護。

$ELEVATION        40    命令ELEV設置的當前標高

$EXTMIN        10,20,30圖形的X、Y和Z延伸到左下角(在WCS中)

$EXTMAX        10,20,30圖形的X、Y和Z延伸到右上角(在WCS中)

$FILLETRAD        40    圓角半徑

$FILLMODE        70    如果非零,則"填充"模式打開

$HANDLING        70    下一個可用句柄

$HANDSEED        5    下一個可用句柄

$INSBASE        10,20,30命令BASE設置的插入基點(在WCS中)

$LIMCHECK        70當檢查圖形界限時非零

$LIMMAX        10,20XY圖形界限延伸至右上角(在WCS中)

$LIMMIN        10,20XY圖形界限延伸至左下角(在WCS中)

$LTSCALE        40全局線型比例

$LUNITS        70座標和距離的單位格式

$LUPREC        70座標和距離的單位精度

$MAXACTVP    70設置要生成的視口數目的最大值

$MEASUREMENT    70設置圖形單位:0=英制;1=公制

$MENU                1菜單文件名

$MIRRTEXT            70如果非零,則鏡像文字

$ORTHOMODE        70如果非零,則打開"正交"模式

$OSMODE            70運行對象捕捉模式

$PDMODE            70點顯示模式

$PDSIZE                40點顯示尺寸

$PELEVATION        40當前圖紙空間標高

$PEXTMAX            10,20,30圖紙空間的X、Y和Z延伸的最大值

$PEXTMIN            10,20,30圖紙空間的X、Y和Z延伸的最小值

$PICKSTYLE            70控制編組選擇集和關聯填充選擇集:

0=無編組選擇集和關聯填充選擇集;

1=有編組選擇集;

2=有關聯填充選擇集;

3=有編組選擇集和關聯填充選擇集

$PINSBASE        10,20,30圖紙空間插入基點

$PLIMCHECK    70如果非零,則在圖紙空間中檢查圖形界限

$PLIMMAX        10,20圖紙空間中最大的X和Y圖形界限

$PLIMMIN        10,20圖紙空間中最小的X和Y圖形界限

$PLINEGEN        70管理二維多段線頂點周圍的線型圖案的生成:

0=在多段線周圍以連續圖案生成線型;

1=每段多段線都以虛線開始和結束

$PLINEWID        40缺省的多段線寬度

$PROXYGRAPHICS    70控制代理對象圖像的保存

$PSLTSCALE        70控制圖紙空間線型比例:

0=無指定的線型比例;

1=由視口比例控制線型比例

$PUCSNAME        2當前圖紙空間的UCS名

$PUCSORG        10,20,30當前圖紙空間的UCS原點

$PUCSXDIR        10,20,30當前圖紙空間的UCSX軸

$PUCSYDIR        10,20,30當前圖紙空間的UCSY軸

$QTEXTMODE    70如果非零,則打開快速文字模式

$REGENMODE    70如果非零,則打開REGENAUTO模式

$SHADEDGE        700=面着色,邊不突出顯示;

1=面着色,邊以黑色突出顯示;

2=面不填充,邊爲圖元顏色;

3=面爲圖元顏色,邊爲黑色

$SHADEDIF        70    環境/漫射光百分數,取值範圍爲1-100,缺省值爲70

$SKETCHINC    40    徒手畫記錄增量

$SKPOLY        70    0=徒手畫線條;1=徒手畫多段線

$SPLFRAME        70    樣條曲線控制多邊形顯示:1=開;0=關

$SPLINESEGS    70    每個樣條曲線片的線段數

$SPLINETYPE    70    PEDIT樣條曲線的曲線類型

$SURFTAB        170    在第一方向上的網格列表數目

$SURFTAB        270    在第二方向上的網格列表數目

$SURFTYPE        70    PEDIT平滑着色的表面類型

$SURFU            70    在M方向上的(PEDIT平滑着色的)表面密度

$SURFV            70    在N方向上的(PEDIT平滑着色的)表面密度

$TDCREATE        40    圖形創建的日期/時間

$TDINDWG        40    圖形的累計編輯時間

$TDUPDATE        40    圖形最近一次更新的日期/時間

$TDUSRTIMER    40    用戶流逝計時器

$TEXTSIZE        40    缺省文本高度

$TEXTSTYLE    7    當前文字樣式名

$THICKNESS    40    命令ELEV設置的當前厚度

$TILEMODE        70    1與早期版本兼容;0不兼容

$TRACEWID        40    缺省寬線寬度

$TREEDEPTH    70    指定空間索引的最大深度

$UCSNAME        2    當前UCS名

$UCSORG        10,20,30當前UCS原點(在WCS中)

$UCSXDIR        10,20,30當前UCSX軸的方向(在WCS中)

$UCSYDIR        10,20,30當前UCSY軸的方向(在WCS中)

$UNITMODE        70低位設置=顯示分數、英尺和英寸,以及輸入格式中的檢測角

$USERI            1-570供第三方開發者使用的五個整型變量

$USERR            1-540供第三方開發者使用的五個實型變量

$USRTIMER        700=計時器關;1=計時器開

$VISRETAIN        700=不保留外部參照依賴可見性設置;

1=保留外部參照依賴可見性設置;

$WORLDVIEW    701=在DVIEW/VPOINT期間設置UCS爲WCS;

0=不修改UCS

 

下列表頭變量出現在R11前的AutoCAD中,但現在對每個活動的視口都有單獨的設置。當DXFIN從DXF文件中讀取這些變量時,能識別它們。但如果帶有*ACTIVE條目的VPORT符號表存在(任何由R11或更高版本的AutoCAD生成的DXF文件中都存在),VPORT符號表條目中的值將替代這些表頭變量。

   

修正的VPORT表頭變量

變量組碼說明

$FASTZOOM        70如果非零,則啓用快速縮放

$GRIDMODE        70如果非零,則打開"柵格"模式

$GRIDUNIT        10,20柵格的X和Y間距

$SNAPANG        50捕捉柵格旋轉角

$SNAPBASE        10,20捕捉/柵格基點(在UCS中)

$SNAPISOPAIR    70等軸測平面:0=左邊,1=上端,2=右邊

$SNAPMODE    70如果非零,則打開"捕捉"模式

$SNAPSTYLE    70捕捉樣式:0=標準;1=等軸測

$SNAPUNIT        10,20捕捉柵格的X和Y間距

$VIEWCTR        10,20屏幕上當前視圖的XY中心

$VIEWDIR        10,20,30視圖方向(來自WCS中目標的方向)

$VIEWSIZE        40視圖高度

 

日期/時間變量($TDCREATE和$TDUPDATE)以如下實數格式輸出:

<Juliandate>.<Fraction>

流逝計時器變量($TDINDWG和$TDUSRTIMER)具有相似的格式:

<numberofdays>.<Fraction>

 

區域

 

   

本節描述的組碼既出現在DXF文件中又被應用程序使用。TABLES區域中包括多個表,每個表中條目數目可變。AutoLISP和ARX應用程序在圖元定義表中也使用這些組碼。

如不作特殊說明,本節中所出現的組碼都可以應用於DXF文件、AutoLISP應用程序和ARX應用程序。當組碼說明對於應用程序和DXF文件有所不同時(或只適用於其中之一),在組碼的說明前會有如下提示符:

APP用於應用程序的說明

DXF用於DXF文件的說明

如果組碼說明對DXF文件和應用程序都適用,那麼沒有提示符;否則將顯示適當的提示符。

   

DXF文件中的符號表

表的次序可以改變,但LTYPE表一般放在LAYER之前。每個表都由帶有標籤TABLE的組碼0引入。其後是標識具體表(APPID、DIMSTYLE、LAYER、LTYPE、STYLE、UCS、VIEW、VPORT或BLOCK_RECORD)的組碼2、組碼5(句柄)、組碼100(AcDbSymbolTable子類標記)和組碼70(此組碼用於指定其後表的最大條目數)。表名以大寫字符形式輸出。DIMSTYLE句柄使用組碼105而不是組碼5。

圖形中的表可以包含已刪除的條目,但這些條目不寫入DXF文件,因此表頭後的表條目數可能少於組碼70所指定的數目。所以不要用組碼70中的數字作爲讀取表的索引。讀取DXF文件的程序會根據組碼70中的數字分配一個足夠大的數組來存儲其後所有的表條目。

在每個表的表頭後跟隨着表條目。每個表條目包括指定條目類型的組碼0(與表名稱相同,如LTYPE或LAYER)、給出表條目名稱的組碼2、指定與表條目相關的標誌的組碼70和其他給出表條目值的組碼組成。每個表條目的結尾都由帶有組值ENDTAB的組碼0標記。

下面是一個DXF文件中的TABLES區域的樣例:

0    SECTION

2    TABLES        區域的開始

0    TABLE

2    <tabletype>

5    <handle>

70    <max.entries>相同的表組碼,

對每一個條目重複

 

0    <tabletype>

5    <handle>

.

.<data>.表條目數據,對每一個表記錄重複

 

0    表結束

0    TABLES區域的結束

 

符號表記錄和符號表都是數據庫對象。至少,在AutoCAD的所有主要用法中,這意味着符號表記錄對象和符號表對象的組碼2後都存在一個句柄。

DIMSTYLE表是系統中唯一使用句柄組碼105的記錄類型(以前它也使用組碼5)。除非在DIMSTYLE表區域中,程序員一般不必留心此例外情況,因爲只有在DIMSTYLE表區域中才會發生此例外情況。

 

符號表組碼

下表列出了適用於所有符號表的組碼:

適用於所有符號表的組碼    組碼說明

-1    APP:圖元名(每次打開圖形時改變)

0    對象類型(TABLE)

2    表名稱

5    句柄

100    子類標記(AcDbSymbolTable)

70    表中的最大條目數。

 

符號表條目的公用組碼

下表顯示了適用於所有符號表的組碼,可選的組碼以灰色顯示。當用戶通過圖元類型引用組碼錶時,應注意表中不僅包括與特定圖元關聯的組碼,也會包括下表列出的組碼。

適用於所有符號表條目的組碼    組碼說明

-1    APP:圖元名(每次打開圖形時改變)

0    圖元類型(表名稱)

5    句柄(除DIMSTYLE外的所有表)

105    句柄(只用於DIMSTYLE表)

102    應用程序定義的組碼的開始"{application_name"。

例如,"{ACAD_REACTORS"    //表示AutoCADPersistentreactors組的開始

//application-defined codes組102中的組碼和組值由

//應用程序定義

//102組結束

"}"

100子類標記(AcDbSymbolTableRecord)

 

下表列出了當Persistentreactors被附着到對象上時輸出的組碼:

 

ACAD_REACTORS記錄    組碼說明

102        "{ACAD_REACTORS"表示AutoCADPersistentreactors組的開始

330        指向所有者詞典的軟鍵指針標識符/句柄

102        組結束"}"

 

下表列出了當擴展詞典被附着到對象上時輸出的組碼:

 

ACAD_XDICTIONARY記錄        組碼說明

102        "{ACAD_XDICTIONARY"表示擴展詞典組碼的開始

360        指向所有者詞典的硬鍵指針標識符/句柄

102        組結束"}"

 

公用組碼70標誌-位編碼值的說明如下表。其他適用於LAYER、STYLE和VIEW表條目的組碼70值則在另外的相關表中說明。

適用於所有表條目的組碼70的位編碼值

位編碼值說明

16如果設置該位,表示表條目依賴於外部參照

32如果此位和位16都被設置,則表示所依賴的外部參照已被成功融入。

64如果設置該位,表示在上一次圖形編輯時圖形中至少有一個圖元引用了該表條目。(此標誌一般用於AutoCAD命令。大部分讀取DXF

文件的程序將其忽略,對於寫DXF文件的程序也無須設置它。)

 

APPID

下列組碼適用於APPID符號表條目:

APPID組碼    組碼說明

100            子類標記(AcDbRegAppTableRecord)

2            用戶提供的應用程序名(用於擴展數據)。此表條目維護所有已註冊的應用程序名。

70            標準標誌值(請參見符號表條目的公用組碼!AL(`XREF_30203_al_u05_c',1)。):

1=如果設置,在執行SAVEASR12時不寫入APPID所關聯的外部數據。

            注意因爲在R13和R14的AutoCAD中ASE數據格式相同,

所以ASE應用程序名(ACADASER13)也相同。

   

BLOCK_RECORD

下列組碼適用於BLOCK_RECORD符號表條目。

BLOCK_RECORD組碼    組碼說明

100                        子類標記(AcDbBlockTableRecord)

2                        塊名稱

 

DIMSTYLE

下列組碼適用於DIMSTYLE符號表條目。關於DIMSTYLE符號表條目的詳細信息,請參見AutoCAD命令參考中的附錄B"系統變量"。

DIMSTYLE組碼

組碼說明

100子類標記(AcDbDimStyleTableRecord)

2標註樣式名

70標準標誌值(請參見符號表條目的公用組碼!AL(`XREF_30203_al_u05_c',1)。)

3DIMPOST

4DIMAPOST

5DIMBLK

6DIMBLK1

7DIMBLK2

40DIMSCALE

41DIMASZ

42DIMEXO

43DIMDLI

44DIMEXE

45DIMRND

46DIMDLE

47DIMTP

48DIMTM

140DIMTXT

141DIMCEN

142DIMTSZ

143DIMALTF

144DIMLFAC

145DIMTVP

146DIMTFAC

147DIMGAP

71DIMTOL

72DIMLIM

73DIMTIH

74DIMTOH

75DIMSE1

76DIMSE2

77DIMTAD

78DIMZIN

170DIMALT

171DIMALTD

172DIMTOFL

173DIMSAH

174DIMTIX

175DIMSOXD

176DIMDLRD

177DIMCLRE

178DIMCLRT

270DIMUNIT

271DIMDEC

272DIMTDEC

273DIMALTU

274DIMALTTD

340被引用的STYLE對象的句柄(用於代替儲存DIMTXSTY值)

275DIMAUNIT

280DIMJUST

281DIMSD1

282DIMSD2

283DIMTOLJ

284DIMTZIN

285DIMALTZ

286DIMALTTZ

287DIMFIT

288DIMUPT

 

LAYER

下列組碼適用於LAYER符號表條目。

LAYER組碼    組碼說明

100        子類標記(AcDbSymbolTableRecord)

2        圖層名

70        標準標誌。(清參見符號表條目的公用組碼!AL(`XREF_30203_al_u05_c',1)。)

除標準標誌外,以下(位編碼)值也適用於圖層:

1=凍結圖層,否則圖層解凍;

2=在新視口中缺省設置爲凍結圖層;

4=鎖定圖層;

62        顏色數(如果爲負則圖層被關閉)

6        線型名

 

在執行DXFOUT時輸出依賴於外部參照的圖層。對於這些圖層,DXF文件中的相關線型名始終爲CONTINUOUS。

   

LTYPE

下列組碼適用於LTYPE符號表條目。

LTYPE組碼    組碼說明

100            子類標記(AcDbLinetypeTableRecord)

2            線型名稱。

70            標準標誌(位編碼值)。(請參見符號表條目的公用組碼!AL(`XREF_30203_al_u05_c',1)。)

3            線型的描述文字。

72            對齊方式碼;始終爲65(A的ASCII碼)。

73            線型元素數目。

40            圖案總長度。

49            虛線、點或空間的長度(每個元素一個條目)。

74            複雜線型元素類型(每個元素一個條目):0=簡單的;2=內嵌文字字符串;4=內嵌形;

75            複雜形的組碼(如果組碼74>0,每個元素一個條目)如果組碼74=2,則值爲1。

340            STYLE對象指針(如果組碼74>0,每個元素一個條目)。

46            S=比例值(可選),可存在多個這樣的條目。

50            R=旋轉值(可選),可存在多個這樣的條目。

44            X=x偏移值(可選),可存在多個這樣的條目。

45            Y=y偏移值(可選),可存在多個這樣的條目。

9            文字字符串(如果組碼74=2,每個元素一個條目)。

 

執行函數tblsearch或tblnext時,並不返回組碼74、75、340、46、50、44、45和9的值,因此用戶需要使用函數tblobjname來獲取這些組碼的值。

   

   

   

STYLE

下列組碼適用於STYLE符號表條目。

STYLE組碼        組碼說明

100                子類標記(AcDbTextStyleTableRecord)

2                樣式名稱

70                標準標誌值(請參見符號表條目的公用組碼!AL(`XREF_30203_al_u05_c',1)。):

1=如果設置,此條目描述一個形;4=垂直文本;

40                固定文字高度;如果高度不固定則值爲0。

41                寬度因子

50                傾斜角

71                文字生成標誌:2=文字反向(X軸方向鏡像)4=文字倒置(Y軸方向鏡像)

42                最後使用的高度

3                主字體文件名

4                大字體文件名;如果沒有則爲空

 

STYLE表條目也可用於記錄命令LOAD所需要的形文件。此時組碼70的第一位(1)被設置且只有組碼3(形文件名)有意義(但仍輸出所有其他組碼)。

   

   

   

UCS

下列組碼適用於UCS符號表條目。

UCS組碼

組碼說明

100子類標記(AcDbUCSTableRecord)

2UCS名稱

70標準標誌值

10原點(用WCS表示)。DXF:X值;APP:三維點

20,30DXF:原點座標的Y和Z值(用WCS表示)

11X軸方向(用WCS表示)。DXF:X值;APP:三維矢量

21,31DXF:X軸方向的Y和Z值(用WCS表示)

12Y軸方向(用WCS表示)。DXF:Y值;APP:三維矢量

22,32DXF:Y軸方向的Y和Z值(用WCS表示)

 

VIEW

下列組碼適用於VIEW符號表條目。

VIEW組碼

組碼說明

100子類標記(AcDbViewTableRecord)

2視圖名

70標準標誌值(位編碼值)

1=如果設置,則爲圖紙空間視圖。

40視圖高度(用DCS表示)

10視圖中點(用DCS表示)。DXF:X值;APP:二維點

20DXF:視圖中點的Y值(用DCS表示)

41視圖寬度(用DCS表示)

11以目標爲起點的視圖方向(用WCS表示):X值;APP:三維矢量

21,31DXF:以目標爲起點的視圖方向的Y和Z值(用WCS表示)

12目標點(用WCS表示)。DXF:X值;APP:三維點

22,32DXF:目標點座標的Y和Z值(用WCS表示)

42鏡頭長度

43前剪裁平面(與目標點的偏移)

44後剪裁平面(與目標點的偏移)

50扭曲角

71視圖模式(請參見VIEWMODE系統變量)

   

   

VPORT

下列組碼適用於VPORT符號表條目。

VPORT組碼

組碼說明

100子類標記(AcDbViewportTableRecord)

2視口名

70標準標記值(請參見符號表條目的公用組碼!AL(`XREF_30203_al_u05_c',1)。)

10視口左下角點。:X值;APP:二維點

20DXF:視口左下角點座標的Y值

11視口右上角點。:X值;APP:二維點

21DXF:視口右上角點座標的Y值

12視圖中點(用DCS表示)。DXF:X值;APP:二維點

22DXF:視圖中點座標的Y值(用DCS表示)

13捕捉基點。DXF:X值;APP:二維點

23DXF:捕捉基點座標的Y值

14捕捉間距的X和Y值。DXF:X值;APP:二維點

24DXF:捕捉間距X和Y值中的Y值。

15柵格間距的X和Y值。DXF:X值;APP:二維點

25DXF:柵格間距X和Y值中的Y值

16以目標點爲起點的視圖方向(用WCS表示):X值;APP:三維點

26,36DXF:以目標點爲起點的視圖方向的Y和Z值(用WCS表示)

17視圖目標點(用WCS表示)。DXF:X值;APP:三維點

27,37DXF:視圖目標點座標的Y和Z值(用WCS表示)

40視圖高度

41視口寬高比

42鏡頭長度

43前剪裁平面(與目標點的偏移)

44後剪裁平面(與目標點的偏移)

50捕捉旋轉角

51視圖扭曲角

68APP:狀態字段(不保存在DXF中)

69APP:ID(不保存在DXF中)

71視圖模式(請參見VIEWMODE系統變量)

72圓縮放百分比

73快速縮放設置

74UCSICON設置

75捕捉狀態:開/關

76柵格狀態:開/關

77捕捉樣式

78捕捉ISOPAIR

 

VPORT表和其他表不同的是,它可以包含多個同名條目(表示一個多視口配置)。所有對應於活動視口配置的條目都具有*ACTIVE名稱,其中第一個描述了當前視口。

 

區域

 

 

本節描述的組碼只出現在DXF文件中。

CLASSES區域存儲了應用程序定義的類的信息,這些類的實例將會出現在數據庫的BLOCKS、ENTITIES和OBJECTS

區域中。假定類定義在類的層次結構中是固定不變的。區域中的所有字段都是必需的。

下面是一個DXF文件中CLASSES區域的樣例:

0    SECTION

2    CLASSES區域的開始

 

0

1

<classdxfrecord>

2

<classname>

3

<appname>

90

<flag>

<flag>

<flag>對每個條目重複

 

 

 

 

0CLASSES區域的結束

 

下表列出了CLASSES區域中每個條目所包含的組碼:

   

   

CLASSES區域組碼

組碼說明

0DXF記錄類名。此名稱必須唯一。指明BLOCKS、ENTITIES和OBJECTS區域的開始,如果兩個對象類型聲明瞭同名的DXF

類名,AutoCAD會給它們加上不同的數字後綴,以使圖形中的DXF類名唯一。

1C++類名。用於綁定定義對象類行爲的軟件,此名稱唯一。值得注意的是,同一個C++類在不同的圖形中的DXF名可能稍有不同。

2應用程序名。如果當前未加載本區域中列出的類定義,則此名稱將顯示在"警告"框中。

90類版本號。設置爲最後一次存儲該類實例時所加載類的版本號。

280"是代理"標誌。如果此DXF文件創建時沒有加載類,設置爲1;否則設置爲0。

281"是圖元"標誌。如果此類是從AcDbEntity類繼承下來的且其實例可出現在BLOCKS或ENTITIES區域中,它設置爲

1;如果爲0,則其實例只能出現在OBJECTS區域中。

 

區域

 

 

本節描述的組碼既出現在DXF文件中又被應用程序使用。對圖形中每個塊引用,在塊區域中都有一個條目與之對應。

如不作特殊說明,本節中所出現的組碼都可以同時應用於DXF文件、AutoLISP應用程序和ARX應用程序。當應用程序中的組碼描述與DXF

文件中的組碼描述不同(或只適用於其中之一)時,則在說明前有如下提示:

APP應用程序特定說明

   

DXF文件特定說明

如果組碼描述對DXF文件和應用程序都適用,那麼沒有提示;否則將存在適當的提示。可選的組碼以灰色顯示。

   

DXF文件中的塊

DXF文件中的BLOCKS區域包括所有的塊定義,其中包含組成(圖形中使用的)塊(包括命令HATCH和關聯標註生成的無名塊)的圖元。BLOCKS

區域中的圖元格式與ENTITIES區域中的一樣,且此區域中的所有圖元都出現在BLOCK和ENDBLK圖元之間。BLOCK和ENDBLK

圖元只出現在BLOCKS區域中。雖然塊定義可以包含插入圖元,但塊定義不允許被嵌套(即BLOCK和ENDBLK圖元之間不允許出現另一對BLOCK和

ENDBLK圖元)。

通常外部參照將作爲塊定義寫入DXF文件中,除非文件中已經包含了指定該外部參照的路徑和文件名的字符串(組碼1)。

在每個塊定義中,緊接着BLOCK記錄出現的是塊句柄和其他外部數據及persistentreactors,此句柄包含了該BLOCK

記錄所儲存的特定信息。因此每個塊定義有如下記錄次序:

下面是一個DXF文件中的BLOCKS區域的例子:

0

2BLOCKS區域的開始

 

0

5

<handle>

8

<layer>

2

<blockname>

70

<flag>

10

<Xvalue>

20

<Yvalue>

30

<Zvalue>

3

<blockname>

1

<xrefpath>開始每個塊條目

(一個塊圖元定義)

 

0

<entitytype>

..<data>.塊中每個圖元定義均對應一個條目

 

0

5

<handle>

每個塊條目的結束

(ENDBLK圖元定義)

0BLOCKS區域的結束

 

BLOCK

下列組碼適用於塊圖元。

Block組碼

組碼說明

0圖元類型(BLOCK)

5句柄

102應用程序定義的組的開始"{application_name",

例如,"{ACAD_REACTORS"表示AutoCADPersistentreactors組的開始application-definedcodes組102中的組碼和組值由應用程序定義102組結束"}"

100子類標記(AcDbEntity)

8圖層名

100子類標記(AcDbBlockBegin)

2塊名稱

70"塊類型"標誌(位編碼值,可被組合):

1=這是一個由圖案填充、關聯標註、其他內部操作或應用程序生成的無名塊;

2=此塊具有屬性定義;

4=此塊是一個外部參照(xref);

8=此塊是一個外部參照覆蓋;

16=此塊依賴於外部參照;

32=是一個融入的外部參照或依賴於外部參照(輸入時忽略之);

64=此定義被外部參照引用(輸入時忽略之);

10基點。DXF:X值;APP:三維點

20,30DXF:基點座標的Y和Z值

3塊名稱

1外部參照路徑名(可選,只有在塊是一個外部參照時存在)

 

創建塊定義後,原先有效的UCS變爲適合於塊定義中所有圖元的WCS。將移動這些圖元的新原點以匹配塊定義的基點,也將平移所有圖元數據以適合新的WCS。

*MODEL_SPACE和*PAPER_SPACE塊定義

現在,在BLOCKS區域中始終有兩個額外的空定義,它們的標題分別爲*MODEL_SPACE和*PAPER_SPACE。這樣實際上是將模型空間和圖紙空間視爲內部塊定義。考慮到兼容性,這些定義包含的圖元也會出現在ENTITIES區域中。

模型空間和圖紙空間圖元分離

由於改進了內部組織機構,模型空間和圖紙空間之間的交錯將不再發生,而是先輸出圖紙空間圖元,再輸出模型空間圖元。區分這些圖元的標誌爲組碼67。

   

ENDBLK

下列組碼適用於ENDBLK對象

Endblk組碼

組碼說明

0圖元類型(ENDBLK)

5句柄

102應用程序定義的組的開始"{application_name"。

例如,"{ACAD_REACTORS"表示AutoCADPersistentreactors組的開始

application-definedcodes組102中的組碼和組值由應用程序定義

102組結束,"}"

100子類標記(AcDbBlockEnd)

 

區域

 

 

此節中的組碼適用於非圖形對象。這些出現在DXF文件的OBJECTS區域中的組碼被圖元定義表中的AutoLISP和ARX應用程序使用。

如不作特殊說明,本節中所出現的組碼都可以應用於DXF文件、AutoLISP應用程序和ARX應用程序。當應用程序中的組碼描述與DXF

文件中的組碼描述不同(或只適用於其中之一)時,則在說明前有如下提示:

APP應用程序特定說明

DXFDXF文件特定說明

如果DXF文件中的組碼描述與應用程序中的相同,那麼沒有提示,否則將存在適當的提示。可選的組碼以灰色顯示。

除了沒有圖形的或幾何的意義外,對象與圖元基本類似。所有那些非圖元的,符號表記錄的或符號表的對象都存儲在此區域中。此區域通過所有關係描繪了一個具有對象的拓撲次序的同類堆,根據此關係,所有者始終出現在它們的所有對象的前面。

   

對象所有關係

出現在OBJECTS

區域中的大多數對象的根所有者被稱爲對象詞典,所以始終只有第一對象出現在此區域中。不被對象詞典所有的對象歸其他圖元、對象或符號表條目所有。此區域中的對象可以被

AutoCAD或被有權使用ARXAPI的應用對象定義。應用程序定義對象類型的DXF名稱始終與一個DXF文件的CLASS

區域中的類名稱聯合在一起,否則對象記錄不能被加進將要解釋它的應用程序中。

當使用其他詞典時,命名對象詞典記錄由條目名稱對和參照關聯對象的硬鍵所有關係指針獨立組成。

爲避免對象間的名稱衝突,開發者應始終使用已註冊的這些圖元的開發前綴。

   

DXF文件中的對象組碼

下面是DXF文件的對象區域的例子:

0

2OBJECTS區域的開始

0

5

<handle>

命名對象詞典的開始(根詞典對象)

3

<dictionaryname>

 

<handleofchild>爲每個條目重複

0

<objecttype>

.

.<data>

.對象數據組

 

 

 

0OBJECTS區域的結束

 

 

公用對象組碼

下表顯示的組碼適用於所有實際的非圖形圖元(對象)。當用戶通過圖元類型引用組碼錶時,應注意表中不僅列出與特定圖元關聯的組碼,也會列出下表所顯示的組碼。只當圖元具有特性的非缺省值時,一些公用對象組碼才被包括到圖元中。當組碼被忽略時,它的缺省值將出現在輸入文件(當使用

DXFIN時)的第三列上,如果組碼值等於缺省值,在輸出(使用DXFOUT)時它將被忽略。

公用對象組碼

組碼說明

0對象類型

5句柄

102應用程序定義組碼的開始"{application_name"。例如,"{ACAD_REACTORS"表示AutoCAD

Persistentreactors組的開始

application-definedcodes應用程序定義的組102中的組碼和組值

102組的結束,"}"

 

如果persistentreactors已被附着到對象上,則下表顯示的組碼將被輸出。

   

ACAD_REACTORS記錄

組碼說明

102"{ACAD_REACTORS"表示AutoCADPpersistentreactors組的開始

330所有着詞典的軟鍵指針標識符/句柄

102組的結束,"}"

 

如果擴展詞典已被附着到對象上,則下表顯示的組碼將被輸出。

   

ACAD_XDICTIONARY記錄

組碼說明

102"{ACAD_XDICTIONARY"表示擴展詞典組的開始

360所有着詞典的硬鍵指針標識符/句柄

102組的結束,"}"

 

   

ACAD_PROXY_OBJECT

下列組碼適用於ACAD_PROXY_OBJECT對象。

Acad_proxy_object組碼

組碼說明

100DXF:子類標記(AcDbProxyObject)

90DXF:代理對象類ID(始終爲499)

91DXF:應用程序對象類ID。類ID由CLASSES區域中的類的次序決定。第一個類的ID爲500,下一個爲501,依此類推。

93DXF:以位表示的對象數據的大小

310DXF:二進制對象數據(可在多個條目中出現)

330or340or350or360DXF:對象ID(可在多個條目中出現)

94DXF:0(表示對象ID區域的結束)

 

字段92不用於AcDbProxyObject。此類的對象沒有圖形。

   

DICTIONARY

下列組碼由詞典對象使用。

詞典組碼

組碼說明

100子類標記(AcDbDictionary)

3條目名稱(適用於每個條目)

350條目對象的句柄(適用於每個條目)

 

在詞典中AutoCAD將諸如多線樣式和組定義之類的條目作爲對象來維護。下節描述在詞典中被維護的AutoCAD

對象組碼。但如果合適,其他應用程序可自由地創建和使用它們自己的詞典。注意:在AutoCAD應用程序使用時,應保留前綴"ACAD_"。

   

   

DICTIONARYVAR

下列組碼由DICTIONARYVAR對象使用。

DICTIONARYVAR組碼

組碼說明

0對象名稱(DICTIONARYVAR)

5句柄

102persistentreactors組的開始;始終爲"{ACAD_REACTORS"

330所有者詞典的軟鍵指針標識符/句柄(ACDBVARIABLEDICTIONARY)。

102persistentreactors組的結束;始終爲"}"

100子類標記(詞典變量)

280對象概要數(通常設置爲0)

1變量值

 

在不需要向DXFHEADER區域中添加條目時,DICTIONARYVAR對象被AutoCAD用來作爲在數據庫中存儲命名值的方法以達到

setvar/getvar的目的。通常作爲DICTIONARYVAR

對象存儲的系統變量有:DIMADEC、DIMDSEP、INDEXCTL、PROJECTNAME和XCLIPFRAME。

   

   

GROUP

下列組碼由GROUP對象使用。

GROUP組碼

組碼說明

0對象名稱(GROUP)

5句柄

102persistentreactors組的開始,始終爲"{ACAD_REACTORS"(persistentreactors

組出現在除主詞典之外的所有詞典中)

330所有者詞典的軟鍵指針標識符/句柄。對於GROUP對象,此碼始終是命名對象詞典的ACAD_GROUP條目。

102persistentreactors組的結束,始終爲"}"。

100子類標記(AcDbGroup)

300(對象)組說明

70"未命名"標誌:1=未命名的;0=命名的;

71可選擇性標誌:1=可選擇的;0=不可選擇;

340(對象)組中圖元的句柄(適用於每個對象的條目)

 

   

   

IDBUFFER

下列組碼由IDBUFFER對象使用。

IDBUFFER組碼

組碼說明

0對象名稱(IDBUFFER)

5句柄

102persistentreactors組的開始,始終爲"{ACAD_REACTORS"。

330所有者詞典的軟鍵指針標識符/句柄。

102persistentreactors組的結束,始終爲"}"。

100子類標記(AcDbIdBuffer)

330參照圖元的軟鍵指針(可以存在多條目)。

 

IDBUFFER對象是對象參照的表的使用使用工具對象。

   

   

IMAGEDEF

下列組碼有IMAGEDEF對象使用。

IMAGEDEF組碼

組碼說明

0對象名稱(IMAGEDEF)

5句柄

102persistentreactors組的開始,始終爲"{ACAD_REACTORS"。

330ACAD_IMAGE_DICT詞典的軟鍵指針的標識符/句柄。

330IMAGEDEF_REACTOR對象的軟鍵指針的標識符/句柄(多條目;適合於每個實例的條目)。

102persistentreactors組的結束,始終爲"}"。

100子類標記(AcDbRasterImageDef)

90類版本。0=R14版本

1圖像的文件名稱

10以像素點表示的圖像大小。DXF:U值;APP:二維點(U和V值)

20DXF:以像素點表示的圖像大小的V值

11AutoCAD中一個像素的缺省大小。:U值;APP:二維點(U和V值)。

12DXF:像素大小的V值。

280"圖像被加載"標誌:0=爲加載的;1=加載的;

281分辨率單位:0=無單位;2=釐米;5=英寸;

 

   

   

   

IMAGEDEF_REACTOR

下列組碼由IMAGEDEF_REACTOR對象使用。

IMAGEDEF_REACTOR組碼

組碼說明

0對象名稱(IMAGEDEF_REACTOR)

5句柄

100子類標記(AcDbRasterImageDefReactor)

90類版本號。2=R14版本

330適於關聯圖像對象的對象ID。

 

   

   

LAYER_INDEX

   

下列組碼由LAYER_INDEX對象使用。

LAYER_INDEX組碼

組碼說明

0對象名稱(LAYER_INDEX)

5句柄

102persistentreactors組的開始,始終爲"{ACAD_REACTORS"。

330所有者詞典的軟鍵指針的標識符/句柄。

102persistentreactors組的結束,始終爲"}"。

100子類標記(AcDbIndex)

40時間標誌(Julian日期)

100子類標記(AcDbLayerIndex)

8圖層名稱(可以存在多條目)。

360IDBUFFER的硬鍵從屬參照(可以存在多條目)

90在IDBUFFER中的條目數(可以存在多條目)

 

MLINESTYLE

下列組碼由MLINESTYLE對象使用。

MLINESTYLE組碼

組碼說明

0對象名稱(MLINESTYLE)

5句柄

102persistentreactors組的開始,始終爲"{ACAD_REACTORS"(persistentreactors

組出現在除主詞典以外的所有詞典中)

330所有者詞典的軟鍵指針的標識符/句柄。對於MLINESTYLE對象,此組碼始終爲命名對象詞典中的ACAD_MLINESTYLE條目。

102persistentreactors組的結束,始終爲"}"。

100子類標記(AcDbMlineStyle)

2多線樣式名稱

70標誌(位編碼):

1=打開填充;

2=顯示斜接;

16=開始矩形結束(直線)封口;

32=開始內弧封口;

64=開始圓(外弧)封口;

256=結束矩形(直線)封口;

512=結束內弧封口;

1024=結束圓(外弧)封口;

3樣式說明(字符串,最大值爲255字符)

62填充顏色(整型,缺省值=256)。可以存在多條目,適於每個元素的一個條目。

51起始角度(實型,缺省值爲90度)

52結束角度(實型,缺省值爲90度)

71元素的數目

49元素偏移(實型,無缺省值)。可以存在多條目,且爲適於每個元素的一個條目。

62元素顏色(整型,缺省值=0)。可以存在多條目,且爲適於每個元素的一個條目。

6元素線型(字符串,缺省值=BYLAYER)。可以存在多條目,且爲適於每個元素的一個條目。

 

多線圖元和多線樣式對象中的組碼2是多餘的字段。雖然可以安全的讀取這些組碼及其關聯值,但這些組碼在任何情況下都不能被修改。這些字段修改如下:

多線

在相同對象中的組碼340用於指定嚴格意義上的MLINESTYLE對象。

多線樣式

MLINESTYLE詞典中的組碼3位於具有當前MLINESTYLE的圖元名或句柄的組碼350之前。

   

   

   

OBJECT_PTR

下列組碼由OBJECT_PTR對象使用。

OBJECT_PTR組碼

組碼說明

0對象名稱(OBJECT_PTR)

5句柄

102persistentreactors組的開始,始終爲"{ACAD_REACTORS"。

330所有者詞典的軟鍵指針的標識符/句柄。

102persistentreactors組的結束,始終爲"}"。

1001開始ASE外部數據(ACADASER13)

 

   

RASTERVARIABLES

下列組碼由RASTERVARIABLES對象使用。

RASTERVARIABLES組碼

組碼說明

0對象名稱(RASTERVARIABLES)

5句柄

102persistentreactors組的開始,始終爲"{ACAD_REACTORS"。

330所有者詞典的軟鍵指針標識符/句柄。對於RASTERVARIABLES對象,此組碼始終爲命名對象詞典中的ACAD_IMAGE_VARS

條目。

102persistentreactors組的結束,始終爲"}"。

100子類標記(AcDbRasterVariables)

90類版本。0=R14

70"顯示圖像邊框"標誌:0=無邊框;1=顯示邊框;

71圖像顯示質量(只用於屏幕):0=草圖;1=高分辨率;

72插入圖像的AutoCAD單位。此AutoCAD單位適用於關聯到分辨率的插入和縮放圖像操作:

0=無;1=毫米;2=釐米;3=米;4=公里;

5=英寸;6=英尺;7=碼;8=英里;

 

   

SPATIAL_INDEX

下列組碼由SPATIAL_INDEX使用。

SPATIAL_INDEX組碼

組碼說明

0對象名稱(SPATIAL_INDEX)

5句柄

102persistentreactors組的開始,始終爲"{ACAD_REACTORS"。

330所有者詞典的軟鍵指針標識符/句柄。

102persistentreactors組的結束,始終爲"}"。

100子類標記(AcDbIndex)

40時間標誌(Julian日期)

100子類標記(AcDbSpatialIndex)

 

在寫入DXF文件時,SPATIAL_INDEX始終爲空,所以此對象可被忽略。

   

   

SPATIAL_FILTER

下列組碼由SPATIAL_FILTER對象使用。

SPATIAL_FILTER組碼

組碼說明

0對象名稱(SPATIAL_FILTER)

5句柄

102persistentreactors組的開始,始終爲"{ACAD_REACTORS"。

330所有者詞典的軟鍵指針標識符/句柄(SPATIAL)。

102persistentreactors組的結束,始終爲"}"。

100子類標記(AcDbFilter)

100子類標記(AcDbSpatialFilter)

70剪裁邊界上的點數。2=矩形剪裁邊界(左下角和右上角)

大於2=多線剪裁邊界

10剪裁邊界定義點(在OCS中)(始終爲2個或更多),由1的外部參照比例決定。DXF:X值;APP:二維點;

20DXF:剪裁邊界定義點的Y值(始終爲2個或更多)。

210包含剪裁邊界的平面的法向:DXF:X值;APP:三維矢量。

220,230DXF:拉伸方向的Y和Z值。

11用於定義剪裁邊界的局部座標系統的原點。:X值;APP:三維點;

21,31DXF:用於定義剪裁邊界的局部座標系統的原點的Y和Z值。

71啓用剪裁邊界顯示標誌:0=禁用的;1=啓用的;

72前剪裁平面標誌:0=無;1=有;

40前剪裁平面距離(如果組碼72=1)

73後剪裁平面標誌:0=無;1=有;

41後剪裁平面距離(如果組碼73=1)

40以主列次序寫出的4x3變換矩陣。此矩陣是初始塊引用(插入圖元)變換的轉置。當塊引用重生成時,初始塊引用變換適用於塊中的所有圖元(始終爲12

個條目)。

40以主列次序寫出的4x3變換矩陣將點轉換成剪裁邊界的座標系統(始終爲12個條目)。

 

   

SORTENTSTABLE

下列組碼由SORTENTSTABLE對象使用。

SORTENTSTABLE組碼

組碼說明

0對象名稱(SORTENTSTABLE)

5句柄

102persistentreactors組的開始,始終爲"{ACAD_REACTORS"。

330所有者詞典的軟鍵指針標識符/句柄(ACAD_SORTENTS)。

102persistentreactors組的結束,始終爲"}"。

100子類標記(AcDbSortentsTable)

330所有者的軟鍵指針標識符/句柄(通常只是*MODEL_SPACE或*PAPER_SPACE塊)

331圖元的軟鍵指針標識符/句柄(可以存在零個或更多的條目)。

5排序句柄(可以存在零個或更多的條目)。

 

如果設置SORTENTS重生成標誌(位編碼值16),AutoCAD將以上升句柄次序重生成圖元。當使用命令DRAWORDER時,一個

SORTENTSTABLE對象將以ACAD_SORTENTS的名稱被附着到*MODEL_SPACE或*PAPER_SPACE

塊的擴展詞典中。此詞典涉及的SORTENTSTABLE對象通過各自的圖元關聯一個不同的句柄,這個句柄重新定義了圖元的重生成次序。

   

   

   

XRECORD

下列組碼是所有外部記錄公用的組碼。

外部記錄組碼

組碼說明

100子類標記(AcDbXrecord)

1-369(except5and105)這些值可以被應用程序以任何方式使用。

 

外部記錄可以用來存儲和處理任意的數據。它們由具有"普通對象"組(即"非外部數據"組碼)的DXF組碼組成,支持範圍從1到

369。此對象的概念與外部數據的有些相似,但沒有大小或次序的限制。

原則上從版本R13c0到R13c3的AutoCAD都能使用爲外部數據設計的工作方式,但如果從R13c4版本前的AutoCAD

文件中讀取外部記錄對象,此對象會消失。

 

區域

 

此節介紹的組碼適用於圖形對象。這些組碼既出現在DXF文件的ENTITIES區域中,又在圖元定義表中被AutoLISP和ARX

應用程序使用。

如不作特殊說明,本節中所出現的組碼都可以應用於DXF文件、AutoLISP應用程序和ARX應用程序。當應用程序中的組碼描述與DXF

文件中的組碼描述不同(或只適用於其中之一)時,則在說明前有如下提示:

APP用於應用程序的說明

DXF用於DXF文件的說明

如果組碼描述對DXF文件和應用程序都適用,那麼沒有提示,否則將存在適當的提示。可選的組碼以灰色顯示。

圖形對象的公用組碼

下表列出的組碼適用於所有圖形對象。其中某些組碼只有在其對應屬性不是缺省值的圖元中出現。當用戶通過圖元類型引用組碼錶時,應注意表中不僅包括與特定圖元相關的組碼,還會包括下表所列的組碼。

如果忽略了某組碼,在(使用DXFIN)輸入DXF文件時將使用(出現在第三列的)它的缺省值;如果某組碼的值爲缺省值,則在(使用

DXFOUT)輸出時將忽略它。

適用於所有圖形對象的組碼

組碼說明如果被忽略,

則缺省值爲...

-1APP:圖元名(在每次打開圖形時改變)不能忽略

0圖元類型不能忽略

5句柄不能忽略

102應用程序定義的組的開始"{application_name"。

例如,"{ACAD_REACTORS"表示AutoCADPersistentreactors組的開始無缺省值

application-definedcodes組102中的組碼和組值由應用程序定義無缺省值

102組結束,"}"無缺省值

100子類標記(AcDbEntity)不被忽略

67不賦值或值爲0時表示圖元在模型空間;

1表示圖元在圖紙空間(可選)0

8圖層名不能忽略

6線型名(如果不爲BYLAYER則存在)

如果爲BYBLOCK表示某不定線型

(可選)BYLAYER

62顏色代碼(如果不爲BYLAYER則存在)

表示BYBLOCK(不定)顏色;

表示BYLAYER;

如果爲負表示圖層被關閉(可選);BYLAYER

48線型比例(可選)1.0

60對象可見性(可選):

0=可見;1=不可見。0

 

如果Persistentreactors被附着到對象上,將輸出下表所列的組碼。

ACAD_REACTORS記錄

組碼說明

102"{ACAD_REACTORS"表示AutoCADPersistentreactors組的開始

330指向所有者詞典的軟鍵指針標識符/句柄

102組結束,"}"

 

如果擴展詞典被附着到對象上,將輸出下表所列的組碼。

ACAD_XDICTIONARY記錄

組碼說明

102"{ACAD_XDICTIONARY"表示擴展詞典組碼的開始

360指向所有者詞典的硬鍵指針標識符/句柄

102組碼的結束,"}"

 

注意儘管組碼通常按照這些DXF組碼錶所列的順序出現,但請不要使編寫的程序依賴於這種順序,因爲在某些條件下或在後續版本的AutoCAD

中,可能會改變這種順序。可以利用分支或表機制來處理控制圖元的組碼,這樣即使組碼次序不定,也能正確地處理每組組碼。

3DFACE

下列組碼適用於三維面圖元。

三維面組碼

組碼說明

100子類標記(AcDbFace)

10第一角點(用WCS表示)。DXF:X值;APP:三維點

20,30DXF:第一角點座標的Y和Z值(用WCS表示)

11第二角點(用WCS表示)。DXF:X值;APP:三維點

21,31DXF:第二角點座標的Y和Z值(用WCS表示)

12第三角點(用WCS表示)。DXF:X值;APP:三維點

22,32DXF:第三角點座標的Y和Z值(用WCS表示)

13第四角點(用WCS表示)。如果只輸入三個角點值,則第四角點與第三角點相同。:X值;APP:三維點

23,33DXF:第四角點座標的Y和Z值(用WCS表示)

70不可見邊標誌(可選,缺省=0):

1=第一邊不可見;

2=第二邊不可見;

4=第三邊不可見;

8=第四邊不可見;

 

3DSOLID

下列組碼適用於三維實體圖元。

三維實體組碼

組碼說明

100子類標記(AcDbModelerGeometry)

70建模格式版本號(當前值=1)

1私有數據(可有多行,每行少於255個字符)

3私有數據的附加行(如果前面組碼1的字符串有多於255個字符)

 

ACAD_PROXY_ENTITY

下面的組碼適用於代理圖元。

Acad_proxy_entity組碼

組碼說明

100DXF:AcDbProxyEntity

90DXF:代理圖元類ID

91DXF:應用程序圖元類ID。類ID由CLASSES區域中類的次序決定。第一個類的ID爲500,第二個類的ID爲

501,依此類推。

92DXF:字節圖形數據的大小

310DXF:二進制圖形數據(可出現多個條目)

93DXF:位圖元數據的大小

310DXF:二進制圖元數據(可出現多個條目)

330or340or350or360DXF:一個對象ID(可出現多個條目)

94DXF:0(表示對象ID類結束)

 

ARC

下列組碼適用於圓弧圖元。

圓弧組碼

組碼說明

100子類標記(AcDbCircle)

39厚度(可選,缺省值=0)

10圓心(用OCS表示)。DXF:X值;APP:三維點

20,30DXF:圓心座標的Y和Z值(用OCS表示)

40半徑

100子類標記(AcDbArc)

50起始角

51終止角

210延伸方向(可選,缺省值=0,0,1)

DXF:X值;APP:三維矢量

220,230DXF:延伸方向的Y和Z值

 

ATTDEF

下列組碼適用於屬性定義圖元。

屬性定義組碼

組碼說明

100子類標記(AcDbText)

39厚度(可選,缺省值=0)

10第一對齊點(用OCS表示)。:X值;APP:三維點

20,30DXF:文本開始點座標的Y和Z值(用OCS表示)

40文字高度

1缺省值(字符串)

100子類標記(AcDbAttributeDefinition)

50文字旋轉(可選,缺省值=0)

41關於X的比例因子(寬度)(可選,缺省值=1)

當文本使用"佈滿"類型時,將會調整此值

51傾斜角(可選,缺省值=0)

7文字樣式名(可選,缺省值=STANDARD)

71文字生成標誌(可選,缺省值=0)請參見TEXT

72水平文字對正類型(可選,缺省值=0)請參見TEXT

11第二對齊點(用OCS表示):X值;APP:三維點

只在組碼72或74的值非零時纔有意義

21,31DXF:第二對齊點座標的Y和Z值(用OCS表示)

210延伸方向(可選,缺省值=0,0,1):X值;APP:三維矢量

220,230DXF:延伸方向的Y和Z值

100子類標記(AcDbAttributeDefinition)

3提示字符串

2標籤字符串

70屬性標誌:

1=屬性不可見(不出現);

2=這是一個常數屬性;

4=在輸出此屬性時需要驗證;

8=屬性預置(插入時無提示);

73字段長度(可選,缺省值=0)(當前未使用)

74垂直文字對正類型(可選,缺省值=0)請參見TEXT中的組碼73

 

如果組碼72和(或)74的值非零,則將忽略第一對齊點的值,AutoCAD

根據第二對齊點和文字字符串的長度和高度(在使用了文本樣式之後)計算新值;如果沒有組碼72和74的值或其值爲零,則第二對齊點無意義。

ATTRIB

下列組碼適用於屬性圖元。

屬性組碼

組碼說明

100子類標記(AcDbText)

39厚度(可選,缺省值=0)

10文字起點(用OCS表示)。DXF:X值;APP:三維點

20,30DXF:文本起點座標的Y和Z值(用OCS表示)

40文字高度

1缺省值(字符串)

100子類標記(AcDbAttribute)

2屬性標記(字符串)

70屬性標誌:

1=屬性不可見(不出現);

2=這是一個常數屬性;

4=在輸出此屬性時需要驗證;

8=屬性預置(插入時無提示);

73字段長度(可選,缺省值=0)(當前未使用)

50文字旋轉(可選,缺省值=0)

41關於X比例因子(寬度)(可選,缺省值=1)

當文字使用"佈滿"類型時,將會調整此值

51傾斜角(可選,缺省值=0)

7文字樣式名(可選,缺省值=STANDARD)

71文字生成標誌(可選,缺省值=0)請參見TEXT

72水平文字對正類型(可選,缺省值=0)請參見TEXT.

74垂直文字對正類型(可選,缺省值=0)請參見TEXT中的組碼73

11對齊點(用OCS表示)DXF:X值;APP:三維點

只在組碼72或74存在且非零時存在

21,31DXF:對齊點座標的Y和Z值(用OCS表示)

210拉伸方向。只在圖元的延伸方向不平行於WCS的Z軸時存在(可選,缺省值=0,0,1)

DXF:X值;APP:三維矢量

220,230DXF:拉伸方向的Y和Z值

 

如果組碼72和(或)74的值非零,將忽略文本插入點的值,AutoCAD

根據文本對齊點和文字字符串長度(在應用了文本樣式之後)計算新值;如果沒有組碼72和74的值或其值爲零,則忽略文字對齊點,AutoCAD

根據文字插入點和文字字符串的長度(在申請了文本樣式之後)重新計算新值。

BODY

下列組碼適用於體圖元。

體組碼

組碼說明

100子類標記(AcDbModelerGeometry)

70建模格式版本號(當前值=1)

1私有數據(可有多行,每行少於255個字符)

3私有數據的附加行(如果前面組碼1的字符串多於255個字符)

 

CIRCLE

下列組碼適用於圓圖元。

圓組碼

組碼說明

100子類標記(AcDbCircle)

39厚度(可選,缺省值=0)

10圓心(用OCS表示)。DXF:X值;APP:三維點

20,30DXF:圓心座標的Y和Z值(用OCS表示)

40半徑

210拉伸方向(可選,缺省值=0,0,1)

DXF:X值;APP:三維矢量

220,230DXF:拉伸方向的Y和Z值

 

DIMENSION

標註圖元定義數據包括適用於所有標註類型的組碼,以及該類標註所特有的組碼。

公用標註組碼

下列組碼適用於所有標註類型。

公用標註組碼

組碼說明

100子類標記(AcDbDimension)

2包含組成標註的圖元的塊名稱

10標註點(用WCS表示)。DXF:X值;APP:三維點。

20,30DXF:標註點座標的Y和Z值(用WCS表示)

11標註文本的中點(用OCS表示)。DXF:X值;APP:三維點。

21,31標註文本的中點座標的Y和Z值(用OCS表示)

70標註類型:

整數值0-6表示標註類型。

位值32、64和128則添加到整數值後(在R13和更高版本中設置值32)。

0=轉角標註、水平標註或垂直標註;1=對齊標註;

2=角度標註;3=直徑標註;4=半徑標註;

5=角度三點標註;6=座標標註;

32=表示塊引用(組碼2)只被此標註引用;

64=座標標註類型,此位值(位7)只與類型6一起使用,如果設置,座標類型爲X型,否則爲Y型;

128=如果標註文本位於用戶指定的位置而不是缺省位置,此位值(位7)將添加到其他的組碼70的值中。

1用戶明確地輸入了標註文字(可選,缺省值爲測量結果)

如果爲空或"<>",以文字方式標註測量結果;

如果爲""(一個空格),禁止輸出文字,其他情況下將作爲文字繪製到圖形中。

53組碼53可選,表示標註文字方向與其缺省方向之間的旋轉角度(尺寸線的方向)。

51所有標註類型都有可選組碼

51,此組碼爲標註圖元表示了水平方向。它爲水平標註、垂直標註及轉角線性標註指定了標註文本和尺寸線的方向。組碼值爲OCSX軸與

UCSX軸間的角度的負值(始終在OCS的XY面中度量該角度)。

210拉伸方向(可選,缺省值=0,0,1):X值;APP:3D矢量

220,230DXF:拉伸方向的Y和Z值

3標註樣式名

 

屬於應用程序ID"ACAD"

的擴展數據可以跟隨在標註圖元之後。這說明任何標註都能替代已被圖元使用的標註。請參見標註樣式替代!AL(`XREF_62386_al_u05_c',1)。

對於所有的標註類型,下列組碼錶示三維WCS點:(10,20,30)、(13,23,33)、(14,24,34)和(15,25,

35)。對於所有的標註類型,下列組碼錶示三維WCS點:(11,21,31)、(12,22,32)和(16,26,36)。

對齊、線性和轉角標註組碼

下列組碼適用於對齊、線性和轉角標註。

對齊、線性和轉角標註組碼

組碼說明

100子類標記(AcDbAlignedDimension)

12標註複製的插入點-基線和連續標註(在OCS中)。

DXF:X值;APP:三維點

22,32DXF:標註複製的插入點-基線和連續標註的Y和Z值(在OCS中)。

13線性標註和轉角標註的定義點(在WCS中)。:X值;APP:三維點

23,33DXF:線性標註和轉角標註的定義點的Y和Z值(在WCS中)。

14線性標註和轉角標註的定義點(在WCS中)。:X值;APP:三維點。

24,34DXF:線性標註和轉角標註的定義點的Y和Z值(在WCS中)。

 

 

點(13,23,33)指定第一尺寸界線的起點,點(14,24,34)指定第二尺寸界線的起點,點(10,20,30)指定尺寸線位置,點

(11,21,31)指定標註文字的中點。

線性標註和轉角標註組碼

下列組碼適用於線性和轉角標註。

線性和轉角標註組碼

組碼說明

50轉角、水平和垂直標註的角度。

52具有傾斜角度的線性標註類型有可選組碼52。當增加線性標註的旋轉角(組碼50)時,組碼52給出延長線的角度。

100子類標記(AcDbRotatedDimension)

 

徑標註和直徑標註組碼

下列組碼適用於半徑和直徑標註。

半徑和直徑標註組碼

組碼說明

100子類標記(AcDbRadialDimension或AcDbDiametricDimension)。

15直徑、半徑和轉角標註的定義點(在WCS中)。:X值;APP:三維點

25,35DXF:直徑、半徑和轉角標註的定義點的Y和Z值(在WCS中)。

40半徑和直徑標註的引線長度。

 

 

點(15,25,35)指定圓/圓弧上的尺寸線的第一點,點(10,20,30)指定尺寸線的第二點,點(11,21,31)指定標註文字的中點。

 

點(15,25,35)指定圓/圓弧上的尺寸線的第一點,點(10,20,30)指定圓/圓弧的圓心,點(11,21,31)指定標註文字的中點。

度標註組碼

下列組碼適用於角度標註。

角度標註組碼

組碼說明

100子類標記(AcDb3PointAngularDimension)

13線性和角度標註的定義點(在WCS中)。DXF:X值;APP:三維點。

23,33DXF:線性和角度標註的定義點的Y和Z值(在WCS值)。

14線性和角度標註的定義點(在WCS中)。DXF:X值;APP:三維點。

24,34DXF:線性和角度標註的定義點的Y和Z值(在WCS值)。

15直徑、半徑和角度標註的定義點(在WCS中)。:X值;APP:三維點

25,35DXF:直徑、半徑和角度標註的定義點的Y和Z值(在WCS中)。

16角度標註的標註弧的定義點(在OCS中)。DXF:X值;APP:3D點。

26,36DXF:角度標註的標註弧的定義點的Y和Z值(在OCS中)。

 

點(13,23,33)和點(14,24,34)指定第一尺寸界線的端點,點(10,20,30)和點(15,25,35)

指定第二尺寸界線的端點,點(16,26,36)指定標註弧線的位置,點(11,21,31)指定標註文字的中點.

 

點(15,25,35)指定角的頂點,點(13,23,33)和點(14,24,34)指定尺寸界線的端點,點(10,20,30)指定標註弧線的位置,點(11,21,31)指定標註文字的中點。

標標註組碼

下列組碼適用於座標標註。

座標標註組碼

組碼說明

100子類標記(AcDbOrdinateDimension)

13線性和角度標註的定義點(在WCS中)。DXF:X值;APP:三維點。

23,33DXF:線性和角度標註的定義點的Y和Z值(在WCS中)。

14線性和角度標註的定義點(在WCS中)。DXF:X值;APP:三維點。

24,34DXF:線性和角度標註的定義點的Y和Z值(在WCS中)。

 

 

點(13,23,33)指定特徵位置,點(14,24,34)指定引線和點,點(11,21,31)指定標註文字的中點,當創建標註時,點

(10,20,30)放置於當前UCS的原點。

注樣式替代

標註樣式替代可應用於標註、引線和公差圖元。任何用於這些圖元的替代都以擴展數據的形式存儲在圖元中。組碼1002中的控制字符串包含了被替代標註的變量組碼和關聯值。下面的例子顯示了標註圖元的擴展數據中的被替代的變量DIMTOL和DIMCLRE。

(setqdiment(car(entsel)));選擇標註圖元

(setqelst(entgetdiment'("ACAD")));得到圖元定義表

(assoc-3elst);只獲得外部數據

代碼返回如下:

(-3("ACAD"擴展數據的ACADAPPID部分開始

(1000."DSTYLE")(1002."{")標註樣式子部分的開始

(1070.177)(1070.3)DIMCLRE(組碼177)替代及關聯值(3)

(1070.71)(1070.1)DIMTOL(組碼71)替代及關聯值(1)

(1002."}")))標註樣式子部分和ACAD部分結束

LLIPSE

下列組碼適用於橢圓圖元。

橢圓組碼

組碼說明

100子類標記(AcDbEllipse)

10圓心(在WCS中)。DXF:X值;APP:三維點

20,30DXF:圓心的Y和Z值(在WCS中)

11長軸的端點(相對於圓心的相對值)。DXF:X值;APP:三維點。

21,31DXF:長軸的端點的Y和Z值,它們是相對於圓心的相對值。

210拉伸方向(可選,缺省值=0,0,1)

DXF:X值;APP:三維點

220,230DXF:拉伸方向的Y和Z值

40長軸與短軸的比例

41起始參數(對於完整橢圓此值爲0.0)

42結束參數(對於完整橢圓此值爲2pi)

 

   

組碼41和42爲下面等式中的u的起始和結束值。組碼11,21,31矢量的大小等於長軸值的1/2,即下面等式中的a值。點

10,20,30是下面等式中的c值。知道了上述數值,即可計算出所需的b值,這樣,下列方程式就完整了。

ELLIPSE命令中"參數"選項的說明

ELLIPSE命令中"參數"選項使用下面的方程式來定義一個橢圓弧。

p(u)=c+a*cos(u)+b*sin(u)

當用戶爲第一軸選定端點且爲第二軸選定距離後,變量a、b和c值即被決定。a的值爲長軸長度1/2的負值,b的值爲短軸長度1/2的負值,c爲橢圓的圓心(2-D)。

因爲此方程式是一個矢量方程且變量c具有X和Y值,所以它應該寫成如下形式:

p(u)=(Cx+a*cos(u))*i+(Cy+a*sin(u))*j

此處

Cx是點c的X值

Cy是點c的Y值

a爲-(長軸長度的1/2)

b爲-(短軸長度的1/2)

i和j表示X和Y方向上的單位矢量

在AutoCAD中,一旦確定了軸的端點和橢圓弧的起點及終點,那麼橢圓也就確定了。

當用戶選定了"參數"選項中的起始參數和結束參數後,這些參數值將被帶入方程式來求得橢圓的實際的起點和終點。橢圓的其他部分將從起點到終點以逆時針方向繪製。輸入的

u值被轉換成度數以求得cos(u)和sin(u)。

例如:

軸端點1=0,1

軸端點2=4,1

另一個軸距=2,0

起始參數=270

結束參數=0

將生成起點位於(2,2),終點位於(0,1),以逆時針方向填充的橢圓。

HATCH

下列組碼適用於圖元填充。

填充組碼

組碼說明

100子類標記(AcDbHatch)

10標高點(在OCS中)。DXF:X值=0;APP:三維點(X和Y值始終爲0,Z表示標高)

20,30DXF:標高點的Y和Z值(在OCS中)。

Y值=0,Z表示標高。

210拉伸方向(可選,缺省值=0,0,1)。

DXF:X值;APP:三維矢量

220,230DXF:拉伸方向的Y和Z值

2填充圖案名稱

70實體填充標誌(實體填充=1;圖案填充=0)

71關聯填充標誌(關聯的=1;不關聯的=0)

91邊界路徑(環)的數目

varies邊界路徑數據。組碼91指定重複次數。

75填充樣式:

0=填充"奇數"區域("普通"樣式);

1=只填充最外面的區域("外部"樣式);

2=填充整個區域("忽略"樣式);

76填充圖案類型

0=用戶定義;

1=預定義;

2=自定義

52填充圖案角度(只用於圖案填充)

41填充圖案比例或間距(只用於圖案填充)

77填充圖案加倍標誌(加倍=1,不加倍=0)(只用於圖案填充)。

78圖案定義線的數目。

varies圖案線數據。由組碼78指定重複次數。請參見圖案數據!AL(`XREF_15719_al_u05_c',1)。

47像素尺寸(可選)

98種子點數目。

10種子點(在OCS中)。DXF:X值;APP:二維點。(多圖元)

20DXF:種子點的Y值(在OCS中)。(多圖元)

 

邊界路徑數據

每個填充對象的邊界由路徑(或環)定義,該路徑由一個或多個線段組成。路徑段數據因組成路徑的圖元的類型而異。每個路徑段由它自己的組碼集定義。

填充邊界路徑數據組碼

組碼說明

92邊界路徑類型標誌(位碼)

0=缺省設置;

1=外部的;

2=多段線;

4=導出的

8=文本框;

16=最外部的

varies多段線邊界類型數據(只當邊界是多段線時)

請參見下面的多段線邊界數據表。

93邊界路徑中的邊數(只當邊界不是多段線時)

72邊類型(只當邊界不是多段線時):

1=直線;

2=圓弧;

3=橢圓弧;

4=樣條曲線;

varies邊類型數據(只當邊界不是多段線時)。請參見下面的邊界數據表。

97源邊界對象的數目。

330源邊界對象引用(多圖元)。

 

多段線邊界數據組碼

組碼說明

72有一個凸度標誌

73是關閉的標誌

93多段線頂點的數目

10頂點位置(在OCS中)。DXF:X值;APP:二維點(多圖元)

20DXF:頂點位置的Y值(在OCS中)。(多圖元)

42凸度(可選,缺省值=0)

 

直線邊數據組碼

組碼說明

10起點(在OCS中)。DXF:X值;APP:二維點。

20DXF:起點的Y值(在OCS中)。

11終點(在OCS中)。DXF:X值;APP:二維點。

21DXF:終點的Y值(在OCS中)。

 

   

圓弧邊數劇組碼

組碼說明

10圓心(在OCS中)。DXF:X值;APP:二維點

20DXF:圓心的Y值(在OCS中)。

40半徑

50起始角度

51結束角度

73是反時針方向標誌

 

   

橢圓邊數據組碼

組碼說明

10圓心(在OCS中)。DXF:X值;APP:二維點。

20DXF:圓心的Y值(在OCS中)。

11相對於圓心座標的長軸的端點(在OCS中)。:X值;APP:二維點。

21DXF:長軸端點的Y值(在OCS中)。

40短軸的長度(以長軸長度的百分數表示)。

50起始角度

51結束角度

73是反時針方向標誌

 

   

樣條曲線邊數據組碼

組碼說明

94度數

73有理

74週期性

95結點數

96控制點數

40結點值(多圖元)

10中心點(在OCS中)。DXF:X值;APP:二維點

20DXF:中心點的Y值(在OCS中)。

42權值(可選,缺省值=1)

 

案數據

下列圖案數據組碼在每個圖案定義線是重複的。

填充圖案數據組碼

組碼說明

53圖案線角度

43圖案線基點,X分量

44圖案線基點,Y分量

45圖案線偏移,X分量

46圖案線偏移,Y分量

79點劃長度項目數

49點劃長度(多圖元)

 

MAGE

下列組碼適用於圖像圖元。

圖像組碼

組碼說明

100子類標記(AcDbRasterImage)

90類版本

10插入點(在OCS中)。DXF:X值;APP:三維點

20,30DXF:插入點的Y和Z值(在OCS中)。

11單一像素的U-矢量(從插入點開始的沿着圖像的視圖底邊的點)

(在OCS中)。DXF:X值;APP:三維點

21,31DXF:U-矢量的Y和Z值(在OCS中)

12單一像素的V-矢量(從插入點開始的沿着圖像的視圖左邊的點)

(在OCS中)。DXF:X值;APP:三維點

22,32DXF:V-矢量的Y和Z值(在OCS中)

13以像素點表示的圖像尺寸。DXF:U值;APP:二維點(U和V值)

23DXF:以像素點表示的圖像尺寸的V值

340圖像定義對象的固定引用。

70圖像顯示特性

1=顯示圖像;

2=顯示非正交圖像;

4=顯示剪貼圖像;

8=打開透明狀態;

280剪裁狀態:0=關;1=開

281亮度值(0-100;缺省值=50)

282對比度值(0-100;缺省值=50)

283褪色值(0-100;缺省值=0)

360Imagedef_reactor對象的固定引用

71剪裁邊界類型:1=矩形的;2=多邊形的

91剪裁邊界的頂點數

14剪裁邊界頂點(在OCS中)。DXF:X值;APP:二維點(多圖元)

注意:對於矩形剪裁邊界類型,必須指定兩個對角點。缺省值爲(-0.5,-0.5),(圖像尺寸的x-0.5,圖像尺寸的

y-0.5)。對於多邊形剪裁邊界類型,必須指定三個或三個以上的頂點。必須依次列出頂點。

24DXF:剪裁邊界頂點的Y值(在OCS中)(多圖元)

 

INSERT

下列組碼適用於插入(塊引用)圖元。

插入組碼

組碼說明

100子類標記(AcDbBlockReference)

66可變的"跟隨屬性"標誌(可選,缺省值=0)。如果跟隨屬性標誌的值爲1,其後需要插入一連串的屬性圖元,到seqend圖元終止。

2塊名稱

10插入點(在OCS中)。DXF:X值;APP:三維點

20,30DXF:插入點的Y和Z值(在OCS中)

41X比例因子(可選,缺省值=1)

42Y比例因子(可選,缺省值=1)

43Z比例因子(可選,缺省值=1)

50旋轉角度(可選,缺省值=0)

70列數(可選,缺省值=1)

71行數(可選,缺省值=1)

44列間距(可選,缺省值=0)

45行間距(可選,缺省值=0)

210拉伸方向(可選,缺省值=0,0,1)

DXF:X值;APP:三維矢量

220,230DXF:拉伸方向的Y和Z值

 

LEADER

下列組碼適用於引線圖元。

引線組碼

組碼說明

100子類標記(AcDbLeader)

3標註樣式名稱

71箭頭標誌:0=禁用;1=可用

72引線路徑類型:0=直線段;1=樣條曲線

73引線創建標誌(缺省值=3):

0=與文本註釋一起創建引線;

1=與公差註釋一起創建引線;

2=與塊引用註釋一起創建引線;

3=創建引線,沒有任何註釋;

74鉤線方向標誌:

0=鉤線(或樣條引線的切線結束)方向與水平矢量方向相反;

1=鉤線(或樣條引線的切線結束)方向與水平矢量方向相同(請參見組碼75);

75鉤線標誌:0=無鉤線;1=有鉤線

40文字註釋高度

41文字註釋寬度

76引線中的頂點數(DXFIN時被忽略)

10頂點座標(適用於每個頂點的條目)DXF:X值;APP:三維點

20,30DXF:頂點座標的Y和Z值

77當引線的DIMCLRD=BYBLOCK時使用的顏色

340關聯註釋的固定引用(多行文字,公差或插入圖元)

210法線矢量。DXF:X值;APP:三維矢量

220,230DXF:法線矢量的Y和Z值

211引線的"水平"方向。DXF:X值;APP:三維矢量。

221,231DXF:引線的"水平"方向的Y和Z值

212塊引用插入點距最終引線頂點的偏移。:X值;APP:三維矢量

222,232DXF:塊引用插入點距最終引線頂點的偏移的Y和Z值。

213註釋位置點距最終引線頂點的偏移。DXF:X值;APP:三維矢量

223,233DXF:註釋位置點距最終引線頂點的偏移的Y和Z值。

 

   

屬於應用程序ID"ACAD"

的擴展數據可以跟隨在引線圖元之後,這描述了已應用於圖元任何標註替代。請參見標註樣式替代!AL(`XREF_62386_al_u05_c',1)。

LINE

下列組碼適用於直線圖元。

直線組碼

組碼說明

100子類標記(AcDbLine)

39厚度(可選,缺省值=0)

10起點(在WCS中)。DXF:X值;APP:三維點

20,30DXF:起點的Y和Z值(在WCS中)

11終點(在WCS中)。DXF:X值;APP:三維點

21,31DXF:終點的Y和Z值(在WCS中)

210拉伸方向(可選,缺省值=0,0,1)。

DXF:X值;APP:三維矢量

220,230DXF:拉伸方向的Y和Z值

 

   

LWPOLYLINE

下列組碼適用於優化多段線圖元。

優化多段線組碼

組碼說明

100子類標記(AcDbPolyline)

90頂點數

70多段線標誌(位碼);缺省值爲0:

1=關閉的;

128=多段線生成

43常量寬度(可選,缺省值=0);當設置了變化的寬度(組碼40和/或41)時,不使用該組碼

38標高(可選,缺省值=0)

39厚度(可選,缺省值=0)

10頂點座標(在WCS中)(多圖元),每個頂點都有該條目。:X值;APP:二維點

20DXF:頂點座標的Y值(在WCS中)(多圖元);每個頂點都有該條目。

40起始寬度(多圖元,每個頂點都有該條目)(可選,缺省值=0,多條目)。如果設置了常量寬度(組碼43),則不使用該組碼。

41結束寬度(多圖元,每個頂點都有該條目)(可選,缺省值=0,多條目)。如果設置了常量寬度(組碼43),則不使用該組碼。

42凸度(多圖元,每個頂點都有該條目)(可選,缺省值=0)。

210拉伸方向(可選,缺省值=0,0,1)。

DXF:X值;APP:三維矢量

220,230DXF:拉伸方向的Y和Z值

 

MLINE

下列組碼適用於多線圖元。

多線組碼

組碼說明

100子類標記(AcDbMline)

2字符串最長爲32個字符,它是多線的樣式名稱。在MLINESTYLE詞典中必須存在該樣式的條目。

注意:不要修改該字段。

340MLINESTYLE詞典的指針句柄/ID

40比例因子

70對正:0=上;1=零;2=下

71開放/閉合標記:1=開放;3=閉合

72頂點數

73MLINESTYLE詞典中的元素數

10起點(在WCS中)。DXF:X值;APP:三維點

20,30DXF:起點的Y和Z值(在WCS中)

210拉伸方向(可選,缺省值=0,0,1)

DXF:X值;APP:三維矢量

220,230DXF:拉伸方向的Y和Z值

11頂點座標(多條目;每個頂點都有該條目)。

DXF:X值;APP:三維點

21,31DXF:頂點座標的Y和Z值

12該頂點線段開始方向矢量(多條目;每個頂點都有該條目)。:X值;APP:三維矢量

22,32DXF:該頂點線段開始方向矢量的Y和Z值

13該頂點的斜接方向矢量(多條目;每個頂點都有該條目)。DXF:X值;APP:三維矢量

23,33DXF:斜接方向矢量的Y和Z值

74該元素的參數數目(線段中的每個元素都重複該組碼)

41元素參數(由前面的組碼74決定重複次數)

75該元素的區域填充參數的數目(線段中的每個元素都重複該組碼)

42區域填充參數(由前面的組碼75決定重複次數)

 

參數化組碼41是一個實數列表,每個組碼41對應一個實數,此列表可以包含零個或更多項。第一個組碼41

的組值是從線段頂點到直線元素路徑與斜接矢量交點的距離(沿斜接矢量方向),第二個組碼41的組值是從第一個組碼41

定義的點到直線元素實際起點的距離(沿直線元素路徑方向),第三個組碼41的組值是從直線元素起點到直線元素中第一個斷點的距離。後續的組碼41

的組值依次列出了該多線的線段中的起點和終點。線型不影響組碼41列表。

參數化組碼42也是一個實數列表。與參數化組碼41類似,它描述了此多線填充區域的參數化法。它們的組值與組碼41

參數的解釋相同,且在將所有多線中的直線元素當作一個整體時,它們定義了多線填充區域的邊界。

一個使用組碼42機制的普通例子是,當未被填充的多線與已填充的多線相交時,使用mledit

使被填充的多線在相交區域顯現出來,這將導致相互影響的多段線中每個直線元素的兩個組碼42發生變化,一個是填充開始的,一個是填充結束的。

在多線圖元和多線樣式對象中組碼2是多餘的,儘管可以安全的讀取和使用它們的關聯值,但這些組碼在任何情況下都不能被修改。可以修改的正確字段如下:

多線

在相同對象中的組碼340,它指定了正確的MLINESTYLE對象。

多線樣式

MLINESTYLE詞典中的組碼3(位於組碼350之前)的值有當前MLINESTYLE的圖元名或句柄。

MTEXT

下列組碼適用於多行文字圖元。

多行文字組碼

組碼說明

100子類標記(AcDbMText)

10插入點。DXF:X值;APP:三維點

20,30DXF:插入點的Y和Z值

40缺省文字高度

41參考矩形寬度

71附着點:

1=左上;2=中上;3=右上;

4=左中;5=中間;6=右中;

7=左下;8=中下;9=右下;

72繪圖方向:

1=由左至右;2=由右至左;

3=由上至下;4=由下至上;

1文字字符串。如果文字字符串少於250個字符,所有的字符存放於組碼1中;如果字符串多於250個字符,字符串被分爲250

個字符的數據塊,這些數據塊存放在一個或多個組碼3中。如果使用組碼3,最後的組碼是組碼1,其中的數據組少於250個字符。

3附加文字(總是存放於250個字符的數據塊中)

7文字樣式名稱(如果未提供則爲STANDARD)

210拉伸方向(可選,缺省值=0,0,1)

DXF:X值;APP:三維矢量

220,230DXF:拉伸方向的Y和Z值

11X軸方向矢量(在WCS中)

DXF:X值;APP:三維矢量

注意:當組碼50(弧度表示的轉角)作爲DXF的輸入被傳遞時,它將被轉化爲等價的方向矢量(如果組碼50和組碼11、21、31

都被傳遞,方向由最後一個決定)。提供此組碼是爲了方便從文字對象向多行文字對象的轉化。

21,31DXF:X軸方向矢量的Y和Z值(在WCS中)

42組成多行文字的字符的水平寬度。(此值始終小於或等於組碼41的值)。

43組成多行文字的字符的垂直高度。

50弧度表示的旋轉角度。

 

OLEFRAME

下列組碼適用於OLE邊框圖元。

OLE邊框組碼

組碼說明

100子類標記(AcDbOleFrame)

70OLE版本號

90二進制數據長度

310二進制數據(多直線)

1Ole數據的結尾(字符串"OLE")

 

   

OLE2FRAME

下列組碼適用於OLE2邊框圖元,該信息是隻讀的。在DXFIN時,這些值被忽略,因爲它們是OLE

二進制數據的一部分,且可通過訪問函數來獲得。

OLE2邊框組碼

組碼說明

100子類標記(AcDbOle2Frame)

70OLE版本號

3二進制數據的長度

10左上角(在WCS中)。DXF:X值;APP:三維點

20,30DXF:左上角的Y和Z值(在WCS中)。

11右下角(在WCS中)。DXF:X值;APP:三維點

21,31DXF:右下角的Y和Z值(在WCS中)

71OLE對象類型:1=鏈接;2=內嵌;3=靜態

72平鋪模式描述:

0=對象在一個平鋪的模型空間視口中;

1=對象在非平鋪的空間視口中(圖紙空間或浮動模型空間);

90二進制數據長度

310二進制數據(多直線)

1OLE數據的結尾(字符串"OLE")

 

DXF輸出例子:

OLE2FRAME

5

2D

100

AcDbEntity

67

1

8

0

100

AcDbOle2Frame

70

2

3

PaintbrushPicture

10

4.43116

20

5.665992

30

0.0

11

6.4188

21

4.244939

31

0.0

71

2

72

1

90

23680

3100155764BD60082B91140114B08C8F9A916400000000000000000506DC0D0D9AC

310

1940114B08C8F9A916400000000000000000506DC0D0D9AC194002303E5CD1FA

310

10400000000000000000764BD60082B9114002303E5CD1FA1040000000000000

...

...

AutoLISP函數entnext輸出的樣例:

命令:(setqe(entgete3))

((-1.<圖元名:7d50428>)(0."OLE2FRAME")(5."2D")

(100."AcDbEntity")(67.1)(8."0")(100."AcDbOle2Frame")

(70.2)(3"PaintbrushPicture")(104.431165.665990.0)

(116.41884.244940.0)(71.2)(72.1))

POINT

下列組碼適用於點圖元。

點組碼

組碼說明

100子類標記(AcDbPoint)

10點位置(在WCS中)。DXF:X值;APP:三維點

20,30DXF:點位置的Y和Z值(在WCS中)

39厚度(可選,缺省值=0)

210拉伸方向(可選,缺省值=0,0,1)

DXF:X值;APP:三維矢量

220,230DXF:拉伸方向的Y和Z值

50當繪製點時,X軸與起作用的UCS之間的角度(可選,缺省值=0)(當PDMODE非零時使用該組碼)

 

POLYLINE

下列組碼適用於多段線。

多段線組碼

組碼說明

100子類標記(AcDb2dPolyline或AcDb3dPolyline)

10DXF:始終爲0;:一個"僞"點,X和Y值始終爲零,Z值爲多段線的標高(二維時在OCS中,三維時在WCS中)

20DXF:始終爲零

30DXF:多段線的標高(二維時在OCS中,三維時在WCS中)

39厚度(可選,缺省值=0)

70多段線標誌(位編碼);缺省值爲0:

1=這是一個閉合的多段線(或在M方向閉合的多邊形網格);

2=曲線擬合添加了頂點;

4=添加樣條曲線擬合添加了頂點;

8=這是一個三維多段線;

16=這是一個三維多邊形網格;

32=在N方向閉合的多邊形網格;

64=多段線是多面網格;

128=不斷在此多段線頂點的周圍生成線型圖案;

40缺省開始寬度(可選,缺省值=0)

41缺省結尾寬度(可選,缺省值=0)

71多邊形網格的M頂點數(可選,缺省值=0)

72多邊形網格的N頂點數(可選,缺省值=0)

73平滑表面M向的密度(可選,缺省值=0)

74平滑表面N向的密度(可選,缺省值=0)

75曲線和平滑表面類型(可選,缺省值=0),整型編碼,不是位碼:

0=無平滑表面擬合:

5=二次B樣條曲線表面;

6=三次B樣條曲線表面;

8=Bezier表面

210拉伸方向(可選,缺省值=0,0,1)

DXF:X值;APP:三維矢量

220,230DXF:拉伸方向的Y和Z值

 

具有"AUTOCAD_POSTSCRIPT_FIGURE"應用程序ID的擴展數據可以跟隨在多段線圖元后。其中包含的信息與

PostScript圖像和PostScript填充的信息有關。

多面網格

在DXF中多面網格是多段線的一個變種。存在多面網格位標識(組碼70中的64位)的多段線被識別爲多面網格。組碼71

指定網格中的頂點數,組碼72指定面數。儘管這些數字對於所有由命令PFACE

創建的網格來說都是正確的,但應用程序不必將正確的值放入此字段中。多段線表頭後是一個頂點圖元序列,用於指定頂點座標,其後是組成網格的面。

AutoCAD

圖元結構爲所給出的面圖元指定的頂點數強加一個限制。用戶可以通過將多邊形分解成三角形楔體來表現更復雜的多邊形,這些楔體的邊應該是不可見的,這樣可以防止拆分單元的可見人造邊被繪製出來。命令

PFACE可以自動執行拆分,但當應用程序直接生成多面網格時,必須由應用程序親自執行拆分。在拆分過成中,每個面的頂點數是關鍵參數。系統變量

PFACEVMAX提供了一個每個面具有頂點數的申請,該變量是隻讀的,其值爲4。

命令PFACE創建多面網格時首先生成所有頂點座標的圖元,然後生成面定義圖元。這種次序是根據AutoCAD

中處理多面網格的組碼的要求決定的。雖然從DXF中讀取多面網格的程序允許頂點和麪的次序不固定,但在DXF

中生成多面網格的程序仍應該首先生成所有頂點,再生成所有的面。

RAY

下列組碼適用於射線圖元。

射線組碼

組碼說明

100子類標記(AcDbRay)

10起點(在WCS)。DXF:X值;APP:三維點

20,30DXF:起點的Y和Z值(在WCS)

11單位方向矢量(在WCS)。DXF:X值;APP:三維點

21,31DXF:單位方向矢量的Y和Z值(在WCS中)

 

REGION

下列組碼適用於面域圖元。

面域組碼

組碼說明

100子類標記(AcDbModelerGeometry)

70建模格式版本號(當前值=1)

1私有數據(有多行,每個少於255個字符)

3私有數據的附加行(如果前面的組碼1字符串多於255個字符)

 

   

SEQEND

下列組碼適用於seqend圖元。

Seqend組碼

組碼說明

-2APP:序列的開始圖元名。此圖元標記了多段線的頂點(頂點類型名稱)的結束,或插入圖元的屬性圖元(顯示屬性類型名稱)的結束(該插入圖元具有由組碼

66(存在且非零)指定的屬性)。:文件中不保存此組碼。

 

   

SHAPE

下列組碼適用於形圖元。

形組碼

組碼說明

100子類標記(AcDbShape)

39厚度(可選,缺省值=0)

10插入點(在WCS中)。DXF:X值;APP:三維點

20,30DXF:插入點的Y和Z值(在WCS中)

40尺寸

2形名稱

50旋轉角度(可選,缺省值=0)

41相對X比例因子(可選,缺省值=1)

51傾斜角(可選,缺省值=0)

210拉伸方向(可選,缺省值=0,0,1)。

DXF:X值;APP:三維矢量

220,230DXF:拉伸方向的Y和Z值

 

   

SOLID

下列組碼適用於實體圖元。

實體組碼

組碼說明

100子類標記(AcDbTrace)

10第一角點。DXF:X值;APP:三維點

20,30DXF:第一角點的Y和Z值

11第二角點。DXF:X值;APP:三維點

21,31DXF:第二角點的Y和Z值

12第三角點。DXF:X值;APP:三維點

22,32DXF:第三角點的Y和Z值

13第四角點。如果只輸入三個角點來定義實體,則第四角點的座標與第三角點相同。DXF:X值;APP:三維點

23,33DXF:第四角點的Y和Z值

39厚度(可選,缺省值=0)

210拉伸方向(可選,缺省值=0,0,1)

DXF:X值;APP:三維點

220,230DXF:拉伸方向的Y和Z值

 

SPLINE

此組碼適用於樣條曲線圖元。

樣條曲線組碼

組碼說明

100子類標記(AcDbSpline)

210法線矢量(如果樣條曲線不是平面圖元,則會被忽略):X值;APP:三維點

220,230DXF:法線矢量的Y和Z值

70樣條曲線標誌(位編碼):

1=閉合的樣條曲線;

2=週期性樣條曲線;

4=有理樣條曲線;

8=平面;

16=線性(平面位也被設置)

71樣條曲線的階

72結點數目

73控制點數目

74擬合點數目(如果存在)

42結點公差(缺省值=0.0000001)

43控制點公差(缺省值=0.0000001)

44擬合公差(缺省值=0.0000000001)

12起始正切方向(在WCS中)-可被忽略。:X值;APP:三維點。

22,32DXF:起始正切方向(可被忽略)的Y和Z值(在WCS中)。

13結束正切方向(在WCS中)-可被忽略。:X值;APP:三維點

23,33DXF:結束正切方向(可被忽略)的 Y 和 Z 值(在WCS中)

40結點值(每個結點都有一個該條目)

41權值(如果非1);如果都不是1時,帶多個組碼對

10控制點(在WCS中)每個控制點都有一個該條目。:X值;APP:三維點

20,30DXF:控制點的Y和Z值(在WCS中)(每個控制點都有一個該條目)

11擬合點(在WCS中)每個擬合點都有一個該條目。:X值;APP:三維點

21,31DXF:擬合點的Y和Z值(在WCS中)(每個擬合點都有一個該條目)

 

TEXT

下列組碼適用於文字圖元。

文字組碼

組碼說明

100子類標記(AcDbText)

39厚度(可選,缺省值=0)

10第一對齊點(在OCS中)。DXF:X值;APP:三維點

20,30DXF:第一對齊點的Y和Z值(在OCS中)

40文字高度

1缺省值(字符串本身)

50文字旋轉(可選,缺省值=0)

41X向的相對比例因子-寬度(可選,缺省值=1)

當使用調整類型的文字時,需要調整此值。

51傾斜角度(可選,缺省值=0)

7文字樣式名稱(可選,缺省值=STANDARD)

71文本生成標誌(可選,缺省值=0)

2=文本反向(在X方向上產生鏡像);

4=文本倒置(在Y方向上產生鏡像);

72水平文字對正類型(可選,缺省值=0)(爲整型碼,不是位碼):

0=左;1=中心;2=右;

3=對齊的(如果垂直對齊=0);

4=中央(如果垂直對齊=0);

5=調整(如果垂直對齊=0);

具體信息請參見下表

11第二對齊點(在OCS中)DXF:X值;APP:三維點

只有組碼72或73的值非零時,此值纔有意義(基線和左對齊除外)

21,31DXF:第二對齊點的Y和Z值(在OCS中)

210拉伸方向(可選,缺省值=0,0,1)

DXF:X值;APP:三維矢量

220,230DXF:拉伸方向的Y和Z值

100子類標記(AcDbText)

73垂直文字對正類型(可選,缺省值=0)(整型編碼,不是位碼)

0=基線;1=下;2=中;3=上;

詳細信息請參見下表

 

下表更加詳細地說明了組碼72(水平對齊)和組碼73(垂直對齊)。

組碼72和73整型編碼

組碼73組碼72     

3(上)左上中上右上   

2(中)72或73的值非零時,此值纔有意義(基線和左對齊除外)

21,31DXF:第二對齊點的Y和Z值(在OCS中)

210拉伸方向(可選,缺省值=0,0,1)

DXF:X值;APP:三維矢量

220,230DXF:拉伸方向的Y和Z值

100子類標記(AcDbText)

73垂直文字對正類型(可選,缺省值=0)(整型編碼,不是位碼)

0=基線;1=下;2=中;3=上;

詳細信息請參見下表

 

下表更加詳細地說明了組碼72(水平對齊)和組碼73(垂直對齊)。

組碼72和73整型編碼

組碼73組碼72     

3(上)左上中上右上   

2(中)左中正中右中   

1(下)左下中下右下   

0(基線)左中心右對齊中央調整

 

如果組碼72和/或73的值非零,則忽略第一對齊點,AutoCAD

將根據第二對齊點以及字符串本身的高度和寬度來計算新值(在應用了文字樣式之後)。如果組碼72和73爲零或爲空,則第二對齊點無意義。

TOLERANCE

下列組碼適用於公差圖元。

公差組碼

組碼說明

100子類標記(AcDbFcf)

3標註樣式名稱

10插入點(在WCS中)。DXF:X值;APP:三維點

20,30DXF:插入點的Y和Z值(在WCS中)

210拉伸方向(可選,缺省值=0,0,1)。

DXF:X值;APP:三維矢量

220,230DXF:拉伸方向的Y和Z值

11X軸方向矢量(在WCS中)。DXF:X值;APP:三維矢量

21,31DXF:X軸方向矢量的Y和Z值(在WCS中)

 

TRACE

下列組碼適用於寬線圖元。

寬線組碼

組碼說明

100子類標記(AcDbTrace)

10第一角點(在OCS中)。DXF:X值;APP:三維點

20,30DXF:第一角點的Y和Z值(在OCS中)

11第二角點(在OCS中)。DXF:X值;APP:三維點

21,31DXF:第二角點的Y和Z值(在OCS中)

12第三角點(在OCS中)。DXF:X值;APP:三維點

22,32DXF:第三角點的Y和Z值(在OCS中)

13第四角點(在OCS中)。DXF:X值;APP:三維點

23,33DXF:第四角點的Y和Z值(在OCS中)

39厚度(可選,缺省值=0)

210拉伸方向(可選,缺省值=0,0,1)。

DXF:X值;APP:三維矢量

220,230DXF:拉伸方向的Y和Z值

 

   

VERTEX

下列組碼適用於頂點圖元。

頂點組碼

組碼說明

100子類標記(AcDbVertex)

100子類標記(AcDb2dVertex或AcDb3dPolylineVertex)

10位置點(二維時,在OCS中;三維時,在WCS中)。:X值;APP:三維點

20,30DXF:位置點的Y和Z值(二維時在OCS中,三維時在WCS中)。

40起始寬度(可選,缺省值爲0)

41結束寬度(可選,缺省值爲0)

42凸度(可選,缺省值爲0)。凸度是一段圓弧所包含的角度的1/4的正切,當弧從起點到終點爲順時針時,凸度爲負值。0

凸度表示直線段,1凸度表示半圓。

70頂點標誌:

1=擬合曲線創建的額外頂點;

2=爲此頂點定義的擬合切線方向。DXF輸出時0擬合切線方向可被忽略,但設置此位仍有意義;

4=不被使用;

8=樣條曲線擬合創建的樣條曲線頂點;

16=樣條曲線邊框控制點;

32=三維多段線頂點

64=三維多邊形網格;

128=多面網格頂點;

50曲線擬合切線方向。

71多面網格頂點索引(可選,只在值非零時存在)

72多面網格頂點索引(可選,只在值非零時存在)

73多面網格頂點索引(可選,只在值非零時存在)

74多面網格頂點索引(可選,只在值非零時存在)

 

多面網格中的每個頂點都有它的頂點標誌128位設置。如果圖元提供了網格頂點的座標,那麼它的64位也被設置,且組碼10、20和30

給出頂點座標。頂點索引由頂點圖元出現在多段線中的次序決定,第一個出現的頂點的索引爲1。

如果頂點定義了網格的一個面,那麼它的頂點標誌組碼只設置了128位,沒有設置64位。此時,平面圖元的組碼10、20和

30(位置)是不相關的且在DXF中始終記爲0。定義網格的頂點索引由組碼71、72、73和74

給出,這些組碼值指定了先前由索引定義的頂點中的一個。如果索引爲負數,則以此索引指定的頂點開始的邊不可見。第一個0頂點標記了平面頂點的結束。

VIEWPORT

下列組碼適用於視口圖元。

視口組碼

組碼說明

100子類標記(AcDbViewport)

10中心點(在WCS中)。DXF:X值;APP:三維點

20,30DXF:中心點的Y和Z值(在WCS中)

40圖紙空間單位中的寬度

41圖紙空間單位中的高度

68視口字段:

-1=打開,但完全關閉屏幕,或者由於當前狀態時超過$MAXACTVP限制,一個視口被關閉。

0=關閉;

<正值>=打開且激活。此值表示了視口的堆疊次序,此處1爲激活的視口,2是下一個視口,依此類推。

69視口ID。在每次打開圖形時會發生變化。除了始終爲1的圖紙空間視口外,其他的都不保存。

 

   

下表列出了可以附加到視口圖元的擴展數據。與普通圖元數據相比,擴展組碼的次序十分重要。組碼也可以多次出現。

視口擴展數據組碼

組碼說明

1001應用程序ID("ACAD")。從此處開始是描述視口的擴展數據部分。

1000開始視口數據,此字段始終爲字符串MVIEW,將來可能出現其他數據組。

1002開始窗口描述符數據。此字段始終爲字符串。

1070擴展數據版本號,始終爲整數16。

1010視圖目標點(在WCS中)。DXF:X值;APP:三維點。

1020,1030DXF:視圖目標點的Y和Z值(在WCS中)。

1010視圖方向矢量(在WCS中)。DXF:X值;APP:三維矢量。

1020,1030DXF:視圖方向矢量的Y和Z值(在WCS中)。

1040視圖扭曲角。

1040視圖高度。

1040視圖中心點的X值(在DCS中)。

1040視圖中心點的Y值(在DCS中)。

1040透視鏡頭長度。

1040前剪裁平面的Z值。

1040後剪裁平面的Z值。

1070視圖模式。

1070圓縮放。

1070快速縮放設置。

1070UCSICON設置

1070捕捉開/關

1070柵格開/關

1070捕捉樣式

1070捕捉ISOPAIR

1040捕捉角度

1040捕捉基點座標的UCSX值。

1040捕捉基點座標的UCSY值。

1040捕捉X間距

1040捕捉Y間距

1040柵格X間距

1040柵格Y間距

1070在打印標誌中消隱

1002開始凍結圖層表(可能爲空)。此字段始終爲字符串"{"。

1003該視口中凍結圖層的名稱。此表可以包括依賴外部參照的圖層。組碼1003的任何數字可以在此出現。

1002結束凍結圖層表。此字段始終爲字符串"}"。

1002結束視口數據。此字段始終爲字符串"}"。

 

注意因子ZOOMXP由下面的公式計算得出:組碼41/第二個組碼1040(或圖紙空間高度/模型空間高度)。

XLINE

下列組碼適用於參照線圖元。

參照線組碼

組碼說明

100子類標記(AcDbXline)

10第一點(在WCS中)。DXF:X值;APP:三維點。

20,30DXF:第一點的Y和Z值(在WCS中)。

11單位方向矢量(在WCS中)。DXF:X值;APP:三維矢量。

21,31DXF:單位方向矢量的Y和Z值(在WCS中)。

 

深入DXF

 

 

此節討論了涉及DXF組碼的高級概念。

數據庫對象

   

   

AutoCAD圖形主要由有組織的數據庫對象的容器組成。每個數據庫對象都有如下條目:

句柄,對於圖形/DXF文件其值唯一,且在圖形的生命週期中不變(常量)。從AutoCAD版本10起已存在此格式,但從AutoCAD版本10

開始,句柄始終被啓用;

可選的外部數據表,與圖元一樣從AutoCAD版本11起開始出現;

可選的Persistentreactor表;

可選的擴展詞典的所有關係指針,此指針依次指向被應用程序放入詞典的子對象;

符號表和符號表記錄都是數據庫對象,因此它們既可以有句柄,也可以在它們的DXF文件中具有外部數據和Persistentreactors。

   

   

PersistentInter-Object引用句柄

組碼範圍集允許對象直接指定同一圖形中其他對象的參照。伴隨四種範圍有四種關係類型可以被指定:

軟鍵指針句柄

硬鍵指針句柄

軟鍵從屬句柄

硬鍵從屬句柄

這些句柄類型在AutoLISP中作爲圖元名出現,在ADSRX作爲ads_name出現,也可以作爲源於ARX的like-named

類出現。當其他對象的參照保持不變時,這些值始終被維護在插入、外部參照和寫塊操作中,以便更新那些(在被複制的集中的)對象間的參照,使它們指向被複制的對象。

同樣,定義的"任意"句柄的組碼範圍允許方便的存儲句柄值,這些句柄值不被轉化成圖元名,但在插入、外部參照或寫塊操作中被轉換。

注意如果使用外部數據組碼1005存儲句柄,則這些句柄被視爲軟鍵指針句柄,這意味着當對象組被複制或被插入另一個圖形中時,有關對象間的參照將被轉換。儘管在

AutoLISP和ADSRX中外部數據條目1005始終作爲句柄返回,但所有參照句柄組碼範圍都表示爲"圖元名"(在AutoLISP中)或

ads_name結構(在ADSRX中)。

   

   

指針和所有關係參照

指針是一種只表示對象的用法但不佔有對象或對其負有責任的參照。指針參照表示對象以某些方式使用其他對象,並分配獲取其他對象路徑。

所有關係參照表示所有者對象對具有所有者句柄的對象負有責任。所有關係參照指定完整的DWG和DXF

文件的常用寫入方式(例如少數關鍵根對象的開始)及所有者句柄的寫入方式。

一個對象可以有任意多個指針參照與它相聯繫,但它只能有一個所有者。

   

   

硬鍵參照和軟鍵參照

指針或從屬的硬鍵參照都可以避免對象被清理,但軟鍵參照卻不行。

在AutoCAD中,塊定義和複雜圖元是它們的元素的硬鍵從屬,符號表和詞典是它們的元素的軟鍵從屬。多段線圖元是它們的頂點和seqend

圖元的硬鍵從屬,插入圖元是它們的屬性和seqend圖元的硬鍵從屬。

當建立另一個對象的參照類型時,應首先考慮此對象是否被保護起來,不受命令PURGE的影響。

任意句柄

任意句柄比較特殊,在AutoCAD內部,它們不被轉化成永久任務標識符,在AutoLISP

中,它們不被轉化成圖元名,諸如此類。它們被存儲爲句柄,當在圖形合併操作過程中句柄值被轉換時,任意句柄被忽略。

在所有環境下,任意句柄都能被函數handent轉換成當前圖形的圖元名。在引用外部DXF和DWG文件中的對象時經常用到任意句柄。

   

   

   

組碼1005

外部數據組碼1005與軟鍵指針具有相同的特性和語義,這意味着無論主對象在何時被合併到另一個的圖形中,它們都可以被轉換,但在AutoCAD

中不能轉換成永久任務標識符,在AutoLISP和ADSRX中不能轉換成圖元名。此組碼被存儲爲句柄。

   

   

   

   

子類標記

在爲組數據流分類過程中的一個主要問題是一個單一對象可能由幾個分類成員組成,不同的開發者可能根據不同的繼承標準進行分類。因爲每個繼承標準都可以獨立的發展,所以必須使類分類成員彼此隔離。

所有類分類成員都必須出現在它們的實例數據的指定類部分(組碼100-"子類"標記,其後爲類名稱字符串)之前。這並不影響定義對象狀態,只是爲DXF

文件分析者提供了一種控制組碼的方法以適應用軟件。

例如,具有源自不同類的數據的對象表述如下:

999

FOOGRANDCHILD,definedbyclassAcDbSonOfSonOfFoo,which

999

isderivedfromAcDbSonOfFoo

0

FOOGRANDCHILD

5

C2

100

AcDbFoo

999

Uses10/20/30groupcodes

10

1.1

20

2.3

30

7.3

100

AcDbSonOfFoo

999

Alsouses10/20/30groupcodes,foradifferentpurpose

10

1.1

20

2.3

30

7.3

100

AcDbSonOfSonOfFoo

999

Alsouses10/20/30groupcodes,foryetanotherpurpose

10

13.2

20

23.1

30

31.2

999

NowfortheXdata

1001

APP_1

1070

45

1001

APP_2

1004

18A5B3EF2C199A

   

   

   

擴展詞典和PersistentReactors

擴展詞典是一個存儲了詞典對象句柄的可選序列,詞典對象屬於可以包含有序條目的當前對象。此功能模塊承認任何數據對象的任意數據對象附件。任何圖元或對象都可以擁有此區域。

Persistentreactors是一個存儲(在當前對象中註冊它們自己爲reactors的)對象的對象句柄。任何圖元或對象都可以擁有此區域。

擴展數據

擴展數據是由AutoLISP或ARX應用程序創建的。如果圖元包括擴展數據,則擴展數據將跟在普通定義數據之後。從1000到1071

的組碼用來描述擴展數據。下面是一個包含擴展數據的圖元的例子,此圖元出現在DXF文件格式中。

普通圖元定義數據:

0

INSERT

5

F11

100

AcDbEntity

8

TOP

100

AcDbBlockReference

2

BLOCK_A

10

0.0

20

0.0

30

0.0

擴展圖元定義數據:

1001

AME_SOL

1002

{

1070

0

1071

1.95059E+06

1070

519

1010

2.54717

1020

2.122642

1030

2.049201

1005

ECD

1005

EE9

1005

0

1040

0.0

1040

1.0

1000

MILD_STEEL

組碼1001表示擴展數據的開始。與普通圖元組碼相比,在擴展數據中相同的組碼可以出現多次,而且次序非常重要。

擴展數據按照已註冊的應用程序名稱編組。每一個註冊應用程序的組都從組碼1001開始,其組值爲表示應用程序名稱的字符串。註冊應用程序名稱符合APPID

符號表條目。

如果需要,應用程序可以使用多個APPID名稱。APPID名稱是永久性的,儘管那些在圖形中非當前使用的APPID名稱將被清理。每個APPID

名稱可以擁有一個附着到每個對象上的數據組。在應用程序的組碼中,擴展數據組的序列及其含意由應用程序定義。

擴展數據組碼的說明如下表:

擴展數據組碼及其說明

圖元名組碼說明

字符串1000擴展數據中的字符串最長爲255個字節(第256個字符將被保存爲空字符)。

應用程序名稱1001

也是字符串值字符串名稱最長爲31個字節(第32個字符將被保存爲空字符)。

注意:請不要向您的擴展數據中添加組碼1001,因爲AutoCAD認爲組碼1001是新的應用程序擴展數據組的開始。

控制字符串1002一個擴展數據控制字符串即可以是"{"也可以是

"}"。這些大括號可以使應用程序通過把數據細分爲表來組織它們的數據。左大括號開始表,右大括號結束最近的表。表可以被嵌套。

當AutoCAD爲應用程序讀取擴展數據時,它首先檢查大括號是否配對。

圖層名稱1003與擴展數據相聯繫的圖層的名稱。

二進制數據1004二進制數據被組織到可變長度的數據組中。每個數據組最長爲127個字節。在ASCIIDXF文件中,二進制數據被表示爲十六進制數字字符串,每個二進制字節兩個字符。

數據庫句柄1005圖形數據庫中的圖元句柄。

注意:當使用INSERT、INSERT*、XREF綁定、XBIND或部分DXFIN

將擁有句柄和擴展數據句柄的圖形輸入另一個圖形時,擴展數據句柄將以某種方式轉換成它們相對應的圖元句柄,以此來維護它們的綁定。在EXPLODE

塊操作或其他任何AutoCAD操作中也如此進行。當AUDIT檢測到擴展數據句柄與圖形文件中的圖元句柄不匹配時,它認爲這是一個錯誤。如果

AUDIT修復圖元,它將設置句柄爲0。

3個實數1010,1020,1030三個實數值的次序爲X、Y和Z。它們可被用於表示點或矢量記錄。AutoCAD不改變它們的值。

世界空間位置1011,1021,1031與簡單的三維點不同,世界空間座標可被移動、縮放、旋轉和連同屬於擴展數據的上級圖元一起產生鏡像。當命令STRETCH被用於上級圖元且此點位於所選窗口中時,世界空間位置也可被拉伸。

世界空間位移1012,1022,1032同樣三維點也可被縮放,旋轉和連同上級圖元一起產生鏡像(但不能被移動或拉伸)。

世界方向1013,1023,1033同樣三維點也可被旋轉和連同上級圖元一起產生鏡像(但不能被移動、縮放或拉伸)。

實數1040一個實數值

距離1041一個可連同上級圖元一起被縮放的實數值。

縮放比例1042同樣是一個可連同上級圖元一起被縮放的實數值。與距離的區別在於此圖元爲應用程序定義的。

Integer1070一個16位整數(有符號的或無符號的)。

Long1071一個32位符號(長型)整數。

 

   

   

   

   

對象座標系統(OCS)

要在圖形數據庫中保存空間(在DXF文件中),與每個圖元關聯的點將以圖元的自己的對象座標系統(OCS)表示。在早先版本的AutoCAD中OCS被稱作ECS。在OCS中,描述三維空間中圖元位置所需要的附加信息是描述OCS的Z軸的三維矢量和標高值。

如果給定Z軸(或拉伸)方向,可以通過平移三維空間中的原點和圍繞Z軸旋轉X和Y軸定義無窮多的座標系。但對於相同的Z軸方向,只有一個OCS,它具有如下特性:

它的原點與WCS原點一致;

XY平面中的X和Y軸方向以任意方式確定且一旦確定便固定不變。AutoCAD使用任意軸算法來確定此座標系(請參見任意軸算法!AL(`XREF_24259_al_u05_c',1))。

對於一些圖元,OCS等同於WCS且所有點(DXF組10-37)以世界座標表示,請參見下表:

與圖元類型聯繫的座標系統

圖元說明

三維圖元,如:直線、點、三維面、三維多段線、三維頂點、三維網格和三維網格頂點。這些圖元不位於某一特別的平面中,所有的點都以世界座標表示。在這些圖元中只有直線和點可被拉伸,它們的拉伸方向可以不同於世界座標系的Z軸方向。

二維圖元圖元,如:圓、圓弧、填充、寬線、文字、屬性、屬性定義、形、插入、二維多段線、二維頂點、優化多段線、圖案填充和圖像。這些圖元本質上是平面的,所有的點都以對象座標表示。這些圖元都能被拉伸,它們的拉伸方向可不同於世界座標系的Z軸方向。

標註一些標註點可以用WCS表示,一些標註點可以用OCS表示。

視口以世界座標系表示。

 

一旦AutoCAD爲給定的圖元確定OCS,此OCS使用如下:

與圖元存儲在一起的標高值表示XY平面(與包含圖元的平面重合)與WCS原點間的位移(沿Z軸方向),用戶定義標高的大小並不重要。

任何UCS中二維點都被轉換成相應的OCS中的二維點,這些點將依據UCS來平移和旋轉。

轉換過程中可能出現下列情況:

當用戶獲得一個圖元后,不能可靠地找出究竟是哪一個UCS在起作用;

當用戶按給定的UCS輸入圖元的XY座標後,進行DXFOUT時,在DXF文件中可能不承認這些座標,爲了使用這些值,您必須知道AutoCAD計算X和Y軸的方法。

(與圖元存儲在一起的且被輸出到DXF文件中的)標高值是UCS的XY面與OCS的XY平面的Z座標的總差值,此刻此圖元的用戶指定的標高值則被繪製。

   

   

   

   

任意軸算法

在AutoCAD內部使用任意軸算法爲所有使用對象座標系的對象生成對象座標系。

利用給定的作爲座標系統Z軸的單位長度矢量,通過任意軸算法可以生成座標系統的X軸,再根據右手法則確定Y軸。

此方法用來檢查給定的Z軸(也被稱作法向量),看它是否與世界座標系的Z軸的正負半軸接近:如果接近,則用給定的Z軸叉積世界座標系的Y軸來求取任意X軸;如果不接近,則用給定的Z軸叉積世界座標系的Z軸來求取任意X軸。決定是否接近的邊界值根據易於計算和便於在機器間交換數據的原則確定。該邊界值現取值1/64,此值正好既能用六個十進制分數數字表示也能用六個二進制分數位表示。

算法描繪如下(假定所有矢量都是用世界座標系表示的三維矢量):

設給定的法向量爲N;

設世界座標系的Y軸爲Wy,其值始終爲(0,1,0);

設世界座標系的Z軸爲Wz,其值始終爲(0,0,1);

設根據法向量N確定的任意X和Y軸爲Ax和Ay,N也可被稱爲Az(任意Z軸),它們的求取方法如下:

如果(abs(Nx)<1/64)且(abs(Ny)<1/64)則

Ax=WyXN(此處"X"爲叉積運算)。

否則,

Ax=WzXN.

調整Ax比例到單位長度。

求取Ay矢量的方法如下:

Ay=NXAx.調整Ay比例到單位長度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章