arqi 发表于 2022-7-6 09:49:36

基于颜色生成层

嘿,伙计们,我有一个文件,有24个层,每个层都有12种不同颜色的对象,我需要根据对象的颜色将它们分为不同的层。e、 g.一层中所有颜色为“黄色”的对象,另一层中所有颜色为“洋红”的对象等。这可以用lisp完成吗?有人能帮我写lisp的吗

BlackBox 发表于 2022-7-6 09:54:31

这应该让你开始:
 

((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)

 
塔瓦特

arqi 发表于 2022-7-6 09:59:54

这将所有具有非“按层”颜色的实体分布到名为“颜色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)
)

Tharwat 发表于 2022-7-6 10:03:02

或者一些相当简单的方法也应该奏效:
 
(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”,颜色编号为-大卫

Smirnoff 发表于 2022-7-6 10:05:09


(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实体并立即创建层。

David Bethel 发表于 2022-7-6 10:11:32

你回来了吗,朋友???
敲我的门
 
奥列格

Smirnoff 发表于 2022-7-6 10:13:10

 
嗨,奥列格。是的,我回到AutoCAD工作,有时会来这里。
 
亚历山大。

fixo 发表于 2022-7-6 10:16:32

阿斯米,是你吗?很高兴见到你回来如果是这样的话

Smirnoff 发表于 2022-7-6 10:22:36

是的,我是米。谢谢李。

Lee Mac 发表于 2022-7-6 10:26:11

很高兴再次在这里见到你!已经很久了
页: [1] 2
查看完整版本: 基于颜色生成层