明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7196|回复: 21

块中有多个块,如何彻底分解?

  [复制链接]
发表于 2003-12-6 13:21:00 | 显示全部楼层 |阅读模式
块中有多个块,如何在用vlisp插入块时使块彻底分解?关键是不知道如何求得块分解后块中对象的选择集。
发表于 2004-5-1 17:56:00 | 显示全部楼层
本帖最后由 作者 于 2004-5-2 10:17:40 编辑

不用递归也能写的很简单
  1. (defun c:xex ()
  2.    (princ "\n炸开嵌套块.--------------by 无痕.2004.4")
  3.    (setvar "qaflags" 1)
  4.    (setq ss (ssget '((0 . "INSERT"))))
  5.    (while (setq ss (ssget "P" '((0 . "INSERT"))))
  6.        (command ".explode" ss "")
  7.    )(princ)
  8. )
发表于 2003-12-6 14:39:00 | 显示全部楼层
(ssget "p")
发表于 2003-12-6 14:53:00 | 显示全部楼层
分解嵌套块程序
;ent可以是对象名,也可以是选择集。。。

  1. (defun explodex(ents / ss i )
  2.   (command "_.explode" ents)
  3.   (setq ss (ssget "P"))
  4.   (setq i 0)
  5.   (repeat (sslength ss)
  6.     (setq ent (ssname ss i))
  7.     (if (= "INSERT" (cdr (assoc 0 (entget ent))))
  8.       (explodex ent)
  9.     )
  10.     (setq i (1+ i))
  11.   )
  12. )


发表于 2003-12-7 02:55:00 | 显示全部楼层
试试改变这个系统变量 qaflags
发表于 2003-12-7 08:16:00 | 显示全部楼层
我也編了個.供大家指點和參考, 呵呵. 可以根據需要進行修改SSGET的選擇方式.

(defun explode-all(/ all sl n sd);(explode-all)
  (setvar "cmdecho" 0)
  (repeat 2
  (setq all(ssget "x")        sl (sslength all) n 0)
  (repeat sl
    (setq sd (cdr (assoc 0 (entget (ssname all n)))))
    (if (= sd "INSERT")
      (command ".explode" (ssname all n)))
    (setq n (1+ n))))
  (setvar "cmdecho" 1)
  (princ))
发表于 2003-12-7 11:02:00 | 显示全部楼层
Ea发表于2003-12-7 2:55:00试试改变这个系统变量 qaflags



这个变量是控制什么的?为什么帮助文件中搜索不到这个变量?

to:BDYCAD,你的程序不是炸开嵌套块的,你只炸了一层,如果块中有块,你还是无法完全炸开
发表于 2003-12-7 13:48:00 | 显示全部楼层
to meflying:
http://www.mjtd.com/a2/list.asp?id=459
发表于 2003-12-7 14:38:00 | 显示全部楼层
奇怪,为何帮助中没有说明?
看来这个参数是解决BDY的程序的,嵌套的块还得用我那个程序来解决
发表于 2003-12-8 10:08:00 | 显示全部楼层
QAFLAGS acceps a value between 0 and 32767
bit 0 (1) : ^C in menu macro cancels grips (acts like keyboard <Esc>).
bit 1 (2) : no pause during text screen listings.
bit 2 (4) : no "alert" dialogs (text display instead).
bit 7 (128) : accepts "screen picks" (point lists) via (command) function.(看不懂)
Normally QAFLAGS should be set to 0. Because it might be set to other values it is a good idea to put (setvar "QAFLAGS" 0) in acaddoc.lsp or any other of your lisp files that you use for startup.
 楼主| 发表于 2003-12-9 15:37:00 | 显示全部楼层
to meflying:
  如果块中有多层嵌套块,还是不能彻底分解。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-23 11:49 , Processed in 0.203226 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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