調(diào)整線條寬度的實(shí)用工具
在使用AutoCAD繪圖軟件繪制各類圖形的工作中。最后一個(gè)階段是將圖形文件最終在打印機(jī)、繪圖機(jī)上輸出為圖紙。其中圖形線條的粗細(xì)劃分是一項(xiàng)必須認(rèn)真對(duì)待的工作。由于一般圖紙上的圖形不能像在彩色顯示器上可用顏色及深淺區(qū)分圖素、結(jié)構(gòu),而只能以改變線條的粗細(xì)的方法來達(dá)到這個(gè)目的。因此,劃分好圖形中線條的粗細(xì)既有利于區(qū)分圖形要素,又有利于準(zhǔn)確表達(dá)設(shè)計(jì)意圖及方便識(shí)圖。尤其是工程圖紙,應(yīng)按照國家制圖標(biāo)準(zhǔn),將圖中的各圖素劃分出明顯的粗細(xì)來。這樣圖紙方能滿足標(biāo)準(zhǔn)化的要求。
實(shí)際上線條的粗細(xì)從粗到細(xì)有多種變化,在計(jì)算機(jī)圖形文件中則體現(xiàn)在線條的線寬值上。常見的譬如,圖形中各實(shí)體外輪廊線、圖形符號(hào)及表格外框線等均為粗線,剖面線、尺寸(界)線、符號(hào)引線、中心線、點(diǎn)劃線等應(yīng)為細(xì)線,而虛線又介于粗細(xì)線之間。且根據(jù)需要粗、中、細(xì)線還可以在一定的范圍內(nèi)變化線寬。通常設(shè)計(jì)人員或繪圖人員在計(jì)算機(jī)上使用AutoCAD繪圖軟件時(shí),會(huì)經(jīng)常使用到像COPY、OFFSET、MIRROR等組圖命令,為提高繪制的效率,組圖時(shí)并不太考慮線條的粗細(xì)及線型問題,而是將這個(gè)問題放在最后出圖紙考貝時(shí)才一同進(jìn)行調(diào)整解決。由于這時(shí)圖中圖素多,如靠交互操作命令來調(diào)整很繁雜、費(fèi)時(shí),其它的方法又難以圓滿地解決問題。這樣就有必要在AUTOCAD交互操作功能外提供一種方便的工具,使其能夠方便、快捷地完成這項(xiàng)工作,以達(dá)到快速、準(zhǔn)確、高效、全面的目的。保證屏幕上的圖形視圖清晰、層次分明。
通常來說,圖形中線寬的調(diào)整有兩種辦法:一種方法是在繪制時(shí),分層放置線寬不同的線條,或者按粗細(xì)不同設(shè)置成不同的顏色,再配合使用筆式或高檔噴墨繪圖儀的線寬設(shè)置參數(shù)調(diào)整來得到所需要的硬拷貝圖紙。該種方法的缺點(diǎn)是輸出設(shè)備條件要求高,對(duì)出圖設(shè)備的參數(shù)設(shè)定要熟練。然而人們?cè)谄聊簧喜⒉荒芸吹捷敵龊髨D紙的真實(shí)效果。況且設(shè)計(jì)人員在繪制圖形時(shí),所考慮的分層、分色管理并不能只以線條的寬度為依據(jù)。當(dāng)出現(xiàn)同一圖層及顏色的圖素中因?yàn)榫€型、結(jié)構(gòu)等原因還要區(qū)分線寬時(shí),就得逐一分別進(jìn)行調(diào)定。這樣就會(huì)使得調(diào)定輸出圖紙線寬任務(wù)變得十分繁雜。
第二種方法是,在任何圖形輸出設(shè)備(繪圖機(jī)、打印機(jī)、照相、攝影制片設(shè)備)條件下,先在屏幕上將要輸出的圖形顯式地調(diào)整好每一圖素線條的粗細(xì),然后再輸出。這樣屏上所看到的,就是你所得到的一個(gè)真實(shí)反映。且不必要對(duì)輸出設(shè)備的參數(shù)進(jìn)行與線寬變化的相關(guān)調(diào)定,對(duì)輸出設(shè)備無任何特殊要求。這在目前因高檔繪圖儀價(jià)高而大量使用普通打印機(jī)出圖的狀況下具有實(shí)用意義。
本文介紹一個(gè)為此編寫的小段AutoLISP程序,使操作人員能以十分方便、快捷的手段來完成圖形中圖素線條粗細(xì)的調(diào)定工作。
該程序所能處理的線條種類包括直線、多義線、圓(弧)、橢圓(弧)、樣條曲線,線型可以處理實(shí)線、虛線、中心線、點(diǎn)劃線、邊界線等。操作人員可以在交互狀態(tài)下,隨時(shí)調(diào)入該程序運(yùn)行,來完成當(dāng)前圖形中線條粗細(xì)的調(diào)整。
為了方便操作,提高圖素選擇效率,程序設(shè)計(jì)了幾種調(diào)定線寬過程的實(shí)施方式。但任何方式下都必須首先確定所需調(diào)定的范圍(包括:分圖層、分顏色、分線型)。如果某圖層上圖素的線寬不需要調(diào)整或已調(diào)整好,則可以先行關(guān)閉(OFF),以縮小選擇的范圍。
下面是三種方式的具體操作過程:
一、選擇圖素調(diào)整:
1)方式選擇[Select\ayer\Color\LType]回答S(Select)
2)選定調(diào)定線寬的圖素范圍
3)給出新的線寬值
4)自動(dòng)完成按新線寬值調(diào)定所有包括在選擇范圍內(nèi)的圖素線寬
二、分圖層調(diào)整:
1)方式選擇回答L(Layer)
2)選擇調(diào)定圖素的范圍(可以是全部或部分)
3)在[Entity\Name]中可選擇兩種確定層名的方法。回答E則可以從圖中選擇一圖素,以此圖素所在的層的層名為依據(jù);回答N則需鍵入調(diào)定層的層名
4)給出新的線寬值
5)按新的線寬值在所確定的層上自動(dòng)調(diào)定位于選擇范圍內(nèi)的圖素線寬
三、按顏色調(diào)整:
1)方式選擇回答C(Color)
2)選擇調(diào)整作用的范圍
3)在[Entity\Number]中可用兩種方法確定顏色。回答E則可以圖中選一個(gè)顏色與所需調(diào)整顏色一樣的圖素:回答N就要給出所需調(diào)整顏色的號(hào)碼
4)給定新的線寬值
5)程序按新的線寬值,依據(jù)所選定的顏色自動(dòng)地在所確定的作用范圍內(nèi)調(diào)整顏色相符圖素的線寬
四、按線型調(diào)整:
1)方式選擇回答LT(LType)
2)選擇調(diào)整的作用范圍
3)在[Entity\Name]中回答E可以從圖中選擇一線型吻合的圖素;回答N則給出[Continuous\Denter\Center\Phantom\DIvide\Hidden\DOt\DAshdot\Border]中的任一類型英文名的前面大寫字母則可
4)給定新的線寬值
5)程序按新的線寬值、依據(jù)選定的線型自動(dòng)在所確定的作用范圍內(nèi)調(diào)整圖素的線寬
使用的幾點(diǎn)說明:
1 程序?qū)x擇范圍內(nèi)的諸如剖面線、尺寸線、尺寸界線、文字、符號(hào)不起作用。這樣確定選擇調(diào)定范圍時(shí),不必顧及這些圖素的變化。
2 程序不能調(diào)整塊內(nèi)的圖素,如需調(diào)整,先EXPLORING塊中元素。如希望保持原有圖形文件結(jié)構(gòu)的話,調(diào)定線寬后的圖形文件可以不存盤覆蓋原有圖形文件。
3 選擇時(shí)可用窗口選擇方法及逐個(gè)選擇等多種方法,還可以用SHIFT+選擇掉已選中的圖素。
4 所有改變線寬的圖素,除粗細(xì)變化外,其它屬性(如:層、顏色、線型)均不發(fā)生變化。
5 如果原有圖層中圖素的顏色或線型值是按揃YLAYER斈J較氯范*(繪制)的,
那么這些圖素此時(shí)在按顏色(Color)或線型(LType)方式調(diào)整線寬時(shí),不屬于程序作用范圍內(nèi)圖素。也不能在上述兩種方式下取這些因素作為依據(jù),選擇實(shí)體來確定顏色、線型。這在程序運(yùn)行過程中遇到此類情況均有提示。這種情況下,就可以考慮優(yōu)先用選擇(Select)的方式或分層(Layer)的方式來調(diào)整。因?yàn)榘搭伾蚓€型方式下能調(diào)定的圖素是由COLOR命令或SET LINETYPE命令確定的那些圖素,不論這些圖素位于那一層都可以自動(dòng)搜索進(jìn)行調(diào)整。
6 本程序適合AUTOCAD R12版本。針對(duì)該版本中圖形文件中圖素圓的變線寬處理有三種方法:一是在某一點(diǎn)處切斷使其變成閉合弧進(jìn)行處理;二是先畫一個(gè)相同大小的閉合圓弧、再消去原先的圓;三是用DNOUT形成的圓環(huán)代辦替。這里是用第二種方法實(shí)現(xiàn)。如果到AUTOCAD R13版本繪制的圖形,對(duì)橢圓的處理也必須采取類似的措施。
源程序 chwd.lsp
(defun c:width()
(setq bb 1)
(setq w 0)
(initget 1"Select Layer Color LType")
(prompt"\n調(diào)整方式選擇")
(setq t (getkword "[Select\\Layer \\Color\\LType"))]
(prompt"\n選擇調(diào)整范圍")
(setq obj(ssget))
(if(=t "Layer")
(progn
(initget 1"Entity Name")
(prompt"\n選擇實(shí)體確定圖層或給出圖層名?")
(setq 1b (getkword"[Entity\\Name]:"))
(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(
(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選擇實(shí)體確定顏色或給出顏色號(hào)")
(setq lb (getkword"[Entity\\Number]:"))
(if (=lb "Entity")
(progn
(prompt"\n選擇實(shí)體確定所需變化線寬圖素的顏色:")
(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該實(shí)體的顏色是隨圖層確定的(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給出顏色號(hào):"))
)
)
(setq objl(ssadd))
(setq j 0)
(while(
(setq j (+j 1))
(setq pc (cdr(car(cdr (cdr(cdr(entget pl)))))))
(setq lcc(car(car(cdr(cdr(cdr(entget pl)))))))
(if(=lcc 6)
(setq pc (cdr(car(cdr(cdr(cdr(cdr(entget pl))))))))
)
(if(=ll pc)
(ssadd pl obj1)
)
)
)
)
(if(=t"LType")
(progn
(initget 1"Entity Name")
(prompt"\n選擇實(shí)體確定線型或給出線型名")
(setq lb(getkword"[Entity\\Name]:"))
(if(=lb "Entity")
(progn
(prompt"\n選擇線型實(shí)體確定所需變化線寬圖素的線型:")
(setq le (ssget))
(setq lp(ssname le 0))
(setq lc(car(car(cdr(cdr(cdr(entget lp)))))))
(if(=lc 6)
(setq ll (cdr(car(cdr(cdr(cdr(entget lp)))))))
)
(if(/=lc 6)
(progn
(prompt "\n該實(shí)體的顏色是隨圖層確定的(Bylayer)!")
(setq bb 0)
(setq kk (getstring"\n終止處理過程?"))
)
)
)
)
(if(=lb "Name")
(progn
(initget 1"Continuous Dashed Center Phantom DIvide Hidden DOt DAshdot Borde
r")
(prompt"給出需要變化的線型名?")
(setq lll(getkword"\n[Continuous \\Dashed\\Center\\Phantom\\DIvid
e \\Hidden\\DOt\\DAshdot\\Border]"))
(setq ll(strcse lll))
)
)
(setq objl(ssadd))
(setq j 0)
(while(
(setq j(+j 1))
(setq pc(cdr(car(cdr(cdr(cdr(entget pl)))))))
(if(=ll pc)
(ssadd pl objl)
)
)
)
)
(if(=bb 1)
(progn
(setq cpp (ssadd))
(setq w (getreal"\n給定新的線寬值[0.00]:"))
(setq i 0)
(setq ii (sslength obj))
(if(/=t"Select")
(setq ii(sslength objl))
)
(while((setq p (ssname obj i))
(if(/=t"Select")
(setq p(ssname objl i))
)
(setq py (cdr(car(cdr(cdr(entget p))))))
(setq i(+i l))
(setq objent(cdr(car(cdr(entget p)))))
(setq pp(cdddr(entget p)))
(if(=t"color")
(setq pp(cdr(cdddr(entget p))))
)
(if(=t"LType")
(setq pp(cdr(cdddr(entget p))))
)
(if(=objent"LINE")
(command"pedit"p"y""w"w"")
(if(=objent"POLYLINE")
(command"pedit"p"w"w"")
(if(=objent"CIRCLE")
(progn
(setq p0(cdar pp))
(setq r(cdadr pp))
(setq pl(polar p0 0.0 r))
(setq and 359.99)
(command"layer""s"py"")
(if(=t"Color")
(command"color"ll)
)
(command"pline"pl "w"w w "a""ce"p0"a"and "")
(ssadd p cpp)
)
(if(=objent "ARC")
(command"pedit"p"""w"w"")
)
)
)
)
)
(command"erase"cpp"")
(command"redraw")
)
)
)
評(píng)論
查看更多