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