fxfeng 发表于 2016-1-26 16:27:50

块属性的获得,并排列输出

刚学习autolisp,还满脑子浆糊,问题可能表达不清楚,我的大概需求是:用一个选框选中多个不同的块,并把块的属性取出来标注在块的旁边,遇到的第一个问题就是怎么去获得块属性呢?entnext?都不止用什么函数,求教高手!


http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 fxfeng的微博

kozmosovia 发表于 2016-1-26 17:36:44

并把块的属性取出来标注在块的旁边是啥意思?块的物理尺寸不大的话,属性本来就已经在块附近了,还有啥需要在旁边在生成一个文字?
论坛上有大量的快属性提取代码,搜一下。

ZZXXQQ 发表于 2016-1-26 20:15:06

在图中设置属性可见即可。

fxfeng 发表于 2016-1-27 09:35:08

kozmosovia 发表于 2016-1-26 17:36 static/image/common/back.gif
并把块的属性取出来标注在块的旁边是啥意思?块的物理尺寸不大的话,属性本来就已经在块附近了,还有啥需要 ...

是的,由于图纸布局等问题,采用其他字体字号将属性值标注在块附近。

chg 发表于 2016-1-27 12:47:18

(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))
下面就是你自己把提取出来的东西写成文字放在各自的块边上了,这个程序是我自己用的,跟你的要求有点不同,这里提供思路和方法
)

fxfeng 发表于 2016-1-27 14:02:06

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 ...

多谢多谢!我马上试一下

fxfeng 发表于 2016-1-28 16:37:54

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做条件是什么意思?满足条件是什么情况,不满足条件又是什么情况?想了两天了,没看懂

kozmosovia 发表于 2016-1-28 17:11:22

图块的DXF 66是属性标志,1为有属性,否则为没有

fxfeng 发表于 2016-1-29 08:50:39

kozmosovia 发表于 2016-1-28 17:11 static/image/common/back.gif
图块的DXF 66是属性标志,1为有属性,否则为没有

我知道是属性,但代表什么意思呢?什么时候条件就不满足了?

chg 发表于 2016-1-29 12:39:11

如果值是1代表这个块是属性快,可以提取出属性,否则就是普通块(不带有属性),不需要再进行操作。
页: [1] 2
查看完整版本: 块属性的获得,并排列输出