请问怎样读取属性块中的数据?
请问怎样读取属性块中的数据?(是使用AutoLisp的方式)多谢各位大虾了 (Defun attblk(/ ename LOOP elist)
(setq ename (entnext (car (entsel))))
(setq LOOP T)
(While (and ename LOOP)
(setq elist (entget ename))
(if (= (cdr (assoc 0 elist)) "ATTRIB")
(progn
(princ (cdr (assoc 2 elist)))
(princ " ----> ")
(princ (cdr (assoc 1 elist)))
(princ "\n")
)
(setq LOOP nil)
)
(setq ename (EntNext ename))
)
(princ)
) 3和1是什么,你就不知道查查帮助文件吗????DXF组码,,,
这个程序有些问题,不过不应该没有任何结果,除非你的选择的不是属性块或者属性值为空(注意,这里读的是块定义中属性的值,不是当前引用中属性的值)。
我写这个程序目的是让你看明白怎么读去块中的属性值,你需要的是知道怎么去读,而不是看看结果是什么,即使结果出现了错误,你也应该自己去调试,找到原因,学会这个方法。 来一个爽的:);(getatt ) = 取块的所有属性文本--------vl方法-----by 无痕.2004.4
;测试: (getatt (car(entsel "\n选择含属性的块:")))
(defun getatt (blk / attlst lst)
(setq attlst (vlax-invoke (vlax-ename->vla-object blk) 'GetAttributes ))
(foreach n attlst (setq lst (append lst (list (vlax-get n 'TextString)))))
) 估计是你选择的块不是带属性的块吧 看看这个程序吧
(Defun SBlock (/ slist sname etbll)
(setq slist (entget (ssname (ssget) 0)))
(SetQ sname (Cdr (Assoc 2 slist))
slist (TblSearch "BLOCK" sname)
)
(SetQ sname (Cdr (Assoc -2 slist)))
(While sname
(setq slist (entget sname))
(if (/= (cdr (assoc 3 slist)) nil)
(princ (cdr (assoc 1 slist)))
)
(setq sname (EntNext sname))
)
(princ)
) (if (/= (cdr (assoc 3 slist)) nil)
(princ (cdr (assoc 1 slist)))
3 和 1 分别代表什么,我查手册查晕了,试了你的程序,没有任何显示结果 我建立了两个块,用不同的名字,你的程序好像是显示块中所有子实体的名字,但我试了没有结果,我知道数字代表群码,只是不知道是什么码,因为在表,块,实体中有很多码的数字是相同的但所代表的意思却不同,我读你的程序很长时间又查帮助,大概知道程序的意思,但为了弄清楚,弄透所以想向你求证 你都知道我读的是子实体的名字了,然后根据你的要求,就应该知道这些子实体是属性定义了,查组码的时候,就该查属性定义的组码了。
我不知道你的为什么会没有任何结果,你把图传上来,我试试。 太謝謝了,我正需要這個程式 呵呵. 我試試 : D