明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1875|回复: 0

请教一个不完全彻底打碎块的问题

[复制链接]
发表于 2009-3-9 21:49 | 显示全部楼层 |阅读模式
我想将选择的多层嵌套块不完全彻底打碎,即不打碎名为表中(list "DZ""DZZR""DZSX""DZZRSX")的块。代码如下,但运行过程中总是没有打碎到最后一层就停止了,请高手们分析一下原因,给点改进意见,谢谢!
  1. (defun c:defa (/ LST LSTX SS X)
  2.  (setq ss   (ssget '((0 . "INSERT")))
  3.        lst  nil
  4.        lstx (list "DZ""DZZR""DZSX""DZZRSX");不打碎的块名列表
  5.  ) ;_ End setq
  6.  (mapcar '(lambda (x) (setq lst (append lst (list (cons 2 x))))) lstx)
  7.  (while    (setq ss (ssget    "_P"
  8. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; (append&#160;&#160;&#160; (list (cons -4 "<and")
  9. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160; (cons 0 "INSERT")
  10. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160; (cons -4 "<not")
  11. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160; (cons -4 "<or")
  12. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; ) ;_ End list
  13. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; lst
  14. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; (list (cons -4 "or>")
  15. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160; (cons -4 "not>")
  16. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160; (cons -4 "and>")
  17. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; ) ;_ End list
  18. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; ) ;_ End append
  19. &#160;&#160;&#160; &#160;&#160;&#160; &#160;) ;_ End ssget
  20. &#160;&#160;&#160; ) ;_ End setq
  21. &#160; (brkblk ss)
  22. &#160;) ;_ End while
  23. ) ;_ End defun
  24. (defun brkblk (ss / BNAME DD ENT ENT1 LST N NAME NEWTXT TCA ssa)
  25. &#160;(REPEAT (SETQ N (SSLENGTH SS))
  26. &#160; (SETQ ENT1 (SETQ ENT (ENTGET (SSNAME SS (SETQ N (1- N))))))
  27. &#160; (if (= (get 66 ent1) 1)
  28. &#160;&#160; (WHILE (/= (GET 0 (SETQ ENT1 (ENTGET (SETQ NAME (ENTNEXT (GET -1 ENT1)))))) "SEQEND")
  29. &#160;&#160;&#160; (IF&#160;&#160;&#160; (AND (= (GET 0 ENT1) "ATTRIB") (= (GET 70 ENT1) 1))
  30. &#160;&#160;&#160;&#160; (SSSET ENT1 1 "")
  31. &#160;&#160;&#160; ) ;_ End IF
  32. &#160;&#160; ) ;_ End WHILE
  33. &#160; ) ;_ End if
  34. &#160;) ;_ End REPEAT
  35. &#160;(repeat (setq n (sslength ss))
  36. &#160; (setq ent1 (entget (setq bname (ssname ss (setq n (1- n))))))
  37. &#160; (setvar "clayer" (get 8 ent1))
  38. &#160; (if (= (get 66 ent1) 1)
  39. &#160;&#160; (while (/= (get 0 (setq ent1 (entget (setq name (entnext (get -1 ent1)))))) "SEQEND")
  40. &#160;&#160;&#160; (if&#160;&#160;&#160; (= (get 0 ent1) "ATTRIB")
  41. &#160;&#160;&#160;&#160; (progn
  42. &#160;&#160;&#160;&#160;&#160; (setq newtxt '((0 . "TEXT")))
  43. &#160;&#160;&#160;&#160;&#160; (setq lst '(67 410 10 40 1 50 41 51 7 71 72 11 210))
  44. &#160;&#160;&#160;&#160;&#160; (foreach xh lst ;序号
  45. &#160;&#160;&#160;&#160;&#160;&#160; (setq dd (assoc xh ent1)) ;点对
  46. &#160;&#160;&#160;&#160;&#160;&#160; (if (/= dd nil)
  47. &#160;&#160;&#160; (setq newtxt (append newtxt (list (assoc xh ent1))))
  48. &#160;&#160;&#160;&#160;&#160;&#160; ) ;_ 结束if
  49. &#160;&#160;&#160;&#160;&#160; ) ;_ 结束foreach
  50. &#160;&#160;&#160;&#160;&#160; (if (and (setq tca (get 8 ent1)) (/= tca "0"))
  51. &#160;&#160;&#160;&#160;&#160;&#160; (setq newtxt (append newtxt (list (cons 8 tca))))
  52. &#160;&#160;&#160;&#160;&#160; ) ;_ End if
  53. &#160;&#160;&#160;&#160;&#160; (setq newtxt (append newtxt (list (cons 73 (get 74 ent1)))))
  54. &#160;&#160;&#160;&#160;&#160; (entmake newtxt)
  55. &#160;&#160;&#160;&#160;&#160; (vla-delete (vlax-ename->vla-object name))
  56. &#160;&#160;&#160;&#160; ) ;_ 结束progn
  57. &#160;&#160;&#160; ) ;_ 结束if
  58. &#160;&#160; ) ;_ 结束while
  59. &#160; ) ;_ End if
  60. &#160; (command "explode" bname)
  61. &#160; (if (setq ssa (ssget "_P" '((0 . "ATTDEF"))))
  62. &#160;&#160; (command ".erase" ssa "")
  63. &#160; )
  64. &#160;) ;_ 结束repeat
  65. ) ;_ End defun
  66. (defun get (nnum eent /)
  67. &#160; (cdr (assoc nnum eent))
  68. )
  1. ;呵呵,这一段是最近刚看到的-4才这么写的,不知道是不是太啰嗦了。
  2. (setq ss (ssget&#160;&#160;&#160; "_P"
  3. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; (append&#160;&#160;&#160; (list (cons -4 "<and")
  4. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160; (cons 0 "INSERT")
  5. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160; (cons -4 "<not")
  6. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160; (cons -4 "<or")
  7. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; ) ;_ End list
  8. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; lst
  9. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; (list (cons -4 "or>")
  10. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160; (cons -4 "not>")
  11. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160; (cons -4 "and>")
  12. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; ) ;_ End list
  13. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; ) ;_ End append
  14. &#160;&#160;&#160; &#160;&#160;&#160; &#160;) ;_ End ssget
  15. &#160;&#160;&#160; )

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-30 11:16 , Processed in 0.139246 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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