需要一个lisp例程来处理
大家好当我的一个客户给我发送一个dxf文件时,我经常遇到一个问题,所有对象都在一个层上,但颜色不同,我需要的是一个例程,将所有颜色放在不同的层上,可能使层1-8,但保持原始颜色(我们从来没有得到超过8种颜色)。
如果有一个惯例存在,那么有人能告诉我吗?
干杯
jimpcfd 我有一个旧的例程,读取包含颜色“映射”到哪些层(以及新层颜色和线型)信息的CSV,然后处理和清除文件。
这是你感兴趣的东西吗? 嗨,李
非常感谢,这听起来很值得一看,我想你是说文本文件有映射的层名称,它将dxf颜色更改为层?
干杯
吉姆 也许是蛮力的东西:
(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))
-大卫 可能
(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)
)
塔瓦特
对不起,吉姆,我的错误-我的代码是用于将层集映射到其他层,而不是颜色。
虽然我很确定David的代码会满足你的需要,但他通常很在行 (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,作为一个试图掌握Lisp(lost((11(1+2+3)2))等等的人,他是一个很好的选择!!!。
你能告诉我layerbycolor是怎么工作的吗?
干杯
吉姆
(defun c:LayerByColor(/ss i d)(if(setq ss(ssget“_X”'(-4))
页:
[1]