乐筑天下

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

[编程交流] 动态块提取到表

[复制链接]

6

主题

62

帖子

57

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 17:12:06 | 显示全部楼层 |阅读模式
你好
 
我正在尝试编写一个LISP例程,将图形中许多特定动态块的特定属性制成表格。我设法找到了下面的代码(多亏了Fixo?和HMSilva),它被修改为只识别外部参照块。如何删除对此进行测试的逻辑?我已经确定了测试这种情况的代码(IsXref),但如何消除这种情况我一直没有找到。
 
最后,我想在表中包括每个块的起点和终点的坐标。
 
  1. ;| http://www.cadtutor.net/forum/showthread.php?83991-Populate-Table
  2. Original by Oleg Fateev
  3. Modified by hms 2014/11/14
  4. as a 'demo' to JCprog
  5. http://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/extract-attributes-from-a-specific-block-and-write-to-table/m-p/5399759#U5399759
  6. |;
  7. (defun C:CLIST (/ a1 a2 a3 acapp acsp adoc atable attdata atts col headers pt row title)
  8. (or adoc
  9.      (setq adoc (vla-get-activedocument (setq acapp (vlax-get-acad-object))))
  10. )
  11. (or acsp
  12.      (setq acsp (vla-get-block (vla-get-activelayout adoc)))
  13. )
  14. (vlax-for blk (vla-get-blocks adoc)
  15.    (if (= (vla-get-IsXref blk) :vlax-true) ;<-***
  16.      (vlax-for x blk
  17.        (if (and (= (vla-get-ObjectName x) "AcDbBlockReference")
  18.                 (wcmatch (vla-get-EffectiveName x) "*|Duct")
  19.            )
  20.          (progn
  21.            (setq atts (vlax-invoke x 'getattributes))
  22.            (foreach att atts
  23.              (cond ((wcmatch (vla-get-tagstring att) "DUCT_START")
  24.                     (setq a1 (vla-get-textstring att))
  25.                    )
  26.                    ((wcmatch (vla-get-tagstring att) "DUCT_END")
  27.                     (setq a2 (vla-get-textstring att))
  28.                    )
  29.                    ((wcmatch (vla-get-tagstring att) "DUCTTYPE")
  30.                     (setq a3 (vla-get-textstring att))
  31.                    )
  32.              )
  33.            )
  34.            (setq attdata (cons (list a1 a2 a3) attdata))
  35.          )
  36.        )
  37.      )
  38.   
  39. )
  40. (if (setq pt (getpoint "\nSpecify table location:"))
  41.    (progn
  42.      (setq atable
  43.             (vla-addtable
  44.               acsp
  45.               (vlax-3d-point pt)
  46.               (+ 2 (length attdata))
  47.               3
  48.               (/ (getvar 'dimtxt) 2)
  49.               (* (getvar 'dimtxt) 4)
  50.             )
  51.      )
  52.      (vla-put-regeneratetablesuppressed atable :vlax-true)
  53.      (setq col 0)
  54.      (foreach wid (list 10.0 10.0)
  55.        (vla-setcolumnwidth atable col wid)
  56.        (setq col (1+ col))
  57.      )
  58.      (vla-put-horzcellmargin atable 0.3)
  59.      (vla-put-vertcellmargin atable 0.3)
  60.      (vla-setTextheight atable 1 2.0)
  61.      (vla-setTextheight atable 2 1.4)
  62.      (vla-setTextheight atable 4 1.4)
  63.      (setq title "DUCTS")
  64.      (vla-setText atable 0 0 title)
  65.      (vla-setcelltextheight atable 0 0 2.0)
  66.      (vla-SetCellAlignment atable 0 0 acMiddleCenter)
  67.      (setq headers (list "START" "END" "TYPE"))
  68.      (setq row 1
  69.            col 0
  70.      )
  71.      (repeat (length headers)
  72.        (vla-SetCellAlignment atable row col acMiddleCenter)
  73.        (vla-setcelltextheight atable row col 1.4)
  74.        (vla-setText atable row col (car headers))
  75.        (setq headers (cdr headers))
  76.        (setq col (1+ col))
  77.      )
  78.      (setq row 2)
  79.      (foreach record attdata
  80.        (setq col 0)
  81.        (foreach item record
  82.          (vla-setText atable row col item)
  83.          (vla-SetCellAlignment atable row col acMiddleCenter)
  84.          (vla-setcelltextheight atable row col 1.4)
  85.          (setq col (1+ col))
  86.        )
  87.        (setq row (1+ row))
  88.      )
  89.      (vla-put-regeneratetablesuppressed atable :vlax-false)
  90.      (vla-put-height atable (+ (* (vla-get-rows atable) 2.2) 4.1))
  91.      (vla-update atable)
  92.    )
  93. )
  94. (princ)
  95. )
  96. (prompt "\n\t---\tStart command with CLIST\t---\n")
  97. (prin1)
  98. (or (vl-load-com))
  99. (princ)
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-5 17:17:49 | 显示全部楼层
你好
 
 
感谢您的输入,但我要做的更多的是从动态块中提取数据。
回复

使用道具 举报

6

主题

62

帖子

57

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 17:19:13 | 显示全部楼层
 
Spaj,请清楚解释一个块及其坐标,如表所示,以及何时添加减号或加号。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:22:10 | 显示全部楼层
嗨Tharwat
 
抱歉给你带来了困惑。附件是一个示例。简单地说,在AutoCAD中生成的余词需要进行转置,即X成为Y值,Y成为X值,但符号相反。
 
管道示例1。图纸
 
这是由于SA中的非标准测量坐标系是向南的,角度测量是逆时针的,坐标系引用Y然后X。AutoCAD中的最佳折衷方案是在第三象限笛卡尔坐标系中工作(其中X和Y值为-ve)。这允许正确的方向和坐标值的正确顺序,但缺点是这些值的符号不正确。因此,所有引用的同词都需要转置和签名。
回复

使用道具 举报

6

主题

62

帖子

57

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 17:27:50 | 显示全部楼层
你好
 
您可能知道如何消除逻辑来检查块是否为附加代码中的外部参照吗?
 
  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 xxx jobs
  21. (progn
  22. (setq bname "XXXX_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. ) ; end foreach
  46. ) ; end repeat
  47. (setvar 'ctab curlayout)
  48. (command "Zoom" "E")
  49. (command "regen")
  50. (reverse list1)
  51. ;(reverse list2)
  52. ; now do table
  53. (setq numrows (+ 2 (sslength ss1)))
  54. (setq numcolumns 2)
  55. (setq rowheight 0.2)
  56. (setq colwidth 150)
  57. (setq objtable (vla-addtable curspace pt1 numrows numcolumns rowheight colwidth))
  58. (vla-settext objtable 0 0 "DRAWING REGISTER")
  59. (vla-settext objtable 1 0 "DRAWING NUMBER")
  60. (vla-settext objtable 1 1 "DRAWING TITLE")
  61. (SETQ X 0)
  62. (SETQ Y 2)
  63. (REPEAT (sslength ss1)
  64. (vla-settext objtable Y 0 (NTH X LIST1))
  65. (vla-settext objtable Y 1 (NTH X LIST2))
  66. (vla-setrowheight objtable y 7)
  67. (SETQ X (+ X 1))
  68. (SETQ Y (+ Y 1))
  69. )
  70. (vla-setcolumnwidth objtable 0 55)
  71. (vla-setcolumnwidth objtable 1 170)
  72. (command "_zoom" "e")
  73. ); end AH defun
  74. (AH:dwgindex)
  75. (princ)
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:28:32 | 显示全部楼层
只要变量是局部的,or函数的用途是什么?
回复

使用道具 举报

6

主题

62

帖子

57

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 17:32:26 | 显示全部楼层
嗨,李
 
 
谢谢,成功了。我把注释去掉了if语句和相应的括号,但没有去掉管道!管道的意义是什么?
 
不幸的是,我现在有一个ActiveX服务器返回了一个错误:参数不是
代码其余部分中的可选项。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 17:35:26 | 显示全部楼层
你好,Marko
 
谢谢你的投入,但这似乎不起作用。例程无法识别指定的块。
回复

使用道具 举报

6

主题

62

帖子

57

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 17:38:01 | 显示全部楼层
 
包含管道字符的表格名称(即图层、块、线型等)是与外部参照相关的项目,管道左侧的内容等于从中派生的外部参照的名称。
 
 
你能发布你当前修改过的代码吗?
回复

使用道具 举报

6

主题

62

帖子

57

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 17:41:49 | 显示全部楼层
 
啊哈,如果你能理解这些细微差别,这会有所帮助。
 
 
当然
 
CList_管道。LSP
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 09:34 , Processed in 0.464094 second(s), 72 queries .

© 2020-2025 乐筑天下

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