乐筑天下

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

[编程交流] 反应堆问题:层不&

[复制链接]

44

主题

139

帖子

95

银币

后起之秀

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

铜币
221
发表于 2022-7-5 17:11:22 | 显示全部楼层 |阅读模式
您好,我有一个小Lisp程序的命令事件反应器。。问题是,当您完成命令后,它不会返回到旧层。
 
错误在哪里?谢谢,丹尼斯
  1. (vl-load-com)
  2. ;****************************************
  3. (vlr-command-reactor
  4.    nil '((:vlr-commandWillStart . startCommand)))
  5. (vlr-command-reactor
  6.    nil '((:vlr-commandEnded . endCommand)))
  7. (vlr-command-reactor
  8.    nil '((:vlr-commandCancelled . cancelCommand)))
  9. ;******************************************************
  10. (defun startCommand (calling-reactor startcommandInfo /
  11.             thecommandstart)
  12. (setq OldLayer (getvar "CLAYER"))
  13. (setq thecommandstart (nth 0 startcommandInfo))
  14. (cond
  15. ((= thecommandstart "XLINE") (setvar "CLAYER" "_Assi"))
  16. ((= thecommandstart "DIMLINEAR") (setvar "CLAYER" "DIMS"))
  17. );cond
  18. (princ)
  19. );defun
  20. ;****************************************************
  21. (defun endCommand (calling-reactor endcommandInfo /
  22.           thecommandend)
  23. (setq thecommandend (nth 0 endcommandInfo))
  24. (cond
  25. ((= thecommandend "XLINE") (setvar "CLAYER" OldLayer))
  26. ((= thecommandstart "DIMLINEAR") (setvar "CLAYER" OldLayer))
  27. );cond
  28. (princ)
  29. );defun
  30. ;********************************************************
  31. (defun cancelCommand (calling-reactor cancelcommandInfo /
  32.              thecommandcancel)
  33. (setq thecommandcancel (nth 0 cancelcommandInfo))
  34. (cond
  35. ((= thecommandcancel "XLINE") (setvar "CLAYER" OldLayer))
  36. ((= thecommandstart "DIMLINEAR") (setvar "CLAYER" OldLayer))
  37. );cond
  38. (princ)
  39. );defun
  40. ;*********************************************************
  41. (princ)
回复

使用道具 举报

37

主题

264

帖子

236

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-5 17:22:45 | 显示全部楼层
你有没有看过LM:layerdirector?
我想当图层关闭或冻结时,我会遇到这个问题。无论如何,听起来很熟悉。。(现在不在destop后面)致以诚挚的问候
回复

使用道具 举报

44

主题

139

帖子

95

银币

后起之秀

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

铜币
221
发表于 2022-7-5 17:27:21 | 显示全部楼层
我检查了oldlayer的值,发现它变为新的!
 
问题似乎进入循环2次!
看看那里:
我已经执行了XLine命令

                               
登录/注册后可看大图

 
所有层均打开
 
谢谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:31:41 | 显示全部楼层
你好
 
试试这个;
  1. (vl-load-com)
  2. ;; Tharwat - 30.09.2016 ;;
  3. (vlr-command-reactor "test" '((:vlr-commandWillStart . startCommand)
  4.                              (:vlr-commandEnded . endCommand)
  5.                              (:vlr-commandCancelled . endCommand)
  6.                              )
  7. )
  8. (defun startCommand (r c)
  9. (and (eq (vlr-data r) "test")
  10.       (wcmatch (strcase (car c)) "XLINE,DIMLINEAR")
  11.       (tblsearch "LAYER" "_Assi")
  12.       (setq *currentlayer* (getvar "CLAYER"))
  13.       (setvar "CLAYER" "_Assi")
  14.       )
  15. (princ)
  16. )
  17. ;;                                ;;
  18. (defun endCommand (r c)
  19. (and (eq (vlr-data r) "test")   
  20.       *currentlayer*
  21.       (tblsearch "LAYER" *currentlayer*)
  22.       (setvar "CLAYER" *currentlayer*)
  23.       (setq *currentlayer* nil)
  24.       )
  25. (princ)
  26. )
回复

使用道具 举报

44

主题

139

帖子

95

银币

后起之秀

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

铜币
221
发表于 2022-7-5 17:42:33 | 显示全部楼层
你好谢谢您的回复!
 
它不会改变图层。。
 
我已经加载了它,并试图制作一个Xline和一个quote,但它们在当前层中。。无论如何,我已经注意到,它在循环中也有很多次。。我不明白为什么。。命令只能启动一次,代码只能运行一次。。
 
谢谢你的帮助!
 
编辑,好的,它改变了它。。我没有创建层\u Assi。。作为我的,它不会回到旧层。。可能是因为它运行了好几次
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:49:00 | 显示全部楼层
你的密码和我的密码一定有冲突
因此,只需从一个新图形开始,或者关闭并重新打开当前图形,或者在reactor命令中更改我的函数名称(startCommand和endCommand)。
回复

使用道具 举报

44

主题

139

帖子

95

银币

后起之秀

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

铜币
221
发表于 2022-7-5 17:56:55 | 显示全部楼层
你说得对,先生!!!非常感谢你!
 
你能给我一点建议,让我有更多的案例吗?
 
  1. (defun startCommand (r c)
  2. (and (eq (vlr-data r) "test")
  3.       (cond
  4.       ((wcmatch (strcase (car c)) "XLINE")
  5.       
  6.       (tblsearch "LAYER" "_Assi")
  7.       (setq *currentlayer* (getvar "CLAYER"))
  8.       (setvar "CLAYER" "_Assi")
  9.       )
  10.       ((wcmatch (strcase (car c)) "DIMLINEAR")
  11.       
  12.       (tblsearch "LAYER" "DIMS")
  13.       (setq *currentlayer* (getvar "CLAYER"))
  14.       (setvar "CLAYER" "DIMS")
  15.       )
  16.       )
  17.       )
  18.       
  19. (princ)
  20. )

 
这看起来很难看,我认为它不能正常工作。。
 
谢谢
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:00:21 | 显示全部楼层
拍摄这个;
  1. (defun startCommand (r c)
  2. (and (eq (vlr-data r) "test")
  3.       (vl-some '(lambda (com lay)
  4.                  (and (eq (strcase (car c)) com)
  5.                       (tblsearch "LAYER" lay)
  6.                       (setq *currentlayer* (getvar "CLAYER"))
  7.                       (setvar "CLAYER" lay)
  8.                       )
  9.                   )
  10.                '("XLINE" "DIMLINEAR")
  11.                '("_Assi" "DIMS")
  12.                )
  13.       )   
  14. (princ)
  15. )
回复

使用道具 举报

44

主题

139

帖子

95

银币

后起之秀

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

铜币
221
发表于 2022-7-5 18:06:39 | 显示全部楼层
谢谢你!非常聪明的解决方案!
 
从这段代码中我有很多东西要学习。。谢谢
 
附:一个小问题。。有没有可能在我完成之前让命令保持活动状态?现在,它会更改每个点的图层:S
 
  1. ...
  2.                '("XLINE" "DIMLINEAR" "DIM" "MTEXT" "POINT")
  3.                '("_Assi" "DIMS" "DIMS" "_Testi" "_Appoggi centri")
  4. ...
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:16:41 | 显示全部楼层
 
非常欢迎你。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 09:53 , Processed in 0.587402 second(s), 75 queries .

© 2020-2025 乐筑天下

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