乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 19|回复: 19

[编程交流] 挑战:硬编码颜色re

[复制链接]

6

主题

19

帖子

14

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 07:51:00 | 显示全部楼层 |阅读模式
情况是这样的。我的这项新工作得到了microstation dgn,我们必须将其转换为autocad。它们最终会以硬编码的颜色和线型出现。这很好,因为我们只需要按原样使用它们,但需要更改颜色以符合我们绘制的ctb,使其看起来正确。
 
有没有一个例程可以让我选择,比如说硬编码的颜色为150的东西(从而选择所有颜色为150的东西)并将其更改为所需的颜色?
 
我昨晚花了整整一个晚上想找点什么,但结果空手而归。
回复

使用道具 举报

10

主题

895

帖子

887

银币

初来乍到

Rank: 1

铜币
49
发表于 2022-7-6 07:55:31 | 显示全部楼层
使用SETBYLAYER命令,然后在图层管理器中调整颜色和线型。
 
或者使用快速选择过滤到该颜色。
 
毫无疑问,任何时候都会有人带着Lisp程序的例程出现在你身边,供你使用。
回复

使用道具 举报

12

主题

179

帖子

167

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 08:00:28 | 显示全部楼层
我用的是:
 
  1. ;;; e2a.lsp - Encompass to American color translator
  2. (defun c:e2a (/ colLst lay col)
  3. (vl-load-com)
  4. (setq colLst '(
  5. (1 . 67)
  6. (2 . 66)
  7. (3 . 64)
  8. (4 . 77)
  9. (5 . 78)
  10. (6 . 73)
  11. ))
  12. (vlax-for l (vla-get-layers
  13. (vla-get-activedocument
  14. (vlax-get-acad-object)))
  15. (setq lay (cons l lay)))
  16. (foreach layer lay
  17. (if (setq col (assoc (vla-get-color layer) colLst))
  18. (vla-put-color layer (cdr col))))
  19. (princ)
  20. (setq colLst '(
  21. (64 . 1)
  22. (66 . 2)
  23. (67 . 3)
  24. (68 . 4)
  25. (69 . 5)
  26. (72 .
  27. (73 . 12)
  28. (74 . 13)
  29. (76 . 20)
  30. (77 . 22)
  31. (78 . 30)
  32. (79 . 41)
  33. ))
  34. (vlax-for l (vla-get-layers
  35. (vla-get-activedocument
  36. (vlax-get-acad-object)))
  37. (setq lay (cons l lay)))
  38. (foreach layer lay
  39. (if (setq col (assoc (vla-get-color layer) colLst))
  40. (vla-put-color layer (cdr col))))
  41. (princ)
  42. )
  43. ;;; end e2a.lsp

 
左边的数字是要更改的颜色,右边的数字是要更改的颜色。
 
我换了双色。我首先将颜色更改为两种颜色中都不一定使用的颜色。ctb,然后将其更改为最终颜色。在代码中,您可以看到我最终切换了颜色1和3。如果我换成1比3,再换成3比1,我的红色永远不会改变,但我的绿色现在都是红色;不是我想要的。所以我把1改为67,3改为64;然后是64到1和67到3;有效地交换了我的红色和绿色。我希望这有意义。
 
我确信有更简单的方法,但这花了我几分钟的时间来完成这项工作。
回复

使用道具 举报

6

主题

19

帖子

14

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 08:03:13 | 显示全部楼层
 
谢谢你的快速回复。我已经试过了,但不幸的是,我引入的一些在同一“级别”上的实体颜色不同,并且具有不同的线型。我需要它看起来就像绘制dgn一样。我会创建一个自定义的ctb文件,但我们也在为这些图纸添加我们自己的东西;所以这不是一个选择。
回复

使用道具 举报

6

主题

19

帖子

14

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 08:06:23 | 显示全部楼层
 
非常好李罗伊!
我可以在我们正在进行的另一个项目中使用它。不幸的是,这幅画的颜色并不一致。因此,我仍然需要能够选择具有该颜色的所有实体,并将其更改为用户定义的颜色。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:08:53 | 显示全部楼层
 
QSELECT>Color>150,然后选择CHPROP>Color,或使用颜色下拉列表。
 
当然,这个过程也可以自动化。
回复

使用道具 举报

6

主题

19

帖子

14

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 08:10:54 | 显示全部楼层
 
这正是我一直在做的,李!当我必须一张纸做60次左右的命令时,这非常耗时。
回复

使用道具 举报

12

主题

179

帖子

167

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 08:13:14 | 显示全部楼层
 
我发现,当对象设置为“BYLAYER”时,当我指定颜色编号时,QSELECT不会选择它。我讨厌那样。有我可以改变的变量吗?
回复

使用道具 举报

12

主题

179

帖子

167

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-6 08:17:51 | 显示全部楼层
为了更新我上面的代码,我对其进行了一些简化,以供其他可能会使用它的人使用。
 
这仍然是一个双重变化。将原始颜色更改为不使用的临时颜色,然后将临时颜色更改为最终颜色。这可以防止将颜色更改回自身或其他不需要的颜色。
 
  1. ;;; c2c.lsp - Color to Color translator
  2. ;;;
  3. ;;;Expand the lists as needed to change all necessary colors
  4. ;;;
  5. (defun c:e2a (/ colLst)
  6. (vl-load-com)
  7. (defun convert (colLst / lay col)
  8. (vlax-for l (vla-get-layers
  9. (vla-get-activedocument
  10. (vlax-get-acad-object)))
  11. (setq lay (cons l lay)))
  12. (foreach layer lay
  13. (if (setq col (assoc (vla-get-color layer) colLst))
  14. (vla-put-color layer (cdr col))))
  15. (princ)
  16. )
  17. ;;;
  18. ;;;list of original colors to change from, to temporary colors
  19. ;;;(<from> . <to>)
  20. ;;;
  21. (setq colLst '(
  22. (1 . 67)
  23. (2 . 66)
  24. (3 . 64)
  25. (4 . 77)
  26. (5 . 78)
  27. ))
  28. (convert colLst) ;Run convert function
  29. ;;;
  30. ;;;list of temporary colors to change from, to final colors
  31. ;;;(<from> . <to>)
  32. ;;;
  33. (setq colLst '(
  34. (64 . 1)
  35. (78 . 2)
  36. (67 . 3)
  37. (66 . 4)
  38. (77 . 5)
  39. ))
  40. (convert colLst) ;Run convert function
  41. )
  42. ;;; end c2c.lsp
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:20:05 | 显示全部楼层
 
据我所知,QSELECT命令是根据对象特性而不是图层特性选择对象。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-9 21:34 , Processed in 0.384924 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表