基于颜色生成层
嘿,伙计们,我有一个文件,有24个层,每个层都有12种不同颜色的对象,我需要根据对象的颜色将它们分为不同的层。e、 g.一层中所有颜色为“黄色”的对象,另一层中所有颜色为“洋红”的对象等。这可以用lisp完成吗?有人能帮我写lisp的吗 这应该让你开始:((lambda (i / ss e c)
(setq ss (ssget))
(while (setq e (ssname ss (setq i (1+ i))))
(cond
((= 1 (setq c (cdr (assoc 62 (entget e)))))
;; <- Code for red objects
)
((= 2 c)
;; <- Code for yellow objects
)
((= 3 c)
;; <- Code for green objects
)
((= 4 c)
;; <- Code for cyan objects
)
;; <- Additional colors here
))
(princ))
-1)
塔瓦特 这将所有具有非“按层”颜色的实体分布到名为“颜色N”的层。具有“按层”颜色或位于锁定或冻结层上的实体将被传递。
(defun c:test (/ ss)
(if (setq ss (ssget "_:L" ))
(
(lambda (i / ss1 e col)
(while
(setq ss1 (ssname ss (setq i (1+ i))))
(setq e (entget ss1))
(setq col (cdr (assoc 62 e)))
(cond ((eq 1 col)
(entupd (cdr (assoc -1 (entmod (subst (cons 8 "Layer1")(assoc 8 e) e))))))
((eq 2 col)
(entupd (cdr (assoc -1 (entmod (subst (cons 8 "Layer2")(assoc 8 e) e))))))
((eq 3 col)
(entupd (cdr (assoc -1 (entmod (subst (cons 8 "Layer3")(assoc 8 e) e))))))
)
)
)
-1
)
(princ)
)
(princ)
)
或者一些相当简单的方法也应该奏效:
(defun c:colay(/ aSet lCol cLay)
(vl-load-com)
(if(setq aSet(ssget "_X"))
(progn
(setq lCol(vla-get-Layers
(vla-get-ActiveDocument
(vlax-get-acad-object))))
(foreach e(vl-remove-if 'listp(mapcar 'cadr(ssnamex aSet)))
(if(setq cCol(cdr(assoc 62(entget e))))
(setq cLay(strcat "Color " (itoa cCol))
cFlg T)
(setq cFlg nil)
); end if
(if cFlg
(progn
(if(vl-catch-all-error-p
(vl-catch-all-apply
'vla-Item (list lCol cLay)))
(vla-Add lCol cLay)
); and if
(vl-catch-all-error-p
(vl-catch-all-apply
'vla-put-Layer (list e cLay)))
); end progn
); end if
); end foreach
); end progn
); end if
(princ)
); end of c:colay
Bylayer图元不受影响。新图层名为“C”,颜色编号为-大卫
(defun c:enc (/ ss en ed clr)
(and (setq ss (ssget))
(while (setq en (ssname ss 0))
(setq ed (entget en))
(if (setq clr (cdr (assoc 62 ed)))
(entmod (subst (cons 8 (strcat "C" (itoa clr)))
(assoc 8 ed) ed)))
(ssdel en ss)))
(prin1))
这是一个很好的解决方案。Entmod实体并立即创建层。 你回来了吗,朋友???
敲我的门
奥列格
嗨,奥列格。是的,我回到AutoCAD工作,有时会来这里。
亚历山大。 阿斯米,是你吗?很高兴见到你回来如果是这样的话 是的,我是米。谢谢李。 很高兴再次在这里见到你!已经很久了
页:
[1]
2