亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        但永平,張 蕾,張國濤,楊 凱

        (中原工學(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)大大簡化。這樣,一臺(tái)PC機(jī)既可用于CAD/CAM設(shè)計(jì),又可用于控制雕刻機(jī)的運(yùn)作,大大降低了整套設(shè)備的成本?;诒疚脑O(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é)省百分之二十五的文件空間且可讀性強(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ù)庫中的所有信息。一個(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”且組值為LINE時(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ù)庫的研制[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
        試論我國未決羈押程序的立法完善
        失能的信仰——走向衰亡的民事訴訟程序
        “程序猿”的生活什么樣
        英國與歐盟正式啟動(dòng)“離婚”程序程序
        基于VMM的程序行為異常檢測
        偵查實(shí)驗(yàn)批準(zhǔn)程序初探
        我國刑事速裁程序的構(gòu)建
        創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
        恐怖犯罪刑事訴訟程序的完善
        伊人激情av一区二区三区| 一本色道久久88加勒比—综合| 高潮内射主播自拍一区| 日本最新免费二区三区| 国产又黄又猛又粗又爽的a片动漫| 不卡无毒免费毛片视频观看| 网址视频在线成人亚洲| 99re6在线视频精品免费| 日韩人妻无码一区二区三区| 久久精品视频91| 亚洲一区二区日韩精品| 亚洲精品成人无限看| 亚洲色大网站www永久网站| 久久露脸国产精品WWW| 精品国产中文久久久免费| 成人在线免费电影| 久久国产36精品色熟妇| 熟女少妇av免费观看| 亚洲中文字幕九色日本| 久久久久亚洲精品无码网址蜜桃| 久久久精品久久波多野结衣av| 新久久久高清黄色国产| 国产精品亚洲三级一区二区三区| 一本无码av中文出轨人妻| 亚洲AV伊人久久综合密臀性色| 男女后入式在线观看视频| 97se色综合一区二区二区| 夜夜嗨av一区二区三区| 麻豆久久久国内精品| 亚洲美女自拍偷拍视频| 在线观看热码亚洲av每日更新| 2021年国产精品每日更新| 国产女主播福利一区二区 | 中文字幕日本人妻久久久免费| 亚州综合激情另类久久久| 日韩av中文字幕亚洲天| 亚洲免费观看视频| 999国内精品永久免费视频| 久久国产香蕉一区精品天美| 中文字字幕在线中文乱码解| 日本高清视频www|