挑战:硬编码颜色re
情况是这样的。我的这项新工作得到了microstation dgn,我们必须将其转换为autocad。它们最终会以硬编码的颜色和线型出现。这很好,因为我们只需要按原样使用它们,但需要更改颜色以符合我们绘制的ctb,使其看起来正确。有没有一个例程可以让我选择,比如说硬编码的颜色为150的东西(从而选择所有颜色为150的东西)并将其更改为所需的颜色?
我昨晚花了整整一个晚上想找点什么,但结果空手而归。 使用SETBYLAYER命令,然后在图层管理器中调整颜色和线型。
或者使用快速选择过滤到该颜色。
毫无疑问,任何时候都会有人带着Lisp程序的例程出现在你身边,供你使用。 我用的是:
;;; e2a.lsp - Encompass to American color translator
(defun c:e2a (/ colLst lay col)
(vl-load-com)
(setq colLst '(
(1 . 67)
(2 . 66)
(3 . 64)
(4 . 77)
(5 . 78)
(6 . 73)
))
(vlax-for l (vla-get-layers
(vla-get-activedocument
(vlax-get-acad-object)))
(setq lay (cons l lay)))
(foreach layer lay
(if (setq col (assoc (vla-get-color layer) colLst))
(vla-put-color layer (cdr col))))
(princ)
(setq colLst '(
(64 . 1)
(66 . 2)
(67 . 3)
(68 . 4)
(69 . 5)
(72 .
(73 . 12)
(74 . 13)
(76 . 20)
(77 . 22)
(78 . 30)
(79 . 41)
))
(vlax-for l (vla-get-layers
(vla-get-activedocument
(vlax-get-acad-object)))
(setq lay (cons l lay)))
(foreach layer lay
(if (setq col (assoc (vla-get-color layer) colLst))
(vla-put-color layer (cdr col))))
(princ)
)
;;; end e2a.lsp
左边的数字是要更改的颜色,右边的数字是要更改的颜色。
我换了双色。我首先将颜色更改为两种颜色中都不一定使用的颜色。ctb,然后将其更改为最终颜色。在代码中,您可以看到我最终切换了颜色1和3。如果我换成1比3,再换成3比1,我的红色永远不会改变,但我的绿色现在都是红色;不是我想要的。所以我把1改为67,3改为64;然后是64到1和67到3;有效地交换了我的红色和绿色。我希望这有意义。
我确信有更简单的方法,但这花了我几分钟的时间来完成这项工作。
谢谢你的快速回复。我已经试过了,但不幸的是,我引入的一些在同一“级别”上的实体颜色不同,并且具有不同的线型。我需要它看起来就像绘制dgn一样。我会创建一个自定义的ctb文件,但我们也在为这些图纸添加我们自己的东西;所以这不是一个选择。
非常好李罗伊!
我可以在我们正在进行的另一个项目中使用它。不幸的是,这幅画的颜色并不一致。因此,我仍然需要能够选择具有该颜色的所有实体,并将其更改为用户定义的颜色。
QSELECT>Color>150,然后选择CHPROP>Color,或使用颜色下拉列表。
当然,这个过程也可以自动化。
这正是我一直在做的,李!当我必须一张纸做60次左右的命令时,这非常耗时。
我发现,当对象设置为“BYLAYER”时,当我指定颜色编号时,QSELECT不会选择它。我讨厌那样。有我可以改变的变量吗? 为了更新我上面的代码,我对其进行了一些简化,以供其他可能会使用它的人使用。
这仍然是一个双重变化。将原始颜色更改为不使用的临时颜色,然后将临时颜色更改为最终颜色。这可以防止将颜色更改回自身或其他不需要的颜色。
;;; c2c.lsp - Color to Color translator
;;;
;;;Expand the lists as needed to change all necessary colors
;;;
(defun c:e2a (/ colLst)
(vl-load-com)
(defun convert (colLst / lay col)
(vlax-for l (vla-get-layers
(vla-get-activedocument
(vlax-get-acad-object)))
(setq lay (cons l lay)))
(foreach layer lay
(if (setq col (assoc (vla-get-color layer) colLst))
(vla-put-color layer (cdr col))))
(princ)
)
;;;
;;;list of original colors to change from, to temporary colors
;;;(<from> . <to>)
;;;
(setq colLst '(
(1 . 67)
(2 . 66)
(3 . 64)
(4 . 77)
(5 . 78)
))
(convert colLst) ;Run convert function
;;;
;;;list of temporary colors to change from, to final colors
;;;(<from> . <to>)
;;;
(setq colLst '(
(64 . 1)
(78 . 2)
(67 . 3)
(66 . 4)
(77 . 5)
))
(convert colLst) ;Run convert function
)
;;; end c2c.lsp
据我所知,QSELECT命令是根据对象特性而不是图层特性选择对象。
页:
[1]
2