反应堆问题:层不&
您好,我有一个小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) 你有没有看过LM:layerdirector?
我想当图层关闭或冻结时,我会遇到这个问题。无论如何,听起来很熟悉。。(现在不在destop后面)致以诚挚的问候 我检查了oldlayer的值,发现它变为新的!
问题似乎进入循环2次!
看看那里:
我已经执行了XLine命令
https://www.cadtutor.net/forum/attachment.php?attachmentid=59375&cid=1&stc=1
所有层均打开
谢谢 你好
试试这个;
(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)
)
你好谢谢您的回复!
它不会改变图层。。
我已经加载了它,并试图制作一个Xline和一个quote,但它们在当前层中。。无论如何,我已经注意到,它在循环中也有很多次。。我不明白为什么。。命令只能启动一次,代码只能运行一次。。
谢谢你的帮助!
编辑,好的,它改变了它。。我没有创建层\u Assi。。作为我的,它不会回到旧层。。可能是因为它运行了好几次 你的密码和我的密码一定有冲突
因此,只需从一个新图形开始,或者关闭并重新打开当前图形,或者在reactor命令中更改我的函数名称(startCommand和endCommand)。 你说得对,先生!!!非常感谢你!
你能给我一点建议,让我有更多的案例吗?
(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)
)
这看起来很难看,我认为它不能正常工作。。
谢谢 拍摄这个;
(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)
)
谢谢你!非常聪明的解决方案!
从这段代码中我有很多东西要学习。。谢谢
附:一个小问题。。有没有可能在我完成之前让命令保持活动状态?现在,它会更改每个点的图层:S
...
'("XLINE" "DIMLINEAR" "DIM" "MTEXT" "POINT")
'("_Assi" "DIMS" "DIMS" "_Testi" "_Appoggi centri")
...
非常欢迎你。
页:
[1]