乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 38|回复: 19

[编程交流] 1线2线3线dcl自动g

[复制链接]

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:44:21 | 显示全部楼层 |阅读模式
很多时候你会看到一个lisp一个接一个地问问题,输入L,输入W,输入H。
 
那么,为什么不能从lisp中的一行(可能是5或6个条目)简单地调用dcl呢。完全定制即时标题描述和字符框大小。这是用于跨任何lisp用作库函数的。慢慢地,我改变了我们的Lisp程序,更好的是使用dcl没有上下屏幕条目。
 
无论如何,这里是getval1 2和3,只需加载它并用一行代码调用它。下面的代码中包含了示例调用。它返回Val1 val2 val3等字符串供您使用,只需将代码另存为“Getvals.lsp”
 
184426gz1uoj1dddd3jxrd.jpg
 
  1. ; this is a 3 line example of code
  2. (defun c:test ()
  3. (if (not AH:getval3)(load "getvals"))
  4. (ah:getval3 "Enter Length" 8 7 "Enter width"  6 5 "Enter height" 6 5)
  5. (setq pt (Getpoint "\nPick lower left corner"))
  6. (command "rectang" PT "D" (atof Val1) (atof Val2) pt)
  7. (command "extrude" "L" "" (atof val3))
  8. (command "Vpoint" (list 1 1 1 ))
  9. )

 
  1. ; Input  Dialog box with variable title
  2. ; By Ah June 2015
  3. ; credit to Alan J Thompson for original idea
  4. ;code just use these next two lines
  5. ; (if (not AH:getval1)(load "getvals"))
  6. ; (ah:getval1 "title" width limit)  ;
  7. ; 1 line dcl
  8. ; sample code (ah:getval1 "line 1" 5 4)
  9. (defun AH:getval1 (title width limit / fo)
  10. (setq fname (strcat (getvar "SAVEFILEPATH") "\\getval1.dcl")) ; choose 1 of these file locations
  11. ;(setq fname (strcat (getenv "TEMP") "\\getval1.dcl")) ; temp directory defined in support paths
  12. ;(setq fname "C:\\acdatemp\\getval1.dcl") ; a existing directory you use
  13. (setq fo (open fname "w"))
  14. (write-line "ddgetval : dialog {" fo)
  15. (write-line " : row {" fo)
  16. (write-line ": edit_box {" fo)
  17. (write-line (strcat "    key = "  (chr 34) "key1" (chr 34) ";") fo)
  18. (write-line  (strcat " label = "  (chr 34) title (chr 34) ";"  )   fo)
  19. ; these can be replaced with shorter value etc
  20. (write-line (strcat "     edit_width = " (rtos width 2 0) ";" ) fo)
  21. (write-line (strcat "     edit_limit = " (rtos limit 2 0) ";" ) fo)
  22. (write-line "   is_enabled = true;" fo)
  23. (write-line "    }" fo)
  24. (write-line "  }" fo)
  25. (write-line "ok_only;}" fo)
  26. (close fo)
  27. (setq dcl_id (load_dialog  fname))
  28. ;(setq dcl_id (load_dialog  "c:\\acadtemp\\getval1"))
  29. (if (not (new_dialog "ddgetval" dcl_id))
  30. (exit))
  31. (action_tile "key1" "(setq val1 $value)")
  32. (mode_tile "key1" 3)
  33. (start_dialog)
  34. (done_dialog)
  35. (unload_dialog dcl_id)
  36. ; returns the value of val1 as a string
  37. (alert val1)
  38. )
  39. ; 2 line dcl
  40. ; sample code (ah:getval2 "line 1" 5 4 "line2" 8 7)
  41. (defun AH:getval2 (title1 width1 limit1 title2 width2 limit2 / fo)
  42. (setq fname (strcat (getvar "SAVEFILEPATH") "\\getval2.dcl"))
  43. ; choose 1 of these file locations
  44. ;(setq fname (strcat (getenv "TEMP") "\\getval2.dcl")) ; temp directory defined in support paths
  45. ;(setq fname "C:\\acdatemp\\getval2.dcl") ; a existing directory you use
  46. (setq fo (open fname "w"))
  47. (write-line "ddgetval2 : dialog {" fo)
  48. (write-line " : column {" fo)
  49. (write-line ": edit_box {" fo)
  50. (write-line (strcat "    key = " (chr 34) "key1" (chr 34) ";") fo)
  51. (write-line  (strcat " label = "  (chr 34) title1 (chr 34) ";" ) fo)
  52. (write-line (strcat "     edit_width = " (rtos width1 2 0) ";" ) fo)
  53. (write-line (strcat "     edit_limit = " (rtos limit1 2 0) ";" ) fo)
  54. (write-line "   is_enabled = true ;" fo)
  55. (write-line "    }" fo)
  56. (write-line "spacer_1 ;" fo)
  57. (write-line ": edit_box {" fo)
  58. (write-line (strcat "    key = " (chr 34) "key2" (chr 34) ";") fo)
  59. (write-line (strcat " label = "  (chr 34) title2 (chr 34) ";"  ) fo)
  60. (write-line (strcat "     edit_width = " (rtos width2 2 0) ";" ) fo)
  61. (write-line (strcat "     edit_limit = " (rtos limit2 2 0) ";" ) fo)
  62. (write-line "   is_enabled = true ;" fo)
  63. (write-line "    }" fo)
  64. (write-line "    }" fo)
  65. (write-line "spacer_1 ;" fo)
  66. (write-line "ok_only;}" fo)
  67. (close fo)
  68. ; code part
  69. (setq dcl_id (load_dialog  fname))
  70. (if (not (new_dialog "ddgetval2" dcl_id))
  71. (exit))
  72. (mode_tile "key1" 3)
  73. (action_tile "key1" "(setq val1 $value)")
  74. (mode_tile "key2" 3)
  75. (action_tile "key2" "(setq val2 $value)")
  76. (start_dialog)
  77. (done_dialog)
  78. (unload_dialog dcl_id)
  79. ; returns the value of val1 and val2 as strings
  80. (alert (strcat val1 "\n" val2))  ; remove this line in finished code
  81. )
  82. ; 3 line dcl
  83. ; sample code (ah:getval3 "line 1" 5 4 "line2" 8 7 "line3" 6 4)
  84. (defun AH:getval3 (title1 width1 limit1 title2 width2 limit2 title3 width3 limit3 / fo)
  85. (setq fname (strcat (getvar "SAVEFILEPATH") "\\getval3.dcl")) ; choose 1 of these file locations
  86. ;(setq fname (strcat (getenv "TEMP") "\\getval3.dcl")) ; temp directory defined in support paths
  87. ;(setq fname "C:\\acdatemp\\getval3.dcl") ; a existing directory you use
  88. (setq fo (open fname "w"))
  89. (write-line "ddgetval3 : dialog {" fo)
  90. (write-line " : column {" fo)
  91. (write-line ": edit_box {" fo)
  92. (write-line (strcat "    key = " (chr 34) "key1" (chr 34) ";") fo)
  93. (write-line  (strcat " label = "  (chr 34) title1 (chr 34) ";" ) fo)
  94. (write-line (strcat "     edit_width = " (rtos width1 2 0) ";" ) fo)
  95. (write-line (strcat "     edit_limit = " (rtos limit1 2 0) ";" ) fo)
  96. (write-line "   is_enabled = true ;" fo)
  97. (write-line "    }" fo)
  98. (write-line "spacer_1 ;" fo)
  99. (write-line ": edit_box {" fo)
  100. (write-line (strcat "    key = " (chr 34) "key2" (chr 34) ";") fo)
  101. (write-line (strcat " label = "  (chr 34) title2 (chr 34) ";"  ) fo)
  102. (write-line (strcat "     edit_width = " (rtos width2 2 0) ";" ) fo)
  103. (write-line (strcat "     edit_limit = " (rtos limit2 2 0) ";" ) fo)
  104. (write-line "   is_enabled = true ;" fo)
  105. (write-line "    }" fo)
  106. (write-line "spacer_1 ;" fo)
  107. (write-line ": edit_box {" fo)
  108. (write-line (strcat "    key = " (chr 34) "key3" (chr 34) ";") fo)
  109. (write-line (strcat " label = "  (chr 34) title3 (chr 34) ";"  ) fo)
  110. (write-line (strcat "     edit_width = " (rtos width3 2 0) ";" ) fo)
  111. (write-line (strcat "     edit_limit = " (rtos limit3 2 0) ";" ) fo)
  112. (write-line "   is_enabled = true ;" fo)
  113. (write-line "    }" fo)
  114. (write-line "    }" fo)
  115. (write-line "spacer_1 ;" fo)
  116. (write-line "ok_only;}" fo)
  117. (close fo)
  118. ; code part
  119. (setq dcl_id (load_dialog  fname))
  120. (if (not (new_dialog "ddgetval3" dcl_id))
  121. (exit))
  122. (mode_tile "key1" 3)
  123. (action_tile "key1" "(setq val1 $value)")
  124. (mode_tile "key2" 3)
  125. (action_tile "key2" "(setq val2 $value)")
  126. (mode_tile "key3" 3)
  127. (action_tile "key3" "(setq val3 $value)")
  128. (start_dialog)
  129. (done_dialog)
  130. (unload_dialog dcl_id)
  131. ; returns the value of val1 and val2 val3 as strings
  132. (alert (strcat val1 "\n" val2 "\n" val3))  ; remove this line in finished code
  133. )
回复

使用道具 举报

17

主题

1274

帖子

25

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2022-7-5 17:47:59 | 显示全部楼层
美好的我只在一些例程中添加了dcl,没有生成lisp。我没有要尝试的“c:\\acadtemp”文件夹(getvar“SAVEFILEPATH”)
回复

使用道具 举报

26

主题

145

帖子

122

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
130
发表于 2022-7-5 17:53:36 | 显示全部楼层
是的,很好,但是,我想我需要一些例子。
回复

使用道具 举报

17

主题

1274

帖子

25

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2022-7-5 17:56:41 | 显示全部楼层
它基本上是一个文件中的3个示例-用于1、2或3个输入的AH:getval1、AH:getval2和AH:getval3,允许您通过调用设置对话框的大小。使用以下示例调用之一后
从临时文件夹中打开dcl文件以将其签出。
回复

使用道具 举报

17

主题

1274

帖子

25

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2022-7-5 17:58:17 | 显示全部楼层
将其更改为使用默认的AutoCAD temp文件夹,因为我没有“C://acadtemp”文件夹:
  1. ;| Input  Dialog box with variable title
  2. By Ah June 2015
  3. http://www.cadtutor.net/forum/showthread.php?93002-1-line-2-line-3line-dcl-auto-generator-plus-more-if-required&p=636641&viewfull=1#post636641
  4. Modified to use (getenv "temp") by Tom Beauford
  5. code just use these next two lines
  6. (if (not AH:getval1)(load "getvals"))
  7. (ah:getval1 "title" width limit)  |;
  8. ; 1 line dcl
  9. ; sample code(ah:getval1 "line 1" 5 4)
  10. (defun AH:getval1 (title width limit / fname fo dcl_id val1)
  11. (setq fname (strcat (getenv "temp") "\\getval1.dcl"))
  12. (setq fo (open fname "w"))
  13. (write-line "ddgetval : dialog {" fo)
  14. (write-line " : row {" fo)
  15. (write-line ": edit_box {" fo)
  16. (write-line (strcat "    key = "  (chr 34) "key1" (chr 34) ";") fo)
  17. (write-line  (strcat " label = "  (chr 34) title (chr 34) ";"  )   fo)
  18. ; these can be replaced with shorter value etc
  19. (write-line (strcat "     edit_width = " (rtos width 2 0) ";" ) fo)
  20. (write-line (strcat "     edit_limit = " (rtos limit 2 0) ";" ) fo)
  21. (write-line "   is_enabled = true;" fo)
  22. (write-line "    }" fo)
  23. (write-line "  }" fo)
  24. (write-line "ok_only;}" fo)
  25. (close fo)
  26. (setq dcl_id (load_dialog  fname))
  27. ;(setq dcl_id (load_dialog  "c:\\acadtemp\\getval1"))
  28. (if (not (new_dialog "ddgetval" dcl_id))
  29. (exit))
  30. (action_tile "key1" "(setq val1 $value)")
  31. (mode_tile "key1" 3)
  32. (start_dialog)
  33. (done_dialog)
  34. (unload_dialog dcl_id)
  35. ; returns the value of val1 as a string
  36. (alert val1)
  37. )
  38. ; 2 line dcl
  39. ; sample code (ah:getval2 "line 1" 5 4 "line2" 8 7)
  40. (defun AH:getval2 (title1 width1 limit1 title2 width2 limit2 / fname fo dcl_id val1 val2)
  41. (setq fname (strcat (getenv "temp") "\\getval2.dcl"))
  42. (setq fo (open fname "w"))
  43. (write-line "ddgetval2 : dialog {" fo)
  44. (write-line " : column {" fo)
  45. (write-line ": edit_box {" fo)
  46. (write-line (strcat "    key = " (chr 34) "key1" (chr 34) ";") fo)
  47. (write-line  (strcat " label = "  (chr 34) title1 (chr 34) ";" ) fo)
  48. (write-line (strcat "     edit_width = " (rtos width1 2 0) ";" ) fo)
  49. (write-line (strcat "     edit_limit = " (rtos limit1 2 0) ";" ) fo)
  50. (write-line "   is_enabled = true ;" fo)
  51. (write-line "    }" fo)
  52. (write-line "spacer_1 ;" fo)
  53. (write-line ": edit_box {" fo)
  54. (write-line (strcat "    key = " (chr 34) "key2" (chr 34) ";") fo)
  55. (write-line (strcat " label = "  (chr 34) title2 (chr 34) ";"  ) fo)
  56. (write-line (strcat "     edit_width = " (rtos width2 2 0) ";" ) fo)
  57. (write-line (strcat "     edit_limit = " (rtos limit2 2 0) ";" ) fo)
  58. (write-line "   is_enabled = true ;" fo)
  59. (write-line "    }" fo)
  60. (write-line "    }" fo)
  61. (write-line "spacer_1 ;" fo)
  62. (write-line "ok_only;}" fo)
  63. (close fo)
  64. ; code part
  65. (setq dcl_id (load_dialog  fname))
  66. (if (not (new_dialog "ddgetval2" dcl_id))
  67. (exit))
  68. (mode_tile "key1" 3)
  69. (action_tile "key1" "(setq val1 $value)")
  70. (mode_tile "key2" 3)
  71. (action_tile "key2" "(setq val2 $value)")
  72. (start_dialog)
  73. (done_dialog)
  74. (unload_dialog dcl_id)
  75. ; returns the value of val1 and val2 as strings
  76. (alert (strcat val1 " " val2))
  77. )
  78. ; 3 line dcl
  79. ; sample code (ah:getval3 "line 1" 5 4 "line2" 8 7 "line3" 6 4)
  80. (defun AH:getval3 (title1 width1 limit1 title2 width2 limit2 title3 width3 limit3 / fname fo dcl_id val1 val2 val3)
  81. (setq fname (strcat (getenv "temp") "\\getval3.dcl"))
  82. (setq fo (open fname "w"))
  83. (write-line "ddgetval3 : dialog {" fo)
  84. (write-line " : column {" fo)
  85. (write-line ": edit_box {" fo)
  86. (write-line (strcat "    key = " (chr 34) "key1" (chr 34) ";") fo)
  87. (write-line  (strcat " label = "  (chr 34) title1 (chr 34) ";" ) fo)
  88. (write-line (strcat "     edit_width = " (rtos width1 2 0) ";" ) fo)
  89. (write-line (strcat "     edit_limit = " (rtos limit1 2 0) ";" ) fo)
  90. (write-line "   is_enabled = true ;" fo)
  91. (write-line "    }" fo)
  92. (write-line "spacer_1 ;" fo)
  93. (write-line ": edit_box {" fo)
  94. (write-line (strcat "    key = " (chr 34) "key2" (chr 34) ";") fo)
  95. (write-line (strcat " label = "  (chr 34) title2 (chr 34) ";"  ) fo)
  96. (write-line (strcat "     edit_width = " (rtos width2 2 0) ";" ) fo)
  97. (write-line (strcat "     edit_limit = " (rtos limit2 2 0) ";" ) fo)
  98. (write-line "   is_enabled = true ;" fo)
  99. (write-line "    }" fo)
  100. (write-line "spacer_1 ;" fo)
  101. (write-line ": edit_box {" fo)
  102. (write-line (strcat "    key = " (chr 34) "key3" (chr 34) ";") fo)
  103. (write-line (strcat " label = "  (chr 34) title3 (chr 34) ";"  ) fo)
  104. (write-line (strcat "     edit_width = " (rtos width3 2 0) ";" ) fo)
  105. (write-line (strcat "     edit_limit = " (rtos limit3 2 0) ";" ) fo)
  106. (write-line "   is_enabled = true ;" fo)
  107. (write-line "    }" fo)
  108. (write-line "    }" fo)
  109. (write-line "spacer_1 ;" fo)
  110. (write-line "ok_only;}" fo)
  111. (close fo)
  112. ; code part
  113. (setq dcl_id (load_dialog  fname))
  114. (if (not (new_dialog "ddgetval3" dcl_id))
  115. (exit))
  116. (mode_tile "key1" 3)
  117. (action_tile "key1" "(setq val1 $value)")
  118. (mode_tile "key2" 3)
  119. (action_tile "key2" "(setq val2 $value)")
  120. (mode_tile "key3" 3)
  121. (action_tile "key3" "(setq val3 $value)")
  122. (start_dialog)
  123. (done_dialog)
  124. (unload_dialog dcl_id)
  125. ; returns the value of val1 and val2 val3 as strings
  126. (alert (strcat val1 "\n" val2 "\n" val3))
  127. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:03:08 | 显示全部楼层
不用担心,tombu,我们每个人都有一个本地临时目录,它是我们个人资料的一部分,我已经更改了我原来的帖子,但为了您的信息,需要更改路径名的双反斜杠\\getval1。
回复

使用道具 举报

17

主题

1274

帖子

25

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2022-7-5 18:04:25 | 显示全部楼层
 
返回“C:\\Users\\BeaufordT\\appdata\\local\\temp\”,结尾带有双反斜杠
返回“C:\\Users\\BeaufordT\\appdata\\local\\temp\\getval1.dcl”,而
虽然
返回“C:\\Users\\BeaufordT\\appdata\\local\\temp\\\getval1.dcl”
 
经过进一步思考
返回“C:\\Users\\BEAUFO~1\\AppData\\Local\\Temp”的更好,因为SAVEFILEPATH是保存autosave sv$文件的地方。通常情况下,您可以在不更改临时文件夹位置的情况下更改SAVEFILEPATH。所以我把它改成了
在我之前的帖子中。
回复

使用道具 举报

6

主题

249

帖子

247

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 18:09:06 | 显示全部楼层
 
AL,getval。2012年推出的lsp完美无瑕。我无法获取getvals。lsp将dcl文件写入我的临时目录(我已正确设置)中,以了解我可能做错的任何建议或示例。
史蒂夫
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:10:35 | 显示全部楼层
Tombu有趣得到不同的结果
 
命令:(strcat(getvar“SAVEFILEPATH”)“\\getval1.dcl”)
“C:\\AcadTemp\\getval1.dcl”
 
命令:(getvar“SAVEFILEPATH”)
“C:\\AcadTemp”
 
 
(strcat(getvar“SAVEFILEPATH”)“getval1.dcl”)
“C:\\AcadTempgetval1.dcl”
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:14:59 | 显示全部楼层
stevesfr最简单的方法是对目录进行硬编码,我们有一个c:\Acadtemp,这是我首先发布的,然后将代码更改为更通用,因为另一个发布的目录没有Acadtemp。
 
  1. 9
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-13 04:12 , Processed in 0.681900 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表