raobinhsh 发表于 2011-8-23 16:02:57

有限炸掉多重块程序

一大堆块由多层块嵌套而成,用这个程序去炸,如果炸掉之后,产生的一些块由非块图元组成,对这种块就不炸,而继续炸那些多重块,直到所有的块都为由非块图元组成的块为止

byghbcx 发表于 2011-8-23 17:22:08

(defun c:xxx (/ explodex blk_name ss i ent ent1);炸开嵌套块成单个实体组成块
(defun explodex (ents / ent ss i)
    (command "_.explode" ents)
    (setq ss (ssget "P"))
    (setq i 0)
    (repeat (sslength ss)
      (setq ent (ssname ss i))
      (if (= "INSERT" (cdr (assoc 0 (entget ent))))
        (progn
          (setq blk_name (cdr (assoc 2 (entget ent))))
          (setq ent1 (cdr (assoc -2 (tblsearch "block" blk_name))))
             (while (and ent1
                           (= "INSERT" (cdr (assoc 0 (entget ent1))))
                      )
               (setq ent1 (entnext ent1))
               (explodex ent)
             )
        )
      )
      (setq i (1+ i))
    )
)
(setq ss (ssget))
(setq i 0)
(repeat (sslength ss)
    (setq ent (ssname ss i))
    (if (= "INSERT" (cdr (assoc 0 (entget ent))))
        (progn
          (setq blk_name (cdr (assoc 2 (entget ent))))
          (setq ent1 (cdr (assoc -2 (tblsearch "block" blk_name))))
             (while (and ent1
                           (= "INSERT" (cdr (assoc 0 (entget ent1))))
                      )
               (setq ent1 (entnext ent1))
               (explodex ent)
             )
        )
      )
    (setq i (1+ i))
)
)

Andyhon 发表于 2011-8-23 16:49:37

此类问题,建议楼主提供调试用样本(依可能状况列举)
程序以通过样本为准 ....
若您都想像不出可能会遇上什么样的状况,未可寄望程序人员补漏

raobinhsh 发表于 2011-8-23 17:12:37

补上示例,请大家帮着编一下

raobinhsh 发表于 2011-8-24 08:49:35

经过验证符合要求,怎么把明经币给你呀?

czb203 发表于 2011-11-18 11:21:15

3楼的试了一下很不错的样子哦

pzweng 发表于 2012-4-11 14:45:48

byghbcx 发表于 2011-8-23 17:22 static/image/common/back.gif
(defun c:xxx (/ explodex blk_name ss i ent ent1);炸开嵌套块成单个实体组成块
(defun explodex (ents ...

一直需要这个功能,又不好表达出来让人家听懂,谢谢

664571221 发表于 2024-3-7 17:13:59

楼主这个可以用吗

664571221 发表于 2024-3-7 17:15:34

byghbcx 发表于 2011-8-23 17:22
(defun c:xxx (/ explodex blk_name ss i ent ent1);炸开嵌套块成单个实体组成块
(defun explodex (ents ...

炸无名块可以吗
页: [1]
查看完整版本: 有限炸掉多重块程序