artken 发表于 2008-8-4 17:16:00

请问,有没办法同时选择布局空间和模型空间的东西

<p></p><p>请问,有没办法同时选择布局空间和模型空间的东西</p><p>比如,下面这个处理只能处理当前空间,有没办法跨空间同时执行?</p><p>(command "._explode" (SsGet "X" (list (cons 0 "INSERT")'(66 . 1))) "")</p><p></p><p></p>

龙龙仔 发表于 2008-8-4 17:19:00

用vlisp應該可以

artken 发表于 2008-8-4 21:27:00

能不能教教怎么弄啊。

龙龙仔 发表于 2008-8-5 09:59:00

本帖最后由 作者 于 2008-8-7 7:52:14 编辑

(defun C:TT (/ N SS)
(if (setq SS (ssget "X" '((0 . "INSERT") (66 . 1))))
    (progn
      (setq N 0)
      (repeat (sslength SS)
(vla-explode (vlax-ename->vla-object (ssname SS N)))
(setq N (1+ N))
      )
    )
)
(command "_.ERASE" SS "")
(princ)
)

artken 发表于 2008-8-6 08:38:00

<p>谢谢版主</p><p>如果操作不仅仅是vla-explode,而是一连串的LISP操作就不行了,是吗</p><p>(比如:还要像ET工具里的BURST那样保持属性块的文字属性、固定的图层、固定颜色等一大串的LISP代码)</p>

龙龙仔 发表于 2008-8-6 17:21:00

<p>所有程序改用VLISP寫即可</p>

artken 发表于 2008-8-6 18:01:00

<p>谢谢版主。我去找找VLISP方面的书看看先。</p><p></p><p>感谢</p>

飞诗(fsxm) 发表于 2008-8-6 20:46:00

本帖最后由 作者 于 2008-8-6 20:48:49 编辑 <br /><br /> <p>如果想简单一点的也可以,</p><p><font color="#ff0000">跳到布局空间和模型空间</font>,各执行一次程序就行了哈`~</p><p>当然这里说的<font color="#ff0000">跳</font><font color="#000000">的当然也是要用程序自己跳呢~可不是说用手工</font><font color="#ff0000">跳~!!</font></p>

artken 发表于 2008-8-6 21:10:00

<p>跳的话就是要重成生布局或模型,文件大或布局多的话影响效率。</p><p></p>

artken 发表于 2008-8-9 02:44:00

本帖最后由 作者 于 2008-8-13 17:06:28 编辑

晕。搞不懂。付费请人帮忙AUTOLISP转VLISP。。。有人愿意吗(悄悄话联系)

代码如下:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;以下是函数定义;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(Defun PBOBURST (/ item bitset bump att-text lastent burst-one burst
                   BCNT BLAYER BCOLOR ELAST BLTYPE ETYPE PSFLAG ENAME )
    ;-----------------------------------------------------
    ; Item from association list
    ;-----------------------------------------------------
    (Defun ITEM (N E) (CDR (Assoc N E)))
    ;-----------------------------------------------------
    ; Error Handler
    ;-----------------------------------------------------
   (acet-error-init
   (list
       (list "cmdecho" 0
             "highlight" 1
       )
       T   ;flag. True means use undo for error clean up.
   );list
   );acet-error-init
    ;-----------------------------------------------------
    ; BIT SET
    ;-----------------------------------------------------
    (Defun BITSET (A B) (= (Boole 1 A B) B))
    ;-----------------------------------------------------
    ; BUMP
    ;-----------------------------------------------------
    (Setq bcnt 0)
    (Defun bump (prmpt)
       (Princ
          (Nth bcnt '("\r-" "\r\\" "\r|" "\r/"))
       )
       (Setq bcnt (Rem (1+ bcnt) 4))
    )
    ;-----------------------------------------------------
    ; Convert Attribute Entity to Text Entity
    ;-----------------------------------------------------
    (Defun ATT-TEXT (AENT / TENT ILIST INUM)
       (Setq TENT '((0 . "TEXT")))
       (ForEach INUM '(8
             6
             38
             39
             62
             67
             210
             10
             40
             1
             50
             41
             51
             7
             71
             72
             73
             11
             74
          )
          (If (Setq ILIST (Assoc INUM AENT))
             (Setq TENT (Cons ILIST TENT))
          )
       )
       (Setq
          tent (Subst
                  (Cons 73 (item 74 aent))
                  (Assoc 74 tent)
                  tent
               )
       )
       (EntMake (Reverse TENT))
    )
    ;-----------------------------------------------------
    ; Find True last entity
    ;-----------------------------------------------------
    (Defun LASTENT (/ E0 EN)
       (Setq E0 (EntLast))
       (While (Setq EN (EntNext E0))
          (Setq E0 EN)
       )
       E0
    )
    ;-----------------------------------------------------
    ; Burst one entity
    ;-----------------------------------------------------
    (Defun BURST-ONE (BNAME / BENT ANAME ENT ATYPE AENT AGAIN ENAME
                      ENT SS-COLOR SS-LAYER SS-LTYPE mirror ss-mirror
                      mlast)
       (Setq
          BENT   (EntGet BNAME)
          BLAYER (ITEM 8 BENT)
          BCOLOR (ITEM 62 BENT)
          BCOLOR (Cond
                  ((> BCOLOR 0) BCOLOR)
                  ((= BCOLOR 0) "BYBLOCK")
                  ("BYLAYER")
               )
          BLTYPE (Cond ((ITEM 6 BENT)) ("BYLAYER"))
       )
       (Setq ELAST (LASTENT))
       (If (= 1 (ITEM 66 BENT))
          (Progn
             (Setq ANAME BNAME)
             (While (Setq
                     ANAME (EntNext ANAME)
                     AENT(EntGet ANAME)
                     ATYPE (ITEM 0 AENT)
                     AGAIN (= "ATTRIB" ATYPE)
                  )
                (bump "正在转换属性")
                (ATT-TEXT AENT)
             )
          )
       )
          (Progn
             (bump "分解块")
             (acet-explode BNAME)
             ;(vla-explode (vlax-ename->vla-object BNAME))
             ;(command "_.explode" bname)
          )
       (Setq
          SS-LAYER (SsAdd)
          SS-COLOR (SsAdd)
          SS-LTYPE (SsAdd)
          ENAME    ELAST
       )
       (While (Setq ENAME (EntNext ENAME))
          (bump "收集片")
          (Setq
             ENT   (EntGet ENAME)
             ETYPE (ITEM 0 ENT)
          )
          (If (= "ATTDEF" ETYPE)
             (Progn
                (If (BITSET (ITEM 70 ENT) 2)
                   (ATT-TEXT ENT)
                )
                (EntDel ENAME)
             )
             (Progn
                (If (= "0" (ITEM 8 ENT))
                   (SsAdd ENAME SS-LAYER)
                )
                (If (= 0 (ITEM 62 ENT))
                   (SsAdd ENAME SS-COLOR)
                )
                (If (= "BYBLOCK" (ITEM 6 ENT))
                   (SsAdd ENAME SS-LTYPE)
                )
             )
          )
       )
       (If (> (SsLength SS-LAYER) 0)
          (Progn
             (bump "固定图层")
             (Command
                "_.chprop" SS-LAYER "" "_LA" BLAYER ""
             )
          )
       )
       (If (> (SsLength SS-COLOR) 0)
          (Progn
             (bump "固定颜色")
             (Command
                "_.chprop" SS-COLOR "" "_C" BCOLOR ""
             )
          )
       )
       (If (> (SsLength SS-LTYPE) 0)
          (Progn
             (bump "固定线型")
             (Command
                "_.chprop" SS-LTYPE "" "_LT" BLTYPE ""
             )
          )
       )
    )
    ;-----------------------------------------------------
    ; BURST MAIN ROUTINE
    ;-----------------------------------------------------
    (Defun BURST (/ SS1)
       (setq PSFLAG (if (= 1 (caar (vports)))
                        1 0
                  )
       )
       (pbossget);;;;自动选择要分解的物体
       (If SS1
          (Progn
             (Setvar "highlight" 0)
             (terpri)
             (Repeat
                (SsLength SS1)
                (Setq ENAME (SsName SS1 0))
                (SsDel ENAME SS1)
                (BURST-ONE ENAME)
             )
             (princ "\n")
          )
       )
    )
    ;-----------------------------------------------------
    ; BURST COMMAND
    ;-----------------------------------------------------
    (BURST)
   (acet-error-restore)
);end defun
(princ)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;函数定义完毕;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;第一步:分解属性块
(princ "{开始分解属性块,耐心等待...}")
(defun pbossget ()
    (Setq SS1 (SsGet "X" (list (cons 0 "INSERT")'(66 . 1)(cons 67 PSFLAG))));;分解所有带属性块
)
(PBOBURST)
(command ".-PURGE" "A" "" "N")
;;;;;;;;;;;;;;
(defun pbossget ()
    (Setq SS1 (SsGet "X" (list (cons 0 "INSERT")'(2 . "`*U*")(cons 67 PSFLAG))));;分解所有无名块(在CAD2004里执行,动态块转为CAD2004后自动会变成匿名块)
)
(PBOBURST)
;;;;;;;;;;;;;;
(princ "{属性块分解完毕}准备进入下一步,耐心等待...=====》")
(princ)
;;;第二步:炸开动态块(在CAD2004里略去)
;;;第三步:炸开多重引线(在CAD2004里执行,CAD2008的多重引线转成CAD2004后自动变成ACAD_PROXY_ENTITY)
(setvar "qaflags" 1)
(if (/= (SsGet "X" '((0 . "ACAD_PROXY_ENTITY"))) nil)
   (command "._explode" (SsGet "X" '((0 . "ACAD_PROXY_ENTITY"))) "")
   (princ "选择集为空")
)
(setvar "qaflags" 0)
(command ".-PURGE" "A" "" "N")
(princ "{多重引线分解完毕,耐心等待...}=====》")
(princ)
(command ".-PURGE" "A" "" "N")
(princ "{垃圾清理完毕!}")
(princ)
页: [1]
查看完整版本: 请问,有没办法同时选择布局空间和模型空间的东西