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