Aftertouch 发表于 2022-7-5 15:35:44

更改选定外部参照的颜色

大家好,
 
我正在寻找一个代码,允许我选择外部参照的对象,并要求我更改图层颜色。
 
现在我找到了下面的代码。。。
 

(defun c:ChangeLayerColor (/ Sel EntList DataList cnt Num ClrNum EntData)

(if (setq Sel (nentsel "\n Select object to change layers color: "))
(progn
(if (> (length Sel) 2)
(setq EntList (cons (car Sel) (last Sel)))
(setq EntList (cons (car Sel) EntList))
)
(setq DataList
(mapcar
   '(lambda (x / EntData)
    (setq EntData (entget x))
    (cons (cdr (assoc 0 EntData)) (cdr (assoc 8 EntData)))
   )
   EntList
)
)
(setq cnt 0)
(textscr)
(prompt "\n Select number of layer to change color: ")
(foreach lst DataList
(prompt (strcat "\n " (itoa cnt) " - " (cdr lst) " - Object [ " (car lst) " ]"))
(setq cnt (1+ cnt))
)
(while
(and
   (not (setq Num (getint (strcat "\n Select number between 0 - " (itoa (1- cnt)) ": "))))
   (not (< 0 Num (1- cnt)))
)
)
(graphscr)
(if (and Num (setq ClrNum (acad_colordlg 253)))
(progn
   (setq EntData (entget (tblobjname "Layer" (cdr (nth Num DataList)))))
   (entmod
    (subst
   (cons 62 ClrNum)
   (assoc 62 EntData)
   EntData
    )
   )
   (command "_.Regen")
)
)
)
)
(princ)
)

 
但这会获取选定对象的所有对象。。。因此,如果我选择一个块,它会得到“XREF”层、块层、块层中的图案填充等。。我需要给一个我想换的号码。
 
该代码是否可以精简,以便立即更改选定对象层的颜色。因此,当我选择外部参照的块时,它会更改块所在的图层。
而且此代码仅允许索引颜色。。。如何添加真彩色?
 
提前感谢:-)

Dadgad 发表于 2022-7-5 15:58:03

我无法帮助您使用lisp,但您可能对系统变量VISRETAIN感兴趣。

Aftertouch 发表于 2022-7-5 16:08:29

 
嘿,爸爸,
Visretain与我的“问题”完全无关

Dadgad 发表于 2022-7-5 16:21:09

 
也许我错了。
我的印象是,通过将VISRETAIN设置更改为0,基本上可以覆盖原始外部图形的图层表中定义的图层颜色,并且新图层颜色将保存在新图形的图层表中。
如果不是这样的话,我很抱歉。

mugsy8 发表于 2022-7-5 16:33:10

 
你好很抱歉将你的帖子坏死。但我刚加入论坛。
 
我找到了这些,它们适合我的需要。
我不记得我是否修改了它们。
我有几个其他的和我自己的几个,但这些应该做你想要的。
 
我不能帮你使用真彩色,因为我做的事情通常不允许使用真彩色。
 
使用颜色输入选择多个


(defun c:CHCOL (/ ncol ent lst)
(while (setq ent (car (nentsel "\nSelect enity on layer: ")))
(princ (setq ent (cdr (assoc 8 (entget ent)))))
(setq lst (cons ent lst)))
(setq ncol (getint "\nEnter index color number: "))
(and lst
(mapcar '(lambda (x)
(setq ent (entget (tblobjname "layer" x)))
(entmod (subst (cons 62 ncol) (assoc 62 ent) ent)))
lst))
(vla-regen (vla-get-activedocument (vlax-get-acad-object)) 1))
(vl-load-com)


 
选择一个,然后使用菜单选择颜色


(defun C:CHCOLPICK (/ lay col)
(setq
   lay (cdr (assoc 8 (entget (car (nentsel "\nObject on Layer to assign color to: ")))))
   col (acad_colordlg (cdr (assoc 62 (tblsearch "layer" lay))) nil)
)
(command "_.layer" "_color" col lay "")
(princ)
)


 
干杯
木瓜

mugsy8 发表于 2022-7-5 16:42:09

 
VISRETAIN与计算器上的“重置”按钮非常相似,但适用于外部参照图层。
将所有图层替代设置回外部参照中存储的内容。
 
干杯
木瓜
页: [1]
查看完整版本: 更改选定外部参照的颜色