摘要:該文介紹了利用AutoLISP與DCL語言開發(fā)工具,開發(fā)符合國家機械制圖標(biāo)準(zhǔn)的機械制圖序號標(biāo)注實用工具的設(shè)計思想與實施方法。該實用工具,擴充了AutoCAD的功能,提高了機械制圖的繪圖效率,有一定的實用價值和推廣意義。
關(guān)鍵詞:序號標(biāo)注;AutoCAD二次開發(fā);CAD
中圖分類號:TP391文獻標(biāo)識碼:A文章編號:1009-3044(2009)36-10549-02
Redevelopment of Serial Number Marking by AutoCAD
DAI Yan-xia, XIAO Shan-hua
(Yibin Vocational and Technical College, Yibin 644003, China)
Abstract: This paper introduces the design idea and actualize method which make use of Auto LISP and DCL language to develop the utility tools of marking the serial number. This tools accords with the national standard of mechanical drawing of our country, and have expand the function of AutoCAD, It can improve the efficiency of drawing by use of this tools in practice, and have a practical value of popularization.
Key words: serial number marks; redevelopment of AutoCAD; CAD
當(dāng)前,CAD技術(shù)在企業(yè)的設(shè)計中被廣泛的使用,其中AutoCAD是一種使用最普遍的功能強大的通用繪圖軟件,但其交互式繪圖效率卻相對較低。但AutoCAD具有開放的體系結(jié)構(gòu),允許用戶和開發(fā)者在幾乎所有方面對其進行擴充和修改(即進行二次開發(fā)),能夠最大程度地滿足用戶的特殊要求。二次開發(fā)是CAD應(yīng)用取得實效的關(guān)鍵環(huán)節(jié)。通過對AutoCAD進行二次開發(fā),可以使繪圖工作變的簡單而高效。序號標(biāo)注是在機械繪圖過程中被經(jīng)常使用到的繪圖工作,使用AutoCAD的交互繪圖方式進行機械裝配圖的序號標(biāo)注十分煩瑣,為了減少勞動強度,提高繪圖效率,對其進行二次開發(fā)是十分必要的。
1 設(shè)計思路
根據(jù)GB/T4458.2—1984《裝配圖中零、部件序號及其編排方法》的規(guī)定來設(shè)計,用戶通過DCL界面選擇序號表達方式和指引線表示方法后,再在屏幕上指定裝配圖中的零件和序號的書寫位置即可完成單個或整個裝配圖的序號標(biāo)注。而且為了方便用戶操作,標(biāo)注多個序號時,程序應(yīng)有序號遞增功能。其設(shè)計開發(fā)思路流程如圖1所示。
2 程序設(shè)計及實施
2.1 參數(shù)的確定
根據(jù)GB/T4458.2—1984進行設(shè)計,主要有序號表達和指引線表達兩大內(nèi)容。序號的表達方法有兩種:1)在指引線的水平線上或圓內(nèi)注寫序號,其字高比裝配圖中所注尺寸數(shù)字的高度大一號或兩號;2)在指引線附近注寫序號,其字高比裝配圖中所注尺寸數(shù)字高度大兩號。通常來說,在機械繪圖中人們更習(xí)慣選擇第一方法。指引線的表達中,指引線的水平線要進行左右方向判斷,由于對于一組緊固件以及裝配關(guān)系清楚的零件組,可以采用公共指引線,所以需要考慮使用公共指引線進行連續(xù)序號標(biāo)注。另考慮用戶在實際操作中可能分多次標(biāo)注,應(yīng)設(shè)置序號的其始數(shù)。
綜上,確定序號標(biāo)注的參數(shù)有:序號表達方式、指引線表達方式、字體高度、序號總數(shù)、起始序號、終止序號。另有指定需要標(biāo)注的零件及序號標(biāo)注位置在程序運行中指定。
2.2 界面設(shè)計
根據(jù)確定的參數(shù)用DCL設(shè)計界面。序號表達方式與指引線表達方式用圖像按鈕來完成。由于標(biāo)注序號時需要比裝配圖中所注尺寸數(shù)字的高度大一號或者兩號,所以在界面設(shè)計中用下拉列表框控件來完成字體高度的輸入。
在標(biāo)注序號時,序號的數(shù)字通常是連續(xù)的,而且當(dāng)單個序號連續(xù)標(biāo)注的時候,為了簡化用戶操作,人們常常希望能夠一次標(biāo)注一定數(shù)量的序號,所以引入一個序號總數(shù)概念,由序號總數(shù)的數(shù)值來決定標(biāo)注的序號數(shù)值的變化范圍。再引入起始序號和終止序號兩個變量來完成對連續(xù)序號標(biāo)注時,連續(xù)標(biāo)注中序號數(shù)值的變化范圍。序號總數(shù)、起始序號、終止序號用三個編輯框來完成。
在指定序號表達方式后及標(biāo)注方法以后,操作者就需要選擇所需標(biāo)注的樣式,為了能使用公共指引線進行連續(xù)序號標(biāo)注,所以需要將程序分為單個序號標(biāo)注與連續(xù)序號標(biāo)注兩個部分。在序號的連續(xù)標(biāo)注樣式中,由于存在指引線的水平線或圓圈有左右連續(xù)和上下連續(xù)兩種樣式,所以需要將連續(xù)標(biāo)注樣式再分為連續(xù)上下標(biāo)注和連續(xù)左右標(biāo)注兩個部分。界面設(shè)計如圖2所示。
2.3 序號數(shù)字的自動遞增
在標(biāo)注序號時,序號通常是按照順序依次遞增的。為簡化用戶操作,在標(biāo)注序號過程中,不需要用戶輸入序號數(shù)字,因而序號數(shù)字必須是自動遞增的。如果不對序號數(shù)字自動遞增,則在每次運行程序進行序號標(biāo)注的時,都需要人工輸入一個序號數(shù)字,操作比較繁瑣,且容易出錯。所以,對序號數(shù)字進行自動遞增是十分有必要的。
序號數(shù)值的自動累加是依靠AutoLISP語言中的(1+ 數(shù)值)數(shù)學(xué)運算功能函數(shù)來完成的,將序號數(shù)值變量自加1,然后再賦值給序號數(shù)值變量,就可以做到序號數(shù)值的累加。
2.4 序號表達方式的保持
在序號標(biāo)注時,同一張圖紙只能是一個序號表達方式,因而序號表達方式的保持是十分重要的問題。與序號數(shù)字自動遞增一樣,序號表達方式的保持也主要是簡化用戶的操作。如當(dāng)選用圓圈序號表達方式進行序號標(biāo)注時,完成一個序號標(biāo)注后,需要標(biāo)注下一個序號,如果序號表達方式不能保持,則程序會自動使用默認(rèn)值(水平線式),操作者需要再次選擇圓圈樣式才可以完成第二次標(biāo)注。所以在程序的設(shè)計中,保持序號表達方式是很有必要的。保持的序號表達方式一直要到操作者完全退出程序才重新變?yōu)槟J(rèn)值。
序號表達方式的保持是依靠對應(yīng)變量的值進行判斷來完成的。
(defun keep_steyle( )
(setq new_style old_style);將函數(shù)運行后的old_style值返回給new_style
(if new_style (setq old_style new_style)
(setq old_style 1))
…
如果new_style為非空,將new_style賦值給old_style,使其保持old_style的值完成動作,如果old_style為空,則為old_style初值為1。old_style為序號樣式按鈕激活的數(shù)值。old_style的值的取得是由動作回調(diào)命令action_tile命令定義的,如:(action_tile “img” “(setq old_styl 1)”)。
將序號表達方式的保持方法移植使用到標(biāo)注樣式上也可以對標(biāo)注的樣式進行保持。
2.5 字體高度與水平線及圓的配合
由于不同裝配圖中尺寸標(biāo)注的字體大小不同,為滿足不同裝配圖的要求,因而序號標(biāo)注字體的大小應(yīng)能根據(jù)裝配圖中尺寸標(biāo)注的字體的大小進行改變。序號字體大小改變后,標(biāo)注指引線的水平線及圓圈就不能固定,否則就不協(xié)調(diào),因此必須由程序來完成序號字高與水平線及圓圈的協(xié)調(diào)配合。序號字體高度與水平線長和圓圈的直徑大小的配合是依靠序號字體高度與水平線長和直徑大小的比例計算得出的。通過調(diào)試得出字高乘1.6比較適合協(xié)調(diào)。如圖3所示。
由于字體高度一旦確定,在標(biāo)注同一個裝配圖時,將不再改變,所以字體高度的大小也應(yīng)該保持不變,方法與序號表達方式的保持類似。
2.6 起始序號與終止序號的顯示
在序號標(biāo)注過程中,操作者不一定能記住序號的數(shù)字,且當(dāng)操作者需要變動某些標(biāo)注時,沒有確切的序號數(shù)字顯示出來,不易保證序號標(biāo)注的正確性。如果能將所要標(biāo)寫的序號數(shù)字顯示出來,就可以給操作者提供極大的方便。
將序號數(shù)字顯示在起始序號中,當(dāng)進行單個序號標(biāo)注時,終止序號的數(shù)值自動與序號數(shù)值對齊。當(dāng)進行序號的連續(xù)標(biāo)注時,起始序號自動對應(yīng)遞增后的序號數(shù)字,終止序號由操作者指定,就可以很好的提供序號標(biāo)注數(shù)字的信息。
在程序中,利用一個字符變量和set_tile命令相配合就能做到提供這些信息。
如:(setq ans (rtos num_start))
;賦值ans為字符型變量 為后來帶入起始序號和終止序號set_tile做準(zhǔn)備
(set_tile \"num_start\" ans);設(shè)定起始序號數(shù)為變量
(set_tile \"num_end\"ans) ;設(shè)定終止序號數(shù)為變量
2.7 序號指引線的水平線指向與連續(xù)序號標(biāo)注方向判斷
在繪制水平線式的序號樣式時,水平線的指向有向左和向右兩個方向,當(dāng)給定了指引線所指零件的點坐標(biāo)后如何由程序來自動判斷水平線的指向呢?可以通過水平線所在直線上的一個端點坐標(biāo)與零件點坐標(biāo)的坐標(biāo)系上的x值的大小來判斷如圖4所示。
在程序中,使用if判斷語句對其進行判斷。
如:(if (< (car pt1) (car pt2));如果x1 (setq ang 0);則定義ang為0否則 (setq ang pi));定義ang為π,ang為角度變量 在序號的連續(xù)標(biāo)注中,當(dāng)序號進行連續(xù)上下標(biāo)注時,僅判斷水平線的指向是不夠的,還需要為序號連續(xù)方向進行判斷。通過水平線所在直線的一個端點坐標(biāo)與零件點坐標(biāo)的y值大小來判斷。如圖5所示。 在程序中,使用if判斷語句對其進行判斷。 如:(if(<(cadr p1)(cadr p2));如果y1 (setq ang(* 0.5 pi));則定義ang為0.5π setq ang(* -0.5 pi)));否則定義ang為-0.5π,ang為一個角度變量。 將水平線的指向與序號的連續(xù)方向結(jié)合起來就可以很好的完成連續(xù)序號標(biāo)注中所需要的兩個方向的判斷。2.8 運行實例程序運行時,在界面中選擇所需要的字體高度,填寫序號總數(shù)、起始序號、終止序號,點擊選取需要的序號樣式以及標(biāo)注樣式。圖6為選擇字體高度為5,序號總數(shù)為1,起始序號為10,終止序號為13,序號樣式為圓圈樣式,標(biāo)注樣式為上下連續(xù)標(biāo)注的界面的運行界面。圖7為實際不同標(biāo)注樣式在AutoCAD中的標(biāo)注效果。 3 結(jié)論 本軟件經(jīng)過多次調(diào)試運行,效果十分理想,能在Auto CAD 2004版本以上運行。序號標(biāo)注符合國家機械制圖標(biāo)準(zhǔn),可用于實際工程圖紙設(shè)計的序號標(biāo)注,有較好的實用性和應(yīng)用性,有一定的推廣和參考價值。 參考文獻: [1] 符純?nèi)A.計算機輔助設(shè)計[M].成都:西南交通大學(xué)出版社,2006. [2] 汪琪美.AutoCAD13對話框與驅(qū)動程序設(shè)計[M].北京:海洋出版社,1998. [3] 郭劍鋒,陳杉,王寧.用Visual Lisp開發(fā)AutoCAD2000應(yīng)用程序[M].北京:人民郵電出版社,2000. [4] 成大先.機械設(shè)計手冊(單行本).機械制圖、極限與配合[M].北京:化學(xué)工業(yè)出版社,2004.