明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2292|回复: 12

[讨论] 大家帮我看下这个改图块颜色程序如何完善下!

[复制链接]
发表于 2015-4-16 19:46 | 显示全部楼层 |阅读模式
大家好:

            现有一个改图块颜色的程序,因为工作中会插入很多相同的块,我目的是想单独改某一个块的颜色,而这个程序是你点个某个块后,图档中所有的相同块颜色都变了,请大家帮完善一下,谢谢各位!


(defun C:Y6 (/ COL SS CNT IDX BLKNAME DONELIST)
  (defun GRP (GCC EL) (cdr (assoc GCC EL)))
  (defun UPDATE (BNAME COL / ENAME ELIST)
    (setq ENAME (tblobjname "BLOCK" BNAME))
    (if
      (and ENAME
    (zerop (logand 52 (GRP 70 (entget ENAME '("*")))))
      )
       (progn
  (while ENAME
    (if (or (= "INSERT" (GRP 0 (entget ENAME)))
     (= "DIMENSION" (GRP 0 (entget ENAME)))
        )
      (UPDATE (GRP 2 (entget ENAME)) COL)
    )
    (setq ELIST (entget ENAME '("*"))
   ELIST (subst '(8 . "0") (assoc 8 ELIST) ELIST)
   ELIST (if (assoc 62 ELIST)
    (subst (cons 62 COL) (assoc 62 ELIST) ELIST)
    (append ELIST (list (cons 62 COL)))
         )
    )
    (entmod ELIST)
    (setq ENAME (entnext ENAME))
  )
  't
       )
    )
  )
  (if (> (logand (GRP 70 (tblsearch "layer" "0")) 1) 0)
    (princ "\nLayer 0 must be thawed before running FIXBLOCK!\n"
    )
    (progn
      (if
(progn
   (setq COL (acad_colordlg 7))
   (princ "\nPress  to fix all Blocks New Color\n")
   (setq CNT 0
  SS  (ssget '((0 . "INSERT,DIMENSION")))
   )
)
  (progn
    (setq IDX (sslength SS))
    (while (>= (setq IDX (1- IDX)) 0)
      (if
        (not
   (member (setq BLKNAME (GRP 2 (entget (ssname SS IDX))))
    DONELIST
   )
        )
  (progn
    (if (UPDATE BLKNAME COL)
      (setq CNT (1+ CNT))
    )
    (setq DONELIST (cons BLKNAME DONELIST))
  )
      )
    )
  )
  (while (setq BLKNAME (GRP 2 (tblnext "BLOCK" (not BLKNAME))))
    (if (UPDATE BLKNAME COL)
      (setq CNT (1+ CNT))
    )
  )
      )
      (princ (strcat "\n"
       (itoa CNT)
       " block"
       (if (= CNT 1)
         ""
         "s"
       )
       " redefined New Color\n"
      )
      )
    )
  )
  (command "_.REGEN")
  (princ)
)

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-9-9 14:28 | 显示全部楼层
cj52000 发表于 2015-4-17 18:03
还是不行啊,改一个块颜色,其实相同的块都改了

同样的需求 请问解决问题了吗
发表于 2021-9-18 13:45 | 显示全部楼层
alexmai 发表于 2021-9-17 23:46
块颜色改为byblock

不太懂呢 怎么操作呢  有完整代码吗
发表于 2021-9-17 23:46 | 显示全部楼层
依然小小鸟 发表于 2021-9-9 14:28
同样的需求 请问解决问题了吗

块颜色改为byblock
 楼主| 发表于 2015-4-17 13:48 | 显示全部楼层
各位老大帮忙看看啊
发表于 2015-4-17 16:15 | 显示全部楼层
其实是不用编程的,利用ACAD的基本知识就可以达到目的。
ACAD的0层实际上是透明的,所以又叫透明层。
做法:1、将图元绘制在0层,颜色随层,然后定义图块。
         2、在不同的图层中插入图块,就会形成颜色与图层颜色相同的图块。
发表于 2015-4-17 16:33 | 显示全部楼层
  1. (defun LM:ApplytoBlockObjects ( blks name func / result )
  2.     (setq func (eval func))
  3.     (if (not (vl-catch-all-error-p (setq def (vl-catch-all-apply 'vla-item (list blks name)))))
  4.         (vlax-for obj def (setq result (cons (func obj) result)))
  5.     )
  6.     (reverse result)
  7. )

  8. (defun c:bco ( / s col)
  9. (if (= ocol nil)(setq ocol 0))
  10.     (princ "\nSelect Block: ")
  11.     (if (setq s (ssget "_+.:E:S" '((0 . "INSERT"))))
  12. (progn
  13. (mapcar 'princ (list "\nNumber of color:[<" ocol ">]"))
  14. (prin1)
  15.         (setq col(getint ))
  16. (if (/= col nil)(setq ocol col)(setq col ocol))
  17.         (LM:ApplytoBlockObjects
  18.             (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
  19.             (vla-get-effectivename (vlax-ename->vla-object (ssname s 0)))
  20.            '(lambda ( obj ) (vla-put-layer obj "0"))        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;图层改为0层
  21.         )
  22.         (LM:ApplytoBlockObjects
  23.             (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
  24.             (vla-get-effectivename (vlax-ename->vla-object (ssname s 0)))
  25.            '(lambda ( obj ) (vla-put-Color obj col))           ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;颜色改为Col
  26.         )
  27.         (LM:ApplytoBlockObjects
  28.             (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
  29.             (vla-get-effectivename (vlax-ename->vla-object (ssname s 0)))
  30.            '(lambda ( obj ) (vla-put-LinetypeScale obj (getvar 'dimscale)))           ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;顺便改一下线型比例
  31.         )                                                               
  32. )
  33.     )
  34.     (princ)
  35. (entmod(entget(ssname s 0)))(princ)
  36. )
  37. (vl-load-com) (princ)

 楼主| 发表于 2015-4-17 18:03 | 显示全部楼层
菜卷鱼 发表于 2015-4-17 16:33

还是不行啊,改一个块颜色,其实相同的块都改了
发表于 2015-4-18 08:29 | 显示全部楼层
你把颜色改成0 ,然后你就可以通过工具栏的下拉条改颜色了
 楼主| 发表于 2015-4-18 10:09 | 显示全部楼层
菜卷鱼 发表于 2015-4-18 08:29
你把颜色改成0 ,然后你就可以通过工具栏的下拉条改颜色了

这个我也试过,也还是不行
发表于 2015-4-18 10:31 | 显示全部楼层
cj52000 发表于 2015-4-18 10:09
这个我也试过,也还是不行

我就是这样改的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-6 21:36 , Processed in 0.462023 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表