jimpcfd 发表于 2022-7-6 09:20:57

需要一个lisp例程来处理

大家好
 
当我的一个客户给我发送一个dxf文件时,我经常遇到一个问题,所有对象都在一个层上,但颜色不同,我需要的是一个例程,将所有颜色放在不同的层上,可能使层1-8,但保持原始颜色(我们从来没有得到超过8种颜色)。
 
如果有一个惯例存在,那么有人能告诉我吗?
 
干杯
jimpcfd

Lee Mac 发表于 2022-7-6 09:31:28

我有一个旧的例程,读取包含颜色“映射”到哪些层(以及新层颜色和线型)信息的CSV,然后处理和清除文件。
 
这是你感兴趣的东西吗?

jimpcfd 发表于 2022-7-6 09:38:05

嗨,李
 
非常感谢,这听起来很值得一看,我想你是说文本文件有映射的层名称,它将dxf颜色更改为层?
 
干杯
吉姆

David Bethel 发表于 2022-7-6 09:41:10

也许是蛮力的东西:
 

(defun ent2clay (/ ss en ed)
(and (setq ss (ssget))
      (while (setq en (ssname ss 0))
             (setq ed (entget en)
                   cl (if (assoc 62 ed) (cdr (assoc 62 ed)) 256))
             (entmod (subst (cons 8 (itoa cl)) (assoc 8 ed) ed))
             (ssdel en ss)))
(prin1))

 
-大卫

Tharwat 发表于 2022-7-6 09:47:48

可能
 

(defun c:test (/ ss j vl Nme co)
; Tharwat 08. 06. 2011
(vl-load-com)
(if (setq ss (ssget "_:L"))
   (repeat (setq j (sslength ss))
   (setq sset (ssname ss (setq j (1- j))))
   (setq vl (vlax-ename->vla-object sset))
   (if
       (not
         (tblsearch "LAYER"
                  (setq Nme (rtos (setq co (vla-get-color vl)) 2 0))
         )
       )
      (progn
          (entmakex (list (cons 0 "LAYER")
                        (cons 100 "AcDbSymbolTableRecord")
                        (cons 100 "AcDbLayerTableRecord")
                        (cons 2 Nme)
                        (cons 70 0)
                        (cons 62 co)
                  )
          )
          (vla-put-layer vl Nme)
      )
   )
   (if (not (eq (atoi (vla-get-layer vl)) (vla-get-color vl)))
       (vla-put-layer vl co)
   )
   )
   (princ)
)
(princ)
)


 
塔瓦特

Lee Mac 发表于 2022-7-6 09:55:20

 
对不起,吉姆,我的错误-我的代码是用于将层集映射到其他层,而不是颜色。
 
虽然我很确定David的代码会满足你的需要,但他通常很在行

alanjt 发表于 2022-7-6 10:03:42

(defun c:LayerByColor (/ ss i d)
(if (setq ss (ssget "_X" '((-4 . "<") (62 . 256))))
   (repeat (setq i (sslength ss))
   (entmod (subst (cons 8 (itoa (cdr (assoc 62 (setq d (entget (ssname ss (setq i (1- i)))))))))
                  (assoc 8 d)
                  d
             )
   )
   )
)
(princ)
)

alanjt 发表于 2022-7-6 10:13:05

非常感谢alanjt,作为一个试图掌握Lisp(lost((11(1+2+3)2))等等的人,他是一个很好的选择!!!。
你能告诉我layerbycolor是怎么工作的吗?
 
干杯
吉姆

jimpcfd 发表于 2022-7-6 10:19:20

 
(defun c:LayerByColor(/ss i d)(if(setq ss(ssget“_X”'(-4))

alanjt 发表于 2022-7-6 10:26:48

页: [1]
查看完整版本: 需要一个lisp例程来处理