劉夫云,耿立冬,江友志,吳 強(qiáng)
(桂林電子科技大學(xué)機(jī)電工程學(xué)院,廣西 桂林 541004)
在工程設(shè)計(jì)領(lǐng)域,二維工程圖是產(chǎn)品設(shè)計(jì)的最終輸出和生產(chǎn)加工的重要依據(jù),快速得到符合生產(chǎn)要求的二維工程圖,是降低出錯(cuò)率、提高設(shè)計(jì)效率的關(guān)鍵,尺寸標(biāo)注是二維工程圖幾何信息表達(dá)的重要組成部分,在工程圖繪制或參數(shù)化模型驅(qū)動(dòng)生成過(guò)程中會(huì)出現(xiàn)如下問(wèn)題,如圖1 所示。(1)尺寸標(biāo)注與輪廓線重疊干涉;(2)尺寸文本線之間間距不相等;(3)同層尺寸文本線之間未對(duì)齊;(4)尺寸標(biāo)注與輪廓線重疊干涉。
圖1 尺寸標(biāo)注問(wèn)題Fig.1 Dimension Problem
二維工程圖中尺寸標(biāo)注布局沒(méi)有具體的規(guī)范標(biāo)準(zhǔn)[1],學(xué)者們針對(duì)三維模型參數(shù)化生成二維工程圖進(jìn)行了大量的研究[1-7],其中文獻(xiàn)[2-4]概述了Solidworks 二維工程圖參數(shù)化調(diào)用API 函數(shù)方法,簡(jiǎn)述了二維工程圖需要調(diào)整的元素。文獻(xiàn)[5-6]提出了一種二維工程圖尺寸標(biāo)注自動(dòng)調(diào)整方法,實(shí)現(xiàn)對(duì)驅(qū)動(dòng)更新后的水平、豎直、角度尺寸標(biāo)注的調(diào)整,但不能對(duì)非水平非豎直的線性尺寸標(biāo)注進(jìn)行調(diào)整,且局限于參數(shù)化驅(qū)動(dòng)的目標(biāo)工程圖中。
針對(duì)上述問(wèn)題,這里通過(guò)自動(dòng)獲取尺寸標(biāo)注信息、對(duì)水平和豎直尺寸標(biāo)注自動(dòng)分層、尺寸標(biāo)注干涉判斷、干涉尺寸微調(diào)整等步驟,實(shí)現(xiàn)了尺寸標(biāo)注自適應(yīng)糾錯(cuò)和調(diào)整,并用此原理開發(fā)了一種尺寸標(biāo)注調(diào)整系統(tǒng),驗(yàn)證了此方法對(duì)Solidworks二維工程圖尺寸標(biāo)注自適應(yīng)調(diào)整的通用性。
如圖2(a)所示,水平尺寸標(biāo)注分為尺寸界線、尺寸線、尺寸數(shù)字和箭頭等四個(gè)部分,其余線性尺寸與水平尺寸的結(jié)構(gòu)劃分相同,僅布局方向不同。
圖2 線性尺寸構(gòu)成及簡(jiǎn)化Fig.2 Linear Dimension Composition and Simplification
角度尺寸標(biāo)注與線性尺寸標(biāo)注的結(jié)構(gòu)劃分相同,如圖3(a)所示,可以通過(guò)判斷尺寸界線是否平行,確定是否是角度尺寸。
在Solidworks二維工程圖中默認(rèn)字體是3.5mm仿宋,字體高度是相對(duì)于A0-A4標(biāo)準(zhǔn)圖紙模板固定,在工程圖中,各個(gè)視圖縮放比例不同,文字注釋字體高度相對(duì)于工程圖的各個(gè)視圖也是不同的,通過(guò)驗(yàn)證,文字注釋在視圖中的相對(duì)高度為:
式中:h—字體在視圖中的相對(duì)高度;k—視圖比例。
用IScaleRatio 函數(shù)可獲取當(dāng)前視圖比例,確定注釋字高h(yuǎn);用GetArrowHeadAtIndex2()函數(shù)獲取尺寸線的起始箭頭和終點(diǎn)箭頭坐標(biāo),連接兩點(diǎn)坐標(biāo)確定尺寸線的具體位置。
根據(jù)獲取的注釋字高h(yuǎn)和尺寸線位置,對(duì)獲取的尺寸進(jìn)行簡(jiǎn)化,如圖2(b)所示。簡(jiǎn)化的尺寸由矩形框和尺寸文本線組成,其中兩箭頭點(diǎn)坐標(biāo)之間的距離稱為尺寸的寬度,矩形框用來(lái)確定尺寸線之間的位置間距,大小為h,用兩端箭頭坐標(biāo)確定的尺寸線,通過(guò)判斷尺寸線段間是否相交,確定尺寸線之間是否存在干涉。其余線性尺寸均與水平尺寸簡(jiǎn)化相同。
角度尺寸的簡(jiǎn)化,如圖3(b)所示。同理用GetArrowHeadAt-Index2()函數(shù)獲取文本線的起始箭頭和終點(diǎn)箭頭坐標(biāo),連接兩點(diǎn),將弧形文本線簡(jiǎn)化為直線,其余部分與線性尺寸簡(jiǎn)化相同。
圖3 角度尺寸構(gòu)成及簡(jiǎn)化Fig.3 Angle Dimension Composition and Simplification
二維工程圖是用各種不同角度的視圖來(lái)表達(dá)三維零件的幾何特征信息的,尺寸標(biāo)注是表述視圖中幾何特征信息的精確數(shù)據(jù),確定各個(gè)視圖中的基準(zhǔn)是尺寸標(biāo)注自適應(yīng)調(diào)整的基礎(chǔ)。
在Solidworks二維工程圖中,每一個(gè)視圖都存在一個(gè)視圖邊界框,視圖邊界框是一個(gè)將當(dāng)前視圖完全包圍的框,具有隨視圖大小變化自動(dòng)調(diào)整的特點(diǎn),用Solidworks API中GetOutline()函數(shù)可以獲取當(dāng)前視圖邊界框?qū)屈c(diǎn)(最小點(diǎn)和最大點(diǎn))坐標(biāo);用position()函數(shù)獲取視圖中點(diǎn)坐標(biāo),即視圖中心坐標(biāo),如圖4所示。
圖4 視圖基準(zhǔn)示意圖Fig.4 The Sketch Map of View Benchmark
通過(guò)尺寸線的位置坐標(biāo)與視圖中點(diǎn)和視圖包絡(luò)框?qū)屈c(diǎn)坐標(biāo)的對(duì)比,確定尺寸在視圖中的相對(duì)位置。
將GetOutline()、position()函數(shù)獲取的視圖信息放入數(shù)組中,最小點(diǎn)坐標(biāo)放入數(shù)組Xmin()、Ymin()中,最大點(diǎn)坐標(biāo)放入數(shù)組Xmax()、Ymax()中,中點(diǎn)坐標(biāo)放入數(shù)組Xmid()、Ymid()中,以便后期數(shù)據(jù)處理和調(diào)用。
在二維工程圖中,常用的尺寸布局方式有兩種,如圖5所示。
圖5 常用的兩種標(biāo)注方式Fig.5 Two Commonly Used Annotation Methods
最短的尺寸標(biāo)注分布在第一層,根據(jù)此特點(diǎn),可對(duì)尺寸進(jìn)行布局,尺寸標(biāo)注按尺寸值大小依次排序,最小尺寸放在靠近輪廓的第一布局層。
判斷尺寸標(biāo)注與前一個(gè)尺寸是否存在包含關(guān)系,然后依次布局,若存在包含關(guān)系,則第n個(gè)尺寸布局層計(jì)算公式,如式(2)所示。
若不存在包含關(guān)系,則第n個(gè)尺寸布局層計(jì)算公式,式(3)所示。
式中:P(n)—第n個(gè)尺寸布局層的層數(shù);P(n-1)—第n-1個(gè)尺寸布局層的層數(shù);Δ—布局層之間的固定間距。
3.2.1 水平尺寸和豎直尺寸的分類
在一個(gè)線性尺寸標(biāo)注中存在兩個(gè)箭頭,用GetArrowHeadAt-Index2()函數(shù)獲取箭頭坐標(biāo),其中GetArrowHeadAtIndex2(0)表示獲取的是第一個(gè)箭頭,GetArrowHeadAtIndex2(1)表示獲取的是第二個(gè)箭頭。設(shè)定數(shù)組AHS()、AHE()滿足式(5),用于存放當(dāng)前尺寸箭頭信息,其中數(shù)組中第一個(gè)元素是箭頭X坐標(biāo),第二個(gè)元素是箭頭的Y坐標(biāo)。
根據(jù)獲取的尺寸標(biāo)注箭頭坐標(biāo),對(duì)尺寸標(biāo)注進(jìn)行劃分。將尺寸線兩端的箭頭坐標(biāo)對(duì)比,若Y坐標(biāo)相等,則劃分為水平尺寸;若X坐標(biāo)相等,則劃分為豎直尺寸;其余尺寸則劃分為其它尺寸。
將當(dāng)前視圖中所有起始箭頭的X坐標(biāo)存放入Xstart()中、起始箭頭的Y坐標(biāo)存放入Ystart()中、終點(diǎn)箭頭的X坐標(biāo)存放入Xend()中、終點(diǎn)箭頭的Y坐標(biāo)存放入Yend()中,如圖6所示。
圖6 尺寸標(biāo)注坐標(biāo)分類數(shù)組關(guān)系圖Fig.6 Dimension Coordinate Classification Array Diagram
對(duì)獲取的尺寸標(biāo)注進(jìn)行排序,用來(lái)確定尺寸標(biāo)注的位置,便于對(duì)需要調(diào)整的尺寸標(biāo)注進(jìn)行調(diào)整,序號(hào)從1開始,每獲取一個(gè)尺寸后加1。
在數(shù)組中,數(shù)組下標(biāo)默認(rèn)是從0開始,而序號(hào)排列是從1開始,故在數(shù)組中下標(biāo)為n的元素,其屬于第n+1個(gè)尺寸標(biāo)注;若滿足式(6),證明當(dāng)前視圖中第n+1個(gè)尺寸標(biāo)注是豎直尺寸,將其序號(hào)存入數(shù)組V()中;若滿足式(7),證明當(dāng)前視圖中第(n+1)個(gè)尺寸標(biāo)注是水平尺寸,將其序號(hào)存入數(shù)組H()中;剩余尺寸存放入數(shù)組O()中。
3.2.2 自動(dòng)布局算法
根據(jù)上文獲取的視圖位置基準(zhǔn)(視圖邊界框和視圖中點(diǎn)坐標(biāo)),對(duì)獲取的當(dāng)前視圖中水平尺寸標(biāo)注序號(hào)數(shù)組H()和豎直尺寸標(biāo)注序號(hào)數(shù)組V()進(jìn)行分布區(qū)域劃分。
水平尺寸的分層,如圖7所示。把視圖分為從上至下的Ⅰ、Ⅱ、Ⅲ、Ⅳ四個(gè)區(qū)域。
圖7 水平尺寸標(biāo)注區(qū)域劃分圖Fig.7 Horizontal Dimension Marking Area Division Drawing
根據(jù)尺寸標(biāo)注坐標(biāo),對(duì)尺寸標(biāo)注進(jìn)行分區(qū),尺寸標(biāo)注的Y坐標(biāo)大于Ymax為I區(qū)域,將其序號(hào)放入子數(shù)組H1()中;尺寸標(biāo)注的Y坐標(biāo)大于Ymid且小于Ymax為Ⅱ區(qū)域,將其序號(hào)放入子數(shù)組H2()中;尺寸標(biāo)注的Y坐標(biāo)大于Ymin且小于Ymid為Ⅲ區(qū)域,將其序號(hào)放入子數(shù)組H3()中;尺寸標(biāo)注的Y坐標(biāo)小于Ymin為Ⅳ區(qū)域,將其序號(hào)放入子數(shù)組H4()中。
豎直尺寸的分層,如圖8所示。同理把視圖分為從左至右的Ⅰ、Ⅱ、Ⅲ、Ⅳ四個(gè)區(qū)域。把序號(hào)數(shù)組V()中的元素根據(jù)不同區(qū)域分為數(shù)組V1()、V2()、V3()、V4()。
圖8 豎直尺寸標(biāo)注區(qū)域劃分圖Fig.8 Vertical Dimension Marking Area Division Drawing
對(duì)獲取各區(qū)域的子數(shù)組進(jìn)行調(diào)整,如圖9所示。
圖9 尺寸標(biāo)注序號(hào)調(diào)整數(shù)組關(guān)系圖Fig.9 Dimension Sequence Number Adjustment Array Diagram
水平尺寸數(shù)組中,用式(8)計(jì)算各個(gè)元素對(duì)應(yīng)的尺寸標(biāo)注線的長(zhǎng)度,放入尺寸標(biāo)注線長(zhǎng)度數(shù)組LH1()、LH2()、LH3()、LH4(),對(duì)各區(qū)域存放的長(zhǎng)度數(shù)組,進(jìn)行冒泡排序,按照長(zhǎng)度從小到大排序,獲取排序后數(shù)組元素的原下標(biāo),根據(jù)區(qū)域不同,分別放入數(shù)組H10()、H20()、H30()、H40()中;
同理豎直尺寸數(shù)組中,用式(9)計(jì)算各個(gè)元素對(duì)應(yīng)的尺寸標(biāo)注線的長(zhǎng)度,放入尺寸標(biāo)注線長(zhǎng)度數(shù)組LV1()、LV2()、LV3()、LV4(),冒泡排序后,將排序后數(shù)組元素的原下標(biāo)分別存放入數(shù)組V10()、V20()、V30()、V40()中。
根據(jù)調(diào)整后數(shù)組元素的順序?qū)Τ叽鐦?biāo)注位置進(jìn)行調(diào)整,數(shù)組中第一個(gè)元素是最小的尺寸標(biāo)注,放在第一層,其余依次按式(2)、式(3)分層排列,其中水平尺寸標(biāo)注調(diào)整函數(shù)如下:(其中Ⅰ、Ⅲ為正;Ⅱ、Ⅳ為負(fù))
豎直尺寸標(biāo)注調(diào)整函數(shù)如下:(其中Ⅰ、Ⅲ為負(fù);Ⅱ、Ⅳ為正)
根據(jù)獲取的視圖中各個(gè)尺寸的起始箭頭和終點(diǎn)箭頭的坐標(biāo),如圖10所示。
圖10 視圖中尺寸標(biāo)注簡(jiǎn)化圖Fig.10 Simplified Dimension Drawing in View
在Solidworks二維工程圖默認(rèn)的平面直角坐標(biāo)系中(左下角原點(diǎn)),連接各個(gè)起始箭頭和終點(diǎn)箭頭的坐標(biāo)點(diǎn),得到坐標(biāo)系中代表各個(gè)尺寸線的線段,把尺寸干涉問(wèn)題轉(zhuǎn)換為線段之間是否存在交點(diǎn)的問(wèn)題,判斷平面坐標(biāo)系中線段之間是否有交點(diǎn),若有交點(diǎn),則尺寸標(biāo)注之間存在干涉;反之,則尺寸標(biāo)注之間不存在干涉。
設(shè)一條尺寸的起始坐標(biāo)點(diǎn)為A,終點(diǎn)坐標(biāo)點(diǎn)為B,另一條尺寸的起始坐標(biāo)點(diǎn)為C,終點(diǎn)坐標(biāo)點(diǎn)為D,判斷兩個(gè)尺寸是否干涉即判斷線段AB、CD是否存在交點(diǎn),用向量積法式(10)判斷:
若I1×I2>0,則C、D點(diǎn)在線段的AB的同側(cè),若同時(shí)I3×I4=0,則相交且交點(diǎn)是A或B,否則不相交;若I1×I2<0,則C、D點(diǎn)在線段的AB的異側(cè),若同時(shí)I3×I4<=0,則相交(=0時(shí)交點(diǎn)是A或B),否則不相交;若I1×I2=0,則C、D點(diǎn)在線段的AB上,若同時(shí)I3×I4=0,則兩線段重合。
保持已調(diào)整的水平尺寸標(biāo)注和豎直尺寸標(biāo)注固定,判斷存在干涉后,對(duì)存在干涉的其它尺寸進(jìn)行微調(diào)整,設(shè)起始箭頭坐標(biāo)為A(x1,y1),終點(diǎn)箭頭的坐標(biāo)為B(x2,y2),連接獲取的A、B兩點(diǎn),得到代表此尺寸線的線段,式(11)是線段AB的垂直平分線,對(duì)每次進(jìn)行微調(diào)整X坐標(biāo)增量為Δ/2,則Y坐標(biāo)的增量,如式(12)所示。
尺寸位置坐標(biāo)的微調(diào)整函數(shù)為:
在水平、豎直尺寸分層調(diào)整中,最短的尺寸標(biāo)注均放在最下層,所以當(dāng)尺寸標(biāo)注在輪廓外即V1()、V4()、H1()、H4()區(qū)域內(nèi),對(duì)干涉的其它尺寸進(jìn)行減量調(diào)整即-Δ/2;當(dāng)尺寸標(biāo)注在輪廓內(nèi)即V2()、V3()、H2()、H3()區(qū)域內(nèi),對(duì)干涉的其它尺寸進(jìn)行增量調(diào)整即+Δ/2。調(diào)整結(jié)束后,再次循環(huán),直至沒(méi)有干涉,當(dāng)前視圖調(diào)整完畢,獲取下一個(gè)視圖進(jìn)行調(diào)整,直至所有視圖調(diào)整完畢。
用Visual Basic語(yǔ)言對(duì)該方法進(jìn)行開發(fā),添加Solidworks API引用,開發(fā)系統(tǒng)界面和調(diào)用API函數(shù),如圖11、圖12所示。
圖11 軟件操作界面Fig.11 Software Operation Interface
圖12 調(diào)用的API函數(shù)圖Fig.12 The API Function Diagram of the Call
以中繼閥板為例,如圖13所示。
圖13 存在干涉的視圖Fig.13 View with Interference
二維工程圖尺寸標(biāo)注出現(xiàn)不合理現(xiàn)象。其中:①、②尺寸標(biāo)注之間干涉;③尺寸標(biāo)注文本線之間間距不相等;④尺寸標(biāo)注與零件外形輪廓線之間干涉;⑤同層尺寸標(biāo)注文本線未對(duì)齊。
單擊界面中一鍵審查按鈕對(duì)尺寸標(biāo)注調(diào)整,如圖11所示。
首先獲取視圖基準(zhǔn)坐標(biāo),放入視圖坐標(biāo)列表框;其次獲取視圖中尺寸標(biāo)注箭頭坐標(biāo),放入尺寸坐標(biāo)列表框;根據(jù)箭頭坐標(biāo)對(duì)尺寸標(biāo)注進(jìn)行分類,將水平、豎直尺寸標(biāo)注放入水平豎直尺寸列表框;對(duì)水平、豎直尺寸標(biāo)注進(jìn)行分層,將分層的尺寸標(biāo)注存放入臨時(shí)數(shù)據(jù)列邊框。
根據(jù)臨時(shí)數(shù)據(jù)列邊框中的數(shù)組,對(duì)水平、豎直尺寸標(biāo)注重新布局,布局完畢,清零;判斷視圖中尺寸標(biāo)注干涉,將干涉的尺寸標(biāo)注放入臨時(shí)列表框;對(duì)干涉的尺寸微調(diào)整直至臨時(shí)列表框中元素為零,結(jié)束;判斷視圖與視圖之間是否存在干涉,根據(jù)臨時(shí)列表框中尺寸標(biāo)注坐標(biāo)確定干涉視圖,最后對(duì)干涉視圖位置調(diào)整,結(jié)束。以上步驟均由程序自動(dòng)實(shí)現(xiàn),故稱為自適應(yīng)調(diào)整。調(diào)整后的視圖,如圖14所示。圖13中問(wèn)題均已解決。
圖14 調(diào)整后的視圖Fig.14 Adjusted View
5.2.1 尺寸數(shù)量不確定問(wèn)題
不同二維工程圖中視圖數(shù)量和尺寸標(biāo)注數(shù)量是不同的,要充分的獲取每個(gè)尺寸標(biāo)注的信息才能對(duì)圖紙進(jìn)行精確的調(diào)整。本方法把逐個(gè)獲取的尺寸標(biāo)注信息存放入列表框中,定義數(shù)組長(zhǎng)度為列表框的長(zhǎng)度,把列表框中的信息轉(zhuǎn)存到對(duì)應(yīng)的數(shù)組中,實(shí)現(xiàn)數(shù)組長(zhǎng)度根據(jù)各個(gè)視圖中的尺寸數(shù)量自動(dòng)調(diào)整。
5.2.2 尺寸標(biāo)注信息所屬視圖判別問(wèn)題
在尺寸標(biāo)注信息獲取時(shí),不能準(zhǔn)確辨識(shí)其所屬視圖。二維工程圖中存在多個(gè)視圖,每個(gè)視圖中都有唯一的基準(zhǔn),不同視圖中的尺寸標(biāo)注不能統(tǒng)一分類調(diào)整。
這里采取按順序調(diào)整視圖的方法,當(dāng)前視圖調(diào)整完成后,清空列表框,再獲取下一個(gè)視圖進(jìn)行調(diào)整,直至所有視圖調(diào)整完畢。
5.2.3 不同視圖之間尺寸標(biāo)注干涉問(wèn)題
尺寸標(biāo)注自適應(yīng)調(diào)整完畢后,有可能出現(xiàn)視圖與視圖之間尺寸標(biāo)注存在干涉,為避免此問(wèn)題,本方法在各個(gè)視圖尺寸標(biāo)注調(diào)整完畢后,獲取圖紙中全部尺寸標(biāo)注進(jìn)行干涉判斷。
若不干涉,則證明各個(gè)視圖之間沒(méi)有干涉;若干涉,則對(duì)干涉尺寸所屬視圖進(jìn)行位置調(diào)整。
(1)根據(jù)獲取的箭頭坐標(biāo),將尺寸標(biāo)注分為水平尺寸標(biāo)注、豎直尺寸標(biāo)注和其它尺寸標(biāo)注。
(2)對(duì)水平、豎直尺寸標(biāo)注分層,根據(jù)尺寸標(biāo)注的布局特點(diǎn)重新布局,實(shí)現(xiàn)水平、豎直尺寸標(biāo)注自動(dòng)調(diào)整。
(3)通過(guò)向量積法判斷尺寸線段是否存在交點(diǎn),實(shí)現(xiàn)尺寸標(biāo)注自動(dòng)干涉判斷。
(4)對(duì)干涉的其它非水平非豎直尺寸微調(diào)整,消除尺寸標(biāo)注之間干涉。
(5)此方法是一種通用方法,不局限于單一目標(biāo)圖紙調(diào)整。
由于尺寸標(biāo)注的多樣性,在非水平非豎直尺寸標(biāo)注微調(diào)整中,僅能把干涉的非水平非豎直尺寸標(biāo)注調(diào)整到相對(duì)合適的位置,使之不干涉。
這里提出的新方法已編程實(shí)現(xiàn),在批量二維工程圖校核中,能夠有效的減少手動(dòng)調(diào)整時(shí)間,提高工作效率。