明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4697|回复: 13

[LISP]R2005 TABLE提取圖面中所有帶屬性圖塊值並表列

  [复制链接]
发表于 2004-4-7 07:58 | 显示全部楼层 |阅读模式
  1. ;;提取圖面中所有帶屬性圖塊值並表列
  2. ;;BY龍龍仔(LUCAS)
  3. ;;供測試未完善
  4. (defun C:TT (/ WE N1 EE TITLE INSPT MSPACE TABLE N NN)
  5.    (setq WE (TT))
  6.    (setq N1 0)
  7.    (repeat (length WE)
  8.        (setq EE (ssget "x"
  9.            (list '(0 . "insert")
  10.          '(66 . 1)
  11.          (cons 2 (nth N1 WE))
  12.            )
  13.            )
  14.        )
  15.        (setq TITLE (VXGETATTS (vlax-ename->vla-object (ssname EE N1))))
  16.        (print TITLE)
  17.        (setq INSPT (getpoint "\n請選擇表格插入點: "))
  18.        (setq MSPACE (vla-get-modelspace
  19.          (vla-get-activedocument (vlax-get-acad-object))
  20.      )
  21.        )
  22.        (setq TABLE  (vla-addtable
  23.        MSPACE
  24.        (vlax-3d-point INSPT)
  25.        (1+ (sslength EE))
  26.        (length TITLE)
  27.        10
  28.        25
  29.     )
  30.        )
  31.        (vla-unmergecells TABLE 0 0 0 (1- (length TITLE)))
  32.        (vla-setalignment TABLE 1 acmiddlecenter)
  33.        (setq N 0)
  34.        (foreach ENT TITLE
  35.            (vla-settext TABLE 0 N ENT)
  36.            (setq N (1+ N))
  37.        )
  38.        (setq NN 1
  39.      EL (sslength EE)
  40.        )
  41.        (repeat EL
  42.            (setq TITLE
  43.            (VXGETATTS1 (vlax-ename->vla-object (ssname EE (1- NN))))
  44.            )
  45.            (prompt (strcat "\n餘" (rtos (- EL NN) 2 0)))
  46.            (setq N 0)
  47.            (foreach ENT TITLE
  48.   (vla-settext TABLE NN N ENT)
  49.   (setq N (1+ N))
  50.            )
  51.            (setq NN (1+ NN))
  52.        )
  53.        (setq N1 (1+ N1))
  54.    )
  55.    (vlax-release-object MSPACE)
  56.    (princ)
  57. );;TABLE list
  58. (defun TABLE1 (S / D R)
  59.    (while (setq D (tblnext S (null D)))
  60.        (setq R (cons (cdr (assoc 2 D)) R))
  61.    )
  62. )(defun TT (/ BLOCK SS_BLOCK N BLK BLK_LIST ENT ENT1)
  63.    (setq  BLOCK (vla-get-blocks
  64.     (vla-get-activedocument
  65.        (vla-get-application
  66.            (vlax-get-acad-object)
  67.        )
  68.     )
  69.              )
  70.    )
  71.    (setq SS_BLOCK (TABLE1 "block"))
  72.    (setq N 0)
  73.    (repeat (length SS_BLOCK)
  74.        (setq BLK (vla-item BLOCK (setq ENT1 (nth N SS_BLOCK))))
  75.        (if  (/= (vla-get-count BLK) 0)
  76.            (vlax-for  ENT BLK
  77.   (if (and (not (vl-position ENT1 BLK_LIST))
  78.      (= (vla-get-objectname ENT) "AcDbAttributeDefinition")
  79.          )
  80.      (setq BLK_LIST (append BLK_LIST (list ENT1)))
  81.   )
  82.            )
  83.        )
  84.        (setq N (1+ N))
  85.    )
  86.    BLK_LIST
  87. )(defun VXGETATTS (OBJ)
  88.    (mapcar
  89.        '(lambda (ATT)
  90.              (vla-get-tagstring ATT)
  91.          )
  92.        (vlax-invoke OBJ "GetAttributes")
  93.    )
  94. )(defun VXGETATTS1 (OBJ)
  95.    (mapcar
  96.        '(lambda (ATT)
  97.              (vla-get-textstring ATT)
  98.          )
  99.        (vlax-invoke OBJ "GetAttributes")
  100.    )
  101. )

评分

参与人数 1金钱 +10 贡献 +5 激情 +5 收起 理由
mccad + 10 + 5 + 5 【精华】好程序

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

  • · table|主题: 9, 订阅: 0
发表于 2004-4-8 15:45 | 显示全部楼层
有没有适合2002的?
发表于 2004-4-8 16:11 | 显示全部楼层
2004还没有table这种对象类型
发表于 2004-4-8 19:33 | 显示全部楼层
太好了,我正在对这样的问题苦恼呢!可是楼主的程序为什么不加入标注解释部分呢?这样也好懂一些,或者讲一下编制的思路呢?期待楼主能够解释一下你的思路!
 楼主| 发表于 2004-4-9 08:54 | 显示全部楼层
;;完整版功能暫定:
;;1.能自動調整欄寬
;;2.可設定字型
;;3.可設定字高
;;4.可選擇插入所有圖塊列表 or 單一圖塊列表
;;5.增加進度條顯示
;;6.插入Table能在所有空間使用
;;7......暫無提供 8-(

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

有末有支持CAD2004的哦?  发表于 2011-6-9 18:24

评分

参与人数 1金钱 +5 收起 理由
xyz2009xyz + 5

查看全部评分

发表于 2004-4-9 13:54 | 显示全部楼层
程序需要再完善:
1.程序是读取所有带属性图块的数量,但取属性值填表只取了第一种图块,就象我程序中有A块和B块,取到A块后,不会再去读B块。所以最后的表格没有填满。所以象我写的那样,让用户选择要输出的哪种块比较好。
2.字体没有调整,显得表格大,字体小。
3.应该把Header行隐去,保存Data和Title行。这样才可以避免数据行的格式不一致。
 楼主| 发表于 2004-4-9 16:54 | 显示全部楼层
本帖最后由 作者 于 2004-4-10 8:06:17 编辑

1. SORRY!COPY漏一行!(第一版就可以列出所有圖塊屬性,這版怎可能沒有呢!)
(repeat (length WE)
(setq EE (ssget "x"
(list '(0 . "insert")
'(66 . 1)
(cons 2 (nth N1 WE))
)
)
)
(setq TITLE (VXGETATTS (vlax-ename->vla-object (ssname EE 1));注意:N1→1
vla-get-tagstring ;提取屬性標題
)
) 2.& 3. 把屬性分開寫就會有效(title & header & data),沒必要把Header行隱去 (vla-unmergecells TABLE 0 0 0 (1- (length TITLE))) ;首行合併
(vla-setalignment TABLE 2 acmiddlecenter) ;增加
(vla-setalignment TABLE 4 acmiddlecenter) ;增加
(vla-setalignment TABLE 1 acmiddlecenter) ;增加
(vla-settextheight TABLE 2 5) ;增加
(vla-settextheight TABLE 4 5) ;增加
(vla-settextheight TABLE 1 5) ;增加
发表于 2004-4-13 07:46 | 显示全部楼层
喜欢这样的句子: 且放白鹿青崖间,须行即骑访名山。
安能摧眉折腰事权贵,使我不得开心颜!
发表于 2011-3-31 19:33 | 显示全部楼层
谢谢楼主,这真是个好程序
发表于 2011-6-7 16:27 | 显示全部楼层
程序很不错,期待高手继续更新,完善
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 08:40 , Processed in 0.355558 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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