AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~

[已解決]請問下列Lisp程式代表什麼意義

1頁(共2頁) 1, 2  下一步

上一篇主題 下一篇主題 向下

[已解決]請問下列Lisp程式代表什麼意義

發表 由 swcforest 于 2009-11-01, 05:29

(defun *error*()
(princ "錯誤!")
(setvar "osmode" 63)
(princ)
)

請問各位大大
此程式是否是在程式執行過程中
若有錯誤 就重新設定鎖點模式
若我自己的程式 是因為我按了esc離開
是乎沒辦法重新設定鎖點模式
謝謝


swcforest 在 2009-11-03, 15:50 作了第 1 次修改

swcforest
初級會員
初級會員

文章總數 : 104
年齡 : 38
來自 : 台中市南區
職業 : 土木工程設計
愛好 : 遊山玩水及AutoLISP
個性 : 開朗活潑
使用年資 : 六七年了
使用版本 : AutoCAD 2016
積分 : 1
經驗值 : 3650
威望值 : 13
注冊日期 : 2008-07-27
男 天秤座 羊

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 張譽璋 于 2009-11-01, 05:44

你必須重新寫中斷處理的程式程式,程式如下
代碼:
  (defun useerr(s)
    (setq *error* olderr)
    (setvar "osmode" osm)
    (setvar "orthomode" ort)
    (setvar "clayer" la)
    (princ)
  )
另外必須在主程式中加入以下這幾行
(setq osm (getvar "osmode");取出程式執行前預設值
(setq ort (getvar "orthomode")
(setq la (getvar "clayer")
(setq olderr *error* *error* useerr);觸動程式
這行程式就像是一個觸動開關當你按下ECS鍵時他就會跳到
useerr這段副程式執行回復動作,另外程式結束前必須加上以下這一行
(setq *error* olderr);如果無使用ESC鍵,必須將"*error*"回覆成預設功能.

張譽璋
榮譽顧問
榮譽顧問

文章總數 : 303
年齡 : 47
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 4967
威望值 : 624
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
藍鵲12號
男 處女座 狗

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 swcforest 于 2009-11-03, 15:48

感謝張老師指導
最近接受你指導很多
再次感謝
也希望能將問題給大家知道了解
大家能多多學autolisp
一起討論

swcforest
初級會員
初級會員

文章總數 : 104
年齡 : 38
來自 : 台中市南區
職業 : 土木工程設計
愛好 : 遊山玩水及AutoLISP
個性 : 開朗活潑
使用年資 : 六七年了
使用版本 : AutoCAD 2016
積分 : 1
經驗值 : 3650
威望值 : 13
注冊日期 : 2008-07-27
男 天秤座 羊

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 Tiger&蘋果爸 于 2009-11-04, 01:23

swcforest 寫到:感謝張老師指導
最近接受你指導很多
再次感謝
也希望能將問題給大家知道了解
大家能多多學autolisp
一起討論
最近論壇的LISP問題,我也很感謝 張譽璋老師 的無私協助!!
感恩...
害羞

____________________________________________________________________________________
avatar
Tiger&蘋果爸
系統管理員
系統管理員

文章總數 : 17328
年齡 : 41
來自 : 台北市文山區
職業 : AutoCAD顧問
愛好 : 蹓狗/戶外活動/拍照
個性 : 幽默/樂觀/善良
使用年資 : 15↑
使用版本 : AutoCAD 2016
經驗值 : 65328
威望值 : 12862
注冊日期 : 2008-04-23
2D基礎函授 2D進階函授 3D基礎函授 https://i11.servimg.com/u/f11/19/71/67/71/2d3d10.png2D+3D線上 顧問外掛程式 經典問與答讀者 藍鵲1號
2009聚會勳章 2010聚會勳章 2011聚會勳章 2012聚會勳章 2013勳章-2D基礎 2014聚會勳章 2015聚會勳章 2016聚會勳章 串連貼紙成功 男 水瓶座 兔

http://mypaper.pchome.com.tw/kv1012tiger

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 ginse0727 于 2012-10-15, 06:00

又學了一招好用的,謝謝張老師指導!
avatar
ginse0727
高級會員
高級會員

文章總數 : 256
年齡 : 43
來自 : 台北巿
職業 : 帷幕牆
愛好 : 電玩,漫畫,網路小說
個性 : 宅男/正直/死腦筋
使用年資 : 退伍後工作迄今,10年以上
使用版本 : 2012
積分 : 14
經驗值 : 4287
威望值 : 492
發帖精華 : 1
注冊日期 : 2010-07-12
經典問與答讀者 藍鵲61號
2011聚會勳章 男 獅子座 虎

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 djh1006 于 2013-04-24, 16:02

還是不懂耶,請問張老師,此段程式碼要插入我的LISP的哪個地方?
另外這段話具體做法是什麼?
useerr這段副程式執行回復動作,另外程式結束前必須加上以下這一行
(setq *error* olderr);如果無使用ESC鍵,必須將"*error*"回覆成預設功能.


我的程式如下:
;DJH_017.lsp
;作圖線-水平

(defun C:DJH_017(/ PT1 LL)
(graphscr)
(setvar "CMDECHO" 0)
(princ "\nDJH_017")
(setq LL (tblsearch "LAYER" "TEMP"))
(if (= LL nil)(command "-LAYER" "N" "TEMP" "P" "N" "TEMP" ""))
(command "-LAYER" "ON" "TEMP" "T" "TEMP" "U" "TEMP" "")
(setq PT1 1)
(while (/= PT1 nil)
(princ "\n▂▂▂水平作圖線插入點 [Exit離開]:")
(command "-INSERT" "_作圖線_水平" PAUSE "1" "1" "0")
(setq PT1 (getvar "LASTPOINT"))
(command "EXPLODE" PT1)
)
(princ)
)

請張老師指導
avatar
djh1006
中級會員
中級會員

文章總數 : 156
年齡 : 46
來自 : 彰化縣員林鎮中山路二段369巷二弄15-14號
職業 : 沖壓模具設計工程師
愛好 : UG,SOLIDWORKS,AUTOCAD 2D,autolisp
個性 : 內向偏外
使用年資 : 18以上
使用版本 : 2014
積分 : 6
經驗值 : 3460
威望值 : 294
注冊日期 : 2011-06-16
男 獅子座 豬

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 張譽璋 于 2013-04-24, 16:49

加到你程式的最前面即可,(graphscr)這行後方

張譽璋
榮譽顧問
榮譽顧問

文章總數 : 303
年齡 : 47
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 4967
威望值 : 624
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
藍鵲12號
男 處女座 狗

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 張譽璋 于 2013-04-24, 17:02

*error*原本是AutoCAD內定的錯誤訊息,我們將這個訊息拿來當啟動開關,當然程式觸動了之後必須將他還原為原來的狀態,
(setq *error* olderr)此行的功能就是將預先存在olderr變數中的*error*讓*error*回覆為預設的*error*,以便下次錯誤時程式可以再次重複執行useerr副程式。

張譽璋
榮譽顧問
榮譽顧問

文章總數 : 303
年齡 : 47
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 4967
威望值 : 624
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
藍鵲12號
男 處女座 狗

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 djh1006 于 2013-04-26, 13:52

謝謝張老師的指導,程式執行後ok
avatar
djh1006
中級會員
中級會員

文章總數 : 156
年齡 : 46
來自 : 彰化縣員林鎮中山路二段369巷二弄15-14號
職業 : 沖壓模具設計工程師
愛好 : UG,SOLIDWORKS,AUTOCAD 2D,autolisp
個性 : 內向偏外
使用年資 : 18以上
使用版本 : 2014
積分 : 6
經驗值 : 3460
威望值 : 294
注冊日期 : 2011-06-16
男 獅子座 豬

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 Conquerable 于 2013-05-02, 01:55

張老師 請問一下

*錯誤* 功能內部已發生一個錯誤引數太多

上述問題出現是何種原因??



假設我有很多副程式

可以令它在A副程式時按ESC結束LISP

在B副程式時按ESC回到A副程式

請問有辦法嘛??
avatar
Conquerable
初級會員
初級會員

文章總數 : 45
年齡 : 27
來自 : 新北市板橋區
職業 : 繪圖員
愛好 : 繪圖
個性 : 好動
使用年資 : 12
使用版本 : 2000
積分 : 1
經驗值 : 2246
威望值 : 30
注冊日期 : 2012-07-09
男 雙魚座 馬

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 張譽璋 于 2013-05-02, 03:09

這樣敘述可能無法知道你真正錯誤的原因,一般會出現錯誤引數太多,應該是多給了引數,例如:某函數只需給兩個引數即可運作,但是你多給了一個就會出現這個錯誤。
至於第二個問題就不知道你為何需要這樣運作。

張譽璋
榮譽顧問
榮譽顧問

文章總數 : 303
年齡 : 47
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 4967
威望值 : 624
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
藍鵲12號
男 處女座 狗

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 Conquerable 于 2013-05-02, 03:51

抱歉問題寫的太過簡單

因為原程式執行是沒有問題的,加入此語法才跳出錯誤訊息

故想說原因應該是寫錯位置或者語法錯誤

(PS.寫入後依舊可執行,按ESC才會跳出錯誤訊息)

第二點是因為我的程式的A區塊是用來變換係數&選擇計算方式

而B.C.D區塊則是經由A的指令進入進行計算

故我希望B.C.D執行時按ESC可以回到A,而在A執行時按ESC則是跳離程式

我的做法是在A區塊首行增加(setq olderr *error* *error* useerr)

B.C.D區塊首行增加(setq *error* A);

然後增加一段副程式

(defun useerr()
(setq *error* olderr)
(exit)
)

不知這樣寫法是否有誤?
avatar
Conquerable
初級會員
初級會員

文章總數 : 45
年齡 : 27
來自 : 新北市板橋區
職業 : 繪圖員
愛好 : 繪圖
個性 : 好動
使用年資 : 12
使用版本 : 2000
積分 : 1
經驗值 : 2246
威望值 : 30
注冊日期 : 2012-07-09
男 雙魚座 馬

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 張譽璋 于 2013-05-02, 05:38

這個程式是用來防止操作錯誤時,將lisp改變過的系統變數還原至程式還沒執行之前的設定狀態,你在最後使用結束這樣是不可以的,因為結束後這個程式就沒有存在的意義了,要將系統變數還原是為了能夠再次立即執行,並不是使用在中斷結束時使用。

張譽璋
榮譽顧問
榮譽顧問

文章總數 : 303
年齡 : 47
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 4967
威望值 : 624
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
藍鵲12號
男 處女座 狗

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 Conquerable 于 2013-05-02, 06:16

張老師的意思是我這樣寫是沒有辦法執行的?

是不是我解讀這段程式出錯可否請老師幫我看一下..

這段的本意是先將原系統變數(例如:鎖點,圖層...)儲存起來

(setq olderr *error* *error* useerr)

此行的意思是先將 *error* 用 olderr 變數儲存起來

將 *error* 改為執行 useerr 副程式

按下ESC則會執行 useerr 的副程式將系統變數還原

(setq *error* olderr)

此行順便將 *error* 恢復為原狀

這意思不是代表執行了 useerr 的副程式

那我如果將他改為執行我其他的副程式這樣是不可行的

像我剛剛寫的(setq *error* A)

我無法讓他按下ESC時執行我原本A的副程式

因為我不懂這兩點差異處在哪...

不都是"執行副程式"這個動作

還請老師幫我解答一下...麻煩了 感恩
avatar
Conquerable
初級會員
初級會員

文章總數 : 45
年齡 : 27
來自 : 新北市板橋區
職業 : 繪圖員
愛好 : 繪圖
個性 : 好動
使用年資 : 12
使用版本 : 2000
積分 : 1
經驗值 : 2246
威望值 : 30
注冊日期 : 2012-07-09
男 雙魚座 馬

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 張譽璋 于 2013-05-02, 06:50

(setq olderr *error* *error* useerr)中的useerr改為A,不是把(setq olderr *error* *error* useerr)整行放入A副程式中,這一行是要在主程式中執行的,B、C、D中寫一行(A)即可去執行A副程式

張譽璋
榮譽顧問
榮譽顧問

文章總數 : 303
年齡 : 47
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 4967
威望值 : 624
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
藍鵲12號
男 處女座 狗

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 張譽璋 于 2013-05-02, 07:05

建議你,每一段副程式最好設計為單一用途,盡量不要一段關聯另一段,這樣會很難去查詢錯誤在哪裡,還原變數儘可能越單純越好,以便將來可以隨時更改,配合不同需求。

張譽璋
榮譽顧問
榮譽顧問

文章總數 : 303
年齡 : 47
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 4967
威望值 : 624
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
藍鵲12號
男 處女座 狗

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 Conquerable 于 2013-05-02, 07:38

(defun c:rg()
(setvar "cmdecho" 0)
(getrg)
)

上面我原本的主程式 進入直接就執行副程式了

改為
(defun c:rg()
(setq olderr *error* *error* getrg)
(setvar "cmdecho" 0)
(getrg)
)

按下esc一樣是顯示

*錯誤* 功能內部已發生一個錯誤引數太多

是因為不能在副程式執行中按下esc?
avatar
Conquerable
初級會員
初級會員

文章總數 : 45
年齡 : 27
來自 : 新北市板橋區
職業 : 繪圖員
愛好 : 繪圖
個性 : 好動
使用年資 : 12
使用版本 : 2000
積分 : 1
經驗值 : 2246
威望值 : 30
注冊日期 : 2012-07-09
男 雙魚座 馬

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 張譽璋 于 2013-05-02, 07:55

不是,你的問題是在副程式,副程式內容可以貼出來嗎?

張譽璋
榮譽顧問
榮譽顧問

文章總數 : 303
年齡 : 47
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 4967
威望值 : 624
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
藍鵲12號
男 處女座 狗

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 張譽璋 于 2013-05-02, 07:58

你那行(getrg)需註解掉或刪去,試試看

張譽璋
榮譽顧問
榮譽顧問

文章總數 : 303
年齡 : 47
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 4967
威望值 : 624
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
藍鵲12號
男 處女座 狗

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 Conquerable 于 2013-05-02, 08:59

這是原始的程式碼..尚未新增任何的*error*

拆成很多個副程式...

大致上是先進入getrg確認目前變數,然後決定要執行那種折曲計算或者修改變數

我是想讓他在折曲計算執行時按esc可以回到getrg

而在getrg執行按esc才會離開lisp

代碼:

(defun c:rg()
  (setvar "cmdecho" 0)
  (getrg)
  )
(defun getrg()
  (setq getrgshow 0)
  (if (/= rgthick nil) (setq getrgshow (+ 1 getrgshow)))
  (if (/= rgcoeffici nil) (setq getrgshow (+ 2 getrgshow)))
  (if (/= rgzcoeffici nil) (setq getrgshow (+ 4 getrgshow)))
  (if (/= rgfcoeffici nil) (setq getrgshow (+ 8 getrgshow)))
  (cond
    ((= getrgshow 0) (setq show1 "未設定板厚&係數"))
    ;1個.
    ((= getrgshow 1) (setq show1 (strcat "板厚:" (rtos rgthick 2 2))))
    ((= getrgshow 2) (setq show1 (strcat "折彎係數:" (rtos rgcoeffici 2 2))))
    ((= getrgshow 4) (setq show1 (strcat "段差係數:" (rtos rgzcoeffici 2 2))))
    ((= getrgshow 8) (setq show1 (strcat "壓平係數:" (rtos rgfcoeffici 2 2))))
    ;2個.
    ((= getrgshow 3) (setq show1 (strcat "板厚:" (rtos rgthick 2 2) "/折彎係數:" (rtos rgcoeffici 2 2))))
    ((= getrgshow 5) (setq show1 (strcat "板厚:" (rtos rgthick 2 2) "/段差係數:" (rtos rgzcoeffici 2 2))))
    ((= getrgshow 9) (setq show1 (strcat "板厚:" (rtos rgthick 2 2) "/壓平係數:" (rtos rgfcoeffici 2 2))))
    ((= getrgshow 6) (setq show1 (strcat "折彎係數:" (rtos rgcoeffici 2 2) "/段差係數:" (rtos rgzcoeffici 2 2))))
    ((= getrgshow 10) (setq show1 (strcat "折彎係數:" (rtos rgcoeffici 2 2) "/壓平係數:" (rtos rgfcoeffici 2 2))))
    ((= getrgshow 12) (setq show1 (strcat "段差係數:" (rtos rgzcoeffici 2 2) "/壓平係數:" (rtos rgfcoeffici 2 2))))
    ;3個.
    ((= getrgshow 7) (setq show1 (strcat "板厚:" (rtos rgthick 2 2) "/折彎係數:" (rtos rgcoeffici 2 2) "/段差係數:" (rtos rgzcoeffici 2 2))))
    ((= getrgshow 11) (setq show1 (strcat "板厚:" (rtos rgthick 2 2) "/折彎係數:" (rtos rgcoeffici 2 2) "/壓平係數:" (rtos rgfcoeffici 2 2))))
    ((= getrgshow 13) (setq show1 (strcat "板厚:" (rtos rgthick 2 2) "/段差係數:" (rtos rgzcoeffici 2 2) "/壓平係數:" (rtos rgfcoeffici 2 2))))
    ((= getrgshow 14) (setq show1 (strcat "折彎係數:" (rtos rgcoeffici 2 2) "/段差係數:" (rtos rgzcoeffici 2 2) "/壓平係數:" (rtos rgfcoeffici 2 2))))
    ;4個.
    ((= getrgshow 15) (setq show1 (strcat "板厚:" (rtos rgthick 2 2) "/折彎係數:" (rtos rgcoeffici 2 2) "/段差係數:" (rtos rgzcoeffici 2 2) "/壓平係數:" (rtos rgfcoeffici 2 2))))
    );end cond
  (print show1)
  (initget "t c f z r a s")
  (setq getrgchoose (getkword "\n 修改板厚<T> / 修改係數<C> / 壓平展開<F> / 段差展開<Z> / R角展開<R> / 角度展開<A> / R角角度展開<S> / 折彎展開<>:"))
  (while (= getrgchoose "t")
    (initget 6)
    (setq rgthick (getreal "\n 請輸入板厚:"))
    (if (= rgthick nil) (getrg) (setq rgthick (atof (rtos rgthick 2 2))))
    (getrg)
    );end while
  (while (= getrgchoose "c")
    (initget "c f z")
    (setq getrgchooser (getkword " \n 折彎係數<C> / 壓平係數<F> / 段差係數<Z>:"))
    (while (= getrgchooser "c")
      (initget 6)
      (setq rgcoeffici (getreal "\n 請輸入折彎係數:"))
      (if (= rgcoeffici nil) (getrg) (setq rgcoeffici (atof (rtos rgcoeffici 2 2))))
      (getrg)
      );end while
    (while (= getrgchooser "f")
      (initget 6)
      (setq rgfcoeffici (getreal "\n 請輸入壓平係數:"))
      (if (= rgfcoeffici nil) (getrg) (setq rgfcoeffici (atof (rtos rgfcoeffici 2 2))))
      (getrg)
      );end while
    (while (= getrgchooser "z")
      (initget 6)
      (setq rgzcoeffici (getreal "\n 請輸入段差係數:"))
      (if (= rgzcoeffici nil) (getrg) (setq rgzcoeffici (atof (rtos rgzcoeffici 2 2))))
      (getrg)
      );end while
    (while (= getrgchooser nil)
      (getrg)
      );end while
    );end while
  (while (= getrgchoose "f")
    (dorgf)
    );end while
  (while (= getrgchoose "z")
    (dorgz)
    );end while
  (while (= getrgchoose "r")
    (dorgr)
    );end while
  (while (= getrgchoose "a")
    (dorga)
    );end while
  (while (= getrgchoose "s")
    (dorgra)
    );end while
  (while (= getrgchoose nil)
    (dorg)
    );end while
  )

;;;;;折彎.

;;;折彎主程式.
(defun dorg()
  (if (= rgthick nil)
    (progn
      (initget 6)
      (setq rgthick (getreal "\n 請輸入板厚:"))
      (if (= rgthick nil) (getrg) (setq rgthick (atof (rtos rgthick 2 2))))
      );end progn
    );end if
  (if (= rgcoeffici nil)
    (progn
      (initget 6)
      (setq rgcoeffici (getreal "\n 請輸入折彎係數:"))
      (if (= rgcoeffici nil) (getrg) (setq rgcoeffici (atof (rtos rgcoeffici 2 2))))
      );end progn
    );end if
  (setq show1 (strcat "<一般折曲>板厚:" (rtos rgthick 2 2) "/折彎係數:" (rtos rgcoeffici 2 2)))
  (print show1)
  (getrgvalue)
  (getrgline)
  (getrgdirection)
  (setq gg (getvar "osmode"))
  (setvar "osmode" 0)
  (setq offset1 (+ (- ent1 (* rgthick 2)) rgcoeffici))
  (setq offset2 (+ (- ent1 rgthick ) (/ rgcoeffici 2)))
  (command "offset" offset1 en2 pt2 "")
  (setq en3 (entlast))
  (command "offset" offset2 en3 pt1 "")
  (setq en4 (entlast))
  (command "change" en2 "" "p" "c" "red" "")
  (if (= (tblsearch "layer" "dash") nil) (command "layer" "m" "DASH" "l" "dashed" "DASH" "c" "magenta" "DASH" "s" "0" ""))
  (command "change" en4 "" "p" "la" "dash" "")
  (setvar "osmode" gg)
  (dorg)
  )
;------------------------------

;;;折彎副程式.
(defun getrgvalue()
  (setq en1 (entsel "\n 選擇折彎尺寸:"))
  (while (= en1 nil)
    (getrg)
    );end while
  (while (/= (cdr (assoc 0 (entget (car en1)))) "DIMENSION")
      (print "選擇物件非尺寸標註!")
      (getrgvalue)
    );end while
  (setq ent1 (atof (rtos (cdr (assoc 42 (entget (car en1)))) 2 2)))
  (redraw (car en1) 3)
  )
(defun getrgline()
  (setq en2 (entsel "\n 選擇基準線:"))
  (while (= en2 nil)
    (getrgline)
    );end while
  (while (and (/= (cdr (assoc 0 (entget (car en2)))) "XLINE") (/= (cdr (assoc 0 (entget (car en2)))) "LINE"))
      (print "選擇物件非建構線或線段!")
      (getrgline)
    );end while
  (setq pt1 (cdr (assoc 10 (entget (car en2)))))
  (redraw (car en2) 3)
  )
(defun getrgdirection()
  (setq pt2 (getpoint "\n 選擇展開方向:"))
  (while (= pt2 nil)
    (getrgdirection)
    );end while
  (redraw (car en1) 4)
  (redraw (car en2) 4)
  )
;------------------------------

;;;;;段差.

;;;段差主程式.

(defun dorgz()
  (if (= rgthick nil)
    (progn
      (initget 6)
      (setq rgthick (getreal "\n 請輸入板厚:"))
      (if (= rgthick nil) (getrg) (setq rgthick (atof (rtos rgthick 2 2))))
      );end progn
    );end if
  (if (= rgzcoeffici nil)
    (progn
      (initget 6)
      (setq rgzcoeffici (getreal "\n 請輸入段差係數:"))
      (if (= rgzcoeffici nil) (getrg) (setq rgzcoeffici (atof (rtos rgzcoeffici 2 2))))
      );end progn
    );end if
  (setq show1 (strcat "<段差>板厚:" (rtos rgthick 2 2) "/段差係數:" (rtos rgzcoeffici 2 2)))
  (print show1)
  (getrgzvalue1)
  (getrgzvalue2)
  (getrgzline)
  (getrgzdirection)
  (setq gg (getvar "osmode"))
  (setvar "osmode" 0)
  (setq enzt3 (/ (- (+ rgthick enzt2) rgzcoeffici) 2))
  (setq offsetz1 (+ (/ (- (* rgthick 2) enzt3) 2) enzt1))
  (setq offsetz2 (+ (- enzt2 enzt3) offsetz1))
  (command "offset" rgzcoeffici enz3 ptz2 "")
  (setq enz4 (entlast))
  (command "offset" offsetz1 enz4 ptz1 "")
  (setq enz5 (entlast))
  (command "offset" offsetz2 enz4 ptz1 "")
  (setq enz6 (entlast))
  (command "change" enz3 "" "p" "c" "green" "")
  (if (= (tblsearch "layer" "dash") nil) (command "layer" "m" "DASH" "l" "dashed" "DASH" "c" "magenta" "DASH" "s" "0" ""))
  (command "change" enz5 "" "p" "la" "dash" "")
  (command "change" enz6 "" "p" "la" "dash" "")
  (setvar "osmode" gg)
  (dorgz)
  )

;------------------------------

;;;段差副程式.
(defun getrgzvalue1()
  (setq enz1 (entsel "\n 選擇段差單板:"))
  (while (= enz1 nil)
    (getrg)
    );end while
  (while (/= (cdr (assoc 0 (entget (car enz1)))) "DIMENSION")
      (print "選擇物件非尺寸標註!")
      (getrgzvalue1)
    );end while
  (setq enzt1 (atof (rtos (cdr (assoc 42 (entget (car enz1)))) 2 2)))
  (redraw (car enz1) 3)
  )
(defun getrgzvalue2()
  (setq enz2 (entsel "\n 選擇段差雙板:"))
  (while (= enz2 nil)
    (getrgzvalue2)
    );end while
  (while (/= (cdr (assoc 0 (entget (car enz2)))) "DIMENSION")
      (print "選擇物件非尺寸標註!")
      (getrgzvalue2)
    );end while
  (setq enzt2 (atof (rtos (cdr (assoc 42 (entget (car enz2)))) 2 2)))
  (redraw (car enz2) 3)
  )
(defun getrgzline()
  (setq enz3 (entsel "\n 選擇基準線:"))
  (while (= enz3 nil)
    (getrgzline)
    );end while
  (while (and (/= (cdr (assoc 0 (entget (car enz3)))) "XLINE") (/= (cdr (assoc 0 (entget (car enz3)))) "LINE"))
      (print "選擇物件非建構線或線段!")
      (getrgzline)
    );end while
  (setq ptz1 (cdr (assoc 10 (entget (car enz3)))))
  (redraw (car enz3) 3)
  )
(defun getrgzdirection()
  (setq ptz2 (getpoint "\n 選擇展開方向:"))
  (while (= ptz2 nil)
    (getrgzdirection)
    );end while
  (redraw (car enz1) 4)
  (redraw (car enz2) 4)
  (redraw (car enz3) 4)
  )

;------------------------------

;;;;;壓平.

;;;壓平主程式.

(defun dorgf()
  (if (= rgthick nil)
    (progn
      (initget 6)
      (setq rgthick (getreal "\n 請輸入板厚:"))
      (if (= rgthick nil) (getrg) (setq rgthick (atof (rtos rgthick 2 2))))
      );end progn
    );end if
  (if (= rgfcoeffici nil)
    (progn
      (initget 6)
      (setq rgfcoeffici (getreal "\n 請輸入壓平係數:"))
      (if (= rgfcoeffici nil) (getrg) (setq rgfcoeffici (atof (rtos rgfcoeffici 2 2))))
      );end progn
    );end if
  (setq show1 (strcat "<壓平>板厚:" (rtos rgthick 2 2) "/壓平係數:" (rtos rgfcoeffici 2 2)))
  (print show1)
  (getrgfvalue)
  (getrgfline)
  (getrgfdirection)
  (setq gg (getvar "osmode"))
  (setvar "osmode" 0)
  (setq offsetf1 (- entf1 rgfcoeffici))
  (setq offsetf2 (- entf1 (/ rgfcoeffici 2)))
  (command "offset" offsetf1 enf2 ptf2 "")
  (setq enf3 (entlast))
  (command "offset" offsetf2 enf3 ptf1 "")
  (setq enf4 (entlast))
  (command "change" enf2 "" "p" "c" "blue" "")
  (if (= (tblsearch "layer" "dash") nil) (command "layer" "m" "DASH" "l" "dashed" "DASH" "c" "magenta" "DASH" "s" "0" ""))
  (command "change" enf4 "" "p" "la" "dash" "")
  (setvar "osmode" gg)
  (dorgf)
  )

;------------------------------

;;;壓平副程式.

(defun getrgfvalue()
  (setq enf1 (entsel "\n 選擇壓平尺寸:"))
  (while (= enf1 nil)
    (getrg)
    );end while
  (while (/= (cdr (assoc 0 (entget (car enf1)))) "DIMENSION")
      (print "選擇物件非尺寸標註!")
      (getrgfvalue)
    );end while
  (setq entf1 (atof (rtos (cdr (assoc 42 (entget (car enf1)))) 2 2)))
  (redraw (car enf1) 3)
  )
(defun getrgfline()
  (setq enf2 (entsel "\n 選擇基準線:"))
  (while (= enf2 nil)
    (getrgfline)
    );end while
  (while (and (/= (cdr (assoc 0 (entget (car enf2)))) "XLINE") (/= (cdr (assoc 0 (entget (car enf2)))) "LINE"))
      (print "選擇物件非建構線或線段!")
      (getrgfline)
    );end while
  (setq ptf1 (cdr (assoc 10 (entget (car enf2)))))
  (redraw (car enf2) 3)
  )
(defun getrgfdirection()
  (setq ptf2 (getpoint "\n 選擇展開方向:"))
  (while (= ptf2 nil)
    (getrgfdirection)
    );end while
  (redraw (car enf1) 4)
  (redraw (car enf2) 4)
  )

;------------------------------

;;;;;R角.

;;;R角主程式.
(defun dorgr()
  (if (= rgthick nil)
    (progn
      (initget 6)
      (setq rgthick (getreal "\n 請輸入板厚:"))
      (if (= rgthick nil) (getrg) (setq rgthick (atof (rtos rgthick 2 2))))
      );end progn
    );end if
  (setq show1 (strcat "<R角折曲>板厚:" (rtos rgthick 2 2)))
  (print show1)
  (getrgrvalue1)
  (getrgrvalue2)
  (getrgrline)
  (getrgrdirection)
  (setq gg (getvar "osmode"))
  (setvar "osmode" 0)
  (setq offsetr1 (- (- (+ (/ (* (+ (* entr4 rgthick) entr2) pi) 2) entr1) (* entr2 2)) (* rgthick 2)))
  (setq offsetr2 (- (- (+ (/ (* (+ (* entr4 rgthick) entr2) pi) 4) entr1) entr2) rgthick))
  (command "offset" offsetr1 enr3 ptr2 "")
  (setq enr5 (entlast))
  (command "offset" offsetr2 enr5 ptr1 "")
  (setq enr6 (entlast))
  (command "change" enr3 "" "p" "c" "yellow" "")
  (if (= (tblsearch "layer" "dash") nil) (command "layer" "m" "DASH" "l" "dashed" "DASH" "c" "magenta" "DASH" "s" "0" ""))
  (command "change" enr6 "" "p" "la" "dash" "")
  (setvar "osmode" gg)
  (dorgr)
  )
;------------------------------

;;;R角副程式.
(defun getrgrvalue1()
  (setq enr1 (entsel "\n 選擇折彎尺寸:"))
  (while (= enr1 nil)
    (getrg)
    );end while
  (while (/= (cdr (assoc 0 (entget (car enr1)))) "DIMENSION")
      (print "選擇物件非尺寸標註!")
      (getrgrvalue1)
    );end while
  (setq entr1 (atof (rtos (cdr (assoc 42 (entget (car enr1)))) 2 2)))
  (redraw (car enr1) 3)
  )
(defun getrgrvalue2()
  (setq enr2 (entsel "\n 選擇內R尺寸:"))
  (while (= enr2 nil)
    (getrgrvalue2)
    );end while
  (while (/= (cdr (assoc 0 (entget (car enr2)))) "DIMENSION")
      (print "選擇物件非尺寸標註!")
      (getrgrvalue2)
    );end while
  (setq entr2 (atof (rtos (cdr (assoc 42 (entget (car enr2)))) 2 2)))
  (cond
    ((< entr2 rgthick) (setq entr4 0.35))
    ((and (>= entr2 rgthick) (< entr2 (* rgthick 2))) (setq entr4 0.4))
    ((and (>= entr2 (* rgthick 2)) (< entr2 (* rgthick 3))) (setq entr4 0.45))
    ((>= entr2 (* rgthick 3)) (setq entr4 0.55))
    )
  (redraw (car enr2) 3)
  )
(defun getrgrline()
  (setq enr3 (entsel "\n 選擇基準線:"))
  (while (= enr3 nil)
    (getrgrline)
    );end while
  (while (and (/= (cdr (assoc 0 (entget (car enr3)))) "XLINE") (/= (cdr (assoc 0 (entget (car enr3)))) "LINE"))
      (print "選擇物件非建構線或線段!")
      (getrgrline)
    );end while
  (setq ptr1 (cdr (assoc 10 (entget (car enr3)))))
  (redraw (car enr3) 3)
  )
(defun getrgrdirection()
  (setq ptr2 (getpoint "\n 選擇展開方向:"))
  (while (= ptr2 nil)
    (getrgrdirection)
    );end while
  (redraw (car enr1) 4)
  (redraw (car enr2) 4)
  (redraw (car enr3) 4)
  )
;------------------------------

;;;;;角度.

;;;角度主程式.
(defun dorga()
  (if (= rgcoeffici nil)
    (progn
      (initget 6)
      (setq rgcoeffici (getreal "\n 請輸入折彎係數:"))
      (if (= rgcoeffici nil) (getrg) (setq rgcoeffici (atof (rtos rgcoeffici 2 2))))
      );end progn
    );end if
  (setq show1 (strcat "<角度折彎>折彎係數:" (rtos rgcoeffici 2 2) "(90度以下)"))
  (print show1)
  (getrgavalue1)
  (getrgavalue2)
  (getrgavalue3)
  (getrgaline)
  (getrgadirection)
  (setq gg (getvar "osmode"))
  (setvar "osmode" 0)
  (setq offseta1 (+ enta1 enta2 (* (/ rgcoeffici (/ pi 2)) enta3)))
  (setq offseta2 (+ enta2 (/ (* (/ rgcoeffici (/ pi 2)) enta3) 2)))
  (command "offset" offseta1 ena4 pta2 "")
  (setq ena5 (entlast))
  (command "offset" offseta2 ena5 pta1 "")
  (setq ena6 (entlast))
  (command "change" ena4 "" "p" "c" "cyan" "")
  (if (= (tblsearch "layer" "dash") nil) (command "layer" "m" "DASH" "l" "dashed" "DASH" "c" "magenta" "DASH" "s" "0" ""))
  (command "change" ena6 "" "p" "la" "dash" "")
  (setvar "osmode" gg)
  (dorga)
  )
;------------------------------

;;;角度副程式.
(defun getrgavalue1()
  (setq ena1 (entsel "\n 選擇折彎尺寸1(內寸,靠近基準線):"))
  (while (= ena1 nil)
    (getrg)
    );end while
  (while (/= (cdr (assoc 0 (entget (car ena1)))) "DIMENSION")
      (print "選擇物件非尺寸標註!")
      (getrgavalue1)
    );end while
  (setq enta1 (atof (rtos (cdr (assoc 42 (entget (car ena1)))) 2 2)))
  (redraw (car ena1) 3)
  )
(defun getrgavalue2()
  (setq ena2 (entsel "\n 選擇折彎尺寸2(內寸,遠離基準線):"))
  (while (= ena2 nil)
    (getrgavalue2)
    );end while
  (while (/= (cdr (assoc 0 (entget (car ena2)))) "DIMENSION")
      (print "選擇物件非尺寸標註!")
      (getrgavalue2)
    );end while
  (setq enta2 (atof (rtos (cdr (assoc 42 (entget (car ena2)))) 2 2)))
  (redraw (car ena2) 3)
  )
(defun getrgavalue3()
  (setq ena3 (entsel "\n 選擇折彎角度:"))
  (while (= ena3 nil)
    (getrgavalue3)
    );end while
  (while (/= (cdr (assoc 0 (entget (car ena3)))) "DIMENSION")
      (print "選擇物件非尺寸標註!")
      (getrgavalue3)
    );end while
  (setq enta3 (atof (rtos (cdr (assoc 42 (entget (car ena3)))) 2 9)))
  (if (> enta3 (/ pi 2)) (setq enta3 (- pi enta3)))
  (redraw (car ena3) 3)
  )
(defun getrgaline()
  (setq ena4 (entsel "\n 選擇基準線:"))
  (while (= ena4 nil)
    (getrgaline)
    );end while
  (while (and (/= (cdr (assoc 0 (entget (car ena4)))) "XLINE") (/= (cdr (assoc 0 (entget (car ena4)))) "LINE"))
      (print "選擇物件非建構線或線段!")
      (getrgaline)
    );end while
  (setq pta1 (cdr (assoc 10 (entget (car ena4)))))
  (redraw (car ena4) 3)
  )
(defun getrgadirection()
  (setq pta2 (getpoint "\n 選擇展開方向:"))
  (while (= pta2 nil)
    (getrgadirection)
    );end while
  (redraw (car ena1) 4)
  (redraw (car ena2) 4)
  (redraw (car ena3) 4)
  (redraw (car ena4) 4)
  )
;------------------------------

;;;;;R角角度.

;;;R角角度主程式.
(defun dorgra()
  (if (= rgthick nil)
    (progn
      (initget 6)
      (setq rgthick (getreal "\n 請輸入板厚:"))
      (if (= rgthick nil) (getrg) (setq rgthick (atof (rtos rgthick 2 2))))
      );end progn
    );end if
  (setq show1 (strcat "<R角角度折曲>板厚:" (rtos rgthick 2 2) "(90度以下)"))
  (print show1)
  (getrgravalue1)
  (getrgravalue2)
  (getrgravalue3)
  (getrgravalue4)
  (getrgraline)
  (getrgradirection)
  (setq gg (getvar "osmode"))
  (setvar "osmode" 0)
  (setq offsetra1 (+ entra1 entra2 (* (+ (* entra6 rgthick) entra3) entra4)))
  (setq offsetra2 (+ entra2 (* (/ (+ (* entra6 rgthick) entra3) 2) entra4)))
  (command "offset" offsetra1 enra5 ptra2 "")
  (setq enra6 (entlast))
  (command "offset" offsetra2 enra6 ptra1 "")
  (setq enra7 (entlast))
  (command "change" enra5 "" "p" "c" "30" "")
  (if (= (tblsearch "layer" "dash") nil) (command "layer" "m" "DASH" "l" "dashed" "DASH" "c" "magenta" "DASH" "s" "0" ""))
  (command "change" enra7 "" "p" "la" "dash" "")
  (setvar "osmode" gg)
  (dorgra)
  )
;------------------------------

;;;R角角度副程式.
(defun getrgravalue1()
  (setq enra1 (entsel "\n 選擇折彎尺寸1(內寸,靠近基準線):"))
  (while (= enra1 nil)
    (getrg)
    );end while
  (while (/= (cdr (assoc 0 (entget (car enra1)))) "DIMENSION")
      (print "選擇物件非尺寸標註!")
      (getrgravalue1)
    );end while
  (setq entra1 (atof (rtos (cdr (assoc 42 (entget (car enra1)))) 2 2)))
  (redraw (car enra1) 3)
  )
(defun getrgravalue2()
  (setq enra2 (entsel "\n 選擇折彎尺寸2(內寸,遠離基準線):"))
  (while (= enra2 nil)
    (getrgravalue2)
    );end while
  (while (/= (cdr (assoc 0 (entget (car enra2)))) "DIMENSION")
      (print "選擇物件非尺寸標註!")
      (getrgravalue2)
    );end while
  (setq entra2 (atof (rtos (cdr (assoc 42 (entget (car enra2)))) 2 2)))
  (redraw (car enra2) 3)
  )
(defun getrgravalue3()
  (setq enra3 (entsel "\n 選擇內R尺寸:"))
  (while (= enra3 nil)
    (getrgravalue3)
    );end while
  (while (/= (cdr (assoc 0 (entget (car enra3)))) "DIMENSION")
      (print "選擇物件非尺寸標註!")
      (getrgravalue3)
    );end while
  (setq entra3 (atof (rtos (cdr (assoc 42 (entget (car enra3)))) 2 2)))
  (cond
    ((< entra3 rgthick) (setq entra6 0.35))
    ((and (>= entra3 rgthick) (< entra3 (* rgthick 2))) (setq entra6 0.4))
    ((and (>= entra3 (* rgthick 2)) (< entra3 (* rgthick 3))) (setq entra6 0.45))
    ((>= entra3 (* rgthick 3)) (setq entra6 0.55))
    )
  (redraw (car enra3) 3)
  )
(defun getrgravalue4()
  (setq enra4 (entsel "\n 選擇折彎角度:"))
  (while (= enra4 nil)
    (getrgravalue4)
    );end while
  (while (/= (cdr (assoc 0 (entget (car enra4)))) "DIMENSION")
      (print "選擇物件非尺寸標註!")
      (getrgravalue4)
    );end while
  (setq entra4 (atof (rtos (cdr (assoc 42 (entget (car enra4)))) 2 9)))
  (if (> entra4 (/ pi 2)) (setq entra4 (- pi entra4)))
  (redraw (car enra4) 3)
  )
(defun getrgraline()
  (setq enra5 (entsel "\n 選擇基準線:"))
  (while (= enra5 nil)
    (getrgraline)
    );end while
  (while (and (/= (cdr (assoc 0 (entget (car enra5)))) "XLINE") (/= (cdr (assoc 0 (entget (car enra5)))) "LINE"))
      (print "選擇物件非建構線或線段!")
      (getrgraline)
    );end while
  (setq ptra1 (cdr (assoc 10 (entget (car enra5)))))
  (redraw (car enra5) 3)
  )
(defun getrgradirection()
  (setq ptra2 (getpoint "\n 選擇展開方向:"))
  (while (= ptra2 nil)
    (getrgradirection)
    );end while
  (redraw (car enra1) 4)
  (redraw (car enra2) 4)
  (redraw (car enra3) 4)
  (redraw (car enra4) 4)
  (redraw (car enra5) 4)
  )
;------------------------------
avatar
Conquerable
初級會員
初級會員

文章總數 : 45
年齡 : 27
來自 : 新北市板橋區
職業 : 繪圖員
愛好 : 繪圖
個性 : 好動
使用年資 : 12
使用版本 : 2000
積分 : 1
經驗值 : 2246
威望值 : 30
注冊日期 : 2012-07-09
男 雙魚座 馬

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 張譽璋 于 2013-05-02, 10:19

大略的看了你的程式,你的問題有可能是無提列區域變數的問題,區域變數是執行完程式後,無用的變數必須清除

張譽璋
榮譽顧問
榮譽顧問

文章總數 : 303
年齡 : 47
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 4967
威望值 : 624
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
藍鵲12號
男 處女座 狗

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 張譽璋 于 2013-05-02, 10:50

所謂的區域變數就是程式執行完後必須清除的變數,防止下次執行變數會影響程式的正常運作,理論上你要是用*error*去啟動副程式是沒有問題的,
但是問題在於你地執行完程式後的變數殘留在記憶體中,如你一按ECS就會讓程式重新執行,此時存在記憶體中的變數會直接帶入程式中運作,可能
某些變數必須為空值時才能正常,但是記憶體卻記憶你上一次運算完的值,直節放入需要空值的程式中就會產生錯誤,所以你必須提列哪些變數是為
區域變數。這樣你的程式才不會出錯!

張譽璋
榮譽顧問
榮譽顧問

文章總數 : 303
年齡 : 47
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 4967
威望值 : 624
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
藍鵲12號
男 處女座 狗

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 Conquerable 于 2013-05-03, 01:43

張老師您的意思是區域變數跟*error*會有所關聯嘛?

因為我這程式直接執行是沒有問題的

就算加了*error*也是只有按esc會跳錯誤訊息

其餘也是照常執行,而且我裡面沒有寫說必須是空值才可執行的段落

都是需要用到變數時就請使用者輸入或點選,空回應時會重複要求你輸入或選取

所以我這程式才沒有寫區域變數..


那可以請問如果是我這程式要放*error*應該要放在哪個地方呢?

我試了好幾個地方都是按esc會跳錯誤訊息,但本身還是可以使用
avatar
Conquerable
初級會員
初級會員

文章總數 : 45
年齡 : 27
來自 : 新北市板橋區
職業 : 繪圖員
愛好 : 繪圖
個性 : 好動
使用年資 : 12
使用版本 : 2000
積分 : 1
經驗值 : 2246
威望值 : 30
注冊日期 : 2012-07-09
男 雙魚座 馬

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 張譽璋 于 2013-05-03, 04:09

不是跟*error*有關,空值是舉例,這要檢查你的副程式中變數的使用,因為你的程式完全沒有提列變數所以,你的錯誤可能是連續重覆執行時產生變數相衝的問題,等等我幫你測試看看!

張譽璋
榮譽顧問
榮譽顧問

文章總數 : 303
年齡 : 47
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 4967
威望值 : 624
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
藍鵲12號
男 處女座 狗

回頂端 向下

回復: [已解決]請問下列Lisp程式代表什麼意義

發表 由 張譽璋 于 2013-05-03, 04:48

剛剛幫你測試過,依照你程式的寫法是無法讓他回到 getrg副程式 ,建議你改用迴圈的寫法才行。我測試後,這段程式無法符合你的期待,這段程式是用來還原變數用的依照你的程式架構是無法使用這個方式回復,建議你可以重新構想你的程式架構,先將你的構想列出系統圖,這樣編寫才不會有問題。

張譽璋
榮譽顧問
榮譽顧問

文章總數 : 303
年齡 : 47
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 4967
威望值 : 624
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
藍鵲12號
男 處女座 狗

回頂端 向下

1頁(共2頁) 1, 2  下一步

上一篇主題 下一篇主題 回頂端


 
這個論壇的權限:
無法 在這個版面回復文章