plackowski 发表于 2022-7-5 16:49:51

用Visual Basic撤消LISP

我想我遇到的问题与这里没有解决的问题相同。
 
我试图将外部参照的所有图层设置为图层251。我在网上找到了两个代码,贴在下面。
 
CVX:
(defun c:cvx (/ ent_data);;changes all layers in selected xref to color 251
(setq ent_data (entget (car (entsel))))
(command "-layer" "Color" 251 (strcat (cdr (assoc 2 ent_data)) "*")"")
)
 
X251:
(defun C:X251 (/ EN L X ad layers)
(command "UNDO" "BEGIN")
(setq   EN (nentsel "\nSelect Xref: ")    L (cdr (assoc 8 (entget (car EN))))   X (substr L 1 (vl-string-position (ascii "|") L)) )
(setq AD (vla-get-ActiveDocument (vlax-get-Acad-Object)) layers (vla-get-Layers ad))
(if(/= (vl-string-search "|" L) nil)
        (progn
                (vlax-for layer layers
                        (if (/= (vl-string-search (strcatX "|") (vla-get-name layer)) nil)(vla-put-Color layer 251))
                )
                (command ".REGEN")
        )
        (princ "Not an Xref!")
)
(prin1)
       (command "UNDO" "END")
)
 
我使用了CVX例程一段时间,直到我发现如果选择附着到覆盖外部参照的外部参照,它就不起作用。因此,我尝试切换到X251例程,但如果使用UNDO,则在重新生成图形之前不会反映更改。我尝试使用链接帖子中建议的撤销组,但结果没有改变。有什么建议吗?

Roy_043 发表于 2022-7-5 17:40:30

尝试:
(defun c:cvx ( / lst) ; Changes all layers in selected xref to color 251.
(if
   (and
   (setq lst (nentsel))
   (= 4 (length lst))
   )
   (command "_.-layer" "_color" 251 (strcat (cdr (assoc 2 (entget (car (cadddr lst))))) "|*") "")
)
(princ)
)

plackowski 发表于 2022-7-5 18:11:46

太好了,谢谢!
页: [1]
查看完整版本: 用Visual Basic撤消LISP