魏永樂(lè), 晁彩霞
(遼寧工程技術(shù)大學(xué)機(jī)械工程學(xué)院,遼寧 阜新 123000)
基于ObjectARX開(kāi)發(fā)工程圖模塊的研究
魏永樂(lè), 晁彩霞
(遼寧工程技術(shù)大學(xué)機(jī)械工程學(xué)院,遼寧 阜新 123000)
三維實(shí)體建模在機(jī)械產(chǎn)品的設(shè)計(jì)過(guò)程中得到了廣泛應(yīng)用,但二維工程圖仍是當(dāng)前指導(dǎo)生產(chǎn)和進(jìn)行技術(shù)交流必不可少的文件。為了從三維實(shí)體模型快速得到二維工程圖,利用ObjectARX二次開(kāi)發(fā)工具,在AutoCAD平臺(tái)上開(kāi)發(fā)工程圖模塊,實(shí)現(xiàn)了實(shí)體模型向工程圖的快速轉(zhuǎn)化以及自動(dòng)標(biāo)注。工程圖生成在模型空間,方便后續(xù)操作。通過(guò)實(shí)例證明該工程圖模塊能夠從特征實(shí)體模型中提取工程圖的相關(guān)信息,快速生成二維工程圖,大大提高用戶(hù)的工作效率。
計(jì)算機(jī)應(yīng)用;工程圖模塊;二次開(kāi)發(fā);ObjectARX;AutoCAD
隨著計(jì)算機(jī)技術(shù)的迅速發(fā)展,CAD技術(shù)已經(jīng)在機(jī)械行業(yè)得到了廣泛的應(yīng)用。CAD技術(shù)的應(yīng)用加快了機(jī)械產(chǎn)品開(kāi)發(fā)進(jìn)程、提高了生產(chǎn)效率和產(chǎn)品質(zhì)量、降低了生產(chǎn)成本。目前,許多機(jī)械產(chǎn)品的設(shè)計(jì)都是從三維實(shí)體建模開(kāi)始的,這符合工程實(shí)際和人的思維習(xí)慣,形象直觀、真實(shí)感強(qiáng),并且可以在實(shí)體模型上進(jìn)行有限元分析等各種計(jì)算,有利于產(chǎn)品的優(yōu)化設(shè)計(jì)。然而,二維工程圖在當(dāng)前產(chǎn)品的設(shè)計(jì)和制造過(guò)程中,作為重要的技術(shù)文檔仍是不可缺少的。
AutoCAD作為Autodesk公司的主導(dǎo)產(chǎn)品,其功能強(qiáng)大、操作簡(jiǎn)單、二次開(kāi)發(fā)方便等優(yōu)點(diǎn)在機(jī)械、電子、模具等領(lǐng)域得到了極為廣泛的應(yīng)用。AutoCAD可以進(jìn)行產(chǎn)品三維實(shí)體建模,而且許多學(xué)者在其上開(kāi)發(fā)了特征建模系統(tǒng),建立了包含全生命周期各階段信息的零件特征信息模型[1-4]。如何從已有的零件特征信息模型中提取相關(guān)信息快速創(chuàng)建二維工程圖,對(duì)于滿(mǎn)足生產(chǎn)需求、提高用戶(hù)的設(shè)計(jì)效率、縮短產(chǎn)品開(kāi)發(fā)周期具有重要意義。本文以AutoCAD為平臺(tái),利用ObjectARX開(kāi)發(fā)工具開(kāi)發(fā)了工程圖模塊,實(shí)現(xiàn)了由三維特征實(shí)體模型向二維工程圖的快速轉(zhuǎn)化。
根據(jù)零件工程圖所表達(dá)的內(nèi)容,所設(shè)計(jì)開(kāi)發(fā)的工程圖模塊主要應(yīng)具有以下功能:設(shè)置圖紙幅面、創(chuàng)建視圖、標(biāo)注尺寸和粗糙度、填寫(xiě)標(biāo)題欄和技術(shù)要求等,其中創(chuàng)建視圖功能最為重要,其它功能都是在視圖的基礎(chǔ)之上進(jìn)行的。該工程圖模塊的功能結(jié)構(gòu)如圖1所示。
圖1 工程圖模塊功能結(jié)構(gòu)
設(shè)置圖紙幅面:設(shè)置工程圖幅面大小和方向。
創(chuàng)建視圖:創(chuàng)建表達(dá)零件結(jié)構(gòu)所需的各視圖。
標(biāo)注尺寸和粗糙度:標(biāo)注零件的基本尺寸、尺寸公差、幾何公差和表面粗糙度等。
填寫(xiě)標(biāo)題欄和技術(shù)要求:填寫(xiě)標(biāo)題欄中的相關(guān)信息,以及零件加工時(shí)的技術(shù)要求。
根據(jù)工程圖模塊的功能結(jié)構(gòu)可知,視圖的創(chuàng)建和尺寸標(biāo)注是工程圖模塊的核心。由于文章篇幅所限,重點(diǎn)討論創(chuàng)建視圖功能和尺寸標(biāo)注功能的設(shè)計(jì)與開(kāi)發(fā)過(guò)程。
2.1 視圖的創(chuàng)建
AutoCAD具有采用命令方式創(chuàng)建視圖的功能,但創(chuàng)建過(guò)程復(fù)雜,而且生成的視圖位于布局空間,使用戶(hù)操作不太方便。與其相比,利用ObjectARX開(kāi)發(fā)的工程圖模塊創(chuàng)建視圖操作簡(jiǎn)單,且生成的視圖位于模型空間,使用戶(hù)后續(xù)的操作如同在AutoCAD中直接繪制工程圖一樣,操作起來(lái)更加熟悉、方便。
2.1.1 AutoCAD創(chuàng)建視圖方法
AutoCAD創(chuàng)建視圖的方法主要是采用MView命令方式,其創(chuàng)建視圖的主要步驟如下[5-6]:
1) 切換到布局空間(Layout1或Layout2),并設(shè)置圖紙和打印機(jī)選項(xiàng);
2) 刪除已有的視圖(系統(tǒng)自動(dòng)生成的一個(gè)視圖);
3) 輸入MView命令,輸入生成視圖個(gè)數(shù)N,然后用鼠標(biāo)指定各個(gè)視圖的大小和位置;
4) 激活左上角的視圖,從菜單View/3D View中選擇Front選項(xiàng),將其設(shè)置為前視圖;
5) 輸入Zoom命令,選擇Scale項(xiàng),輸入比例系數(shù),顯示模型;
6) 輸入Solprof命令,選擇實(shí)體模型,其它的提示直接回車(chē)即可,提取前視圖的輪廓線;
重復(fù)步驟第4)~6)步,獲得實(shí)體模型的其它視圖的輪廓線;
7) 打開(kāi)圖層管理對(duì)話框,會(huì)發(fā)現(xiàn)系統(tǒng)自動(dòng)創(chuàng)建了幾個(gè)圖層,其中以PV為前綴的圖層記錄可見(jiàn)輪廓線,以PH為前綴的圖層記錄不可見(jiàn)輪廓線,將其線型設(shè)置為Hidden類(lèi)型;
8) 將0層關(guān)閉,即可看到新創(chuàng)建的視圖。
由以上步驟可以看出,采用Mview命令創(chuàng)建視圖步驟繁瑣、重復(fù)操作多、效率低;更糟糕的是,提取出的各視圖輪廓線,雖然是平面圖形,但各視圖沒(méi)有進(jìn)行坐標(biāo)變換,不在同一個(gè)平面上,如果在模型空間觀察顯示很亂,難以辨認(rèn),更不易后續(xù)處理,如圖2所示。
圖2 模型空間觀察視圖
2.1.2 工程圖模塊創(chuàng)建視圖
1) 基本視圖的創(chuàng)建
基本視圖包括主視圖、左視圖、俯視圖、后視圖、右視圖和仰視圖,創(chuàng)建基本視圖的設(shè)計(jì)開(kāi)發(fā)思路如下,其實(shí)現(xiàn)流程圖如圖3所示。
(1) 應(yīng)用AutoCAD現(xiàn)有的創(chuàng)建視圖的命令,如Layout,-View,Solprof等命令,設(shè)置實(shí)體模型各個(gè)視圖,并提取出各個(gè)視圖的輪廓線;
(2) 調(diào)用ObjectARX中提供的坐標(biāo)變換函數(shù)和實(shí)體操作函數(shù),將提取出的輪廓線在模型空間進(jìn)行坐標(biāo)變換,將所有視圖都轉(zhuǎn)換到XOY面內(nèi)適當(dāng)位置;
(3) 將可見(jiàn)輪廓線添加到SolidLayer層,將不可見(jiàn)輪廓線添加到HiddenLayer層。
創(chuàng)建基本視圖的關(guān)鍵代碼如下:
acedCommand(RTSTR,"layout",RTSTR,"_n",RTS TR,"View",0);//創(chuàng)建View布局
acedCommand(RTSTR,"layout",RTSTR,"",RTSTR ,"View",0);//進(jìn)入View布局
acedCommand(RTSTR,"mspace",0);//激活視圖……
acedSSGet(NULL,NULL,NULL,NULL,ss);//構(gòu)造選擇集,選中三維實(shí)體模型
acedSSName(ss,0,m_SolName);//獲得實(shí)體名
for(int i=0;i<3;i++)
{ acedCommand(RTSTR,"-view",RTSTR,s[i],0) ;//設(shè)置front、top或left視圖
acedCommand(RTSTR,"solprof",RTENAME, m_SolName,RTSTR,"",RTSTR,"Y",RTSTR,"Y",R TSTR,"Y",0);//提取視圖的輪廓線 }
acedCommand(RTSTR, "Model",RTSTR, "",0); //進(jìn)入模型空間
……
for(int i=0;i<6;i++)
{ ……
//構(gòu)造選擇集,選中該可見(jiàn)或不可見(jiàn)輪廓線
acedSSGet("X",NULL,NULL,&eb,ss);
ident_init(mat);//初始化坐標(biāo)變換矩陣
mat[0][3]=m_LviewX;//X軸平移量
……
acedXfromSS(ss,mat);//進(jìn)行坐標(biāo)變換
if(strcmp(LayerPrefix[i], "PV") //可見(jiàn)輪廓
{ ……
//將選擇集中的實(shí)體放入SolidLayer層
pEnt->setLayer(SolidLayerId); }
if(strcmp(LayerPrefix[i], "PH") //不可見(jiàn)輪廓
{ ……
//將選擇集中的實(shí)體放入HiddenLayer層
pEnt->setLayer(HiddenLayerId); }
}
acedCommand(RTSTR,"layout",RTSTR,"_d",RTS TR,"View",0);//刪除View布局
2) 剖視圖的創(chuàng)建
創(chuàng)建剖視圖的設(shè)計(jì)開(kāi)發(fā)思路如下:
(1) 確定剖切平面的位置;
(2) 調(diào)用三維實(shí)體的getSection()函數(shù),獲得實(shí)體的剖面;
(3) 將剖面進(jìn)行坐標(biāo)變換,將其變換到XOY面的合適位置,對(duì)其進(jìn)行修整并添加剖面線,得到剖視圖。
創(chuàng)建剖切視圖的關(guān)鍵代碼如下:
AcGePlane *pPlane=new AcGePlane();//剖切平面switch(m_RefPlane)//選擇參考平面
{case 1://以XOY平面為參考平面
Vect.set(0,0,1);//設(shè)置剖切平面的法向量
Orig.set(0,0,m_Dist);//設(shè)置剖切平面位置
pPlane->set(Orig,Vect);//設(shè)置剖切平面
break;
case 2://以YOZ平面為參考平面
…… }
acedSSGet(NULL,NULL,NULL,NULL,ss);//構(gòu)造選擇集,選中三維模型
……
pObj->getSection(pPlane,pSectProf);//獲得剖切面的輪廓線
……
pSectProf->transformBy(mat);//對(duì)輪廓線進(jìn)行坐標(biāo)變換
//將剖面輪廓添加到塊表記錄中
……
pBlockTableRecord->appendAcDbEntity(entityId, pSectProf);
2.2 工程圖的標(biāo)注
工程圖中的標(biāo)注主要有尺寸公差、幾何公差、粗糙度和文本注解等信息,是工程圖必不可少的組成部分。由于采用Mview命令創(chuàng)建視圖時(shí),不記錄三維模型與視圖的關(guān)聯(lián)信息,故尺寸公差和粗糙度等標(biāo)注無(wú)法自動(dòng)生成,創(chuàng)建視圖之后需要手工標(biāo)注。下面討論如何利用ObjectARX提供的尺寸公差類(lèi),從零件特征模型提取標(biāo)注信息,實(shí)現(xiàn)尺寸公差、幾何公差、粗糙度等自動(dòng)標(biāo)注。
2.2.1 AutoCAD標(biāo)注公差和粗糙度
AutoCAD系統(tǒng)具有強(qiáng)大的尺寸標(biāo)注功能,提供了多種標(biāo)注方法,可以滿(mǎn)足不同行業(yè)的圖形的標(biāo)注要求,但在標(biāo)注公差和粗糙度方面AutoCAD還存在很多的缺點(diǎn)。
1) 尺寸公差的標(biāo)注
AutoCAD中尺寸公差標(biāo)注的一般步驟是:先查找并確定上、下偏差值,再利用“標(biāo)注樣式管理器”建立一種“標(biāo)注樣式”,設(shè)置上偏差、下偏差、前綴等有關(guān)參數(shù)。每標(biāo)注一個(gè)不同的尺寸公差都要返回“標(biāo)注樣式管理器”中重新進(jìn)行設(shè)置[7]。其明顯的缺點(diǎn)就是上、下偏差需人工查找確定,標(biāo)注時(shí)需要反復(fù)設(shè)置標(biāo)注樣式,效率低。
2) 幾何公差的標(biāo)注
AutoCAD雖然具有幾何公差的標(biāo)注功能,但其功能不完善,實(shí)際應(yīng)用很不方便,如指引線與公差項(xiàng)不能統(tǒng)一標(biāo)注,沒(méi)提供基準(zhǔn)要素的標(biāo)注。通常的解決辦法是將幾何公差和基準(zhǔn)符號(hào)做成帶屬性的塊,標(biāo)注時(shí)利用插入命令將其插入到指定的位置,然后修改其屬性,使用不太方便[8]。
3) 粗糙度的標(biāo)注
AutoCAD不具有粗糙度的標(biāo)注功能,用戶(hù)通常是將粗糙度符號(hào)定義成帶屬性的圖塊,進(jìn)行標(biāo)注時(shí)利用插入命令將其插入到指定位置并輸入旋轉(zhuǎn)一定角度,然后修改其屬性[9]。
2.2.2 工程圖模塊公差和粗糙度自動(dòng)標(biāo)注
針對(duì)AutoCAD在標(biāo)注方面的不足,工程圖模塊開(kāi)發(fā)了尺寸公差、幾何公差和粗糙度自動(dòng)標(biāo)注功能,簡(jiǎn)化了操作步驟,提高了設(shè)計(jì)效率。
1) 尺寸公差標(biāo)注
在ObjectARX中尺寸類(lèi)(AcDbDimesion)是由AcDbEntity類(lèi)派生而來(lái)的,AcDbDimesion類(lèi)又派生出7個(gè)子類(lèi),利用這7個(gè)子類(lèi),可以開(kāi)發(fā)多種標(biāo)注形式,如兩線定角標(biāo)注、三點(diǎn)定角標(biāo)注、對(duì)齊標(biāo)注等。
在進(jìn)行零件特征建模時(shí),很多尺寸公差已經(jīng)輸入到零件特征信息模型之中,為了避免重復(fù)輸入、提高設(shè)計(jì)效率,標(biāo)注尺寸公差時(shí),用戶(hù)可以從圖形數(shù)據(jù)庫(kù)中選擇所要標(biāo)注的尺寸,提取出相應(yīng)公差信息進(jìn)行標(biāo)注。當(dāng)圖形數(shù)據(jù)庫(kù)中沒(méi)有公差信息時(shí),用戶(hù)也可以直接輸入尺寸值、公差代號(hào)和公差等級(jí),從公差數(shù)據(jù)庫(kù)表中查出上下偏差值,進(jìn)行標(biāo)注。尺寸公差的標(biāo)注界面如圖4所示。
尺寸公差標(biāo)注的步驟[7]:
(1) 從特征對(duì)象中獲得尺寸公差的參數(shù)或直接查詢(xún)出公差的參數(shù),確定標(biāo)注類(lèi)型;
(2) 根據(jù)標(biāo)注類(lèi)型,創(chuàng)建相應(yīng)尺寸類(lèi)對(duì)象(AcDbAlignedDimension,AcDbDiametricDimension等);
(3) 拾取所要標(biāo)注的輪廓線或尺寸標(biāo)注線的起點(diǎn)和終點(diǎn),確定尺寸線和標(biāo)注文本的位置;
(4) 將所創(chuàng)建的尺寸對(duì)象添加到圖形數(shù)據(jù)庫(kù)的模型空間。
圖4 尺寸公差標(biāo)注
2) 幾何公差標(biāo)注
幾何公差的標(biāo)注主要應(yīng)用了AcDbLeader和AcDbFcf 兩類(lèi)。AcDbLeader類(lèi)用于生成公差的指引線,AcDbFcf類(lèi)用于生成公差的主體。幾何公差的設(shè)計(jì)與開(kāi)發(fā)思路與尺寸公差標(biāo)注類(lèi)似,其標(biāo)注界面如5圖所示。
圖5 幾何公差標(biāo)注
幾何公差標(biāo)注的步驟[8]:
(1) 從特征對(duì)象中獲得幾何公差參數(shù)或直接查詢(xún)出公差參數(shù);
(2) 創(chuàng)建指引線對(duì)象(AcDbLeader類(lèi))和幾何公差對(duì)象(AcDbFcf類(lèi));
(3) 拾取指引線的起點(diǎn)、拐點(diǎn)和終點(diǎn),確定幾何公差的標(biāo)注位置;
(4) 將指引線和幾何公差對(duì)象添加到圖形數(shù)據(jù)庫(kù)的模型空間。
3) 粗糙度標(biāo)注
AutoCAD沒(méi)有提供粗糙度的標(biāo)注功能,也沒(méi)有與提供粗糙度標(biāo)注相關(guān)的類(lèi),所以粗糙度的標(biāo)注完全采用編程來(lái)實(shí)現(xiàn)。編程思路為:根據(jù)用戶(hù)輸入的信息,由程序計(jì)算并繪制表面粗糙度符號(hào)、計(jì)算表面粗糙度數(shù)值插入點(diǎn)坐標(biāo)和旋轉(zhuǎn)角度,然后利用appendAcDbEntity()函數(shù)把表面粗糙度符號(hào)和數(shù)值添加到圖形數(shù)據(jù)庫(kù)中。粗糙度標(biāo)注界面如圖6所示。
圖6 粗糙度標(biāo)注
粗糙度標(biāo)注的實(shí)現(xiàn)步驟[9-10]:
(1) 選擇粗糙度符號(hào)的類(lèi)型,輸入粗糙度的值;
(2) 拾取所要標(biāo)注的輪廓線,并確定粗糙度符號(hào)插入點(diǎn)和方向;
(3) 計(jì)算粗糙度符號(hào)各點(diǎn)的坐標(biāo),并利用AcDbLine和AcDbCircle類(lèi)對(duì)象繪制粗糙度符號(hào);
(4) 創(chuàng)建文本對(duì)象(AcDbText)記錄粗糙度的值,并計(jì)算文本的插入點(diǎn)和旋轉(zhuǎn)角度;
(5) 將粗糙度符號(hào)和數(shù)值添加到圖形數(shù)據(jù)庫(kù)的模型空間。
以支架零件為例來(lái)驗(yàn)證工程圖模塊的正確性和實(shí)用性,如圖7所示。
1) 利用AutoCAD特征建模系統(tǒng)建立支架零件的三維實(shí)體模型;
2) 設(shè)置圖紙幅大小和方向;
3) 創(chuàng)建所需視圖,并標(biāo)注所需尺寸;
4) 填寫(xiě)標(biāo)題欄、技術(shù)要求,形成二維工程 圖。
圖7 支架工程圖
針對(duì)AutoCAD創(chuàng)建視圖以及標(biāo)注公差和粗糙度方面的不足,借助ObjectARX二次開(kāi)發(fā)工具,采用面向?qū)ο缶幊碳夹g(shù)開(kāi)發(fā)了工程圖模塊。其界面友好、操作方便,能夠從零件的三維特征信息模型快速得到二維工程圖,可以大大減少用戶(hù)反復(fù)操作,有效提高用戶(hù)的設(shè)計(jì)效率。而且創(chuàng)建的二維工程圖處于AutoCAD的模型空間,使熟悉二維繪圖的用戶(hù)操作起來(lái)更加得心應(yīng)手。通過(guò)實(shí)例證明該工程圖模塊結(jié)合零件特征建模系統(tǒng),可以由零件特征信息模型快速創(chuàng)建二維工程圖,利用AutoCAD系統(tǒng)良好的開(kāi)放性,借助ObjectARX工具進(jìn)行專(zhuān)項(xiàng)二次開(kāi)發(fā),可以大大提高設(shè)計(jì)效率。
[1] 羅志偉, 陳 亮. 基于ARX的產(chǎn)品特征建模研究[J].福州大學(xué)學(xué)報(bào), 2004, (2): 158-161.
[2] 田啟華, 杜義賢, 趙 衛(wèi). 基于AutoCAD的零件特征信息構(gòu)建[J]. 現(xiàn)代制造工程, 2004, (7): 34-36.
[3] 蘇 猛, 魏永樂(lè). 基于AutoCAD開(kāi)發(fā)零件特征建模系統(tǒng)研究[J]. 遼寧工程技術(shù)大學(xué)學(xué)報(bào), 2006, (1): 123-126.
[4] 魏永樂(lè), 晁彩霞. 基于ObjectARX實(shí)現(xiàn)特征建模的方法[J]. 工程圖學(xué)學(xué)報(bào), 2010, (6): 92-99.
[5] 何 兵, 車(chē)林仙. AutoCAD中由三維模型自動(dòng)生成二維工程圖的研究[J]. 機(jī)械設(shè)計(jì), 2005, (9): 10-12.
[6] 秦 然. 基于 AutoCAD由三維模型生成二維投影的方法研究[J]. 遼寧大學(xué)學(xué)報(bào), 2005, (2): 172-174.
[7] 王輝輝, 沈精虎, 李 超. 基于AutoCAD的尺寸公差智能標(biāo)注系統(tǒng)的設(shè)計(jì)[J]. 裝備制造技術(shù), 2009, (2): 77-79.
[8] 洪友倫. 基于 AutoCAD的形位公差代號(hào)標(biāo)注系統(tǒng)的開(kāi)發(fā)[J]. 機(jī)械, 2009, (6): 52-55.
[9] 孫麗紅, 張 燕, 谷 實(shí). 基于AutoCAD二次開(kāi)發(fā)的表面粗糙度的智能化標(biāo)注[J]. 現(xiàn)代制造工程, 2010, (10): 77-80.
[10] 郭德偉, 鐘艷如, 黃美發(fā). 基于ObjectARX的表面粗糙度符號(hào)標(biāo)注算法及實(shí)現(xiàn)[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用, 2008, (2): 79-83.
Developing engineering drawing module base on ObjectARX
Wei Yongle, Chao Caixia
( College of Mechanical Engineering, Liaoning Technical University, Fuxin Liaoning 123000, China )
The 3D solid modeling is used widely in the design of machine production. But, the 2D drawing is still essential in production manufacturing and in technical exchanging. In order to construct the 2D drawing from 3D solid model, the engineering drawing module is developed based on AutoCAD with the secondary development tool ObjcetARX. Constructing the 2D drawing from a 3D solid model and automatic dimension are realized, and the 2D drawing is created in the model space which makes the user’s operation more convenient. An example shows that the engineering drawing module can extract the information of the 2D drawing from the 3D features solid and can construct 2D drawing rapidly. The design efficiency can be enhanced greatly.
computer application; engineering drawing module; secondary development; ObjectARX; AutoCAD
TP 391
A
2095-302X (2013)01-0071-06
2011-09-27;定稿日期:2012-01-10
魏永樂(lè)(1979-),男,河北石家莊人,講師,碩士,主要研究方向?yàn)闄C(jī)械CAD/CAM。E-mail:weiyongle@sohu.com