锁定已知图层名,图层名如何支持通配符
以下源码来自本论坛,请教一下 "bg1" "bg2" "bg3" "bg4" “bg5”这些图层列表如何支持通配符呢?比如我要锁定"bg1"开头、"bg2"结尾或 "bg3" "bg4" “bg5”的图层。我知道有种用lisp的Command命令支持通配符,但是当锁定的图层较多的时候,command写的执行慢。(defun C:laylock1 ( / acaddocument acadobject layersobj lay_list obj)
(setq AcadObject (vlax-get-acad-object)
AcadDocument (vla-get-ActiveDocument AcadObject)
LayersObj (vla-get-layers AcadDocument)
);end setq
(setq lay_list (list "bg1" "bg2" "bg3" "bg4" “bg5”));不需要锁定的图层列表,锁定这些以外的图层
(vlax-for obj LayersObj
(if (member (vla-get-name obj) lay_list)
(vla-put-lock obj :vlax-false)
(vla-put-lock obj :vlax-true)
));end vlax-forendif
(princ)
);;锁基础图层
(defun C:laylock1 ( / acaddocument acadobject layersobj lay_list obj)
(setq AcadObject (vlax-get-acad-object)
AcadDocument (vla-get-ActiveDocument AcadObject)
LayersObj (vla-get-layers AcadDocument)
);end setq
;;;(setq lay_list (list "bg1" "bg2" "bg3" "bg4" “bg5”));不需要锁定的图层列表,锁定这些以外的图层
(vlax-for obj LayersObj
(if (wcmatch (vla-get-name obj) "bg1*bg2,bg1*bg*")
(vla-put-lock obj :vlax-false)
(vla-put-lock obj :vlax-true)
));end vlax-forendif
(princ)
);;锁基础图层 加个通配比对不就行了?
(wcmatch (vla-get-name obj) "bg1*bg2,bg1*bg*") 本帖最后由 liner122 于 2023-5-17 18:23 编辑
菜卷鱼 发表于 2023-5-17 14:34
加个通配比对不就行了?
(wcmatch (vla-get-name obj) "bg1*bg2,bg1*bg*")
能不能写个完整的代码,不好意思,菜鸟一个 菜卷鱼 发表于 2023-5-18 09:29
(defun C:laylock1 ( / acaddocument acadobject layersobj lay_list obj)
(setq AcadObject (vlax-get- ...
试了这个代码,可行。还有个问题,用vla命令锁定图层,如果当前图层在锁定范围内,它的锁定状态并不会实时显示,其实已经是锁定的。这有办法可以解决么? 已解决了。直接在后面加个不影响操作的其他命令即可。 本帖最后由 shujh1989 于 2023-9-25 11:15 编辑
菜卷鱼 发表于 2023-5-17 11:17
(defun C:laylock1 ( / acaddocument acadobject layersobj lay_list obj)
(setq AcadObject (vlax-get- ...
我理解错了,:L :L:L:L
页:
[1]