乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 49|回复: 10

[编程交流] 桌子

[复制链接]

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 18:51:54 | 显示全部楼层 |阅读模式
好的,我已经看过了,我似乎还没有准备好我需要的桌子。我需要一个lisp来创建一个表。
我刷了多行,我需要表采取所有这些属性,并创建一个表。也有它正在做,我需要它来结合像线,并把他们加在一个数量列。
我看过很多桌子,但我不知道如何改变来做我需要的。我仍在阅读和学习,但仍然不知道足够做这件事。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:58:24 | 显示全部楼层
这不是您想要的,但显示了如何制作一个表并用可变数量的信息填充它。您只需对文本进行ssget,而不是读取块属性。
 
  1. ; DWG INDEX TO A TABLE
  2. ; BY ALAN H NOV 2013
  3. (DEFUN AH:DWGINDEX (/ DOC OBJTABLE SS1 LAY ANS ANS2 PLOTABS SS1 TAG2 TAG3 LIST1 LIST2 CURLAYOUT COLWIDTH NUMCOLUMNS NUMROWS INC ROWHEIGHT )
  4. (VL-LOAD-COM)
  5. (SETQ CURLAYOUT (GETVAR "CTAB"))
  6. (IF (= CURLAYOUT "MODEL")
  7. (PROGN
  8. (ALERT "YOU NEED TO BE IN A LAYOUT FOR THIS OPTION")
  9. (EXIT)
  10. ) ; END PROGN
  11. ) ; END IF MODEL
  12. (SETQ DOC (VLA-GET-ACTIVEDOCUMENT (VLAX-GET-ACAD-OBJECT)))
  13. (SETQ CURSPACE (VLA-GET-PAPERSPACE DOC))
  14. (SETQ PT1 (VLAX-3D-POINT (GETPOINT "\NPICK POINT FOR TOP LEFT HAND OF TABLE:  ")))
  15. ; READ VALUES FROM TITLE BLOCKS
  16. (SETQ BNAME "DA1DRTXT")
  17. (SETQ TAG2 "DRG_NO") ;ATTRIBUTE TAG NAME
  18. (SETQ TAG3 "WORKS_DESCRIPTION") ;ATTRIBUTE TAG NAME
  19. (SETQ SS1 (SSGET "X"  (LIST (CONS 0 "INSERT") (CONS 2 BNAME))))
  20. (IF (= SS1 NIL) ; FOR TOMKINSON JOBS
  21. (PROGN
  22. (SETQ BNAME "xxx_TITLE")
  23. (SETQ SS1 (SSGET "X"  (LIST (CONS 0 "INSERT") (CONS 2 BNAME))))
  24. )
  25. )
  26. (SETQ INC (SSLENGTH SS1))  
  27. (REPEAT INC
  28. (FOREACH ATT (VLAX-INVOKE (VLAX-ENAME->VLA-OBJECT (SSNAME SS1 (SETQ INC (- INC 1)) )) 'GETATTRIBUTES)
  29.        (IF (= TAG2 (STRCASE (VLA-GET-TAGSTRING ATT)))
  30.            (PROGN
  31.            (SETQ ANS (VLA-GET-TEXTSTRING ATT))
  32.            (IF (/= ANS NIL)
  33.            (SETQ LIST1 (CONS ANS LIST1))
  34.            ) ; IF
  35.            ); END PROGN
  36.          ) ; END IF
  37.        (IF (= TAG3 (STRCASE (VLA-GET-TAGSTRING ATT)))
  38.          (PROGN
  39.          (SETQ ANS2 (VLA-GET-TEXTSTRING ATT))
  40.          (IF (/= ANS2 NIL)
  41.              (SETQ LIST2 (CONS ANS2 LIST2))
  42.           ) ; END IF
  43.           ) ; END PROGN
  44. ) ; END IF TAG3
  45.    
  46. ) ; END FOREACH
  47. ) ; END REPEAT
  48. (SETVAR 'CTAB CURLAYOUT)
  49. (COMMAND-S "ZOOM" "E")
  50. (COMMAND-S "REGEN")
  51. (REVERSE LIST1)
  52. ;(REVERSE LIST2)
  53. ; NOW DO TABLE
  54. (SETQ NUMROWS (+ 2 (SSLENGTH SS1)))
  55. (SETQ NUMCOLUMNS 2)
  56. (SETQ ROWHEIGHT 0.2)
  57. (SETQ COLWIDTH 150)
  58. (SETQ OBJTABLE (VLA-ADDTABLE CURSPACE PT1 NUMROWS NUMCOLUMNS ROWHEIGHT COLWIDTH))
  59. (VLA-SETTEXT OBJTABLE 0 0 "DRAWING REGISTER")
  60. (VLA-SETTEXT OBJTABLE 1 0 "DRAWING NUMBER")
  61. (VLA-SETTEXT OBJTABLE 1 1 "DRAWING TITLE")
  62. (SETQ X 0)
  63. (SETQ Y 2)
  64. (REPEAT (SSLENGTH SS1)
  65. (VLA-SETTEXT OBJTABLE Y 0 (NTH X LIST1))
  66. (VLA-SETTEXT OBJTABLE Y 1 (NTH X LIST2))
  67. (VLA-SETROWHEIGHT OBJTABLE Y 7)
  68. (SETQ X (+ X 1))
  69. (SETQ Y (+ Y 1))
  70. )
  71. (VLA-SETCOLUMNWIDTH OBJTABLE 0 55)
  72. (VLA-SETCOLUMNWIDTH OBJTABLE 1 170)
  73. (COMMAND-S "_ZOOM" "E")
  74. ); END AH DEFUN
  75. (AH:DWGINDEX)
  76. (PRINC)
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 19:09:29 | 显示全部楼层
比加尔,
这是我发现的口吃之一。由于我对lisps了解不够,我不知道如何根据需要更改它。不过谢谢你。如果有人能告诉我我在看什么,也许我可以改变它。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 19:10:38 | 显示全部楼层
你能举个实际的例子吗?
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 19:18:58 | 显示全部楼层
这样地。。
嗯,我无法上传jpeg,所以我会尝试解释。
3列
 
层名称长度数量
示例1 5’3
示例1 2’5
示例2 5’10
 
我有一个lisp,我可以得到这个信息,但不知道如何插入到一个表中。
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 19:26:52 | 显示全部楼层
李·麦克的这首歌很管用。如果有人能告诉我什么是表格信息,什么是选择文本。我试着把我的部分文字插入到这个地方,但没有成功。
 
  1. ;;--------------------=={ Text Count }==----------------------;;
  2. ;;                                                            ;;
  3. ;;  Counts the number of occurrences of each string in a      ;;
  4. ;;  selection and produces a report in an ACAD Table object   ;;
  5. ;;------------------------------------------------------------;;
  6. ;;  Author: Lee Mac, Copyright © 2011 - [url="http://www.lee-mac.com"]www.lee-mac.com[/url]       ;;
  7. ;;------------------------------------------------------------;;
  8. ;;  Version 1.0  -  07.11.2010                                ;;
  9. ;;  First Release.                                            ;;
  10. ;;------------------------------------------------------------;;
  11. ;;  Version 1.1  -  05.08.2011                                ;;
  12. ;;  Added Dimensions Override Text & MLeaders                 ;;
  13. ;;  Updated 'AddTable' to account for Annotative Text Styles. ;;
  14. ;;------------------------------------------------------------;;
  15. (defun c:tCount
  16.   ( /)
  17.    *error*
  18.   _StartUndo
  19.   _EndUndo
  20.   _Assoc++
  21.   _SumAttributes
  22.   _GetTextString
  23.   _ApplyFooToSelSet
  24.   acdoc
  25.   acspc
  26.   alist
  27.   data
  28.   pt
  29. )
  30. ;;------------------------------------------------------------;;
  31. (defun *error* ( msg )
  32.    (if acdoc (_EndUndo acdoc))
  33.    (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
  34.      (princ (strcat "\n** Error: " msg " **"))
  35.    )
  36.    (princ)
  37. )
  38. ;;------------------------------------------------------------;;
  39. (defun _StartUndo ( doc ) (_EndUndo doc)
  40.    (vla-StartUndoMark doc)
  41. )
  42. ;;------------------------------------------------------------;;
  43. (defun _EndUndo ( doc )
  44.    (if (= 8 (logand 8 (getvar 'UNDOCTL)))
  45.      (vla-EndUndoMark doc)
  46.    )
  47. )
  48. ;;------------------------------------------------------------;;
  49. (defun _Assoc++ ( key alist )
  50.    (
  51.      (lambda ( pair )
  52.        (if pair
  53.          (subst (list key (1+ (cadr pair))) pair alist)
  54.          (cons  (list key 1) alist)
  55.        )
  56.      )
  57.      (assoc key alist)
  58.    )
  59. )
  60. ;;------------------------------------------------------------;;
  61. (defun _SumAttributes ( entity alist )
  62.    (while
  63.      (not
  64.        (eq "SEQEND"
  65.          (cdr
  66.            (assoc 0
  67.              (entget
  68.                (setq entity (entnext entity))
  69.              )
  70.            )
  71.          )
  72.        )
  73.      )
  74.      (setq alist (_Assoc++ (_GetTextString entity) alist))
  75.    )
  76. )
  77. ;;------------------------------------------------------------;;
  78. (defun _GetTextString ( entity )   
  79.    (
  80.      (lambda ( string )
  81.        (mapcar
  82.          (function
  83.            (lambda ( pair )
  84.              (if (member (car pair) '(1 3))
  85.                (setq string (strcat string (cdr pair)))
  86.              )
  87.            )
  88.          )
  89.          (entget entity)
  90.        )
  91.        string
  92.      )
  93.      ""
  94.    )
  95. )
  96. ;;------------------------------------------------------------;;
  97. (defun _ApplyFooToSelSet ( foo ss / i )
  98.    (if ss (repeat (setq i (sslength ss)) (foo (ssname ss (setq i (1- i))))))
  99. )
  100. ;;------------------------------------------------------------;;
  101. (setq acdoc (vla-get-activedocument (vlax-get-acad-object))
  102.        acspc (vlax-get-property acdoc (if (= 1 (getvar 'CVPORT)) 'Paperspace 'Modelspace))
  103. )
  104. (cond
  105.    ( (= 4 (logand 4 (cdr (assoc 70 (tblsearch "LAYER" (getvar 'CLAYER))))))
  106.      (princ "\nCurrent Layer Locked.")
  107.    )
  108.    ( (not (vlax-method-applicable-p acspc 'AddTable))
  109.      (princ "\nTable Object not Available in this version.")
  110.    )
  111.    ( (and
  112.        (setq data
  113.          (_ApplyFooToSelSet
  114.            (lambda ( entity / typ )
  115.              (setq alist
  116.                (cond
  117.                  ( (eq "INSERT" (setq typ (cdr (assoc 0 (entget entity)))))
  118.                    (_SumAttributes entity alist)
  119.                  )
  120.                  ( (eq "MULTILEADER" typ)
  121.                    (_Assoc++ (cdr (assoc 304 (entget entity))) alist)
  122.                  )
  123.                  ( (wcmatch typ "*DIMENSION")
  124.                    (_Assoc++ (cdr (assoc 1 (entget entity))) alist)
  125.                  )
  126.                  ( (_Assoc++ (_GetTextString entity) alist) )
  127.                )
  128.              )
  129.            )
  130.            (ssget
  131.             '(
  132.                (-4 . "<OR")
  133.                  (0 . "TEXT,MTEXT,MULTILEADER")
  134.                  (-4 . "<AND")
  135.                    (0 . "INSERT")
  136.                    (66 . 1)
  137.                  (-4 . "AND>")
  138.                  (-4 . "<AND")
  139.                    (0 . "*DIMENSION")
  140.                    (1 . "*?*")
  141.                  (-4 . "AND>")
  142.                (-4 . "OR>")
  143.              )
  144.            )
  145.          )
  146.        )
  147.        (setq pt (getpoint "\nSpecify Point for Table: "))
  148.      )
  149.      (_StartUndo acdoc)
  150.      (LM:AddTable acspc (trans pt 1 0) "String Count"
  151.        (cons (list "String" "Instances")
  152.          (vl-sort
  153.            (mapcar
  154.              (function
  155.                (lambda ( x ) (list (car x) (itoa (cadr x))))
  156.              )
  157.              data
  158.            )
  159.            (function (lambda ( a b ) (< (car a) (car b))))
  160.          )            
  161.        )
  162.      )
  163.      (_EndUndo acdoc)
  164.    )
  165. )
  166. (princ)
  167. )
  168. ;;---------------------=={ Add Table }==----------------------;;
  169. ;;                                                            ;;
  170. ;;  Creates a VLA Table Object at the specified point,        ;;
  171. ;;  populated with title and data                             ;;
  172. ;;------------------------------------------------------------;;
  173. ;;  Author: Lee Mac, Copyright © 2011 - [url="http://www.lee-mac.com"]www.lee-mac.com[/url]       ;;
  174. ;;------------------------------------------------------------;;
  175. ;;  Arguments:                                                ;;
  176. ;;  space - VLA Block Object                                  ;;
  177. ;;  pt    - Insertion Point for Table                         ;;
  178. ;;  title - Table title                                       ;;
  179. ;;  data  - List of data to populate the table                ;;
  180. ;;------------------------------------------------------------;;
  181. ;;  Returns:  VLA Table Object                                ;;
  182. ;;------------------------------------------------------------;;
  183. (defun LM:AddTable (space pt title data / _isAnnotative textheight style )
  184. (defun _isAnnotative ( style / object annotx )
  185.    (and
  186.      (setq object (tblobjname "STYLE" style))
  187.      (setq annotx (cadr (assoc -3 (entget object '("AcadAnnotative")))))
  188.      (= 1 (cdr (assoc 1070 (reverse annotx))))
  189.    )
  190. )
  191. (
  192.    (lambda ( table ) (vla-put-StyleName table (getvar 'CTABLESTYLE)) (vla-SetText table 0 0 title)
  193.      (
  194.        (lambda ( row )
  195.          (mapcar
  196.            (function
  197.              (lambda ( rowitem ) (setq row (1+ row))
  198.                (
  199.                  (lambda ( column )
  200.                    (mapcar
  201.                      (function
  202.                        (lambda ( item )
  203.                          (vla-SetText table row (setq column (1+ column)) item)
  204.                        )
  205.                      )
  206.                      rowitem
  207.                    )
  208.                  )
  209.                  -1
  210.                )
  211.              )
  212.            )
  213.            data
  214.          )
  215.        )
  216.        0
  217.      )
  218.      table
  219.    )
  220.    (
  221.      (lambda ( textheight )
  222.        (vla-AddTable space (vlax-3D-point pt) (1+ (length data)) (length (car data)) textheight
  223.          (* 0.8 textheight
  224.            (apply 'max
  225.              (cons (/ (strlen title) (length (car data)))
  226.                (mapcar 'strlen (apply 'append data))
  227.              )
  228.            )
  229.          )
  230.        )
  231.      )
  232.      (* 2.
  233.        (/
  234.          (setq textheight
  235.            (vla-gettextheight
  236.              (setq style
  237.                (vla-item
  238.                  (vla-item
  239.                    (vla-get-dictionaries (vla-get-document space)) "ACAD_TABLESTYLE"
  240.                  )
  241.                  (getvar 'CTABLESTYLE)
  242.                )
  243.              )
  244.              acdatarow
  245.            )
  246.          )
  247.          (if (_isAnnotative (vla-gettextstyle style acdatarow))
  248.            (cond ( (getvar 'CANNOSCALEVALUE) ) ( 1.0 ))
  249.            1.0
  250.          )
  251.        )
  252.      )
  253.    )
  254. )
  255. )
  256. ;;------------------------------------------------------------;;
  257. ;;                         End of File                        ;;
  258. ;;------------------------------------------------------------;;

 
  1. (and (setq ss (ssget "_:L" '((0 . "LINE"))))
  2.     (while (setq en (ssname ss 0))
  3.            (setq ed (entget en))
  4.            (setq p10 (cdr (assoc 10 ed)))
  5.            (setq p11 (cdr (assoc 11 ed)))
  6.            (setq lyr (cdr (assoc 8 ed)))
  7. (if
  8.     (= lyr "s-frm-group1")(setq data "GROUP 1"))
  9.       (ssdel en ss)))
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:29:40 | 显示全部楼层
看这个,第一部分制作一个表,(VLA-SETTEXT OBJTABLE Y 0(NTH X LIST1))这将一个值放入由Y和X值给定的行和列中。这个示例使用repeat获得一个值列表,在您的示例中(VLA-SETTEXT OBJTABLE Y 0 value1),如果Y是1,那么它的第一行,列0,(VLA-SETTEXT OBJTABLE Y 1 Value2)这是同一行,但是第二列。不要混淆,它是从0开始的。
 
  1. ; untested code but should create a table
  2. (SETQ DOC (VLA-GET-ACTIVEDOCUMENT (VLAX-GET-ACAD-OBJECT)))
  3. (SETQ CURSPACE (VLA-GET-PAPERSPACE DOC))
  4. (SETQ PT1 (VLAX-3D-POINT (GETPOINT "\NPICK POINT FOR TOP LEFT HAND OF TABLE:  ")))
  5. ; NOW DO TABLE
  6. (SETQ NUMROWS 4))
  7. (SETQ NUMCOLUMNS 2)
  8. (SETQ ROWHEIGHT 0.2)
  9. (SETQ COLWIDTH 150)
  10. (SETQ OBJTABLE (VLA-ADDTABLE CURSPACE PT1 NUMROWS NUMCOLUMNS ROWHEIGHT COLWIDTH))
  11. (VLA-SETTEXT OBJTABLE 0 0 "DRAWING REGISTER") ; this top level
  12. (VLA-SETTEXT OBJTABLE 1 0 "DRAWING NUMBER") ; 2nd line down 1st column
  13. (VLA-SETTEXT OBJTABLE 1 1 "DRAWING TITLE") ; 2nd line down second column
  14. ; and this
  15. (SETQ X 0)
  16. (SETQ Y 2)
  17. (REPEAT 4
  18. (VLA-SETTEXT OBJTABLE Y 0 "value1")
  19. (VLA-SETTEXT OBJTABLE Y 1 "value2")
  20. (VLA-SETROWHEIGHT OBJTABLE Y 7)
  21. (SETQ X (+ X 1))
  22. (SETQ Y (+ Y 1))
  23. )
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 19:35:18 | 显示全部楼层
Tharwat我找到了你为圆圈写的Lisp程序。如果它可以拉出线路信息,它将为我所需要的工作。
 
层名称长度数量
示例1 5’3
示例1 2’5
示例2 5’10
 
  1. (defun c:Test (/ hgt spc d dia e ents inc increment Layers
  2.               insertionPoint tbl lengths lst r selectionset integer
  3.               selectionsetname
  4.              )
  5. (vl-load-com)
  6. ;;; Tharwat 21 . June . 2012 ;;;
  7. (if (not acdoc)
  8.    (setq acdoc (vla-get-activedocument (vlax-get-acad-object)))
  9. )
  10. (setq spc (if (> (vla-get-activespace acdoc) 0)
  11.              (vla-get-modelspace acdoc)
  12.              (vla-get-paperspace acdoc)
  13.            )
  14. )
  15. (setq
  16.    hgt (if
  17.          (zerop
  18.            (cdr
  19.              (assoc
  20.                40
  21.                (setq
  22.                  e (entget (tblobjname "STYLE" (getvar 'textstyle)))
  23.                )
  24.              )
  25.            )
  26.          )
  27.           (cdr (assoc 42 e))
  28.           (cdr (assoc 40 e))
  29.        )
  30. )
  31. (setq increment 1)
  32. (if (setq selectionset (ssget (list '(0 . "CIRCLE"))))
  33.    (progn
  34.      (repeat (setq integer (sslength selectionset))
  35.        (setq selectionsetname
  36.               (ssname selectionset
  37.                       (setq integer (1- integer))
  38.               )
  39.        )
  40.        (setq dia
  41.               (cons
  42.                 (cons (* (cdr (assoc 40 (entget selectionsetname))) 2.)
  43.                       (itoa increment)
  44.                 )
  45.                 dia
  46.               )
  47.        )
  48.        (setq ents (cons selectionsetname ents))
  49.        (setq increment (1+ increment))
  50.      )
  51.    )
  52. )
  53. (if (and dia
  54.           (setq insertionPoint (getpoint "\n Specify Table Location :"))
  55.      )
  56.    (progn
  57.      (setq tbl (vla-addtable
  58.                  spc
  59.                  (vlax-3d-point insertionPoint)
  60.                  (+ (length dia) 2)
  61.                  2
  62.                  (* hgt 2.5)
  63.                  (* hgt 2.5)
  64.                )
  65.      )
  66.      (setq inc -1
  67.            r   1
  68.      )
  69.      (repeat 2
  70.        (vla-setcolumnwidth tbl 0 (* hgt 10.))
  71.        (vla-setcolumnwidth tbl 1 (* hgt 10.))
  72.        (vla-setrowheight tbl (setq inc (1+ inc)) (* hgt 1.5))
  73.      )
  74.      (vla-settext tbl 0 0 "Circle's Diameters")
  75.      (vla-settext tbl 1 0 "Reference No.")
  76.      (vla-settext tbl 1 1 "Diameter Value")
  77.      (foreach x (reverse dia)
  78.        (vla-settext tbl (setq r (1+ r)) 0 (cdr x))
  79.        (vla-setcellalignment tbl r 0 acMiddleCenter)
  80.        (vla-settext tbl r 1 (rtos (car x) 2))
  81.        (vla-setcellalignment tbl r 1 acMiddleCenter)
  82.      )
  83.      (setq increment 1)
  84.      (foreach p (reverse ents)
  85.        (setq d (* (cdr (assoc 40 (entget p))) 2.))
  86.        (entmakex (list '(0 . "TEXT")
  87.                        (assoc 10 (entget p))
  88.                        (cons 11 (cdr (assoc 10 (entget p))))
  89.                        (cons 40
  90.                              (if (> increment 9)
  91.                                (/ d 1.5)
  92.                                (if (> hgt d)
  93.                                  d
  94.                                  hgt
  95.                                )
  96.                              )
  97.                        )
  98.                        (cons 1 (itoa increment))
  99.                        '(72 . 1)
  100.                        '(73 . 2)
  101.                  )
  102.        )
  103.        (setq increment (1+ increment))
  104.      )
  105.    )
  106. )
  107. (princ "\n Written by Tharwat Al Shoufi")
  108. (princ))
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 19:43:50 | 显示全部楼层
表代码的快速修改。
 
  1. (defun Table (lst / acdoc hgt d inc p e tbl r c)
  2. ;;; Tharwat 11 . July . 2015 ;;;
  3. (if (and lst
  4.           (setq p (getpoint "\n Specify Table Location :"))
  5.      )
  6.    (progn
  7.      (setq acdoc (vla-get-activedocument (vlax-get-acad-object))
  8.            hgt   (if
  9.                    (zerop
  10.                      (cdr
  11.                        (assoc
  12.                          40
  13.                          (setq
  14.                            e
  15.                             (entget (tblobjname "STYLE" (getvar 'textstyle))
  16.                             )
  17.                          )
  18.                        )
  19.                      )
  20.                    )
  21.                     (cdr (assoc 42 e))
  22.                     (cdr (assoc 40 e))
  23.                  )
  24.            tbl   (vla-addtable
  25.                    (vla-get-block (vla-get-activelayout acdoc))
  26.                    (vlax-3d-point p)
  27.                    (+ (length lst) 2)
  28.                    3
  29.                    (* hgt 2.5)
  30.                    (* hgt 2.5)
  31.                  )
  32.            inc   -1
  33.            r     1
  34.      )
  35.      (vla-settext tbl 0 0 "Summary")
  36.      (vla-settext tbl 1 0 "Layer Name")
  37.      (vla-setcolumnwidth tbl 0 (* hgt 8.))
  38.      (vla-settext tbl 1 1 "Length")
  39.      (vla-setcolumnwidth tbl 1 (* hgt 6.))
  40.      (vla-settext tbl 1 2 "QTY")
  41.      (vla-setcolumnwidth tbl 2 (* hgt 4.))
  42.      (mapcar '(lambda (i) (vla-setrowheight tbl i (* hgt 1.5))) '(0 1))
  43.      (foreach v lst
  44.        (setq c -1
  45.              r (1+ r)
  46.        )
  47.        (foreach x v
  48.          (vla-settext tbl r (setq c (1+ c)) x)
  49.          (vla-setrowheight tbl r (* hgt 1.5))
  50.          (vla-setcellalignment tbl r c acMiddleCenter)
  51.        )
  52.      )
  53.    )
  54. )
  55. (princ)
  56. )(vl-load-com)

 
用法:
 
  1. (Table '(("a" "b" 1) ("c" "d" 2) ("e" "f" 3)))
回复

使用道具 举报

33

主题

96

帖子

65

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
170
发表于 2022-7-5 19:46:27 | 显示全部楼层
塔尔瓦特,
谢谢你调整代码,但我做得还不够。我找到了这段多段线代码,并做了一些修改。但我还是得不到我需要的。我得到了我想要的3列。但我不知道如何让它在一行中添加相同的产品,并根据我选择的产品数量保持行添加。
 
层名称长度数量
示例1 5’3
示例1 2’5
示例2 5’10
 
  1. (vl-load-com)
  2. (defun C:mat ( / *MS* A CNT I LST MYTABLE PT1 ROW SSET TLST)
  3. ; create an empty list, set a counter variable, and
  4. ; set a reference to the current model space.
  5. (setq lst '()
  6. i 0
  7. *ms* (vla-get-modelspace
  8.             (vla-get-activedocument
  9.             (vlax-get-acad-object)))
  10. )
  11. ; prompt the user to select lines
  12. (princ "\n Select closed lines ")
  13. (if (setq sset (ssget "_:L" '((0 . "LINE");(-4 . "&")
  14.    ;(70 . 1)
  15.    )))
  16.      (progn     (setq en (ssname sset 0))
  17.            (setq ed (entget en))
  18.            (setq k (sslength sset))
  19.            (setq p10 (cdr (assoc 10 ed)))
  20.            (setq p11 (cdr (assoc 11 ed)))
  21.            (setq lyr (cdr (assoc 8 ed)))
  22.            (setq depth (cdr (assoc 39 ed)))
  23.            (setq mpt (mapcar '(lambda (a b) (* (+ a b) 0.5)) p10 p11))
  24.            (setq d2d (distance (cdr (reverse p10)) (cdr (reverse p11))))
  25.            (setq d1d (/ d2d 12.))
  26.            (setq d1c (fix d1d))
  27.        (if (> d1d d1c)
  28.     (setq d2c (+ d1c 1)))
  29.        (if (<= d1d d1c)
  30.     (setq d2c d1c))
  31.        (if
  32.            (= lyr "s-frm-blk")(setq lyr2 "BLK"))
  33.        (if
  34.            (= lyr "S-FRM-BLK")(setq lyr2 "BLK"))
  35.   
  36.      ; and store these values in a list.
  37.      (repeat (setq cnt (sslength sset))
  38.        (setq a (vlax-ename->vla-object (ssname sset i)))
  39.        (setq tlst (list (vla-get-length a) (vla-get-ObjectID a)))
  40.        (setq lst (cons tlst lst))
  41.        (setq i (1+ i))
  42.      )
  43.      ; pick a point for the table
  44.      (setq pt1 (getpoint "\nPick point for table "))
  45.      ; add the new table
  46.      (setq myTable (vla-AddTable
  47.                    *ms*
  48.                    (vlax-3d-point pt1)
  49.                    (+ 3 cnt)
  50.                    3
  51.                    0.7
  52.                    2.5))
  53.      ; the next three lines set the header text
  54.      (vla-setText mytable 0 0 "Title")
  55.      (vla-setText mytable 1 0 "Length")
  56.      (vla-setText mytable 1 1 "Product")
  57.      (vla-setText mytable 1 2 "Qty")
  58.      (setq row 2)
  59.      
  60.      ; loop through the list of line properties
  61.      ; adding a line to the table that contains the
  62.      ; area and the length
  63.      (foreach item lst
  64.        (vla-setText mytable
  65.                     row
  66.                     0
  67.                    (strcat "%<[url="file://\\AcObjProp"]\\AcObjProp[/url] Object(%<\_ObjId " (itoa (last item)) ">%).Length [url="file://\\f"]\\f[/url] "%lu4">%"))
  68.           ; (itoa d2c)   )
  69.         (vla-setText mytable row 1 (last item))
  70.        (setq row (1+ row))
  71.      )      
  72.      ; product
  73.    (foreach item lst
  74. (vla-setText mytable
  75.                   row
  76.                   1
  77. (setq tch (strcat lyr2)))
  78.      (vla-setText mytable row 1 (last item))
  79.        (setq row (1+ row)))
  80.                   ;(strcat "Total=\\P"
  81.                   ;"%<[url="file://\\AcExpr"]\\AcExpr[/url] (Sum(A3:A" (itoa (+ 2 cnt)) ")) [url="file://\\f"]\\f[/url] "%lu2">%"))
  82.      ; release "myTable" and *ms*
  83.      (vlax-release-object myTable)      
  84.      (vlax-release-object *ms*)      
  85.    ); end progn
  86. ); end if
  87. (princ)
  88. ); end defun
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 13:32 , Processed in 0.473922 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表