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

[已解決]按ESC鍵造成函數中斷

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

[已解決]按ESC鍵造成函數中斷

發表 由 kev1229qq123 于 2012-05-12, 19:48

我的程式如果按【ENTER】或【空白鍵】結束時,按【U】回上一步的時候
可以整個圖形復原(這是我想要的結果)

但如果按下【ESC】鍵,好像是會造成函數中斷,所以按【U】
就變成一條線一條線還原
請問程式該如何修改?

代碼:


(defun C:kk ()
;; 2012.05.05  by KPA_KWJ
   
   (setvar "cmdecho" 0) ; 關閉指令回應
   (setvar "blipmode" 0) ; 關閉十字
   (sub_chk_layer) ; 檢查圖層
    (sub_chk_style) ; 檢查線型
   
   
(setq INS (getpoint "\n 長條孔的插入點 : "))
(setq LO (getreal "\n 請輸入長條孔的最大長度 : "))
(setq DO (getreal "\n 請輸入長條孔的孔徑尺寸 : "))

(setq ANG 0) ; 將ANG預設為0
(setq ang-old ANG) ; 將ANG的角度值,設定為角度的預設值ang-old
(prompt "\n 請輸入旋轉角度<") (princ ang-old) (princ "> : ") ; 提示輸入角度
(setq ANG (getangle INS)) ; 可直接輸入角度
   (if (= ANG nil) ; 如果不輸入角度值,直接按[enter]
      (setq ANG ang-old) ; 就表示接受內定的角度值ang-old
   )   
   

(while INS
   (setvar "osmode" 0) ; 將系統變數的抓點模式值設為0,防止抓錯點座標值
   (setq ptc01 (polar INS (+ PI ANG) (/ (- LO DO) 2.0)))
   (setq ptc02 (polar INS ANG (/ (- LO DO) 2.0)))
   (setq pta01 (polar ptc02 (+ (* PI 0.5) ANG) (/ DO 2.0)))
   (setq pta02 (polar ptc02 (+ (* PI 1.5) ANG) (/ DO 2.0)))
   (setq pta03 (polar ptc01 (+ (* PI 1.5) ANG) (/ DO 2.0)))
   (setq pta04 (polar ptc01 (+ (* PI 0.5) ANG) (/ DO 2.0)))
   (setq pta05 (polar ptc01 (+ PI ANG) (* DO 0.75)))
   (setq pta06 (polar ptc02 (+ 0 ANG) (* DO 0.75)))

   (setq pta07 (polar ptc02 (+ (* PI 0.5) ANG) (* DO 0.75)))
   (setq pta08 (polar ptc02 (+ (* PI 1.5) ANG) (* DO 0.75)))
   (setq pta09 (polar ptc01 (+ (* PI 1.5) ANG) (* DO 0.75)))
   (setq pta10 (polar ptc01 (+ (* PI 0.5) ANG) (* DO 0.75)))
   
   
   (setvar "clayer" "str")
   (setvar "textstyle" "cc")
   (COMMAND "UNDO" "BE") ; U的起始
   (command "arc" "c" ptc02 pta02 pta01) ;畫右側邊的圓弧
   (command "arc" "c" ptc01 pta04 pta03) ;畫左側邊的圓弧
   (command "line" pta01 pta04 "") ;畫上方的橫線
   (command "line" pta03 pta02 "") ;畫下方的橫線
   
   
   (setvar "clayer" "cen")
    (command "line" pta05 pta06 "") ;畫中間的橫線(中心線)
   (command "line" pta07 pta08 "") ;畫右邊的直線(中心線)
   (command "line" pta09 pta10 "") ;畫左邊的直線(中心線)

   (command "regen") ; 圖面重繪
   (setvar "osmode" 39) ; 恢復抓點模式功能   

   (setq INS (getpoint "\n 再次插入點 : ")); 重複插入,可插入多個相同的長條孔在不同的位置
   
)
   (COMMAND "UNDO" "E") ; U的結尾
   (prin1)
   )



;=====================================
(defun sub_chk_layer()
    (setq chklay (tblsearch "layer" "str"))
      (if (= chklay nil)
         (command "layer" "n" "str" "c" "7" "Str" "")
      )
    (setq chklay (tblsearch "layer" "dim"))
      (if (= chklay nil)
         (command "layer" "n" "dim" "c" "1" "Dim" "")
      )
    (setq chklay (tblsearch "layer" "cen"))
      (if (= chklay nil)
          (command "layer" "n" "cen" "c" "3" "cen" "lt" "center" "Cen" "")
      )
    (setq chklay (tblsearch "layer" "hid"))
      (if (= chklay nil)
         (command "layer" "n" "hid" "c" "5" "hid" "lt" "hidden" "Hid" "")
      )
)
;=====================================
(defun sub_chk_style()
   (setq chksty (tblsearch "style" "cc"))
      (if (= chksty nil)
         (command "style" "cc" "txt,chineset" "" "" "" "" "" "")
      )
   (setq chksty (tblsearch "style" "kk"))
      (if (= chksty nil)
         (command "style" "kk" "標楷體" "" "" "" "" "")
      )
)
;=====================================
(defun *error* (msg)
(princ "")
(princ)
)

另外再請問一下,明明一開始就有下(setvar "cmdecho" 0) ; 關閉指令回應的指令
但為何按【U】復原,就出現如下圖的情形@@?


可以讓他按U的時候不要出現(LISP表示式)嗎?謝謝!


kev1229qq123 在 2012-05-30, 18:09 作了第 1 次修改
avatar
kev1229qq123
中級會員
中級會員

文章總數 : 141
年齡 : 31
來自 : 台北
職業 : 學生
愛好 : CAD/Pro.e
個性 : 隨性隨和
使用年資 : 4
使用版本 : CAD2014
積分 : 8
經驗值 : 3655
威望值 : 40
發帖精華 : 1
注冊日期 : 2008-10-21
男 摩羯座 牛

回頂端 向下

回復: [已解決]按ESC鍵造成函數中斷

發表 由 shenhung 于 2012-05-13, 03:08

(setvar "clayer" "str")
(setvar "textstyle" "cc")
(COMMAND "UNDO" "G") ; U的起始 <---"BE" 改為"G"
(command "arc" "c" ptc02 pta02 pta01) ;畫右側邊的圓弧
(command "arc" "c" ptc01 pta04 pta03) ;畫左側邊的圓弧
(command "line" pta01 pta04 "") ;畫上方的橫線
(command "line" pta03 pta02 "") ;畫下方的橫線


(setvar "clayer" "cen")
(command "line" pta05 pta06 "") ;畫中間的橫線(中心線)
(command "line" pta07 pta08 "") ;畫右邊的直線(中心線)
(command "line" pta09 pta10 "") ;畫左邊的直線(中心線)

(command "regen") ; 圖面重繪
(setvar "osmode" 39) ; 恢復抓點模式功能
(COMMAND "UNDO" "E") < END 加在這邊 .一個迴圈一個END
(setq INS (getpoint "\n 再次插入點 : ")); 重複插入,可插入多個相同的長條孔在不同的位置

)
; (COMMAND "UNDO" "E") ; U的結尾<----取消
(prin1)
)

;;--以上程式碼局部修改.!! 你試試`

avatar
shenhung
高級會員
高級會員

文章總數 : 238
年齡 : 50
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 5006
威望值 : 913
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

回復: [已解決]按ESC鍵造成函數中斷

發表 由 kev1229qq123 于 2012-05-13, 07:34

您好~謝謝您熱心的指導
可是改過以後狀況還是存在耶@@

想請問一下UNDO的"BE" 改為"G"
"G"代表的意思是?
他的副指令只有「自動(A)」/「控制(C)」/「開始(BE)」/「結束(E)」
/「標記(M)」/「退回(B)」
avatar
kev1229qq123
中級會員
中級會員

文章總數 : 141
年齡 : 31
來自 : 台北
職業 : 學生
愛好 : CAD/Pro.e
個性 : 隨性隨和
使用年資 : 4
使用版本 : CAD2014
積分 : 8
經驗值 : 3655
威望值 : 40
發帖精華 : 1
注冊日期 : 2008-10-21
男 摩羯座 牛

回頂端 向下

回復: [已解決]按ESC鍵造成函數中斷

發表 由 shenhung 于 2012-05-13, 08:03

G 是GROUP的意思~

(COMMAND "UNDO" "E") < END 加在這邊 .一個迴圈一個END
(setq INS (getpoint "\n 再次插入點 : ")); 重複插入,可插入多個相同的長條孔在不同的位置

UNDO END 在插入點之前這個你有加嗎. !!
我是在2010版測過 ..ESC 中斷之後 .可以一個長條孔.一個一個慢慢回復.不會一條線一條線..!!

但你如果要全部一起回複的話.就要用ERROR 錯誤處理函數..把UNDO END 加上.!!

avatar
shenhung
高級會員
高級會員

文章總數 : 238
年齡 : 50
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 5006
威望值 : 913
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

回復: [已解決]按ESC鍵造成函數中斷

發表 由 kev1229qq123 于 2012-05-13, 09:20

UNDO END 在插入點之前這個你有加嗎. !! .....這個我有加了^^
G 是GROUP的意思......所以G是隱藏的指令嗎?@@"

哈哈~我有成功啦...非常感謝! 感動
ESC 中斷之後 .可以一個長條孔.一個一個慢慢回復.不會一條線一條線

sorry~~應該是我沒說清楚 害羞 ~~
我是指下圖這個情形還是存在~因為我覺得他很礙眼 三條線

avatar
kev1229qq123
中級會員
中級會員

文章總數 : 141
年齡 : 31
來自 : 台北
職業 : 學生
愛好 : CAD/Pro.e
個性 : 隨性隨和
使用年資 : 4
使用版本 : CAD2014
積分 : 8
經驗值 : 3655
威望值 : 40
發帖精華 : 1
注冊日期 : 2008-10-21
男 摩羯座 牛

回頂端 向下

回復: [已解決]按ESC鍵造成函數中斷

發表 由 shenhung 于 2012-05-14, 07:55

AUTOCAD是有一些隱藏指令沒錯.!!
UNDO-G 的寫法.是以前參考前輩的寫法.一直到現在.!!你UNDO的時候 會有.COMMAND:_U GROUP的提示
但UNDO-BE也OK的..你這個LISP之前的問題在END放置的位置!!.
跟"BE"和"G".沒關係的,..我一直因為習慣才請你改為"G" 真抱歉!!
(LISP 表示式)的確礙眼.我也想把它隱藏..你發現什麼好辦法的時候.請記得告訴我.!!


avatar
shenhung
高級會員
高級會員

文章總數 : 238
年齡 : 50
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 5006
威望值 : 913
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

回復: [已解決]按ESC鍵造成函數中斷

發表 由 kev1229qq123 于 2012-05-14, 13:35

嗯~謝謝 認同
如果到時候有找到辦法隱藏掉(LISP 表示式)的話
我一定會po上來告知的^^
avatar
kev1229qq123
中級會員
中級會員

文章總數 : 141
年齡 : 31
來自 : 台北
職業 : 學生
愛好 : CAD/Pro.e
個性 : 隨性隨和
使用年資 : 4
使用版本 : CAD2014
積分 : 8
經驗值 : 3655
威望值 : 40
發帖精華 : 1
注冊日期 : 2008-10-21
男 摩羯座 牛

回頂端 向下

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


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