[求助]删除块的属性文字
<p>删除块的属性文字</p><p>在做总图时,常常要合建筑的一层平面,而一层平面需要整理,一层平面的门等,都是块,有属性文字,在不炸开块的情</p><p>况下,把属性文字去掉呢?LSP怎么写呢?</p> 谢谢,在你们的帖子帮忙下,写了程序 ;;; CLear all attribute texts<br/>;;; By Alvin Lin 29/09/2007<br/>;;;<br/>(defun C:ClearATT (/ doc currsp blks atts)<br/> (setq doc (vla-get-activedocument (vlax-get-acad-object)))<br/> (if (= (vla-get-activespace doc) 1)<br/> (setq currsp (vla-get-modelspace doc))<br/> (setq currsp (vla-get-paperspace doc))<br/> )<br/> (vlax-for obj currsp<br/> (if (= (vla-get-objectName obj) "AcDbBlockReference")<br/> (if (= (vla-get-hasattributes obj) :vlax-true)<br/> (progn<br/> (setq atts (vlax-safearray->list<br/> (vlax-variant-value (vla-getattributes obj))<br/> )<br/> )<br/> (foreach att atts<br/>;;; (vla-put-textstring att "")<br/>;;; (vla-update att)<br/> (vla-delete att)<br/> )<br/> )<br/> ) ;if<br/> ) ; if<br/> )<br/> (princ)<br/>)<br/> ;;; CLear all attribute texts<br/>;;; By Alvin Lin 29/09/2007<br/>;;;<br/>(defun C:ClearATT (/ doc currsp blks atts)<br/> (setq doc (vla-get-activedocument (vlax-get-acad-object)))<br/> (if (= (vla-get-activespace doc) 1)<br/> (setq currsp (vla-get-modelspace doc))<br/> (setq currsp (vla-get-paperspace doc))<br/> )<br/> (vlax-for obj currsp<br/> (if (= (vla-get-objectName obj) "AcDbBlockReference")<br/> (if (= (vla-get-hasattributes obj) :vlax-true)<br/> (progn<br/> (setq atts (vlax-safearray->list<br/> (vlax-variant-value (vla-getattributes obj))<br/> )<br/> )<br/> (foreach att atts<br/>;;; (vla-put-textstring att "")<br/>;;; (vla-update att)<br/> (vla-delete att)<br/> )<br/> )<br/> ) ;if<br/> ) ; if<br/> )<br/> (princ)<br/>)<br/> 程序试用了,非常不错,原想是框选的,现在是整个文件,恩,谢谢 (defun c:xdelatt (/ FIL SS)(princ "\n 删除块属性----------by lxx.2007.9")
(princ "\n 选择要删除属性的块<全部>:")
(if (not *cad)
(setq *cad (vlax-get-acad-object))
)
;(x-CleanCSet)
(setq fil '((0 . "INSERT") (-4 . "&") (66 . 1)))
(or (setq ss (ssget fil))
(setq ss (ssget "x" fil))
)
(vla-eval *cad
"for each i in thisdrawing.activeselectionset : for each n in i.getattributes : n.delete :next n :next i"
)
) 本帖最后由 作者 于 2007-10-1 8:05:11 编辑 <br /><br /> 1 有些属性在 Blockdef 中有对应的 Attdef,有些块在 Blockdef 是没有对应的 Attdef 的<br/><br/>2 删除 Blockref 的 Attrib 不一定解决下一个 Insert 的 Attrib 问题。<br/> ;;; CLear all attribute texts<br/>;;; By Alvin Lin 29/09/2007<br/>;;;<br/>(defun C:ClearATT (/ doc blks atts)<br/> (setq doc (vla-get-activedocument (vlax-get-acad-object)))<br/> (setq blks (vla-get-blocks doc))<br/> (vlax-for blk blks<br/> (vlax-for obj blk<br/> (cond ((= (vla-get-objectName obj) "AcDbBlockReference")<br/> (if (= (vla-get-hasattributes obj) :vlax-true)<br/> (progn<br/> (setq atts (vlax-safearray->list<br/> (vlax-variant-value (vla-getattributes obj))<br/> )<br/> )<br/> (mapcar 'vla-delete atts)<br/> )<br/> ) ;if<br/> )<br/> ((= (vla-get-objectName obj) "AcDbAttributeDefinition")<br/> (vla-delete obj)<br/> )<br/> ); cond<br/> ); vlax-for<br/> ); vlax-for<br/> (princ)<br/>) 本帖最后由 作者 于 2007-10-2 11:13:56 编辑 <br /><br /> 无痕发表于2007-9-30 15:06:00static/image/common/back.gif(defun c:xdelatt (/ FIL SS) (princ \"\n 删除块属性----------by lxx.2007.9\") (princ \"\n 选择要删除属性的块<全部>:\") (if (not *cad) (set
<p>恩,这个程序支持多选,但内容选多了,或全选,会出现如图示的错误提示</p> alin发表于2007-10-1 9:09:00static/image/common/back.gif;;; CLear all attribute texts;;; By Alvin Lin 29/09/2007;;;(defun C:ClearATT (/ doc blks atts) (setq doc (vla-get-activedocument (vlax-get-acad-object))) (setq blks (v
<p>会出现以下错误,什么原因呢</p><p>命令: clearatt<br/>Automation 错误。 对象已被删除</p>
页:
[1]
2