请问,有没办法同时选择布局空间和模型空间的东西
<p></p><p>请问,有没办法同时选择布局空间和模型空间的东西</p><p>比如,下面这个处理只能处理当前空间,有没办法跨空间同时执行?</p><p>(command "._explode" (SsGet "X" (list (cons 0 "INSERT")'(66 . 1))) "")</p><p></p><p></p> 用vlisp應該可以 能不能教教怎么弄啊。 本帖最后由 作者 于 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)
)
<p>谢谢版主</p><p>如果操作不仅仅是vla-explode,而是一连串的LISP操作就不行了,是吗</p><p>(比如:还要像ET工具里的BURST那样保持属性块的文字属性、固定的图层、固定颜色等一大串的LISP代码)</p> <p>所有程序改用VLISP寫即可</p> <p>谢谢版主。我去找找VLISP方面的书看看先。</p><p></p><p>感谢</p> 本帖最后由 作者 于 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> <p>跳的话就是要重成生布局或模型,文件大或布局多的话影响效率。</p><p></p> 本帖最后由 作者 于 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]