AUTOCAD中條形碼生成控件的設(shè)計(jì)_第1頁
AUTOCAD中條形碼生成控件的設(shè)計(jì)_第2頁
AUTOCAD中條形碼生成控件的設(shè)計(jì)_第3頁
AUTOCAD中條形碼生成控件的設(shè)計(jì)_第4頁
AUTOCAD中條形碼生成控件的設(shè)計(jì)_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、AUTOCAD中條形碼生成控件的設(shè)計(jì)摘要本文給出了AutAD平臺(tái)下條形碼的生成方法和算法流程,解決了對(duì)AutAD文檔進(jìn)展唯一標(biāo)識(shí)和計(jì)算機(jī)識(shí)別的問題,并開發(fā)了相應(yīng)的系統(tǒng)控件。關(guān)鍵詞AutAD控件條形碼VB一、引言條形碼技術(shù)最早出如今上世紀(jì)40年代,但直到70年代左右它才得到實(shí)際應(yīng)用,而隨著現(xiàn)代電子技術(shù)和信息技術(shù)的開展,條形碼技術(shù)已經(jīng)被世界上的國家和地區(qū)普遍使用,并逐步浸透到多個(gè)技術(shù)領(lǐng)域。條形碼種類很多,常見的大概有二十多種碼制,其中包括:de39碼標(biāo)準(zhǔn)39碼、dabar碼庫德巴碼、de25碼標(biāo)準(zhǔn)25碼、ITF25碼穿插25碼、atrix25碼矩陣25碼、UP-A碼、UP-E碼、EAN-13碼EA

2、N-13國際商品條碼、EAN-8碼EAN-8國際商品條碼、中國郵政碼矩陣25碼的一種變體、de-B碼、SI碼、de11碼、de93碼、ISBN碼、ISSN碼、de128碼de128碼,包括EAN128碼、de39ESES專用的39碼等一維條碼和PDF417等二維條碼。本文所述的條形碼控件目前只用于生成EAN-13碼,因?yàn)樗芎芎玫谋凰袟l形碼掃描器兼容。二、控件算法與設(shè)計(jì)2.1設(shè)計(jì)需求:2022年2月我們有一套軟件系統(tǒng)開發(fā)任務(wù),系統(tǒng)中要求可以對(duì)每張?jiān)O(shè)計(jì)圖紙由AutAD繪制發(fā)放唯一的圖號(hào),并能在日后對(duì)已發(fā)放圖號(hào)的圖紙進(jìn)展審核和管理。為了可以唯一標(biāo)識(shí)圖紙,同時(shí)滿足方便電腦識(shí)別的要求,我們決定采用條

3、形碼技術(shù)。EAN-13碼是我國目前用得極為普遍的條碼種類,其碼位數(shù)量符合我公司目前圖紙編號(hào)位數(shù),并能完好記錄我公司特殊的連圖號(hào)信息;同時(shí)又由于其對(duì)打印質(zhì)量要求不是很苛刻,現(xiàn)有打印設(shè)備即能滿足使用,最終在系統(tǒng)中采用了EAN-13碼。2.2控件的算法實(shí)現(xiàn):AUTAD是一個(gè)專業(yè)工程圖繪制軟件,其文件格式是目前工業(yè)電子文檔的事實(shí)標(biāo)準(zhǔn),但在其內(nèi)部并沒有集成條形碼生成功能,只能采用二次開發(fā)的方式來實(shí)現(xiàn)條形碼的生成及繪制。我們所做的就是把生成EAN-13碼的算法邏輯和AutAD繪制條形碼的過程封裝在一個(gè)外部函數(shù)庫Barde.dll中,并將其分發(fā)給程序開發(fā)人員,使他們只需調(diào)用這個(gè)函數(shù)就能在AutAD中繪制條形

4、碼,而不再需要考慮詳細(xì)的條碼生成和繪制細(xì)節(jié)。圖1第一步,掌握EAN-13碼的編碼規(guī)那么。EAN-13被稱為標(biāo)準(zhǔn)版的EAN條碼,其構(gòu)造如圖1所示,從左到右各局部依次為:左側(cè)空白區(qū)、起始符、左側(cè)數(shù)據(jù)符、中間分隔符、右側(cè)數(shù)據(jù)符、校驗(yàn)符、終止符、右側(cè)空白區(qū)。表1是各局部的信息,其中模塊數(shù)據(jù)值“1表示黑條;“0表示白空。表1構(gòu)造名稱所占模塊數(shù)模塊數(shù)據(jù)值左側(cè)空白區(qū)9無起始符3恒為“101左側(cè)數(shù)據(jù)符426位數(shù)值,圖中的“27通過A方法或B方法計(jì)算中間分隔符5恒為“01010右側(cè)數(shù)據(jù)符355位數(shù)值,圖中的“89012通過方法計(jì)算校驗(yàn)符71位數(shù)值,圖中的最后一位“8后面有詳細(xì)說明終止符3恒為“101右側(cè)空白區(qū)9

5、無在EAN-13碼中共113個(gè)模塊,每個(gè)模塊的寬度為0.33??倢挾葹?7.29,其中條碼局部寬度為31.35。總高度為26.26,左、右側(cè)數(shù)據(jù)符高度為22.85(顯示碼值)或23.18不顯示碼值;起始符、中間分隔符、終止符高度為24.50。支持放大倍數(shù)為0.82倍。EAN-13碼可記錄12位有效數(shù)據(jù),第13位為校驗(yàn)位符,占7個(gè)模塊。我們把這12位有效數(shù)中的第1位稱為前置字符。前置字符用來確定左側(cè)數(shù)據(jù)符的數(shù)據(jù)值是通過“A方法還是“B方法來計(jì)算見表1,而前置字符本身并不占用任何模塊見圖1中的第一位“1。其余每位有效數(shù)據(jù)(共11位,左側(cè)數(shù)據(jù)符中有6位,右側(cè)數(shù)據(jù)符中有5位)各占7個(gè)模塊。表2是前置字

6、符與“A“B方法左側(cè)數(shù)據(jù)符中每位數(shù)據(jù)值的計(jì)算方法的對(duì)照表2前置字符每位數(shù)據(jù)值對(duì)應(yīng)的計(jì)算方法第一位第二位第三位第四位第五位第六位AAAAAA1AABABB2AABBAB3AABBBA4ABAABB5ABBAAB6中國ABBBAA7ABABAB8ABABBA9ABBABA例如,圖1中的前置字符為“1,我們要使用表2中的第2行數(shù)據(jù),也就是左側(cè)數(shù)據(jù)符中第一位數(shù)值(“2)應(yīng)通過“A方法來計(jì)算第五位數(shù)值(“6)應(yīng)通過“B方法來計(jì)算表3是不同的數(shù)值經(jīng)“A、“B、“三種方法計(jì)算出來的結(jié)果,其中“1表示黑條;“0表示白空。例如:左側(cè)數(shù)據(jù)符中第一位數(shù)值(“2)通過“A方法計(jì)算出來的結(jié)果為:“0010011;右側(cè)數(shù)

7、據(jù)符中第三位數(shù)值(“0)通過“方法計(jì)算出來的結(jié)果為:“1110010。下面是計(jì)算校驗(yàn)位符模塊數(shù)據(jù)值的步驟:把12位有效數(shù)據(jù)值所有偶數(shù)位的數(shù)字代碼求和賦值a。將中的a乘以3賦值a。把12位有效數(shù)據(jù)值所有奇數(shù)位的數(shù)字代碼求和賦值b。將a和b相加賦值。取的個(gè)位數(shù)d。校驗(yàn)位符數(shù)值=10d。使用“方法計(jì)算校驗(yàn)位符模塊數(shù)據(jù)值。例:求“123456789012的校驗(yàn)位符,如圖1所示。a=2+4+6+8+0+2=22a=3*a=66b=1+3+5+7+9+1=26=a+b=66+26=92d=2校驗(yàn)位符數(shù)值=10d=8校驗(yàn)位符模塊數(shù)據(jù)值=1001000表3數(shù)值A(chǔ)方法B方法方法00011010100111111

8、0010100110010110011110011020010011001101111011003011110101000011000010401000110011101101110050110001011100110011106010111100001011010000701110110010001100010080110111000100110010009000101100101111110100請(qǐng)檢驗(yàn)一下,如圖1所示,“123456789012的模塊數(shù)據(jù)值應(yīng)為:“101001001101111010011101011000100001010010001010101001000111010

9、01110010110011011011001001000101我們依次把這些數(shù)字中的“1繪成一定尺寸寬度和高度已在前面提過的黑條;把數(shù)字中的“0留出一定尺寸的白空也就繪出了相應(yīng)的條形碼。第二步,設(shè)計(jì)產(chǎn)生模塊數(shù)據(jù)值的算法。根據(jù)以上規(guī)那么,設(shè)計(jì)AKEDE函數(shù),輸入12位阿拉伯?dāng)?shù)字,輸出其產(chǎn)生的模塊數(shù)據(jù)值,即由“0和“1組成的字符串。將其作為繪制函數(shù)的輸入。第三步,繪制條形碼。根據(jù)第二步中計(jì)算出的模塊數(shù)據(jù)值,在AutAD中繪制黑條和留出白空。我們使用了AutAD中的多段線PLine對(duì)象來繪制黑條,因?yàn)檫@種實(shí)體對(duì)象的長度和線粗等屬性都很好控制。之后還應(yīng)該考慮在相應(yīng)的位置繪出條形碼代表的字符值,以便人

10、的識(shí)別。注意,我們使用的是AutAD2000版本,R14版以前的版本沒有提供VB的官方標(biāo)準(zhǔn)開發(fā)接口。第四步,功能的完善。經(jīng)過第二、三步,我們已經(jīng)到達(dá)了繪制條形碼的最根本的要求,程序員可以輸入一個(gè)條形碼碼值作為函數(shù)Drabarde的參數(shù),并調(diào)用這個(gè)函數(shù)來繪制對(duì)應(yīng)的條形碼。但這還不夠,我們應(yīng)考慮以指定的位置、比例、角度和顏色繪制條形碼的功能。為此給函數(shù)Drabarde添加參數(shù)如下:draSale,獲取比例值、PTX,獲取起始位置的橫坐標(biāo)、PTY,獲取起始位置的縱坐標(biāo)、nPI可選參數(shù),獲取旋轉(zhuǎn)角度、ShValue,獲取是否要繪制條形碼碼值的信息、blr,獲取顏色等。三、設(shè)計(jì)過程中的關(guān)鍵問題:1、微軟

11、公司在其ffie系列中包含有一個(gè)簡單條形碼控件:irsftAessBardentrl9.0以下稱為:SBDE9,只要安裝了微軟的Aess2000ffie2000套件之一,其它版本不一定包含該控件系統(tǒng)就會(huì)注冊(cè)該控件。該控件支持11種條形碼格式,只需把條形碼碼值賦給其“Value屬性,該控件即可顯示相應(yīng)的條形碼。我們最初有過這樣的思路:獲取用戶給出的條形碼碼值后,先用SBDE9得到相應(yīng)條形碼圖形,然后在AutAD中處理?xiàng)l形碼圖形。但SBDE9不具備類似圖片控件的屬性,無法簡單地把條形碼圖形拷貝出來,因此只能使用API函數(shù)BitBlt該函數(shù)對(duì)指定的源設(shè)備環(huán)境區(qū)域中的像素進(jìn)展位塊轉(zhuǎn)換,以傳送到目的設(shè)備

12、環(huán)境來拷貝SBDE9中的條形碼圖形,不過經(jīng)過考慮我們放棄了這種思路。首先,按上述思路產(chǎn)生的圖形屬于位圖而不是矢量圖,圖形中的黑條和白空尺寸不嚴(yán)格,從而繪制出的條形碼無法識(shí)別。其次,向AutAD中粘貼圖形時(shí),AutAD提供兩種方式,一種需要關(guān)聯(lián)到圖形文件,這肯定是不可取的;另一種是以LE對(duì)象來處理圖形,但用這種方式無法對(duì)粘貼上去的圖形再進(jìn)展尺寸調(diào)整和角度旋轉(zhuǎn)。基于以上考慮,我們采用在AD中直接繪制條碼,設(shè)計(jì)一個(gè)DRADE函數(shù),根據(jù)條碼生成函數(shù)輸出的“0、“1字符串,依次在AD繪出PLINE實(shí)體。2、任意角度的繪制條形碼。要求條形碼按一定角度繪制,需要把構(gòu)成條形碼的所有多段線和文字碼值對(duì)象都按一定

13、角度傾斜繪出。圖2是表示條形碼圖2不旋轉(zhuǎn)旋轉(zhuǎn)角度=0時(shí)的樣子,注意,坐標(biāo)原點(diǎn)不是AutAD中坐標(biāo)系的0,0點(diǎn),而是用戶給函數(shù)Drabarde的起始位置參數(shù)PTX,PTY,表示條形碼應(yīng)該從什么地方開場繪制,函數(shù)Drabarde的參數(shù)已在前面介紹過。圖2中箭頭所指處為文字“1的起始位置a,b,下面我們以該點(diǎn)為例說明如何處理旋轉(zhuǎn)時(shí)的位置變化。如圖3所示,點(diǎn)就是圖2中的點(diǎn),為了方便說明,對(duì)其位置進(jìn)展了放大。條形碼以插入點(diǎn)點(diǎn)PTX,PTY為圓心,逆時(shí)鐘旋轉(zhuǎn)一定角度后,點(diǎn)的位置變?yōu)椋?a,b),求出點(diǎn)的位置是解決這個(gè)問題的關(guān)鍵。設(shè)旋轉(zhuǎn)角度,即BP=,從點(diǎn)向P引垂線,垂足為:D,從點(diǎn)向坐標(biāo)軸線垂線,垂足分別

14、為:B和,從D點(diǎn)向橫坐標(biāo)引垂線,垂足為:A,DA與垂直相交于點(diǎn)E。因點(diǎn)由點(diǎn)旋轉(zhuǎn)而來,所以D=b,D=a。容易求出AD=AD=,因此AB=E=D*Sin=bSin;A=D*s=as,B=as+bSin。用類似的方法可以求出:=aSinbs。而線段B和的長度剛好是點(diǎn)的坐標(biāo)值a和b。這樣,我們就得到了條形碼中任一點(diǎn)a,b以插入點(diǎn)為圓心,旋轉(zhuǎn)某一角度后,該點(diǎn)相對(duì)于插入點(diǎn)的新的位置(a,b)的計(jì)算公式:圖3點(diǎn)在AutAD中的詳細(xì)位置為:(PTX+as+bSin,PTY+aSinbs)。計(jì)算出點(diǎn)的位置后,實(shí)現(xiàn)繪制任意旋轉(zhuǎn)角度的條形碼的功能就不再困難。四、完畢語:使用條形碼繪制控件后,程序開發(fā)人員在AutAD中繪制條形碼變得非常

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論