999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于VC++的DXF數(shù)據(jù)文件接口程序設(shè)計(jì)

2012-01-24 12:25:18但永平張國(guó)濤
電子設(shè)計(jì)工程 2012年23期
關(guān)鍵詞:程序

但永平,張 蕾,張國(guó)濤,楊 凱

(中原工學(xué)院 電子信息學(xué)院,河南 鄭州 450007)

AutoCAD是目前世界上最成功的CAD軟件平臺(tái)之一,它具有齊全的圖形編輯功能和直觀的系統(tǒng)構(gòu)架,有豐富的繪圖指令、強(qiáng)大的編輯功能,支持多種圖形輸入、輸出設(shè)備。同時(shí),AutoCAD具有相當(dāng)?shù)撵`活性,可根據(jù)需要進(jìn)行二次開發(fā)[1]。可以通過對(duì)AutoCAD的二次開發(fā),使其更廣泛的運(yùn)用于其他工藝過程中。例如,在實(shí)際的工程雕刻中,為了設(shè)計(jì)雕刻的圖形,需要在具有齊全的圖形編輯功能和直觀的系統(tǒng)構(gòu)架的CAD軟件中編輯設(shè)計(jì)圖形,而設(shè)計(jì)好的圖形數(shù)據(jù)參數(shù)要輸出到雕刻的控制程序中,進(jìn)而控制雕刻圖形。

盡管AutoCAD是一個(gè)功能很強(qiáng)的圖形編輯系統(tǒng)。但它所包含的一系列指令只能在AutoCAD狀態(tài)下工作。為使AutoCAD的圖形信息能夠讀取出來,這就需要將高級(jí)語言程序來對(duì)它進(jìn)行參數(shù)提取,這實(shí)質(zhì)上就是AutoCAD與高級(jí)語言的接口。AutoCAD系統(tǒng)提供有多種接口方式,如.SCR文件、.DXF文件、AutoLisp語言接口等[2]。本文只介紹.DXF文件接口方式。

為此,本文針對(duì)在實(shí)際的雕刻過程中為有效地讀取CAD軟件設(shè)計(jì)圖形的數(shù)據(jù)參數(shù),對(duì)DXF文件數(shù)據(jù)格式,分析DXF文件的組成,根據(jù)DXF文件格式,通過C語言的文件管理功能,設(shè)計(jì)出了C語言與AutoCAD接口程序,在自行開發(fā)軟件與AutoCAD之間建立起了數(shù)據(jù)通道,從而實(shí)現(xiàn)了數(shù)據(jù)傳遞和共享。而本文所應(yīng)用的雕刻控制平臺(tái)數(shù)控系統(tǒng)是一種新型的數(shù)控系統(tǒng),它用一臺(tái)PC實(shí)現(xiàn)包括插補(bǔ)、伺服等功能在內(nèi)的所有數(shù)控功能,使數(shù)控系統(tǒng)的結(jié)構(gòu)大大簡(jiǎn)化。這樣,一臺(tái)PC機(jī)既可用于CAD/CAM設(shè)計(jì),又可用于控制雕刻機(jī)的運(yùn)作,大大降低了整套設(shè)備的成本。基于本文設(shè)計(jì)的C語言與AutoCAD接口程序已成功應(yīng)用在雕刻控制平臺(tái)數(shù)控系統(tǒng),并取得了滿意的結(jié)果。

1 DXF文件

1.1 DXF文件概述

DXF是Drawing eXchange File的縮寫,意思為圖形交換文件,在工程制圖中有廣泛的應(yīng)用,掌握了DXF文件的讀寫對(duì)編寫CAD軟件時(shí)的圖形信息的交換有重要意義。它有兩種格式:一種是ASCII DXF格式;一種是二進(jìn)制DXF格式。ASCII DXF文件格式是ASCII文字格式的AutoCAD圖形的完整表示,這種文件格式易于被其他程序處理。二進(jìn)制格式的DXF文件與ASCII格式的DXF文件包含的信息相同,但格式上二進(jìn)制格式比ASCII格式更精簡(jiǎn),能夠節(jié)省百分之二十五的文件空間且可讀性強(qiáng)。

為了與其他軟件共享圖形數(shù)據(jù),AutoCAD提供了DXF(Drawing Interchange Format)文件格式,此格式現(xiàn)已被廣泛使用,成為事實(shí)上的標(biāo)準(zhǔn)。通過DXF文件格式,可以使用高級(jí)語言開發(fā)程序讀取AutoCAD圖形文件,也可以創(chuàng)建DXF文件供AutoCAD打開。DXF一般情況下是文本文件,可以使用文本編輯器(如Windows記事本、寫字板)來查看、編輯其內(nèi)容。

DXF文件是AutoCAD與外部聯(lián)系的主要接口方式,易于將AutoCAD的圖形轉(zhuǎn)換成CAD系統(tǒng)所能讀取的文件格式。.DXF文件是一種具有嚴(yán)格格式的順序文件.是以ASCII碼形式存放圖形信息的數(shù)據(jù)文件一個(gè)DXF文件包括了對(duì)應(yīng)圖形數(shù)據(jù)庫(kù)中的所有信息。一個(gè)DXF文件可由高級(jí)語言程序生成,也可以由繪制的圖形使用DXFOUT命令生成該圖形的DXF文件。.DXF文件的實(shí)質(zhì)是一組表達(dá)具體圖形的程序執(zhí)行指令,只要按照格式標(biāo)準(zhǔn)調(diào)用DXF文件并按其組碼和組織執(zhí)行對(duì)應(yīng)的任務(wù),即可將圖形重現(xiàn)。

1.2 DXF文件結(jié)構(gòu)

由于DXF一般情況下是文本文件,因此DXF文件可以使用文本編輯器(如Windows記事本、寫字板)來查看、編輯其內(nèi)容。用記事本打開一個(gè)DXF文件,可以發(fā)現(xiàn)它里面有這樣一些代碼:

0

SECTION

2

HEADER

9

$ACADVER

1

AC1015

……

即里面總是數(shù)字和字符串/數(shù)字在交替的出現(xiàn)。數(shù)字就叫做代碼 (通常稱為組碼),緊跟組碼數(shù)字的稱為關(guān)聯(lián)值對(duì)。DXF文件本質(zhì)上由代碼及關(guān)聯(lián)值對(duì)組成。代碼(通常稱為組碼)表明其后的值的類型。使用這些組碼和值對(duì),可以將DXF文件組織到由記錄組成的區(qū)域中,這些記錄由組碼和數(shù)據(jù)項(xiàng)目組成。在DXF文件,每個(gè)組碼和值各占一行。

一個(gè)完整的ASCII格式的DXF文件結(jié)構(gòu)如下:

1)標(biāo)題段(HEADER) 標(biāo)題段包含圖形的基本信息,記錄AutoCAD系統(tǒng)的所有標(biāo)題變量的當(dāng)前值或當(dāng)前狀態(tài)。標(biāo)題變量記錄了AutoCAD系統(tǒng)的當(dāng)前工作環(huán)境,如SNAP捕捉當(dāng)前狀態(tài)、柵格間距式樣、當(dāng)前圖層層名及線型、顏色等。

2)類段(CLASSES)類段由程序自己定義的各種類。

3)表段(TABLES)表段包含以下符號(hào)表的定義:

APPID(應(yīng)用程序標(biāo)識(shí)表)

BLOCK_RECORD(塊參照表)

DIMSTYLE(標(biāo)注樣式表)

LAYER(圖層表)

LTYPE(線型表)

STYLE(文字樣式表)

UCS(用戶坐標(biāo)系表)

VIEW(視圖表)

VPORT(視口配置表)

4)塊段(BLOCKS)塊段記錄了所用塊的塊名,當(dāng)前圖層層名、塊的種類、塊的插入基點(diǎn)及組成該塊的所有成員。塊的種類分為圖形塊、帶有屬性的塊和無名塊3種。無名塊包括用HATCH命令生成的剖面線和用DIM命令所完成的尺寸標(biāo)準(zhǔn)。

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

6)對(duì)象段(OBJECTS)。包含圖形中的非圖形對(duì)象。

7)文件結(jié)束段(END OF FILE)DXF文件的結(jié)束標(biāo)志。DXF 以”0”、”EOF”結(jié)束[3]。

每個(gè)段都以一個(gè)后跟字符串SECTION的組碼0開始,其后是組碼2和表示該段名稱的字符串 (例如,HEADER)。每個(gè)段都由定義其元素的組碼和值組成。每個(gè)段都以一個(gè)后跟字符串ENDSEC的組碼0結(jié)束。

有些組代碼會(huì)因表達(dá)環(huán)境的不同而有多個(gè)含義。在分析時(shí)需要根據(jù)不同的段和不同的表達(dá)而判斷[4]。表1部分常用的組代碼的含義[4],表2直線段的實(shí)體描述[5],表3圓的實(shí)體描述[5]。

表1 常用組代碼的含義Tab.1 Meaning of comm on group of code

表2 直線段的實(shí)體描述數(shù)據(jù)Tab.2 Entity describe data of a line segment

表3 圓的實(shí)體描述數(shù)據(jù)Tab.3 Entity description data of round

1.3 DXF文件處理流程

從DXF文件中檢索,當(dāng)檢索到某個(gè)段時(shí)就轉(zhuǎn)到那個(gè)段的處理程序去處理。如檢索到HEADER段就轉(zhuǎn)入HEADER段的處理程序去處理。

圖1 DXF文件處理流程Fig.1 Flow chart DXF file handling

圖形的大部分信息都在實(shí)體ENTITIES段中,因此讀取實(shí)體段的內(nèi)容很重要。讀取實(shí)體段的數(shù)據(jù)首先要考慮讀取數(shù)據(jù)的存儲(chǔ)方式,然后再進(jìn)行后一步的處理或存入數(shù)據(jù)文件中。此處用鏈表結(jié)構(gòu)來存儲(chǔ)。

各個(gè)實(shí)體的數(shù)據(jù)分成兩塊:公共數(shù)據(jù)塊和特殊數(shù)據(jù)塊。公共數(shù)據(jù)塊存儲(chǔ)每個(gè)實(shí)體都具有特征參數(shù),如所在圖層,實(shí)體標(biāo)識(shí),線型名……。

特殊數(shù)據(jù)塊存儲(chǔ)每個(gè)實(shí)體特有的數(shù)據(jù),如實(shí)體LINE,它里面有兩個(gè)端點(diǎn)的坐標(biāo)值;實(shí)體CIRCLE中有圓心坐標(biāo)值和半徑值等。

單個(gè)實(shí)體的數(shù)據(jù)處理方法:讀取一個(gè)實(shí)體的數(shù)據(jù)首先根據(jù)組碼“0”后的實(shí)體標(biāo)識(shí)字符串來確定其為哪一種實(shí)體,然后再根據(jù)這個(gè)實(shí)體的具體情況來讀取數(shù)據(jù)。

2 C語言與AutoCAD的接口

2.1 接口程序設(shè)計(jì)方法

AutoCAD實(shí)體種類很多,每種實(shí)體對(duì)應(yīng)一個(gè)接口函數(shù),因此,接口程序包含的函數(shù)很多。本文僅以直線度和圓為例說明接口程序的設(shè)計(jì)方法。

為了方便引用,用結(jié)構(gòu)體函數(shù)來定義直線和圓。本文目的是將讀取到的DXF文件中的直線和圓的信息,顯示在屏幕上。

1)直線段的接口程序 讀取直線的函數(shù)原型定義為:

typedef struct tagLine{

float x1,y1,z1;

float x2,y2,z2;

}LINE;

其中 x1,y1,z1 為直線的起點(diǎn)坐標(biāo),x2,y2,z2 為直線的終點(diǎn)坐標(biāo)。在函數(shù)體中調(diào)用文件輸入輸出函數(shù),按照表2示直線段的格式,若讀取到組代碼為“0”且組值為L(zhǎng)INE時(shí),將組代碼“10”,“20”,“30”后的起點(diǎn)坐標(biāo)分別寫到 x1,y1,z1 里;最后將組代碼“11”,“21”,“31”后的終點(diǎn)坐標(biāo)分別寫到 x2,y2,z2中。

2)圓的接口程序 讀取圓的函數(shù)原型定義為:

typedef struct tagCircle{

float x,y,z;

float r;

}CIRCLE;

其中x,y,z為圓心坐標(biāo),r為圓的半徑。在函數(shù)體中調(diào)用文件輸入輸出函數(shù),按照表3圓的格式,若讀取到組代碼為“0”且組值為 CIRCLE 時(shí),將組代碼“10”,“20”,“30”后的圓心坐標(biāo)分別讀到 x,y,z里;最后將組代碼“40”后的圓的半徑讀到 r中[6]。

2.2 C語言讀取接口程序流程圖

本接口程序比較復(fù)雜,在合計(jì)時(shí)將程序分為主程序和兩個(gè)子程序來設(shè)計(jì)。主程序?yàn)檎麄€(gè)程序的核心部分,它的主要功能是從DXF文件中讀取組代碼和組值,并將直線的起點(diǎn)及終點(diǎn)坐標(biāo)和圓的圓心坐標(biāo)及半徑值讀取出來,并存入指針中。兩個(gè)子程序分別是直線和圓的顯示程序,直線顯示子程序的功能是顯示所打開DXF文件中直線的條數(shù),每條直線的起點(diǎn)X坐標(biāo)、起點(diǎn)Y坐標(biāo)、起點(diǎn)Z坐標(biāo)、終點(diǎn)X坐標(biāo)、終點(diǎn)Y坐標(biāo)、終點(diǎn)Z坐標(biāo)。圓的顯示子程序的功能是顯示所打開DXF文件中圓的個(gè)數(shù),每個(gè)圓的圓心X坐標(biāo)、圓心Y坐標(biāo)、圓心Z坐標(biāo)以及圓的半徑值。

調(diào)用接口程序來讀取DXF文件中圖形信息,要有一定的順序。圖2給出了讀取DXF文件中圖形信息的過程,具體步驟如下:

第一步:以“讀”的方式打開一個(gè)文本文件,并獲得文件指針dxf。

FILE*dxf; /*定義文件指針dxf*/

dxf=fopen(filename,“r”);/* 打開文件,并獲得文件指針 */

圖2 讀取DXF文件中圖形信息流程圖Fig.2 Flow chart Read DXF files,graphics information

第二步:從文本中讀取字符

fscanf(dxf,"%f",&code);/* 存放組碼值 */

fscanf(dxf,"%d",&value);/* 存放字符串 */

第三步:讀取幾何信息

if(code==0&&strcmp(codevalue,"LINE")==0);/* 讀取直線的信息*/

if(code==0&&strcmp(codevalue,"CIRCLE")==0); /* 讀取圓的信息*/

第四步:顯示子程序

void print1(EntityData*entity1);/* 直線的顯示子程序 */void print2(EntityData*entity2);/* 圓的顯示子程序 */

第五步:調(diào)用子程序

第六步:關(guān)閉文本文件。

fclose(dxf); /* 關(guān)閉文件 */

此外 DXF以”0”、”EOF”結(jié)束,因此在函數(shù)中可用 exit(0)、return(0)來表示文件結(jié)束。

而 feof(dxf);用來檢查文件是否結(jié)束,遇文件結(jié)束符(0或者EOF)返回非零值,否則返回0[7]。

3 程序調(diào)試

在AutoCAD中所畫的圖形(注意:本設(shè)計(jì)只適用于直線和圓,因此所畫的圖形只能是直線或者是圓)如圖3所示。

圖3 AutoCAD中的自定義圖形Fig.3 AutoCAD custom graphics

在如圖2所示的命令行中輸入DXFOUT,則系統(tǒng)會(huì)自動(dòng)生成一個(gè)DXF文件,自行命名該DXF文件,將該文件保存在程序生成的可執(zhí)行文件所在的文件夾中(可執(zhí)行文件被系統(tǒng)自動(dòng)放在debug文件夾中)。

再打開可執(zhí)行文件,即可看到如圖4所示的結(jié)果。

圖4 接口程序生成的可執(zhí)行文件打開后的界面Fig.4 Interface chart of interface program to generate the executable file to open

接下來可以根據(jù)界面上的提示進(jìn)行操作。界面提示“請(qǐng)輸入文件名:”,我們可以輸入一個(gè)DXF文件的文件名,然后按回車鍵。

如果文件不能正常打開,界面上將會(huì)出現(xiàn)打開文件失敗,如果能正常打開,界面上將會(huì)出現(xiàn)正在讀取文件…。

并且界面將會(huì)顯示所打開DXF文件中直線的條數(shù),每條直線的起點(diǎn)X坐標(biāo)、起點(diǎn)Y坐標(biāo)、起點(diǎn)Z坐標(biāo)、終點(diǎn)X坐標(biāo)、終點(diǎn)Y坐標(biāo)、終點(diǎn)Z坐標(biāo)以及所打開DXF文件中圓的個(gè)數(shù),每個(gè)圓的圓心X坐標(biāo)、圓心Y坐標(biāo)、圓心Z坐標(biāo)、圓的半徑坐標(biāo)。

在界面上輸入我們所用例子的DXF文件名后,按回車,將會(huì)顯示如圖5所示。

圖5 接口程序的實(shí)例顯示結(jié)果Fig.5 Results of interface program examples show

該運(yùn)行窗口中顯示了直線的個(gè)數(shù)和它們的各個(gè)起點(diǎn)和終點(diǎn)坐標(biāo)以及圓的個(gè)數(shù)和它們各個(gè)圓心坐標(biāo)和半徑值。并且與該DXF文件以記事本打開后的文件中所顯示的直線和圓的個(gè)數(shù)及坐標(biāo)相對(duì)應(yīng),由此可見本軟件是成功的。

4 結(jié)束語

根據(jù)DXF文件格式,借助于C語言的文件管理功能,設(shè)計(jì)出了接口程序。在自行開發(fā)軟件與AutoCAD之間建立起了數(shù)據(jù)通道,把AutoCAD中的數(shù)據(jù)提取出來。在數(shù)控加工中應(yīng)用課提高設(shè)計(jì)效率,縮短設(shè)計(jì)周期。

通過該軟件可以將在AutoCAD中所畫的圖形的信息(直線的起點(diǎn)和終點(diǎn)坐標(biāo),圓的圓心坐標(biāo)和半徑)提取出來,然后通過一個(gè)數(shù)控程序?qū)⒆鴺?biāo)信息傳遞給數(shù)控機(jī)床,數(shù)控機(jī)床[8-9]就能夠加工成和在AutoCAD中所畫的圖形一致的圖案。

這樣就省去了數(shù)控編程來實(shí)現(xiàn)加工的麻煩,提高了生產(chǎn)效率。

[1]宋耀增.AutoCAD DXF文件 C語言函數(shù)庫(kù)的研制[J].燕山大學(xué)學(xué)報(bào),1998,22(4):304-309.SONG Yao-zeng.AutoCAD DXF file Clanguage function library development[J].Journal of Yanshan University,1998,2(4):304-309.

[2]竇憲民.AutoCAD接口技術(shù)研究[J].鄭州輕工業(yè)學(xué)院學(xué)報(bào):自然科學(xué),2002,17(2):86-88.DOU Xian-min.AutoCAD interface technology research[J].Zhengzhou Light Industry University:Natural Science,2002,17(2):86-88.

[3]陶元芳.C語言命令文件式參數(shù)繪圖函數(shù)集[J].太原重型機(jī)械學(xué)院學(xué)報(bào),2002,23(2):107-112.TAO Yuan-fang.C language command file type parameter drawing function set[J].Taiyuan heavy machinery institute journal,2002,23(2):107-112.

[4]張金萍.DXF接口文件在復(fù)雜圖形數(shù)控加工中的應(yīng)用[J].沈陽化工學(xué)院學(xué)報(bào),2004,18(2):152-159.ZHANG Jin-ping.DXF interface files in nc machining of complex graphics application[J].Shenyang Institute of Chemical Journal,2004,18(2):152-159.

[5]鄧燕.AutoCAD2004中文版基礎(chǔ)與實(shí)例教程[M].北京:電子工業(yè)出版社,2004.

[6]譚浩強(qiáng).C語言程序設(shè)計(jì)[M].3版.北京:清華大學(xué)出版社,2005.

[7]夏云龍.VC++深入詳解[M].北京:電子工業(yè)出版社,2008.

[8]王瀟.數(shù)控機(jī)床大推力永磁同步直線電機(jī)控制方法 [J].電子科技,2011(6):124-126.WANGXiao.Study on the control of the high thrust permanent magnet liner synchronous motor used in the numerical control machine[J].Electronic Science and Technology,2011(6):124-126.

[9]李周平.基于直線電機(jī)的數(shù)控機(jī)床驅(qū)動(dòng)控制技術(shù)[J].現(xiàn)代電子技術(shù),2012(3):158-160.LI Zhou-ping.Drive control technology of numerical control machine based on linear motor[J].Modern Electronics Technique,2012(3):158-160.

猜你喜歡
程序
給Windows添加程序快速切換欄
電腦愛好者(2020年6期)2020-05-26 09:27:33
試論我國(guó)未決羈押程序的立法完善
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
基于VMM的程序行為異常檢測(cè)
偵查實(shí)驗(yàn)批準(zhǔn)程序初探
我國(guó)刑事速裁程序的構(gòu)建
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
恐怖犯罪刑事訴訟程序的完善
主站蜘蛛池模板: 久热re国产手机在线观看| 国产成人精品一区二区三在线观看| 亚洲无码在线午夜电影| 2024av在线无码中文最新| 欧美97色| 久久久亚洲国产美女国产盗摄| 国产一区二区免费播放| 久久久久亚洲av成人网人人软件| 欧美日韩成人在线观看| 久久6免费视频| 国产丰满大乳无码免费播放| 国产原创自拍不卡第一页| 97在线免费| 91福利免费| a在线亚洲男人的天堂试看| 亚洲欧美综合另类图片小说区| 乱系列中文字幕在线视频| 国产成人三级| 制服丝袜在线视频香蕉| 一级毛片免费观看不卡视频| 日本高清在线看免费观看| 99热精品久久| 亚洲制服丝袜第一页| 亚洲国产成人在线| 久视频免费精品6| 无码AV日韩一二三区| 国产精品天干天干在线观看| 亚洲区一区| 亚洲精品国产综合99| 制服丝袜一区二区三区在线| 亚洲精品成人7777在线观看| 人妻出轨无码中文一区二区| 日韩欧美中文在线| 国产精鲁鲁网在线视频| 免费毛片a| 久久国产精品影院| 中文字幕免费播放| 久青草网站| 制服丝袜亚洲| 亚洲最新在线| 国产不卡网| 亚洲精品中文字幕无乱码| 国产一区免费在线观看| 欧美在线视频不卡| 又粗又大又爽又紧免费视频| 97精品伊人久久大香线蕉| 欧美亚洲一区二区三区在线| 亚洲成a人片在线观看88| 最新亚洲av女人的天堂| 9999在线视频| 欧美视频在线播放观看免费福利资源| 亚洲成av人无码综合在线观看| 国产精品流白浆在线观看| 欧美成人aⅴ| 久久久精品国产亚洲AV日韩| 国产电话自拍伊人| 中美日韩在线网免费毛片视频| 亚洲欧美日本国产综合在线| 精品国产成人高清在线| 国产精品免费入口视频| 免费va国产在线观看| 在线国产你懂的| 亚洲中文字幕无码爆乳| 在线视频亚洲色图| 欧美五月婷婷| 98超碰在线观看| 最新国产成人剧情在线播放| 免费一级成人毛片| 国产va在线观看| 国产一级无码不卡视频| 青青草综合网| 亚洲无码熟妇人妻AV在线| 日韩毛片免费观看| 在线五月婷婷| 99视频在线免费观看| 亚洲无码91视频| 亚亚洲乱码一二三四区| 国产在线视频二区| 成人韩免费网站| 少妇精品在线| 亚洲欧美成人影院| 精品午夜国产福利观看|