SamLach 发表于 2022-7-7 12:50:11

将选定对象的颜色设置为

你好
 
关于分配颜色的快速问题。
有没有一种简单的方法来选择多个对象(我指的是直线、多段线、块……)它们位于不同的图层上,颜色设置为“ByLayer”,并为它们指定当前所在图层的索引颜色,这样我最终可以将它们全部放在同一图层上,但使用原始配色方案。
 
基本上,我在a层(蓝色)上有一条线,在B层(红色)上有另一条线,这两条线都有它们所在层的颜色(颜色设置为“ByLayer”),我想将这两条线都设置在C层(绿色),但要使它们保持其原始颜色,蓝色和红色。
 
这背后的原因是我经常需要在我的图形中导入参考工作,最终我从这些其他图形中获得数百个不必要的层,因此我想将所有这些外部参考设置为一个层,但保留颜色方案。
 
也许我处理这个问题的方式不对,所以我愿意接受一些建议,保持我的绘图和图层干净,便于使用。
 
谢谢

CyberAngel 发表于 2022-7-7 13:18:26

我的另一个建议是,由于(我假设)您可以更改外部参照图形,因此可以更改它们的名称,使它们都以字母z开头。这样,所有这些图层名称都会下降到列表的末尾,因此您感兴趣的图层名称会分组在顶部。
 
不确定如何在多个图层中将“ByLayer”更改为实际颜色(除非涉及代码),但在一个图层上就足够容易了。

BIGAL 发表于 2022-7-7 13:31:28

试试这个
 

; https://www.cadtutor.net/forum/topic/73977-set-selected-objects-color-to-their-current-index-color/
; MAKE 1 LAYER BUT SAVE COLOR
; By Alanh NOV 2021

(defun c:make1lay ( / laynew layers layn ss x obj col)
(setq laynew (getstring "\nEnter new layer name "))
(command "-la" "M" laynew "")
(command "UNDO" "M")
(vlax-for layers (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
(setq col (vla-get-color layers))
(setq layn (vla-get-name layers))
(if (= layn laynew)
(princ)
(progn
(setq ss (ssget "X" (list (cons 8 layn))))
    (if (= ss nil)
    (princ (strcat "\nskip " layn))
    (repeat (setq x (sslength ss))
      (setq obj (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
      (if (vlax-property-available-p obj 'layer)
      (vlax-put-property obj 'Layer laynew)
      )
          (if (vlax-property-available-p obj 'color)
      (vlax-put-property obj 'color col)
          )
    )
    )
)
)
)
)
(c:make1lay)

tombu 发表于 2022-7-7 13:35:16

与其修改图形,为什么不使用图层过滤器控制图层特性管理器中显示的图层?
查看此链接:https://cadtips.cadalyst.com/layer-tools/create-filter-all-layers-except-xref-layer?q=layer-工具/创建过滤除外部参照图层外的所有图层
我们的Civil 3D模板本身有大约200个层,因此我使用lisp加载了一组层过滤器,以控制我当时使用的任何工作流的可见层。
快速、简单且易于管理。

SamLach 发表于 2022-7-7 13:56:01

谢谢大家的帮助!
 
这给了我一个很好的起点来获得我想要的。
我将花时间学习AutoLISP的基础知识,看看是否可以进行必要的更改,使其仅在选择对象的情况下工作。
页: [1]
查看完整版本: 将选定对象的颜色设置为