王 蕊(遼寧建筑職業(yè)學(xué)院,遼寧遼陽,111000)
?
基于ObjectARX和SQL Server的AutoCAD圖形數(shù)據(jù)存儲(chǔ)
王 蕊
(遼寧建筑職業(yè)學(xué)院,遼寧遼陽,111000)
摘要:本文介紹了基于ObjectARX和SQL Server進(jìn)行AutoCAD圖形數(shù)據(jù)存儲(chǔ)設(shè)計(jì)和實(shí)現(xiàn)的過程,將數(shù)據(jù)庫技術(shù)與AutoCAD軟件技術(shù)進(jìn)行了有效的集成,為AutoCAD的二次開發(fā)提供了一個(gè)全新的視角。
關(guān)鍵詞:ObjectARX;SQL Server;AutoCAD;數(shù)據(jù)庫;存儲(chǔ)
隨著AutoCAD軟件在各個(gè)領(lǐng)域應(yīng)用的不斷深入,對其進(jìn)行二次開發(fā),開發(fā)出適用實(shí)際工作需要的軟件,提升AutoCAD基礎(chǔ)軟件的功能是非常必要的。
1.1 提升工程預(yù)算中統(tǒng)計(jì)、匯總的計(jì)算能力
將AutoCAD中的圖形數(shù)據(jù)文件轉(zhuǎn)換成SQL Server 的數(shù)據(jù)庫文件,利用SQL Server數(shù)據(jù)庫強(qiáng)大的統(tǒng)計(jì)和匯總功能來提升AutoCAD在統(tǒng)計(jì)、匯總等工程預(yù)算中的計(jì)算能力。
1.2 縮短二次開發(fā)的周期
將轉(zhuǎn)換后的AutoCAD圖形數(shù)據(jù)文件作為模塊,其具有應(yīng)用廣泛、通用性強(qiáng)、可移植性等特點(diǎn),降低了二次開發(fā)難度,縮短了開發(fā)周期,節(jié)省了開發(fā)成本。
1.3 可以對圖形數(shù)據(jù)進(jìn)行批量修改
在AutoCAD繪制圖形過程中,需要對圖層、線性、塊等屬性進(jìn)行修改,將AutoCAD中的圖形數(shù)據(jù)文件轉(zhuǎn)換成的數(shù)據(jù)庫文件后,可以修改數(shù)據(jù)庫文件中字段屬性值從而對AutoCAD圖形進(jìn)行快速、精準(zhǔn)、批量的修改。
1.4 保證數(shù)據(jù)的一致性,實(shí)現(xiàn)圖紙的批量化管理
AutoCAD圖紙中,如平面圖、立面圖、剖面圖之間數(shù)據(jù)相互交叉、參照,可以利用SQL Server 提供的事假回滾、索引查找、用戶驗(yàn)證等機(jī)制來確保數(shù)據(jù)的一致性,并實(shí)現(xiàn)圖紙的批量管理。
基于AutoCAD體系結(jié)構(gòu)的開放性,采用ObjectARX[1]作為系統(tǒng)的開發(fā)工具,使用VC++平臺(tái)建立AutoCAD圖形數(shù)據(jù)庫和SQL Server 數(shù)據(jù)庫之間的關(guān)聯(lián),利用SQL Server 數(shù)據(jù)庫的在數(shù)據(jù)處理方面的優(yōu)勢協(xié)助管理AutoCAD的圖形數(shù)據(jù)。
2.1 ObjectARX
ObjectARX是AutoDesk公司針對AutoCAD平臺(tái)上的二次開發(fā)而推出的一個(gè)開發(fā)軟件包,提供了以C++為基礎(chǔ)的面向?qū)ο蟮拈_發(fā)環(huán)境和應(yīng)用程序接口。ObjectARX目前最新的版本是ObjectARX2015,其是目前最為高效的開發(fā)AutoCAD的工具。ObjectARX具有直接快速訪問AutoCAD圖形數(shù)據(jù)庫、建立與AutoCAD編輯器的交互、使用MFC創(chuàng)建標(biāo)準(zhǔn)的圖形用戶界面,在其基類的基礎(chǔ)上自定義類、可以和其他編程環(huán)境進(jìn)行交互等強(qiáng)大功能。
2.2 開發(fā)環(huán)境
運(yùn)用ObjectARX進(jìn)行AutoCAD二次開發(fā),必須首先設(shè)置好ObjectARX的開發(fā)環(huán)境。目前常用的開發(fā)環(huán)境是Microsoft Visual C++ 6.0 、Microsoft visual studio 2005、Microsoft visual studio 2008、Microsoft visual studio 2010。同時(shí),還需要安裝ObjectARX SDK。
在利用ObjectARX進(jìn)行AutoCAD二次開發(fā)前,必須要對圖形數(shù)據(jù)庫進(jìn)行深入的了解,才能實(shí)現(xiàn)和SQL Server數(shù)據(jù)庫之間的相互連接。
AutoCAD本質(zhì)上是一個(gè)圖形數(shù)據(jù)庫管理程序,程序中記載著圖形中所有對象的信息,包括圖形對象和非圖形對象。圖形對象,如直線、矩形、橢圓等;非圖形對象,如圖層、標(biāo)注、線性等;每個(gè)對象都有自己的屬性、方法,每一個(gè)AutoCAD圖就是這些對象的集合。
4.1 系統(tǒng)的功能性描述
1)系統(tǒng)進(jìn)入前需要在彈出的登錄窗口內(nèi)輸入數(shù)據(jù)庫名、用戶名、密碼,輸入正確才能連接用戶建立的數(shù)據(jù)庫,進(jìn)入AutoCAD軟件,進(jìn)行圖形繪制。
2)根據(jù)需要選擇需要存儲(chǔ)的圖形,將該圖形中的對象存儲(chǔ)到其相應(yīng)的SQL Server數(shù)據(jù)庫表中。
3)根據(jù)需要從SQL Server數(shù)據(jù)庫表中提取圖形數(shù)據(jù),重新繪制AutoCAD圖形。
4)用戶可以查詢、修改、編輯、刪除圖形數(shù)據(jù),系統(tǒng)要保證AutoCAD圖形數(shù)據(jù)和SQL Server數(shù)據(jù)的一致性。
4.2 系統(tǒng)功能模塊的劃分及系統(tǒng)框架
根據(jù)系統(tǒng)的功能性分析,將系統(tǒng)劃分成四個(gè)功能模塊:系統(tǒng)登錄模塊、數(shù)據(jù)選取模塊、存儲(chǔ)轉(zhuǎn)化模塊、圖形繪制模塊。系統(tǒng)框架如圖1所示。
圖1 系統(tǒng)基本結(jié)構(gòu)
4.3 SQL Server數(shù)據(jù)庫結(jié)構(gòu)的設(shè)計(jì)
4.3.1 概念模型的設(shè)計(jì)
概念模型設(shè)計(jì)主要是在SQL Server中建立與AutoCAD圖形數(shù)據(jù)相對應(yīng)的、合理表格及字段項(xiàng)、設(shè)置關(guān)鍵字、有效性規(guī)則、數(shù)據(jù)完整等。針對AutoCAD圖形中每個(gè)對象都建立一個(gè)表格來存儲(chǔ)從AutoCAD數(shù)據(jù)庫中提取出來的數(shù)據(jù)。例如:分別建立存儲(chǔ)圓、橢圓、圖層等各個(gè)實(shí)體的表格,表格中根據(jù)實(shí)體的屬性設(shè)置不同的字段。以直線為例,建立一個(gè)名為line-table的表格,表格中設(shè)置了14個(gè)字段,分別為 id、tuzhi_id 、startpoint_ X 、startpoint_Y、startpoint_Z 、endpoint_X、endpoint_ Y、endpoint_Z、color、linetype、linetype_scale 、visibility、layer、line_weight ,通過它們來存儲(chǔ)直線的ID號、圖紙的編號、直線的起始坐標(biāo)、終點(diǎn)坐標(biāo)、顏色、線型、線型比例、可見性、圖層名、線寬屬性值。同樣的方式,設(shè)計(jì)其他實(shí)體所對應(yīng)的表格。
4.3.2 邏輯模型的設(shè)計(jì)
邏輯模型設(shè)計(jì)是將實(shí)體以及實(shí)體之間的關(guān)系反映到數(shù)據(jù)表之間的關(guān)聯(lián)上,可以用E-R圖表現(xiàn)出來。
5.1 基本實(shí)體圖形數(shù)據(jù)轉(zhuǎn)化
AutoCAD圖形是由若干基本實(shí)體圖形組成,因此實(shí)現(xiàn)AutoCAD圖形數(shù)據(jù)和數(shù)據(jù)庫間的轉(zhuǎn)化,就是基本實(shí)體之間的轉(zhuǎn)化。進(jìn)一步就是基本實(shí)體屬性和存儲(chǔ)實(shí)體的數(shù)據(jù)表中字段之間的轉(zhuǎn)化。設(shè)計(jì)兩類函數(shù),一類是將基本實(shí)體的屬性寫入到數(shù)據(jù)庫表中,另一類是從SQL Server數(shù)據(jù)庫表中讀取相關(guān)數(shù)據(jù),調(diào)用ObjectARX中繪制基本實(shí)體的方法繪制出AutoCAD基本實(shí)體。
5.2 圖塊實(shí)體的轉(zhuǎn)化
在圖形的繪制過程中,會(huì)生成許多塊,如建筑圖紙中的窗塊、門塊,是由若干實(shí)體組成。在進(jìn)行圖塊的存儲(chǔ)時(shí),利用迭代器,遍歷AutoCAD圖形檢索出組成圖塊的若干實(shí)體,然后使用函數(shù)Explode()將其分解成若干個(gè)基本實(shí)體。利用基本實(shí)體轉(zhuǎn)化的方法來進(jìn)行圖塊實(shí)體的轉(zhuǎn)化。
5.3 繪圖模塊的實(shí)現(xiàn)
5.3.1 創(chuàng)建AutoCAD不同的實(shí)體
將圖形對象和非圖形對象分成實(shí)體類,如:線型類實(shí)體、文本類實(shí)體、填充類實(shí)體、標(biāo)注類實(shí)體,每一個(gè)類都有相應(yīng)的成員、函數(shù)、屬性。通過調(diào)用每一類自身成員函數(shù)從而生成不同類的實(shí)體對象,完成圖形數(shù)據(jù)庫的相關(guān)操作。
5.3.2 創(chuàng)建AutoCAD圖形對象步驟如下:
(1)Ac Db Host Application Services()->workingDatabased()->getSymbolTable(,)
創(chuàng)建或打開圖形數(shù)據(jù)庫,并獲取塊表指針
(2)pBlocktable->getAt( , ,)pBlocktable->close()
獲取當(dāng)前塊表指針,并關(guān)閉塊表
(3)調(diào)用實(shí)體構(gòu)造函數(shù)、其它成員函數(shù)完成實(shí)體的創(chuàng)建、屬性設(shè)置和編輯;
(4)將appendAttribute()函數(shù)返回的ID號保存到AcDbObjectId類型變量中。
(5)pBlocktableRecord->appendAcDbEntity(,)添加記錄。
(6)pBlocktableRecord->colse(),pLine->close()關(guān)閉塊表記錄和實(shí)體對象。
非圖形對象的創(chuàng)建方法參照圖形對象的創(chuàng)建方法。
5.3.3 AutoCAD 圖形對象和非圖形對象的關(guān)聯(lián)
非圖形對象表是對繪圖環(huán)境進(jìn)行設(shè)置的,要把圖形對象和非圖形對象進(jìn)行關(guān)聯(lián)才能最終繪制出需要的AutoCAD 圖形。常用的圖層表、文本樣式、尺寸樣式的關(guān)聯(lián)方法不同。圖層的關(guān)聯(lián)通過setlayer()來實(shí)現(xiàn)的,關(guān)聯(lián)文本樣式通過setTextStyle(),通過預(yù)先定義好的函數(shù)來關(guān)聯(lián)尺寸標(biāo)注樣式。
基于ObjectARX和SQL Server的AutoCAD圖形數(shù)據(jù)庫系統(tǒng),是針對一般的AutoCAD圖形數(shù)據(jù)的存儲(chǔ)、管理問題,所以其具有通用性,可以將這一功能定義成一個(gè)模塊,可以在其他的ObjectARX開發(fā)程序中直接調(diào)用,擺脫兩種數(shù)據(jù)文件復(fù)雜的轉(zhuǎn)化過程,具有實(shí)用性。
參考文獻(xiàn)
[1]張帆 朱文俊AutoCAD ObjectARX(VC)開發(fā)基礎(chǔ)與實(shí)例教程[M].中國電力出版社,2014.06
[2]董玉德,趙韓.CAD二次開發(fā)理論與技術(shù)[M].合肥:合肥工業(yè)大學(xué)出版社,2009.11
Auto CAD graphics data storage based on ObjectARX and Server SQ
Wang Rui
(LIAONING JIANZHU VOCATONAL UNIVERSITY,LiaoNing LiaoYang,111000)
Abstract:This paper introduces based on ObjectARX and SQL server of AutoCAD graphic data storage design and implementation process, the database and AutoCAD software techniques for effective integration, for the secondary development of AutoCAD provides a new perspective.
Keywords:ObjectARX;SQL Server;AutoCAD;database;storage
作者簡介
王蕊(1980.9-),女,遼寧省遼陽市人,碩士,講師,計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)。