孫志學(xué), 張 揚(yáng)
(陜西理工學(xué)院 機(jī)械工程學(xué)院, 陜西 漢中 723000)
計(jì)算機(jī)輔助設(shè)計(jì)在各行業(yè)的應(yīng)用已經(jīng)十分廣泛,絕大部分的CAD軟件常常是一種通用的繪圖設(shè)計(jì)軟件,它們適應(yīng)的行業(yè)比較廣泛,但專業(yè)性不強(qiáng),無法在特定領(lǐng)域或行業(yè)很好地發(fā)揮輔助設(shè)計(jì)作用。為了使CAD軟件能在某些特定的專業(yè)領(lǐng)域得到更好的應(yīng)用,對(duì)CAD軟件進(jìn)行有目的、有方向、專業(yè)化的二次開發(fā)是很必要的。下面主要對(duì)機(jī)械設(shè)計(jì)中的軸零件的參數(shù)化繪圖系統(tǒng)進(jìn)行研究。
圖1 軸的分類
軸是組成機(jī)械的主要零件之一。按照軸線形狀的不同,軸可分為兩大類:直軸和曲軸。直軸按照所受載荷性質(zhì)的不同,可分為三種:心軸、傳動(dòng)軸和轉(zhuǎn)軸。直軸根據(jù)外形的不同,可分為兩種:光軸和階梯軸。光軸具有下列特點(diǎn):形狀簡(jiǎn)單,加工容易,應(yīng)力集中源少,光軸主要用于傳動(dòng)軸;階梯軸與光軸相反,階梯軸常用于轉(zhuǎn)軸。軸的分類情況可以用圖1清晰表示。此外,還有一些特殊用途的軸,如凸輪軸和鋼絲軟軸等。
在特征的基礎(chǔ)上可以考慮建立軸的信息模型。通常一個(gè)機(jī)械零部件包含有眾多的特征,其中形狀特征是這些特征中最重要的,它是其它信息的載體??梢园研螤钐卣鬟M(jìn)行分解研究,認(rèn)為若干輔助特征和主特征組合而成了軸的形狀特征,主特征間的空間相互位置關(guān)系是鄰接關(guān)系;輔助特征附屬于一個(gè)主特征,輔助特征可依附于主特征的輪廓表面或端面[1]。
根據(jù)這種思想,本系統(tǒng)設(shè)計(jì)中采用了復(fù)合形狀特征,即由至少一個(gè)主形狀特征和若干個(gè)輔助形狀特征以一定的結(jié)合方式組合成具有特定功能的形狀特征。可以考慮建立多種不同復(fù)合形狀特征的特征庫(kù),供設(shè)計(jì)者選擇。
結(jié)合本系統(tǒng)的實(shí)際情況,對(duì)常用直軸類零件進(jìn)行特征分析,得到如表1所示的形狀特征劃分結(jié)果。
表1 直軸類零件形狀特征分類
當(dāng)前CAD技術(shù)重要的研究領(lǐng)域之一是參數(shù)化技術(shù)。它是指對(duì)結(jié)構(gòu)形狀有一定規(guī)律的設(shè)計(jì)對(duì)象,可以把對(duì)象的結(jié)構(gòu)尺寸用一組參數(shù)來表示,當(dāng)參數(shù)取值不同時(shí)則可以生成不同的設(shè)計(jì)對(duì)象,即設(shè)計(jì)結(jié)果受尺寸驅(qū)動(dòng)的影響,所以又稱為參數(shù)化尺寸驅(qū)動(dòng)[1]。
ObjectARX是一個(gè)軟件開發(fā)包,它包含一組動(dòng)態(tài)鏈接庫(kù),這些庫(kù)能利用AutoCAD核心數(shù)據(jù)庫(kù)結(jié)構(gòu)與代碼。庫(kù)中包含一組通用工具,使得二次開發(fā)者可以直接訪問AutoCAD數(shù)據(jù)庫(kù)結(jié)構(gòu)、圖形系統(tǒng)及CAD幾何造型核心,以便能在運(yùn)行期間實(shí)時(shí)擴(kuò)展AutoCAD具有的類似其功能以及創(chuàng)建全面享受AutoCAD固有命令之特權(quán)的新命令[2]。
ObjectARX應(yīng)用程序主要包含頭文件部分、函數(shù)聲明部分、接口函數(shù)部分和用戶函數(shù)主體部分[2]。其中接口函數(shù)部分使用initApp( )、acrxEntryPoint( )和unloadApp()三個(gè)關(guān)鍵函數(shù)。當(dāng)應(yīng)用程序被加載時(shí),AutoCAD調(diào)用initApp( );當(dāng)應(yīng)用程序被卸載時(shí),AutoCAD調(diào)用unloadApp( )。這兩個(gè)函數(shù)均是通過acrxEntryPoint( )函數(shù)來實(shí)現(xiàn)AutoCAD調(diào)用的。
ObjectARX是一個(gè)用C++編寫的軟件開發(fā)包,在Visual C++的下拉菜單“Project”中設(shè)置其具體物理路徑就可以使用它。 具體操作為:“Project”→“Setting”→“C/C++”→“Preprocessor” →“Additional include directories”,在其后的編輯框中輸入ObjectARX中的文件夾inc的具體物理路徑;同理按照操作路徑:“Project”→“Setting”→“Link”→“Input” →“Additional library path”,在其后的編輯框中輸入ObjectARX中的文件夾lib的具體物理路徑。這樣就可以在Visual C++程序中使用ObjectARX中的函數(shù)。
本研究以AutoCAD 2006為開發(fā)平臺(tái),并采用Visual C++6.0、ObjectARX等開發(fā)工具開發(fā)基于特征的軸參數(shù)化繪圖系統(tǒng)。
本設(shè)計(jì)是基于AutoCAD平臺(tái)來進(jìn)行開發(fā)的,設(shè)計(jì)了軸CAD系統(tǒng)子菜單,并把它添加到AutoCAD的標(biāo)準(zhǔn)菜單文件ACAD.mnu中。同時(shí)還開發(fā)了圖像塊菜單,這樣將會(huì)大大增強(qiáng)用戶界面的效果。新的菜單文件ACAD.mnu被加載、編譯后就可以使用[3]。當(dāng)用鼠標(biāo)點(diǎn)擊用戶自定義菜單“軸CAD系統(tǒng)”時(shí),出現(xiàn)下拉菜單。下拉菜單中內(nèi)容有:設(shè)置、軸的分類等;其中菜單項(xiàng)“設(shè)置”有子菜單:圖幅、層和線型、文字樣式和標(biāo)注樣式,“圖幅”可以用來繪制出圖的圖幅,其它幾個(gè)菜單項(xiàng)在繪圖時(shí)起輔助作用;菜單項(xiàng)“軸的分類”有子菜單:直軸和曲軸,系統(tǒng)子菜單設(shè)計(jì)效果(部分截圖)如圖2所示。
圖2 系統(tǒng)子菜單
用戶自定義菜單中某些菜單項(xiàng)含有圖像控件菜單[4],如“直軸”。當(dāng)用鼠標(biāo)單擊菜單項(xiàng)“直軸”時(shí),系統(tǒng)彈出圖像塊菜單“直軸特征分類”對(duì)話框,如圖3所示。對(duì)話框中展示了各種直軸的原型及其對(duì)應(yīng)的圖形,圖中左側(cè)的列表框中顯示的是直軸的名稱,右側(cè)顯示了直軸的預(yù)覽圖形。例如當(dāng)在“直軸特征分類”中選擇“圓柱面+倒角”時(shí),右側(cè)預(yù)覽區(qū)顯示對(duì)應(yīng)的圖形預(yù)覽(預(yù)覽圖形底色變黑),其中“圓柱面”是此直軸的主特征,“倒角”是它的輔助特征。選中類型后,單擊按鈕“確定”,就可以打開此直軸的設(shè)計(jì)對(duì)話框。
圖3 圖像塊菜單
圖4 直軸結(jié)構(gòu)設(shè)計(jì)對(duì)話框
以“圓柱面+圓角+倒角(逆向)”為例。當(dāng)用戶在圖3中選擇“圓柱面+圓角+倒角(逆向)”時(shí)系統(tǒng)自動(dòng)顯示對(duì)應(yīng)幻燈片,此時(shí)用鼠標(biāo)單擊該對(duì)話框中的按鈕“確定”,便可以關(guān)掉圖3的對(duì)話框,彈出“圓柱面+圓角+倒角(逆向)”的設(shè)計(jì)對(duì)話框如圖4所示。
在圖4所示的直軸結(jié)構(gòu)設(shè)計(jì)對(duì)話框中輸入直軸的繪制圖形的定位點(diǎn)參數(shù)和設(shè)計(jì)參數(shù)[5]:R、B、D、L、a(各長(zhǎng)度參數(shù)單位為mm,角度單位為度,各參數(shù)的意義如圖中左側(cè)圖形預(yù)覽中尺寸標(biāo)注所示)。其中“圖形定位點(diǎn)P0”既可以在對(duì)應(yīng)編輯框中輸入點(diǎn)的坐標(biāo)也可以在繪圖區(qū)域拾取點(diǎn)的坐標(biāo)。
設(shè)計(jì)參數(shù)輸入后,單擊圖4中的按鈕“確定”,系統(tǒng)彈出子對(duì)話框“選擇繪圖比例”。當(dāng)用戶選擇了需要的比例,然后單擊子對(duì)話框中的按鈕“繪制零件工作圖”,系統(tǒng)可自動(dòng)繪制出與設(shè)計(jì)參數(shù)相對(duì)應(yīng)的軸零件工作圖,并對(duì)圖形進(jìn)行自動(dòng)尺寸標(biāo)注。
取一組合理的數(shù)據(jù):插入點(diǎn)X=50,Y=50;R=50,a=45,B=50,D=200,L=300,則繪制出直軸的零件工作圖如圖5所示。為方便起見零件工作圖繪圖中比例都選擇為1∶1。另外設(shè)計(jì)過程中如果輸入的設(shè)計(jì)參數(shù)不合理,則點(diǎn)擊圖4中“確定”按鈕時(shí)系統(tǒng)有相應(yīng)的提示信息,要求用戶輸入合理的參數(shù)。
如果再次改變參數(shù)的值,則可得到類似的零件工作圖,此處不再贅述。當(dāng)用戶選擇其它類型的軸時(shí),系統(tǒng)繪圖過程和結(jié)果與上邊類似,如系統(tǒng)可生成帶有雙圓頭平鍵的直軸(見圖6)。
圖5 簡(jiǎn)單直軸的零件工作圖 圖6 帶有雙圓頭平鍵的直軸
在VC中編程實(shí)現(xiàn)ObjectARX的應(yīng)用程序[6],首先需要在本系統(tǒng)中構(gòu)造直軸類零件特征庫(kù),具體是采用面向?qū)ο蟮姆椒▉砻枋鰪?fù)合特征信息模型。首先定義特征基類,然后通過特征基類派生出其它特征類。
軸的零件工作圖的繪制代碼可以添加到選擇比例的對(duì)話框中的“確定”按鈕對(duì)應(yīng)的消息處理函數(shù)中,以“圓柱面+倒角+圓角(逆向)”直軸的零件工作圖的繪制為例,其核心代碼如下:
……
//定義一系列三維點(diǎn)
//定義俯視圖上的可見點(diǎn),即實(shí)線點(diǎn)
ads_point pt0,pt1,pt2,pt3,pt4,pt5,pt6,pt7, pt8,pt9, pt10,pt12, pt13;
//下面點(diǎn)用于畫中心線
ads_point pt11,pt14;
//求一系列點(diǎn)的坐標(biāo)
pt0[X]=XPT; pt0[Y]=YPT; pt1[X]=pt0[X]; pt1[Y]=pt0[Y]+0.5*L0-B*tan(a);
pt2[X]=pt0[X]+B; pt2[Y]=pt0[Y]+0.5*L0; pt3[X]=pt0[X]+L-R; pt3[Y]=pt2[Y];
pt4[X]=pt0[X]+L; pt4[Y]=pt2[Y]; pt5[X]=pt4[X]; pt5[Y]=pt4[Y]+R;
pt6[X]=pt4[X]; pt6[Y]=pt4[Y]-L0; pt7[X]=pt4[X]; pt7[Y]=pt6[Y]-R;
pt8[X]=pt4[X]-R; pt8[Y]=pt3[Y]-L0; pt9[X]=pt2[X]; pt9[Y]=pt2[Y]-L0;
pt10[X]=pt0[X]〗; pt10[Y]=pt9[Y]+B*tan(a); pt11[X]=pt4[X]+10; pt11[Y]=pt0[Y];
pt12[X]=pt3[X]; pt12[Y]=pt5[Y]; pt13[X]=pt8[X]; pt13[Y]=pt7[Y];
pt14[X]=pt0[X]-10; pt14[Y]=pt0[Y];
//清屏
acedCommand(RTSTR,"Erase",RTSTR,"All",RTSTR,"",RTNONE);
//繪制圖中直線
acedCommand(RTSTR,"Line",RTPOINT,pt0,RTPOINT,pt1,RTSTR,"",RTNONE);
acedCommand(RTSTR,"Line",RTPOINT,pt1,RTPOINT,pt2,RTSTR,"",RTNONE);
acedCommand(RTSTR,"Line",RTPOINT,pt2,RTPOINT,pt3,RTSTR,"",RTNONE);
acedCommand(RTSTR,"Line",RTPOINT,pt4,RTPOINT,pt5,RTSTR,"",RTNONE);
acedCommand(RTSTR,"arc",RTSTR,"C",RTPOINT,pt12,RTPOINT,pt3,RTPOINT,pt5,RTNONE);
acedCommand(RTSTR,"Line",RTPOINT,pt4,RTPOINT,pt6,RTSTR,"",RTNONE);
acedCommand(RTSTR,"Line",RTPOINT,pt6,RTPOINT,pt7,RTSTR,"",RTNONE);
acedCommand(RTSTR,"arc",RTSTR,"C",RTPOINT,pt13,RTPOINT,pt7,RTPOINT,pt8,RTNONE);
acedCommand(RTSTR,"Line",RTPOINT,pt8,RTPOINT,pt9,RTSTR,"",RTNONE);
acedCommand(RTSTR,"Line",RTPOINT,pt9,RTPOINT,pt10,RTSTR,"",RTNONE);
acedCommand(RTSTR,"Line",RTPOINT,pt10,RTPOINT,pt0,RTSTR,"",RTNONE);
acedCommand(RTSTR,"Line",RTPOINT,pt2,RTPOINT,pt9,RTSTR,"",RTNONE);
//畫中心線
//創(chuàng)建一個(gè)新層:1層,用于畫中心線且此層的顏色選擇紅色
acedCommand(RTSTR,"Layer",RTSTR,"M",RTSTR,"1",RTSTR,"C",RTSTR,"Red",RTSTR,"",
//加載并設(shè)置中心線
acedCommand(RTSTR,"Linetype",RTSTR,"Load",RTSTR,"CENTER",RTSTR,"",RTSTR,"Y",
//畫中心線
acedCommand(RTSTR,"Line",RTPOINT,pt14,RTPOINT,pt11,RTSTR,"",RTNONE);
//設(shè)置當(dāng)前層為"實(shí)體"層acedCommand(RTSTR,"layer",RTSTR,"S",RTSTR,"0",RTSTR,"",RTNONE);
……
其它軸零件工作圖的繪制核心代碼與上邊的代碼類似,不再贅述。
軸是機(jī)械中一種常用的零件,它的種類繁多,結(jié)構(gòu)較復(fù)雜,這些都給設(shè)計(jì)工作帶來了許多困難。本研究中通過軸的特征分析,在Visual C++中采用面向?qū)ο蟮姆椒ń⑷舾苫惡突惖呐缮惖龋⒕幊虒?shí)現(xiàn)了軸參數(shù)化繪圖系統(tǒng)。研究發(fā)現(xiàn):特征分析技術(shù)可以大大提高CAD系統(tǒng)的描述能力,從而提高CAD系統(tǒng)的建模能力。在機(jī)械設(shè)計(jì)中,軸的設(shè)計(jì)還涉及一些扭矩、彎矩、軸徑等參數(shù)的計(jì)算以及強(qiáng)度、剛度等的校核[7-9]。在以后的工作中,應(yīng)對(duì)系統(tǒng)功能進(jìn)一步擴(kuò)充,可以考慮在系統(tǒng)添加這些計(jì)算、校核等功能,從而增強(qiáng)系統(tǒng)的集成化、智能化。
[參考文獻(xiàn)]
[1] 李玉峰.基于特征與數(shù)據(jù)庫(kù)的軸CAD系統(tǒng)(SHAFTCAD)開發(fā)與研究[D].西安:西安建筑科技大學(xué),2002:7-19.
[2] 王福軍,張志民,張師偉.AutoCAD2000環(huán)境下C/Visual C++應(yīng)用程序開發(fā)教程[M].北京:北京希望電子出版社,2008:3-4.
[3] 梁雪春,宋德明.AutoCAD2002二次開發(fā)技術(shù)指南[M].北京:清華大學(xué)出版社,2001:111-116.
[4] 葛敬俠,崔洪斌.塔設(shè)備CAD參數(shù)化繪圖系統(tǒng)研究與開發(fā)[J].機(jī)械設(shè)計(jì)與制造,2006(1):75-77.
[5] 楊可楨,程光蘊(yùn).機(jī)械設(shè)計(jì)基礎(chǔ)[M].5版.北京:高等教育出版社,2011:244-251.
[6] 陳海霞,高廣德.基于ObjectARX和Visual C++開發(fā)工具的格柵參數(shù)化設(shè)計(jì)[J].三峽大學(xué)學(xué)報(bào):自然科學(xué)版,2006,28(1):61-64.
[7] 周慧蘭,周新建.軸強(qiáng)度設(shè)計(jì)及自動(dòng)修改CAD系統(tǒng)研究與實(shí)現(xiàn)[J].華東交通大學(xué)學(xué)報(bào),2007,24(5):53-56.
[8] 易慧君,鐘經(jīng)農(nóng).減速器軸系部件CAD系統(tǒng)的研制[J].湖南大學(xué)學(xué)報(bào):自然科學(xué)版,2003,30(3):41-43,61.
[9] 潘秀石,倪俊芳.基于Solid Edge軸參數(shù)化設(shè)計(jì)系統(tǒng)研究[J].蘇州大學(xué)學(xué)報(bào):工科版,2012,32(3):21-25.