liner122 发表于 2023-5-17 11:17:31

锁定已知图层名,图层名如何支持通配符

以下源码来自本论坛,请教一下 "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)
);;锁基础图层


菜卷鱼 发表于 2023-5-17 11:17:32

(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)
);;锁基础图层

菜卷鱼 发表于 2023-5-17 14:34:52

加个通配比对不就行了?
(wcmatch (vla-get-name obj) "bg1*bg2,bg1*bg*")

liner122 发表于 2023-5-17 18:15:33

本帖最后由 liner122 于 2023-5-17 18:23 编辑

菜卷鱼 发表于 2023-5-17 14:34
加个通配比对不就行了?
(wcmatch (vla-get-name obj) "bg1*bg2,bg1*bg*")
能不能写个完整的代码,不好意思,菜鸟一个

liner122 发表于 2023-5-19 08:41:01

菜卷鱼 发表于 2023-5-18 09:29
(defun C:laylock1 ( / acaddocument acadobject layersobj lay_list obj)
(setq AcadObject (vlax-get- ...

试了这个代码,可行。还有个问题,用vla命令锁定图层,如果当前图层在锁定范围内,它的锁定状态并不会实时显示,其实已经是锁定的。这有办法可以解决么?

liner122 发表于 2023-5-20 10:42:53

已解决了。直接在后面加个不影响操作的其他命令即可。

shujh1989 发表于 2023-9-25 11:08:24

本帖最后由 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]
查看完整版本: 锁定已知图层名,图层名如何支持通配符