jiheng 发表于 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-2 12:25:20

非常厉害:handshake,能分解到块的层吗,就是假如里面内容是1层,块是在2层,我想分解后内容在2层,不知道这样好不好实现?

liuhe 发表于 2023-2-10 13:29:16

6666
稍微改一下就可以输出的是分解后的实体列表(objlst)

masterlong 发表于 2021-5-13 11:23:38

个人觉得CAD推广初期
最大的谬误就是“0层建块”

不语勿语 发表于 2018-5-2 13:53:21

谢谢分享

武林至尊李小龙 发表于 2018-5-3 11:07:25

路过,学习了,很受用。

yoyoho 发表于 2018-5-3 12:40:07

感谢 jiheng 分享程序!!!!!

renhaitao_nice 发表于 2018-5-3 12:56:04

好程序,简洁实用

Aries 发表于 2020-9-10 14:59:39


感谢 jiheng 分享程序!!!!!

Aries 发表于 2020-9-21 12:11:28

分解块至当前图层,可以分解之后不变颜色吗?

wx_fCZsGgCb 发表于 2021-5-13 20:34:46

路过,学习了,很受用。
页: [1] 2
查看完整版本: 分解块至当前图层