石材專業(yè)門戶網(wǎng)站
摘要:本文介紹了利用ObjectARX二次開發(fā)技術(shù),以VC++.NET為開發(fā)環(huán)境,實(shí)現(xiàn)石材鋪設(shè)編號系統(tǒng)設(shè)計(jì)的方法。文中簡單敘述了ObjectARX開發(fā)技術(shù)特點(diǎn),詳細(xì)闡述了石材鋪設(shè)編號系統(tǒng)的實(shí)現(xiàn)原理及方法,對界面功能和操作方法做了詳細(xì)介紹,并利用操作實(shí)例進(jìn)一步說明系統(tǒng)功能。最后對鋪設(shè)結(jié)果進(jìn)行了分析和總結(jié)。
關(guān)鍵詞:石材鋪設(shè) 編號 加工單輸出 ObjectARX
The New SoftwareDesign Method of Stone Paving and Numbering System
Li Hongfei Zhao Min Li Gang Pan Weizhi
(School ofTraffic and Mechanical Engineering, Shenyang Jianzhu University, LiaoningShenyang 110168)
Abstract:The design methodof stone paving and numbering system is introduced in this paper. This systemis developed by using ObjectARX secondary development technology and in the developmentenvironment of VC++.NET. ObjectARX is simply described and the principle of this system has been elaborated in detail.Moreover, interface function and operational approach are both introduced inthe paper in detail. The function of this system is shown by giving an example, and the paving result is analyzedand summed up in the end.
Keywords: stone paving,numbering, processing table output, ObjectARX
引言
石材鋪設(shè)編號系統(tǒng)是指在平面石材鋪設(shè)設(shè)計(jì)中,能夠代替人工繪圖和計(jì)算,實(shí)現(xiàn)參數(shù)化石材自動鋪設(shè)、編號和輸出加工單功能的計(jì)算機(jī)輔助設(shè)計(jì)方法。該系統(tǒng)旨在提高平面石材鋪設(shè)設(shè)計(jì)的效率,減少人工工作量,減小出錯率。之前利用AutoList等方法進(jìn)行過此類系統(tǒng)的開發(fā),已經(jīng)具有強(qiáng)大的操作功能,但是在對大范圍復(fù)雜區(qū)域鋪設(shè)時出錯率仍然比較高,運(yùn)行速度慢【1-2】,故本文利用ObjectARX二次開發(fā)技術(shù),以VC++2005.NET為開發(fā)平臺,開發(fā)出了一套石材鋪設(shè)編號系統(tǒng),該系統(tǒng)增加了AutoCAD在石材裝飾設(shè)計(jì)領(lǐng)域的應(yīng)用功能,提高了平面石材鋪設(shè)設(shè)計(jì)的效率,實(shí)現(xiàn)了石材鋪設(shè)設(shè)計(jì)的自動化過程。
1 ObjectARX簡介及在設(shè)計(jì)中的應(yīng)用
ObjectARX是AutoCAD二次開發(fā)工具的一種,它實(shí)現(xiàn)了真正面向?qū)ο蟮木幊?,以C++作為編程語言,本質(zhì)上為Windows動態(tài)鏈接庫(DLL)程序,與AutoCAD共享地址空間,直接調(diào)用AutoCAD的核心函數(shù),還可以直接訪問AutoCAD數(shù)據(jù)庫的核心數(shù)據(jù)結(jié)構(gòu)和代碼,創(chuàng)建能夠全面享受AutoCAD固有命令特權(quán)的新命令。ObjectARX程序設(shè)計(jì)環(huán)境為程序員使用、用戶化和擴(kuò)充AutoCAD提供了一個面向?qū)ο蟮腃++應(yīng)用程序開發(fā)接口[3-4]。利用ObjectARX的上述特性,使用VC++.NET編程環(huán)境,在AutoCAD界面的基礎(chǔ)上增加了新的功能模塊,開發(fā)出的石材鋪設(shè)模塊以動態(tài)鏈接庫的形式存在,只要在裝有AutoCAD軟件的計(jì)算機(jī)上,隨時可以調(diào)用此模塊進(jìn)行鋪設(shè)設(shè)計(jì),移動存儲使用都十分方便。
在VC++環(huán)境下編寫ObjectARX程序需要加載ObjectARX的頭文件(inc)和庫文件(lib)到解決方案中,以便在編程中使用ARX相關(guān)的類和庫文件[5]。根據(jù)實(shí)際應(yīng)用需要,將此系統(tǒng)的功能分成鋪設(shè),編號及加工單輸出三大類,而鋪設(shè)又分為按行列鋪設(shè)和按板尺寸鋪設(shè)。整個系統(tǒng)設(shè)計(jì)包括菜單設(shè)計(jì),各功能模塊對話框界面設(shè)計(jì)和底層代碼實(shí)現(xiàn)。
2 界面設(shè)計(jì)
2.1 菜單界面設(shè)計(jì)
為了在CAD中使用鋪設(shè)相關(guān)命令更加方便,利用AutoCAD2008自定義菜單項(xiàng)功能,在CAD原界面的基礎(chǔ)上增加了石材鋪設(shè)菜單項(xiàng),其添加位置及子菜單項(xiàng)包含的內(nèi)容如圖1所示。
圖1 菜單界面示意圖
這些菜單項(xiàng)分別與調(diào)用相應(yīng)對話框命令連接,故在使用鋪設(shè)相關(guān)命令時除了可以在命令行輸入命令外,也可直接點(diǎn)擊相應(yīng)菜單項(xiàng),使操作更加方便快捷。
2.2 對話框界面設(shè)計(jì)
圖2中顯示了板型鋪設(shè)的對話框界面。對話框操作過程如下:在編輯框中輸入數(shù)據(jù),點(diǎn)“選擇區(qū)域?”按鈕則對話框會自動隱藏,用鼠標(biāo)選擇到要鋪設(shè)的外圍區(qū)域后返回對話框界面,同樣的方式選擇起點(diǎn),然后根據(jù)需要對編號方式進(jìn)行修改,點(diǎn)“鋪設(shè)預(yù)覽”按鈕,將再次隱藏對話框,顯示鋪設(shè)編號結(jié)果供用戶預(yù)覽,單擊鼠標(biāo)左鍵返回對話框,點(diǎn)擊“輸出清單”按鈕,系統(tǒng)將自動彈出Excel表格,列出了對應(yīng)編號石材板的尺寸及所需塊數(shù),此時區(qū)域標(biāo)識號和清單標(biāo)題均為系統(tǒng)默認(rèn)內(nèi)容,若對鋪設(shè)結(jié)果不滿意,可點(diǎn)“取消”按鈕將剛鋪設(shè)的結(jié)果取消掉,同時退出對話框,若滿意,可直接點(diǎn)擊“退出”按鈕退出對話框。而行列鋪設(shè)方式的對話框與此類似,只是將參數(shù)“板長”和“板寬”改成“行數(shù)”和“列數(shù)”,同時不需要選取鋪設(shè)起點(diǎn)。
圖2 板型鋪設(shè)對話框界面
編號對話框界面如圖3所示,編號格式是:區(qū)域標(biāo)識號+序號,區(qū)域標(biāo)識號可以按用戶喜好自行設(shè)定,如設(shè)成英文字母A,則板的起始編號為“A-0”。編號方式分為3種,按尺寸編號即相同尺寸石材板編號值相同;歸類編號即同一尺寸各板材的編號是連續(xù)的,并在輸出清單時歸為一類;順序編號即按鋪設(shè)的順序逐一編號。當(dāng)鋪設(shè)中選擇的編號方式為“后續(xù)編號”時就需要調(diào)用此對話框?qū)崿F(xiàn)對板材的編號。
圖4則顯示了加工單輸出對話框界面,它提供更多的加工單內(nèi)容設(shè)置功能,可根據(jù)用戶需要對各項(xiàng)內(nèi)容進(jìn)行設(shè)置。
圖3 編號對話框示意圖
圖4 加工單輸出對話框界面
3 程序設(shè)計(jì)
用戶界面只是提供了一個可視化的操作環(huán)境,真正實(shí)現(xiàn)目標(biāo)功能還需要完善的底層程序設(shè)計(jì)。程序設(shè)計(jì)流程圖如圖5所示。下面僅對中心點(diǎn)計(jì)算、邊緣處理、編號和輸出清單等設(shè)計(jì)中的突出問題進(jìn)行說明。
圖5 程序設(shè)計(jì)流程圖
鋪設(shè)時,每塊板的位置主要由它的中心點(diǎn)坐標(biāo)來決定的,在行列鋪設(shè)中,第一塊板的中心位置是外區(qū)域頂點(diǎn)圍成的最大矩形區(qū)域的左下點(diǎn),而板型鋪設(shè)中第一塊板的中心點(diǎn)就是鋪設(shè)起點(diǎn)的坐標(biāo),然后根據(jù)輸入的鋪設(shè)參數(shù),將鋪設(shè)區(qū)域以鋪設(shè)起點(diǎn)為中心分成左上,右上,左下和右下四個區(qū)域,分別計(jì)算出各板材的中心坐標(biāo)。以板型鋪設(shè)的右上區(qū)域?yàn)槔?,在鋪設(shè)角度在0?90°之間時,每塊板的中心點(diǎn)坐標(biāo)計(jì)算方法如下:
(1)
(2)
其中ptCenterru代表板材的中心點(diǎn)坐標(biāo),ptCenter為鋪設(shè)起點(diǎn)坐標(biāo),banl,bank,f,b則分別代表板材的長,寬,板材之間的縫寬和傾斜角度,i和j是循環(huán)系數(shù),它們的最大值由鋪設(shè)區(qū)域最大跨度決定。
確定好鋪設(shè)中心點(diǎn)后,就可以根據(jù)中心點(diǎn)和板材的長寬值確定板的各角點(diǎn)的坐標(biāo)值,最后根據(jù)各角點(diǎn)坐標(biāo)值來創(chuàng)建實(shí)體模型,可利用addVertexAt函數(shù)實(shí)現(xiàn),其定義如下:
Acad::ErrorStatusaddVertexAt(
unsigned intindex,
constAcGePoint2d& pt,
double bulge = 0.,
double startWidth= -1.,
double endWidth =-1);
參數(shù)index是輸入索引,而pt即為對應(yīng)的端點(diǎn)值,其它參數(shù)均有默認(rèn)值,與設(shè)計(jì)無關(guān),可以不做改動,這樣根據(jù)端點(diǎn)個數(shù)循環(huán)調(diào)用此函數(shù)添加端點(diǎn)值,最后調(diào)用setClosed()函數(shù)完成首尾點(diǎn)的連接就實(shí)現(xiàn)了多邊形實(shí)體的創(chuàng)建。
3.2 鋪設(shè)邊緣處理
在以板型方式或?qū)Σ灰?guī)則圖形鋪設(shè)時,在區(qū)域邊緣有的板材會有部分超出邊界的現(xiàn)象,此時需要找出該板材模型與外邊界的交點(diǎn),然后以交點(diǎn)和該板材在區(qū)域的頂點(diǎn)為頂點(diǎn)值來創(chuàng)建適合區(qū)域邊緣的新板材模型,需要根據(jù)板材與區(qū)域邊界相交形式的不同進(jìn)行不同的處理,最后將新板材模型添加到模型空間,同時刪除原板材模型。
3.3 編號及顯示方法
為了使編號處理更加方便,在創(chuàng)建每個板材模型時需要提取出它的長寬尺寸值,利用ObjectARX擴(kuò)展字典功能可以將長寬值作為自定義數(shù)據(jù)添加到板材模型的擴(kuò)展字典中,這些值隸屬于特定的實(shí)體,在編號和輸出加工單時可以直接訪問板材模型的擴(kuò)展字典,以讀取對應(yīng)板的長寬值。
將編號值顯示在模型空間對應(yīng)位置上,主要是利用ObjectARX創(chuàng)建文字的方法,在圖形規(guī)定位置上添加多行文字顯示編號值,經(jīng)過測試,多行文本的起始位置和高度確定方法如下:
其中ptQd和height分別代表多行文字的起點(diǎn)和高度;ptCenterBan,banl和bank分別代表板材的中心點(diǎn)坐標(biāo),板材的長寬值。
3.4 輸出EXCEL清單方法
將板材尺寸信息輸出到EXCEL表格中,首先要能夠利用VC實(shí)現(xiàn)對EXCEL的操作,而VC操作Excel主要有以下兩種方法:
(1)利用ODBC把Excel文件當(dāng)成數(shù)據(jù)庫文件,來進(jìn)行讀、寫、修改等操作,用C++編寫的控件類CSpreadSheet提供了對Excel讀寫的支持。
(2)利用Automation(OLE Automation)方法。將Excel當(dāng)成組件服務(wù)器,利用VBA,又分為基于MFC的和SDK兩種。
第一種方法中,控件以O(shè)DBC讀寫Excel文件,需要ODBC驅(qū)動程序,Excel文件必須列標(biāo)記,且首行列標(biāo)記唯一(字段),可以實(shí)現(xiàn)讀寫EXCEL中數(shù)據(jù)功能,但把所有的輸入都被當(dāng)作為字符串來處理,在單元格內(nèi)容前面都被excel強(qiáng)制加了個單引號前綴。經(jīng)過編程測試發(fā)現(xiàn),無論是數(shù)據(jù)顯示效果還是對EXCEL格式的操作都不是很理想,故最終采用基于MFC的OLE編程方法,它對EXCEL的操作方法簡單,容易理解,功能較為全面。
基于MFC的OLE編程方法實(shí)現(xiàn)VC操作Excel的初始化過程依次是:導(dǎo)入Excel庫文件,初始化COM組件,創(chuàng)建Excel服務(wù)器(啟動Excel),設(shè)置Excel的狀態(tài)。使用此方法可以實(shí)現(xiàn)新建、數(shù)據(jù)輸入、表格處理等多種功能,本設(shè)計(jì)中可實(shí)現(xiàn)的操作效果如圖7所示。
4 操作實(shí)例
圖6為板型鋪設(shè)方式的鋪設(shè)結(jié)果,編號方式選擇的是歸類編號,其中各參數(shù)為:長500mm,寬450mm,縫寬4mm,角度0°,鋪設(shè)起點(diǎn)為(8046.4541, 3193.5183)。圖中選中的四變形就是其中的一塊工程板,鋪設(shè)起點(diǎn)的不同會有不同的鋪設(shè)效果,若對鋪設(shè)不滿意,可以點(diǎn)擊“取消”按鈕把剛鋪設(shè)的結(jié)果取消,用戶可根據(jù)實(shí)際情況,選擇合適的鋪設(shè)方式,得到滿意的鋪設(shè)效果。
圖6 鋪設(shè)效果圖
圖7為輸出的EXCEL列表清單,編號方式為歸類編號,用戶可根據(jù)需要填寫制作人和日期等信息,將顯示于表格最下方。
圖7 加工清單示意圖
5 結(jié)論
本文采用ObjectARX與VC++的混合編程技術(shù),開發(fā)出了以AutoCAD2008為工作平臺的石材鋪設(shè)編號CAD系統(tǒng),該系統(tǒng)實(shí)現(xiàn)了對復(fù)雜區(qū)域的鋪設(shè)和編號功能,方便了方案選取的同時也減少了手工繪圖的工作量,提高了工作效率,增強(qiáng)了AutoCAD在石材行業(yè)中的具體應(yīng)用功能。
參考文獻(xiàn)
[1] 趙民等編著.建筑裝飾石材計(jì)算機(jī)輔助設(shè)計(jì)[M].北京:化學(xué)工業(yè)出版社,2005.
[2] 王榮.飾面石材CAD的開發(fā)與應(yīng)用研究[D].武漢:武漢理工大學(xué),2007.
[3] 聞濤,趙良臣. 用ObjectARX進(jìn)行AutoCAD二次開發(fā)的研究[J]. 浙江工程學(xué)院學(xué)報, 2003,20(1):37-40
[4] 董玉德.趙韓.CAD二次開發(fā)理論與技術(shù)[M].合肥:合肥工業(yè)大學(xué)出版社,2009.
[5] 張偉,劉偉濤,許云華.利用objectARX對Aut0CAD2006進(jìn)行二次開發(fā)及其應(yīng)用[J]. 機(jī)械研究與應(yīng)用,20(2),2007.
來源:石材雜志