AutoCAD機械標準件設(shè)計系統(tǒng)軟件的研究
介紹了在標準件參數(shù)化設(shè)計中,以AutoCAD為平臺,對ADS_ARX繪圖程序的模塊化處理、AutoCAD下的界面設(shè)計以及用Visual C++實現(xiàn)對標準件設(shè)計資料庫和方法庫的參數(shù)化查詢,為AutoCAD下的二次開發(fā)提供了一種全新的方法。 引言 ?CAD技術(shù)在機械工業(yè)中的一個重要應(yīng)用就是參數(shù)化設(shè)計,即對一些具有相似結(jié)構(gòu)但尺寸經(jīng)常改動的標準零件, 采用參數(shù)化設(shè)計的方法建立圖形庫,調(diào)出一組參數(shù)就能生成一個標準件圖形。 本系統(tǒng)中包含一個常用機械設(shè)計標準資料庫,使設(shè)計人員不必翻閱設(shè)計手冊就可以在計算機上查到所需的信息, 除此之外本系統(tǒng)還提供了機械常用各種設(shè)計計算方法(包括校核和優(yōu)化), 并將零件的設(shè)計計算和輔助繪圖集成于統(tǒng)一的環(huán)境中,從而真正實現(xiàn)了設(shè)計與繪圖一體化,明顯提高了產(chǎn)品的設(shè)計效率。 1 標準件參數(shù)化設(shè)計系統(tǒng)的建模 ?參數(shù)化CAD所面對的產(chǎn)品絕大多數(shù)為定型產(chǎn)品,這些產(chǎn)品的系列化、通用化、標準化程度高。機械標準件具有上述特點, 所以本系統(tǒng)建模根據(jù)參數(shù)化的建模思想來進行。系統(tǒng)的基本思路為:首先由用戶選擇所要設(shè)計的零件類型,然后選擇設(shè)計行為(如對于圓柱齒輪設(shè)計有結(jié)構(gòu)、校核或優(yōu)化設(shè)計), 并由用戶輸入原始設(shè)計參數(shù),這時零部件CAD子系統(tǒng)根據(jù)控制子系統(tǒng)傳輸過來的原始設(shè)計參數(shù)和所選設(shè)計行為進行相應(yīng)設(shè)計活動, 最后由參數(shù)化繪圖子系統(tǒng)接收設(shè)計結(jié)果, 在本系統(tǒng)中繪出相應(yīng)的零件工作圖,機械標準件設(shè)計系統(tǒng)軟件的邏輯框圖見圖1。 2 軟件設(shè)計中的關(guān)鍵技術(shù) 2.1繪圖公用模塊的建立 ?基于程序設(shè)計模塊化思想,為標準件繪圖程序作了一個公用模塊Common.arx,該模塊對標準件圖形環(huán)境做了統(tǒng)一規(guī)定,并對一些相同功能的程序模塊(如參數(shù)輸入、圖形旋轉(zhuǎn)等)進行了統(tǒng)一編制。另外對某類標準件來說,不同標準號對應(yīng)的標準件結(jié)構(gòu)基本是相同的,只是局部結(jié)構(gòu)的改變, 因此對這些具有相同圖形的部分也進行了模塊化處理。這樣既節(jié)省內(nèi)存又使程序代碼易于管理。以下對Common.arx中的初始化實體模式與作圖環(huán)境子模塊進行說明。 圖1 機械標準件設(shè)計標準軟件的邏輯框圖 公用模塊在AutoCAD下建立了三個層stand1(線型continuous,顏色white),stand2(線型center,顏色red), stand3(線型hidden,顏色white)分別放置標準件圖形的粗細實線、中心線和虛線。另外在標準件插入圖形以前,調(diào)用公用模塊中的init()初始化作圖環(huán)境,完成后再調(diào)用rest()恢復以前的作圖環(huán)境。以下是init()程序的代碼: init(){structresbufrBc,rBb,rBu; ads_getvar(″BLIPMODE″,&rBb); ads_getvar(″CMDECHO″,&rBc); rBu.restype=PTSHORT;rBu?resval=0; ads_setvar(″CMDECHO″,&rBu); ads_setvar(″BLIPMODE″,&rBu); ads_command(RTSTR,″linetype″,RTSTR,″s″, RTSTR,″bylayer″,RTSTR,″″,RTNONE); ads_command(RTSTR,″color″,RTSTR,″bylayer″,RTNONE);} 本系統(tǒng)的參數(shù)化繪圖子系統(tǒng)程序框架采用的是ARX的基本結(jié)構(gòu)及消息機制,而機械零件的參數(shù)化繪圖部分采用ADS庫函數(shù) (如實體數(shù)據(jù)庫函數(shù)、選擇集操作函數(shù)和選擇集構(gòu)造函數(shù)等)來完成。以下介紹ARX的基本結(jié)構(gòu)及消息機制: AcRx::AppRetCode AcrxEntryPoint(AcRx::AppMsgCodemsg,void*ptr) {if(ptr!=NULL){switch(msg){ caseAcRx::kInitAppMsg://加載應(yīng)用程序 acrxDynamicLinker?〉Un1ockApplication(ptr) break; caseAcRx::kLoadDwgMsg;//登記ads_defun()定義的函數(shù) funcload(); break; caseAcRx::kInvkSubrMsg://執(zhí)行ads_defun()定義的函數(shù) dofun(); break; caseAcRX::kUnloadDwgMsg://撤消應(yīng)用程序所做的初始化工作 funcUnload(); ads_printf(″Unloading\n″); break; caseAcRx::kUnloadAppMsg://徹底清除所有的系統(tǒng)資源 default: break; returnAcRx::kRetOK;}(4) 2.2軟件在AutoCAD下的界面設(shè)計 ?本系統(tǒng)菜單采用AutoCADR14新的菜單制定技術(shù)制作而成, 對AutoCADR14的菜單文件ACAD.MNU進行了修改,在下拉菜單draw下加入一項標準件,其下一級子菜單是標準件種類,當你選擇某類零件時會動態(tài)加入有關(guān)這類零件的設(shè)計計算菜單。舉例如下: * * *POP7 * * draw ID_MnDraw[&Draw chen] …… ID_StandardComponent[-〉標準件] ID_gear[齒輪p(menucmd″p7=+wuhansheji?pop1″] 其中,p7為菜單節(jié)draw的節(jié)號即POP7,chilunsheji?pop1表明所要加入的菜單節(jié)組名為chilunsheji,菜單節(jié)號為pop1。然后由設(shè)計菜單調(diào)用零部件子系統(tǒng)進行設(shè)計計算和參數(shù)化繪圖。 3 軟件的數(shù)據(jù)查詢 ?Visual C++的MFC數(shù)據(jù)庫類提供了強大的數(shù)據(jù)訪問功能,并且可以采取中文界面,所以本系統(tǒng)采用了MFC數(shù)據(jù)庫類中的兩種: CDatabase類: CDatabase類用來封裝應(yīng)用程序?qū)σ粋數(shù)據(jù)庫連接的處理,具體做法如下: ?Cdatabase * pDb; pDb=newCdatabase; pDb-〉OpenEx(″DSN=db1″)這樣便建立了與名為db1的數(shù)據(jù)庫的連接,本系統(tǒng)采用十分流行的Access作數(shù)據(jù)庫平臺存放設(shè)計系統(tǒng)中所需的大量數(shù)據(jù)。 CRecordset類: ?這個類用來封裝對數(shù)據(jù)庫的查詢,如加入、修改、刪除等操作,設(shè)計資料庫的訪問(只簡單介紹如何實現(xiàn)參數(shù)化查詢)。 ?假設(shè)CmyRecordset為記錄集類Crecordset的派生類, 在CmyRecordset類的聲明中加入m?_ffl(查詢參數(shù)),在CmyRecordset?cpp文件AFX?_Field?_Init后初始化m?_ffl及m?_nparams(查詢參數(shù)的個數(shù))以下為具體查詢的實現(xiàn): Bool bRc:CmyRecordset * p=new CmyRecordset; p-〉m?_strFilter=″直徑=?″;p-〉m_ffl=mm(此處mm具有具體值); bRc=P?〉Open(Crecordset::snapshot,NULL,Crecordset::readOnly); if(bRc) TRACE(″openedsuccessful!\n″); Else TRACE(″openedfailed\n″); 然后由CmyRecordset類的成員變量即可得所需的數(shù)據(jù)。 4 公式庫的建立 ?本系統(tǒng)中要用到很多計算公式,進行數(shù)據(jù)擬合和強度校核以及優(yōu)化設(shè)計, 因此建立了一個動態(tài)連接庫(DLL),將相關(guān)的計算公式作為成員函數(shù)集總在各自的零件類中,在Visual C++中創(chuàng)建擴展MFC DLL,這樣在設(shè)計計算中就可以動態(tài)加載所需公式。舉例如下: class AFX_EXT_CLASS chilun {public: …… doubletouchlimcan(CStringmatlx,doubleht,doubleu) …… } doublechilun::touchlimcan(CStringmatlx,doubleht,doubleu) {if(matlx==″調(diào)質(zhì)合金″) return 0.81081*ht+518.64865+u*7; elseif(matlx==″碳素鋼″) return 0.93750*ht+298.125+u*140; …… else return 0;} 以上代碼中AFX_EXT_CLASS表示chilun類可以被其它應(yīng)用程序引用,函數(shù)touchlimcan()是用來進行齒輪接觸疲勞極限計算的。 5 標準件設(shè)計系統(tǒng)的功能及應(yīng)用情況 ?本軟件可以完成各種標準件的設(shè)計、繪制,每類標準件都是根據(jù)最新的《機械設(shè)計手冊》規(guī)定的標準制定。在應(yīng)用上,它可以用于實際的機械設(shè)計輔助繪圖,大大提高了工程人員的工作效率。
|