明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2599|回复: 14

[已解答] 块属性的获得,并排列输出

[复制链接]
发表于 2016-1-26 16:27:50 | 显示全部楼层 |阅读模式
刚学习autolisp,还满脑子浆糊,问题可能表达不清楚,我的大概需求是:用一个选框选中多个不同的块,并把块的属性取出来标注在块的旁边,遇到的第一个问题就是怎么去获得块属性呢?entnext?都不止用什么函数,求教高手!


该贴已经同步到 fxfeng的微博
发表于 2016-1-26 17:36:44 | 显示全部楼层
并把块的属性取出来标注在块的旁边是啥意思?块的物理尺寸不大的话,属性本来就已经在块附近了,还有啥需要在旁边在生成一个文字?
论坛上有大量的快属性提取代码,搜一下。
发表于 2016-1-26 20:15:06 | 显示全部楼层
在图中设置属性可见即可。
 楼主| 发表于 2016-1-27 09:35:08 | 显示全部楼层
kozmosovia 发表于 2016-1-26 17:36
并把块的属性取出来标注在块的旁边是啥意思?块的物理尺寸不大的话,属性本来就已经在块附近了,还有啥需要 ...

是的,由于图纸布局等问题,采用其他字体字号将属性值标注在块附近。
发表于 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))
  下面就是你自己把提取出来的东西写成文字放在各自的块边上了,这个程序是我自己用的,跟你的要求有点不同,这里提供思路和方法
  )

评分

参与人数 1金钱 +10 收起 理由
fxfeng + 10 很给力!内容提取出来了,谢谢!

查看全部评分

 楼主| 发表于 2016-1-27 14:02:06 | 显示全部楼层
chg 发表于 2016-1-27 12:47
(defun c:atoe (/ ss cnt attrib firstent attss count flag enttype attent attlist)
  (setq        ss         (ssget ...

多谢多谢!我马上试一下
 楼主| 发表于 2016-1-28 16:37:54 | 显示全部楼层
chg 发表于 2016-1-27 12:47
(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做条件是什么意思?满足条件是什么情况,不满足条件又是什么情况?想了两天了,没看懂
发表于 2016-1-28 17:11:22 | 显示全部楼层
图块的DXF 66是属性标志,1为有属性,否则为没有
 楼主| 发表于 2016-1-29 08:50:39 | 显示全部楼层
kozmosovia 发表于 2016-1-28 17:11
图块的DXF 66是属性标志,1为有属性,否则为没有

我知道是属性,但代表什么意思呢?什么时候条件就不满足了?
发表于 2016-1-29 12:39:11 | 显示全部楼层
如果值是1代表这个块是属性快,可以提取出属性,否则就是普通块(不带有属性),不需要再进行操作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-20 18:58 , Processed in 0.188284 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表