明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1431|回复: 2

请教一个自动选择和循环执行的问题

[复制链接]
发表于 2008-8-4 13:26 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2008-8-4 13:59:14 编辑

下面这种程序是ET工具里的,作用是:执行---》提示用户选择物体-----》将用户选择的属性块及动态块分解。
能不能改为全自动过程,不需要人工干预,也就是:执行后,自动选择所有对象(相当于输入all),不用人去选择物体。好像是代码中的这句:(Setq SS1 (SsGet (list (cons 0 "INSERT")(cons 67 PSFLAG))))
希望模型空间和布局空间的都可以一次处理,原程序是如果在布局空间执行就处理不了模型空间的。(这个如果不好弄就不考虑了)
另外:如果文件大的话,其实这个过程是很费时的,总担心执行到一半就死了。能不能自动循环执行,比如:先自动处理布局空间的所有属性块,休息3秒,然后自动选择模型空间的LAY1层上的所有动态块执行,休息3秒,然后自动选择LAY2层上的动态块执行分解,休息3秒,然后选择所LAY3图上的属性块执行分解。代码最好是能够方便增加或修改这个循环执行.....
(如果实在不好弄的话,就不管动态块了,只处理属性块。)
这样,人可以走开,等一会回来收图就是了。
哪位大侠能不能帮一下忙。。。(这种要求不知会不会有点过份....如果没时间帮忙全部,就帮忙局部,谢谢啊,或给些例子参考一下,只是我不什么编程基本,哎)
  1. (Defun C:BURST (/ item bitset bump att-text lastent burst-one burst
  2.                   BCNT BLAYER BCOLOR ELAST BLTYPE ETYPE PSFLAG ENAME )
  3.    ;-----------------------------------------------------
  4.    ; Item from association list
  5.    ;-----------------------------------------------------
  6.    (Defun ITEM (N E) (CDR (Assoc N E)))
  7.    ;-----------------------------------------------------
  8.    ; Error Handler
  9.    ;-----------------------------------------------------
  10.   (acet-error-init
  11.     (list
  12.       (list "cmdecho" 0
  13.             "highlight" 1
  14.       )
  15.       T     ;flag. True means use undo for error clean up.
  16.     );list
  17.   );acet-error-init  
  18.    ;-----------------------------------------------------
  19.    ; BIT SET
  20.    ;-----------------------------------------------------
  21.    (Defun BITSET (A B) (= (Boole 1 A B) B))
  22.    ;-----------------------------------------------------
  23.    ; BUMP
  24.    ;-----------------------------------------------------
  25.    (Setq bcnt 0)
  26.    (Defun bump (prmpt)
  27.       (Princ
  28.          (Nth bcnt '("\r-" "\r\" "\r|" "\r/"))
  29.       )
  30.       (Setq bcnt (Rem (1+ bcnt) 4))
  31.    )
  32.    ;-----------------------------------------------------
  33.    ; Convert Attribute Entity to Text Entity or MText Entity
  34.    ;-----------------------------------------------------
  35.    (Defun ATT-TEXT (AENT / ANAME TENT ILIST INUM)
  36.       (setq ANAME (cdr (assoc -1 AENT)))
  37.       (if (_MATTS_UTIL ANAME)
  38.          (progn
  39.             ; Multiple Line Text Attributes (MATTS) -
  40.             ; make an MTEXT entity from the MATTS data
  41.             (_MATTS_UTIL ANAME 1)
  42.          )
  43.          (progn
  44.             ; else -Single line attribute conversion
  45.             (Setq TENT '((0 . "TEXT")))
  46.             (ForEach INUM '(8
  47.                             6
  48.                             38
  49.                             39
  50.                             62
  51.                             67
  52.                             210
  53.                             10
  54.                             40
  55.                             1
  56.                             50
  57.                             41
  58.                             51
  59.                             7
  60.                             71
  61.                             72
  62.                             73
  63.                             11
  64.                             74
  65.                            )
  66.                (If (Setq ILIST (Assoc INUM AENT))
  67.                    (Setq TENT (Cons ILIST TENT))
  68.                )
  69.             )
  70.             (Setq
  71.                tent (Subst
  72.                        (Cons 73 (item 74 aent))
  73.                        (Assoc 74 tent)
  74.                        tent
  75.                     )
  76.             )
  77.             (EntMake (Reverse TENT))
  78.          )
  79.       )
  80.    )
  81.    ;-----------------------------------------------------
  82.    ; Find True last entity
  83.    ;-----------------------------------------------------
  84.    (Defun LASTENT (/ E0 EN)
  85.       (Setq E0 (EntLast))
  86.       (While (Setq EN (EntNext E0))
  87.          (Setq E0 EN)
  88.       )
  89.       E0
  90.    )
  91.    ;-----------------------------------------------------
  92.    ; See if a block is explodable. Return T if it is,
  93.    ; otherwise return nil
  94.    ;-----------------------------------------------------
  95.    (Defun EXPLODABLE (BNAME / B expld)
  96.       (vl-load-com)
  97.       (setq BLOCKS (vla-get-blocks
  98.                      (vla-get-ActiveDocument (vlax-get-acad-object)))
  99.        )
  100.       
  101.       (vlax-for B BLOCKS (if (and (= :vlax-false (vla-get-islayout B))
  102.                                   (= (strcase (vla-get-name B)) (strcase BNAME)))
  103.                       (setq expld (= :vlax-true (vla-get-explodable B)))
  104.            )
  105.        )
  106.        expld
  107.     )
  108.    ;-----------------------------------------------------
  109.    ; Burst one entity
  110.    ;-----------------------------------------------------
  111.    (Defun BURST-ONE (BNAME / BENT ANAME ENT ATYPE AENT AGAIN ENAME
  112.                      ENT BBLOCK SS-COLOR SS-LAYER SS-LTYPE mirror ss-mirror
  113.                      mlast)
  114.       (Setq
  115.          BENT   (EntGet BNAME)
  116.          BLAYER (ITEM 8 BENT)
  117.          BCOLOR (ITEM 62 BENT)
  118.          BBLOCK (ITEM 2 BENT)
  119.          BCOLOR (Cond
  120.                    ((> BCOLOR 0) BCOLOR)
  121.                    ((= BCOLOR 0) "BYBLOCK")
  122.                    ("BYLAYER")
  123.                 )
  124.          BLTYPE (Cond ((ITEM 6 BENT)) ("BYLAYER"))
  125.       )
  126.       (Setq ELAST (LASTENT))
  127.       (If (and (EXPLODABLE BBLOCK) (= 1 (ITEM 66 BENT)))
  128.          (Progn
  129.             (Setq ANAME BNAME)
  130.             (While (Setq
  131.                       ANAME (EntNext ANAME)
  132.                       AENT  (EntGet ANAME)
  133.                       ATYPE (ITEM 0 AENT)
  134.                       AGAIN (= "ATTRIB" ATYPE)
  135.                    )
  136.                (bump "Converting attributes")
  137.                (ATT-TEXT AENT)
  138.             )
  139.          )
  140.       )
  141.          (Progn
  142.             (bump "Exploding block")
  143.             (acet-explode BNAME)
  144.             ;(command "_.explode" bname)
  145.          )
  146.       (Setq
  147.          SS-LAYER (SsAdd)
  148.          SS-COLOR (SsAdd)
  149.          SS-LTYPE (SsAdd)
  150.          ENAME    ELAST
  151.       )
  152.       (While (Setq ENAME (EntNext ENAME))
  153.          (bump "Gathering pieces")
  154.          (Setq
  155.             ENT   (EntGet ENAME)
  156.             ETYPE (ITEM 0 ENT)
  157.          )
  158.          (If (= "ATTDEF" ETYPE)
  159.             (Progn
  160.                (If (BITSET (ITEM 70 ENT) 2)
  161.                   (ATT-TEXT ENT)
  162.                )
  163.                (EntDel ENAME)
  164.             )
  165.             (Progn
  166.                (If (= "0" (ITEM 8 ENT))
  167.                   (SsAdd ENAME SS-LAYER)
  168.                )
  169.                (If (= 0 (ITEM 62 ENT))
  170.                   (SsAdd ENAME SS-COLOR)
  171.                )
  172.                (If (= "BYBLOCK" (ITEM 6 ENT))
  173.                   (SsAdd ENAME SS-LTYPE)
  174.                )
  175.             )
  176.          )
  177.       )
  178.       (If (> (SsLength SS-LAYER) 0)
  179.          (Progn
  180.             (bump "Fixing layers")
  181.             (Command
  182.                "_.chprop" SS-LAYER "" "_LA" BLAYER ""
  183.             )
  184.          )
  185.       )
  186.       (If (> (SsLength SS-COLOR) 0)
  187.          (Progn
  188.             (bump "Fixing colors")
  189.             (Command
  190.                "_.chprop" SS-COLOR "" "_C" BCOLOR ""
  191.             )
  192.          )
  193.       )
  194.       (If (> (SsLength SS-LTYPE) 0)
  195.          (Progn
  196.             (bump "Fixing linetypes")
  197.             (Command
  198.                "_.chprop" SS-LTYPE "" "_LT" BLTYPE ""
  199.             )
  200.          )
  201.       )
  202.    )
  203.    ;-----------------------------------------------------
  204.    ; BURST MAIN ROUTINE
  205.    ;-----------------------------------------------------
  206.    (Defun BURST (/ SS1)
  207.       (setq PSFLAG (if (= 1 (caar (vports)))
  208.                        1 0
  209.                    )
  210.       )
  211.       (Setq SS1 (SsGet (list (cons 0 "INSERT")(cons 67 PSFLAG))))
  212.       (If SS1
  213.          (Progn
  214.             (Setvar "highlight" 0)
  215.             (terpri)
  216.             (Repeat
  217.                (SsLength SS1)
  218.                (Setq ENAME (SsName SS1 0))
  219.                (SsDel ENAME SS1)
  220.                (BURST-ONE ENAME)
  221.             )
  222.             (princ "\n")
  223.          )
  224.       )
  225.    )
  226.    ;-----------------------------------------------------
  227.    ; BURST COMMAND
  228.    ;-----------------------------------------------------
  229.    (BURST)
  230.   (acet-error-restore)
  231. );end defun
  232. (princ)
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2008-8-4 15:37 | 显示全部楼层
游客,本帖隐藏的内容需要发帖数高于 5 才可浏览,你当前发帖数只有 0

 楼主| 发表于 2008-8-4 22:06 | 显示全部楼层
谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-12 08:27 , Processed in 0.149232 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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