块属性的获得,并排列输出
刚学习autolisp,还满脑子浆糊,问题可能表达不清楚,我的大概需求是:用一个选框选中多个不同的块,并把块的属性取出来标注在块的旁边,遇到的第一个问题就是怎么去获得块属性呢?entnext?都不止用什么函数,求教高手!http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 fxfeng的微博 并把块的属性取出来标注在块的旁边是啥意思?块的物理尺寸不大的话,属性本来就已经在块附近了,还有啥需要在旁边在生成一个文字?
论坛上有大量的快属性提取代码,搜一下。 在图中设置属性可见即可。 kozmosovia 发表于 2016-1-26 17:36 static/image/common/back.gif
并把块的属性取出来标注在块的旁边是啥意思?块的物理尺寸不大的话,属性本来就已经在块附近了,还有啥需要 ...
是的,由于图纸布局等问题,采用其他字体字号将属性值标注在块附近。 (defun c:atoe (/ ss cnt attrib firstent attss count flag enttype attent attlist)
(setq ss (ssget '((0 . "INSERT")))
cnt 0
firstent (ssname ss cnt)
;firstent (cdr (assoc -1 firstlist))
attss '()
)
(setq count (sslength ss))
(repeat count
(setq flag (cdr (assoc 66 (entget firstent)))
;firstent (cdr (assoc -1 firstent))
)
(if flag
(progn
(while (/= (setq enttype (cdr (assoc 0 (entget firstent))))
"SEQEND"
)
(setq attent (entnext firstent))
(setq attrib (cdr (assoc 1 (entget attent))))
(if (/= attrib nil)
(setq attss (append attss (list attrib)))
)
(setq firstent attent)
)
)
)
(setq cnt (+ 1 cnt)
firstent (ssname ss cnt)
)
(if (= cnt 1)
(setq attlist (list attss)
attss '()
)
(setq attlist (append attlist (list attss))
attss '()
)
)
)
(setq attlist (reverse attlist))
下面就是你自己把提取出来的东西写成文字放在各自的块边上了,这个程序是我自己用的,跟你的要求有点不同,这里提供思路和方法
) chg 发表于 2016-1-27 12:47 static/image/common/back.gif
(defun c:atoe (/ ss cnt attrib firstent attss count flag enttype attent attlist)
(setq ss (ssget ...
多谢多谢!我马上试一下 chg 发表于 2016-1-27 12:47 static/image/common/back.gif
(defun c:atoe (/ ss cnt attrib firstent attss count flag enttype attent attlist)
(setq ss (ssget ...
请问兄台:
(repeat count
(setq flag (cdr (assoc 66 (entget firstent)))
;firstent (cdr (assoc -1 firstent))
)
(if flag
(progn
...
此处用第66项的值,即flag值给if做条件是什么意思?满足条件是什么情况,不满足条件又是什么情况?想了两天了,没看懂 图块的DXF 66是属性标志,1为有属性,否则为没有 kozmosovia 发表于 2016-1-28 17:11 static/image/common/back.gif
图块的DXF 66是属性标志,1为有属性,否则为没有
我知道是属性,但代表什么意思呢?什么时候条件就不满足了? 如果值是1代表这个块是属性快,可以提取出属性,否则就是普通块(不带有属性),不需要再进行操作。
页:
[1]
2