陳 寧,李榮川,2
(1.江蘇科技大學(xué)船舶與海洋工程學(xué)院,江蘇 鎮(zhèn)江 212003;2.92538部隊(duì),遼寧 大連 116041)
在以AutoCAD為平臺(tái)的工程制圖過程中,圖形的引用與圖形信息統(tǒng)計(jì)是一項(xiàng)繁瑣的工作。盡管其為此提供了塊的解決圖形引用的問題,但其操作不夠簡單快捷,而且不能實(shí)現(xiàn)將圖形塊保存到統(tǒng)一的圖形數(shù)據(jù)庫中,以方便其他工程人員的引用。而對于圖形信息的統(tǒng)計(jì),作為AutoCAD本身更是無法做到。可見,如何做到方便快速的生成圖形、插入圖形、統(tǒng)計(jì)圖形信息成為提高繪圖效率的關(guān)鍵所在。二次開發(fā)能夠提高工作效率和減輕工作量,其開放式結(jié)構(gòu)能滿足不同專業(yè)的需要,來實(shí)現(xiàn)設(shè)計(jì)中的應(yīng)用,達(dá)到改進(jìn)和加強(qiáng) AutoCAD功能的目的[1]。因此,在建立統(tǒng)一的圖形數(shù)據(jù)庫的基礎(chǔ)上對AutoCAD進(jìn)行二次開發(fā)成為了提高繪圖效率的有效途徑。通過VBA(Visual Basic For Application)可以用ActiveX技術(shù)對AutoCAD進(jìn)行二次開發(fā),且其與其他二次開發(fā)工具相比,VBA具有突出的優(yōu)點(diǎn):①應(yīng)用程序運(yùn)行速度快;②其編程語言和開發(fā)環(huán)境簡單;③與Windows交互性好[2]。利用VBA與數(shù)據(jù)庫相結(jié)合的模式對AutoCAD進(jìn)行二次開發(fā),不但可以方便地將具有屬性的圖形保存到統(tǒng)一的圖形數(shù)據(jù)庫下,而且可以實(shí)現(xiàn)方便快速地插入數(shù)據(jù)庫中的圖形,并且還能夠?qū)D形的操作記錄及屬性保存到記錄數(shù)據(jù)庫中。通過讀取處理記錄數(shù)據(jù)庫中的信息,不僅可以達(dá)到實(shí)現(xiàn)對圖形統(tǒng)計(jì)的目的,還能夠結(jié)合一定的程序自動(dòng)生成明細(xì)表。
系統(tǒng)針對的是在AutoCAD平臺(tái)下如何實(shí)現(xiàn)圖形數(shù)據(jù)庫的創(chuàng)建、圖形的插入與記錄及圖框和明細(xì)表的自動(dòng)生成3個(gè)功能。采用VBA與通用性較好的Microsoft Access工具進(jìn)行聯(lián)合開發(fā),并在實(shí)物關(guān)系模型基礎(chǔ)上建立數(shù)據(jù)庫,并以相關(guān)關(guān)系運(yùn)算為指導(dǎo),采用ADO技術(shù)實(shí)現(xiàn)VBA與Microsoft Access數(shù)據(jù)庫之間的通信,最終分別以3個(gè)VBA工程來實(shí)現(xiàn)要達(dá)到的3個(gè)功能,從而實(shí)現(xiàn)程序設(shè)計(jì)的要求。系統(tǒng)結(jié)構(gòu)設(shè)計(jì)圖如圖1所示。
基于集合理論,數(shù)據(jù)庫系統(tǒng)的關(guān)系模型要以嚴(yán)格的數(shù)學(xué)概念為基礎(chǔ),具有嚴(yán)格的數(shù)學(xué)定義和完整的數(shù)學(xué)結(jié)構(gòu),還要能夠進(jìn)行查尋、插入、修改等工作。在實(shí)際的數(shù)據(jù)庫操作過程中,常要用到關(guān)系代數(shù)運(yùn)算,任何一種運(yùn)算都是將一定的運(yùn)算符作用到一定的運(yùn)算對象上,得到預(yù)期的運(yùn)算結(jié)果[3]。因此,要求AutoCAD圖形數(shù)據(jù)庫和繪圖記錄數(shù)據(jù)庫關(guān)模型均在嚴(yán)格的數(shù)學(xué)概念的基礎(chǔ)之上進(jìn)行建立和在關(guān)系代數(shù)的指導(dǎo)下進(jìn)行操作。
實(shí)物的關(guān)系結(jié)構(gòu)是建立關(guān)系模型的依據(jù)基礎(chǔ)。由于圖形文件占用存儲(chǔ)空間比較大,如果直接以二進(jìn)制格式存放在數(shù)據(jù)庫字段中,那么在頻繁查詢數(shù)據(jù)庫表時(shí),則必然會(huì)大大增加服務(wù)器內(nèi)存的負(fù)擔(dān)[4]。因此將圖形文件的路徑存入數(shù)據(jù)庫可以有效降低數(shù)據(jù)庫的占用空間,并提升數(shù)據(jù)庫查尋數(shù)據(jù)的效率,所以圖形數(shù)據(jù)庫的實(shí)際關(guān)系結(jié)構(gòu)為:
(名稱,重量,材料,路徑,備注)?圖形塊?圖形文件?圖形庫 (1)
為了在程序中屬性的提取和操作方便,將屬性與圖形分別存放,以屬性中的路徑來指定圖形文件的位置。則屬性數(shù)據(jù)庫與圖形庫關(guān)系分為:
圖1 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)圖
由于路徑與圖形文件具有映射關(guān)系,則:
從屬性數(shù)據(jù)庫關(guān)系結(jié)構(gòu)可以推導(dǎo)屬性數(shù)據(jù)庫的關(guān)系模式:屬性數(shù)據(jù)庫(名稱,重量,材料,路徑,備注),其中屬性數(shù)據(jù)庫為關(guān)系名,括號中的項(xiàng)目為屬性,見表1。
表1 圖形數(shù)據(jù)庫的關(guān)系模型
同理,圖形記錄數(shù)據(jù)庫的關(guān)系模型為:圖形記錄數(shù)據(jù)庫(編號,名稱,插入點(diǎn)X,插入點(diǎn)Y,插入點(diǎn)Z,旋轉(zhuǎn)角,放大X,放大Y,放大Z,圖層,材料,重量,備注),見表 2。
表2 圖形記錄數(shù)據(jù)庫關(guān)系模型
關(guān)系運(yùn)算的方式包括傳統(tǒng)的集合運(yùn)算和專門的關(guān)系運(yùn)算。在本系統(tǒng)中,對數(shù)據(jù)庫中數(shù)據(jù)的操作集中于數(shù)據(jù)的讀寫與查找,因此,關(guān)系運(yùn)算集中于專門的關(guān)系運(yùn)算中的選擇運(yùn)算。在關(guān)系R中選擇滿足給定條件的元組,可以表示為σF(R),其中F表示選擇條件,它是一個(gè)邏輯表達(dá)式,取邏輯值“真”或“假”[5]。如在表1中查名稱為法蘭的模型,則表達(dá)式為:
在系統(tǒng)設(shè)計(jì)過程中對表中的數(shù)據(jù)選擇時(shí)應(yīng)用此原理。
在程序中,整個(gè)所應(yīng)用的關(guān)鍵技術(shù)主要可以分為兩個(gè)方面,一方面是如何實(shí)現(xiàn)VBA對AutoCAD的操作,另一方面如何實(shí)現(xiàn)VBA對Microsoft Access的操作。對于這兩個(gè)方面的關(guān)鍵技術(shù),在下面將結(jié)合VBA工程實(shí)現(xiàn)來進(jìn)行闡述。
從整個(gè)程序的設(shè)計(jì)圖中可以看出,該工程的主要任務(wù)有兩個(gè),一是如何將圖形塊保存到圖形庫中,二是如何將屬性值寫入到屬性數(shù)據(jù)庫中。
圖形數(shù)據(jù)庫創(chuàng)建是利用VBA與AutoCAD和Microsoft Access的接口來實(shí)現(xiàn)的,其邏輯圖如圖2所示。
(1)首先分析圖形塊的保存。由于VBA與AutoCAD集成在一起,因此通過AutoCAD界面的界面菜單即可進(jìn)入到Visual Basic編輯器,通過其提供的工具箱建立如圖3所示窗口。
圖2 圖形數(shù)據(jù)創(chuàng)建邏輯圖
圖3 創(chuàng)建屬性塊窗體圖
(2)其次分析圖形屬性與路徑如何保存到數(shù)據(jù)庫中。
采用ADO(ActiveX Data Object)技術(shù)可以實(shí)現(xiàn)VBA與Microsoft Access的通信。ADO同DAO或RDO相比較,在效率上更高,速度更快,并且編寫應(yīng)用程序更加簡單,更加方便,比其他的數(shù)據(jù)訪問接口更加全面[6]。但其使用前提條件是必須在VBA環(huán)境中引用“Microsoft ActiveX Data Objects 2.5 Library”。
以下是程序VBA與Microsoft Access數(shù)據(jù)庫連接的實(shí)現(xiàn)代碼。
通過運(yùn)行以上代碼便可以建立起VBA與 Microsoft Access數(shù)據(jù)庫的連接。在此基礎(chǔ)上可以通過下面的方法在數(shù)據(jù)庫中增加行,實(shí)現(xiàn)數(shù)據(jù)庫的寫入操作。
從系統(tǒng)的設(shè)計(jì)圖可以看出,本工程的技術(shù)難點(diǎn)在于以下三個(gè)方面:一是如何查找數(shù)據(jù)庫中的數(shù)據(jù);二是如何將未打開圖形中的塊插入到當(dāng)前的工作空間;三是如何得到插入點(diǎn)的信息等屬性并將其寫入數(shù)據(jù)庫中。首先建立如圖4所示窗口。
(1)實(shí)現(xiàn)數(shù)據(jù)庫存數(shù)據(jù)的查找首先要進(jìn)行數(shù)據(jù)庫的連接。從原理上講,要實(shí)現(xiàn)數(shù)據(jù)的查找就要依照關(guān)系代數(shù)中專門的關(guān)系運(yùn)算的選擇公式
進(jìn)行語句設(shè)計(jì)。例如,在表中1查找法蘭的對應(yīng)的路徑,則程序的任務(wù)是,在數(shù)據(jù)表中查找法蘭所對應(yīng)的元組,當(dāng)找到后,將該組中路徑所對應(yīng)的分量從數(shù)據(jù)庫中讀取出來。
在程序的部分關(guān)鍵代碼為:
圖4 圖形塊管理界面
以上代碼執(zhí)行條件是建立在VBA與Microsoft Access連接的基礎(chǔ)之上的,它的功能是從數(shù)據(jù)庫的第一行開始查找。如果在名稱屬性下查找到法蘭具有相同名稱的分量時(shí),則將其路徑屬性在元組中對應(yīng)的分量賦給path,然后退出,否則繼續(xù)在下一個(gè)元組中進(jìn)行查找。
(2)利用ObjectDBX技術(shù)可以實(shí)現(xiàn)在圖形中插入其他已打開的圖形中的圖塊。ObjectDBX包含了一系列動(dòng)態(tài)鏈接庫 (dll),通過它們可以建立包含在AutoCAD圖形文件中的自定義對象,也可以使生成的應(yīng)用程序在AutoCAD環(huán)境之外對DWG圖形進(jìn)行處理[7]。使用ObjectDBX技術(shù)之前同樣要進(jìn)行引用,其引用項(xiàng)為“AutoCAD/ObjectDBX Common16.0 Type Library”。在引用后便可以進(jìn)行編程操作了。
(3)在VBA與Microsoft Access已經(jīng)建立連接的基礎(chǔ)上將屬性值與插入點(diǎn)的信息寫入到記錄數(shù)據(jù)庫中要相對容易,在與數(shù)據(jù)庫已連接的基礎(chǔ)上,其實(shí)現(xiàn)代碼為:
其他屬性值的寫入同理。
根據(jù)程序設(shè)計(jì)要求,在Visual Basic編輯器中編輯如圖5所示窗口。在本工程中,本工程有兩個(gè)重要的工作,一是在插入圖框塊后進(jìn)行的繪制明細(xì)表線框添加文字,另一個(gè)是數(shù)據(jù)庫中數(shù)據(jù)的計(jì)算,生成明細(xì)表。
圖5 圖框與明細(xì)表生成界面
(1)添加文字和線段相對簡單,只要利用現(xiàn)有的VBA函數(shù)就可以達(dá)到,見表3。
表3 直線與文字增加函數(shù)
(2)生成明細(xì)表首先要讀取記錄數(shù)據(jù)庫,獲得圖形所在的位置。為了操作方便可以將圖形的名稱與插入點(diǎn)信息復(fù)制到數(shù)組中,其實(shí)現(xiàn)關(guān)鍵代碼為:
在數(shù)據(jù)信息被復(fù)制到數(shù)據(jù)庫后,便可以通過數(shù)組的操作來進(jìn)行排序、統(tǒng)計(jì),結(jié)合屬性數(shù)據(jù)庫獲得相應(yīng)屬性,再通過繪制線形與添加文字操作,便可生成明細(xì)表。其邏輯圖如圖6所示。程序運(yùn)行效果如圖7所示。
(1)介紹了實(shí)現(xiàn)創(chuàng)建、引用數(shù)據(jù)庫存方法,并成功應(yīng)用于自動(dòng)生成圖框與明細(xì)表。
(2)實(shí)踐發(fā)現(xiàn),通過VBA與MicrosoftAccess聯(lián)合開發(fā)AutoCAD可以降低繪制圖形所需要的時(shí)間,而且在圖形統(tǒng)計(jì)上準(zhǔn)確性高,能夠進(jìn)一步提高工作效率。
圖6 明細(xì)表生成邏輯圖
圖7 程序運(yùn)行效果圖
[1]吳業(yè)紅.應(yīng)用VBA技術(shù)進(jìn)行AutoCAD二次開發(fā)[J].電腦知識(shí)與技術(shù),2009,5(28):7950 -7951.
[2]吳海鋒.Auto CAD VBA在工程制圖中的應(yīng)用[J].交通科技與經(jīng)濟(jì),2009,(2):36 -38.
[3]郭曄,王浩鳴,張?zhí)煊?數(shù)據(jù)庫技術(shù)與Access應(yīng)用[M].北京:人民郵電出版社,2009.
[4]顧金鳳,姚壽廣,陳寧.產(chǎn)品數(shù)據(jù)管理中圖檔管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].華東船舶工學(xué)院學(xué)報(bào)(自然科學(xué)版),2004,18(1):91-94.
[5]王志梅,黃河.關(guān)系數(shù)據(jù)庫基礎(chǔ)與技術(shù)[M].北京:國防工業(yè)出版社,2005.
[6]喬美娥.ADO技術(shù)在VB系統(tǒng)開發(fā)中的高級應(yīng)用[J].中國科技信息,2008,(24):84 -85.
[7]楊應(yīng)平,張明文,肖述剛.ObjectDBX技術(shù)在橋梁CAD中的簡化作用[J].中華建設(shè),2007,(12):67 -68.