明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2753|回复: 13

分解块至当前图层

[复制链接]
发表于 2011-10-1 23:05:02 | 显示全部楼层 |阅读模式
正常情况下,画图时图块分解后,图块所包含的图元都会变到0层,但有时我们更希望它们能被分解到当前层,为了达到这个目的,写了下面的代码.

;将块分解到当前层
(defun jc-explode-block-clayer (blk / obj_blk array_obj obj err)
  (setq obj_blk (vlax-ename->vla-object blk))
  ;只分解块
  (if (= (vla-get-objectname obj_blk) "AcDbBlockReference")
    (progn
      ;错误处理,跳过那些不能被分解的块
      ;vla-explode产生一个包含块内实体的数组
      (setq err (vl-catch-all-apply '(lambda () (setq array_obj (vla-explode obj_blk)))))
      (if (not (vl-catch-all-error-p err))
(progn
          (vla-delete obj_blk)
          (setq array_obj (vlax-variant-value array_obj))
          (setq array_obj (vlax-safearray->list array_obj))
          (foreach obj array_obj
            (vla-put-layer obj (getvar "clayer"))
         )
   )
)
      )
    )  
  )
;调用例程
(defun c:eb ( / ssel count i)
  (setq ssel (ssget))
  (if (/= ssel nil)
    (progn
      (setq count (sslength ssel))
      (setq i 0)
      (repeat count
        (jc-explode-block-clayer (ssname ssel i))
(setq i (1+ i))
)
      )
    )
  (princ)
  )

点评

分解到当前层未必是好事,建议分解到图块所在层  发表于 2021-5-13 11:20
发表于 2021-5-2 12:25:20 | 显示全部楼层
非常厉害,能分解到块的层吗,就是假如里面内容是1层,块是在2层,我想分解后内容在2层,不知道这样好不好实现?
发表于 2023-2-10 13:29:16 | 显示全部楼层
6666
稍微改一下  就可以输出的是分解后的实体列表(objlst)
发表于 2021-5-13 11:23:38 | 显示全部楼层
个人觉得CAD推广初期
最大的谬误就是“0层建块”
发表于 2018-5-3 11:07:25 | 显示全部楼层
路过,学习了,很受用。
发表于 2018-5-3 12:40:07 | 显示全部楼层
感谢 jiheng 分享程序!!!!!
发表于 2018-5-3 12:56:04 来自手机 | 显示全部楼层
好程序,简洁实用
发表于 2020-9-10 14:59:39 | 显示全部楼层

感谢 jiheng 分享程序!!!!!
发表于 2020-9-21 12:11:28 | 显示全部楼层
分解块至当前图层,可以分解之后不变颜色吗?
发表于 2021-5-13 20:34:46 | 显示全部楼层
路过,学习了,很受用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 14:33 , Processed in 0.186093 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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