乐筑天下

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

[编程交流] 改变所有颜色的lisp 13

[复制链接]

13

主题

57

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-5 17:32:02 | 显示全部楼层 |阅读模式
问候语。
我的画有13色的实体(不是图层颜色),需要更改为青色。这些实体嵌入在不同的块、不同的嵌套级别和不同的层中。请帮助lisp将所有实体颜色13更改为青色。
感谢任何人的帮助。
回复

使用道具 举报

95

主题

477

帖子

383

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
475
发表于 2022-7-5 17:40:43 | 显示全部楼层
以下是一些让您开始学习的内容:
  1. (defun c:test (/ *error* ss cnt)
  2. (defun *error* (msg)
  3.    (if (not
  4.          (member msg '("Function cancelled" "quit / exit abort"))
  5.        )
  6.      (princ (strcat "\nError: " msg))
  7.    )
  8.    (princ)
  9. )
  10. (setq ss (ssget "_X")
  11.        cnt 0)
  12. (repeat (sslength ss)
  13.    (setq obj (vlax-ename->vla-object (ssname ss cnt)))
  14.    ;;;Need to check if block is an xref or a layout and if so, ignore rest of code
  15.    ;;;Use an if or statement or an if and statement to do this
  16.    (if (= (vla-get-truecolor obj) colortype)
  17.      (vla-put-truecolor obj desiredcolor)
  18.      )
  19.    (setq cnt (+ cnt 1))
  20.    )
  21. )
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:50:13 | 显示全部楼层
不适用于外部参照,仅适用于嵌套到任何深度的块。。。也许李可以做到这一点,并为外部参照,但这是好的,这就是。。。
 
  1. (defun c:chcolor ( / process sc dc ss i ent blnlst enx )
  2. (vl-load-com)
  3. (defun process ( b / ent blnlst enx )
  4.    (setq ent (tblobjname "BLOCK" b))
  5.    (while (setq ent (entnext ent))
  6.      (if (= (cdr (assoc 0 (entget ent))) "INSERT")
  7.        (progn
  8.          (if
  9.            (and
  10.              (not (vlax-property-available-p (vlax-ename->vla-object ent) 'Path))
  11.              (not (vl-position (vla-get-effectivename (vlax-ename->vla-object ent)) blnlst))
  12.            )
  13.            (setq blnlst (cons (vla-get-effectivename (vlax-ename->vla-object ent)) blnlst))
  14.          )
  15.          (if (vl-every '(lambda ( x ) (vl-position x (entget ent))) sc)
  16.            (progn
  17.              (setq enx (entget ent))
  18.              (foreach c dc
  19.                (if (not (assoc (car c) enx))
  20.                  (setq enx (append enx (list c)))
  21.                  (setq enx (subst c (assoc (car c) enx) enx))
  22.                )
  23.              )
  24.              (if (not (assoc 62 dc))
  25.                (setq enx (vl-remove (assoc 62 enx) enx))
  26.              )
  27.              (if (not (assoc 420 dc))
  28.                (setq enx (vl-remove (assoc 420 enx) enx))
  29.              )
  30.              (entupd (cdr (assoc -1 (entmod enx))))
  31.            )
  32.          )
  33.        )
  34.        (if (vl-every '(lambda ( x ) (vl-position x (entget ent))) sc)
  35.          (progn
  36.            (setq enx (entget ent))
  37.            (foreach c dc
  38.              (if (not (assoc (car c) enx))
  39.                (setq enx (append enx (list c)))
  40.                (setq enx (subst c (assoc (car c) enx) enx))
  41.              )
  42.            )
  43.            (if (not (assoc 62 dc))
  44.              (setq enx (vl-remove (assoc 62 enx) enx))
  45.            )
  46.            (if (not (assoc 420 dc))
  47.              (setq enx (vl-remove (assoc 420 enx) enx))
  48.            )
  49.            (entupd (cdr (assoc -1 (entmod enx))))
  50.          )
  51.        )
  52.      )
  53.    )
  54.    (if blnlst
  55.      (foreach b blnlst
  56.        (process b)
  57.      )
  58.    )
  59. )
  60. (alert "Choose source color to be changed...")
  61. (setq sc (acad_truecolordlg 256))
  62. (alert "Choose destination color to be changed into...")
  63. (setq dc (acad_truecolordlg 256))
  64. (if (not (equal (sssetfirst nil (ssget "_A")) '(nil nil)))
  65.    (setq ss (ssget "_:L"))
  66. )
  67. (if ss
  68.    (progn
  69.      (repeat (setq i (sslength ss))
  70.        (setq ent (ssname ss (setq i (1- i))))
  71.        (if (= (cdr (assoc 0 (entget ent))) "INSERT")
  72.          (progn
  73.            (if
  74.              (and
  75.                (not (vlax-property-available-p (vlax-ename->vla-object ent) 'Path))
  76.                (not (vl-position (vla-get-effectivename (vlax-ename->vla-object ent)) blnlst))
  77.              )
  78.              (setq blnlst (cons (vla-get-effectivename (vlax-ename->vla-object ent)) blnlst))
  79.            )
  80.            (if (vl-every '(lambda ( x ) (vl-position x (entget ent))) sc)
  81.              (progn
  82.                (setq enx (entget ent))
  83.                (foreach c dc
  84.                  (if (not (assoc (car c) enx))
  85.                    (setq enx (append enx (list c)))
  86.                    (setq enx (subst c (assoc (car c) enx) enx))
  87.                  )
  88.                )
  89.                (if (not (assoc 62 dc))
  90.                  (setq enx (vl-remove (assoc 62 enx) enx))
  91.                )
  92.                (if (not (assoc 420 dc))
  93.                  (setq enx (vl-remove (assoc 420 enx) enx))
  94.                )
  95.                (entupd (cdr (assoc -1 (entmod enx))))
  96.              )
  97.            )
  98.          )
  99.          (if (vl-every '(lambda ( x ) (vl-position x (entget ent))) sc)
  100.            (progn
  101.              (setq enx (entget ent))
  102.              (foreach c dc
  103.                (if (not (assoc (car c) enx))
  104.                  (setq enx (append enx (list c)))
  105.                  (setq enx (subst c (assoc (car c) enx) enx))
  106.                )
  107.              )
  108.              (if (not (assoc 62 dc))
  109.                (setq enx (vl-remove (assoc 62 enx) enx))
  110.              )
  111.              (if (not (assoc 420 dc))
  112.                (setq enx (vl-remove (assoc 420 enx) enx))
  113.              )
  114.              (entupd (cdr (assoc -1 (entmod enx))))
  115.            )
  116.          )
  117.        )
  118.      )
  119.      (if blnlst
  120.        (foreach b blnlst
  121.          (process b)
  122.        )
  123.      )
  124.    )
  125. )
  126. (vla-regen (vla-get-activedocument (vlax-get-acad-object)) acactiveviewport)
  127. (princ)
  128. )
M.R。
当做
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-5 17:58:09 | 显示全部楼层
这个?
只需将'(2 50 51)替换为'(13),将8替换为4。
回复

使用道具 举报

13

主题

57

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-5 17:59:41 | 显示全部楼层
马尔科先生,我遇到了一个错误。
 
出错后,我重新生成,然后颜色确实发生了变化。不需要外部参照。最好不要触摸外部参照。该文件中只有dwg。
 
我的工作伙伴ask可以选择块而不是整个图形。
 
谢谢你,先生
 
 
 
回复

使用道具 举报

13

主题

57

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-5 18:09:33 | 显示全部楼层
 
斯特凡先生,情况确实发生了变化。效果很好。
 
工作伙伴ask可以选择块,而不是更改整个图形。
 
谢谢你,先生
回复

使用道具 举报

0

主题

375

帖子

385

银币

限制会员

铜币
-7
发表于 2022-7-5 18:18:34 | 显示全部楼层
当然
 
  1. (defun c:test ( / acdoc ss) (vl-load-com)
  2. (setq acdoc (vla-get-activedocument (vlax-get-acad-object)))
  3. (if
  4.    (ssget ":L")
  5.    (progn
  6.      (vlax-for obj (setq ss (vla-get-activeselectionset acdoc))
  7.        (change2cyan obj)
  8.      )
  9.      (vla-delete ss)
  10.    )
  11. )
  12. (vla-regen acdoc acAllViewports)
  13. (princ)
  14. )
  15. (defun change2cyan (obj)
  16. (cond
  17.    ((eq (vla-get-objectname obj) "AcDbBlockReference")
  18.     (vlax-for x (vla-item (vla-get-blocks acdoc) (vla-get-name obj))
  19.       (change2cyan x))
  20.     )
  21.    ((= (vla-get-color obj) 13)
  22.     (vla-put-color obj 4)
  23.    )
  24. )
  25. )
回复

使用道具 举报

13

主题

57

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-5 18:23:39 | 显示全部楼层
谢谢,先生。
我还有最后一个小要求。如果进行了更改,可能会得到反馈&如果没有太多麻烦,可能会得到多少更改。
 
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 18:31:14 | 显示全部楼层
您好,我已经更新了我第一次发布的代码,以绕过您收到的错误消息,我希望。。。测试并通知我。。。对于块定义(不是参考-这是不可能的-只有单个CAD可以用相同的名称定义更新所有块)。。。
 
  1. (defun c:chcolor-blk ( / process sc dc ss n s i ent blnlst enx )
  2. (vl-load-com)
  3. (defun process ( b / ent blnlst enx )
  4.    (setq ent (tblobjname "BLOCK" b))
  5.    (while (setq ent (entnext ent))
  6.      (if (= (cdr (assoc 0 (entget ent))) "INSERT")
  7.        (progn
  8.          (if
  9.            (and
  10.              (not (vlax-property-available-p (vlax-ename->vla-object ent) 'Path))
  11.              (not (vl-position (vla-get-effectivename (vlax-ename->vla-object ent)) blnlst))
  12.            )
  13.            (setq blnlst (cons (vla-get-effectivename (vlax-ename->vla-object ent)) blnlst))
  14.          )
  15.          (if (vl-every '(lambda ( x ) (vl-position x (entget ent))) sc)
  16.            (progn
  17.              (setq enx (entget ent))
  18.              (foreach c dc
  19.                (if (not (assoc (car c) enx))
  20.                  (setq enx (append enx (list c)))
  21.                  (setq enx (subst c (assoc (car c) enx) enx))
  22.                )
  23.              )
  24.              (if (not (assoc 62 dc))
  25.                (setq enx (vl-remove (assoc 62 enx) enx))
  26.              )
  27.              (if (not (assoc 420 dc))
  28.                (setq enx (vl-remove (assoc 420 enx) enx))
  29.              )
  30.              (entupd (cdr (assoc -1 (entmod enx))))
  31.            )
  32.          )
  33.        )
  34.        (if (vl-every '(lambda ( x ) (vl-position x (entget ent))) sc)
  35.          (progn
  36.            (setq enx (entget ent))
  37.            (foreach c dc
  38.              (if (not (assoc (car c) enx))
  39.                (setq enx (append enx (list c)))
  40.                (setq enx (subst c (assoc (car c) enx) enx))
  41.              )
  42.            )
  43.            (if (not (assoc 62 dc))
  44.              (setq enx (vl-remove (assoc 62 enx) enx))
  45.            )
  46.            (if (not (assoc 420 dc))
  47.              (setq enx (vl-remove (assoc 420 enx) enx))
  48.            )
  49.            (entupd (cdr (assoc -1 (entmod enx))))
  50.          )
  51.        )
  52.      )
  53.    )
  54.    (if blnlst
  55.      (foreach b blnlst
  56.        (process b)
  57.      )
  58.    )
  59. )
  60. (alert "Choose source color to be changed...")
  61. (setq sc (acad_truecolordlg 256))
  62. (alert "Choose destination color to be changed into...")
  63. (setq dc (acad_truecolordlg 256))
  64. (alert "Pick Block Reference on unlocked layer...")
  65. (setq ss (ssget "_+.:E:S:L" '((0 . "INSERT"))))
  66. (while (or (not ss) (vlax-property-available-p (vlax-ename->vla-object (ssname ss 0)) 'Path))
  67.    (prompt "\nMissed or picked entity not INSERT entity or picked INSERT entity belong to Xref or picked entity not on unlocked layer... Try again...")
  68.    (setq ss (ssget "_+.:E:S:L" '((0 . "INSERT"))))
  69. )
  70. (setq n (vla-get-effectivename (vlax-ename->vla-object (ssname ss 0))))
  71. (if (not (equal (sssetfirst nil (ssget "_A" '((0 . "INSERT")))) '(nil nil)))
  72.    (setq s (ssget "_:L"))
  73. )
  74. (setq ss (ssadd))
  75. (foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))
  76.    (if (= n (vla-get-effectivename (vlax-ename->vla-object e)))
  77.      (ssadd e ss)
  78.    )
  79. )
  80. (if ss
  81.    (progn
  82.      (repeat (setq i (sslength ss))
  83.        (setq ent (ssname ss (setq i (1- i))))
  84.        (if (vl-every '(lambda ( x ) (vl-position x (entget ent))) sc)
  85.          (progn
  86.            (setq enx (entget ent))
  87.            (foreach c dc
  88.              (if (not (assoc (car c) enx))
  89.                (setq enx (append enx (list c)))
  90.                (setq enx (subst c (assoc (car c) enx) enx))
  91.              )
  92.            )
  93.            (if (not (assoc 62 dc))
  94.              (setq enx (vl-remove (assoc 62 enx) enx))
  95.            )
  96.            (if (not (assoc 420 dc))
  97.              (setq enx (vl-remove (assoc 420 enx) enx))
  98.            )
  99.            (entupd (cdr (assoc -1 (entmod enx))))
  100.          )
  101.        )
  102.      )
  103.      (process n)
  104.    )
  105. )
  106. (prompt "\nProcessed : ") (princ (sslength ss)) (prompt (strcat " block references with name of picked reference : "" n ""\n"))
  107. (vla-regen (vla-get-activedocument (vlax-get-acad-object)) acactiveviewport)
  108. (textscr)
  109. (princ)
  110. )
回复

使用道具 举报

13

主题

57

帖子

45

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-5 18:33:45 | 显示全部楼层
谢谢你,先生。现在工作没有错误。
如果您允许此请求,我们将非常高兴:
-在没有弹出对话框的情况下请求颜色。在命令行中就足够了。所以我只需要输入13[enter]4[enter]
 
-能够选择多个对象,包括窗户围栏
 
-当命令结束时,命令上指示有多少块已更改的消息非常奇妙,但命令编辑器不能弹出。消息中是否包含任何更改
 
谢谢marko先生
 
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 04:04 , Processed in 1.783728 second(s), 72 queries .

© 2020-2025 乐筑天下

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