明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5846|回复: 20

[求助]请教高手,将选择块内实体修改至0层颜色随层但是处理不了嵌套块(已解决)?

  [复制链接]
发表于 2009-3-22 23:51:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-3-30 10:17:01 编辑
(defun c:Ttt (/ ss ssl i blocks el e bn bl)
(if (setq ss (ssget '((0 . "insert"))))
(progn
(setq ssl (sslength ss)
i -1
blocks (vla-get-blocks
(vla-get-activedocument (vlax-get-acad-object))
)
)
(repeat ssl
(setq e (ssname ss (setq i (1+ i)))
el (entget e)
bn (cdr (assoc 2 el))
)
(if (not (vl-position bn bl))
(progn
(vlax-for ent (vla-item blocks bn)
(vla-put-layer ent "0")
(vla-put-color ent acBylayer)
(setq bl (cons bn bl))
)
)
)
)
)
)
(princ)
)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2009-3-23 14:38:00 | 显示全部楼层
 楼主| 发表于 2009-3-23 17:46:00 | 显示全部楼层
上面链接的这个程序,对多重块无效哦。
发表于 2009-3-24 01:53:00 | 显示全部楼层
本帖最后由 作者 于 2009-3-24 2:06:38 编辑

  1. ;;;运行命令test
  2. (defun c:test (/ i ent sel obj)
  3.   (setq *App (vlax-get-acad-object))
  4.   (setq *Doc (vla-get-ActiveDocument *APP))
  5.   (setq *BLK (vla-get-blocks *DoC))
  6.   (setq i 0)
  7.   ;;(save_layer_status)
  8.   ;;(unlock_all_layers)
  9.   (if (setq sel (ssget))
  10.     (repeat (sslength sel)
  11.       (setq ent (ssname sel i))
  12.       (setq obj (vlax-ename->vla-object ent))
  13.       (change-color obj)
  14.       (setq i (1+ i))
  15.     )
  16.     (princ "\n你没有选择物体!")
  17.   )
  18.   ;;(restore_layer_status)
  19.   (princ)
  20. )
  21. ;;;主要函数
  22. (defun change-color (obj / name blks)
  23.   (if (/= (vla-get-objectname obj) "AcDbBlockReference")
  24.     (vla-put-color obj AcByLayer) ; 要加出错处理,因为有的可能被锁定
  25.     (progn
  26.       (foreach Att (vlax-invoke Obj 'GetAttributes)
  27. (vla-put-Color Att AcByLayer) ; 这一行用于处理属性随层
  28.       )
  29.       (setq name (vla-get-name obj)) ; 取得块名
  30.       (setq blks (vla-item *BLK name))
  31.       (vlax-for n blks
  32. (change-color n)  ; 递归进去,用于处理嵌套
  33.       )
  34.       (vla-update obj)   ; 用以更新数据,或程序完成后用Regen
  35.     )
  36.   )
  37. )
主要的函数只有几行,需注意出错处理,楼主可以自己补充更完整。

发表于 2009-3-24 08:18:00 | 显示全部楼层

http://ayungerstudio.ys168.com下载【一个非常好用的autoCAD工具集】中就有,命令:ayBLKLayer及ayBLKColor,位于安装后【ay工具】菜单【图块类】中。

 楼主| 发表于 2009-3-24 08:18:00 | 显示全部楼层

楼上的程序处理不了.

本帖最后由 作者 于 2009-3-24 8:24:44 编辑

楼上的highflybir,程序处理不了.试试这个文件:

本帖子中包含更多资源

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

x
发表于 2009-3-24 09:47:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-3-24 09:47:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-3-24 10:01:00 | 显示全部楼层
本帖最后由 作者 于 2009-3-24 16:05:29 编辑

改了一下
  1. ;;;主要函数
  2. (defun change-color (obj / name blks)
  3.   (vla-put-layer obj "0")  ; 如果不改为0层,则有的可能不变色
  4.   (vla-put-color obj AcByLayer)  ; 要加出错处理,因为有的可能被锁定
  5.   (if (or
  6.          (= (vla-get-objectname obj) "AcDbBlockReference")
  7.          (= (vla-get-objectname obj) "AcDbMInsertBlock")
  8.       )
  9.     (progn
  10.       (foreach Att (vlax-invoke Obj 'GetAttributes)
  11.         (vla-put-layer Att "0")
  12.         (vla-put-Color Att AcByLayer) ; 这一行用于处理属性随层
  13.       )
  14.       (setq name (vla-get-name obj)) ; 取得块名
  15.       (setq blks (vla-item *BLK name))
  16.       (vlax-for n blks
  17.         (change-color n)  ; 递归进去,用于处理嵌套
  18.       )
  19.     )
  20.   )
  21. )
 楼主| 发表于 2009-3-24 11:17:00 | 显示全部楼层

[求助]highflybir,你的程序处理不了这几个

本帖最后由 作者 于 2009-3-24 11:19:36 编辑

[求助]highflybir,你的程序处理不了这几个

 

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-5-20 19:38 , Processed in 0.198208 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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