陳光霞
(江漢大學(xué)智能制造學(xué)院,湖北 武漢 430056)
在設(shè)計(jì)、制造、裝配機(jī)械零部件的過(guò)程中,工藝尺寸鏈的計(jì)算是不可或缺的,在新產(chǎn)品的研發(fā)過(guò)程中,其作用更為重要[1]。零件圖中所標(biāo)注的尺寸公差是零件加工最終所需要達(dá)到的要求,即設(shè)計(jì)要求,而工藝過(guò)程中的許多中間工序的尺寸公差,是在機(jī)械加工工藝規(guī)程設(shè)計(jì)中通過(guò)計(jì)算工藝尺寸鏈才能確定的[2]。傳統(tǒng)工藝尺寸鏈的計(jì)算是由設(shè)計(jì)人員確定工藝尺寸鏈以及尺寸鏈中的各組成環(huán)的類(lèi)別,再利用相差計(jì)算公式計(jì)算各組成環(huán)的基本尺寸及公差,此方法效率比較低且容易產(chǎn)生差錯(cuò),導(dǎo)致設(shè)計(jì)錯(cuò)誤。
AutoCAD軟件是二維設(shè)計(jì)圖繪制的常用軟件,其功能強(qiáng)大,使用方便,是目前機(jī)械設(shè)計(jì)中常用的計(jì)算機(jī)輔助軟件,它提供了強(qiáng)大的二次開(kāi)發(fā)功能,如AutoLisp、ObjectARX、VBA以及C#都可對(duì)AutoCAD進(jìn)行二次開(kāi)發(fā),其中C#是利用.NET環(huán)境進(jìn)行二次開(kāi)發(fā)的方式之一,其開(kāi)發(fā)周期短、開(kāi)發(fā)便捷[3],是目前較為常用的開(kāi)發(fā)方式之一。
本文利用C#語(yǔ)言及.NET Framework組件開(kāi)發(fā)了一個(gè)可以在A(yíng)utoCAD環(huán)境下繪制被加工零件簡(jiǎn)圖,并在其上標(biāo)注工藝尺寸,形成工藝尺寸鏈,用戶(hù)只需要選擇其中的一個(gè)尺寸作為封閉環(huán),即可自動(dòng)對(duì)圖中尺寸進(jìn)行遍歷,自動(dòng)搜索尺寸,查找工藝尺寸鏈,最后計(jì)算出未知尺寸的基本尺寸及其公差。
程序?qū)崿F(xiàn)功能的基本思路如下:
利用AutoCAD軟件繪制加工零件簡(jiǎn)圖,并標(biāo)注相應(yīng)的工藝尺寸,待求尺寸鏈中的環(huán)為A,如圖1所示。其實(shí)現(xiàn)思路流程如圖2所示。
圖1 零件簡(jiǎn)圖
圖2 功能實(shí)現(xiàn)流程圖
在A(yíng)utoCAD中尺寸數(shù)據(jù)是存儲(chǔ)在其圖形數(shù)據(jù)庫(kù)(Database)中,要完成尺寸鏈的計(jì)算必須首先獲取圖中所標(biāo)注尺寸的數(shù)據(jù)。讀取尺寸數(shù)據(jù)的步驟如下:
(1)獲取當(dāng)前圖形文檔。
Document doc=Application.DocumentManager.MdiActiveDocument
(2)獲取當(dāng)前工作圖形數(shù)據(jù)庫(kù)。
Database acCurDb=HostApplicationServices.WorkingDatabase
(3)建立當(dāng)前圖形數(shù)據(jù)庫(kù)事務(wù)。
Transaction acTrans=acCurDb.TransactionManager.StartTransaction()
以只讀方式打開(kāi)當(dāng)前圖形數(shù)據(jù)塊表記錄
遍歷塊表記錄,當(dāng)實(shí)體為尺寸實(shí)體時(shí),讀取其數(shù)據(jù)存入尺寸數(shù)據(jù)數(shù)組中。
為了存儲(chǔ)尺寸數(shù)據(jù)建立如下所示的尺寸數(shù)據(jù)結(jié)構(gòu):
public struct Dimdata
{
public string DimType;//尺寸類(lèi)型
public string LoopType { get;set;}//環(huán)類(lèi)型
public Point3d StartPt;//第一尺寸界線(xiàn)起點(diǎn)坐標(biāo)
public Point3d EndPt;//第二尺寸界線(xiàn)起點(diǎn)坐標(biāo)
public double DimVal { get;set;}//基本尺寸
public double DimTpval { get;set;}//尺寸上偏差
public double DimTmval { get;set;}//尺寸下偏差
public Point3d CenterPt;//徑向尺寸圓心坐標(biāo)
public ObjectId DimObjid;//尺寸實(shí)體的ID
public bool Flag;//使用標(biāo)志
}。
并建立結(jié)構(gòu)數(shù)組來(lái)保存尺寸相關(guān)數(shù)據(jù)。
本文以水平尺寸鏈為例,如圖3所示:首先判斷封閉環(huán)2個(gè)尺寸界線(xiàn)起點(diǎn)的X坐標(biāo)的大小,將X坐標(biāo)小的作為第二尺寸界線(xiàn)起點(diǎn)(如A0為封閉環(huán),左邊為第二尺寸界線(xiàn)起點(diǎn));然后搜索尺寸鏈的其它尺寸,若某個(gè)尺寸的尺寸界線(xiàn)起點(diǎn)的X坐標(biāo)等于封閉環(huán)第二尺寸界線(xiàn)起點(diǎn)的X坐標(biāo)(如圖3所示A2的左邊起點(diǎn)),則此尺寸為尺寸鏈的下一環(huán),并將此尺寸界線(xiàn)起點(diǎn)作為A2的第一尺寸界線(xiàn)起點(diǎn),另一個(gè)尺寸界線(xiàn)的起點(diǎn)作為第二尺寸界線(xiàn)的起點(diǎn);第三步再判斷A2的2個(gè)尺寸界線(xiàn)起點(diǎn)的X坐標(biāo)大小,當(dāng)?shù)诙叽缃缇€(xiàn)起點(diǎn)的X坐標(biāo)大于第一尺寸界線(xiàn)起點(diǎn)的X坐標(biāo),則此尺寸為增環(huán),反之為減環(huán)(A2為增環(huán));再以A2的第二尺寸界線(xiàn)起點(diǎn)的X坐標(biāo)去搜索,當(dāng)下一個(gè)尺寸的2個(gè)尺寸界線(xiàn)起點(diǎn)中有一個(gè)點(diǎn)的X坐標(biāo)與A2的第二尺寸界線(xiàn)起點(diǎn)相等,則為尺寸鏈的下一環(huán),如圖3的A1,同樣的方法,再判斷A1兩個(gè)尺寸界線(xiàn)起點(diǎn)X坐標(biāo)的大小關(guān)系,從而判斷其增減性。
圖3 尺寸鏈增減環(huán)判斷
如果尺寸鏈為垂直尺寸鏈,則以尺寸的尺寸界線(xiàn)起點(diǎn)坐標(biāo)的Y坐標(biāo)作為判斷依據(jù)。如果是平面尺寸鏈,則以尺寸界線(xiàn)起點(diǎn)的X、Y坐標(biāo)作為判斷依據(jù)。
在工藝尺寸鏈的計(jì)算過(guò)程中,對(duì)直徑尺寸的處理方法是基本尺寸取一半,公差也取一半作為尺寸鏈中的一個(gè)環(huán)。如圖4中的19.8及20兩個(gè)尺寸。本文以水平尺寸鏈為例說(shuō)明其處理方法。
圖4 直徑尺寸的處理
當(dāng)尺寸實(shí)體的類(lèi)型為“AcDbDiametricDimension”或?yàn)椤癆cDbRotatedDimension”但其替代文本中含有“%%C”字符串時(shí),都是直徑尺寸,如果是“AcDbDiametricDimension”類(lèi)型,則將尺寸線(xiàn)變換為水平后,求出2個(gè)尺寸界線(xiàn)的起點(diǎn)坐標(biāo),存入數(shù)組中。當(dāng)一個(gè)直徑的2個(gè)尺寸界線(xiàn)起點(diǎn)中有一個(gè)與現(xiàn)有尺寸中的尺寸界線(xiàn)起點(diǎn)坐標(biāo)相同,如尺寸Φ40的左尺寸界線(xiàn)起點(diǎn)與43.6的左尺寸界線(xiàn)起點(diǎn)相同,則它的另一個(gè)尺寸界線(xiàn)起點(diǎn)用圓心坐標(biāo)替代,基本尺寸及上下偏差均取半。
圖1所示的工藝尺寸鏈計(jì)算結(jié)果如圖5所示。
圖5 工藝尺寸鏈計(jì)算結(jié)果圖
利用C#進(jìn)行工藝尺寸鏈的自動(dòng)計(jì)算,開(kāi)發(fā)方法簡(jiǎn)單,可以有效地減輕計(jì)算工作量和避免計(jì)算錯(cuò)誤,有利用于提高工藝規(guī)程設(shè)計(jì)的工作效率。