乐筑天下

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

[编程交流] 用按钮停止lisp循环

[复制链接]

5

主题

24

帖子

19

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 11:16:01 | 显示全部楼层
 
 
谢谢,我有点理解你在做什么,但我也不知道该如何使用它。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:17:57 | 显示全部楼层
它的工作方式与您发布的相同。
回复

使用道具 举报

5

主题

24

帖子

19

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 11:21:23 | 显示全部楼层
好的,但对我来说不是。
 
谢谢你对我的耐心。
 
我已经在心里把你贴的Lisp程序分开了,但我无法复制我的Lisp程序在你的Lisp程序中的作用。当它运行时,我可以告诉它正在循环,我可以取消它,但它从来没有像我的一样闪烁。我看不出你的那是设定线宽。
 
“t”是一个被设置的任意变量还是其他什么,我不确定。
 
还有什么是“abs”
 
  1. (setvar 'lwdisplay (abs (1- (getvar 'lwdisplay))))

 
谢谢
肖恩
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:26:31 | 显示全部楼层
abs是绝对值
 
 
它没有设定权重。它只是切换线宽显示的开/关状态。
回复

使用道具 举报

5

主题

24

帖子

19

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 11:29:13 | 显示全部楼层
经过一些尝试和错误,我得到了一些工作,不闪烁,不允许我缩放和平移时循环。有没有想过为什么我不能缩放和平移?
回复

使用道具 举报

5

主题

24

帖子

19

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 11:33:04 | 显示全部楼层
经过更多的尝试和错误,我得到了它的功能,我想除了我需要一些帮助与错误处理部分。我知道我又把它分开了,但如果它都在一个Lisp程序的地方,我就无法让它工作。它在运行时不会闪烁,也不会缩放。
 
在错误处理方面,如果它将lwdisplay重置为off,我无法使其工作,并且我还需要它将所有线宽设置回默认值。有人愿意给我一些指导吗?
 
 
什么是“uu”在延迟命令之前?
谢谢
肖恩
  1. ;;;;;;;;;;;;;;;;;;;;;;
  2. ;THIS MACRO MUST BE KEPT SEPARATE FROM LWTFLASHOFF OR IT WILL NOT RUN AND WILL NOT ALLOW ZOOMING AND PANNING WHILE FLASHING.
  3. ;;;;;;;;;;;;;;;;;;;;;;
  4. (defun C:LWTFLASHON (/ *error* lwd)
  5. (defun *error* (msg)
  6. ;    (and lwd (setvar 'lwdisplay lwd))
  7.    (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))
  8.      (princ (strcat "\nError: " msg))
  9.    )
  10. )
  11. (setq lwd (getvar 'lwdisplay))
  12. ;  (while t
  13. ;    (setvar 'lwdisplay (abs (1- (getvar 'lwdisplay))))
  14. ;    (command "_.delay" 2000)
  15. (command "LWDISPLAY" "ON" "DELAY" "200")
  16. (*error* nil)
  17. (princ)
  18. )
  19. ;;;;;;;;;;;;;;;;;;;;;;
  20. ;End Flash On
  21. ;;;;;;;;;;;;;;;;;;;;;;
  22. ;;;;;;;;;;;;;;;;;;;;;;
  23. ;Flash OFF
  24. ;;;;;;;;;;;;;;;;;;;;;;
  25. ;THIS MACRO MUST BE KEPT SEPARATE FROM LWTFLASHOFF OR IT WILL NOT RUN AND WILL NOT ALLOW ZOOMING AND PANNING WHILE FLASHING.
  26. ;;;;;;;;;;;;;;;;;;;;;;
  27. (defun C:LWTFLASHOFF (/ *error* lwd)
  28. (defun *error* (msg)
  29. ;    (and lwd (setvar 'lwdisplay lwd))
  30.    (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))
  31.      (princ (strcat "\nError: " msg))
  32.    )
  33. )
  34. (setq lwd (getvar 'lwdisplay))
  35. ;  (while t
  36. ;    (setvar 'lwdisplay (abs (1- (getvar 'lwdisplay))))
  37. ;    (command "_.delay" 2000)
  38. (command "LWDISPLAY" "OFF" "DELAY" "200")
  39. (*error* nil)
  40. (princ)
  41. )
  42. ;;;;;;;;;;;;;;;;;;;;;;
  43. ;End Flash OFF
  44. ;;;;;;;;;;;;;;;;;;;;;;
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:34:24 | 显示全部楼层
想想你想重置什么。
正如我对min所做的那样,我存储了LWDisplay变量的原始状态,然后当例程退出或出错时,它会根据该状态重置它。
 
_说明语言差异(autocad以英语编写)
. 正在取消/重新定义的命令的帐户。
回复

使用道具 举报

5

主题

24

帖子

19

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 11:37:22 | 显示全部楼层
有人能解释一下这两行吗?
 
(和lwd(setvar‘lwdisplay lwd))
(if(and msg(not(wcmatch(strcase msg)”*中断*、*取消*、*退出*、“”))
 
 
我对代码的解释有什么错误吗?
  1.       (defun c:LWT (/ *error* lwd)      ;Name of the Function(or program) and variables are local to this program
  2.    (defun *error* (msg)   ;name of the function "error" and its argument passing variable                                                                                                                                
  3.      (and lwd (setvar 'lwdisplay lwd))   ;not sure
  4.      (if (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*,")))    ; if MSG is equal to BREAK*,*CANCEL*,*QUIT*,"then?
  5.        (princ (strcat "\nError: " msg))              ;prints message
  6.      )
  7.    ) ; ends the error section?
  8.   
  9.    (setq lwd (getvar 'lwdisplay))   ;assigns the lwd variable with the lwdisplay variable of 1 or 0
  10.    (while t               ;loops the remainder of this program until T is nil
  11.      (setvar 'lwdisplay (abs (1- (getvar 'lwdisplay))))              ;changes the lwdisplay variable from 0 to 1 or 1 to 0
  12.      (command "_.delay" 200)
  13.    )
  14.    (*error* nil) ;sets error to nil
  15.    (princ)
  16. )

 
谢谢
回复

使用道具 举报

5

主题

24

帖子

19

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 11:40:44 | 显示全部楼层
好的,差不多了,我需要它能够在循环中缩放(用鼠标滚轮),有人知道为什么它不会?
 
这是我现在拥有的。
  1. 7
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:45:48 | 显示全部楼层
首先检查lwd变量是否已存储,如果已存储,则会使用它设置lwdisplay变量。
 
错误消息检查只是为了剔除是否存在实际的错误消息,如果它与三个基本错误消息不匹配,它将打印它。
 
 
 
尝试将(while T替换为(while(等式5(car(grread T 15 0)))
这样,它将允许你四处平移,一旦你点击任何键或单击鼠标,它就会退出。请记住,它只会循环打开/关闭状态等。如果您的鼠标正在移动,但由于您将四处平移,它将工作良好。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 16:56 , Processed in 0.889005 second(s), 70 queries .

© 2020-2025 乐筑天下

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