版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
AutoLISP在CASS繪圖軟件中的應(yīng)用摘要隨著科學(xué)技術(shù)的開展,計算機的應(yīng)用越來越被廣泛的應(yīng)用到各行各業(yè),而對于測繪專業(yè),大量的數(shù)據(jù)處理時是其根本特征,處理數(shù)據(jù)是一項繁瑣的工作,如假設(shè)使用計算機編程語言編寫程序來處理測繪專業(yè)的大量的數(shù)據(jù),不僅能夠節(jié)省大量的時間和人力物力,同時也可以有效的防止處理數(shù)據(jù)時由于數(shù)據(jù)過多造成不必要的錯誤。本文主要是使用計算機語言AutoLISP——一款內(nèi)置于AutoCAD中的編程語言,通過編寫程序,用來研究AutoLISP在CASS軟件中的應(yīng)用,由于CASS主要是基于AutoCAD平臺用來繪制圖形的軟件,所以本設(shè)計主要是研究關(guān)于AutoLISP在CASS中的計算方面的應(yīng)用。論文中主要是研究了用AutoLISP語言編寫程序用于測邊交會計算、測角交會計算、城市坐標(biāo)系與建筑坐標(biāo)系計算及地物繪制。關(guān)鍵詞:AutoLISP語言,測角交會計算,測邊交會計算,建筑坐標(biāo)系和城市坐標(biāo)系轉(zhuǎn)換,地物繪制TheapplicationsofAutoLISPinCASSdrawingsoftwareABSTRCATWiththedevelopmentofscienceandtechnology,theapplicationsofthecomputeraremoreandmorewidelyappliedtoallwalksoflife.Andforthesurveyingandmapping,largeamountsofdataprocessing,itsbasiccharacteristics,thatdataprocessingisatediouswork,shoulduseacomputerprogramminglanguagetowriteaprogramtohandlelargeamountsofdata.Usingit,notonlycansavealotoftimeandmanpowerandmaterialresources,butalsocaneffectivelyavoidtoomuchdatatocauseunnecessaryerrorswhenprocessingdata.Inthispaper,thecomputerlanguageofAutoLISP-abuilt-inAutoCADprogramminglanguage,throughthepreparationprocess,isusedtostudytheapplicationofAutoCADintheCASSsoftware.CASSismainlybasedonAutoCADsoftwareusedtodrawgraphics,sothispaperistostudyonthecalculationofAutoLISPinCASS.Paperistostudyforthesideoftheintersectioncalculation,themeasuredangleofintersectioncalculations,thecitysystemandthebuildingcoordinatesystemconversations,andsurfacefeaturesdrawingwiththeAutoLISPprogramming.Keywords:AutoLISPprogramming,thesideintersectioncalculation,measuredangleoftheintersectioncalculation,thecitysystemandthebuildingcoordinatesystemconversations,andsurfacefeaturesdrawing目錄1緒論11.1AutoCAD的簡介11.2AutoCAD的二次開發(fā)的開展與現(xiàn)狀12AutoLISP語言32.1AutoLISP語言的簡介及特點32.2AutoLISP的運行環(huán)境與內(nèi)存分配32.3AutoLISP的數(shù)據(jù)類型42.3.1原子52.3.2表和點對52.4AutoLISP程序的執(zhí)行62.4.1AutoLISP文件的加載62.4.2運行AutoLISP程序73AutoLISP的函數(shù)83.1數(shù)值函數(shù)83.2邏輯運算函數(shù)93.3三角函數(shù)103.4字符串處理函數(shù)113.5條件與循環(huán)函數(shù)124AutoLISP與CASS之間的聯(lián)系134.1AutoCAD與CASS之間的聯(lián)系134.2AutoLISP與CASS之間的關(guān)系145AutoLISP在CASS中的應(yīng)用175.1編寫AutoLISP程序進行測邊交會的計算175.2編寫AutoLISP程序進行測角交會的計算215.3關(guān)于角度化成十進制并輸出255.4坐標(biāo)換算265.5地物繪制316結(jié)論與展望366.1結(jié)論366.2展望36致謝38參考文獻391緒論隨著計算機技術(shù)的飛速開展,以計算機為根底的智能繪圖和設(shè)計軟件日益成為相關(guān)專業(yè)不可或缺的一局部,而這些繪圖和設(shè)計軟件以其人機交互、功能強大、易學(xué)易懂的功能受到人們的親睞。AutoCAD就是其中一種,它是美國Autodesk公司推出的一款計算機輔助繪圖和設(shè)計軟件,它以自己強大的功能已廣泛應(yīng)用于機械專業(yè)、土木專業(yè)以及測繪測量的相關(guān)領(lǐng)域。AutoCAD通過其強大的功能以及開放式的功能結(jié)構(gòu),大大的改變了傳統(tǒng)繪圖和設(shè)計的工作方法,工作過程和工作方式,它不僅大大改善了傳統(tǒng)繪圖的很多弊病,同時也以其強大的優(yōu)點使得當(dāng)代的繪圖和設(shè)計工作能夠更有效更高質(zhì)量的得到完成。1.1AutoCAD的簡介AutoCAD系列軟件是由美國的Autodesk公司研制開發(fā)出的,一種為滿足用戶進行繪圖設(shè)計工作的需求的,以計算機輔助圖形的繪制和設(shè)計的軟件,這個軟件的英文全名是AtuoComputerAidedDesign,即計算機輔助設(shè)計。AutoCAD計算機繪圖軟件有豐富的界面工具和功能,此外,隨著AutoCAD系列的軟件的開展,AutoCAD可以用來繪制出復(fù)雜而精確的圖形。另外,隨著不同行業(yè)的需求,AutoCAD也為相關(guān)的專業(yè)、行業(yè)開展出與之相匹配的軟件,為這些專業(yè)的應(yīng)用設(shè)計與開展提供效勞,如在測繪測量行業(yè),基于AutoCAD平臺而開發(fā)出來的南方CASS成圖系統(tǒng)軟件備受廣闊的測量專業(yè)人士的喜愛,當(dāng)然南方CASS成圖系統(tǒng)軟件最適用于測繪專業(yè)的是它強大的測繪專業(yè)要求的自動繪成圖的功能。1.2AutoCAD的二次開發(fā)的開展與現(xiàn)狀A(yù)utoCAD軟件憑借其強大的而又豐富的功能,越來越廣泛的滲入各個行業(yè)的各個領(lǐng)域。隨著不同專業(yè)的客戶對AutoCAD在自己專業(yè)應(yīng)用的需求的增長,客戶對各自需求的AutoCAD的二次開發(fā)的功能的要求也愈發(fā)強烈。所以,不同的專業(yè)開發(fā)出不同的功能、舉一反三、觸類旁通,這些AutoCAD的二次開發(fā)功能的優(yōu)點越發(fā)的得到專業(yè)人士喜愛。通過AutoCAD的二次開發(fā)語言進行編程,用來實現(xiàn)大量數(shù)據(jù)的整體更改;用二次開發(fā)的程序進行復(fù)雜的大量的曲線的自動繪制;用二次開發(fā)的程序進行相關(guān)專業(yè)的大量數(shù)據(jù)的統(tǒng)計與計算;用二次開發(fā)的程序進行繪制設(shè)計圖紙的自動的標(biāo)注等等,二次開發(fā)的程序的應(yīng)用越來越多的被用來解決許多復(fù)雜的、重復(fù)的工作,其方便的快捷的使用過程開辟了AutoCAD的二次開發(fā)的新天地。當(dāng)今社會,各個專業(yè)的各個人士,一提到繪圖與設(shè)計軟件,AutoCAD這個詞語立即就會脫口而出,AutoCAD已經(jīng)不僅只是一個簡單軟件了,它已經(jīng)完全成為了現(xiàn)時下各行業(yè)人士最為熟悉與認(rèn)可的一個工程繪圖設(shè)計軟件了。說道繪圖制圖,AutoCAD一定會被人們提及,形成這種的局面的原因除了Atuodesk公司的大幅度的宣傳之外,恐怕所有的功能都要歸功于這個軟件的強大的繪圖與編輯功能,以及它強大的二次開發(fā)功能的運用。如今的AutoCAD的開展已經(jīng)深深的滲入了各個專業(yè)的各個領(lǐng)域與環(huán)節(jié)了,它不僅適用于某些專業(yè)的二維平面圖形的繪制和設(shè)計,更是可以滿足一些行業(yè)對三維立體工作的要求,這說明了AutoCAD的功能已經(jīng)不僅局限于二維平面圖形的繪制,它對于三維建模也同樣可以擁有其巨大的能量。如果這樣說來,AutoCAD的功能已經(jīng)足夠強大了,那么二次開發(fā)的開展是不是就不太需要了呢?恰恰相反,AutoCAD的二次開發(fā)不但不是多余之舉,反而是更是大大加強了AutoCAD的各種功能。比方測繪行業(yè),因為測繪行業(yè)所進行的相關(guān)領(lǐng)域的工作都是大范圍的測量與地形圖的繪制,為完成這些工作就得進行大量的數(shù)據(jù)處理和大量的公式運算以及通過野外測得許多數(shù)據(jù)點進行地形繪制。在使用這些點進行地物繪制時,如果單純使用AutoCAD的自帶選項功能進行處理就會十分繁瑣與麻煩,但是如果假設(shè)通過AutoCAD的二次開發(fā)功能夠開發(fā)出一系列的程序,用來處理測量中的這些數(shù)據(jù)的處理和其公式的運算并進行等高線的繪制,它不僅在很大程度上省下人力物力、方便該專業(yè)的相關(guān)工作的進行,而在另一個角度上,它也推動了該專業(yè)在該領(lǐng)域的開展與進步。2AutoLISP語言2.1AutoLISP語言的簡介及特點AutoLISP是〔ListProcessingLanguage〕是一種計算機的表處理語言,是在人工智能學(xué)科領(lǐng)域廣泛應(yīng)用的一種計算機程序設(shè)計開發(fā)語言。AutoLISP語言嵌套在AutoCAD的內(nèi)部,是LISP語言和AutoCAD有機結(jié)合的產(chǎn)物。在1987年6月份,AutoCAD添加了三維模式繪圖的功能,并且研發(fā)出了二次開發(fā)的匯編語言——AutoLISP。用戶可以運用這種匯編語言,在AutoCAD的開發(fā)平臺進行AutoCAD的二次開放,這種二次開發(fā)的功能突破賦予了AutoCAD注入了新的血液。用戶不但可以進行相關(guān)功能的二次開發(fā),也可以繼續(xù)擴充AutoCAD的功能,為AutoCAD占領(lǐng)整個繪圖專業(yè)的相關(guān)領(lǐng)域提供了巨大的能量。AutoLISP是開發(fā)AutoCAD的重要工具之一。它可以直接調(diào)用AutoCAD的命令,它不但具備一般高級語言的根本結(jié)構(gòu)和功能,又具有一些高級語言所不能完成的強大的圖形處理功能,是當(dāng)今世界用于AutoCAD二次開發(fā)中的最廣泛使用的編程語言之一。美國AutoDesk公司把AutoLISP內(nèi)嵌于AutoCAD,就是為了使廣闊用戶更加方便的利用AutoLISP進行二次開發(fā):實現(xiàn)直接增加和修改AutoCAD的命令,隨意更改圖形編輯的功能,開發(fā)CAD相關(guān)的功能軟件等等。AutoLISP語言最顯著的功能就是參數(shù)化繪圖的程序設(shè)計過程,實現(xiàn)圖形的自動繪制以及進行圖形的自行修改等功能。AutoLISP語言一個最大的優(yōu)點就是可以采用遞歸方式處理問題,這樣一來,不僅可以節(jié)省大量的時間,也使得程序簡單明了。2.2AutoLISP的運行環(huán)境與內(nèi)存分配AutoLISP對于運行環(huán)境有一定的要求,主要是對處理器、存儲器以及輸入、輸出設(shè)備的要求:1.對處理器的要求:(1)至少應(yīng)為386型計算機,計算機應(yīng)配有協(xié)處理器,即CPU386+387;(2)最好CPU為486或者是586。2.對存儲器的要求(1)內(nèi)存:AutoLISPR2.6~R10,有1MB以上的內(nèi)存即可;AutoLISPR11以上版本,有4MB以上的內(nèi)存即可,最好8MB內(nèi)存。(2)硬盤:AutoLISPR2.6~R10,有10MB以上的空閑硬盤空間即可;AutoLISPR11以上版本,至少要35MB的空閑硬盤空間。3.對輸入、輸出設(shè)備的要求(1)應(yīng)配有鼠標(biāo)或數(shù)字化儀,以便于輸入;(2)應(yīng)配有打印機或繪圖儀,以便于圖形的輸出;(3)彩色的顯示器,分辨率在640×400像素以上;(4)應(yīng)配有高密軟驅(qū),以用于軟件的安裝。AutoLISPDE內(nèi)存分配主要是為其變量、用戶定義函數(shù)和系統(tǒng)函數(shù)提供計算機的存儲空間。當(dāng)運行AtuoLISP程序時,它需要兩個很大的內(nèi)存區(qū)域。(1)heap〔堆區(qū)域〕,它存儲所有的函數(shù)和變量,因此,程序使用的函數(shù)和變量越多,或者函數(shù)越為的復(fù)雜,那么他的堆區(qū)域占用的空間也就越多。(2)stack〔棧區(qū)域〕,它存儲的函數(shù)的變量和局部結(jié)果,因此“嵌套〞的函數(shù)越為的復(fù)雜與豐富,或者函數(shù)的執(zhí)行的遞歸次數(shù)越多,那么所用的棧空間內(nèi)存也就越多。AutoLISP默認(rèn)的堆空間和??臻g的大小為:Heap為25000B,Stack為20000B在AutoCAD下運行AutoLISP不能擴展它的堆和棧空間,如果用戶定義的函數(shù)和變量太多太復(fù)雜,以致占用了所有的堆空間,AutoLISP將會顯示以下信息:Insufficientnodespace,并且會終止正在執(zhí)行的函數(shù)的運行,如果在執(zhí)行AutoCAD時,沒有足夠的內(nèi)存裝入AutoLISP,那么顯示以下信息:Insuffcientmemory-AutoLISPdisabled,直到有足夠的內(nèi)存后AutoCAD重新啟動時,AutoLISP所需要的堆棧區(qū)域占有內(nèi)存量。2.3AutoLISP的數(shù)據(jù)類型AutoLISP語言的數(shù)據(jù)類型和其他的高級編程語言十分的相似,但是它又有自己的特殊的數(shù)據(jù)類型,它主要包括:符號〔SYM〕、字符串〔STR〕、表〔及用戶定義的函數(shù)〕〔LIST〕、文件描述符〔FILE〕、AutoLISP的內(nèi)部函數(shù)〔SUBR〕、AutoCAD的選擇集〔PICKSET〕、AutoCAD的實體名〔ENAME〕和函數(shù)分頁表〔PAGETB〕。AutoLISP的前五種數(shù)據(jù)類型,前四種被成為原子〔ATOM〕,它主要包括數(shù)字原子、符號原子和串原子。而AutoLISP語言最根本的數(shù)據(jù)類型是原子和表。原子原子主要包括整數(shù)、實型數(shù)、符號和字符串。整數(shù)是由0、1、2……9、+、-等字符組成。實型數(shù)用雙精度浮點數(shù)表示,并且至少有14的精度,即是整數(shù)后面的小數(shù)點的個數(shù)。實型數(shù)的范圍是-1.797693×10308~1.797693×10308,從這個范圍來看,它的范圍十分的龐大,幾乎不會超界。符號〔symbol〕包括除“〔〞、“〕〞、“、〞、“.〞、“;〞之外的所有打印字符,它的長度沒有任何限制,但是用戶使用時最好控制在6個以內(nèi),以免因占用多余的內(nèi)存,而造成運行速度的降低,另外,在AutoLISP中,字符的大小寫是不區(qū)分的,如:AubVTx-8-u@fx都是合法的。在AutoLISP中,所有字符都是有值的,所以每一個符號都是要賦予一定的值,一般用賦值函數(shù)來完成這個工作。字符串是指在一對雙引號中所包含的所有字符,如:“ABC〞“135”“blancebeam〞“〞字符串包括任何可打印的字符,當(dāng)然,在字符串中的字母的大小寫以及空格的個數(shù)都是具有一定的意義的。此外,字符串對于長度有一定的限制,一般來說最多不能超過100個字符,超出這個界限,超出的字符都是無效的。如果字符串中沒有任何字符,那么作為空串處理,即“〞。表和點對1.表在autollisp語言中,表有兩種類型,即標(biāo)準(zhǔn)表和引用表。標(biāo)準(zhǔn)表:它是AutoLISP語言中的根本的構(gòu)成形式,AutoLISP程序就是由標(biāo)準(zhǔn)表構(gòu)成的。它可以用來處理函數(shù)的調(diào)用,其中第一個元素應(yīng)是系統(tǒng)定義的內(nèi)部函數(shù)或者是用戶定義的函數(shù),而其他的元素那么為該函數(shù)的參數(shù),引用表:這種表區(qū)別于標(biāo)準(zhǔn)表的不同就是它不作為函數(shù)調(diào)用,而是用來處理數(shù)據(jù)的,很容易想象的出,用它處理關(guān)于坐標(biāo)方面的數(shù)據(jù)十分簡單。2.點對點對也是一種表,這個表中有且僅有兩個元素,它的書寫格式要求十分嚴(yán)格,即兩個元素的中間為一個圓點“·〞,且圓點與元素中間必須用空格分開,如〔A·B〕就是一個點對的例子,這個點對中A、B與圓點均有空格隔開,其中第一個元素A為這個點對的左元素,理所當(dāng)然,第二個B即為其右元素。點對可以任意嵌套,只要嵌套時注意它的書寫要求,那么不會出現(xiàn)錯誤。點對常被用來構(gòu)造連接表。2.4AutoLISP程序的執(zhí)行有些AutoLISP程序十分簡短,僅僅只有幾句語言組成,那么它就可以使用defun函數(shù)定義簡單的用戶函數(shù)進行運算,同樣也可以在AutoCAD環(huán)境中的command:提示符下直接輸入命令即可,運算的結(jié)果那么會直接在文本屏幕中顯示。對于AutoLISP程序,需要先在文本編輯器上進行語言程序的編寫,編輯器可以任意選取,但是最好是使用AutoLISP自帶的編輯器進行編寫,因為它自帶的編輯器對函數(shù)和變量會有不同的顯示顏色,方便檢查錯誤。AutoLISP文件的加載一般說來,通過AutoLISP語言編輯的LISP文件,需要經(jīng)過加載才能夠進行使用。加載AutoLISP文件有以下三種方法:1.命令行輸入加載方式當(dāng)回到AutoCAD環(huán)境下,用load函數(shù)進行裝載就可以執(zhí)行。如果程序中沒有defun函數(shù),系統(tǒng)就會邊裝載邊運行,假設(shè)有,裝載后只需在command:提示符下鍵入defun的函數(shù)即可運行相對應(yīng)的函數(shù)。加載文件的格式為:Command:(load“驅(qū)動器:\\路徑\\文件名〞)加載文件的格式為:Command:(load“驅(qū)動器:\\路徑\\文件名〞)2.用對話框的方式加載首先在“工具〞欄的下拉菜單找到“AutoLISP〞選項,然后在子菜單中選擇“加載〞選項,對話框如圖2.2所示。圖2.2“加載/卸載應(yīng)用程序〞對話框然后選取需要加載的LISP文件,選擇加載。命令行可以看到如以下圖2-3所示的成功加載信息,如以下圖2.3所示。3.自動加載方式在AutoCAD的工作目錄下有一個ACAD.LSP文件,它是當(dāng)系統(tǒng)啟動時、新建文件、翻開文件時自動裝載的AutoLISP程序,用戶可以通過它實現(xiàn)程序自動的加載。在使用時,如果程序出現(xiàn)錯誤,那么剩余的文件不會被繼續(xù)加載,并提示錯誤,假設(shè)有局部函數(shù)調(diào)用成功,那么返回加載文件的最后那個表達式的值。運行AutoLISP程序裝載完成后,我們就可以在命令行command:鍵入函數(shù)名即可執(zhí)行這個程序段,系統(tǒng)將執(zhí)行程序,運行出結(jié)果。概括來說AutoLISP的運行過程為:首先,用戶編寫相關(guān)語言程序,在此時,系統(tǒng)會為用戶使用的變量和內(nèi)存分配內(nèi)存,當(dāng)用戶編寫完程序之后,加載程序,如果程序正確,那么返回表達式的值,如果運行錯誤,那么停止程序的加載。裝載完后,用戶就可以使用AutoLISP語言中defun定義的函數(shù)了。3AutoLISP的函數(shù)AutoLISP函數(shù)就是在進行AutoLISP語言編寫時,所用來計算問題所需要的算法。AutoLISP的函數(shù)十分豐富,接下來介紹一些常用的函數(shù)。3.1數(shù)值函數(shù)計算函數(shù)中,最常用的包括加函數(shù)、減函數(shù)、乘函數(shù)、除函數(shù)、平方根函數(shù)和正負(fù)判斷函數(shù)。1.加函數(shù)+(+<num1><num2>……)即(+<數(shù)1><數(shù)2>……)本函數(shù)計算之后所返回的值就是所有的<數(shù)>的和。其中的數(shù)可以是整型數(shù)和實型數(shù)。如果所有的數(shù)都是整型數(shù),那么它的返回值也是一個整型數(shù);如果有其中的一個數(shù)是實型,那么它的返回值那么是一個實型數(shù);如果只提供一個數(shù),系統(tǒng)將會默認(rèn)是與0相加,返回與0相加的結(jié)果;如果沒有提供一個數(shù),那么系統(tǒng)返回值為0。例如:命令:(+123.0)6.02.減函數(shù)–(-<num1><num2>……)即(-<數(shù)1><數(shù)2>……)此函數(shù)是用第一個數(shù)減去以后所有數(shù)的和,并返回所求值的結(jié)果。假設(shè)只給一個數(shù)目那么是返回0減去這個數(shù)的結(jié)果;假設(shè)不提供任何數(shù)目,那么返回0;此函數(shù)對函數(shù)中數(shù)的類型的規(guī)那么與加函數(shù)是相同的。例如:命令:(-531.0)1.03.乘函數(shù)*(*<num1><num2>……)即(*<數(shù)1><數(shù)2>……)本函數(shù)返回所有<數(shù)>的乘積,其返回值同樣取決于這些數(shù)值的類型,如果函數(shù)只提供了一個數(shù),那么不同加減函數(shù)的是,函數(shù)返回值是這個數(shù)乘以1所得到的值,假設(shè)不提供數(shù),那么是返回0.例如:命令:(*1234.0)24.04.除函數(shù)/(/<num1><num2>……)即(/<數(shù)1><數(shù)2>……)本函數(shù)返回值那么是第一個數(shù)除以第二個數(shù),依次除以第三……的數(shù)的值,如果只提供一個數(shù),那么是返回除以1所得到的值,如果沒有提供任何數(shù)目,那么返回0。這個函數(shù)返回值的類型同樣取決于各個數(shù)的類型,如果其中一個數(shù)是實型,那么它的返回值那么也是實型。例如:命令:(/9(/2.03))13.55.平方根函數(shù)sqrt(sqrt<num>)該函數(shù)返回的值是<num>的平方根,其數(shù)據(jù)類型總為實型數(shù)值,函數(shù)的使用中,要注意這個數(shù)的取值范圍。例如:命令:(sqrt(/42.0))1.414213.2邏輯運算函數(shù)邏輯運算函數(shù),是用來進行邏輯關(guān)系的運算,它主要包括邏輯與、邏輯或和邏輯非的運算。1.邏輯與AND(and<expr>……)這個函數(shù)的返回值是表達式邏輯與的運算結(jié)果,如果這個函數(shù)運算每一個的表達式的結(jié)果都是nil,那么這個函數(shù)將停止運算,并返回nil,否那么返回T。例如:命令:(setqa103bnilc“string〞)命令:(and1.4ab)nil2.邏輯或OR(or<expr>……)這個函數(shù)所返回的運算結(jié)果值是返回表達式邏輯或〔OR〕的運算結(jié)果,or函數(shù)運算表達式是從左往右一次運算,找到一個非nil的表達式,一旦找到,就會停止運算,并返回T,如果表達式中沒有一個非nil的表達式,那么函數(shù)會返回or。例如:命令:(ornilT)T3.邏輯非NOT(not<expr>……)這個函數(shù)的是對表達式進行邏輯非(NOT)的運算,如果表達式的值為nil,那么返回值為T;否那么,那么返回nil。3.3三角函數(shù)三角函數(shù)主要是用來計算數(shù)學(xué)中角度的問題,AutoLISP中的三角函數(shù)主要有正弦函數(shù)、余弦函數(shù)和反正切函數(shù)。1.正弦函數(shù)sin(sin<angle>)該函數(shù)運行的結(jié)果返回值是為<angle>的正切值,其中<angle>是用弧度制表示的角度。例如:命令:(sin1.0)0.814712.余弦函數(shù)cos(cos<angle>)這個函數(shù)的返回值是<angle>的余弦值,其中<angle>為弧度制。例如:命令:(cos1)0.5403023.反正切函數(shù)atan(atan[<num1>][<num2>])該函數(shù)返回值是一個數(shù)的反正切值,且是以弧度制表示,<num1>和<num2>也可以作為坐標(biāo)系內(nèi)的坐標(biāo)值,從而判斷取值,所返回的角度范圍是-pi至+pi之間的弧度。例如:命令:(atan3.02.0)0.9827943.4字符串處理函數(shù)在工程繪圖中,文字注記十分重要。在處理大量的文本數(shù)字注記時,如果單純使用AutoCAD自身的編輯功能,就會十分繁瑣。因此在AutoLISP中,系統(tǒng)提供相關(guān)的字符串處理函數(shù),其中最常用的幾個字符串處理函數(shù)是求字符串長度函數(shù)和字符串連接函數(shù)等。1.求字符串長度函數(shù)strlen(stringlength)(strlen[(string)]……)這個函數(shù)是用來求一個字符串的長度,也就是求字符的個數(shù),并把這個值作為函數(shù)值返回。例如:命令:(stelen“surveying〞“and〞“mapping〞)192.字符串連接函數(shù)strcat(stringcatenation)(strcat<string1>[<string2>]……)這個函數(shù)首先是把多個變元所提供的字符串連接在一起,然后把連接而成的新的字符串作為函數(shù)返回值返回。例如:命令:(strcat“Auto〞“LISP〞)“AutoLISP〞3.5條件與循環(huán)函數(shù)為簡化程序,循環(huán)結(jié)構(gòu)必不可少,而對于邏輯判斷,條件運算又是必備手段。所以程序結(jié)構(gòu)中分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)尤為重要,那么條件函數(shù)和循環(huán)函數(shù)的地位就更是不言而喻了。1.條件函數(shù)條件函數(shù)通常用來測試表達式的值,然后根據(jù)測試的結(jié)果進行相應(yīng)的運算,AutoLISP的條件函數(shù)是if和cond。1.單一條件的兩分支結(jié)構(gòu)if(if<testexpr><thenexpr>[<elsexpr>])首先函數(shù)先對<testexpr>進行判斷,如果求值為非空,那么對<thenexpr>進行求值并返回,否那么,那么是對<elsexpr>進行求值。例如:命令:(if(=2(+11))“YES!〞“no.〞)“YES!〞2.多分支結(jié)構(gòu)cond(cond(<test1><result1>……)……)這個函數(shù)是AutoLISP語言的一個重要的條件函數(shù),cond函數(shù)的求值是由上至下,逐個測試每個分支,如果測試的結(jié)果是一個非nil的值,那么運算測試語句后面的結(jié)果語句,那么其他的分支不在執(zhí)行和運算。2.循環(huán)函數(shù)循環(huán)結(jié)構(gòu)在AutoLISP語言中應(yīng)用十分廣泛,它的運算思路就是測試—求值—測試,直到滿足條件終止循環(huán)為止。在AutoLISP語言中運用最廣泛的循環(huán)函數(shù)是while函數(shù)。while函數(shù)(while<testexpr><expr>…)While函數(shù)對一個測試表達式進行求值,如果它的值是非nil,那么計算其他表達式,并重復(fù)這個計算過程,直到它的值是非nil。4AutoLISP與CASS之間的聯(lián)系CASS軟件是現(xiàn)行測量測繪專業(yè)使用最多的一個軟件之一,它是由南方測繪儀器出產(chǎn)的,它是以AutoCAD為平臺根底進行二次開發(fā)而出的,效勞于測繪專業(yè)的地形地籍?dāng)?shù)字化成圖的專業(yè)軟件,使用CASS時不僅可以使用AutoCAD各種指令功能,同時它又發(fā)揮著自己獨特的專業(yè)效勞功能。4.1AutoCAD與CASS之間的聯(lián)系CASS軟件是基于AutoCAD軟件的二次開發(fā)的專業(yè)軟件,所以在安裝CASS之前,必須安裝AutoCAD2002后才能進行。在平安安裝AutoCAD軟件后,能夠正常使用,這時才可以繼續(xù)安裝CASS。從這點就可以看出AutoCAD與CASS的之間的聯(lián)系是多么的緊密。CASS是運用AutoCAD軟件的技術(shù)進行研發(fā)而出的數(shù)字化成圖軟件,因此AutoCAD的功能在CASS中同樣能夠得到使用,AutoCAD的菜單和工具條的依舊可以繼續(xù)使用,這一點就為CASS這個數(shù)字化成圖軟件,實現(xiàn)數(shù)字化成圖功能提供了強大的繪圖根底。雖然CASS出自于AutoCAD,但是它同樣具有其獨特的特色,所謂“青出于藍而勝于藍〞,在CASS與AutoCAD中得到充分的表達。CASS是專門為測繪專業(yè)開發(fā)的軟件,它適用于測繪專業(yè)的各種成圖繪圖的要求,比方,測繪專業(yè)的坐標(biāo)系統(tǒng)和普通的坐標(biāo)系統(tǒng)不同,在使用CASS繪制地形圖之前,首先要進行坐標(biāo)系的轉(zhuǎn)換。測繪專業(yè)很多繪制地形圖地籍圖的工作都是首先到實地進行野外采集點位的坐標(biāo)數(shù)據(jù),然后根據(jù)這些點位的三維坐標(biāo)進行地形圖的繪制,繪制出等高線圖,這一點和普通的AutoCAD繪制平面圖不同,因為它參加的高程,它要求是在三維坐標(biāo)的根底上,繪制等高線。此外,由于地物的種類繁多,而相應(yīng)的表示符合也是多種多樣的,如果單純用AutoCAD添加這些標(biāo)注,那將是一個十分繁瑣而冗長的工作。而CASS那么恰恰實現(xiàn)了這些功能,它包含大量的測繪專業(yè)要求的專業(yè)表示符號,用來注記相關(guān)的地物,使得繪制地形圖注記這個工作變得簡單。此外,CASS同樣在AutoCAD的繪圖根底上,更加完善繪制專業(yè)地物的繪圖功能,這樣不僅可以實現(xiàn)測繪專業(yè)的繪圖功能,同時為實現(xiàn)專業(yè)地物的繪制提供了方便。4.2AutoLISP與CASS之間的關(guān)系上節(jié)說到AutoCAD與CASS之間的聯(lián)系,后者是在前者之上開發(fā)出來的軟件。而AutoLISP與AutoCAD之間的關(guān)系與他們二者的關(guān)系有些相同之處,又有不同之點。首先AutoLISP是AutoCAD用來進行二次開發(fā)的工具,換言之,可以使用AutoLISP進行AutoCAD的二次開發(fā),而CASS是基于AutoCAD平臺進行的二次開發(fā)。所以從這一點上來說是相同的,也就是二者都是基于AutoCAD平臺的,不同之處就在于AutoLISP是用來進行二次開發(fā)的,而CASS那么是開發(fā)出來的成果軟件,所以二者的相同點是都是基于AutoCAD平臺,不同就是AutoLISP是用來進行二次開發(fā)的,而CASS那么是已經(jīng)開發(fā)出來的軟件。既然二者都是都是基于AutoCAD平臺的,那么是否可以使用AutoLISP開發(fā)出關(guān)于CASS軟件相關(guān)應(yīng)用的功能呢?原理上,可以使用AutoLISP開發(fā)出基于AutoCAD平臺的關(guān)于繪圖和計算的功能,是否可以考慮把這些開發(fā)功能應(yīng)用于CASS軟件中,即與CASS軟件息息相關(guān)的測繪專業(yè)的相關(guān)專業(yè)應(yīng)用上,比方進行一些復(fù)雜的運算,又或者進行圖像的繪制。就著這個問題,我們首先看幾個關(guān)于AutoLISP程序的例題。【例4-1】編一個程序,在一個文件中寫入四個點的坐標(biāo),并用這些點位左邊繪制一個四邊形。;用戶自己定于一個函數(shù):(defunc:四邊形();新建一個儲存數(shù)據(jù)的文件:(setqfi(getstring"\n輸入文件的名字:"));翻開這個文件,用于操作:(setqfile(openfi"w"));提示輸入點數(shù)據(jù):(prompt"在文件里輸入四個點:");在這個文件中,寫入數(shù)據(jù)點位:(setqa(getpoint"\n輸入第一個點坐標(biāo):"))(princafile)(setqb(getpoint"\n輸入第二個點坐標(biāo):"))(princbfile)(setqc(getpoint"\n輸入第三個點坐標(biāo):"))(princcfile)(setqd(getpoint"\n輸入第四個點坐標(biāo):"))(princdfile);關(guān)閉這個數(shù)據(jù)文件:(closefile);把這個點用直線連接起來:(command"line"abcd"c"))加載程序,運行結(jié)果如以下圖4.1:圖4.1運行過程和運行結(jié)果從這個例子可以看出用AutoLISP編程在AutoCAD平臺實現(xiàn)圖形的繪制是可行的,由這個啟發(fā),我們可以嘗試通過AutoLISP編程進行CASS軟件要求的進行一些地物的繪制,在下一章將進行這方面的嘗試?!纠?-2】編程求方程ycos2x+x/sin(x-2)+xyz的解,其中x=2,y=6,z=8(defunc:復(fù)雜計算(/xyzs)(setqx4)(setqy6)(setqz8)(setqs(+(*y(cos(*x2)))(/x(sin(-x2)))(*xyz)))(princs)(princ))加載程序,運行結(jié)果如以下圖4.2:圖4.2復(fù)雜計算的運行結(jié)果從這個例題中可以看出,使用AutoLISP編程可以進行一些復(fù)雜運算的求解。大家都知道,在測繪專業(yè),有很多復(fù)雜的公式求解運算,如果把這些公式用程序編出來,配合CASS軟件的使用,可以使一些工作的計算得到簡化,大大的節(jié)省了人力和物力。在下一章節(jié),將會以這個問題為主線,編寫一些復(fù)雜公式的計算程序進行相關(guān)運算,從而去研究AutoLISP在CASS中的應(yīng)用。5AutoLISP在CASS中的應(yīng)用在上一章中,從一些簡單的例子中,我們看到了AutoLISP編程繪制圖形和進行復(fù)雜計算的強大能力,在這一章中,通過一些例子,我們再次深入的探討AutoLISP在CASS中的應(yīng)用。5.1編寫AutoLISP程序進行測邊交會的計算從待定點P向兩個點A和B測量邊長AP(b)和BP(a),如以下圖5.1,然后計算P點的坐標(biāo),稱為側(cè)邊交會,又稱為距離交會。具體的解題思路如下:圖5.1側(cè)邊交會首先從P點作AB邊垂線,交于D點,得輔助線段AD〔e〕,PD〔f〕,那么:,(5-1-1)并計算輔助線段長度:;(5-1-2)然后計算AP、AD、DP點間的坐標(biāo)增量關(guān)系:;(5-1-3);(5-1-4);(5-1-5)因此,A點到P點的坐標(biāo)增量:;(5-1-6)直接計算待定點P的坐標(biāo)公式為:;(5-1-7)求得P點的坐標(biāo),可以用以下公式進行檢核:;(5-1-8)編寫程序代碼如下:;用戶定義函數(shù)和變量:(defunc:cb(/dxdyxayaxbybabcefd1d2d3xpypxapyapxbpybpxd1xd2p1p2p3);系統(tǒng)變量,用來顯示繪制圖形的屏幕:(graphscr);從命令行輸入數(shù)據(jù):(setqxa(getreal"\n輸入A點的x坐標(biāo):"))(setqya(getreal"\n輸入A點的y坐標(biāo):"))(setqxb(getreal"\n輸入B點的x坐標(biāo):"))(setqyb(getreal"\n輸入B點的y坐標(biāo):"))(setqd2(getreal"\n輸入A到P的距離:"))(setqd1(getreal"\n輸入B到P的距離:"));編寫語言進行公式的運算求解:(setqdx(-xbxa))(setqdy(-ybya))(setqd3(sqrt(+(*dxdx)(*dydy))))(setqc(atandydx))(setqa(sinc))(setqb(cosc))(setqe(/(-(+(*d2d2)(*d3d3))(*d1d1))(*2d3)))(setqf(sqrt(-(*d2d2)(*ee))))(setqxp(+xa(+(*eb)(*fa))))(setqyp(+ya(-(*ea)(*fb))))(setqxap(-xpxa))(setqyap(-ypya))(setqxbp(-xpxb))(setqybp(-ypyb))(setqxd1(sqrt(+(*xapxap)(*yapyap))))(setqxd2(sqrt(+(*xbpxbp)(*ybpybp))));根據(jù)得到的數(shù)據(jù)坐標(biāo)點進行圖形的繪制:(setqp1(listyaxa))(setqp2(listybxb))(setqp3(listypxp))(command"line"p1p2p3"c")(command"text""m"p1150"A")(command"text"p2150"B")(command"text"P3150"P");輸出每項的計算的結(jié)果:(setqc(angtosc04))(princ"AB邊的坐標(biāo)方位角:α=")(princc)(princ(strcat"\n輔助線段:e="(rtose)))(princ(strcat";f="(rtosf)))(princ(strcat"\nA點至P的坐標(biāo)增量:ΔxAP="(rtosxap)))(princ(strcat";ΔyAP="(rtosyap)))(princ(strcat"\nB點至P的坐標(biāo)增量:ΔxBP="(rtosxbp)))(princ(strcat";ΔyBP="(rtosybp)))(princ(strcat"\n待定點P的坐標(biāo):xp="(rtosxp)))(princ(strcat";yp="(rtosyp)))(princ(strcat"\n檢核計算:a="(rtosxd1)))(princ(strcat";b="(rtosxd2)))(princ))程序加載及運行結(jié)果如以下圖5.2:圖5.2程序運行過程、輸出結(jié)果和圖形繪制這個程序用于計算測邊交會,十分方便,只需要輸入需要的數(shù)據(jù)內(nèi)容,程序便可計算出相應(yīng)的結(jié)果,并且可以輸出計算過程中的每一項的計算結(jié)果,在最后,同樣也輸出了檢核計算的內(nèi)容。5.2編寫AutoLISP程序進行測角交會的計算測角交會就是從相鄰的兩個點A、B向待定點P觀測水平角α和β,如以下圖5.3,然后計算待定點P的坐標(biāo)。具體的解題思路如下,圖5.3測角交會首先進行坐標(biāo)反算,根據(jù)點的坐標(biāo),反算兩點邊長c和方位角αAB:;(5-2-1)然后,用三角正弦定律計算點到待定點的邊長a,b:;(5-2-2)按下式計算待定邊的方位角:;(5-2-3)最后根據(jù)點至待定點的邊長和方位角,按坐標(biāo)正算,分別從A、B計算待定點P的坐標(biāo),兩次算的坐標(biāo)應(yīng)該相等,可以作為檢核:;(5-2-4);(5-2-5)如果將上面的按測角交會法計算待定點坐標(biāo)的一系列公式,經(jīng)過化算,可得到直接計算待定點坐標(biāo)的一種公式:(5-2-6)編寫程序代碼如下:;用戶定義函數(shù)和變量:(defunc:cj(/x1y1x2y2a1a(graphscr);暫停程序,使用戶從命令行輸入數(shù)據(jù):(setqx1(getreal"\n輸入第A點的x坐標(biāo):"))(setqy1(getreal"\n輸入第A點的y坐標(biāo):"))(setqx2(getreal"\n輸入第B點的x坐標(biāo):"))(setqy2(getreal"\n輸入第B點的y坐標(biāo):"))(setqa1(getorient"\n輸入點A向待定點P觀測角度α:"))(setqa2(getorient"\n輸入點A向待定點P觀測角度β:"));相關(guān)公式計算:(setqa1(/(sina1)(cosa1)))(setqa2(/(sina2)(cosa2)))(setqa3(+a1a2))(setqa4(*a1a2))(setqxp(/(+(+(*x1a1)(*x2a2))(*(-y2y1)a4))a3))(setqyp(/(+(+(*y1a1)(*y2a2))(*(-x1x2)a4))a3));根據(jù)計算坐標(biāo)進行圖形的繪制:(setqp1(listy1x1))(setqp2(listy2x2))(setqp3(listypxp))(command"line"p1p2p3"c")(command"text""m"p1150"A")(command"text"p2150"B")(command"text"P3150"P");輸出運算的結(jié)果 (princ(strcat"tanα×tanβ="(rtosa4)))(princ(strcat"\ntanα+tanβ="(rtosa3))) (princ(strcat"\n待求點p的坐標(biāo):\nxp="(rtosxp))) (princ(strcat",yp="(rtosyp))) (princ))程序運行過程及加載結(jié)果和圖形輸入如以下圖5.4:圖5.4程序運行過程及加載結(jié)果和圖形輸出這個程序可以用來計算測角交會,可是在計算過程中角度的輸入和使用十分的不方便,因為測繪專業(yè)要求的角度需要精確到秒的單位,在下一節(jié)中,將詳細介紹如何處理度分秒制的角度。5.3關(guān)于角度化成十進制并輸出在測繪專業(yè)中,角度的使用十分頻繁。為使精度到達一定的要求,角度會用秒的單位,所以在測繪專業(yè)的各種計算中,在有角度的相關(guān)計算時,度分秒的表示的角度會一直存在,而在AutoCAD中,無法輸入度分秒表示的角度,并且經(jīng)過一定的三角函數(shù)運算后,角度會化成弧度。如果我們使用AutoLISP編程計算相關(guān)的公式時,輸出的運算結(jié)果是弧度制,而我們希望看到的是十進制表示或者度分秒表示。下面我們就以一個例子說明如何用程序進行角度化成十進制用于計算,而在輸出時又如何化成度分秒或者十進制輸出?!纠烤幰粋€程序把15°36′18″化成十進制用于計算它的余弦值并輸出。具體的編程思路:1.通過度分秒數(shù)分別輸入進行化算成十進制,2.轉(zhuǎn)換成弧度制用來計算,3.輸出結(jié)果具體的編寫程序代碼如下:;用戶定義函數(shù)變量:(defunc:jdhs(/abc);分別輸入角度的度分秒:(setqa(getreal"角度的秒數(shù):"))(setqb(getreal"角度的分?jǐn)?shù):"))(setqc(getreal"角度的度數(shù):"));把角度的度分秒制換算成十進制:(setqa(/a3600))(setqb(/b60))(setqa(+c(+ab)));把角度轉(zhuǎn)換成弧度制(setqa(*pi(/a180)));計算它的余弦值:(setqz(cosa));根據(jù)要求,用angtos函數(shù)將角度轉(zhuǎn)換成相應(yīng)單位表示的角度:(setqx(angtosa04))(setqy(angtosa14));輸出結(jié)果:(princ(strcat"十進制的角度:a="x))(princ(strcat"\n度分秒制的角度:a="y))(princ(strcat"\n余弦值cosα="(rtosz)))(princ))程序加載及運行結(jié)果如以下圖5.5所示:圖5.5程序運行過程和加載結(jié)果這個程序用于角度換算弧度十分簡便,如果下次再進行相關(guān)的運算時,只需要調(diào)用這個結(jié)果,即可得到結(jié)果,不需要每次都要進行編寫,在下一章節(jié)的例子中,將會調(diào)用這個函數(shù)中換算弧度的那段代碼函數(shù)。5.4坐標(biāo)換算在測繪專業(yè)中,地面上的同一個點的在不同的坐標(biāo)系統(tǒng)中的值也不相同,但是在這些坐標(biāo)系統(tǒng)中,它們是可以根據(jù)相應(yīng)的數(shù)學(xué)關(guān)系進行換算的。接下來,以城市坐標(biāo)系與建筑坐標(biāo)系之間的轉(zhuǎn)換關(guān)系為例,使用AutoLISP進行編寫程序完成二者之間的相互轉(zhuǎn)換關(guān)系?!纠?】建筑坐標(biāo)系下的原點O′在城市坐標(biāo)系中的坐標(biāo)為:xO=528.456m,yO=496.332m,建筑坐標(biāo)系x′在城市坐標(biāo)系中的方位角α=19°56′18″,將A(600.000,200.000),C(600.000,800.000),D(600.000,1300.000)轉(zhuǎn)換成城市坐標(biāo),如以下圖5.6所示:圖5.6城市坐標(biāo)系與建筑坐標(biāo)系換算解題思路:建筑坐標(biāo)系的原點在城市坐標(biāo)系下的坐標(biāo)值(xO,yO),,和建筑坐標(biāo)系的縱軸在城市坐標(biāo)系下的方位角α,設(shè)P點的建筑坐標(biāo)系為〔x′P,y′P〕,那么可以根據(jù)下面的公式進行換算城市坐標(biāo)〔xP,yP〕:;程序代碼如下:;定義角度換算至十分制的調(diào)用函數(shù)(defuncc(abc/d)(setqa(getreal"角度的秒數(shù):"))(setqb(getreal"角度的分?jǐn)?shù):"))(setqc(getreal"角度的度數(shù):"))(setqa(/a3600))(setqb(/b60))(setqd(+c(+ab))));定義函數(shù)變量(defunc:建筑坐標(biāo)系轉(zhuǎn)換城市坐標(biāo)系(/xyzabxpypijx0y0);調(diào)用角度換算函數(shù):(setqz(ccxyz));輸入要轉(zhuǎn)換的坐標(biāo)個數(shù):(setqi(getreal"\n輸入要轉(zhuǎn)換坐標(biāo)點的個數(shù):"));輸入數(shù)據(jù):(setqx0(getreal"\n輸入建筑坐標(biāo)系原點0'x坐標(biāo):"))(setqy0(getreal"\n輸入建筑坐標(biāo)系原點0'y坐標(biāo):"))(setqj0);進行相關(guān)的角度計算:(setqz(*pi(/z180)));把相關(guān)角度的運算值賦值,以為接下來的計算使用,同時方便后來的結(jié)果輸出:(setqa(cosz))(setqb(sinz));使用循環(huán)計算每個點的換算坐標(biāo):(while(<ji);輸入要轉(zhuǎn)換坐標(biāo)的建筑坐標(biāo):(setqx1(getreal"輸入建筑坐標(biāo)的x坐標(biāo):"))(setqy1(getreal"輸入建筑坐標(biāo)的y坐標(biāo):"));進行相關(guān)的計算:(setqxp(+x0(-(*x1a)(*y1b))))(setqyp(+y0(+(*x1b)(*y1a))));輸出轉(zhuǎn)換后的城市坐標(biāo)數(shù)據(jù):(princ(strcat"\n轉(zhuǎn)換后的城市坐標(biāo)系坐標(biāo):x="(rtosxp)))(princ(strcat";y="(rtosyp)"\n"));使循環(huán)繼續(xù),為下一點的計算做準(zhǔn)備:(setqj(+1j)));輸出計算過程的關(guān)于角度運算的相關(guān)值:(princ(strcat"其實方位角的余弦值cosα="(rtosa)))(princ(strcat"其實方位角的余弦值sinα="(rtosb)))(princ))程序運行過程和加載結(jié)果如下如圖5.7所示:圖5.7程序加載過程和運行結(jié)果在這個程序中使用了循環(huán),一個方面是使得程序的屢次循環(huán),可以方便工作的進行,另外一個方面,使用循環(huán)記住要轉(zhuǎn)換的坐標(biāo)點的個數(shù),以免由于數(shù)據(jù)量過大造成錯誤,方便檢查?!纠?】根據(jù)上例的數(shù)據(jù),進行坐標(biāo)點從城市坐標(biāo)系到建筑坐標(biāo)系的轉(zhuǎn)換。解題思路:根據(jù)上例中提供的數(shù)據(jù),按以下公式:;進行計算,把城市坐標(biāo)系的點化成至建筑坐標(biāo)系。在本例中,不再使用循環(huán),上例中已經(jīng)詳細闡述,本例單純只去計算一個坐標(biāo)點的轉(zhuǎn)換,不再贅述循環(huán)計算的相關(guān)內(nèi)容。程序代碼如下:;定義角度換算至十分制的調(diào)用函數(shù)(defuncc(abc/d);分別輸入分秒度數(shù):(setqa(getreal"角度的秒數(shù):"))(setqb(getreal"角度的分?jǐn)?shù):"))(setqc(getreal"角度的度數(shù):"));化成十進制(setqa(/a3600))(setqb(/b60))(setqd(+c(+ab))));定義函數(shù)變量(defunc:cj(/xyzabxpypijx0y0);調(diào)用角度換算函數(shù):(setqz(ccxyz));輸入數(shù)據(jù):(setqx0(getreal"\n輸入建筑坐標(biāo)系原點0'x坐標(biāo):"))(setqy0(getreal"\n輸入建筑坐標(biāo)系原點0'y坐標(biāo):"));進行相關(guān)的角度計算:(setqz(*pi(/z180)))(setqa(cosz))(setqb(sinz));輸入要轉(zhuǎn)換坐標(biāo)的城市坐標(biāo):(setqx1(getreal"輸入城市坐標(biāo)的x坐標(biāo):"))(setqy1(getreal"輸入城市坐標(biāo)的y坐標(biāo):"));行相關(guān)的計算:(setqxp(+(*a(-x1x0))(*b(-y1y0))))(setqyp(-(*a(-y1y0))(*b(-x1x0))));輸出轉(zhuǎn)換后的建筑坐標(biāo)數(shù)據(jù):(princ(strcat"\n轉(zhuǎn)換后的建筑坐標(biāo)系坐標(biāo):x="(rtosxp)))(princ(strcat";y="(rtosyp)"\n"));輸出計算過程的關(guān)于角度運算的相關(guān)值:(princ(strcat"其實方位角的余弦值cosα="(rtosa)))(princ(strcat"其實方位角的余弦值sinα="(rtosb)))(princ))程序加載及運行結(jié)果如以下圖5.8所示:圖5.8程序運行過程及輸出的結(jié)果上述兩個例題詳細介紹了兩個坐標(biāo)系坐標(biāo)點的相互轉(zhuǎn)化,使用這兩個程序進行相關(guān)的換算時,可以準(zhǔn)確無誤的進行大量的數(shù)據(jù)處理,節(jié)省大量的人力物力。5.5地物繪制在測繪專業(yè)中,測繪地形是最常做的工作,而測繪地形的結(jié)果不僅僅只是大量數(shù)據(jù)的采集,除此之外,還要把這些數(shù)據(jù)結(jié)果以圖形的形式輸出來,就是繪制成等高線地形圖。而在繪制地形圖的時候,會有很多地物,大量的數(shù)據(jù)造成圖形的繪制成為一個非常繁重的工作,如果可以編寫程序根據(jù)的坐標(biāo)數(shù)據(jù)進行地物的自動繪制,將會大大提高相關(guān)工作的工作效率。在前面已經(jīng)介紹了AutoCAD具有強大的繪制圖形的功能,如果使用AutoLISP語言編寫相關(guān)代碼完成地物的繪制,其意義是不言而喻的。但是如何處理數(shù)據(jù),如何編寫程序才能完成這項工作呢?下面先介紹下相關(guān)的編寫程序的思路和解決方法。AutoLISP可以直接使用函數(shù)調(diào)用AutoCAD系統(tǒng)繪圖功能進行點的連接,我們可以嘗試使用這一功能把測量外業(yè)采集的數(shù)據(jù)用直線連接起來,這樣就可以完成地物的繪制。如果地物比擬復(fù)雜,點位比擬多,如果采用循環(huán)完成者一工作就會十分簡便,按照這個思路,接下來我們將編寫程序代碼進行等高線的繪制?!纠康匚稂c的坐標(biāo)點為:〔4,0〕、〔8,0〕、〔8,2.0〕、〔5.0,2.0〕、〔5.0,6.0〕、〔4.0,6〕、〔4.0,4.0〕、〔2,4〕、〔2,3.0〕、〔4,3.0〕,根據(jù)這些坐標(biāo)數(shù)據(jù),編寫程序進行地物的繪制。編寫程序代碼如下:;用戶定義函數(shù)和變量:(defunc:dh(/ijp1p2);輸入起始點坐標(biāo):(setqp1(getpoint"\n輸入起始點:"));輸入所繪圖形的點數(shù):(setqi(getint"\n輸入點數(shù):"));把第一點賦值,記住第一點:(setqp3p1);將測量專業(yè)使用的坐標(biāo)轉(zhuǎn)換成繪圖坐標(biāo):(setqp3(reversep3))(setqp3(cdrp3))(setqp1p3);將循環(huán)控制器j賦值:(setqj0);使用循環(huán)輸入坐標(biāo)點:(while(<ji)(setqp2(getpoint"\n輸入下一點:"));將輸入的坐標(biāo)點轉(zhuǎn)換坐標(biāo)系:(setqp2(reversep2))(setqp2(cdrp2));繪制圖形:(command"line"p3p2"");將輸入的點賦值第一點,為下一個點的繪圖做準(zhǔn)備:(setqp3p2);使循環(huán)控制器增值,為下一點做準(zhǔn)備:(setqj(1+j)));是繪制的圖形閉合:(command"line"p1p2"c"))程序加載過程及運行結(jié)果如以下圖5.9:圖5.9程序加載過程及運行結(jié)果上例中是根據(jù)坐標(biāo)點數(shù)據(jù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建材經(jīng)營代理合同范例
- 買股權(quán)合同范例
- 公司協(xié)議收購合同范例
- 銀行電子合同范例
- 限高架施工合同范例
- 化妝造型合同范例
- 內(nèi)河拖船轉(zhuǎn)讓合同范例
- 雙方墊資合同范例
- 采購咨詢合同范例
- 產(chǎn)品推廣服務(wù)合同范例
- GB/T 16823.3-1997螺紋緊固件擰緊試驗方法
- 傷口造口學(xué)習(xí)匯報課件
- 招標(biāo)代理成果文件質(zhì)量保證措施
- 水稻生產(chǎn)技術(shù)知識考核試題及答案
- 教科版八年級下冊物理《力的描述》參考課件
- AGV智能小車循跡系統(tǒng)的建模與仿真
- 中心極限定理的應(yīng)用
- 家庭室內(nèi)裝飾裝修工程保修單
- 有效減輕中小學(xué)生課業(yè)負(fù)擔(dān)的實踐研究開題報告
- 應(yīng)急照明裝置安裝施工方法
- E5015焊條成分設(shè)計及焊接性能分析
評論
0/150
提交評論