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

[已解決]關於dcl的變數記憶問題

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

[已解決]關於dcl的變數記憶問題

發表 由 djh1006 于 2014-10-06, 12:23

請問各位高手
以下是我的dcl的程式,
檔名aaa.dcl
代碼:
aaa : dialog {
   label = "測試dcl";
   :column{
     :edit_box {label = "逃角半徑";key = "keb11";edit_width=6;value=2;}
     :edit_box {label = "逃示量";key = "keb12";edit_width=6;value=0.1;}
     :edit_box {label = "倒R量";key = "keb13";edit_width=6;value=2;}
  }
   spacer_1;
   ok_cancel;
}

以下是配合的lisp程式,
aaa.lsp
代碼:
;aaa.lsp
;測試dcl

(defun c:aaa()

  (setq dcl_id (load_dialog "aaa"))
  (new_dialog "aaa" dcl_id)
  (mode_tile "keb11" 2)
  (action_tile "keb11" "(setq R1 (atof $value))")
  (action_tile "keb12" "(setq FR1 (atof $value))")
  (action_tile "keb13" "(setq COL1 (atof $value))")
  (action_tile "accept" "(done_dialog 1)")   ;; 按 "確定"
  (setq sd (start_dialog))

  (princ (strcat "逃角半徑:" (rtos R1)))
  (princ (strcat "逃示量:" (rtos FR1)))
  (princ (strcat "倒R量:" (rtos COL1)))
  (princ)
)


我的問題是,當中的R1、FR1、COL1三個變數在執行一次且數字有更改時,當下次再執行此程式,三個有更改的數字如何顯示在DCL對話方塊中
例如:原始數字
R1=2
FR1=0.1
COL1=2

當我修改成
R1=4
FR1=0.5
COL1=3

如何把最後的這三組數字變成下次執行DCL的預設值,而不是2,0.1,2?是從dcl下手還是從lsp下手呢?


djh1006 在 2014-10-10, 01:09 作了第 1 次修改
avatar
djh1006
中級會員
中級會員

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

回頂端 向下

回復: [已解決]關於dcl的變數記憶問題

發表 由 djh1006 于 2014-10-09, 12:41

終於找到答案了
aaa.dcl
代碼:
aaa : dialog {
   label = "測試dcl";
   :column{
     :edit_box {label = "逃角半徑";key = "keb11";edit_width=6;}
     :edit_box {label = "逃示量";key = "keb12";edit_width=6;}
     :edit_box {label = "倒R量";key = "keb13";edit_width=6;}
  }
   spacer_1;
   ok_cancel;
}
aaa.lsp
代碼:
;aaa.lsp
;測試dcl

(defun c:aaa()

  (setq dcl_id (load_dialog "aaa"))
  (new_dialog "aaa" dcl_id)

  (if (/= R1_r nil)     (set_tile "keb11" R1_r)     (set_tile "keb11" "2"))
  (if (/= COL1_r nil)(set_tile "keb12" COL1_r)(set_tile "keb12" "0.1"))
  (if (/= FR1_r nil)   (set_tile "keb13" FR1_r)   (set_tile "keb13" "2"))

  (action_tile "keb11" "(setq R1 (atof $value))")
  (action_tile "keb12" "(setq COL1 (atof $value))")
  (action_tile "keb13" "(setq FR1 (atof $value))")
  (action_tile "accept" "(done_dialog 1)")   ;; 按 "確定"
  (setq sd (start_dialog))

  (if (= R1 nil)(setq R1 2))
  (if (= COL1 nil)(setq COL1 0.1))
  (if (= FR1 nil)(setq FR1 2))

  (setq
    R1_r (rtos R1)
    COL1_r (rtos COL1)
    FR1_r (rtos FR1)
  )

  (princ (strcat "逃角半徑:" (rtos R1)))
  (princ (strcat "逃示量:" (rtos FR1)))
  (princ (strcat "倒R量:" (rtos COL1)))
  (princ)
)
其中關鍵在於
(if (/= R1_r nil)     (set_tile "keb11" R1_r)     (set_tile "keb11" "2"))
(if (/= COL1_r nil)(set_tile "keb12" COL1_r)(set_tile "keb12" "0.1"))
(if (/= FR1_r nil)   (set_tile "keb13" FR1_r)   (set_tile "keb13" "2"))

此值會反應到對話方塊裡

https://www.youtube.com/watch?v=3ytIKXN3rac&feature=youtu.be
avatar
djh1006
中級會員
中級會員

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

回頂端 向下

回復: [已解決]關於dcl的變數記憶問題

發表 由 Tiger&蘋果爸 于 2014-10-10, 13:52

很高興您的問題自行找到解答~
也謝謝你的解說喔!
害羞

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

文章總數 : 17080
年齡 : 41
來自 : 台北市文山區
職業 : AutoCAD顧問
愛好 : 蹓狗/戶外活動/拍照
個性 : 幽默/樂觀/善良
使用年資 : 15↑
使用版本 : AutoCAD 2016
經驗值 : 63953
威望值 : 12657
注冊日期 : 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

回頂端 向下

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


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