pman860507 发表于 2022-7-6 08:08:11

图层颜色

尝试执行一个更改图层颜色的例程。我遇到的问题是,如果输入红色作为“red”的颜色,我会得到这个。
 
错误:错误的DXF组:(62。“红色”)
 
我通过getstring函数运行它。我猜我需要一个1中的整数。让它发挥作用。那么,有没有办法将“红色”转换为正确的颜色代码?
 
我还意识到,如果输入“40”,我需要将字符串转换为整数。
 
感谢代码如下。
 
(defun C:Layer_Color ( / obj col lay layref layname cnt)

(defun *error* ( msg )
       (if (< 0 id) (unload_dialog id))
       (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
         (progn
         (princ (strcat "\nError: " msg))
         (setq cnt T)
         (setq tmpEnt (tblnext "layer" cnt))
         )
       )
       (princ)
   )
(while (= obj nil)
       (setq obj (entget(car(entsel "\nSelect Object:"))))
       (if (= obj nil)
         (princ "\nNo Object Selected.")))
       (setq lay (cdr(assoc 8 obj)))
   
       (while (or(= col nil)(= col ""))
         (setq col(getstring "\nNew Color:"))
         (if (or(= col nil)(= col ""))
               (princ "No color entered.\n")
               (princ "New color selected.\n")
         )
       )
   (while (/= layname lay)
   (setq layref (tblnext "layer"))
   (setq layname (cdr(assoc 2 layref)))
   )
   
   (entmakex(list(assoc 0 layref)(cons 100 "AcDbSymbolTableRecord")(cons 100 "AcDbLayerTableRecord")(assoc 70 layref)(assoc 2 layref)(cons 62 col)(cons 6 "CONTINUOUS")(cons 290 1)))
               
               
   (setq cnt T)
(setq tmpEnt (tblnext "layer" cnt))
(princ)
)

MSasu 发表于 2022-7-6 08:22:56

尝试使用硬编码的关联列表;为了确保用户提供适当的答案,可以查看INITGET函数。
 
关于,
米尔恰

pman860507 发表于 2022-7-6 08:28:16

是的,我想过。这仅仅是像那样使用的7种主要颜色吗?还是还有更多?

Tharwat 发表于 2022-7-6 08:42:33

像这样的事情?
 
2

MSasu 发表于 2022-7-6 08:46:07

据我所知,AutoCAD中只命名了前7种颜色。然而,网页设计中使用的命名颜色列表,你可以从那里“借用”名称,只要你的用户被告知这一点。
 
当做
米尔恰

David Bethel 发表于 2022-7-6 08:58:23

你可能想研究一下(acad\u colordlg),它非常有用-大卫

pman860507 发表于 2022-7-6 09:08:09

谢谢,很好。

Tharwat 发表于 2022-7-6 09:09:15

 
不客气
 
很高兴听到这个消息。
页: [1]
查看完整版本: 图层颜色