Tharwat 发表于 2022-7-5 15:36:23

请阅读代码发布指南,并将您的代码包含在代码标签中。
(defun C:AutoLayerChange ( / L _LayersList _Recapitalise lyrs SS i enx lyr tmp )

(setq L ; Note: layer names are case insensitive - assoc list of: (<old layer> . <new layer>)
   '( ; Place your inputs here:
   ("obj2" . "obj1")
   ("dim" . "0")
   ); list
); setq L

(defun _LayersList ( / d L )
   (while (setq d (tblnext "LAYER" (not d)))
   (setq L (cons (cdr (assoc 2 d)) L))
   )
)

(defun _Recapitalise ( itm L )
   (vl-some (function (lambda (x) (if (= (strcase itm) (strcase x)) x))) L)
)

(and
   (setq lyrs (_LayersList))
   (or
   (setq L (apply (function append) (mapcar (function (lambda (x / tmp) (if (setq tmp (_Recapitalise (car x) lyrs)) (list (cons tmp (cdr x)))))) L)))
   (prompt "\nNo valid layers were found.")
   ); or
   (or
   (prompt "\nSelect objects to change layers: ")
   (setq SS (ssget "_:L-I" (list (cons 8 (setq tmp (substr (apply (function strcat) (mapcar (function (lambda (x) (strcat "," (car x)))) L)) 2))))))
   (prompt (strcat "\nNo objects were found on \"" tmp "\"layers."))
   ); or
   (repeat (setq i (sslength SS))
   (setq enx (entget (ssname SS (setq i (1- i)))))
   (setq lyr (assoc 8 enx))
   (entmod (subst (cons 8 (cond ( (cdr (assoc (setq tmp (cdr lyr)) L)) ) ( tmp ) )) lyr enx))
   ); repeat
); and
(princ)
); defun C:AutoLayerChange
=
Your Code Here

SLW210 发表于 2022-7-5 15:39:53

 
嗨,塔瓦,
谢谢你的建议。。关于视口,我有一个问题:
用户选择视口对象的情况是什么?在文书空间工作时(我猜)?
我总是在模型空间中工作,所以我从来没有考虑过这个问题的可能性。
 
顺便说一句,对于第二句话,我实际上没有查看目标层是否已经存在-只是确保OP是否提供了点对列表:
Your Code Here
但我同意使用同一层的entmod有点效率低下。

Grrr 发表于 2022-7-5 15:44:38

下次会处理好的,谢谢你的提醒。

Solitechcadsolu 发表于 2022-7-5 15:47:59

 
我们无法猜测所有用户都在模型空间中工作。
 
同意这一点,但这将忽略将对象移动到目标层,如果它不存在,这就是重点。
 
希望我的评论没有引起任何混乱。

Tharwat 发表于 2022-7-5 15:51:54

 
 
 
如果你能帮我查一下萨提斯的代码,为什么它在我的系统上不起作用?有什么想法吗?
 
 
测验

Solitechcadsolu 发表于 2022-7-5 15:53:51

Solitechcadsolutions,您需要向所有希望帮助您的成员清楚地描述您的计划目标,并为此编写正确的代码。
 
例如;
您试图将哪些对象移动到该新图层名?
您想选择某些对象还是让程序全部选择?
你有解锁层上的对象吗?
 
等等

Tharwat 发表于 2022-7-5 15:55:41

我同意使用关联列表,但是代码可以大大简化,例如-
'( ; The routine will skip entmod'ing "Layer1"
("obj2" . "obj1")
("dim" . "0")
("Layer1")
)

Lee Mac 发表于 2022-7-5 16:00:07

不错,李,
我不知道你可以像那样过滤层,忽略他们名字的大小写!

Grrr 发表于 2022-7-5 16:01:43

谢谢李和grr,代码对我来说工作得很好。。。。
 
 
太棒了

Solitechcadsolu 发表于 2022-7-5 16:07:19

页: 1 [2]
查看完整版本: 选择所有对象的代码