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