ktbjx 发表于 2022-7-5 13:17:14

质量更改图案填充颜色

我有一个愚蠢的问题,
有没有办法用lisp将某个图案填充RGB颜色更改为另一个RGB颜色??
因为我不是只改变1或2种颜色,我需要改变很多RGB的。但幸运的是,对我来说,所有的都是一样的,所以我现在做的只是过滤我需要改变的颜色,并改变它们。。。
问题是,它占用了我很多时间,这就是为什么我要求Lisp程序,
假设我需要将所有红色(255,0,0)图案填充改为灰色(192192),以此类推。。
有人能帮忙吗?

dlanorh 发表于 2022-7-5 13:28:33

是的,使用lisp很容易,但需要更具体一些。
 
您是否总是需要从“红色”更改为“灰色”,还是需要选择这两种颜色?
 
您需要更改所有“红色”图案填充还是只更改一个选择?

ktbjx 发表于 2022-7-5 13:41:11

是的,我总是需要从红色变为灰色
 
我只需要从选择中进行更改,以控制需要更改的内容,因为有些内容已经更改,我不希望再次更改
 
哇,我不知道有那么容易。我认为这是一个很长的机会!但是谢谢你帮助我!
 
 

JuniorNogueira 发表于 2022-7-5 13:47:27

试试这个:

(defun c:Test (/ ss)
(setq ss (ssget '((62 . 1))))
(command "_.Chprop" ss"" "_Color" "_Truecolor" "192,192,192" "")
(princ)
)未测试。

dlanorh 发表于 2022-7-5 13:59:18

好啊这是代码。这将不断要求更改“红色”图案填充。要退出,请进行空选择(单击屏幕的空白区域。
 
该代码包括一个局部错误函数,并添加了在一次撤消中撤消所有更改的功能。
 
它只会将“红色”图案填充的颜色更改为“灰色”。如果舱口不是红色,它将忽略它。
 

(vl-load-com)

(defun c:r2g ( / *error* c_doc obj)
        (defun *error* ( msg )
                (if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc))
    (if (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*EXIT*")) (princ (strcat "\nOops an Error occurred : " msg)))
                (princ)
);end_defun *error*

        (setq c_doc (vla-get-activedocument (vlax-get-acad-object)))

        (if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc))
(vla-startundomark c_doc)

(while (setq obj (vlax-ename->vla-object (car (entsel "\nSelect Red Hatch : "))))
    (if (and (wcmatch (vlax-get-property obj 'objectname) "*Hatch")
             (= (vlax-get-property obj 'color) 1)
      );end_and
      (vlax-put-property obj 'color 9)
    );end_if
);end_while
        (if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc))
(princ)
);end_defun
(princ)
这已经过最低限度的测试

dlanorh 发表于 2022-7-5 14:00:44

 
忽略上面的代码,这有点整洁:
 

(vl-load-com)

(defun c:r2g ( / *error* c_doc ent obj)
        (defun *error* ( msg )
                (if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc))
    (if (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*EXIT*")) (princ (strcat "\nOops an Error occurred : " msg)))
                (princ)
);end_defun *error*

        (setq c_doc (vla-get-activedocument (vlax-get-acad-object)))

        (if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc))
(vla-startundomark c_doc)

(while (setq ent (car (entsel "\nSelect Red Hatch : ")))
    (cond (ent
            (setq obj (vlax-ename->vla-object ent))
            (if (and (wcmatch (vlax-get-property obj 'objectname) "*Hatch")
                     (= (vlax-get-property obj 'color) 1)
                );end_and
                (vlax-put-property obj 'color 9)
            );end_if
          )
    );end_cond      
);end_while
        (if (and c_doc (= 8 (logand 8 (getvar 'UNDOCTL)))) (vla-endundomark c_doc))
(princ)
);end_defun
(princ)

ktbjx 发表于 2022-7-5 14:10:43

对就是这个!!!!
哦,先生,如果我想把任何舱口换成绿色,它的RGB像0147,0怎么办
你做的这个Autolisp非常有用!
但我意识到,如果我想将选定的图案填充(无论颜色)更改为RGB(而不是索引颜色),就像我所说的绿色一样,该怎么办?
还是橙色?我的意思是,指数应该是30,对吗?但我需要的是255128,0
 
嘿我把;上
现在我可以更改所有图案填充!是的!我今天学到了一件新东西!
现在,我如何使用RGB索引颜色?

dlanorh 发表于 2022-7-5 14:18:41

 
 
索引30为255127,0。255127,0和255128,0之间的差异无法区分(见附图),这就是使用索引的原因。基本索引从1到255。如果这还不够好,那么您需要转移到truecolor,并将RGB转换为真彩色索引。Autocad(至少是我的版本)可以使用颜色索引、truecolor索引或配色系统索引,而不是RGB值。取以下代码:
 
调用“truecolordlg”可能有助于选择颜色?
页: [1]
查看完整版本: 质量更改图案填充颜色