乐筑天下

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

[编程交流] 需要快速回答!

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 17:24:05 | 显示全部楼层 |阅读模式
我的Lisp程序看起来像这样
 
此时,如果用户在请求关键字时点击“回车”,程序将结束,什么也不做(这很好)。
 
我希望用户能够选择他或她想要的选项,AutoCAD执行该选项,然后返回到关键字菜单-然后如果用户按enter键(没有关键字),LISP例程将完成;或者(使用关键字)完成所选选项,然后再次返回菜单。
 
非常感谢您的帮助。
回复

使用道具 举报

15

主题

102

帖子

106

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 17:32:10 | 显示全部楼层
这是一个lisp,其中包含您想要的内容。你可以告诉我们你需要什么。
 
  1. (defun c:setup ( / SHEET SCALE SF1)
  2. (initget "1 2 3 4 Exit")
  3. (setq SHEET (getkword "\nEnter Sheet [1]22X34,[2]24X36,[3]30X42,[4]36X48/<Exit>: "))
  4. (if (or (not SHEET) (= SHEET "Exit")) (exit))
  5. (initget "1 2 3 4 5 6 7 8 9 Exit")
  6. (setq SCALE (getkword "\nEnter Scale [1]FULL,[2]1/2,[3]1/4,[4]1/8,[5]1/20,[6]1/30,[7]1/40,[8]1/50,[9]custom/<Exit>: "))
  7. (if (or (not SCALE) (= SCALE "Exit")) (exit))
  8. (setq SCALE
  9.   (cond
  10.     ((= SCALE "1")   1.0)
  11.     ((= SCALE "2")  24.0)
  12.     ((= SCALE "3")  48.0)
  13.     ((= SCALE "4")  96.0)
  14.     ((= SCALE "5") 240.0)
  15.     ((= SCALE "6") 360.0)
  16.     ((= SCALE "7") 480.0)
  17.     ((= SCALE "8") 600.0)
  18.     ((= SCALE "9")
  19.       (initget "Exit")
  20.       (setq SF1 (getreal "\nEnter the desired scale factor/<Exit>: "))
  21.       (if (or (not SF1) (= SF1 "Exit")) (exit))
  22.       SF1
  23.     ) ;_ c9
  24.   ) ;_ cond
  25. ) ;_ setq
  26. (command ".DIMSCALE" SCALE ".LTSCALE" (/ SCALE 2.0))
  27. (cond
  28.    ((= SHEET "1")
  29.     ;; 22X34
  30.     ;; DO SOMETHING FOR THIS SHEET
  31.    ) ;_ c1
  32.    ((= SHEET "2")
  33.     ;; 24X36
  34.     ;; DO SOMETHING FOR THIS SHEET
  35.    ) ;_ c2
  36.    ((= SHEET "3")
  37.     ;; 30X42
  38.     ;; DO SOMETHING FOR THIS SHEET
  39.    ) ;_ c3
  40.    ((= SHEET "4")
  41.     ;; 36X48
  42.     ;; DO SOMETHING FOR THIS SHEET
  43.    ) ;_ c4
  44. ) ;_ cond
  45. (princ "\nDimscale = ") (princ (getvar "dimscale"))
  46. (princ "\nLTscale = ") (princ (getvar "ltscale"))
  47. (princ)
  48. ) ;_ defun c:setup

 
希望这有帮助!!!
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 17:37:46 | 显示全部楼层
例如:
 
  1. (defun c:test(/ cFlag ans)
  2. (while(not cFlag)
  3.    (initget "Duplicate Move Rotate")
  4.    (setq ans(getkword "\nAdjustment? [Duplicate/Move/Rotate]: "))
  5.    (cond
  6.      ((= ans "Duplicate")
  7.       (alert "You select Duplicate.\n\nPress Ok to return menu...")
  8.       ); end condition #1
  9.      ((= ans "Move")
  10.       (alert "You select Move.\n\nPress Ok to return menu...")
  11.       ); end condition #2
  12.      ((= ans "Rotate")
  13.       (alert "You select Rotate.\n\nPress Ok to return menu...")
  14.       ); end condition #3
  15.      (T
  16.       (alert "You press Enter.\n\nGoodbuy Lee Mac guy:)")
  17.       (setq cFlag T)
  18.       ); end condition #3
  19.      ); end cond
  20.    ); end while
  21. (princ)
  22. ); end of c:test

 
因为你不本地化你的变量吗?在这种情况下,您必须在程序开始时本地化“cFlag”变量或写入(setq cFlag nil)。本地化是正确的方式。。。
回复

使用道具 举报

15

主题

102

帖子

106

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 17:43:37 | 显示全部楼层
如果是我,我会使用这个lisp,只需在Righ-Click-Customization下设置默认模式,即重复最后一个命令。因此,当Lisp程序结束时,您可以右键单击再次开始,或者继续处理您的业务。我还更改了命令中的键,这样你就不必现在只需键入第一个字母就可以了。
 
  1. (defun c:test ()
  2.   (initget "D M R")
  3.   (setq ans (getkword "\nAdjustment? [D]uplicate,[M]ove,[R]otate]: "))
  4.     (cond
  5.      ((= ans "D")
  6.        (command "_copy" pause pause)
  7.        );end cond #1
  8.      ((= ans "M")
  9.        (command "_move" pause pause)
  10.       );end cond #2
  11.      ((= ans "R")
  12.        (command "_rotate" pause pause pause)
  13.       );end cond #3
  14.     );end cond
  15.   (princ)
  16. );end c:test
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 17:47:22 | 显示全部楼层
谢谢你的帮助,非常感谢。
 
我很可能会用你的方法,谢谢
 
 
我通常会本地化,但我很快就写出了LISP。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 17:49:30 | 显示全部楼层
阿斯米,我使用了你的方法,并不断收到如下所示的错误:
  1. error - syntax error

 
加载LISP例程时出错。有什么想法吗?
回复

使用道具 举报

2

主题

439

帖子

536

银币

限制会员

铜币
-14
发表于 2022-7-6 17:56:21 | 显示全部楼层
 
会是什么父母都丢了吗?或者错误在此代码之外?一切都对我有用。它太简单了,不能不工作。
回复

使用道具 举报

1

主题

133

帖子

145

银币

初来乍到

Rank: 1

铜币
4
发表于 2022-7-6 18:01:50 | 显示全部楼层
请记住使用描述性的线程标题,这有助于搜索功能的工作!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 18:06:25 | 显示全部楼层
很多次道歉,不会再发生了
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 18:13:53 | 显示全部楼层
这是ASMI示例的变体。它不使用标志变量,而是使用progn
包装代码。基本上,最后一个返回值被传递给progn,它反过来传递这个值
while循环的值。所以要退出循环,请通过nil。也就是说在循环中传递一个非零值。
优点是可以从cond调用例程,然后返回该例程
要退出或留在循环中的值。
  1. 5
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 15:31 , Processed in 1.285908 second(s), 72 queries .

© 2020-2025 乐筑天下

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