摘要:該文討論了在AutoCAD中表面粗糙度符號(hào)標(biāo)注工具的改進(jìn)方法,在直線、圓對(duì)象基礎(chǔ)上增加了正多邊形、多段線、尺寸標(biāo)注的尺寸界線對(duì)象標(biāo)注表面粗糙度符號(hào),完善了該工具的功能,提高了機(jī)械制圖的繪圖效率,具有較好的實(shí)際使用價(jià)值和推廣意義。
關(guān)鍵詞:表面粗糙度符號(hào);AutoCAD;機(jī)械制圖
中圖分類號(hào):TP391.72;TH122文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)36-10551-03
An Improvement on Surface Roughness Symbol Marking By Redevelopment of Auto CAD
FU Chun-hua, LIU Gao-jun, HUANG Mao-fei
(Sichuan University of Science Engineering, Zigong 643000, China)
Abstract: The improvement of Surface Roughness Symbol Marking in AutoCAD is discussed in the paper. On the bases of line and circle objects, the surface roughness symbol marking of the polygon, polyline and extension line of dimension objects are added. This research extended the function of AutoCAD, enhanced mechanical drawings effectively, and embodies practical value and popularizing significance.
Key words: surface roughness symbol marking; AutoCAD; mechanical design
AutoCAD是一種功能十分強(qiáng)大通用圖形處理軟,在機(jī)械行業(yè)中使用越來越來普遍。繪制一張復(fù)雜的零件圖可能要標(biāo)注好十幾次粗糙度符號(hào)。由于在AutoCAD中沒有現(xiàn)成的粗糙度符號(hào)標(biāo)注工具,因而直接標(biāo)注符合國(guó)標(biāo)的零件表面粗糙度是一項(xiàng)十分繁瑣的工作,而且繪圖效率極低。因此為提高繪圖效率,擴(kuò)充AutoCAD的功能,對(duì)表面粗糙度符號(hào)標(biāo)注進(jìn)行AutoCAD二次開發(fā)是十分必要的。李建明發(fā)表于《東北師大學(xué)報(bào)自然科學(xué)版》第36卷2004年5月《表面粗糙度符號(hào)標(biāo)注的AutoCAD二次開發(fā)》一文,使用方便,界面友好,美中不足的是不能在對(duì)多段線、矩形、多邊形與尺寸標(biāo)注對(duì)象直接標(biāo)注表面粗糙度符號(hào),本文對(duì)此進(jìn)行改進(jìn)。
1 原文主要內(nèi)容
1.1 表面粗糙度符號(hào)標(biāo)注設(shè)計(jì)思想
開發(fā)過程采用參數(shù)化繪圖的基本設(shè)計(jì)思想,通過輸入標(biāo)注粗糙度的數(shù)值、符號(hào)、位置、文字高度等參數(shù),然后點(diǎn)取標(biāo)注位置,就能標(biāo)注出符合國(guó)家標(biāo)準(zhǔn)是GB/T 131-1993的表面粗糙度符號(hào),并根據(jù)大量參考圖冊(cè)的粗糙度標(biāo)注與筆者的工程制圖經(jīng)驗(yàn),對(duì)該國(guó)家標(biāo)準(zhǔn)進(jìn)行必要的簡(jiǎn)化,以簡(jiǎn)化程序開發(fā)工作并使開發(fā)的標(biāo)注實(shí)用程序更接近實(shí)際使用情況。其設(shè)計(jì)思想流程如圖1所示。
1.2 標(biāo)注方位的判斷與實(shí)現(xiàn)
1.2.1 直線對(duì)象的角度求解
由于Auto lisp函數(shù)無直接得到直線對(duì)象角度的函數(shù),因而只有通過(angle pt1 pt2)函數(shù)來求解,所以必須先求解直線的兩個(gè)端點(diǎn)坐標(biāo)。該函數(shù)返回的是由起點(diǎn)指向終點(diǎn)方向與X軸的夾角。
求直線角度的程序如下:
(defun jd ( )
(command \"osnap\" \"nea\");;;設(shè)置“最近點(diǎn)”捕捉方式
(setq pt (getpoint)aa (ssget pt) ;;;以“點(diǎn)選”方式選擇直線
stm_data (entget (ssname aa 0)));;;獲得直線對(duì)象的定義數(shù)據(jù)關(guān)聯(lián)表
(setqa_1(assoc 10stm_data) ;;;從關(guān)聯(lián)表中取出指定的DXF組碼,
a_2(assoc 11 stm_data);;;10為起點(diǎn),11為終點(diǎn)
a_1(cdr a_1) a_2(cdr a_2)) ;;;從DXF組碼中取出起點(diǎn)與終點(diǎn)坐標(biāo)
(setq ang (angle a_1 a_2)) ;;;求直線12與X軸的夾角
);defun
1.2.2 標(biāo)注粗糙度符號(hào)時(shí)α角度求解
以標(biāo)注如圖2所示的粗糙度符號(hào)為例,就要知道圖中的α角度,然后將粗糙度符號(hào)轉(zhuǎn)過一個(gè)α角度即可。由于直線的起點(diǎn)與終點(diǎn)不一樣,求得的角度也不一樣,對(duì)圖2來講,要求α角度,就需要由求得的直線角度ang進(jìn)行轉(zhuǎn)化,求α角度的程序段如下:
(if (and (> ang (/ pi 2)) (<= ang (* 1.5 pi)))
(setq ang (- ang pi))
);if
(if (and (> ang (* 1.5 pi)) (< ang (* 2 pi)))
(setq ang (- ang (* 2 pi)))
);if
2 改進(jìn)方法的實(shí)施
2.1 原文主要缺陷及原因
原文開發(fā)的工具對(duì)直線、圓、圓弧對(duì)象的標(biāo)注如圖3所示,符合GB要求。對(duì)尺寸標(biāo)注實(shí)體對(duì)象的粗糙度符號(hào)標(biāo)注如圖4所示;對(duì)多段線、正多邊的粗糙度符號(hào)標(biāo)注則提示“錯(cuò)誤: 參數(shù)類型錯(cuò)誤: 二維/三維點(diǎn): nil”,不進(jìn)行標(biāo)注,如圖5所示。主要原因是不能識(shí)別這些對(duì)象,標(biāo)注不正確或不標(biāo)注的原因是沒有對(duì)這些實(shí)體進(jìn)行處理,不能正確求解粗糙度符號(hào)標(biāo)注角度。
要正確標(biāo)注只有將上述對(duì)象分解為簡(jiǎn)單實(shí)體。但分解后會(huì)出現(xiàn)許多新的問題,一般不采用這種方法。
2.2 改進(jìn)方法
開發(fā)設(shè)計(jì)思想與原文一致,主要針對(duì)原文缺陷的原因,解決的關(guān)鍵問題就是要能取出需要的端點(diǎn)。通過對(duì)多段線、矩形、尺寸標(biāo)注對(duì)象的圖形數(shù)據(jù)的分析知道,需要利用DXF組代碼取出相應(yīng)的端點(diǎn),然后利用原文的求解角度方法,就能得到正確的標(biāo)注。
具體過程是利用entget函數(shù)取得對(duì)象的圖形數(shù)據(jù),用assoc函數(shù)利用DXF組代碼從圖形數(shù)據(jù)中取出含有需要端點(diǎn)的數(shù)據(jù)表,如(10 330.491 75.0874 0.0),然后利用cdr函數(shù)去掉DXF組代碼10后得到端點(diǎn)坐標(biāo)(330.491 75.0874 0.0)。
2.2.1 標(biāo)注尺寸界線的角度求解
AutoCAD的尺寸標(biāo)注對(duì)象是一個(gè)整體。其圖形數(shù)據(jù)為:
((-1 . <圖元名: 7ef50d68>) (0 . \"DIMENSION\") (330 . <圖元名: 7ef50d08>) (5 . \"2D\")(100 . \"AcDbEntity\") (67 . 0) (410 . \"Model\") (8 . \"0\") (100 . \"AcDbDimension\")(2 . \"*D1\") (10 330.491 75.0874 0.0) (11 328.616 121.982 0.0) (12 0.0 0.0 0.0) (70 . 32) (1 . \"\") (71 . 5) (72 . 1) (41 . 1.0)(42 . 93.7895) (52 . 0.0) (53 . 0.0) (54 . 0.0) (51 . 0.0)(210 0.0 0.0 1.0) (3 . \"ISO-25\") (100 . \"AcDbAlignedDimension\") (13 194.16 168.877 0.0) (14 194.16 75.0874 0.0) (15 0.0 0.0 0.0) (16 0.0 0.0 0.0) (40 . 0.0) (50 . 1.5708) (100 . \"AcDbRotatedDimension\")
如圖6所示,對(duì)應(yīng)組碼表其中取出來的點(diǎn)為P1、P2、P3、P4四個(gè)點(diǎn),分別為組碼表中10、11、13、14所對(duì)應(yīng)的值。10、14分別為圖5所示的P1、P4點(diǎn)對(duì)應(yīng)的組代碼,其取點(diǎn)的程序?yàn)?
(setq a_1(cdr(assoc 10 stm_data))
a_2(cdr(assoc 14 stm_data)))
得到點(diǎn)后求解角度與直線的方法一樣。
2.2.2 多段線、矩形框及多邊形的角度求解
由于多段線、矩形及多邊形對(duì)象利用組碼取得的值為圖形的各個(gè)頂點(diǎn)坐標(biāo)值。如圖7所示。
因此在求解多段線、矩形及多邊形的角度時(shí)必需通過循環(huán)取得。循環(huán)取出相鄰兩點(diǎn)的坐標(biāo)值,求出這兩點(diǎn)所在的直線的斜率。再取這兩點(diǎn)的第一點(diǎn)與用戶選取的點(diǎn)來計(jì)算這兩點(diǎn)的斜率,如果分別計(jì)算的兩個(gè)斜率相同,那么退出循環(huán)。即可取出當(dāng)前取得的兩點(diǎn)的坐標(biāo)值來求解角度。如果取到后一點(diǎn),則再取出最后一點(diǎn)與圖形的第一點(diǎn)進(jìn)行計(jì)算。
如圖7所示,分別計(jì)算P1與P2、P2與P3……等的斜率值,假設(shè)用戶輸入的點(diǎn)為Pt,當(dāng)P1與P2的斜率等于P1與Pt的斜率,則取出當(dāng)前兩個(gè)點(diǎn)。計(jì)算及取點(diǎn)的程序如下:
(if (= bzys \"LWPOLYLINE\");;;判斷所選擇的對(duì)象是否為多義線、矩形框及多邊形
(progn
(setq do_do 2 i 14)
(while (> do_do 1)
(setq xxxx 0 yyyy 0)
(setq zzzz (nth i stm_data))
(setq i (+ i 4))
(setq wwww (nth i stm_data))
(if (= rrrr 210)
(setq zzzz (nth (- i 8) stm_data)
wwww (nth 14 stm_data))) ;;;判斷是否取到最后一點(diǎn)
(setq a_1 (cdr zzzz))
(setq a_2 (cdr wwww))
(setq rrrr (nth 0 wwww))
(setq b_1 (angle a_1 pt)
b_2 (angle a_1 a_2))
(if (= (rtos b_1) (rtos b_2))
(setq do_do 1));;;;if斜率相同則退出循環(huán)
);;;while
);;;progn
);;;if
在(if (= (rtos b_1) (rtos b_2)) (setq do_do 1));這個(gè)語句中用到了rtos將實(shí)型數(shù)轉(zhuǎn)換成字符串再來進(jìn)行比較。由于在計(jì)算兩點(diǎn)的斜率時(shí),有時(shí)候兩點(diǎn)的斜率值非常小,為避免造成死循環(huán),將其轉(zhuǎn)換成字符串來進(jìn)行比較更容易實(shí)現(xiàn)比較的目的。
2.2 運(yùn)行與標(biāo)注實(shí)例
運(yùn)行界面如圖8所示,標(biāo)注實(shí)例如圖9所示。
3 結(jié)論
本程序在AutoCAD2008中調(diào)試通過,改進(jìn)后的表面粗糙度符號(hào)標(biāo)注工具,增加了對(duì)多義線、矩形、及在尺寸標(biāo)注對(duì)象的尺寸界限線上標(biāo)注表面粗糙度符號(hào),功能進(jìn)一部完善,使用更加方便,擴(kuò)充AutoCAD功能,提高了機(jī)械制圖效率。本工具可作為單獨(dú)的實(shí)用工具使用,也可作為機(jī)械制圖適用工具的一個(gè)模塊使用,具有較好的實(shí)際使用價(jià)值和推廣意義。
參考文獻(xiàn):
[1] 符純?nèi)A.計(jì)算機(jī)輔助設(shè)計(jì)[M].成都:西南交通大學(xué)出版社,2006.
[2] 李建明.表面粗糙度符號(hào)標(biāo)注的AutoCAD二次開發(fā)[J].東北師大學(xué)報(bào)自然科學(xué)版,2004(5):73-76.
[3] 汪愷.技術(shù)制圖國(guó)家標(biāo)準(zhǔn)宣貫教材[M].北京:中國(guó)計(jì)量出版社,1997.
[4] 俞漢清.表面粗糙度標(biāo)準(zhǔn)及應(yīng)用[M].北京:中國(guó)計(jì)量出版社,1997.
[5] 易春峰,張錫濱.Auto CAD中表面粗糙度標(biāo)注工具的二次開發(fā)[J].企業(yè)技術(shù)開發(fā),2001(5):4-5.