MastroLube 发表于 2022-7-5 17:11:22

反应堆问题:层不&

您好,我有一个小Lisp程序的命令事件反应器。。问题是,当您完成命令后,它不会返回到旧层。
 
错误在哪里?谢谢,丹尼斯
(vl-load-com)

;****************************************
(vlr-command-reactor
   nil '((:vlr-commandWillStart . startCommand)))
(vlr-command-reactor
   nil '((:vlr-commandEnded . endCommand)))
(vlr-command-reactor
   nil '((:vlr-commandCancelled . cancelCommand)))
;******************************************************
(defun startCommand (calling-reactor startcommandInfo /
            thecommandstart)
(setq OldLayer (getvar "CLAYER"))
(setq thecommandstart (nth 0 startcommandInfo))
(cond
((= thecommandstart "XLINE") (setvar "CLAYER" "_Assi"))
((= thecommandstart "DIMLINEAR") (setvar "CLAYER" "DIMS"))





);cond
(princ)
);defun
;****************************************************

(defun endCommand (calling-reactor endcommandInfo /
          thecommandend)
(setq thecommandend (nth 0 endcommandInfo))
(cond
((= thecommandend "XLINE") (setvar "CLAYER" OldLayer))
((= thecommandstart "DIMLINEAR") (setvar "CLAYER" OldLayer))


);cond
(princ)
);defun
;********************************************************
(defun cancelCommand (calling-reactor cancelcommandInfo /
             thecommandcancel)
(setq thecommandcancel (nth 0 cancelcommandInfo))
(cond
((= thecommandcancel "XLINE") (setvar "CLAYER" OldLayer))
((= thecommandstart "DIMLINEAR") (setvar "CLAYER" OldLayer))

);cond
(princ)
);defun
;*********************************************************
(princ)

halam 发表于 2022-7-5 17:22:45

你有没有看过LM:layerdirector?
我想当图层关闭或冻结时,我会遇到这个问题。无论如何,听起来很熟悉。。(现在不在destop后面)致以诚挚的问候

MastroLube 发表于 2022-7-5 17:27:21

我检查了oldlayer的值,发现它变为新的!
 
问题似乎进入循环2次!
看看那里:
我已经执行了XLine命令
https://www.cadtutor.net/forum/attachment.php?attachmentid=59375&cid=1&stc=1
 
所有层均打开
 
谢谢

Tharwat 发表于 2022-7-5 17:31:41

你好
 
试试这个;

(vl-load-com)
;; Tharwat - 30.09.2016 ;;
(vlr-command-reactor "test" '((:vlr-commandWillStart . startCommand)
                           (:vlr-commandEnded . endCommand)
                           (:vlr-commandCancelled . endCommand)
                           )
)

(defun startCommand (r c)
(and (eq (vlr-data r) "test")
      (wcmatch (strcase (car c)) "XLINE,DIMLINEAR")
      (tblsearch "LAYER" "_Assi")
      (setq *currentlayer* (getvar "CLAYER"))
      (setvar "CLAYER" "_Assi")
      )
(princ)
)
;;                                ;;
(defun endCommand (r c)
(and (eq (vlr-data r) "test")   
      *currentlayer*
      (tblsearch "LAYER" *currentlayer*)
      (setvar "CLAYER" *currentlayer*)
      (setq *currentlayer* nil)
      )
(princ)
)

MastroLube 发表于 2022-7-5 17:42:33

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

Tharwat 发表于 2022-7-5 17:49:00

你的密码和我的密码一定有冲突
因此,只需从一个新图形开始,或者关闭并重新打开当前图形,或者在reactor命令中更改我的函数名称(startCommand和endCommand)。

MastroLube 发表于 2022-7-5 17:56:55

你说得对,先生!!!非常感谢你!
 
你能给我一点建议,让我有更多的案例吗?
 
(defun startCommand (r c)
(and (eq (vlr-data r) "test")
      (cond
      ((wcmatch (strcase (car c)) "XLINE")
      
      (tblsearch "LAYER" "_Assi")
      (setq *currentlayer* (getvar "CLAYER"))
      (setvar "CLAYER" "_Assi")
      )
      ((wcmatch (strcase (car c)) "DIMLINEAR")
      
      (tblsearch "LAYER" "DIMS")
      (setq *currentlayer* (getvar "CLAYER"))
      (setvar "CLAYER" "DIMS")
      )
      )
      )
      
(princ)
)
 
这看起来很难看,我认为它不能正常工作。。
 
谢谢

Tharwat 发表于 2022-7-5 18:00:21

拍摄这个;

(defun startCommand (r c)
(and (eq (vlr-data r) "test")
      (vl-some '(lambda (com lay)
               (and (eq (strcase (car c)) com)
                      (tblsearch "LAYER" lay)
                      (setq *currentlayer* (getvar "CLAYER"))
                      (setvar "CLAYER" lay)
                      )
                  )
               '("XLINE" "DIMLINEAR")
               '("_Assi" "DIMS")
               )
      )   
(princ)
)

MastroLube 发表于 2022-7-5 18:06:39

谢谢你!非常聪明的解决方案!
 
从这段代码中我有很多东西要学习。。谢谢
 
附:一个小问题。。有没有可能在我完成之前让命令保持活动状态?现在,它会更改每个点的图层:S
 

...
               '("XLINE" "DIMLINEAR" "DIM" "MTEXT" "POINT")
               '("_Assi" "DIMS" "DIMS" "_Testi" "_Appoggi centri")
...

Tharwat 发表于 2022-7-5 18:16:41

 
非常欢迎你。
页: [1]
查看完整版本: 反应堆问题:层不&