明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3093|回复: 19

[源码] <<<**** 簡易多功能dcl創建+參數式轉lisp檔 *****>>>

[复制链接]
发表于 2023-6-24 14:03:23 | 显示全部楼层 |阅读模式
本帖最后由 lee50310 于 2023-6-26 06:23 编辑

**** 簡易多功能dcl創建+參數式轉lisp檔  *****

簡單的說你只要你熟悉規則 ,自行撰寫 dlst列表 將其帶入 兩個函數並設好參數(a.起始對話框函數 與 b.結束對話框函數)
可用此程式 快速建立dcl檔 並利用內部參數0,1,2,3順便轉檔 要轉換成何種格式可自行決定填入的參數
並用轉出的lisp檔繼續寫作 不必在依附 great-dcl.fas 此程式
(ps: dlst列表內 不可加// 註解符號 ,可轉成dcl檔後再自行加入)

此DCL創建 共分為 3步驟
(1)載入DCL轉換函數 great-dcl.fas
(2)需自行撰寫dlst列表
(3)a.輸入 起始對話框函數並設置參數 ,b.輸入 結束對話框函數並設置參數

內附6個 程式範例檔 裡面有撰寫 dlst列表 的格試範例
可供作參考 (執行指令分別為 tt1,tt2,tt3,tt4,tt5,tt6)及使用說明 ...等

如何編寫 dlst列表 及DCL啟動函數之參數 規則寫在說明內 使用前請詳看 說明
程式檔案路徑
                   簡體版=>設置 D:\\great_dcl_chs\\
                   繁體版=>設置:D:\\great_dcl_cht\\
若所存放的檔案及路徑與此不同需修改程式內此值





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

评分

参与人数 4明经币 +4 收起 理由
ssyfeng + 1 很给力!
freedom_ice + 1 赞一个!优秀!
水洗可口可乐 + 1 赞一个! 我是不懂
dtucad + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2023-6-24 14:08:21 | 显示全部楼层
本帖最后由 lee50310 于 2023-6-25 09:59 编辑

將他帶入轉換程式並寫成執行檔如下

  1. (defun c:tt3()
  2.    (vl-load-com)
  3.    (setq path "D:\\great_dcl_chs\\"   A_husk "supper\\"  Bpath (strcat path "SLD\\") )
  4.    (setvar "SECURELOAD" 0) ;關閉安全性提示
  5.    (if(setq LOA0 (strcat path A_husk "Great-DCL.fas")) (load LOA0)) ;載入DCL面板轉換程式     
  6.    (setvar "SECURELOAD" 1) ;打開安全性提示
  7.    
  8. (setq Dlst '(
  9.              ":row{"
  10.              ("image_button" "" "豎直" "16" "8" "" "-2" "#allow_accept=true;")
  11.              ("image_button" "" "上"   "16" "8" "" "-2" "#allow_accept=true;")
  12.              ("image_button" "" "水平" "16" "8" "" "-2" "#allow_accept=true;")
  13.              "}"
  14.              ":row{"
  15.              ("image_button" "" "左" "16" "8" "" "-2" "#allow_accept=true;")
  16.              ("image_button" "" "下" "16" "8" "" "-2" "#allow_accept=true;")
  17.              ("image_button" "" "右" "16" "8" "" "-2" "#allow_accept=true;")
  18.              }
  19.              ("@image_button" "" "雙向居中" "50" "8" "" "-2" )
  20.             
  21.        )
  22.       )  

  23. ;<< DCL起始對話框函數 >>,第3數為 0 不配置按鈕 ,第4參數為0 不轉換,為 1 轉換為dcl 文字檔        
  24.    (DCL:STATE  Dlst "【物體對齊】" 0 1)                    

  25.   
  26.     (setq dd(DCL:END))    ;<<  DCL結束對話框函數 >>               
  27.                            
  28. )      
  29.    


可將上面的 Dlst列表串 與下面轉換的dcl 做比較
例上面簡寫程式碼找到此行 ("image_button" "" "豎直" "16" "8" "" "-2" "#allow_accept=true;")
對照下面 透過程式幫你轉成DCL 檔案格式找到轉換後的此行如下
                 :image_button{ key="豎直"; width=16; height=8; color=-2;  allow_accept=true; }
也就是說下面所生成的DCL檔 才是一般我們需要寫的檔案格式
但如今只需透過這個轉換程式
採用上面的簡略格式寫法 + 兩函數 透過參數 1,2,3設定 便可生成DCL檔, DCL轉LSP檔, DCL轉LSP檔(Write 格式)


DCL起始對話框函數 第4參數=1 生成一般的dcl檔 (若要保存需另存新檔) 轉好的DCL 文字檔如下

  1. NextSetting :dialog{ label = "【物體對齊】";
  2. :row{
  3. :image_button{ key="豎直"; width=16; height=8; color=-2;  allow_accept=true; }
  4. :image_button{ key="上"; width=16; height=8; color=-2;  allow_accept=true; }
  5. :image_button{ key="水平"; width=16; height=8; color=-2;  allow_accept=true; }
  6. }
  7. :row{
  8. :image_button{ key="左"; width=16; height=8; color=-2;  allow_accept=true; }
  9. :image_button{ key="下"; width=16; height=8; color=-2;  allow_accept=true; }
  10. :image_button{ key="右"; width=16; height=8; color=-2;  allow_accept=true; }
  11. }
  12. :image_button{ key="雙向居中"; width=50; height=8; color=-2; is_cancel=true; }
  13.   }

DCL起始對話框函數 第4參數=2 轉成 dcl-lisp檔  另存檔案a2.lsp 如下
  1. ;***********************************************************************************************
  2. ;<<<<<<   設定 DCL  >>>>>>

  3. (defun NextSetting_DCL ()
  4.     (not (and (setq dcl_file (open (setq tmp (vl-filename-mktemp nil nil  ".DCL")) "w"))
  5.               (progn
  6.                  (foreach x
  7.                    '(  

  8.                      "NextSetting :dialog{"  
  9.                      "label = \"【物體對齊】\";"  
  10.                      ":row{"  
  11.                      ":image_button{"  
  12.                      "key=\"豎直\";"  
  13.                      "width=16;"  
  14.                      "height=8;"  
  15.                      "color=-2;"  
  16.                      ""  
  17.                      "allow_accept=true;"  
  18.                      "}"  
  19.                      ":image_button{"  
  20.                      "key=\"上\";"  
  21.                      "width=16;"  
  22.                      "height=8;"  
  23.                      "color=-2;"  
  24.                      ""  
  25.                      "allow_accept=true;"  
  26.                      "}"  
  27.                      ":image_button{"  
  28.                      "key=\"水平\";"  
  29.                      "width=16;"  
  30.                      "height=8;"  
  31.                      "color=-2;"  
  32.                      ""  
  33.                      "allow_accept=true;"  
  34.                      "}"  
  35.                      "}"  
  36.                      ":row{"  
  37.                      ":image_button{"  
  38.                      "key=\"左\";"  
  39.                      "width=16;"  
  40.                      "height=8;"  
  41.                      "color=-2;"  
  42.                      ""  
  43.                      "allow_accept=true;"  
  44.                      "}"  
  45.                      ":image_button{"  
  46.                      "key=\"下\";"  
  47.                      "width=16;"  
  48.                      "height=8;"  
  49.                      "color=-2;"  
  50.                      ""  
  51.                      "allow_accept=true;"  
  52.                      "}"  
  53.                      ":image_button{"  
  54.                      "key=\"右\";"  
  55.                      "width=16;"  
  56.                      "height=8;"  
  57.                      "color=-2;"  
  58.                      ""  
  59.                      "allow_accept=true;"  
  60.                      "}"  
  61.                      "}"  
  62.                      ":image_button{"  
  63.                      "key=\"雙向居中\";"  
  64.                      "width=50;"  
  65.                      "height=8;"  
  66.                      "color=-2;"  
  67.                      "is_cancel=true;"  
  68.                      "}"  
  69.                      ""  
  70.                      "}"  
  71.      ) (write-line x dcl_file) )
  72.      (setq dcl_file (close dcl_file))
  73.          (< 0 (setq dcl_id (load_dialog tmp)))
  74.              )   (if (not (new_dialog "NextSetting" dcl_id)) (exit))
  75.                  )   )   )

  76. (defun c:a2()
  77. ;***********************************************************************************************
  78. ;<<<<<<   設定 DCL  >>>>>>

  79.                                    
  80.           (vl-load-com) (NextSetting_DCL)  ; 在螢幕上顯示DCL
  81. ;;<-- 編輯區1 -->
  82.    
  83.    
  84.    
  85. (action_tile "accept" "(done_dialog 1)")
  86. (action_tile "cancel" "(done_dialog 0)")
  87.            (setq dd (start_dialog))
  88. (unload_dialog dcl_id)
  89. (vl-file-delete tmp)
  90. ;;<-- 編輯區2 -->
  91. (cond
  92. ((= dd 0)      );execute cancel button
  93. ((= dd 1)      );execute accept button
  94.    
  95. );end_cond
  96.    
  97. (princ)
  98. )


儲存檔案名稱即為 指令名稱  將a2.lsp載入執行 後 輸入指令 a2 便可顯示空白的幻燈片對話框  如圖片所示

DCL起始對話框函數 第4參數=3 轉成 dcl-lisp檔 (write格式)  另存檔案a3.lsp 如下
  1. (defun c:a3()
  2. (setq fname (vl-filename-mktemp nil nil ".dcl"))
  3. (setq fn (open fname "w"))
  4. (write-line "NextSetting :dialog{" fn)
  5. (write-line "label = \"【物體對齊】\";" fn)
  6. (write-line ":row{" fn)
  7. (write-line ":image_button{" fn)
  8. (write-line "key=\"豎直\";" fn)
  9. (write-line "width=16;" fn)
  10. (write-line "height=8;" fn)
  11. (write-line "color=-2;" fn)
  12. (write-line "" fn)
  13. (write-line "allow_accept=true;" fn)
  14. (write-line "}" fn)
  15. (write-line ":image_button{" fn)
  16. (write-line "key=\"上\";" fn)
  17. (write-line "width=16;" fn)
  18. (write-line "height=8;" fn)
  19. (write-line "color=-2;" fn)
  20. (write-line "" fn)
  21. (write-line "allow_accept=true;" fn)
  22. (write-line "}" fn)
  23. (write-line ":image_button{" fn)
  24. (write-line "key=\"水平\";" fn)
  25. (write-line "width=16;" fn)
  26. (write-line "height=8;" fn)
  27. (write-line "color=-2;" fn)
  28. (write-line "" fn)
  29. (write-line "allow_accept=true;" fn)
  30. (write-line "}" fn)
  31. (write-line "}" fn)
  32. (write-line ":row{" fn)
  33. (write-line ":image_button{" fn)
  34. (write-line "key=\"左\";" fn)
  35. (write-line "width=16;" fn)
  36. (write-line "height=8;" fn)
  37. (write-line "color=-2;" fn)
  38. (write-line "" fn)
  39. (write-line "allow_accept=true;" fn)
  40. (write-line "}" fn)
  41. (write-line ":image_button{" fn)
  42. (write-line "key=\"下\";" fn)
  43. (write-line "width=16;" fn)
  44. (write-line "height=8;" fn)
  45. (write-line "color=-2;" fn)
  46. (write-line "" fn)
  47. (write-line "allow_accept=true;" fn)
  48. (write-line "}" fn)
  49. (write-line ":image_button{" fn)
  50. (write-line "key=\"右\";" fn)
  51. (write-line "width=16;" fn)
  52. (write-line "height=8;" fn)
  53. (write-line "color=-2;" fn)
  54. (write-line "" fn)
  55. (write-line "allow_accept=true;" fn)
  56. (write-line "}" fn)
  57. (write-line "}" fn)
  58. (write-line ":image_button{" fn)
  59. (write-line "key=\"雙向居中\";" fn)
  60. (write-line "width=50;" fn)
  61. (write-line "height=8;" fn)
  62. (write-line "color=-2;" fn)
  63. (write-line "is_cancel=true;" fn)
  64. (write-line "}" fn)
  65. (write-line "" fn)
  66. (write-line "}" fn)
  67. (close fn)

  68. ;;************************************
  69. (setq dclid (load_dialog fname))
  70. (new_dialog"NextSetting" dclid)
  71. ;;<-- 編輯區1 -->
  72.    
  73.    
  74.    
  75. (action_tile "accept" "(done_dialog 1)")
  76. (action_tile "cancel" "(done_dialog 0)")
  77. (setq dd (start_dialog))
  78. (unload_dialog dcl_id)
  79. (vl-file-delete tmp)
  80. ;;<-- 編輯區2 -->
  81. (cond
  82. ((= dd 0)      );execute cancel button
  83. ((= dd 1)      );execute accept button
  84.    
  85. );end_cond
  86.    
  87. (princ)
  88. )

儲存檔案名稱即為 指令名稱  將a3.lsp載入執行 後 輸入指令 a3 便可顯示空白的幻燈片對話框 如圖片所示










本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2023-6-24 14:04:51 | 显示全部楼层
本帖最后由 lee50310 于 2023-6-25 09:09 编辑

假設你已熟讀規則並可自行撰寫 dlst列表 以範例3 幻燈片來說明
下面這個是寫好的 dlst列表  可透過轉換函數轉成 DCL檔 (比起一般撰寫DCL檔要簡單方便很多)

  1. (setq Dlst '(
  2.              ":row{"
  3.              ("image_button" "" "豎直" "16" "8" "" "-2" "#allow_accept=true;")
  4.              ("image_button" "" "上"   "16" "8" "" "-2" "#allow_accept=true;")
  5.              ("image_button" "" "水平" "16" "8" "" "-2" "#allow_accept=true;")
  6.              "}"
  7.              ":row{"
  8.              ("image_button" "" "左" "16" "8" "" "-2" "#allow_accept=true;")
  9.              ("image_button" "" "下" "16" "8" "" "-2" "#allow_accept=true;")
  10.              ("image_button" "" "右" "16" "8" "" "-2" "#allow_accept=true;")
  11.              }
  12.              ("@image_button" "" "雙向居中" "50" "8" "" "-2" )
  13.             
  14.        )
  15.       )


這是轉換程式Great-DCL.fas內的兩個重要函數 一個是DCL起始函數 及 結束函數 如下
  1. ;參數項       1        2       3  4  
  2. (DCL:STATE  Dlst "【物體對齊】" 0  1 ) ;DCL起始函數

  3. (setq dd(DCL:END)) ;結束函數


DCL起始函數有4個參數
第1項參數 Dlst 列表項
第2參數 DCL對話框之標題名稱
第3參數 OK或Cancel 按鈕生成選項 參數值 0至 5 詳使用說明
第ˋ4參數 是否生成 dcl文字檔
   0 =>不生成
   1 =>生成dcl檔
   2 =>dcl轉成lisp檔
   3 =>dcl轉成lisp檔(Write格式)

建議剛開始編寫 dlst列表 此函數第4 項參數先設0 =>不生成dcl
執行程式 若編寫的 dlst列表無誤 會在cad螢幕顯示 所寫的對話框
若沒顯示出對話框 表示 dlst列表內容有錯誤 須修正
等沒有錯誤 再改此參數 生成你要輸出的項目
 楼主| 发表于 2023-6-24 18:37:07 | 显示全部楼层
本帖最后由 lee50310 于 2023-6-25 06:43 编辑

水洗可口可乐 发表于 2023-6-24 18:09
大佬你这个 有具体应用吗


(需要会 lisp + dcl 写作基础才能看得懂)
这个是应用在 程式写作 需要dcl对话框时ˊ 可用此辅助程式帮助你快速生成dcl 并转成lisp档
可利用转好的 lisp档 继续程式写作节省时间并减少错误

有阿! ! 不是提供 ˊ6 个程式范例  

具体应用就要看你要写 哪种( lisp+dcl)程式 例如 你的dcl程式中有 按钮 ,有下拉式选项 ,有点选钮
那 dlst列表 编写方式 可参考 范例的 6.综合.lsp 去改成你要的格式

简单的说 你有看过院长写的(lisp+dcl)程式吗?
是不是 一個列表項 + 简短几个步骤 就生成dcl对话框
若你会写(lisp+dcl)程式 有了这个 转换程式 你也可以 像他一样快速建立




 楼主| 发表于 2023-6-24 14:32:30 | 显示全部楼层
本帖最后由 lee50310 于 2023-6-24 21:36 编辑

將生成後的空白 dcl  再自行填入 幻燈片載入路徑,初始參數設定及所需函數即可

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-6-24 15:26:25 | 显示全部楼层
大佬又来分享好东西了,好好学学

评分

参与人数 1明经币 +1 收起 理由
lee50310 + 1 學習精神 +1

查看全部评分

发表于 2023-6-24 16:58:00 | 显示全部楼层
講真說,我好希望你們改為簡體字,不費眼,新加坡就不錯不守舊
发表于 2023-6-24 18:08:18 | 显示全部楼层
caoliu023 发表于 2023-6-24 16:58
講真說,我好希望你們改為簡體字,不費眼,新加坡就不錯不守舊

他可能不太习惯简体
发表于 2023-6-24 18:09:57 | 显示全部楼层
大佬你这个 有具体应用吗
发表于 2023-6-24 19:11:24 | 显示全部楼层
lee50310 发表于 2023-6-24 18:37
(需要會 lisp + dcl 寫作基礎才能看得懂)
這個是應用在 程式寫作 需要dcl對話框時ˊ 可用此輔助程式幫 ...

谢谢了,我消化一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-23 20:17 , Processed in 0.260142 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表