在使用AutoCAD繪圖軟件繪制各類圖形的工作中。最後一個階段是將圖形文件最終在打印機、繪圖機上輸出為圖紙。其中圖形線條的粗細劃分是一 項必須認真對待的工作。由於一般圖紙上的圖形不能像在彩色顯示器上可用顏色及深淺區分圖素、結構,而只能以改變線條的粗細的方法來達到這個目的。因此,劃 分好圖形中線條的粗細既有利於區分圖形要素,又有利於准確表達設計意圖及方便識圖。尤其是工程圖紙,應按照國家制圖標准,將圖中的各圖素劃分出明顯的粗細 來。這樣圖紙方能滿足標准化的要求。
實際上線條的粗細從粗到細有多種變化,在計算機圖形文件中則體現在線條的線寬值上。常見的譬如,圖形中各實體外輪廊線、圖形符號及表格外框線等 均為粗線,剖面線、尺寸(界)線、符號引線、中心線、點劃線等應為細線,而虛線又介於粗細線之間。且根據需要粗、中、細線還可以在一定的范圍內變化線寬。 通常設計人員或繪圖人員在計算機上使用AutoCAD繪圖軟件時,會經常使用到像COPY、OFFSET、MIRROR等組圖命令,為提高繪制的效率,組 圖時並不太考慮線條的粗細及線型問題,而是將這個問題放在最後出圖紙考貝時才一同進行調整解決。由於這時圖中圖素多,如靠交互操作命令來調整很繁雜、費 時,其它的方法又難以圓滿地解決問題。這樣就有必要在AUTOCAD交互操作功能外提供一種方便的工具,使其能夠方便、快捷地完成這項工作,以達到快速、 准確、高效、全面的目的。保證屏幕上的圖形視圖清晰、層次分明。
通常來說,圖形中線寬的調整有兩種辦法:一種方法是在繪制時,分層放置線寬不同的線條,或者按粗細不同設置成不同的顏色,再配合使用筆式或高檔 噴墨繪圖儀的線寬設置參數調整來得到所需要的硬拷貝圖紙。該種方法的缺點是輸出設備條件要求高,對出圖設備的參數設定要熟練。然而人們在屏幕上並不能看到 輸出後圖紙的真實效果。況且設計人員在繪制圖形時,所考慮的分層、分色管理並不能只以線條的寬度為依據。當出現同一圖層及顏色的圖素中因為線型、結構等原 因還要區分線寬時,就得逐一分別進行調定。這樣就會使得調定輸出圖紙線寬任務變得十分繁雜。
第二種方法是,在任何圖形輸出設備(繪圖機、打印機、照相、攝影制片設備)條件下,先在屏幕上將要輸出的圖形顯式地調整好每一圖素線條的粗細, 然後再輸出。這樣屏上所看到的,就是你所得到的一個真實反映。且不必要對輸出設備的參數進行與線寬變化的相關調定,對輸出設備無任何特殊要求。這在目前因 高檔繪圖儀價高而大量使用普通打印機出圖的狀況下具有實用意義。
本文介紹一個為此編寫的小段AutoLISP程序,使操作人員能以十分方便、快捷的手段來完成圖形中圖素線條粗細的調定工作。
該程序所能處理的線條種類包括直線、多義線、圓(弧)、橢圓(弧)、樣條曲線,線型可以處理實線、虛線、中心線、點劃線、邊界線等。操作人員可以在交互狀態下,隨時調入該程序運行,來完成當前圖形中線條粗細的調整。
為了方便操作,提高圖素選擇效率,程序設計了幾種調定線寬過程的實施方式。但任何方式下都必須首先確定所需調定的范圍(包括:分圖層、分顏色、分線型)。如果某圖層上圖素的線寬不需要調整或已調整好,則可以先行關閉(OFF),以縮小選擇的范圍。
下面是三種方式的具體操作過程:
一、選擇圖素調整:
1)方式選擇[SelectayerColorLType]回答S(Select)
2)選定調定線寬的圖素范圍
3)給出新的線寬值
4)自動完成按新線寬值調定所有包括在選擇范圍內的圖素線寬
二、分圖層調整:
1)方式選擇回答L(Layer)
2)選擇調定圖素的范圍(可以是全部或部分)
3)在[EntityName]中可選擇兩種確定層名的方法。回答E則可以從圖中選擇一圖素,以此圖素所在的層的層名為依據;回答N則需鍵入調定層的層名
4)給出新的線寬值
5)按新的線寬值在所確定的層上自動調定位於選擇范圍內的圖素線寬
三、按顏色調整:
1)方式選擇回答C(Color)
2)選擇調整作用的范圍
3)在[EntityNumber]中可用兩種方法確定顏色。回答E則可以圖中選一個顏色與所需調整顏色一樣的圖素:回答N就要給出所需調整顏色的號碼
4)給定新的線寬值
5)程序按新的線寬值,依據所選定的顏色自動地在所確定的作用范圍內調整顏色相符圖素的線寬
四、按線型調整:
1)方式選擇回答LT(LType)
2)選擇調整的作用范圍
3)在[EntityName]中回答E可以從圖中選擇一線型吻合的圖素;回答N則給出[ContinuousDenterCenterPhantomDIvideHiddenDOtDAshdotBorder]中的任一類型英文名的前面大寫字母則可
4)給定新的線寬值
5)程序按新的線寬值、依據選定的線型自動在所確定的作用范圍內調整圖素的線寬
使用的幾點說明:
1 程序對選擇范圍內的諸如剖面線、尺寸線、尺寸界線、文字、符號不起作用。這樣確定選擇調定范圍時,不必顧及這些圖素的變化。
2 程序不能調整塊內的圖素,如需調整,先EXPLORING塊中元素。如希望保持原有圖形文件結構的話,調定線寬後的圖形文件可以不存盤覆蓋原有圖形文件。
3 選擇時可用窗口選擇方法及逐個選擇等多種方法,還可以用SHIFT+選擇掉已選中的圖素。
4 所有改變線寬的圖素,除粗細變化外,其它屬性(如:層、顏色、線型)均不發生變化。
5 如果原有圖層中圖素的顏色或線型值是按揃YLAYER斈J較氯范*(繪制)的,
那麼這些圖素此時在按顏色(Color)或線型(LType)方式調整線寬時,不屬於程序作用范圍內圖素。也不能在上述兩種方式下取這些因素作 為依據,選擇實體來確定顏色、線型。這在程序運行過程中遇到此類情況均有提示。這種情況下,就可以考慮優先用選擇(Select)的方式或分層 (Layer)的方式來調整。因為按顏色或線型方式下能調定的圖素是由COLOR命令或SET LINETYPE命令確定的那些圖素,不論這些圖素位於那一層都可以自動搜索進行調整。
6 本程序適合AUTOCAD R12版本。針對該版本中圖形文件中圖素圓的變線寬處理有三種方法:一是在某一點處切斷使其變成閉合弧進行處理;二是先畫一個相同大小的閉合圓弧、再消去 原先的圓;三是用DNOUT形成的圓環代辦替。這裡是用第二種方法實現。如果到AUTOCAD R13版本繪制的圖形,對橢圓的處理也必須采取類似的措施。
源程序 chwd.lsp
(defun c:width()
(setq bb 1)
(setq w 0)
(initget 1"Select Layer Color LType")
(prompt"n調整方式選擇")
(setq t (getkword "[SelectLayer ColorLType"))]
(prompt"n選擇調整范圍")
(setq obj(ssget))
(if(=t "Layer")
(progn
(initget 1"Entity Name")
(prompt"n選擇實體確定圖層或給出圖層名?")
(setq 1b (getkword"[EntityName]:"))
(if (=1b "Entity")
(progn
(prompt"選擇所需變化圖層圖素:")
(setq 1e (ssget)
(setq 1p (ssname le 0))
(setq 11(cdr(car(cdr(cdr(entget 1p))))))
)
)
(if(=1b"Name")
(progn
(setq 111(getstring"給出所需變化的圖層名:"))
(setq 11(strcase 111))
)
)
(setq obj1(ssadd))
(setq j 0)
(while(<j(sslength obj))
(setq pl(ssname obj j))
(setq j (+ j 1))
(setq py (cdr(car(cdr(cdr(entget pl))))))
(if(=ll py)
(ssadd pl obj1)
)
)
)
)
(if (=t "Color")
(progn
(initget 1 "Entity Number")
(prompt"n選擇實體確定顏色或給出顏色號")
(setq lb (getkword"[EntityNumber]:"))
(if (=lb "Entity")
(progn
(prompt"n選擇實體確定所需變化線寬圖素的顏色:")
(setq le (ssget))
(setq lp (ssname le 0))
(setq lc (car (car (cdr(cdr (cdr(entget lp)))))))
(if (=lc 62)
(setg 11(cdr(cdr(cdr(cdr(cdr(cdr(entget lp)))))))
)
(if(=1c 66)
(progn
(prompt"n該實體的顏色是隨圖層確定的(Bylayer)!")
(setq bb 0)
(setq kk(getstring"n終止處理過程?"))
)
)
(if(=lc 6)
(setq ll (cdr(car (cdr(cdr(cdr(cdr(entget lp))))))))
)
)
(if(=lb"Number")
(setq ll(getstring"n給出顏色號:"))
)
)
(setq objl(ssadd))
(setq j 0)
(while(<j(sslength obj))
(setq pl(ssname obj j))
(setq j (+j 1))