俗話說"熟能生巧",在長期從事AUTOLISP程序設計的實踐中,我總結出(當然也參考了其他朋友的經驗)了部分編程技巧,僅供大家參考! 1)載入程序之前應先判斷文件是否已經被載入 在調用用戶自己定義的函數之前,應先將包含該函數的文件調入內存(LOAD "文件").但如果每次調用前都載入該程序,則會浪費很多時間.因此判別文件是否已經調入內存,則是非常重要的,這種用法在菜單文件十分普遍 .. [RECTAN]( if (not rectan) (load "les2"));(rectan); .. 在文件內同樣可以實現同樣的檢測 2)抑制函數運行后返回nil 在一個Autolisp函數運行結束后,它常會在命令行上返回一個nil,令人遺憾。其實只要我們問在該函數的最後一行加上(PRINC)語句后,即可抑制nil的產生。 當然如果對需要一個結果的函數,則不可採用此法。 3)幾個自動執行函數 a)載入自動執行函數 定義 (defun s::startup() ... ) 一旦該函數在acad.lsp函數中定義,在autocad啟動時,就會自動載入該函數. b)存檔自動執行函數 定義 (defun S::save() .... ) 該函數與(s::startup)相似,在存儲文件時將會被自動執行.例如:在保存文件時,對被保存文件生成備份文件等,就可能需要此功能文件 c)退出時自動執行文件 定義 (defun s::exit() ... ) 4)怎樣判斷兩個實數相等 對於計算出來的實數,即使真的相等,但對計算機來說,其往往不是絕對相等(如2.00 與2.000就不等).因此判斷其相等就需要採用差值方法 (equal expr1 expr2 [FUZZ]) 其中任選項FUZZ指定表達式EXPR1 EXPR2 的最大允許差值.即如果實際差值小於FUZZ,則判斷結果為真,反之為假. (if (equal a b 0.001) (prompt "These numbers are equal") (prompt "These numbers are not equal") ) 5)取系統的環境變數 對編製自己的系統來說,最好將自己的所有編製程序集中在自己獨立的目錄下,如\acad\lisp等.然後在將該目錄添加到ACAD環境中. 在自己編製的程序中,為了確保所要調用函數或文件在AUTOCAD的搜索路徑下,就需要判斷自己編製的程序目錄是否在ACAD環境內.此時就要用(getnev)函數 如(setq nev (getenv "acad")) 其將返回ACAD系統環境,如"C:\\ACAD\\SUPPORT;C:\\ACAD\\FONTS;C:\\ACAD\\LISP" |