劉夫云,耿立冬,江友志,吳 強
(桂林電子科技大學機電工程學院,廣西 桂林 541004)
在工程設計領域,二維工程圖是產品設計的最終輸出和生產加工的重要依據,快速得到符合生產要求的二維工程圖,是降低出錯率、提高設計效率的關鍵,尺寸標注是二維工程圖幾何信息表達的重要組成部分,在工程圖繪制或參數化模型驅動生成過程中會出現如下問題,如圖1 所示。(1)尺寸標注與輪廓線重疊干涉;(2)尺寸文本線之間間距不相等;(3)同層尺寸文本線之間未對齊;(4)尺寸標注與輪廓線重疊干涉。

圖1 尺寸標注問題Fig.1 Dimension Problem
二維工程圖中尺寸標注布局沒有具體的規范標準[1],學者們針對三維模型參數化生成二維工程圖進行了大量的研究[1-7],其中文獻[2-4]概述了Solidworks 二維工程圖參數化調用API 函數方法,簡述了二維工程圖需要調整的元素。文獻[5-6]提出了一種二維工程圖尺寸標注自動調整方法,實現對驅動更新后的水平、豎直、角度尺寸標注的調整,但不能對非水平非豎直的線性尺寸標注進行調整,且局限于參數化驅動的目標工程圖中。
針對上述問題,這里通過自動獲取尺寸標注信息、對水平和豎直尺寸標注自動分層、尺寸標注干涉判斷、干涉尺寸微調整等步驟,實現了尺寸標注自適應糾錯和調整,并用此原理開發了一種尺寸標注調整系統,驗證了此方法對Solidworks二維工程圖尺寸標注自適應調整的通用性。
如圖2(a)所示,水平尺寸標注分為尺寸界線、尺寸線、尺寸數字和箭頭等四個部分,其余線性尺寸與水平尺寸的結構劃分相同,僅布局方向不同。

圖2 線性尺寸構成及簡化Fig.2 Linear Dimension Composition and Simplification
角度尺寸標注與線性尺寸標注的結構劃分相同,如圖3(a)所示,可以通過判斷尺寸界線是否平行,確定是否是角度尺寸。
在Solidworks二維工程圖中默認字體是3.5mm仿宋,字體高度是相對于A0-A4標準圖紙模板固定,在工程圖中,各個視圖縮放比例不同,文字注釋字體高度相對于工程圖的各個視圖也是不同的,通過驗證,文字注釋在視圖中的相對高度為:

式中:h—字體在視圖中的相對高度;k—視圖比例。
用IScaleRatio 函數可獲取當前視圖比例,確定注釋字高h;用GetArrowHeadAtIndex2()函數獲取尺寸線的起始箭頭和終點箭頭坐標,連接兩點坐標確定尺寸線的具體位置。
根據獲取的注釋字高h和尺寸線位置,對獲取的尺寸進行簡化,如圖2(b)所示。簡化的尺寸由矩形框和尺寸文本線組成,其中兩箭頭點坐標之間的距離稱為尺寸的寬度,矩形框用來確定尺寸線之間的位置間距,大小為h,用兩端箭頭坐標確定的尺寸線,通過判斷尺寸線段間是否相交,確定尺寸線之間是否存在干涉。其余線性尺寸均與水平尺寸簡化相同。
角度尺寸的簡化,如圖3(b)所示。同理用GetArrowHeadAt-Index2()函數獲取文本線的起始箭頭和終點箭頭坐標,連接兩點,將弧形文本線簡化為直線,其余部分與線性尺寸簡化相同。

圖3 角度尺寸構成及簡化Fig.3 Angle Dimension Composition and Simplification
二維工程圖是用各種不同角度的視圖來表達三維零件的幾何特征信息的,尺寸標注是表述視圖中幾何特征信息的精確數據,確定各個視圖中的基準是尺寸標注自適應調整的基礎。
在Solidworks二維工程圖中,每一個視圖都存在一個視圖邊界框,視圖邊界框是一個將當前視圖完全包圍的框,具有隨視圖大小變化自動調整的特點,用Solidworks API中GetOutline()函數可以獲取當前視圖邊界框對角點(最小點和最大點)坐標;用position()函數獲取視圖中點坐標,即視圖中心坐標,如圖4所示。

圖4 視圖基準示意圖Fig.4 The Sketch Map of View Benchmark
通過尺寸線的位置坐標與視圖中點和視圖包絡框對角點坐標的對比,確定尺寸在視圖中的相對位置。
將GetOutline()、position()函數獲取的視圖信息放入數組中,最小點坐標放入數組Xmin()、Ymin()中,最大點坐標放入數組Xmax()、Ymax()中,中點坐標放入數組Xmid()、Ymid()中,以便后期數據處理和調用。
在二維工程圖中,常用的尺寸布局方式有兩種,如圖5所示。

圖5 常用的兩種標注方式Fig.5 Two Commonly Used Annotation Methods
最短的尺寸標注分布在第一層,根據此特點,可對尺寸進行布局,尺寸標注按尺寸值大小依次排序,最小尺寸放在靠近輪廓的第一布局層。
判斷尺寸標注與前一個尺寸是否存在包含關系,然后依次布局,若存在包含關系,則第n個尺寸布局層計算公式,如式(2)所示。
若不存在包含關系,則第n個尺寸布局層計算公式,式(3)所示。

式中:P(n)—第n個尺寸布局層的層數;P(n-1)—第n-1個尺寸布局層的層數;Δ—布局層之間的固定間距。
3.2.1 水平尺寸和豎直尺寸的分類
在一個線性尺寸標注中存在兩個箭頭,用GetArrowHeadAt-Index2()函數獲取箭頭坐標,其中GetArrowHeadAtIndex2(0)表示獲取的是第一個箭頭,GetArrowHeadAtIndex2(1)表示獲取的是第二個箭頭。設定數組AHS()、AHE()滿足式(5),用于存放當前尺寸箭頭信息,其中數組中第一個元素是箭頭X坐標,第二個元素是箭頭的Y坐標。

根據獲取的尺寸標注箭頭坐標,對尺寸標注進行劃分。將尺寸線兩端的箭頭坐標對比,若Y坐標相等,則劃分為水平尺寸;若X坐標相等,則劃分為豎直尺寸;其余尺寸則劃分為其它尺寸。
將當前視圖中所有起始箭頭的X坐標存放入Xstart()中、起始箭頭的Y坐標存放入Ystart()中、終點箭頭的X坐標存放入Xend()中、終點箭頭的Y坐標存放入Yend()中,如圖6所示。

圖6 尺寸標注坐標分類數組關系圖Fig.6 Dimension Coordinate Classification Array Diagram
對獲取的尺寸標注進行排序,用來確定尺寸標注的位置,便于對需要調整的尺寸標注進行調整,序號從1開始,每獲取一個尺寸后加1。
在數組中,數組下標默認是從0開始,而序號排列是從1開始,故在數組中下標為n的元素,其屬于第n+1個尺寸標注;若滿足式(6),證明當前視圖中第n+1個尺寸標注是豎直尺寸,將其序號存入數組V()中;若滿足式(7),證明當前視圖中第(n+1)個尺寸標注是水平尺寸,將其序號存入數組H()中;剩余尺寸存放入數組O()中。

3.2.2 自動布局算法
根據上文獲取的視圖位置基準(視圖邊界框和視圖中點坐標),對獲取的當前視圖中水平尺寸標注序號數組H()和豎直尺寸標注序號數組V()進行分布區域劃分。
水平尺寸的分層,如圖7所示。把視圖分為從上至下的Ⅰ、Ⅱ、Ⅲ、Ⅳ四個區域。

圖7 水平尺寸標注區域劃分圖Fig.7 Horizontal Dimension Marking Area Division Drawing
根據尺寸標注坐標,對尺寸標注進行分區,尺寸標注的Y坐標大于Ymax為I區域,將其序號放入子數組H1()中;尺寸標注的Y坐標大于Ymid且小于Ymax為Ⅱ區域,將其序號放入子數組H2()中;尺寸標注的Y坐標大于Ymin且小于Ymid為Ⅲ區域,將其序號放入子數組H3()中;尺寸標注的Y坐標小于Ymin為Ⅳ區域,將其序號放入子數組H4()中。
豎直尺寸的分層,如圖8所示。同理把視圖分為從左至右的Ⅰ、Ⅱ、Ⅲ、Ⅳ四個區域。把序號數組V()中的元素根據不同區域分為數組V1()、V2()、V3()、V4()。

圖8 豎直尺寸標注區域劃分圖Fig.8 Vertical Dimension Marking Area Division Drawing
對獲取各區域的子數組進行調整,如圖9所示。

圖9 尺寸標注序號調整數組關系圖Fig.9 Dimension Sequence Number Adjustment Array Diagram
水平尺寸數組中,用式(8)計算各個元素對應的尺寸標注線的長度,放入尺寸標注線長度數組LH1()、LH2()、LH3()、LH4(),對各區域存放的長度數組,進行冒泡排序,按照長度從小到大排序,獲取排序后數組元素的原下標,根據區域不同,分別放入數組H10()、H20()、H30()、H40()中;
同理豎直尺寸數組中,用式(9)計算各個元素對應的尺寸標注線的長度,放入尺寸標注線長度數組LV1()、LV2()、LV3()、LV4(),冒泡排序后,將排序后數組元素的原下標分別存放入數組V10()、V20()、V30()、V40()中。

根據調整后數組元素的順序對尺寸標注位置進行調整,數組中第一個元素是最小的尺寸標注,放在第一層,其余依次按式(2)、式(3)分層排列,其中水平尺寸標注調整函數如下:(其中Ⅰ、Ⅲ為正;Ⅱ、Ⅳ為負)

豎直尺寸標注調整函數如下:(其中Ⅰ、Ⅲ為負;Ⅱ、Ⅳ為正)

根據獲取的視圖中各個尺寸的起始箭頭和終點箭頭的坐標,如圖10所示。

圖10 視圖中尺寸標注簡化圖Fig.10 Simplified Dimension Drawing in View
在Solidworks二維工程圖默認的平面直角坐標系中(左下角原點),連接各個起始箭頭和終點箭頭的坐標點,得到坐標系中代表各個尺寸線的線段,把尺寸干涉問題轉換為線段之間是否存在交點的問題,判斷平面坐標系中線段之間是否有交點,若有交點,則尺寸標注之間存在干涉;反之,則尺寸標注之間不存在干涉。
設一條尺寸的起始坐標點為A,終點坐標點為B,另一條尺寸的起始坐標點為C,終點坐標點為D,判斷兩個尺寸是否干涉即判斷線段AB、CD是否存在交點,用向量積法式(10)判斷:

若I1×I2>0,則C、D點在線段的AB的同側,若同時I3×I4=0,則相交且交點是A或B,否則不相交;若I1×I2<0,則C、D點在線段的AB的異側,若同時I3×I4<=0,則相交(=0時交點是A或B),否則不相交;若I1×I2=0,則C、D點在線段的AB上,若同時I3×I4=0,則兩線段重合。
保持已調整的水平尺寸標注和豎直尺寸標注固定,判斷存在干涉后,對存在干涉的其它尺寸進行微調整,設起始箭頭坐標為A(x1,y1),終點箭頭的坐標為B(x2,y2),連接獲取的A、B兩點,得到代表此尺寸線的線段,式(11)是線段AB的垂直平分線,對每次進行微調整X坐標增量為Δ/2,則Y坐標的增量,如式(12)所示。

尺寸位置坐標的微調整函數為:

在水平、豎直尺寸分層調整中,最短的尺寸標注均放在最下層,所以當尺寸標注在輪廓外即V1()、V4()、H1()、H4()區域內,對干涉的其它尺寸進行減量調整即-Δ/2;當尺寸標注在輪廓內即V2()、V3()、H2()、H3()區域內,對干涉的其它尺寸進行增量調整即+Δ/2。調整結束后,再次循環,直至沒有干涉,當前視圖調整完畢,獲取下一個視圖進行調整,直至所有視圖調整完畢。
用Visual Basic語言對該方法進行開發,添加Solidworks API引用,開發系統界面和調用API函數,如圖11、圖12所示。

圖11 軟件操作界面Fig.11 Software Operation Interface

圖12 調用的API函數圖Fig.12 The API Function Diagram of the Call
以中繼閥板為例,如圖13所示。

圖13 存在干涉的視圖Fig.13 View with Interference
二維工程圖尺寸標注出現不合理現象。其中:①、②尺寸標注之間干涉;③尺寸標注文本線之間間距不相等;④尺寸標注與零件外形輪廓線之間干涉;⑤同層尺寸標注文本線未對齊。
單擊界面中一鍵審查按鈕對尺寸標注調整,如圖11所示。
首先獲取視圖基準坐標,放入視圖坐標列表框;其次獲取視圖中尺寸標注箭頭坐標,放入尺寸坐標列表框;根據箭頭坐標對尺寸標注進行分類,將水平、豎直尺寸標注放入水平豎直尺寸列表框;對水平、豎直尺寸標注進行分層,將分層的尺寸標注存放入臨時數據列邊框。
根據臨時數據列邊框中的數組,對水平、豎直尺寸標注重新布局,布局完畢,清零;判斷視圖中尺寸標注干涉,將干涉的尺寸標注放入臨時列表框;對干涉的尺寸微調整直至臨時列表框中元素為零,結束;判斷視圖與視圖之間是否存在干涉,根據臨時列表框中尺寸標注坐標確定干涉視圖,最后對干涉視圖位置調整,結束。以上步驟均由程序自動實現,故稱為自適應調整。調整后的視圖,如圖14所示。圖13中問題均已解決。

圖14 調整后的視圖Fig.14 Adjusted View
5.2.1 尺寸數量不確定問題
不同二維工程圖中視圖數量和尺寸標注數量是不同的,要充分的獲取每個尺寸標注的信息才能對圖紙進行精確的調整。本方法把逐個獲取的尺寸標注信息存放入列表框中,定義數組長度為列表框的長度,把列表框中的信息轉存到對應的數組中,實現數組長度根據各個視圖中的尺寸數量自動調整。
5.2.2 尺寸標注信息所屬視圖判別問題
在尺寸標注信息獲取時,不能準確辨識其所屬視圖。二維工程圖中存在多個視圖,每個視圖中都有唯一的基準,不同視圖中的尺寸標注不能統一分類調整。
這里采取按順序調整視圖的方法,當前視圖調整完成后,清空列表框,再獲取下一個視圖進行調整,直至所有視圖調整完畢。
5.2.3 不同視圖之間尺寸標注干涉問題
尺寸標注自適應調整完畢后,有可能出現視圖與視圖之間尺寸標注存在干涉,為避免此問題,本方法在各個視圖尺寸標注調整完畢后,獲取圖紙中全部尺寸標注進行干涉判斷。
若不干涉,則證明各個視圖之間沒有干涉;若干涉,則對干涉尺寸所屬視圖進行位置調整。
(1)根據獲取的箭頭坐標,將尺寸標注分為水平尺寸標注、豎直尺寸標注和其它尺寸標注。
(2)對水平、豎直尺寸標注分層,根據尺寸標注的布局特點重新布局,實現水平、豎直尺寸標注自動調整。
(3)通過向量積法判斷尺寸線段是否存在交點,實現尺寸標注自動干涉判斷。
(4)對干涉的其它非水平非豎直尺寸微調整,消除尺寸標注之間干涉。
(5)此方法是一種通用方法,不局限于單一目標圖紙調整。
由于尺寸標注的多樣性,在非水平非豎直尺寸標注微調整中,僅能把干涉的非水平非豎直尺寸標注調整到相對合適的位置,使之不干涉。
這里提出的新方法已編程實現,在批量二維工程圖校核中,能夠有效的減少手動調整時間,提高工作效率。