養(yǎng)成良好的AutoLISP書寫習(xí)慣_第1頁
養(yǎng)成良好的AutoLISP書寫習(xí)慣_第2頁
養(yǎng)成良好的AutoLISP書寫習(xí)慣_第3頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、養(yǎng)成良好的AutoLISP 書寫習(xí)慣眾所周知,Lisp是一種表結(jié)構(gòu)語言,括號(hào)必須成對(duì)出現(xiàn),在調(diào)試時(shí)往往為遺漏了一個(gè)括號(hào)大 費(fèi)周折,所以,養(yǎng)成一個(gè)好的編程習(xí)慣是學(xué)好Lisp所必須的。選擇一個(gè)較好的編輯器,這是一個(gè)基本條件,建議使用Visual Lisp編輯器或Lisplink等專用編輯器,此類編輯器可以對(duì)函數(shù)突出顯示。按Lisp( DCL)專有格式書寫,并經(jīng)常對(duì)程序進(jìn)行格式化”,及時(shí)發(fā)現(xiàn)語法錯(cuò)誤,并有利于調(diào)試是查找錯(cuò)誤。使用自定義函數(shù),并輔助以適當(dāng)?shù)米⑨?,在較大程序中按功能使用自定義函數(shù)可以使 得程序條理化。autolisp 的入門教程+ autolisp 函數(shù)!Lisp是一門歷史悠久的語言,全

2、名叫 LISt Processor,也就是 表處理語言”,它是由John McCarthy于1958年就開始設(shè)計(jì)的一門語言。 和Lisp同時(shí)期甚至更晚出現(xiàn)的許多語言如Algo等如今大多已經(jīng)消亡,又或者僅僅在一些特定的場合有一些微不足道的用途,到現(xiàn)在還廣為人知的恐怕只剩下了Fortran和COBOL。但唯獨(dú)Lisp,不但沒有隨著時(shí)間而衰退,反倒是一次又一次的煥發(fā)出了青春,從Lisp分支出來的Scheme、ML等語言在很多場合的火爆程度甚至超過了許多老牌明星。那么這顆常青樹永葆青春的奧秘究竟在哪里呢?如果你只接觸過 C/C+、Pascal這些過程式語言”的話,Lisp可能會(huì)讓你覺得十分不同尋 常,

3、首先吸引你眼球(或者說讓你覺得混亂的)一定是Lisp程序中異常多的括號(hào),當(dāng)然從現(xiàn)在的角度來講,這種設(shè)計(jì)的確對(duì)程序員不大友好, 不過考慮到五六十年代的計(jì)算機(jī)處理能 力,簡化語言本身的設(shè)計(jì)在那時(shí)算得上是當(dāng)務(wù)之急了。Lisp的基本語法很簡單,它甚至沒有保留字(有些語言學(xué)家可能對(duì)這一點(diǎn)有異議,別怕,我 聽你們的),它只有兩種基本的數(shù)據(jù),僅有一種基本的語法結(jié)構(gòu)就是表達(dá)式,而這些表達(dá)式 同時(shí)也就是程序結(jié)構(gòu),但是正如規(guī)則最簡單的圍棋卻有著最為復(fù)雜的變化一樣,Lisp使用最基本的語言結(jié)構(gòu)定義卻可以完成其它語言難于實(shí)現(xiàn)的、最復(fù)雜的功能。廢話少說,現(xiàn)在我們就來看看Lisp語言中的基本元素。Lisp的表達(dá)式是一個(gè)原

4、子(atom)或表(list),原子(atom)是一個(gè)字母序列,如abc ;表是由零個(gè)或多個(gè)表達(dá)式組成的序列,表達(dá)式之間用空格分隔開,放入一對(duì)括號(hào)中,如:abc()(abc xyz) (a b (c) d)最后一個(gè)表是由四個(gè)元素構(gòu)成的,其中第三個(gè)元素本身也是一個(gè)表。正如算數(shù)表達(dá)式1+1有值2 一樣,Lisp中的表達(dá)式也有值,如果表達(dá)式e得出值v,我們說e返回v。如果一個(gè)表達(dá)式是一個(gè)表,那么我們把表中的第一個(gè)元素叫做操作符,其余的 元素叫做自變量。正如歐幾里德的幾何世界中有五個(gè)公理一樣,我們在這里給出Lisp世界中的7個(gè)公理(基本操作符):(quote x)返回x,我們簡記為'x(ato

5、m x)當(dāng)x是一個(gè)原子或者空表時(shí)返回原子t,否則返回空表()。在Lisp中我們習(xí)慣用原子t表示真,而用空表 ()表示假。> (atom 'a)t> (atom '(a b c)()> (atom '()t現(xiàn)在我們有了第一個(gè)需要求出自變量值的操作符,讓我們來看看quote操作符的作用一一通過引用(quote) 一個(gè)表,我們避免它被求值。一個(gè)未被引用的表達(dá)式作為自變量,atom將其視為代碼,例如:> (atom (atom 'a)t反之一個(gè)被引用的表僅僅被視為表> (atom '(atom 'a)()引用看上去有些奇怪,

6、因?yàn)槟愫茈y在其它語言中找到類似的概念,但正是這一特征構(gòu)成了Lisp最為與眾不同的特點(diǎn)一一代碼和數(shù)據(jù)使用相同的結(jié)構(gòu)來表示,而我們用quote來區(qū)分它們。(eq x y)當(dāng)x和y的值相同或者同為空表時(shí)返回t,否則返回空表()> (eq 'a 'a)t> (eq 'a 'b)()> (eq '()'()t例如:我們有時(shí)想捕捉任意兩點(diǎn)的中點(diǎn),而不只是一條線上的中點(diǎn),用系統(tǒng)自己的捕捉中點(diǎn)(它要有輔助線)就不行了,我們可以參考 捕捉虛中點(diǎn).lsp程序來實(shí)現(xiàn)。除程序中的語句要學(xué)外,動(dòng)畫中的自動(dòng)找到所 有的全局變量并把它們改為局部變量的方法很有

7、用!動(dòng)畫中先畫了一個(gè)六邊形, 再畫一個(gè)圓與它內(nèi)接,圓心就是捕捉虛中點(diǎn)!AutoLisp 概述AutoLisp的數(shù)據(jù)類型,它有10種數(shù)據(jù)類型,常見的有五種:整型 INT實(shí)數(shù)型 REAL 符號(hào)型SYM字符串STR表 LISP在AutoLisp中,最基本的數(shù)據(jù)類型稱為符號(hào)表達(dá)式,也稱為S-表達(dá)式,它是原子和點(diǎn)對(duì)的總稱,點(diǎn)對(duì)通常表示為表。原子是一個(gè)一般符號(hào)系列,有兩種類型的原子,一種稱為數(shù)子原子(簡稱數(shù)”),AutoLisp可處理整數(shù)和實(shí)數(shù),其它不是 數(shù)”原子稱為非數(shù)字原子,它包括符號(hào)原子(或稱為文字原子)和串原子。注意:0.4不能寫成.4。符號(hào)原子的大小寫是等效的。符號(hào)原子可以包含下列字符以外的任何

8、可打印字符。正反括號(hào)用于定義表句號(hào)用于作點(diǎn)對(duì)分號(hào)用于注釋的開始用作QUOTE函數(shù)的簡寫雙引號(hào)用作字符串常數(shù)的定界符符號(hào)原子的長度沒有限制,且所有的字符都是有意義的,但盡量不要超過6個(gè)字符。約束是一對(duì)符號(hào)和值,當(dāng)將一個(gè)值賦給符號(hào)時(shí),就說符號(hào)被約束到那個(gè)值。值(而不是符號(hào))決定所代表信息的類型,故一個(gè)符號(hào)可以接受任何類型的值,其初始值為n il.在AutoLisp中,有兩個(gè)特殊的符號(hào)原子,即T和nil.字符串的個(gè)數(shù)(不包括定界符)稱為字符串的長度。字符串可以是任意長度,它們的存儲(chǔ)空間是動(dòng)態(tài)分配的,但字符串常量的最大長度不超過100,長度為0字符串稱為空串。可以用"nnn"的方式

9、表示字符,其中nnn為八進(jìn)制。e Escn 換行r 回車t 制表符(Tab節(jié))點(diǎn)對(duì)是由一個(gè)左括號(hào),后接一個(gè)S-表達(dá)式和空格再接一個(gè)句點(diǎn)和空格和一個(gè)右括號(hào)。表是指放在一對(duì)相匹配的左右括號(hào)中的元素有序集合。表中的項(xiàng)稱為表的元素, 表中的元素可以是任意類型的S 表達(dá)式,序號(hào) 0到n 1。如果嵌套,0層,1層表的長度,頂層元素的個(gè)數(shù)。只有nil是表()又是原子。表有兩種類型:標(biāo)準(zhǔn)表,引用表。引用表是在表的前面冠以引用符號(hào)(或Quote)對(duì)該表不求值。標(biāo)準(zhǔn)表:第一個(gè)元素的值必須是一個(gè)合法的已經(jīng)存在的AutoLisp函數(shù)定義,后跟調(diào)用該函數(shù)的參數(shù)。AutoLisp采用”前綴表示法 即把運(yùn)算符放在操作數(shù)之前

10、,而不是中間,并把運(yùn)算符(函數(shù)名)和操作數(shù)(調(diào)用函數(shù)的參數(shù))用圓括號(hào)括起來,以表的方式表示。一個(gè)完整的AutoLisp程序往往是由一系列按順序排列的S-表達(dá)式組成的。如:(defu n plus (x y)(+ ( + x y) x)(SetQ a 2.0)(SetQ b 2.0)(plus a b)一個(gè)S-表達(dá)式可以分多行寫,一行也可以寫多個(gè)表達(dá)式。注釋以分號(hào)開始,并在一行的末尾結(jié)束,AutoLisp的求值器忽略注釋。AutoLisp是一種求值型語言, 求值程序第一次碰到一個(gè)求值代碼塊時(shí),整個(gè)塊被轉(zhuǎn)換成壓宿代碼,如果程序中再次碰到那個(gè)塊,只是簡單的運(yùn)行它。求值過程:1,整形,實(shí)數(shù),字符串,文

11、件指針,系統(tǒng)內(nèi)部函數(shù),以及兩個(gè)特殊的符號(hào)原子,對(duì)它 們求值就是它們本身。2,符號(hào)原子是以當(dāng)前的約束值作為它們的求值。3,表是根據(jù)它的第一個(gè)元素的數(shù)據(jù)類型進(jìn)行求值的。(1) 第一個(gè)元素的值為表,該表就假定為用戶定義的函數(shù)。(2) 如果表的第一個(gè)元素的求值結(jié)果為一個(gè)內(nèi)部函數(shù),則剩余元素作為參數(shù)傳給該函 數(shù),并執(zhí)行該函數(shù)的代碼,由函數(shù)的類型確定是否對(duì)傳給它的參數(shù)進(jìn)行求值。輸入距離Lisp語言中輸入距離的函數(shù)為 getdist,但我們有時(shí)需要輸入負(fù)值,有時(shí)需要在輸入距離的 同時(shí)得到角度,使用 getdist函數(shù)就顯得無能為力,這時(shí),我們可以靈活使用其它交互輸入 函數(shù)如getpoint、getcorne

12、r等,通過計(jì)算得到我們所需要的值。例1是一段輸入長度的同時(shí)得到默認(rèn)角度的代碼,使用getpoint函數(shù)。*;例1;長度及角度可用鍵盤或鼠標(biāo)定位 ;計(jì)算長度;計(jì)算默認(rèn)角度<"(an gtos ang 1)">:")(setq pt0 (getpoint "n直線基點(diǎn):")pt1 (getpoint ptO "n直線長度:")dst (dista nee ptO pt1) ang (an gle ptO pt1)angl (geta ngle ptO (streat "n 直線 )*例2是可以按陣列方式輸入

13、行列間距的代碼,輸入距離為正值,修改部分代碼可輸入負(fù)值,使用getcorner函數(shù),同時(shí)使用initget的控制位128。*;例2(defu n le_dist ()(in itget 128)(setq disr (getpo in t "n;允許任意輸入 指定單位單元或輸入行間距:")(if (= (type disr) 'LIST);鼠標(biāo)輸入(progn(in itget 1)(setq dis (geteorner disr "n指定對(duì)角點(diǎn):");鼠標(biāo)輸入對(duì)角disc (abs (- (ear dis) (ear disr)disr (a

14、bs (- (eadr dis) (eadr disr);正值行距;正值列距;計(jì)算行列間距)(if (= (type disr) 'STR)(if (setq dis (distof disr);鍵盤輸入行距;判斷輸入的是否距離(progn(in itget 6)(setq dise (getdist "n輸入列間距:");輸入列距(progn(princ "n需要正數(shù)值或兩個(gè)二維角點(diǎn)。;鍵盤輸入格式不符返回")(le_dist));空輸入返回(progn(princ "n需要正數(shù)值或兩個(gè)二維角點(diǎn)?!保╨c_dist)AutoCAD中

15、特定角度及長度捕捉的實(shí)現(xiàn)方法一、引言在AutoCAD中的角度捕捉只有當(dāng)正交狀態(tài)打開時(shí)的直和水平方向,對(duì)于其他特殊角度 無能為力;另外,其網(wǎng)點(diǎn)捕捉也是相對(duì)于X軸和Y軸,無法實(shí)現(xiàn)其他方向的特殊長度捕捉,給繪圖帶來極大的不方便。在應(yīng)用AutoCAD進(jìn)行設(shè)計(jì)制圖的操作中,LINE和POLYLINE是使用頻率最高的兩個(gè)命令,經(jīng)常要遇到在某些特定角度上繪制特定長度的簡單線或復(fù)合線的情況,因而實(shí)現(xiàn) 這兩個(gè)捕捉對(duì)提高 AutoCAD作圖效率很有實(shí)用價(jià)值。、方法原理所謂角度捕捉,是指當(dāng)十字光標(biāo)在某一角度a的一定范圍內(nèi)選取一點(diǎn)時(shí),該點(diǎn)自動(dòng)落在該a角度線上;當(dāng)我們設(shè)定捕捉角度為a時(shí),將會(huì)以基準(zhǔn)點(diǎn)作為原點(diǎn)、自X軸正方

16、向出發(fā),將整個(gè)屏幕劃分為360/ a個(gè)區(qū)間,則NXa角度就是角度捕捉線, 其中,ow N< 360/ a, 360/ 表示不大于360/舶整數(shù)。所謂長度捕捉,是在角度捕捉的基礎(chǔ)上,在某一角度線上有一系列捕捉點(diǎn),該系列點(diǎn)離基準(zhǔn)點(diǎn)的距離為捕捉長度的正整數(shù)倍,當(dāng)選取直線上的一點(diǎn)時(shí), 落點(diǎn)自動(dòng)落到離其最近的捕捉點(diǎn)上。實(shí)現(xiàn)特定角度和長度捕捉的關(guān)鍵點(diǎn)是:當(dāng)十字光標(biāo)(即十字交*線)移動(dòng)時(shí),程序要隨時(shí)跟蹤其交*點(diǎn)的位置,并將該位置與用戶所設(shè)定的捕捉角度與長度對(duì)應(yīng)起來,從而計(jì)算出在 該角度上的落點(diǎn)。以下舉例說明該兩個(gè)捕捉的實(shí)現(xiàn)過程:假定捕捉角度為 a =30° ,捕捉長度為L。當(dāng)十字光標(biāo)在任意的

17、某一區(qū)間內(nèi)移動(dòng)時(shí),比如在第5區(qū)間(120。150 °內(nèi)移動(dòng)時(shí),此時(shí),落點(diǎn)只能在120°或150°線上(該線在圖中并不直接顯示),該兩根角度線的中心線為 135。當(dāng)十字光標(biāo)的中心點(diǎn)處在120。135。之間時(shí),則落點(diǎn)應(yīng)在120。線上,該落點(diǎn)的具體位置為由十字光標(biāo)的中心點(diǎn)向120°線作垂線來獲得,其交點(diǎn)D(稱為垂點(diǎn))即為落點(diǎn),為直觀起見,此時(shí)由基準(zhǔn)點(diǎn)(此處為O點(diǎn))向落點(diǎn)作一橡筋拖曳線,該橡筋拖曳線隨十字光標(biāo)的移動(dòng)而相應(yīng)移動(dòng),顯示出拖動(dòng)過程(見圖1);同樣,當(dāng)十字光標(biāo)的中心點(diǎn)處在135°150°之間時(shí),則落點(diǎn)應(yīng)在150°線上,并顯示

18、相應(yīng)的橡筋拖曳線。該橡筋拖曳線并不是真正的線段,只是用XOR墨水繪制的一個(gè)向量, 當(dāng)用XOR墨水重新繪制一遍該向量時(shí),該向量將從屏幕上消失,這就是本程序?qū)崿F(xiàn)光標(biāo)拖動(dòng)的原理。落點(diǎn)落在某一捕捉角度線上時(shí), 還得落在捕捉長度 L的整數(shù)倍的點(diǎn)(稱為捕捉點(diǎn))上,還 是針對(duì)圖1,其垂點(diǎn)必然處于某兩個(gè)捕捉點(diǎn) A與B之間,設(shè)A與B的中點(diǎn)為C,當(dāng)D處于A 與C之間時(shí),落點(diǎn)應(yīng)為 A;當(dāng)D處于C與B之間時(shí),落點(diǎn)應(yīng)為 B (見圖1)。其中:OA = n XL ; OB = (n + 1) XLn:非負(fù)整數(shù)。L:捕捉長度。此時(shí),程序通過一定的操作將在屏幕的最上面的坐標(biāo)提示行準(zhǔn)確地顯示落點(diǎn)相對(duì)基準(zhǔn)點(diǎn)的偏移長度和偏移角度。

19、用戶可以滑動(dòng)鼠標(biāo)準(zhǔn)確捕捉到目標(biāo)點(diǎn)。至此,已實(shí)現(xiàn)某些特定角度及長度的捕捉。為了滿足在程序執(zhí)行過程中能隨時(shí)更改捕捉角度和捕捉長度的需要,本程序還增加了相應(yīng)的模塊; 另外,本程序中嵌入了窗口放縮功能模塊, 通過點(diǎn)取下拉菜單中窗口及漫游子菜單,方便了各種作圖的需要。三、源程序清單;OS.LSP源程序;err(),出錯(cuò)處理子程序(defu n err ( msg)(if (/= msg "Fun ctio n can celled")(prin c(strcat "nError:" msg);打印錯(cuò)誤內(nèi)容);for if(setq *error* olderr)(

20、setvar "cmdecho" scmd)(setvar "osmode" cosmode)(setvar "coords" ccoords)(princ "nnt -多謝使用角度捕捉2.0版,程序非正常結(jié)束-!n")(pri nc);for defu n err;ant(),設(shè)定捕捉角度子程序(defu n an t ( / angO angl )(setq an gO (* anO (/ 180 pi)(princ (strcat "n請輸入捕捉角度:<"(rtos ang0) &q

21、uot;>_")(INITGET 4)(setq ang1 (getreal)(if (n ot (null an g1)(setq an0 (* ang1 (/ pi 180)(princ "n F2/F3/F4/F5/ESC/Return / 下一點(diǎn):");for defu n ant;leng(),設(shè)定捕捉長度距離子程序(defu n leng ( / le ng0 Ieng1 )(setq Ieng0 Ien0)(princ (strcat "n請輸入捕捉長度距離:<"(rtos Ieng0) ">_&quo

22、t;)(INITGET 4)(setq Ieng1 (getreal)(if (n ot (null le ng1)(setq Ien0 Ieng1 )(princ "n F2/F3/F4/F5/ESC/Return / 下一點(diǎn):");for defu n lent;field(),判斷十字光標(biāo)所在區(qū)間,并投影到相應(yīng)的捕捉角度線上(defu n field ( ps pe angO / ang1 n )(setq ang1 (an gle ps pe)(setq n (fix (+ ( / ang1 ang0) 0.5)(setq an g2 (* ang0 n);for

23、defu n;en dp(),十字光標(biāo)投影到相應(yīng)的捕捉角度上后,以用戶設(shè)定的長度;捕捉計(jì)算落點(diǎn)(defu n endp ( ps pe ang0 / p1 p2 p3 p4 dis )(setq pl psp2 (polar ps angO 1)p3 pep4 (polar pe 什 an gO (/ pi 2) 1)(setq pend (in ters pl p2 p3 p4 n il)(setq dis (dista nee ps pe)(if ( / = lenO 0)(setq dist (* (fix 什(/ dis Ien0) 0.5) Ien0);else(setq dist

24、dis);for if(setq pend (polar ps angO dist);for defu n endp;drag(),對(duì)上一次顯示的拖曳線進(jìn)行”或"操作,使其從屏幕上消失;并繪制下一次拖曳線(defu n drag ( poldl pold2 pold3 / )(if ( / = b2 4)(progn(grdraw pold1 pold2 -1 0)(grdraw pold2 pold3 -1 0);for if(grdraw pstart pend -1 0)(grdraw pend pframe -1 0);for defu n drag;coord(),在屏幕的

25、最上一行的坐標(biāo)欄顯示長度和角度(defu n coord ( / str Ieng1 Ieng0 an g0)(setq an g0 (* an g2 (/ 180 pi)(setq str (strcat (rtos dist) ">" (rtos an g0)(grtext -2 str);for defu n coord;ini t(),對(duì)程序進(jìn)行初始化(defu n in it ( / )(setq scmd (getvar "cmdecho");保留原命令回顯方式(setq ccoords (getvar "coords&quo

26、t;);保留原坐標(biāo)顯示方式(setq cosmode (getvar "osmode")(setq olderr *error* *error* err); 出錯(cuò)處理(setvar "cmdecho" 0); 不回顯(setvar "coords" 0); 不顯示坐標(biāo)(setvar "osmode" 0 ); 取消捕捉(setq b 0 b1 0 c '(0 0)(setq pstart (getpoi nt "n請輸入直線第一點(diǎn):")(if (or (null anO ) (<

27、anO 0) (not (numberp an0)(progn(setq an 0(/ pi 6)(ant);for if(if (or (null len0 ) (< len0 0) (not (numberp Ien0)(progn(setq Ien0 1)(le ng);for if下一點(diǎn)::")(if (null len0) (leng)(princ "n F2/F3/F4/F5/ESC/Return /(setq a (grread 2 n il)(setq pframe (cadr a)(field pstart pframe anO)(endp psta

28、rt pframe an g2)(grdraw pstart pend -1 0)(grdraw pend pframe -1 0)(setq plast pframe polde pend)(setq b (car a);for defu n in it;home(),設(shè)置退出程序的控制變量(defu n home ( / )(setq b 3)(setq b1 1);for defu n home;pull(),接受用戶輸入控制子程序(defun pull ( / )(setq b1 0)(while (/= b 3)(progn(setq a (grread 2 n il)(coord)

29、(if (and (= b 2) (= b2 4) (setq b 4)(setq b2 b)(setq b (car a)(cond(or (= b 5) (= b 12); 只移動(dòng)十字光標(biāo)時(shí)(progn(setq pframe (cadr a)(field pstart pframe anO)(endp pstart pframe an g2)(if (>= (dista nee plast pframe) 0.1)(progn(drag pstart polde plast)(setq plast pframe polde pend);for prog n);for if);for

30、 prog n);for condl(=b 3);用鼠標(biāo)在屏幕上點(diǎn)取一點(diǎn)時(shí)(progn(setq pframe (cadr a)(field pstart pframe anO)(endp pstart pframe ang2)(if (>= (dista nee plast pframe) 0.1) (progn(grdraw pstart polde -1 0)(setq plast pframe polde pend);for prog n);for if);for prog n);for cond1(=b 2);鍵盤輸入(progn(setq c1 (cadr a)(cond (

31、= c1 138) (an t) ;F2(=c1 139) (leng) ;F3(=c1 140) ;F4(progn(setq b2 4)(comma nd"zoom" "0.7x");for (= c1 140)(=c1 141) ;F5(progn(setq b2 4)(comma nd"zoom" "1.4x");for (= cl 141)(=cl 13) (home)(=cl 27) (home)(T (princ "n 未定義的鍵");for cond下一點(diǎn):")(pri

32、nc "n F2/F3/F4/F5/ESC/Return /);for prog n);for (c ond (= b 2)(=b 4);點(diǎn)取下拉菜單時(shí)(progn(setq c1 (cadr a)(princ "n")(cond (= c1 6005)(progn(comma nd"zoom" "w")(princ "n 第一角點(diǎn):")(comma nd pause)(princ "n 第二角點(diǎn):")(comma nd pause);for (= cl 6005)(=cl 6007)

33、(comma nd"zoom" "p")(=cl 6008)(comma nd"zoom" "a")(=cl 6011)(progn(comma nd"pa n")(princ "n 第一參考點(diǎn):")(comma nd pause)(princ "n 第二參考點(diǎn):")comma nd pause);for (= c1 6011);else(T (princ "n 未定義的菜單");for cond下一點(diǎn):")(princ &q

34、uot;n F2/F3/F4/F5/ESC/Return /);FOR PROGN);for (cond (= b 4)(T (home) ) ;for else);for cond);for prog n);for while);for defu n pull;draw(),繪制直線子程序(defu n draw ( / )(while (/= bl 1)(progn(if (= b 3)(progn(comma nd"li ne" pstart pend "")下一點(diǎn):")(princ "n F2/F3/F4/F5/ESC/Ret

35、urn /(setq b 0 b1 1)(setq pstart pend);for prog n);for if(pull);for prog n);for while(grdraw pstart pend -1 0)(grdraw pend pframe -1 0);for defu n draw;主程序(defu n c: os ( / b bl b2 c pstart pend pframe plast ang2dist scmd ccoords olderr cosmode );anO lenO are defined out program(in it)(draw)(pri nc

36、"n")(comma nd"redraw")(setq *error* olderr)(setvar "cmdecho" scmd)(setvar "osmode" cosmode)(setvar "coords" ccoords)(princ "nnt 角度捕捉 2.0 版n")(princ "nnt*寧波大學(xué)建筑設(shè)計(jì)研究院-程建華,1996*n")(pri nc);for defu n os四、程序的安裝與使用1. 程序的安裝以下三種裝載方式,用戶任選

37、一種即可:在AutoCAD環(huán)境下,將 OS.LSP拷至當(dāng)前目錄,再執(zhí)行(LOAD"OS")即可裝載 OS.LSP。也可先將 OS.LSP拷至子目錄下,再在ACADSUPPORTACADR12.LSP或ACADR13丄SP中加入下面一句語句實(shí)現(xiàn)啟動(dòng) AutoCAD時(shí)自動(dòng)裝載:(AUTOLOAD "OS" '("OS")ACAD.MNU中的合適位置加上下面的一句語句,即可直接在菜單中點(diǎn)取角度捕捉操作:角度捕捉 FcAc(load"c:/acad/support/os.lsp") os2. 程序的使用在一幅圖中第

38、一次使用該程序時(shí), 需要用戶輸入捕捉角度和捕捉長度, 第二次調(diào)用本程序時(shí), 程序可自動(dòng)采用上一次最后設(shè)定的捕捉角度和長度作為默認(rèn)值。然后,程序需要用戶選擇輸入一點(diǎn)作為基準(zhǔn)點(diǎn),此時(shí)命令行提示:F2/F3/F4/F5/ESC/Return / 下一點(diǎn):用戶根據(jù)該提示可任選其中的一種操作,具體解釋如下: 按F2鍵重新設(shè)定捕捉角度; 按F3鍵重新設(shè)定捕捉長度; 按F4鍵窗口縮小0.7倍; 按F5鍵窗口放大1.4倍; 按ESC鍵、回車鍵、鼠標(biāo)右鍵均可結(jié)束操作,退出程序; 選取下一點(diǎn),移動(dòng)十字光標(biāo)鍵,此時(shí)在屏幕的最上面的一行的坐標(biāo)提示欄準(zhǔn)確地顯示出按用戶設(shè)定的捕捉角度和長度所取得的落點(diǎn)相對(duì)于基準(zhǔn)點(diǎn)的偏移角度和長度,滑動(dòng)十字光標(biāo)鍵直至用戶尋找到所需要的下一點(diǎn)并按下鼠標(biāo)左鍵,命令行重又出現(xiàn)上面的提示行, 并進(jìn)行下一輪循環(huán); 另外,用戶還可以點(diǎn)取 View菜單下的Zoom菜單中的Zoom Window 、Zoom Previous、Zoom All等三個(gè)子項(xiàng)實(shí)現(xiàn)窗口放縮和Pan菜單實(shí)現(xiàn)屏幕漫游;對(duì)于其他操作,用戶均可按屏幕命令行的中文提示方便地進(jìn)行操作。在非漢化AutoCAD中運(yùn)行本程序時(shí),只需將程序中有關(guān)的中文提示行改成英文提示即可。另外,由于不同的機(jī)型在 AutoCAD環(huán)境下鍵盤返回碼可能稍有區(qū)別,所以要求用戶在應(yīng)用本程序之前對(duì)自己的機(jī)器鍵盤返回碼按如下方法作 一次核實(shí):在A

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論