版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、養(yǎng)成良好的AutoLISP 書(shū)寫(xiě)習(xí)慣眾所周知,Lisp是一種表結(jié)構(gòu)語(yǔ)言,括號(hào)必須成對(duì)出現(xiàn),在調(diào)試時(shí)往往為遺漏了一個(gè)括號(hào)大 費(fèi)周折,所以,養(yǎng)成一個(gè)好的編程習(xí)慣是學(xué)好Lisp所必須的。選擇一個(gè)較好的編輯器,這是一個(gè)基本條件,建議使用Visual Lisp編輯器或Lis plink等專(zhuān)用編輯器,此類(lèi)編輯器可以對(duì)函數(shù)突出顯示。按Lisp( DCL)專(zhuān)有格式書(shū)寫(xiě),并經(jīng)常對(duì)程序進(jìn)行格式化”,及時(shí)發(fā)現(xiàn)語(yǔ)法錯(cuò)誤,并有利于調(diào)試是查找錯(cuò)誤。使用自定義函數(shù),并輔助以適當(dāng)?shù)米⑨專(zhuān)谳^大程序中按功能使用自定義函數(shù)可以使 得程序條理化。autolisP 的入門(mén)教程+ autolisp 函數(shù)!Lisp是一門(mén)歷史悠久的語(yǔ)言,
2、全名叫 LISt Processor,也就是 表處理語(yǔ)言”,它是由John McCarthy于1958年就開(kāi)始設(shè)計(jì)的一門(mén)語(yǔ)言。 和Lisp同時(shí)期甚至更晚出現(xiàn)的許多語(yǔ)言如Algo等如今大多已經(jīng)消亡,又或者僅僅在一些特定的場(chǎng)合有一些微不足道的用途,到現(xiàn)在還廣為人知的恐怕只剩下了Fortran和COBOL。但唯獨(dú)Lisp,不但沒(méi)有隨著時(shí)間而衰退,反倒是一次又一次的煥發(fā)出了青春,從Lisp分支出來(lái)的Scheme、ML等語(yǔ)言在很多場(chǎng)合的火爆程度甚至超過(guò)了許多老牌明星。那么這顆常青樹(shù)永葆青春的奧秘究竟在哪里呢?如果你只接觸過(guò) C/C+、Pascal這些過(guò)程式語(yǔ)言”的話,Lisp可能會(huì)讓你覺(jué)得十分不同尋 常
3、,首先吸引你眼球(或者說(shuō)讓你覺(jué)得混亂的)一定是Lisp程序中異常多的括號(hào),當(dāng)然從現(xiàn)在的角度來(lái)講,這種設(shè)計(jì)的確對(duì)程序員不大友好, 不過(guò)考慮到五六十年代的計(jì)算機(jī)處理能 力,簡(jiǎn)化語(yǔ)言本身的設(shè)計(jì)在那時(shí)算得上是當(dāng)務(wù)之急了。Lisp的基本語(yǔ)法很簡(jiǎn)單,它甚至沒(méi)有保留字(有些語(yǔ)言學(xué)家可能對(duì)這一點(diǎn)有異議,別怕,我 聽(tīng)你們的),它只有兩種基本的數(shù)據(jù),僅有一種基本的語(yǔ)法結(jié)構(gòu)就是表達(dá)式,而這些表達(dá)式 同時(shí)也就是程序結(jié)構(gòu),但是正如規(guī)則最簡(jiǎn)單的圍棋卻有著最為復(fù)雜的變化一樣,Lisp使用最基本的語(yǔ)言結(jié)構(gòu)定義卻可以完成其它語(yǔ)言難于實(shí)現(xiàn)的、最復(fù)雜的功能。廢話少說(shuō),現(xiàn)在我們就來(lái)看看Lisp語(yǔ)言中的基本元素。Lisp的表達(dá)式是一個(gè)
4、原子(atom)或表(list),原子(atom)是一個(gè)字母序列,如abc ;表是由零個(gè)或多個(gè)表達(dá)式組成的序列,表達(dá)式之間用空格分隔開(kāi),放入一對(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,我們說(shuō)e返回V。如果一個(gè)表達(dá)式是一個(gè)表,那么我們把表中的第一個(gè)元素叫做操作符,其余的 元素叫做自變量。Lisp世界中的7個(gè)公理(基正如歐幾里德的幾何世界中有五個(gè)公理一樣,我們?cè)谶@里給出 本操作符):(quote X)返回X,我們簡(jiǎn)記為x(atom X
5、)當(dāng)X是一個(gè)原子或者空表時(shí)返回原子t,否則返回空表()。在Lisp中我們習(xí)慣用原子t表示真,而用空表 ()表示假。 (atom a)t (atom (a b c)() (atom ()t現(xiàn)在我們有了第一個(gè)需要求出自變量值的操作符,讓我們來(lái)看看quote操作符的作用一一通過(guò)引用(quote) 一個(gè)表,我們避免它被求值。一個(gè)未被引用的表達(dá)式作為自變量,atom將其視為代碼,例如: (atom (atom a)t反之一個(gè)被引用的表僅僅被視為表 (atom (atom a)()引用看上去有些奇怪,因?yàn)槟愫茈y在其它語(yǔ)言中找到類(lèi)似的概念,但正是這一特征構(gòu)成了Lisp最為與眾不同的特點(diǎn)一一代碼和數(shù)據(jù)使用相同
6、的結(jié)構(gòu)來(lái)表示,而我們用quote來(lái)區(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)sP程序來(lái)實(shí)現(xiàn)。除程序中的語(yǔ)句要學(xué)外,動(dòng)畫(huà)中的自動(dòng)找到所 有的全局變量并把它們改為局部變量的方法很有用!動(dòng)畫(huà)中先畫(huà)了一個(gè)六邊形,再畫(huà)一個(gè)圓與它內(nèi)接, 圓心就是捕捉虛中點(diǎn)!AutoLis P 概述AutoLisp的數(shù)據(jù)類(lèi)型,它有10種數(shù)據(jù)類(lèi)型,常見(jiàn)的有五種:整型 INT實(shí)數(shù)型 REAL 符號(hào)型S
7、YM字符串STR表 LIS PS-表達(dá)式,它是原子和點(diǎn)在AutoLisp中,最基本的數(shù)據(jù)類(lèi)型稱(chēng)為符號(hào)表達(dá)式,也稱(chēng)為對(duì)的總稱(chēng),點(diǎn)對(duì)通常表示為表。原子是一個(gè)一般符號(hào)系列,有兩種類(lèi)型的原子,一種稱(chēng)為數(shù)子原子(簡(jiǎn)稱(chēng)數(shù)”),AutoLIsp可處理整數(shù)和實(shí)數(shù),其它不是 數(shù)”原子稱(chēng)為非數(shù)字原子,它包括符號(hào)原子(或稱(chēng)為文字原子) 和串原子。注意:0.4不能寫(xiě)成.4。符號(hào)原子的大小寫(xiě)是等效的。符號(hào)原子可以包含下列字符以外的任何可打印字符。用于定義表用于作點(diǎn)對(duì)用于注釋的開(kāi)始用作QUOTE函數(shù)的簡(jiǎn)寫(xiě)用作字符串常數(shù)的定界符正反括號(hào)句號(hào)分號(hào) 雙引號(hào)6個(gè)字符。(而不是nil.符號(hào)原子的長(zhǎng)度沒(méi)有限制,且所有的字符都是有意義
8、的,但盡量不要超過(guò)約束是一對(duì)符號(hào)和值,當(dāng)將一個(gè)值賦給符號(hào)時(shí),就說(shuō)符號(hào)被約束到那個(gè)值。值 符號(hào))決定所代表信息的類(lèi)型,故一個(gè)符號(hào)可以接受任何類(lèi)型的值,其初始值為在AutoLisP中,有兩個(gè)特殊的符號(hào)原子,即T和nil.字符串的個(gè)數(shù)(不包括定界符)稱(chēng)為字符串的長(zhǎng)度。字符串可以是任意長(zhǎng)度,它們的存儲(chǔ)空間是動(dòng)態(tài)分配的,但字符串常量的最大長(zhǎng)度不超過(guò)100,長(zhǎng)度為0字符串稱(chēng)為空串??梢杂胣nn”的方式表示字符,其中nnn為八進(jìn)制。e Escn 換行r 回車(chē)t 制表符(Tab節(jié))點(diǎn)對(duì)是由一個(gè)左括號(hào),后接一個(gè)S-表達(dá)式和空格再接一個(gè)句點(diǎn)和空格和一個(gè)右括號(hào)。表是指放在一對(duì)相匹配的左右括號(hào)中的元素有序集合。表中的
9、項(xiàng)稱(chēng)為表的元素, 表中的元素可以是任意類(lèi)型的 S-表達(dá)式,序號(hào) 0到n 1。如果嵌套,0層,1層表的長(zhǎng)度,頂層元素的個(gè)數(shù)。只有nil是表()又是原子。表有兩種類(lèi)型:標(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ù)之前,而不是中間,并把運(yùn)算符(函數(shù)名)和操作數(shù)(調(diào)用函數(shù)的參數(shù))用圓括號(hào)括起來(lái),以表的方式表示。一個(gè)完整的AutoLisp程序往往是由一系列按順序排列的S-表達(dá)式組成的。如:(defu n p lus (x y)
10、(+ ( + x y) X)(SetQ a 2.0)(SetQ b 2.0)(p lus a b)一個(gè)S-表達(dá)式可以分多行寫(xiě),一行也可以寫(xiě)多個(gè)表達(dá)式。注釋以分號(hào)開(kāi)始,并在一行的末尾結(jié)束,AutoLisp的求值器忽略注釋。AutoLisp是一種求值型語(yǔ)言,求值程序第一次碰到一個(gè)求值代碼塊時(shí),整個(gè)塊被轉(zhuǎn)換成壓宿代碼,如果程序中再次碰到那個(gè)塊,只是簡(jiǎn)單的運(yùn)行它。求值過(guò)程:1,整形,實(shí)數(shù),字符串,文件指針,系統(tǒng)內(nèi)部函數(shù),以及兩個(gè)特殊的符號(hào)原子,對(duì)它 們求值就是它們本身。2,符號(hào)原子是以當(dāng)前的約束值作為它們的求值。3,表是根據(jù)它的第一個(gè)元素的數(shù)據(jù)類(lèi)型進(jìn)行求值的。(1) 第一個(gè)元素的值為表,該表就假定為用
11、戶(hù)定義的函數(shù)。(2) 如果表的第一個(gè)元素的求值結(jié)果為一個(gè)內(nèi)部函數(shù),則剩余元素作為參數(shù)傳給該函 數(shù),并執(zhí)行該函數(shù)的代碼,由函數(shù)的類(lèi)型確定是否對(duì)傳給它的參數(shù)進(jìn)行求值。輸入距離Lisp語(yǔ)言中輸入距離的函數(shù)為 getdist,但我們有時(shí)需要輸入負(fù)值,有時(shí)需要在輸入距離的 同時(shí)得到角度,使用 getdist函數(shù)就顯得無(wú)能為力,這時(shí),我們可以靈活使用其它交互輸入 函數(shù)如get point、getcorner等,通過(guò)計(jì)算得到我們所需要的值。例1是一段輸入長(zhǎng)度的同時(shí)得到默認(rèn)角度的代碼,使用getpoint函數(shù)。;例1(setqpt1dst*ptO (getpoint n直線基點(diǎn):);長(zhǎng)度及角度可用鍵盤(pán)或鼠標(biāo)定
12、位;計(jì)算長(zhǎng)度;計(jì)算默認(rèn)角度直線方向 :)(getpoint pt0 n直線長(zhǎng)度:)(dista nee pt0 p t1)ang (an gle ptO p t1) ang1 (geta ngle ptO (strcat n)*例2是可以按陣列方式輸入行列間距的代碼,輸入距離為正值,修改部分代碼可輸入負(fù)值,使用getcorner函數(shù),同時(shí)使用initget的控制位128。*;例2(defu n lc_dist ()(in itget 128)(setq disr (get poin t n(if (= (type disr) LIST)(progn(in itget 1)(setq dis (
13、getcorner disr n指定對(duì)角點(diǎn):)disc (abs (- (car dis) (car disr) disr (abs (- (cadr dis) (cadr disr)(if (= (type disr) STR)(if (setq dis (distof disr)(p rogn(in itget 6)(setq disc (getdist n輸入列間距:)(p rogn(princ n需要正數(shù)值或兩個(gè)二維角點(diǎn)。(lc_dist);允許任意輸入 指定單位單元或輸入行間距:);鼠標(biāo)輸入;鼠標(biāo)輸入對(duì)角;正值行距;正值列距;計(jì)算行列間距;鍵盤(pán)輸入行距;判斷輸入的是否距離;輸入列距;
14、鍵盤(pán)輸入格式不符返回)”);空輸入返回)(P rogn(princ n需要正數(shù)值或兩個(gè)二維角點(diǎn)。(lc_dist))中特定角度及長(zhǎng)度捕捉的實(shí)現(xiàn)方法AutoCAD一、引言在AutoCAD中的角度捕捉只有當(dāng)正交狀態(tài)打開(kāi)時(shí)的直和水平方向,對(duì)于其他特殊角度 無(wú)能為力;另外,其網(wǎng)點(diǎn)捕捉也是相對(duì)于X軸和丫軸,無(wú)法實(shí)現(xiàn)其他方向的特殊長(zhǎng)度捕捉,給繪圖帶來(lái)極大的不方便。在應(yīng)用AutoCAD進(jìn)行設(shè)計(jì)制圖的操作中,LINE和POLYLINE是使用頻率最高的兩個(gè)命令,經(jīng)常要遇到在某些特定角度上繪制特定長(zhǎng)度的簡(jiǎn)單線或復(fù)合線的情況,因而實(shí)現(xiàn) 這兩個(gè)捕捉對(duì)提高 AutoCAD作圖效率很有實(shí)用價(jià)值。a的一定范圍內(nèi)選取一點(diǎn)時(shí),
15、該點(diǎn)自動(dòng)落X軸正方向出0 N 360/ a,二、方法原理所謂角度捕捉,是指當(dāng)十字光標(biāo)在某一角度在該a角度線上;當(dāng)我們?cè)O(shè)定捕捉角度為a時(shí),將會(huì)以基準(zhǔn)點(diǎn)作為原點(diǎn)、自發(fā),將整個(gè)屏幕劃分為360/ a區(qū)間,則NXx角度就是角度捕捉線,其中,360/ 表示不大于360/舶整數(shù)。該系列點(diǎn)離所謂長(zhǎng)度捕捉,是在角度捕捉的基礎(chǔ)上, 在某一角度線上有一系列捕捉點(diǎn),基準(zhǔn)點(diǎn)的距離為捕捉長(zhǎng)度的正整數(shù)倍,當(dāng)選取直線上的一點(diǎn)時(shí), 落點(diǎn)自動(dòng)落到離其最近的捕捉點(diǎn)上。實(shí)現(xiàn)特定角度和長(zhǎng)度捕捉的關(guān)鍵點(diǎn)是:當(dāng)十字光標(biāo)(即十字交*線)移動(dòng)時(shí),程序要隨時(shí)跟蹤其交*點(diǎn)的位置,并將該位置與用戶(hù)所設(shè)定的捕捉角度與長(zhǎng)度對(duì)應(yīng)起來(lái),從而計(jì)算出在 該角
16、度上的落點(diǎn)。以下舉例說(shuō)明該兩個(gè)捕捉的實(shí)現(xiàn)過(guò)程:假定捕捉角度為 a =30。,捕捉長(zhǎng)度為L(zhǎng)。當(dāng)十字光標(biāo)在任意的某一區(qū)間內(nèi)移動(dòng)時(shí),比如在第5區(qū)間(120。150 內(nèi)移動(dòng)時(shí),此120。135。之間時(shí),則落點(diǎn)應(yīng)在120。線上,該落點(diǎn)的具120。線作垂線來(lái)獲得,其交點(diǎn)D(稱(chēng)為垂點(diǎn))即為落點(diǎn),為直 O點(diǎn))向落點(diǎn)作一橡筋拖曳線, 該橡筋拖曳線隨十字光標(biāo)的移(見(jiàn)圖1);同樣,當(dāng)十字光標(biāo)的中心點(diǎn)處在135150之間該橡筋拖曳線并不是真正的線段,只時(shí),落點(diǎn)只能在120或150線上(該線在圖中并不直接顯示),該兩根角度線的中心線為 135 。當(dāng)十字光標(biāo)的中心點(diǎn)處在 體位置為由十字光標(biāo)的中心點(diǎn)向 觀起見(jiàn),此時(shí)由基準(zhǔn)點(diǎn)
17、(此處為 動(dòng)而相應(yīng)移動(dòng),顯示出拖動(dòng)過(guò)程 時(shí),則落點(diǎn)應(yīng)在150線上,并顯示相應(yīng)的橡筋拖曳線。是用XOR墨水繪制的一個(gè)向量, 當(dāng)用XOR墨水重新繪制一遍該向量時(shí),該向量將從屏幕上消失,這就是本程序?qū)崿F(xiàn)光標(biāo)拖動(dòng)的原理。落點(diǎn)落在某一捕捉角度線上時(shí), 還得落在捕捉長(zhǎng)度 L的整數(shù)倍的點(diǎn)(稱(chēng)為捕捉點(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 (見(jiàn)圖1)。其中:OA = n XL ; OB = (n + 1) XLn:非負(fù)整數(shù)。L:捕捉長(zhǎng)度。此時(shí),程序通過(guò)一定的操作將在屏幕的最上面的坐標(biāo)提示行準(zhǔn)確地
18、顯示落 點(diǎn)相對(duì)基準(zhǔn)點(diǎn)的偏移長(zhǎng)度和偏移角度。用戶(hù)可以滑動(dòng)鼠標(biāo)準(zhǔn)確捕捉到目標(biāo)點(diǎn)。至此,已實(shí)現(xiàn)某些特定角度及長(zhǎng)度的捕捉。 為了滿(mǎn)足在程序執(zhí)行過(guò)程中能隨時(shí)更改捕捉角度 和捕捉長(zhǎng)度的需要,本程序還增加了相應(yīng)的模塊; 另外,本程序中嵌入了窗口放縮功能模塊, 通過(guò)點(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)(
19、setvar cmdecho scmd)(setvar osmode cosmode)(setvar coords ccoords)(princ);for defu n err;ant(),設(shè)定捕捉角度子程序(defu n an t ( / angO ang1 )(setq an gO (* anO (/ 180 pi)(princ (strcat n請(qǐng)輸入捕捉角度:_)(INITGET 4)(setq ang1 (getreal)(if (n ot (null an g1)(setq an0 (* an g1 (/ pi 180)(princ n F2/F3/F4/F5/ESC/Return
20、 / 下一點(diǎn):);for defu n ant;leng(),設(shè)定捕捉長(zhǎng)度距離子程序(defu n leng ( / le ng0 Ieng1 )(setq Ieng0 Ien0)(princ (strcat n請(qǐng)輸入捕捉長(zhǎng)度距離:_)(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
21、 angO / ang1 n )(setq ang1 (an gle ps pe)(setq n (fix 什(/ a ng1 angO) 0.5)(setq an g2 (* angO n);for defu n;endp(),十字光標(biāo)投影到相應(yīng)的捕捉角度上后,以用戶(hù)設(shè)定的長(zhǎng)度;捕捉計(jì)算落點(diǎn)(defu n endp ( ps pe ang0 / p1 p2 p3 p4 dis )(setq p1 psp2 (po lar ps ang0 1)p3 pep4 (p Olar pe 什 an g0 (/ pi 2) 1)(setq pend (in ters p1 p2 p3 p4 n il)(
22、setq dis (dista nee ps pe)(if ( / = Ien0 0)(setq dist (* (fix 什(/ dis Ien0) 0.5) len 0);else(setq dist dis);for if(setq pend (po lar ps angO dist);for defu n endp;drag(),對(duì)上一次顯示的拖曳線進(jìn)行”或操作,使其從屏幕上消失,;并繪制下一次拖曳線(defu n drag ( poldl p old2 p old3 / )(if ( / = b2 4)(p rogn(grdraw p old1 p old2 -1 0)(grdraw
23、 p old2 p old3 -1 0);for if(grdraw p start pend -1 0)(grdraw pend p frame -1 0);for defu n drag;coord(),在屏幕的最上一行的坐標(biāo)欄顯示長(zhǎng)度和角度(defu n coord ( / str Ieng1 Ieng0 ang0)(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 (
24、/ )(setq scmd (getvar cmdecho);保留原命令回顯方式(setq ccoords (getvar coords);保留原坐標(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 (get poi nt n請(qǐng)輸入直線第一點(diǎn):)(if (or (n ull anO ) ( anO
25、 0) (n ot (nu mberp anO)(p rogn(setq an 0(/ pi 6)(ant);for if(if (or (n ull le n0 ) (= (dista nee p last p frame) 0.1) (p rogn(drag p start po Ide p last)(setq p last p frame po Ide pend);for p rogn);for if);for p rogn);for condl(=b 3);用鼠標(biāo)在屏幕上點(diǎn)取一點(diǎn)時(shí)(p rogn(setq p frame (cadr a)(field p start p frame
26、anO)(endp p start p frame ang2)(if (= (dista nee p last p frame) 0.1)(p rogn(grdraw p start po Ide -1 0)(setq p last p frame po Ide pend);for p rogn);for if);for p rogn);for cond1(=b 2);鍵盤(pán)輸入(p rogn(setq c1 (cadr a)(cond (= c1 138) (an t) ;F2(=c1 139) (le ng) ;F3(=c1 140) ;F4(p rogn(setq b2 4)(comma
27、ncTzoom 0.7x);for (= c1 140)(=c1 141) ;F5(p rogn(setq b2 4)(comma ncTzoom 1.4x);for (= c1 141)(=c1 13) (home)(=c1 27) (home)(T (princ n未定義的鍵);for cond(princ n F2/F3/F4/F5/ESC/Return / 下一點(diǎn):);for p rogn);for (co nd (= b 2)(=b 4);點(diǎn)取下拉菜單時(shí)(p rogn(setq c1 (cadr a)(princ n)(cond (= c1 6005)(p rogn(comma nd
28、zoom w)(princ n 第一角點(diǎn):)(comma nd p ause)(princ n 第二角點(diǎn):)(comma nd p ause);for (= c1 6005)(=c1 6007)(comma ncTzoom p)(=c1 6008)(comma ndzoom a)(=c1 6011)(p rogn(comma ndpan)(princ n 第一參考點(diǎn):)(comma nd p ause)(princ n 第二參考點(diǎn):)comma nd p ause);for (= c1 6011);else(T (princ n未定義的菜單);for cond(princ n F2/F3/F4
29、/F5/ESC/Return / 下一點(diǎn):);FOR P ROGN);for (cond (= b 4)(T (home) ) ;for else);for cond);for p rogn);for while);for defu n p ull;draw(),繪制直線子程序(defu n draw ( / )(while (/= b1 1)(p rogn(if (= b 3)(p rogn(comma ndli ne p start pend )(princ n F2/F3/F4/F5/ESC/Return / 下一點(diǎn):)(setq b 0 b1 1)(setq p start pend)
30、;for p rogn);for if(p ull);for p rogn);for while(grdraw p start pend -1 0)(grdraw pend p frame -1 0);for defu n draw;主程序(defu n c: os ( / b b1 b2 c p start pend p frame p last ang2dist scmd ccoords olderr cosmode );anO lenO are defi ned out p rogram(init)(draw)(princ rr)(comma ndredraw)(setq *error*
31、 olderr)(setvar cmdecho scmd)(setvar osmode cosmode)(setvar coords ccoords)(princ nnt角度捕捉2.0版-n)(princ nnt*寧波大學(xué)建筑設(shè)計(jì)研究院-程建華,1996*n)(princ);for defu n os四、程序的安裝與使用1.程序的安裝以下三種裝載方式,用戶(hù)任選一種即可:在AutoCAD環(huán)境下,將 OS丄SP拷至當(dāng)前目錄,再執(zhí)行(LOADOS)即可裝載OS.LSP。也可先將 OS.LSP拷至子目錄下,再在ACADSUPPORTACADR12丄SP或ACADR13ISP中加入下面一句語(yǔ)句實(shí)現(xiàn)啟動(dòng)
32、AutoCAD時(shí)自動(dòng)裝載:(AUTOLOAD OS (OS)也可將OS丄SP拷至子目錄下,在子目錄下的菜單文件ACAD.MNU中的合適位置加上下面的一句語(yǔ)句,即可直接在菜單中點(diǎn)取角度捕捉操作:角度捕捉 FcAc(loadc:/acad/support/os.lsp) os2.程序的使用在一幅圖中第一次使用該程序時(shí), 需要用戶(hù)輸入捕捉角度和捕捉長(zhǎng)度, 第二次調(diào)用本程序時(shí), 程序可自動(dòng)采用上一次最后設(shè)定的捕捉角度和長(zhǎng)度作為默認(rèn)值。 然后,程序需要用戶(hù)選擇輸 入一點(diǎn)作為基準(zhǔn)點(diǎn),此時(shí)命令行提示:F2/F3/F4/F5/ESC/Retuin /下一點(diǎn):用戶(hù)根據(jù)該提示可任選其中的一種操作,具體解釋如下:按
33、F2鍵重新設(shè)定捕捉角度;按F3鍵重新設(shè)定捕捉長(zhǎng)度;按F4鍵窗口縮小0.7倍;按F5鍵窗口放大1.4倍;按ESC鍵、回車(chē)鍵、鼠標(biāo)右鍵均可結(jié)束操作,退出程序;選取下一點(diǎn),移動(dòng)十字光標(biāo)鍵,此時(shí)在屏幕的最上面的一行的坐標(biāo)提示欄準(zhǔn)確地顯示出 按用戶(hù)設(shè)定的捕捉角度和長(zhǎng)度所取得的落點(diǎn)相對(duì)于基準(zhǔn)點(diǎn)的偏移角度和長(zhǎng)度,滑動(dòng)十字光標(biāo)鍵直至用戶(hù)尋找到所需要的下一點(diǎn)并按下鼠標(biāo)左鍵,命令行重又出現(xiàn)上面的提示行,并進(jìn)行下一輪循環(huán); 另外,用戶(hù)還可以點(diǎn)取 View菜單下的Zoom菜單中的Zoom Window 、Zoom Previous、Zoom All等三個(gè)子項(xiàng)實(shí)現(xiàn)窗口放縮和 Pan菜單實(shí)現(xiàn)屏幕漫游; 對(duì)于其他操作,用戶(hù)均可按 屏幕命令行的中文提示方便地進(jìn)行操作。在非漢化AutoCAD中運(yùn)行本程序時(shí),只需將程序中有關(guān)的中文提示行改成英文提示即可。另外,由于不同的機(jī)型在 AutoCAD環(huán)境下鍵盤(pán)返回碼可能稍有區(qū)別,所以要求用戶(hù)在應(yīng)用本程序之前對(duì)自己的機(jī)器鍵盤(pán)返回碼按如下方法作 一次核實(shí):在AutoCAD命令狀態(tài)下輸入(grread)并回車(chē),用戶(hù)此時(shí)可按下F2或F3、F4、F5鍵:第一步:Comma
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版實(shí)驗(yàn)室裝修、設(shè)備采購(gòu)一體化合同范本3篇
- 2025版庭院園藝設(shè)計(jì)租賃合同示范文本大全3篇
- 《社會(huì)主義發(fā)展戰(zhàn)略》課件
- 《我的家鄉(xiāng)河北》課件
- 基于2025年度標(biāo)準(zhǔn)的軟件開(kāi)發(fā)與技術(shù)服務(wù)合同3篇
- 2025版木托盤(pán)產(chǎn)業(yè)鏈整合合同4篇
- 2025版學(xué)校飯?zhí)檬称钒踩c營(yíng)養(yǎng)管理承包合同3篇
- 云母制品在平板電腦觸控面板材料中的應(yīng)用考核試卷
- 公路工程現(xiàn)場(chǎng)急救與事故處理考核試卷
- 2025年度木材進(jìn)出口貿(mào)易代理合同標(biāo)準(zhǔn)文本2篇
- 2024版?zhèn)€人私有房屋購(gòu)買(mǎi)合同
- 2024爆炸物運(yùn)輸安全保障協(xié)議版B版
- 2025年度軍人軍事秘密保護(hù)保密協(xié)議與信息安全風(fēng)險(xiǎn)評(píng)估合同3篇
- 《食品與食品》課件
- 讀書(shū)分享會(huì)《白夜行》
- 光伏工程施工組織設(shè)計(jì)
- DB4101-T 121-2024 類(lèi)家庭社會(huì)工作服務(wù)規(guī)范
- 化學(xué)纖維的鑒別與測(cè)試方法考核試卷
- 2024-2025學(xué)年全國(guó)中學(xué)生天文知識(shí)競(jìng)賽考試題庫(kù)(含答案)
- 作品著作權(quán)獨(dú)家授權(quán)協(xié)議(部分授權(quán))
- 取水泵站施工組織設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論