明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8853|回复: 18

[函数]提供一个表格函数

  [复制链接]
发表于 2005-12-12 12:40:00 | 显示全部楼层 |阅读模式
  1. ;;很多时候都会用到表格
  2. ;;提供一个表格函数(从表格系列程序分离出来!)
  3. ;;表格能自动调整(单行) "行宽" & "列高"----Autofit Cells
  4. ;;BY:龙龙仔(LUCAS)
  5. ;;For R2005~R2006 Only!!
  6. ;;资料列:'(("序号" "序号1" "序号2" "序号3" "序号4") ;标题
  7. ;;    ("1" "111111111111111" "3434234" "4356456456" "23423423")
  8. ;;         ("2" "2" "2" "2" "2"))
  9. ;;(TABLE_UTIL <资料列> <插入点> <字型> <字高>)
  10. ;;回传值:TABLE物件
  11. ;;使用例---统计圆
  12. (defun C:TABLE_CIRCLE (/ LST INSPT TABLE)
  13.   ;;---------------------------------------------------------
  14.   ;;填表的资料要先处理好
  15.   (setq LST (vl-sort (MAKE_LIST)
  16.        (function
  17.          (lambda (E1 E2)
  18.     (< (atof (nth 2 E1)) (atof (nth 2 E2)))
  19.          )
  20.        )
  21.      )
  22.   )
  23.   (setq LST (append '(("X座标" "Y座标" "半径")) LST))
  24.   ;;---------------------------------------------------------
  25.   (setq INSPT (getpoint "\n表格插入点/<ENTER 放弃>: "))
  26.   (if INSPT
  27.     (progn
  28.       (setq TABLE (TABLE_UTIL LST INSPT "STANDARD" 3))
  29.       ;;DO SOMETHING FOR TABLE---如比例调整
  30.       (vla-scaleentity
  31. TABLE
  32. (vlax-3d-point INSPT)
  33. (getvar "dimscale")
  34.       )
  35.     )
  36.   )
  37.   ;;---------------------------------------------------------
  38.   (princ)
  39. )
  40. (defun MAKE_LIST (/ CEN CENX CENY ENT N RAD R_LIST SS TMP)
  41.   (if (setq SS (ssget "X" '((0 . "CIRCLE"))))
  42.     (progn
  43.       (setq N 0)
  44.       (repeat (sslength SS)
  45. (setq CEN (cdr (assoc 10 (setq ENT (entget (ssname SS N))))))
  46. (setq CENX (rtos (car CEN) 2 3))
  47. (setq CENY (rtos (cadr CEN) 2 3))
  48. (setq RAD (rtos (cdr (assoc 40 ENT)) 2 3))
  49. (setq TMP (list CENX CENY RAD))
  50. (setq R_LIST (cons TMP R_LIST))
  51. (setq N (1+ N))
  52.       )
  53.     )
  54.   )
  55.   R_LIST
  56. )
  57. ;;-----------------------------------------------------------
  58. ;;使用例---PLINE座标
  59. (defun C:TABLE_PLINE (/ LST INSPT TABLE X HOLDZIN)
  60.   ;;---------------------------------------------------------
  61.   ;;填表的资料要先处理好
  62.   (setq HOLDZIN (getvar "DIMZIN"))
  63.   (setvar "DIMZIN" 0)
  64.   (setq LST (mapcar '(lambda (X)
  65.          (list (rtos (car X) 2 3)
  66.         (rtos (cadr X) 2 3)
  67.         (rtos (last X) 2 3)
  68.          )
  69.        )
  70.       (COORDS (car (entsel "\n选取Pline: ")))
  71.      )
  72.   )
  73.   (setvar "DIMZIN" HOLDZIN)
  74.   (setq LST (append '(("X座标" "Y座标" "Z座标")) LST))
  75.   ;;---------------------------------------------------------
  76.   (setq INSPT (getpoint "\n表格插入点/<ENTER 放弃>: "))
  77.   (if INSPT
  78.     (progn
  79.       (setq TABLE (TABLE_UTIL LST INSPT "STANDARD" 3))
  80.       ;;DO SOMETHING FOR TABLE---如比例调整
  81.       (vla-scaleentity
  82. TABLE
  83. (vlax-3d-point INSPT)
  84. (getvar "dimscale")
  85.       )
  86.     )
  87.   )
  88.   ;;---------------------------------------------------------
  89.   (princ)
  90. )
  91. ;;By LUCAS
  92. ;;For Polylines & LWpolylines & 3Dpolylines
  93. (defun COORDS (PLINE / ENDPARAM PARAM LST)
  94.   (setq ENDPARAM (vlax-curve-getendparam PLINE)
  95. PARAM  -1
  96.   )
  97.   (while (<= (setq PARAM (1+ PARAM)) ENDPARAM)
  98.     (setq LST (cons (vlax-curve-getpointatparam PLINE PARAM) LST)
  99.     )
  100.   )
  101.   (if (= 1 (logand (cdr (assoc 70 (entget PLINE))) 1))
  102.     (setq LST (reverse (cdr LST)))
  103.     (setq LST (reverse LST))
  104.   )
  105. )
  106. ;;-------------------------------------------------------------

本帖子中包含更多资源

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

x
"觉得好,就打赏"
    共1人打赏

本帖被以下淘专辑推荐:

  • · 工具|主题: 71, 订阅: 5
  • · table|主题: 9, 订阅: 0
发表于 2005-12-12 12:43:00 | 显示全部楼层

好东西

谢谢了~

发表于 2005-12-12 22:29:00 | 显示全部楼层

下来看看.谢谢

 

发表于 2005-12-13 14:21:00 | 显示全部楼层

TABLE_UTIL

这个函数没有定义呀??

发表于 2005-12-13 14:48:00 | 显示全部楼层
好东西,先顶了!
发表于 2005-12-13 14:59:00 | 显示全部楼层

同时加载使用例.lsp和.vlx

C:TABLE_CIRCLE

C:TABLE_PLINE      OK!

谢谢版主!

 楼主| 发表于 2005-12-14 14:25:00 | 显示全部楼层
  1. ;;再来一个使用例----提取图面中所有带属性图块
  2. ;;并以表格画出(只要好好利用TABLE_UTIL函数程序就会写出来了!)
  3. ;;BY龙龙仔(LUCAS)
  4. ;;可在下列连结找到TABLE_UTIL的前身(源码),当年程序写得有点乱!
  5. ;;http://bbs.mjtd.com/forum.php?mod=viewthread&tid=19054
  6. ;;目前版本功能:(无对话框)
  7. ;;1.能自动调整栏宽
  8. ;;2.可设定字型
  9. ;;3.可设定字高
  10. ;;4.可选择插入所有图块列表 or 单一图块列表
  11. ;;5.增加进度显示
  12. ;;6.插入Table能在所有空间使用
  13. ;;7.现在提供 8-)
  14. (defun C:TABLE_ATTBLOCK (/ EE INSPT LST N NN TABLE)
  15.   (vl-load-com)
  16.   (if (setq SUM (BLK_LIST))
  17.     (foreach NAME SUM
  18.       (setq
  19. EE (ssget "x"
  20.     (list '(0 . "insert")
  21.    '(66 . 1)
  22.    (cons 2 NAME)
  23.    (cons 410 (getvar "ctab"))
  24.     )
  25.     )
  26.       )
  27.       (setq N 0)
  28.       (setq NN 0)
  29.       (repeat (sslength EE)
  30. (setq LST
  31.         (cons
  32.    (VXGETATTS vla-get-textstring
  33.        (vlax-ename->vla-object (ssname EE NN))
  34.    )
  35.    LST
  36.         )
  37. )
  38. (setq NN (1+ NN))
  39.       )
  40.       (setq
  41. LST (append
  42.        (list (VXGETATTS vla-get-tagstring
  43.           (vlax-ename->vla-object (ssname EE N))
  44.       )
  45.        )
  46.        LST
  47.      )
  48.       )
  49.       ;;---------------------------------------------------------
  50.       (setq INSPT
  51.       (getpoint (strcat "\n属性图块""
  52.           NAME
  53.           ""表格插入点/<ENTER 放弃>: "
  54.          )
  55.       )
  56.       )
  57.       (if INSPT
  58. (progn
  59.    (setq TABLE (TABLE_UTIL LST INSPT "STANDARD" 3))
  60.    ;;DO SOMETHING FOR TABLE---如比例调整
  61.    (vla-scaleentity
  62.      TABLE
  63.      (vlax-3d-point INSPT)
  64.      (getvar "dimscale")
  65.    )
  66. )
  67.       )
  68.       ;;---------------------------------------------------------
  69.       (setq N  (1+ N)
  70.      LST  NIL
  71.      LST1 NIL
  72.       )
  73.     )
  74.   )
  75.   (princ)
  76. )
  77. ;;BY LUCAS
  78. ;;表列目前空间的属性图块
  79. (defun BLK_LIST (/ N NAME SS B_LIST)
  80.   (setq N 0)
  81.   (setq SS
  82.   (ssget "x"
  83.   (list '(0 . "insert") '(66 . 1) (cons 410 (getvar "ctab")))
  84.   )
  85.   )
  86.   (repeat (sslength SS)
  87.     (if (not
  88.    (member (setq NAME (cdr (assoc 2 (entget (ssname SS N)))))
  89.     B_LIST
  90.    )
  91. )
  92.       (setq B_LIST (cons NAME B_LIST))
  93.     )
  94.     (setq N (1+ N))
  95.   )
  96.   B_LIST
  97. )
  98. ;;BY LUCAS
  99. ;;取出属性性质
  100. (defun VXGETATTS (PRO OBJ)
  101.   (mapcar
  102.     '(lambda (ATT)
  103.        ((eval PRO) ATT)
  104.      )
  105.     (vlax-invoke OBJ "GetAttributes")
  106.   )
  107. )

本帖子中包含更多资源

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

x
 楼主| 发表于 2006-6-2 15:22:00 | 显示全部楼层
  1. ;;使用例,总计图块并在侧展示略图
  2. ;;By LUCAS(龙龙仔)
  3. (defun C:STATISTICS (/     BLKS   INSPT  LST  LST1 LSTT   N
  4.        NAME   OBJECTID   ROW  SS ST     SUM
  5.        TABLE
  6.       )
  7.   (vl-load-com)
  8.   (if (not (member 'TABLE_UTIL (vl-list-loaded-vlx)))
  9.     (load (findfile "table_util.vlx") NIL)
  10.   )
  11.   (prompt "\n选择图块: ")
  12.   (if (setq SS (ssget '((0 . "insert"))))
  13.     (progn
  14.       (setq LST1 '(("略图" "名称" "数量" "备註")))
  15.       (setq N 0)
  16.       (repeat (sslength SS)
  17. (if (assoc (setq NAME (cdr (assoc 2 (entget (ssname SS N)))))
  18.      LST
  19.      )
  20.    (setq LST
  21.    (subst (cons NAME (1+ (cdr (setq ST (assoc NAME LST)))))
  22.    ST
  23.    LST
  24.    )
  25.    )
  26.    (setq LST (cons (cons NAME 1) LST))
  27. )
  28. (setq N (1+ N))
  29.       )
  30.       (setq LST (vl-sort LST
  31.     (function (lambda (E1 E2)
  32.          (< (car E1) (car E2))
  33.        )
  34.     )
  35.   )
  36.       )
  37.       (setq SUM 0)
  38.       (foreach ENT LST
  39. (setq SUM (+ SUM (cdr ENT)))
  40. (setq LSTT (cons (list "" (car ENT) (cdr ENT)) LSTT))
  41.       )
  42.       (setq LST (cons (list "" "合计" SUM) LSTT))
  43.       (setq LST (append LST1 (reverse LST)))
  44.       (setq INSPT (getpoint "\n表格插入点/<ENTER 放弃>: "))
  45.       (if INSPT
  46. (progn
  47.    ;;(TABLE_UTIL <资料列> <插入点> <字型> <字高>)
  48.    (setq TABLE (TABLE_UTIL LST INSPT "STANDARD" 3))
  49.    ;;DO SOMETHING FOR TABLE---如比例调整
  50.    (vla-scaleentity
  51.      TABLE
  52.      (vlax-3d-point INSPT)
  53.      (getvar "dimscale")
  54.    )
  55.    (setq BLKS (vla-get-blocks
  56.          (vla-get-activedocument
  57.     (vlax-get-acad-object)
  58.          )
  59.        )
  60.    )
  61.    (setq ROW (- (length LST) 2))
  62.    ;;R2006(含)以上才有REGENERATETABLESUPPRESSED属性
  63.    (if (> (atof (getvar "ACADVER")) 16.1)
  64.      (VLA-PUT-REGENERATETABLESUPPRESSED TABLE :vlax-true)
  65.    )
  66.    (repeat ROW
  67.      (setq OBJECTID (vla-get-objectid
  68.         (vla-item BLKS (vla-gettext TABLE ROW 1))
  69.       )
  70.      )
  71.      (vla-setcelltype TABLE ROW 0 1)
  72.      (vla-setblocktablerecordid TABLE ROW 0 OBJECTID :vlax-true)
  73.      (vla-setautoscale TABLE ROW 0 :vlax-true)
  74.      (setq ROW (1- ROW))
  75.    )
  76.    (if (> (atof (getvar "ACADVER")) 16.1)
  77.      (VLA-PUT-REGENERATETABLESUPPRESSED TABLE :vlax-false)
  78.    )
  79.    (vlax-release-object BLKS)
  80. )
  81.       )
  82.     )
  83.   )
  84.   (princ)
  85. )
  86. (princ "\nType Statistics,By LUCAS")
  87. (princ)

本帖子中包含更多资源

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

x
发表于 2006-6-2 18:58:00 | 显示全部楼层

看起来不错!

严重支持龙龙仔!

发表于 2006-6-2 20:08:00 | 显示全部楼层
看起来有点拽^_^
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-4 04:42 , Processed in 0.238136 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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