GermanLarraguib 发表于 2022-7-5 18:04:42

将特定真彩色更改为

大家好,我有很多从另一个设计软件导入的绘图,但他给我带来了真彩色的物体,我需要的是将这些颜色更改为正常颜色:
 
 
从0128,0到94(绿色)
从255255255到255(白色)
从100,60,30到27(棕色)
从31,26,23到250(黑色)
 
 
我需要一个lisp自动进行更改。。。
 
 
谢谢

Stefan BMR 发表于 2022-7-5 18:24:44

任何设置为TrueColor的对象都会保存相应的ACI,因此您只需删除420 dxf代码(保存TrueColor)。
;Change all TrueColor to AutoCAD Color Index
(defun c:all_to_aci ( / remove420 la e)
(defun remove420 (entity_list)
   (entmod (vl-remove (assoc 420 entity_list) entity_list))
   )
(while
   (setq la (tblnext "layer" (not la)))
   (remove420 (entget (tblobjname "layer" (cdr (assoc 2 la)))))
   )
(while (setq e (if e (entnext e) (entnext)))
   (remove420 (entget e))
)
(princ)
)

 
PS1:我没有在块、嵌套块或外部参照上测试它。
PS2:你的转换有问题:0128,0是96,100,60,30是39

GermanLarraguib 发表于 2022-7-5 18:29:33

谢谢Stefan,
 
Lisp程序很好用!
 
关于对应的你是对的。
我只想把颜色改成94和27,因为我必须遵守我的CTB绘图列表。
 
我的存档只包含图案填充。。。没有线条,没有索利多金币,没有积木!
 
谢谢!

handasa 发表于 2022-7-5 18:35:38

您可以修改它以应用于嵌套块(块子实体)吗

Stefan BMR 发表于 2022-7-5 18:48:52

当然所有的物体,对吗?
(defun c:all_to_aci ( / remove420 la en)
(defun remove420 (entity_list)
   (vl-catch-all-apply '(lambda nil (entmod (vl-remove (assoc 420 entity_list) entity_list))))
   )
(while
   (setq la (tblnext "layer" (not la)))
   (remove420 (entget (tblobjname "layer" (cdr (assoc 2 la)))))
   )
(vlax-for block (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
   (if
   (not (eq (vla-get-isxref block) :vlax-true))
   (vlax-for en block
       (remove420 (entget (vlax-vla-object->ename en)))
       )
   )
   )
(princ)
)

handasa 发表于 2022-7-5 19:00:37

效验如神非常感谢
Stefan BMR先生
出色的工作
再次感谢

Stefan BMR 发表于 2022-7-5 19:12:40

欢迎光临。感谢您在TheSwamp上提及解决方案。
页: [1]
查看完整版本: 将特定真彩色更改为