明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1370|回复: 11

[提问] 选中的图块改色之后regen重生成,则同名称图块全部改色

[复制链接]
发表于 2024-3-11 21:52:18 | 显示全部楼层 |阅读模式
本帖最后由 LIULISHENG 于 2024-3-11 22:29 编辑

大家好,论坛里图块改色的源码http://bbs.mjtd.com/forum.php?mo ... %AB&_dsign=8e1af037

(defun c:gk (/ ChBlkColor SS blks I Obj BnLst)
  (defun ChBlkColor (Blks Obj Color / BlkName oName)
    (if (and (= (vla-get-ObjectName obj) "AcDbBlockReference")
             (= (vla-get-HasAttributes obj) :vlax-true)
        )
      (foreach x (vlax-invoke obj 'getattributes)
        (vla-put-color x Color)
      )
    )
    (setq BlkName (vla-get-name obj))
    (if (not (member BlkName bnlst))
      (progn
        (setq bnlst (cons BlkName BnLst))
        (vlax-for X (vla-item Blks BlkName)
          (setq oName (vla-get-ObjectName X))
          (cond ((wcmatch oName "*Dimension,AcDbLeader,AcDbFcf")
                 (vla-put-DimensionLineColor X Color)
                 (if (wcmatch oName "*Dimension")
                 (progn
                     (vla-put-ExtensionLineColor X Color)
                     (if (setq BlkName (assoc 2 (entget (vlax-vla-object->ename X))))
                       (vlax-for X (vla-item Blks (cdr BlkName))
                         (vla-put-color X Color)
                       )
                     )
                   )
                 )
                 (if (wcmatch oName "*Dimension,AcDbFcf")
                   (vla-put-TextColor X Color)
                 )
                )
                ((= oName "AcDbBlockReference")
                 (ChBlkColor Blks X Color)
                )
          )
          (vla-put-color X Color)
        )
      )
    )
    (vla-UpDate obj)
  )
  (if (and (setq ss (ssget '((0 . "insert"))))
           (or $ChBlkColor$ (setq $ChBlkColor$ 7))
           (setq $ChBlkColor$ (acad_colordlg $ChBlkColor$))
      )
    (progn
      (setq blks (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))))
      (repeat (setq i (sslength ss))
        (setq obj (vlax-ename->vla-object (ssname ss (setq i (1- i)))))
        (ChBlkColor Blks Obj $ChBlkColor$)
      )
    )
  )
  (princ)
)

在选中的图块改色后,如果regen重生成,会出现同名称的图块颜色全部更改,能否只更改选中的图块颜色?论坛里几乎所有图块改色例程都是这个思路,也都存在重生成后同名称图块全部改色的问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2024-3-11 22:10:38 | 显示全部楼层
1,块表记录相当于母体,块参照相当于孩子.
2,母体图元的颜色不设置随子则显示颜色是母体,反之随块就是随子.
3,大多数情况都是新建一个块.
回复 支持 1 反对 0

使用道具 举报

发表于 2024-3-11 22:38:03 | 显示全部楼层
LIULISHENG 发表于 2024-3-11 22:22
如楼上所言,问题是出在块表记录,块表只能针对同名称的所有块更改属性,不能针对其中的每个块来更改,可能 ...

我已经回答你了啊,块内随块,块外指定颜色(只允许一种颜色)
块之所以块,就是他们是一样的,允许多种不同颜色的行为很奇怪,cad并没有这个机制.
如果真的忍不了,可以自己实现一个"组块"功能,不就是复合图元嘛,想约束什么约束什么...这样要了解自定义图元
发表于 2024-3-11 23:18:19 | 显示全部楼层
”同名称的不同块“   何为块,你读一下你的表述。
惊佬给出他的回答,要实现你的诉求:
1.单块改名,成为不同的块。
2.块颜色改为ByBlock,可以同块不同色。
 楼主| 发表于 2024-3-11 22:22:17 | 显示全部楼层
如楼上所言,问题是出在块表记录,块表只能针对同名称的所有块更改属性,不能针对其中的每个块来更改,可能怎样能够使同名称的不同块更改颜色?
 楼主| 发表于 2024-3-11 23:37:52 | 显示全部楼层
感谢楼上两位,受教了
发表于 2024-3-11 23:50:05 | 显示全部楼层
单图块改色


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2024-3-12 00:14:14 | 显示全部楼层

院长,改色后重生成可以吗?
发表于 2024-3-12 08:47:17 | 显示全部楼层
除了是个新块,别无他法吧。有人的把块后加后缀编号,认为是同一块用来管理,实际并不是
发表于 2024-3-12 17:27:40 | 显示全部楼层
天正的图块改色命令可以实现这个功能。会提示是只改当前块,还是改所有同名块。不知道怎么实现的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 22:44 , Processed in 0.208385 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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