AutoLISP從入門到精通初級教程(新手必備)
《AutoLISP從入門到精通初級教程(新手必備)》由會員分享,可在線閱讀,更多相關(guān)《AutoLISP從入門到精通初級教程(新手必備)(36頁珍藏版)》請在裝配圖網(wǎng)上搜索。
AutoLISP 入門 單元一 AutoLISP 主角登場 2 單元二 AutoLISP 的關(guān)鍵 基本結(jié)構(gòu)及語法 4 單元三 快速分類瀏覽 AutoLISP 功能函數(shù) 一 10 單元四 快速分類瀏覽 AutoLISP 功能函數(shù) 二 13 單元五 輕松快速的掌握 AutoLISP 設(shè)計技巧 16 單元六 圖元數(shù)據(jù)的取得與活用技巧 一 21 單元七 圖元數(shù)據(jù)的取得與活用技巧 二 25 單元八 新手上路 參數(shù)設(shè)計的關(guān)鍵技巧 32 單元一 AutoLISP 主角登場 一 AutoLISP 是何方神圣 1 AutoLISP 是 AutoCAD 的最佳拍檔 2 AutoLISP 內(nèi)含于 AutoCAD 軟件內(nèi) 不用另外花錢買 3 AutoLISP 是強化 AutoCAD 最好 最直接的 程序語言 4 AutoLISP 易學(xué) 易用 即使不會程序設(shè)計的 AutoCAD 使用者 都能在最短的 時間內(nèi) 寫出令人 驚訝 贊嘆的功能 若說 AutoLISP 的出現(xiàn) 是替 AutoCAD 創(chuàng)造一片天的 最大功臣 實不為過一點也不夸張 5 AutoLISP 希望您去學(xué)習(xí)它 改善它 發(fā)揮它 享受它 真的 它的威力 魅力無窮 二 AutoLISP 程序語言的特質(zhì)分析 學(xué)習(xí) AutoLISP 是非常容易的 對初學(xué)者而言 即使沒有學(xué)習(xí)過任何的程序語言 都能很快的上手 寫 出精彩漂亮的 AutoLISP 程序 語法簡單 不用特殊的變量宣告 非常富有彈性 比起其它的程序語言 它的語法可說是非常簡單而 有其獨特的風(fēng)格 功能函數(shù)強大 除一般性的功能函數(shù)外 又擁有為數(shù)不少控制配合 AutoCAD 的特殊函數(shù) 再加上 AutoLISP 可直接呼叫執(zhí)行所有 AutoCAD 的指令 以及掌握運用所有的 AutoCAD 系統(tǒng)變量 功能之 強大令人欣喜不已 撰寫的環(huán)境不挑剔 只要是一般的文書編輯軟件都適用 如 Windows 的記事本 PE2 PE3 DW3 書中仙 漢書 EDIT 等 直譯式程序 不用再作編譯 即寫即測 即測即用 馬上可以在 AutoCAD 中響應(yīng)效果 馬上就 有成就感 橫跨各作業(yè)平臺 悠然自得 雖然 AutoCAD 有 DOS Windows 版本之分但是 AutoLISP 卻可在不 改寫的原貌下 加載與執(zhí)行 三 撰寫 AutoLISP 的動機 1 欲強化 AutoCAD 原有指令時 2 欲創(chuàng)造更有用的 AutoCAD 新指令 3 欲簡化繁瑣的環(huán)境設(shè)定或繪圖步驟時 4 欲處理參數(shù)式繪圖時 5 欲做圖面資料讀文件 寫文件 6 欲做 AutoCAD 簡報展示時 7 欲達到真正靈活掌控 AutoCAD 時 8 欲提升自己跨上 AutoCAD 高手列車時 四 AutoLISP 的效益評估 1 對公司負責(zé)人或設(shè)計主管而言 A 也許某員工或干部花了 20 個小時撰寫一個 AutoLISP 程序 表面上 這將近三天的時間 他連一 張圖都沒有畫 甚至可能偶有發(fā)呆 沈思 若此程序一天可以替公司繪圖部門節(jié)省 1 小時繪圖時間 那算一算 只要 20 天就抵銷開發(fā)成本 而 20 天以后都是賺的 用的愈久 省的愈多 B 若員工皆有此動力 在不影響正常工作 鼓勵 都來不及 那有 壓抑 的道理 甚至還要派遣 優(yōu)秀人員出去受訓(xùn) 學(xué)習(xí)更好的設(shè)計技巧與創(chuàng)意呢 C 千萬不要因為您的不懂或壓抑 SHOW 您的權(quán)威與 POWER 如此 不但對員工造成打擊 甚至您 可能成為阻礙了公司計算機化進步的罪魁禍?zhǔn)?D 當(dāng)然 若要撰寫的程序很多 內(nèi)部設(shè)計人員的程序功力距離太遠 達成需求的時間反而變得遙遙 無期 那倒不如求助于市面上已有的相關(guān) AutoCAD 支持軟件 2 對設(shè)計人員而言 A 得到一筆提升績效獎金呢 當(dāng)然 無形中 AutoCAD 高手的封號 也將功力又往前邁出了一 大步 對個人的成長幫助匪淺 幸運的話 搞不好還可以黃袍加身 不亦樂乎 B 半桶水 響叮當(dāng) 千萬不要因為會寫 AutoLISP 程序而自傲 孤僻 囂張起來 功力的增長 只是讓您有更多 服務(wù)他人 服務(wù)公司 的機會 若自恃過重 寧可不要 C AutoLISP 程序功力的累進 是無遠弗屆的 千萬不要 孤芳自賞 人外有人 天外有天 也許 您覺得是 寶貝加三級 的程序 只是其它設(shè)計師基本程序中的一部份罷了 D 既然 AutoLISP 是 AutoCAD 的 最大功臣 當(dāng)然不會輕易被舍棄 如此 您的學(xué)習(xí) 保證不會 白費 E 精益求精 虛心求教 用心學(xué)習(xí) 觀摩 決心成為高手 3 對程序本身而言 A 少少的幾行 卻可能有 大大滿意 的時候 B 充份掌握了控制 創(chuàng)造 AutoCAD 的 尚方寶劍 讓您在 AutoCAD 的設(shè)計運作中 得心應(yīng) 手 享受無比的快樂與成就感 五 如何有效的學(xué)習(xí) AutoLISP 1 先由小程序著手 認識 AutoLISP 語法規(guī)定 2 瀏覽所有的 AutoLISP 功能函數(shù) 重要的功能函數(shù)要熟記腦海 俗語說的好 一回生 二回熟 除 非您不用心 否則沒有學(xué)不好的道理 3 要懂得偷懶 不要認為在繪圖的過程中 繁瑣的步驟是合理的 困難的繪圖過程是必須忍耐的 試 著用 AutoLISP 解決看看 4 多觀摩別人的程序設(shè)計 吸取精華 像海棉一樣 吸 吸 吸 5 動手 寫 程序比用眼睛看程序 更能夠領(lǐng)略深記腦海 6 隨時隨地整理您的程序 并加以批注 以免因時間的飛逝 當(dāng)時用心的成果也煙消云散 忘的一乾 二凈 7 決心 是學(xué)好 AutoLISP 最重要的關(guān)鍵 8 期許自己 要由操作者變成創(chuàng)造者 單元二 AutoLISP 的關(guān)鍵 基本結(jié)構(gòu)及語法 一 學(xué)好 AutoLISP 的關(guān)鍵 基本結(jié)構(gòu)與語法 1 AutoLISP 程序語言的特質(zhì) A 語法簡單 B 功能函數(shù)強大 C 撰寫的環(huán)境不挑剃 D 直譯式程序 即寫即測 即測即用 E 橫跨 AutoCAD 各作業(yè)平臺 悠然自得 注 以上五點 讀者可以參考上一章的剖析 2 學(xué)好 AutoLISP 的關(guān)鍵 充份掌握 語法結(jié)構(gòu) 后的內(nèi)容均為批注 程序不處理 適時的增加批注 將使程 序更具可看性 學(xué)習(xí)性及完整性 規(guī)則 11 AutoLISP 最常用的變量型態(tài)是 整數(shù) 實數(shù) 字符串 點串行 四種 變量的 型態(tài)依據(jù)設(shè)定值而自動定義 變量會一直儲存該值 直到被重新設(shè)定值或繪圖結(jié)束自動消失 規(guī)則 12 以 setq 功能函數(shù)設(shè)定變量值 setq 變量名稱 設(shè)定值 規(guī)則 13 欲在 AutoCAD 的環(huán)境中 查看一變量值 指令 下鍵入 變量名 即可 規(guī)則 14 以 defun C 函式名 自變量 變數(shù) 程序中 程序中的變量若在 右邊變量內(nèi) 則 稱為 區(qū)域變量 否則為 整體變量 二 學(xué)好 AutoLISP 的關(guān)鍵 充份掌握 語法結(jié)構(gòu) 后的內(nèi)容均為批注 程序不處理 適時的增加批注 將使程 序更具可看性 學(xué)習(xí)性及完整性 范例 pp lsp 內(nèi)容如下 本程序功能可快速畫門 窗 設(shè)計者 QQ 博士 版權(quán)所有 歡迎使用 defun c pp 以下為畫門子程序 以下為畫窗子程序 規(guī)則 11 AutoLISP 最常用的變量型態(tài)是 整數(shù) 實數(shù) 字符串 點串行 四種 變量的型 態(tài)依據(jù)設(shè)定值而自動定義 變量會一直儲存該值 直到被重新設(shè)定值或繪圖結(jié)束自動消失 規(guī)則 12 以 setq 功能函數(shù)設(shè)定變量值 setq 變量名稱 設(shè)定值 范例 setq a 100 變量 a 值設(shè)定成整數(shù) 100 setq b 123 56 變量 b 值設(shè)定成實數(shù) 123 56 setq c Good morning 變量 c 值設(shè)定成字符串 setq pt1 getpoint Enter POINT 變量 pt1 值設(shè)定成點串行 setq pt2 list a b 此時 a 值是 100 b 值是 123 56 變量 pt2 值設(shè)定成點串行 100 123 56 setq pt3 297 210 變量 pt3 值設(shè)定成點串行 297 210 注意 直接設(shè)定成點串行時 不能省略單引號 否則會被誤認 297 210 又是一個表達式 297 是 操作數(shù)而出錯 規(guī)則 13 欲在 AutoCAD 的環(huán)境中 查看一變量值 指令 下鍵入 變量名 即可 范例 指令 setq aa 100 75 傳回 175 指令 aa 傳回 175 指令 setq pp list 90 50 傳回 90 50 指令 pp 傳回 90 50 指令 ww 傳回 nil 空值無設(shè)定 規(guī)則 14 以 defun C 函式名 自變量 變數(shù) 程序中 程序中的變量若在 右邊變量內(nèi) 則 稱為 區(qū)域變量 否則為 整體變量 注 在 AutoLISP 中 未賦予值的變量 其值皆響應(yīng) nil 區(qū)域變量 于此程序執(zhí)行完畢后 其值自動消失 整體變量 于此程序執(zhí)行完畢后 其值仍然存在 范例 test lsp 內(nèi)容如下 defun c tt sa sb sc setq sa 100 setq sb 20 setq sc 10 setq sd sa sb sc 回到 指令 鍵入 load tt 傳回 c tt 指令 tt 傳回 130 指令 sa 傳回 nil 屬區(qū)域變量 指令 sb 傳回 nil 屬區(qū)域變量 指令 sc 傳回 nil 屬區(qū)域變量 指令 sd 傳回 130 屬整體變量 單元三 快速分類瀏覽 AutoLISP 功能函數(shù) 一 一 看到以下那么多的 AutoLISP 功能函數(shù) 洋洋灑灑 17 大類 1 您第一個念頭 一定驚訝怎么會那么多 您可能快嚇壞了 2 您第二個念頭 一定會想 那么多 怎么記得下來 您可能快放棄了 二 其實 您應(yīng)該要 很興奮 而 充滿信心 的 怎么說呢 1 您有那么多的 大將 協(xié)助您撰寫 AutoLISP 程序 當(dāng)然左右又逢源 不但輕松 而且要快樂的 不得了 2 這些函數(shù)只要您先瀏覽有印象 要用時 再翻查該函數(shù) 了解用途語法再加入到您的程序中就可 以了 3 常用的函數(shù) 寫久 用久后 自然會深深牢記腦海 想忘都很難 不常用的函數(shù) 若硬要您記下來 相信連高手都很困難 更何況是初學(xué)的您 4 您不用再摸不著頭緒了 因為您幸運的擁有了本書 就是您成功的開始 第一類 數(shù)學(xué)運算功能函數(shù) 項目 函數(shù)語法 傳 回 1 1 數(shù)值 數(shù)值 累計實數(shù)或整數(shù)數(shù)值 1 2 數(shù)值 數(shù)值 減去數(shù)值 1 3 數(shù)值 數(shù)值 所有數(shù)值乘積 1 4 數(shù)值 數(shù)值 第一個數(shù)值除以第二個以后數(shù)值的商 1 5 1 數(shù)值 數(shù)值 1 1 6 1 數(shù)值 數(shù)值 1 1 7 abs 數(shù)值 數(shù)值的絕對值 1 8 atan 數(shù)值 反正切值 1 9 cos 角度 角度的余弦值 角度值為弧度 1 10 exp 數(shù)值 數(shù)值的指數(shù) 1 11 expt 基數(shù) 指數(shù) 基數(shù)的指數(shù)值 1 12 fix 數(shù)值 將數(shù)值轉(zhuǎn)換為整數(shù)值 取整 1 13 float 數(shù)值 將數(shù)值轉(zhuǎn)換為實數(shù)值 1 14 gcd 數(shù)值 1 數(shù)值 2 二數(shù)值的最大公因子 greatest common divisor 1 15 log 數(shù)值 數(shù)值的自然對數(shù)值 相當(dāng)于 ln e 2 71828182845904523 1 16 max 數(shù)值 數(shù)值 數(shù)值中的最大值 1 17 min 數(shù)值 數(shù)值 數(shù)值中的最小值 1 18 pi 常數(shù) p 其值約為 3 1415926 1 19 rem 數(shù)值 1 數(shù)值 2 二數(shù)值的相除的余數(shù) remainder 1 20 sin 角度 角度的正旋值 角度值為弳度 1 21 sqrt 數(shù)值 數(shù)值的平方根 第二類 檢驗 A Z 65 90 5 2 chr 整數(shù) 整數(shù)所對應(yīng)的 ASCII 單一字符串 5 3 close 文件名稱 關(guān)閉檔案 5 4 open 文件名 模式 開啟檔案代碼 準(zhǔn)備讀取或?qū)懭霐?shù)據(jù) 5 5 read 字符串 串行中的字符串的第一組元素 5 6 read char 檔案代碼 經(jīng)由鍵盤或檔案中讀取單一字符 5 7 read line 檔案代碼 經(jīng)由鍵盤或檔案中讀取一行字符串 5 8 strcase 字符串 字樣 轉(zhuǎn)換字符串大小寫 5 9 strcat 字符串 1 字符串 2 將各字符串結(jié)合成一字符串 5 10 strlen 字符串 字符串構(gòu)成的字符數(shù) 即字符串長度 5 11 substr 字符串 起始 長度 取出子字符串 5 12 wcmatch 字符串 格式 T 或 nil 將字符串與通用字符進行比對 5 13 write char 數(shù)值 檔案代碼 將一 ASCII 字符寫到檔案或屏幕 5 14 write line 字符串 檔案代碼 將字符串寫到檔案或屏幕上 第六類 等待輸入功能函數(shù) 項目 函數(shù)語法 傳 回 6 1 getangle 基點 提示 請求輸入十進制角度數(shù)值 響應(yīng)一弧度值提示及參考點可有可無 6 2 getcorner 基點 提示 請求輸入另一矩框?qū)屈c坐標(biāo) 6 3 getdist 基點 提示 請求輸入一段距離 6 4 getint 提示 請求輸入一整數(shù)值 6 5 getkword 提示 請求輸入 關(guān)鍵詞 6 6 getorient 基點 提示 請求輸入十進制角度 響應(yīng)一弧度值不受 angbase angdir 影響 6 7 getpoint 基點 提示 請求輸入一個點坐標(biāo) 6 8 getreal 提示 請求輸入一實數(shù) 6 9 getstring 提示 請求輸入一字符串 6 10 initget 位 字符串 設(shè)定下次 getxxx 函數(shù)的有效輸入 第七類 幾何運算功能函數(shù) 項目 函數(shù)語法 傳 回 7 1 angle 點 1 點 2 取得二點的角度弧度值 7 2 distance 點 1 點 2 取得二點的距離 7 3 inters 點 1 點 2 點 3 點 4 模式 取得兩條線的交點 7 4 osnap 點 模式字符串 依輔助抓點模式取得另一坐標(biāo)點 7 5 polar 基點 弧度 距離 依極坐標(biāo)法取得另一坐標(biāo)點 7 6 textbox 圖元串行 取得文字符串的二對角點坐標(biāo) 第八類 圖元處理功能函數(shù) 項目 函數(shù)語法 傳 回 8 1 entdel 圖元名稱 刪除或逆刪除圖元 8 2 entget 圖元名稱 應(yīng)用程序串行 取出圖元名稱的數(shù)據(jù)串行 8 3 entlast 取出圖形數(shù)據(jù)中的最后一個圖元 8 4 entmake 圖元串行 建立一個新的圖元串行 8 5 entmod 圖元串行 依更新的數(shù)據(jù)串行更新屏幕上元體 8 6 entnext 圖元名稱 找尋圖面中的下一個圖元 8 7 entsel 提示 請求選取一個圖元 響應(yīng)包含圖元名稱及選點坐標(biāo)的串行 8 8 entupd 圖元名稱 更新屏幕上復(fù)元體圖形 8 9 handent 圖碼 圖碼的元體名稱 8 10 nentsel 提示 BLOCK 所含副元體圖元數(shù)據(jù)串行 8 11 nentselp 提示 點 BLOCK 所含副元體圖元數(shù)據(jù) 以 4 x 4 矩形表示 單元四 快速分類瀏覽 AutoLISP 功能函數(shù) 二 第九類 選擇集 符號表處理功能函數(shù) 項目 函數(shù)語法 傳 回 9 1 ssadd 圖元名稱 選擇集 將圖元加入選擇集或建立一新選擇集 9 2 ssdel 圖元名稱 選擇集 將圖元自選擇集中移出 9 3 ssget 模式 點 1 點 2 取得一個選擇集 9 4 ssget X 過濾串行 取得依過濾串行所指定范圍的選擇集 9 5 sslenth 選擇集 計算選擇集的圖元個數(shù) 9 6 ssmemb 圖元名稱 選擇集 響應(yīng)圖元名稱是否包含于選擇集內(nèi) 9 7 ssname 選擇集 索引值 依索引值取出選擇集中的圖元名稱 9 8 tblnext 符號表名稱 T 檢視符號表 有效的符號表 LAYER LTYPE VIEW STYLE BLOCK 9 9 tblsearch 符號表名稱 符號 在符號表中搜尋符號 第十類 AutoCAD 相關(guān)查詢 控制功能函數(shù) 項目 函數(shù)語法 傳 回 10 1 command AutoCAD 指令 呼叫執(zhí)行 AutoCAD 指令 10 2 findfile 檔名 傳回 應(yīng)該文件名的路徑及文件名 10 3 getfiled 標(biāo)題 內(nèi)定檔名 擴展名 旗號 透過標(biāo)準(zhǔn) AutoCAD 檔案對話 DCL 交談框求得檔案 10 4 getenv 環(huán)境變量 取得該環(huán)境變量的設(shè)定值 以字符串表示 10 5 getvar 系統(tǒng)變量 取得該系統(tǒng)變量的設(shè)定值 以字符串表示 10 6 setvar 系統(tǒng)變量 值 設(shè)定該系統(tǒng)變量的值 10 7 regapp 應(yīng)用類項 將目前的 AutoCAD 圖形登記為一個應(yīng)用程序名稱 第十一類 判斷式 循環(huán)相關(guān)功能函數(shù) 項目 函數(shù)語法 傳 回 11 1 if 表示式 2 檢算比較式結(jié)果 如果為真 執(zhí)行否則 執(zhí)行 11 2 repeat 整數(shù) 重復(fù)執(zhí)行次數(shù) 11 3 while 標(biāo)題 內(nèi)定檔名 擴展名 旗號 透過標(biāo)準(zhǔn) AutoCAD 檔案對話 DCL 交談框求得檔案 11 4 cond 環(huán)境變量 取得該環(huán)境變量的設(shè)定值 以字符串表示 11 5 progn 表達式 1 表達式 2 連結(jié)其內(nèi)的表達式為一組 常用于配合 if cond 等函數(shù) 第十二類 函數(shù)處理 定義 追蹤 加上批注 defun c pbox 以下 pa ww hh 值須由使用者輸入 setq pa 請求輸入左下角點 setq ww 請求輸入矩形寬度實數(shù)值 setq hh 請求輸入矩形高度實數(shù)值 以下 pb pc pd 值須由程序依據(jù) pa ww hh 求出 setq pb 依據(jù)相對極坐標(biāo)法求出 pb 點坐標(biāo)值 setq pc 依據(jù)相對極坐標(biāo)法求出 pc 點坐標(biāo)值 setq pd 依據(jù)相對極坐標(biāo)法求出 pd 點坐標(biāo)值 以下依據(jù) pa pb pc pd 點畫矩形 以 pline 指令畫出矩形 以下 mp1 mp2 mp3 mp4 值須由程序依據(jù) pa ww hh 以下依據(jù) mp1 mp2 mp3 mp4 點畫出二條線 以 line 指令畫出 mp1 到 mp3 的線 以 line 指令畫出 mp2 到 mp4 的線 本程序所需的 AutoLISP 功能函數(shù)及其用法 getpoint 基點 提示 請求輸入一個點坐標(biāo) getreal 提示 請求輸入一實數(shù) polar 基點 弧度 距離 依極坐標(biāo)法取得另一坐標(biāo)點 其中 弳度值 之轉(zhuǎn)換為 十進制角度 弳度值 十進制轉(zhuǎn)弳度公式 0 度 0 0 90 度 1 2 pi 2 或 pi 0 5 180 度 pi 270 度 2 3 pi 1 5 N 度 N 180 pi n 180 command AutoCAD 指令 呼叫執(zhí)行 AutoCAD 指令 注意 指令及其副選項皆要用雙引號處理 假設(shè) pa pb pc pd 皆為變量 其值為點坐標(biāo) 正確 command pline pa pb pc pd c 錯誤 command pline pa pb pc pd c 原因 指令 pline 及其副選項 c 皆沒用雙引號括住 錯誤 command pline pa pb pc pd c 原因 副選項 c 代表 close 沒用雙引號括住 會被誤認為是 AutoLISP 的變量名 但事實又沒有 c 這個變數(shù) 錯誤 command pline pa pb pc pd c 原因 變數(shù) pa pb pc pd 不須用雙引號括住 注意 副選項中 若使用 連續(xù)二個雙引號 代表按 ENTER 鍵 若想畫一條 pa 到 pc 的 LINE 以下 pa ww hh 值須由使用者輸入 setq pa getpoint Enter Left Low Point setq ww getreal Width setq hh getreal Height 以下 pb pc pd 值須由程序依據(jù) pa ww hh 求出 setq pb polar pa 0 ww setq pc polar pb pi 2 hh setq pd polar pc pi ww 以下依據(jù) pa pb pc pd 點畫矩形 command pline pa pb pc pd c 以下 mp1 mp2 mp3 mp4 值須由程序依據(jù) pa ww hh 以下依據(jù) mp1 mp2 mp3 mp4 點畫出二條線 command line mp1 mp3 command line mp2 mp4 4 第四步驟 回到 AutoCAD 下 加載 AutoLISP 程序 若您的 AutoCAD 環(huán)境設(shè)定 中 支持文件搜尋路徑 有加上 c lisptool 則您可輕松載入 pbox lsp 程序 指令 load pbox 傳回 c pbox 或 指令 load pbox 傳回 c pbox 或 指令 load pbox lsp 傳回 c pbox 若您的 AutoCAD 環(huán)境設(shè)定 中 支持文件搜尋路徑 并未加上 c lisptool 則您載入 pbox lsp 程序時 須包含程序所在路徑 錯誤的加載 指令 load pbox 會出現(xiàn) 無法開啟 pbox lsp 做輸入 錯誤 加載失敗 LOAD pbox 取消 正確的加載方式 指令 load c lisptool pbox 傳回 c pbox 或 指令 load c lisptool pbox 傳回 c pbox 5 第五步驟 執(zhí)行新的 AutoLISP 指令 指令 pbox 成功加載后 直接鍵入 pbox 指令 Enter Left Low Point 請給一左下角點 Width 給一實數(shù)當(dāng)寬度 例如 100 Hieght 給一實數(shù)當(dāng)高度 例如 50 指令 nil 指令 三 PBOX LSP 程序產(chǎn)生的問題 以下 pa ww hh 值須由使用者輸入 setq pa getpoint Enter Left Low Point setq ww getdist pa nWidth setq hh getdist pa nHeight 以下 pb pc pd 值須由程序依據(jù) pa ww hh 求出 setq pb polar pa 0 ww setq pc polar pb pi 2 hh setq pd polar pc pi ww 以下依據(jù) pa pb pc pd 點畫矩形 指令 pline pa pb pc pd c 以下 mp1 mp2 mp3 mp4 值須由程序依據(jù) pa ww hh 以下依據(jù) mp1 mp2 mp3 mp4 點畫出二條線 指令 line mp1 mp3 指令 line mp2 mp4 prin1 prompt prin1 四 本章結(jié)語 經(jīng)由簡單的 PBOX LSP 程序設(shè)計全程演練 從 產(chǎn)生動機 預(yù)期目標(biāo) 構(gòu)思程序流程 相關(guān) 變量訂定 撰寫程序 加載程序 執(zhí)行 PBOX 指令 改良 PBOX LSP 相信您已能更了解 AutoLISP 是怎么回事了 短短的十幾行 能做的事卻不少 一路循序漸進練習(xí)下 來 您應(yīng)該覺得一點兒也不吃力 游刃有余 才對 果真如此 那恭喜您 好戲還在后頭 還有體 力的話 就繼續(xù) 征服下一章 吧 若您仍覺得有點 迷迷糊糊 那就休息一下 配合復(fù)習(xí)第二章 學(xué)好 AutoLISP 的關(guān)鍵 基本結(jié)構(gòu) 與語法 再好好的把第四章 看 指令執(zhí)行過程不響應(yīng) 以下為 INPUT 圖元選取 setq en entsel 選取已知圓 要求碰選一個圓 以下為圖元數(shù)據(jù)取得元體資料串行 setq old rad list assoc 40 en data 取得半徑子串行 setq old rr cdr rad list 取得舊有半徑 princ n 舊半徑 princ old rr 顯示該舊圓半徑值于指令區(qū) 以下為新半徑輸入一口氣取得圓之圓心 setq new rr getdist cenpt New Radius 要求輸入一半徑值 setq new rad list cons 40 new rr 產(chǎn)生新半徑子串行 setq en data subst new rad list old rad list en data 新舊交替 entmod en data 依新圖元數(shù)據(jù)自動更新圓半徑 prin1 何作用 在程序結(jié)束前加上 prin1 目的是不讓命令行出現(xiàn) nil prompt prin1 程序執(zhí)行 請先在畫面上任意的畫一些圓 指令 load chgrad 回應(yīng) 指令 CHGRAD 選取已知圓 碰選畫面上已有的圓 新半徑 20 輸入一半徑值 范例二 請撰寫一個 MCIR LSP 當(dāng)碰選畫面上的 LINE 時 會在該線的中點 Midpoint 產(chǎn)生一個圓 此 程序的執(zhí)行過程要求如下 指令 MCIR Select a LINE 選擇畫面上已有的線 Circle Radius 要求輸入一半徑值 MR 可給整數(shù) 實數(shù)或拉一段距離 自動的在該線的中點畫出一個半徑值為 MR 的圓 該如何設(shè)計 MCIR LSP 呢 解題關(guān)鍵 先取得線的二端點坐標(biāo) pt1 px1 py1 指令執(zhí)行過程不響應(yīng) setq en entsel Select a LINE 要求碰選一條線 setq en data entget car en 取得元體資料串行 求得 pt1 取得群碼 10 的子串行 setq pt1 cdr pts 取得起點 pt1 坐標(biāo) setq px1 car pt1 取得 pt1 坐標(biāo)的 x 值 setq py1 cadr pt1 取得 pt1 坐標(biāo)的 y 值 求得 pt2 取得群碼 11 的子串行 setq pt2 cdr pte 取得終點 pt2 坐標(biāo) setq px2 car pt2 取得 pt2 坐標(biāo)的 x 值 setq py2 cadr pt2 取得 pt2 坐標(biāo)的 y 值 求得 mx 求得 mx 值 setq my py1 py2 2 求得 my 值 setq mpt list mx my 結(jié)合 mx Input 要求輸入半徑值 command circle mpt mr 完成中點畫圓 prin1 prompt prin1 程序執(zhí)行 請先在畫面上任意的畫一些線 指令 load mcir 回應(yīng) 指令 MCIR Select a LINE 碰選畫面上已有的線 Circle Radius 20 輸入半徑 20 注意 1 變數(shù)值查詢 您若想進一步查詢執(zhí)行后變量值 沒問題 請搭配 驚嘆號 變量名 輸 入在 指令 后如 en en data pts pt1 px1 py1 pte pt2 px2 py2 mx my mpt mr 2 以上程序中所用到的變量 讀者皆可自行命名 以方便 好記 不會混淆為原則 3 若不加上最后兩行 prompt prin1 則程序在加載后 將只響應(yīng) c mcir 4 建議讀者們養(yǎng)成加入最后兩行的習(xí)慣 以免未來程序越來越大 加載程序后 根本無從知道該如 何執(zhí)行此 LISP 程序 因為程序內(nèi)可能有好幾個 C XX 的指令函數(shù) 也可能有很多子程序 范例三 請撰寫一個 CPOLY5 LSP 碰選 CIRCLE 后 自動產(chǎn)生一個圓內(nèi)接正五邊形 此程序的執(zhí) 行過程要求如下 指令 cpoly5 Select CIRCLE 碰選畫面上已有的圓 自動產(chǎn)生一個內(nèi)接正五邊形 OK 該如何設(shè)計 CPOLY5 LSP 呢 解題關(guān)鍵 先取得圓的圓心點坐標(biāo) cenpt 設(shè)定變量 cmdecho 0 關(guān)閉指令響應(yīng) setq en entsel Select CIRCLE 要求碰選一個圓 setq en data entget car en 取得元體資料串行 setq cenpt cdr assoc 10 en data 求得圓心坐標(biāo)串行 setq rr cdr assoc 40 en data 求得半徑 rr command polygon 5 cenpt i rr 完成圓內(nèi)接正五邊形 prin1 prompt prin1 程序執(zhí)行 請先在畫面上任意的畫一些圓 指令 load cpoly5 回應(yīng) 指令 CPOLY5 Select CIRCLE 碰選畫面上已有的圓 OK 完成一個內(nèi)接正五邊形 范例四 請撰寫一個 CIRSCA LSP 其內(nèi)有二個可執(zhí)行函數(shù) CIRA 碰選 CIRCLE 后 原 CIRCLE 大小自動縮為原來的 1 2 CIRB 碰選 CIRCLE 后 原 CIRCLE 大小自動放大為原來的 2 倍 此程序的執(zhí)行過程要求如下 指令 cira Select CIRCLE to 碰選畫面上已有的圓 自動產(chǎn)生 CIRCLE 大小自動縮為原來的 1 2 指令 cirb Select CIRCLE to 碰選畫面上已有的圓 自動產(chǎn)生 CIRCLE 大小自動放大為原來的 2 倍 該如何設(shè)計 CIRSCA LSP 呢 解題關(guān)鍵 用 entget 函數(shù)取得圓的元體資料串行 cir data 用 assoc 函數(shù)取得群碼 40 的半徑 子串行 rad list 并以 cdr 取得半徑值 old r 再依此值作放大 2 倍或縮小一半新的半徑子串行可以用 cons 函數(shù)結(jié)合群碼 40 取得元體資料串行 setq old rad list assoc 40 cir data 取得原半徑子串行 setq old r r cdr rad list 求得半徑 old r setq new rr old rr 0 5 求得新半徑 new r setq new rad list cons 40 new rr 產(chǎn)生新半徑子串行 setq cir data subst new rad list old rad list cir data entmod cir data prin1 defun c cirb setvar cmdecho 0 setq cir entsel Select CIRCLE to setq cir data entget car cir 取得元體資料串行 setq old rad list assoc 40 cir data 取得原半徑子串行 setq old r r cdr rad list 求得半徑 old r setq new rr old rr 2 求得新半徑 new r setq new rad list cons 40 new r 產(chǎn)生新半徑子串行 setq cir data subst new rad list old rad list cir data entmod cir data 畫面上元體更新 prin1 prompt prin1 程序執(zhí)行 請先在畫面上任意的畫一些圓 指令 load cirsca 回應(yīng) 指令 cira Select CIRCLE to 碰選畫面上已有的圓 OK 完成一個縮小為 1 2 倍的圓 指令 cirb Select CIRCLE to 碰選畫面上已有的圓 OK 完成一個放大為 2 倍的圓 六 測驗練習(xí)直接取得第一點 setq pt2 cdr assoc 11 en data 直接取得第二點 setq mx car pt1 car pt2 2 求得中點 X 坐標(biāo) setq my cadr pt1 cadr pt2 2 求得中點 Y 坐標(biāo) setq mpt list mx my setq mr getdist mpt Circle Radius 要求輸入半徑值 command circle mpt mr 完成中點畫圓 prin1 prompt prin1 特殊解法 配合函數(shù) OSNAP 選取時點選坐標(biāo) setq mpt osnap pts mid 直接取得中點 mid 終點 end 圓心 center setq mr getdist mpt Circle Radius 要求輸入半徑值 command circle mpt mr 完成中點畫圓 prin1 prompt prin1 再改寫 MCIR2 LSP MCIR3 LSP 程序而且以類似標(biāo)準(zhǔn) circle 指令的半徑拖動模式出現(xiàn) defun c mcir3 setvar cmdecho 0 setq en entsel Select a LINE setq pts cadr en setq mpt osnap pts mid command circle mpt pause 注意 pause 的用法 prin1 prompt prin1 七 本章結(jié)語 圖元數(shù)據(jù)的取得以下 pa ww kk 值須由使用者輸入 setq pa 請求輸入左下角點 setq ww 請求輸入直角三角形底邊長度 setq kk 請求輸入直角三角形斜邊長度 以下 pb pc hh 值須由程序依據(jù) pa ww kk 求出 setq pb 依據(jù)相對極坐標(biāo)法求出右下角 pb 點坐標(biāo) setq hh 依據(jù) ww以下依據(jù) pa pb pc 點畫出直角三角形 將 hh 的結(jié)果響應(yīng)在指令區(qū) 畫出直角三角形 以下將三角形二夾角自動求出 并顯示在指令區(qū) setq ang pb 依據(jù)反正切求 pb 夾角弳度值 setq ang pb 將 ang pb 改推算成十進制角度值 setq ang pc 依據(jù) 90 度減去 ang pb 求得 ang pc 夾角 將 PB 的夾角響應(yīng)在指令區(qū) 將 PC 的夾角響應(yīng)在指令區(qū) prin1 步驟三 撰寫 5test1 lsp 并儲存到 C LISPTOOL 資料夾內(nèi) defun c 5test1 以下 pa ww kk 值須由使用者輸入 setq pa getpoint 請輸入直角三角形左下角點 setq ww getreal n 請輸入直角三角形底邊長度 setq kk getreal n 請輸入直角三角形斜邊長度 以下 pb pc hh 值須由程序依據(jù) pa ww kk 求出 setq pb polar pa 0 ww setq hh sqrt kk kk ww ww setq pc polar pa pi 2 hh 以下依據(jù) pa pb pc 點畫出直角三角形 princ n 另一邊 hh 的長度 princ hh command line pa pb pc c 用 PLINE 也可以 以下將三角形二夾角自動求出 并顯示在指令區(qū) setq ang pb atan hh ww setq ang pb ang pb 180 pi setq ang pc 90 ang pb princ nPB 的夾角 princ ang pb princ 度 princ nPC 的夾角 princ ang pc princ 度 prin1 prompt n 自動直角三角形繪制 prin1 步驟四 執(zhí)行程序 5test1 lsp 指令 load 5test1 加載程序 自動直角三角形繪制 傳回之訊息 指令 5test1 請輸入直角三角形左下角點 請給一左下角點 請輸入直角三角形底邊長度 請給一實數(shù) 80 請輸入直角三角形斜邊長度 請給一實數(shù) 95 另一邊 hh 的長度 51 2348 PB 的夾角 32 6369 度 PC 的夾角 57 3631 度 執(zhí)行結(jié)果 步驟四 程序改良以下 baspt rad num 值須由使用者輸入 setq baspt 請求輸入基準(zhǔn)點 setq rad 請求輸入小圓半徑 setq num 請求輸入欲相切的小圓數(shù)量 只要能求得 cenpt 點 再以 array 指令配合就萬事 OK 了 以下 ang1 kk cenpt 值須由程序依據(jù) baspt rad num 求出 setq ang1 依據(jù)全圓周除以 num 等分 再除以 2 求得 setq kk 依據(jù) rad 以下依據(jù) cenpt num 配合環(huán)形 array 畫出多圓相切 自動畫出多圓相切 prin1 步驟三 撰寫 5test2 lsp 并儲存到 C LISPTOOL 資料夾內(nèi) defun c 5test2 以下 baspt rad num 值須由使用者輸入 setq baspt getpoint 請求輸入基準(zhǔn)點 setq rad getdist baspt n 請求輸入小圓半徑 setq num getint n 請求輸入欲相切的小圓數(shù)量 只要能求得 cenpt 點 再以 array 指令配合就萬事 OK 了 以下 ang1 kk cenpt 值須由程序依據(jù) baspt rad num 求出 setq ang1 pi 2 num 2 setq kk rad sin ang1 setq ang2 pi 2 ang1 setq cenpt polar baspt ang2 kk 以下依據(jù) cenpt num 配合環(huán)形 array 畫出多圓相切 command circle baspt rad 先畫一個圓 才能 array command array entlast p cenpt num 360 Y prin1 prompt n 自動等圓相切繪制 prin1 步驟四 執(zhí)行程序 5test2 lsp 指令 load 5test2 加載程序 自動等圓相切繪制 傳回之訊息 指令 5test2 請求輸入基準(zhǔn)點 請給小圓基準(zhǔn)點 請求輸入小圓半徑 請給一實數(shù) 30 請求輸入欲相切的小圓數(shù)量 setq kk rad sin ang1 重點 3 因為 ang1 ang2 pi 2 來由推算 所以 setq ang2 pi 2 ang1 或 setq ang2 pi 0 5 ang1 重點 4 因為 rad 的取得 乃以 getdist 方式所以在問半徑時 亦可由屏幕中給一段距離當(dāng)半徑 重點 5 Array 指令后的七個運算子自變量必須配合正常執(zhí)行之順序給與 是相當(dāng)嚴(yán)謹而不是亂湊 的 指令 ARRAY 選取對象 entlast 找到 1 個 前一個動作 剛畫的小圓 選取對象 Enter 結(jié)束選取 矩形數(shù)組 R 環(huán)形數(shù)組 P P 環(huán)形數(shù)組選項 基準(zhǔn) B 給數(shù)組的中心基準(zhǔn)點 5 項目個數(shù) 給一整數(shù) 6 要布滿的角度 逆時鐘 順時鐘 內(nèi)定 360 度 7 復(fù)制時旋轉(zhuǎn)對象 是否旋轉(zhuǎn) 內(nèi)定 Yes 所以才有以 command 函數(shù)呼叫 AutoCAD 指令產(chǎn)生 command array entlast p cenpt num 360 Y 或改寫成 command array L p cenpt num 指令一定要加雙引號 如 array 復(fù)選項一定要加雙引號 如 L P Y 用內(nèi)定值 務(wù)必要加上連續(xù)二個雙引號 如 entlast 是 AutoLISP 標(biāo)準(zhǔn)函數(shù) 可抓取圖面中最后完成的體元是很好用的技巧 請多加注意 七 本章結(jié)語 以 AutoLISP 作參數(shù)設(shè)計是相當(dāng)重要的入門課題 讓原本辛辛苦苦畫半天的圖 經(jīng)由您的 AutoLISP 妙手 短短幾十行 LISP 程序 竟在瞬間完成 那種喜悅與成就感相當(dāng)令人感動的 當(dāng) 然對提升設(shè)計及繪圖效率更是顯而卓著的至于離記憶中很久久以前的三角函數(shù) 您當(dāng)然得再重新 呼喚回來 相信經(jīng)過本章的訣竅分析 您將不再害怕面對三角函數(shù)了 甚至將因三角函數(shù)在您程 序中的發(fā)威 而使您開始喜歡三角函數(shù)了 果真如此 相信爾后其它再多再復(fù)雜的參數(shù)設(shè)計圖形 也難不倒您了 筆者在此先恭喜您參數(shù)設(shè)計若要有專業(yè)的水平 務(wù)必要配合 DCL 交談框設(shè)計 有一個漂亮且容易輸入各種數(shù)據(jù)的交談界面 此部份請參考 AutoLISP DCL 精華寶典下冊 中有詳細的技巧解說希望您在進入下一章之前 務(wù)必務(wù)必把第六單元的二題舉一反三作完確定完 全沒問題后再向下一關(guān)挑戰(zhàn) 否則基礎(chǔ)沒打穩(wěn) 眼高手低 或光看不練 那到時您的 AutoLISP 功力 一定是花拳繡腿 不堪一擊- 1.請仔細閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認領(lǐng)!既往收益都歸您。
下載文檔到電腦,查找使用更方便
15 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- AutoLISP 入門 精通 初級教程 新手 必備
鏈接地址:http://www.820124.com/p-9286180.html