單元十:非正交直線到目前為止,我們都一直忽略非正交直線,原因在於由最初的圖面分析,發現只要標註正交直線就可標註出整個工程圖的八、九成了,而又可避開重複標註問題,並且也能使整個圖面全部採用單純的「順著」方式來完成標註。但程式探討至此,我們已能過濾重複標註,為使程式更加完整,本單元開始處理非正交直線。
一:「順著」標非正交直線不若正交直線只要「順著」標就可以自然帶出所需的 X 或 Y 座標值,所以必須將它當成不帶中心線的圓一樣處理,而與圓不同的是,直線有兩個端點,所以得把非正交直線的兩個端點視為兩個圓來處理。
二:角度標註既然是自動標註程式又開始處理非正交直線,那非正交直線的傾斜角度是否也要一併標註呢?
事實上角度標註牽涉到加工時基準面的問題,這都得視工件的設計或與其他零件的相對關係而定;另一方面,圖面上的非正交直線不見得都是需要精準標出的斜面,有些可能是某種加工記號或是習慣倒角,標出這些特徵的角度並非合理。
不過基於探討自動標註,我們還是大致研究一下角度標註。
Attachment:
File comment: 一個非正交直線,因基準面的不同,而有不同的角度標註。
fig10-1.png [ 4.46 KB | Viewed 1144 times ]
三:標註空間尋找在這裡我們簡化角度標註的樣式,直接使用引線來描述角度,並忽略基準面問題,將角度縮減成45度角內,標註位置則是在直線兩邊選擇有較充裕空間擺下標註文字的那一邊。
為判斷哪一邊才有足夠空間,首先必須知道我們即將標註的文字所佔空間大小,這部分可以利用 lisp 的 textbox 函式達到目的,但要注意此函式的根據判斷是當前的文字型式與文字字高,與尺寸線文字的型式與字高不見得相同,若要精準判斷,必須將目前的文字型式與字高設為與尺寸線的文字型式與顯示字高相同,並在程式結束後,返回原先的設定值,但在這裡就不再佔篇幅討論文字型式的取得與改變,先將它們當作是一樣的,為求程式的原理清楚,程式裡也只對字高作些必要調整。
Attachment:
File comment: 以文字所佔空間大小在直線兩邊找尋適合的標註空間
fig10-2.png [ 3.16 KB | Viewed 1132 times ]
其他為簡化程式,我們在標註時將 DIMTAD 系統變數設為 0,使文字與引線對齊在中間高度,這樣程式在判斷文字空間時,就不用再考慮文字與引線間的距離。
Attachment:
File comment: DIMTAD 系統變數與引線文字位置
fig10-3.png [ 3.13 KB | Viewed 1133 times ]
有了文字所佔空間的大小資訊後,我們利用 lisp 的 ssget 函式,抓取空間內的物件,比較直線兩邊將來要擺文字的空間內的物件多寡,來決定將角度標註於哪一邊。
四:程式碼本單元的程式碼與上個單元大致相同,只增加對非正交物件的資訊處理,並在最後將所有的非正交物件標上角度註解。
主要負責角度標註的副程式為新增的 ac-dimAngle 副程式,對於這些副程式,也許有人會有這樣的疑問:這些程式碼為何不藉由全域變數的妥善運用達到簡化?原因是此主題目的在於說明自動標註的原理,所以程式碼部分力求每個副程式可以是容易了解的獨立模組,對於程式碼未最簡化與不清楚部分,還請多多包涵。
五:千層麵剛剛在吃前幾天剩下的比薩時,意外發現快速製作千層麵的方法,把比薩「疊」在方形可微波的盒子裡,加熱一下,就變成千層麵啦。
完成後,其程式運作如下圖所演示:
Attachment:
File comment: 自動標註尺寸(非正交直線)
fig10-4.gif [ 50.05 KB | Viewed 1127 times ]
完整程式碼,載入後,輸入 ac-autoDim 即可使用。
Attachment:
File comment: 完整程式碼,轉載請註明出處。
autoDim10.lsp [10.07 KB]
Downloaded 58 times
本程式與技術原理由「萊昂運算股份有限公司」提供,轉載請註明出處,謝謝。加油!已經接近尾聲了,未完待續……