明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: wdb

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

  [复制链接]
发表于 2003-12-9 15:38:00 | 显示全部楼层
用我的程序(3楼),
要还不能分解,传个图上来,我看看为什么
 楼主| 发表于 2003-12-9 16:01:00 | 显示全部楼层
我分析了一下你的程序,只能分解2层块的嵌套,3层嵌套就不行
发表于 2003-12-9 16:25:00 | 显示全部楼层
都跟你说了,让你传个图上来,
我特意做了一个6层嵌套的块,完全炸开。。。
不知道你是如何分析的???
 楼主| 发表于 2003-12-9 17:57:00 | 显示全部楼层
是我看错了,把(explodex ent)看成了是分解命令。抱歉。函数还能调用自身,第一次见到。
发表于 2003-12-9 18:30:00 | 显示全部楼层
这是函数的嵌套调用,在任何程序语言中都是比较常用的方法。。。
发表于 2003-12-9 20:16:00 | 显示全部楼层
这叫“递归”。非常常用的程序设计技巧。

递归的好处是:程序简短。有些问题既可以用递归也可以用循环递推实现,但递归的方法往往更简洁并易于阅读。而有些问题非递归手段无法解决。

坏处是:运行时占用内存与堆栈空间比较多。而且有些程序高级语言的实现中对堆栈层数有限制,不能无限递归,超出层数则会堆栈溢出。Autolisp的递归堆栈也是有限的,大概接近19996层吧~~:
下面的程序测试递归深度:
(defun c:test()
  (if (null i) (setq i 0))
  (princ "\n")
  (princ (setq i (1+ i)))
  (c:test)
)
至internal stack limit reached(达到内部堆栈限制极限)

当然,不会有嵌套了20000层的块吧?
发表于 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. )
发表于 2004-5-1 18:15:00 | 显示全部楼层
meflying:
的应该可以,他使用了递归调用。
发表于 2004-5-1 18:19:00 | 显示全部楼层
gare1000发表于2004-5-1 18:15:00meflying:的应该可以,他使用了递归调用。
抱歉,我只看了大家第一页的话题,就留言了,没注意到后面还有。
发表于 2004-5-12 20:05:00 | 显示全部楼层
to meflying:
你的程序我试过了,对于一个包含嵌套块的实体可行,若对多个各自含有嵌套块的选择集,则只有其中一个实体被分解。以下是我的改进版: (defun explodex (ss / ss1 i ent)
(if (and (= (type ss) 'ENAME)
(= "INSERT" (cdr (assoc 0 (entget ss)))) )
(command "_.explode" ss)
(progn
(setq i 0)
(repeat (sslength ss)
(setq ent (ssname ss i))
(explodex ent)
(setq ss1 (ssget "P"))
(if (or (> (sslength ss1) 1)
(= "INSERT" (cdr (assoc 0 (entget (ssname ss1 0)))))
)
(explodex ss1)
)
(setq i (1+ i))
)
)
)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-23 17:40 , Processed in 0.179257 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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